PK7“;“×2EGG-INFO/dependency_links.txt PK8“;ÍÒ11EGG-INFO/native_libs.txtpygr/cdict.so pygr/cnestedlist.so pygr/seqfmt.so PK8“;“×2EGG-INFO/not-zip-safe PK7“;ˆ™>É‘‘EGG-INFO/PKG-INFOMetadata-Version: 1.0 Name: pygr Version: 0.8.1 Summary: Pygr, a Python graph-database toolkit oriented primarily on bioinformatics Home-page: http://code.google.com/p/pygr/ Author: Christopher Lee Author-email: leec@chem.ucla.edu License: New BSD License Description: Pygr ==== Pygr is an open source software project used to develop graph database interfaces for the popular Python language, with a strong emphasis on bioinformatics applications ranging from genome-wide analysis of alternative splicing patterns, to comparative genomics queries of multi-genome alignment data. Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Operating System :: MacOS :: MacOS X Classifier: Operating System :: Microsoft :: Windows :: Windows NT/2000 Classifier: Operating System :: OS Independent Classifier: Operating System :: POSIX Classifier: Operating System :: POSIX :: Linux Classifier: Operating System :: Unix Classifier: Programming Language :: Python Classifier: Topic :: Scientific/Engineering Classifier: Topic :: Scientific/Engineering :: Bio-Informatics PK7“;@vØ EGG-INFO/SOURCES.txtLICENSE.txt MANIFEST.in README.txt setup.cfg setup.py doc/Makefile doc/rest/conf.py doc/rest/contents.rst doc/rest/guidelist.rst doc/rest/sequences.rst doc/rest/team.rst doc/rest/whatsnew.rst doc/rest/guides/devguide.rst doc/rest/guides/libnclist.rst doc/rest/guides/testing.rst doc/rest/recipes/alignment_recipes.rst doc/rest/reference/annotation.rst doc/rest/reference/blast.rst doc/rest/reference/classutil.rst doc/rest/reference/cnestedlist.rst doc/rest/reference/coordinator.rst doc/rest/reference/downloader.rst doc/rest/reference/mapping.rst doc/rest/reference/metabase.rst doc/rest/reference/seqdb.rst doc/rest/reference/sequence.rst doc/rest/reference/sequtil.rst doc/rest/reference/sqlgraph.rst doc/rest/reference/worldbase.rst doc/rest/static/contents.png doc/rest/static/data-browser.png doc/rest/static/pygr-doc.css doc/rest/static/pygr-epydoc.css doc/rest/static/pygr-logo.gif doc/rest/templates/index.html doc/rest/templates/indexsidebar.html doc/rest/templates/layout.html doc/rest/templates/media.html doc/rest/tutorials/alignment.rst doc/rest/tutorials/annotating-yeast.rst doc/rest/tutorials/annotation.rst doc/rest/tutorials/annotation2.rst doc/rest/tutorials/compgenomics.rst doc/rest/tutorials/db.rst doc/rest/tutorials/db_basic.rst doc/rest/tutorials/develop.rst doc/rest/tutorials/gene.rst doc/rest/tutorials/graphquery.rst doc/rest/tutorials/sequence.rst doc/rest/tutorials/slice_pickle_obj.py doc/rest/tutorials/worldbase.rst doc/rest/tutorials/worldbase2.rst doc/rest/tutorials/xmlrpc.rst misc/pygrrc.example misc/debian/changelog misc/debian/compat misc/debian/control misc/debian/copyright misc/debian/pycompat misc/debian/rules misc/debian/watch misc/fink/pygr-doc.info misc/fink/pygr-py.info misc/portage/pygr-9999.ebuild misc/portage/pygr-VER.ebuild pygr/Data.py pygr/__init__.py pygr/annotation.py pygr/blast.py pygr/cdict.c pygr/cdict.pxd pygr/cdict.pyx pygr/cgraph.c pygr/cgraph.h pygr/classutil.py pygr/cnestedlist.c pygr/cnestedlist.pxd pygr/cnestedlist.pyx pygr/coordinator.py pygr/dbfile.py pygr/default.h pygr/downloader.py pygr/graphquery.py pygr/intervaldb.c pygr/intervaldb.h pygr/logger.py pygr/mapping.py pygr/metabase.py pygr/nlmsa_utils.py pygr/parse_blast.py pygr/schema.py pygr/seqdb.py pygr/seqfmt.c pygr/seqfmt.pyx pygr/sequence.py pygr/sequtil.py pygr/sqlgraph.py pygr/translationDB.py pygr/xnestedlist.py pygr.egg-info/PKG-INFO pygr.egg-info/SOURCES.txt pygr.egg-info/dependency_links.txt pygr.egg-info/top_level.txt pygr/apps/__init__.py pygr/apps/catalog_downloads.py pygr/apps/leelabdb.py pygr/apps/maf2VSgraph.py pygr/apps/maf2nclist.c pygr/apps/maf2nclist.h pygr/apps/maf2nclist.py pygr/apps/seqref.py pygr/apps/splicegraph.py tests/README.txt tests/annotation_dm2_megatest.py tests/annotation_hg18_megatest.py tests/annotation_test.py tests/blast_test.py tests/doctests_test.py tests/downloadNLMSA_megatest.py tests/graph_test.py tests/metabase_test.py tests/nlmsa_dm2_megatest.py tests/nlmsa_hg18_megatest.py tests/nlmsa_test.py tests/pairwise_hg18_megatest.py tests/pygrdata_test.py tests/restartIterator_megatest.py tests/runtest.py tests/seqdb_test.py tests/sequence_test.py tests/sqlsequence_test.py tests/sqltable_test.py tests/translationDB_test.py tests/worldbase_test.py tests/data/alignments.fa tests/data/bad_tblastn.txt tests/data/blastp_output.txt tests/data/blastx_output.txt tests/data/dnaseq.fasta tests/data/exontuples.txt tests/data/funnyseq.fasta tests/data/gapping.fa tests/data/hbb1_mouse.fa tests/data/hbb1_mouse_rc.fa tests/data/multiblast_long_correct.txt tests/data/multiblast_long_output.txt tests/data/multiblast_output.txt tests/data/partial-yeast.fasta tests/data/prefixUnionDict-1.txt tests/data/prefixUnionDict-2.txt tests/data/prefixUnionDict-3.txt tests/data/sp_all_hbb tests/data/sp_hbb1 tests/data/tblastn_output.txt tests/data/test.gz tests/data/test.zip tests/testlib/__init__.py tests/testlib/megatest_utils.py tests/testlib/pathfix.py tests/testlib/pygrdata_server.py tests/testlib/testoptions.py tests/testlib/testutil.py tests/testlib/unittest_extensions.py tests/tools/run_megatests tests/tools/send_megatest_email.pyPK7“; ׃™EGG-INFO/top_level.txtpygr PK%“ˆ;$büúGGpygr/__init__.pyimport sys __version__ = "0.8.1" try: worldbase except NameError: import metabase mdb = metabase.MetabaseList() # use default WORLDBASEPATH worldbase = mdb.Data if sys.version_info < (2, 6): def dir(obj): """provide Python 2.6+ style __dir__ support """ try: get_dir = obj.__dir__ except AttributeError: return __builtins__['dir'](obj) else: return get_dir() else: # Python 2.6 or later, just use the builtin dir() dir = __builtins__['dir'] __all__ = ('__version__', 'worldbase', 'dir') PK7“;‚s`‹’’pygr/__init__.pyc;ò ‡ Kc@s‹dkZdZyeWn1ej o%dkZeiƒZeiZnXeiddfjo d„Z n e dZ dddfZ dS(Ns0.8.1iicCs<y |i}Wn!tj otd|ƒSn X|ƒSdS(s*provide Python 2.6+ style __dir__ support sdirN(sobjs__dir__sget_dirsAttributeErrors __builtins__(sobjsget_dir((s3build/bdist.darwin-8.11.1-i386/egg/pygr/__init__.pysdir s  sdirs __version__s worldbase( ssyss __version__s worldbases NameErrorsmetabases MetabaseListsmdbsDatas version_infosdirs __builtins__s__all__(smetabases worldbases__all__smdbssyss __version__sdir((s3build/bdist.darwin-8.11.1-i386/egg/pygr/__init__.pys?s    PK7“;‚s`‹’’pygr/__init__.pyo;ò ‡ Kc@s‹dkZdZyeWn1ej o%dkZeiƒZeiZnXeiddfjo d„Z n e dZ dddfZ dS(Ns0.8.1iicCs<y |i}Wn!tj otd|ƒSn X|ƒSdS(s*provide Python 2.6+ style __dir__ support sdirN(sobjs__dir__sget_dirsAttributeErrors __builtins__(sobjsget_dir((s3build/bdist.darwin-8.11.1-i386/egg/pygr/__init__.pysdir s  sdirs __version__s worldbase( ssyss __version__s worldbases NameErrorsmetabases MetabaseListsmdbsDatas version_infosdirs __builtins__s__all__(smetabases worldbases__all__smdbssyss __version__sdir((s3build/bdist.darwin-8.11.1-i386/egg/pygr/__init__.pys?s    PKd—~;Æ.X¯lHlHpygr/annotation.pyfrom __future__ import generators from sequence import * import classutil import UserDict import weakref def getAnnotationAttr(self, attr): 'forward attributes from slice object if available' return self.db.getSliceAttr(self.db.sliceDB[self.id], attr) def annotation_repr(self): if self.annotationType is not None: title = self.annotationType else: title = 'annot' if self.orientation > 0: return '%s%s[%d:%d]' % (title, self.id, self.start, self.stop) else: return '-%s%s[%d:%d]' % (title, self.id, -self.stop, -self.start) class AnnotationSeqDescr(object): 'get the sequence interval corresponding to this annotation' def __get__(self, obj, objtype): return absoluteSlice(obj._anno_seq, obj._anno_start, obj._anno_start + obj.stop) class AnnotationSliceDescr(object): 'get the sequence interval corresponding to this annotation' def __get__(self, obj, objtype): return relativeSlice(obj.pathForward.sequence, obj.start, obj.stop) class AnnotationSeqtypeDescr(object): 'get seqtype of the sequence interval corresponding to this annotation' def __get__(self, obj, objtype): return obj._anno_seq.seqtype() class AnnotationSeq(SeqPath): 'base class representing an annotation' start = 0 step = 1 orientation = 1 def __init__(self, id, db, parent, start, stop): self.id = id self.db = db self.stop = stop - start self._anno_seq = parent self._anno_start = start self.path = self __getattr__ = getAnnotationAttr sequence = AnnotationSeqDescr() annotationType = classutil.DBAttributeDescr('annotationType') _seqtype = AnnotationSeqtypeDescr() __repr__ = annotation_repr def __cmp__(self, other): if not isinstance(other, AnnotationSeq): return -1 if cmp(self.sequence, other.sequence) == 0: if self.id == other.id and self.db is other.db: return cmp((self.start, self.stop), (other.start, other.stop)) return NOT_ON_SAME_PATH def strslice(self, start, stop): raise ValueError('''this is an annotation, and you cannot get a sequence string from it. Use its sequence attribute to get a sequence object representing this interval. ''') class AnnotationSlice(SeqDBSlice): 'represents subslice of an annotation' __getattr__=getAnnotationAttr sequence = AnnotationSliceDescr() annotationType = classutil.DBAttributeDescr('annotationType') __repr__ = annotation_repr class TranslationAnnotSeqDescr(object): 'get the sequence interval corresponding to this annotation' def __get__(self, obj, objtype): return absoluteSlice(obj._anno_seq, obj._anno_start, obj._anno_stop) class TranslationAnnotFrameDescr(object): """Get the frame of this protein translation, relative to original DNA.""" def __get__(self, obj, objtype): orig = obj.pathForward.sequence if orig.orientation > 0: frame = (orig.start % 3) + 1 else: return -((orig.start + 1) % 3 + 1) return frame class TranslationAnnot(AnnotationSeq): 'annotation representing aa translation of a given nucleotide interval' def __init__(self, id, db, parent, start, stop): AnnotationSeq.__init__(self, id, db, parent, start, stop) self.stop /= 3 self._anno_stop = stop sequence = TranslationAnnotSeqDescr() frame = TranslationAnnotFrameDescr() _seqtype = PROTEIN_SEQTYPE def strslice(self, start, stop): 'get the aa translation of our associated ORF' try: aa = self._translation except AttributeError: aa = self._translation = translate_orf(str(self.sequence)) return aa[start:stop] class TranslationAnnotSliceDescr(object): 'get the sequence interval corresponding to this annotation' def __get__(self, obj, objtype): return relativeSlice(obj.pathForward.sequence, 3 * obj.start, 3 * obj.stop) class TranslationAnnotSlice(AnnotationSlice): sequence = TranslationAnnotSliceDescr() frame = TranslationAnnotFrameDescr() class AnnotationDB(object, UserDict.DictMixin): 'container of annotations as specific slices of db sequences' def __init__(self, sliceDB, seqDB, annotationType=None, itemClass=AnnotationSeq, itemSliceClass=AnnotationSlice, itemAttrDict=None, # GET RID OF THIS BACKWARDS-COMPATIBILITY KLUGE!! sliceAttrDict=None, maxCache=None, autoGC=True, checkFirstID=True, **kwargs): '''sliceDB must map identifier to a sliceInfo object; sliceInfo must have attributes: id, start, stop, orientation; seqDB must map sequence ID to a sliceable sequence object; sliceAttrDict gives optional dict of item attributes that should be mapped to sliceDB item attributes. maxCache specfies the maximum number of annotation objects to keep in the cache.''' if autoGC: # automatically garbage collect unused objects self._weakValueDict = classutil.RecentValueDictionary(autoGC) else: self._weakValueDict = {} # object cache self.autoGC = autoGC if sliceAttrDict is None: sliceAttrDict = {} if sliceDB is not None: self.sliceDB = sliceDB else: # NEED TO CREATE / OPEN A DATABASE FOR THE USER self.sliceDB = classutil.get_shelve_or_dict(**kwargs) self.seqDB = seqDB self.annotationType = annotationType self.itemClass = itemClass self.itemSliceClass = itemSliceClass self.sliceAttrDict = sliceAttrDict # USER-PROVIDED ALIASES if maxCache is not None: self.maxCache = maxCache if checkFirstID: try: # don't cache anything now; schema may change itemClass! k = iter(self).next() # get the first ID if any self.get_annot_obj(k, self.sliceDB[k]) # valid annotation? except KeyError: # a convenient warning to the user... raise KeyError('''\ cannot create annotation object %s; sequence database %s may not be correct''' % (k, repr(seqDB), )) except StopIteration: pass # dataset is empty so there is nothing we can check... __getstate__ = classutil.standard_getstate ############### PICKLING METHODS __setstate__ = classutil.standard_setstate _pickleAttrs = dict(sliceDB=0, seqDB=0, annotationType=0, autoGC=0, itemClass=0, itemSliceClass=0, sliceAttrDict=0, maxCache=0) def __hash__(self): # @CTB unnecessary?? 'ALLOW THIS OBJECT TO BE USED AS A KEY IN DICTS...' return id(self) def __getitem__(self, k): 'get annotation object by its ID' try: # GET FROM OUR CACHE return self._weakValueDict[k] except KeyError: pass return self.sliceAnnotation(k, self.sliceDB[k]) def __setitem__(self, k, v): raise KeyError('''you cannot save annotations directly using annoDB[k] = v. Instead, use annoDB.new_annotation(k,sliceInfo) where sliceInfo provides a sequence ID, start, stop (and any additional info desired), and will be saved directly to the sliceDB.''') def getSliceAttr(self, sliceInfo, attr): try: k = self.sliceAttrDict[attr] # USE ALIAS IF PROVIDED except KeyError: return getattr(sliceInfo, attr) # GET ATTRIBUTE AS USUAL try: # REMAP TO ANOTHER ATTRIBUTE NAME return getattr(sliceInfo, k) except TypeError: # TREAT AS int INDEX INTO A TUPLE return sliceInfo[k] def get_annot_obj(self, k, sliceInfo): 'create an annotation object based on the input sliceInfo' start = int(self.getSliceAttr(sliceInfo, 'start')) stop = int(self.getSliceAttr(sliceInfo, 'stop')) try: orientation = self.getSliceAttr(sliceInfo, 'orientation') orientation = int(orientation) if orientation < 0 and start >= 0: start, stop = (-stop, -start) # Negative-orientation coords except (AttributeError, IndexError): pass # ok if no orientation is specified. if start >= stop: raise IndexError('annotation %s has zero or negative length \ [%s:%s]!' % (k, start, stop)) seq_id = self.getSliceAttr(sliceInfo, 'id') seq = self.seqDB[seq_id] return self.itemClass(k, self, seq, start, stop) def sliceAnnotation(self, k, sliceInfo, limitCache=True): 'create annotation and cache it' a = self.get_annot_obj(k, sliceInfo) try: # APPLY CACHE SIZE LIMIT IF ANY if limitCache and self.maxCache < len(self._weakValueDict): self._weakValueDict.clear() except AttributeError: pass self._weakValueDict[k] = a # CACHE THIS IN OUR DICT return a def new_annotation(self, k, sliceInfo): 'save sliceInfo to the annotation database \ and return annotation object' # First, check if it gives a valid annotation a = self.sliceAnnotation(k, sliceInfo) try: # Now, save it in the slice database self.sliceDB[k] = sliceInfo except: try: # Delete it from cache del self._weakValueDict[k] except: pass raise self._wroteSliceDB = True return a def foreignKey(self, attr, k): 'iterate over items matching specified foreign key' for t in self.sliceDB.foreignKey(attr, k): try: # get from cache if exists yield self._weakValueDict[t.id] except KeyError: yield self.sliceAnnotation(t.id, t) def __contains__(self, k): return k in self.sliceDB def __len__(self): return len(self.sliceDB) def __iter__(self): return iter(self.sliceDB) ########## ITERATORS def keys(self): return self.sliceDB.keys() def iteritems(self): 'uses maxCache to manage caching of annotation objects' for k, sliceInfo in self.sliceDB.iteritems(): yield k, self.sliceAnnotation(k, sliceInfo) def itervalues(self): 'uses maxCache to manage caching of annotation objects' for k, v in self.iteritems(): yield v def items(self): 'forces load of all annotation objects into cache' return [(k, self.sliceAnnotation(k, sliceInfo, limitCache=False)) for (k, sliceInfo) in self.sliceDB.items()] def values(self): 'forces load of all annotation objects into cache' return [self.sliceAnnotation(k, sliceInfo, limitCache=False) for (k, sliceInfo) in self.sliceDB.items()] def add_homology(self, seq, search, id=None, idFormat='%s_%d', autoIncrement=False, maxAnnot=999999, maxLoss=None, sliceInfo=None, **kwargs): 'find homology in our seq db and add as annotations' try: # ENSURE THAT sliceAttrDict COMPATIBLE WITH OUR TUPLE FORMAT if self.sliceAttrDict['id'] != 0: raise KeyError except KeyError: sliceAttrDict['id'] = 0 # USE TUPLE AS OUR INTERNAL STANDARD FORMAT sliceAttrDict['start'] = 1 sliceAttrDict['stop'] = 2 if autoIncrement: id = len(self.sliceDB) elif id is None: id = seq.id if isinstance(search, str): # GET SEARCH METHOD search = getattr(self.seqDB, search) if isinstance(seq, str): # CREATE A SEQ OBJECT seq = Sequence(seq, str(id)) al = search(seq, **kwargs) # RUN THE HOMOLOGY SEARCH if maxLoss is not None: # REQUIRE HIT BE AT LEAST A CERTAIN LENGTH kwargs['minAlignSize'] = len(seq)-maxLoss hits = al[seq].keys(**kwargs) # OBTAIN LIST OF HIT INTERVALS if len(hits) > maxAnnot: raise ValueError('too many hits for %s: %d' % (id, len(hits))) out = [] i = 0 k = id for ival in hits: # CREATE ANNOTATION FOR EACH HIT if len(hits)>1: # NEED TO CREATE AN ID FOR EACH HIT if autoIncrement: k = len(self.sliceDB) else: k = idFormat % (id, i) i += 1 if sliceInfo is not None: # SAVE SLICE AS TUPLE WITH INFO a = self.new_annotation(k, (ival.id, ival.start, ival.stop) + sliceInfo) else: a = self.new_annotation(k, (ival.id, ival.start, ival.stop)) out.append(a) # RETURN THE ANNOTATION return out def close(self): 'if sliceDB needs to be closed, do it and return True, otherwise False' try: if self._wroteSliceDB: self.sliceDB.close() self._wroteSliceDB = False # DISK FILE IS UP TO DATE return True except AttributeError: pass return False def __del__(self): if self.close(): import sys print >>sys.stderr, ''' WARNING: you forgot to call AnnotationDB.close() after writing new annotation data to it. This could result in failure to properly store the data in the associated disk file. To avoid this, we have automatically called AnnotationDB.sliceDB.close() to write the data for you, when the AnnotationDB was deleted.''' def clear_cache(self): 'empty the cache' self._weakValueDict.clear() # not clear what this should do for AnnotationDB def copy(self): raise NotImplementedError("nonsensical in AnnotationDB") def setdefault(self, k, d=None): raise NotImplementedError("nonsensical in AnnotationDB") def update(self, other): raise NotImplementedError("nonsensical in AnnotationDB") # these methods should not be implemented for read-only database. def clear(self): raise NotImplementedError("no deletions allowed") def pop(self): raise NotImplementedError("no deletions allowed") def popitem(self): raise NotImplementedError("no deletions allowed") class AnnotationServer(AnnotationDB): 'XMLRPC-ready server for AnnotationDB' xmlrpc_methods={'get_slice_tuple': 0, 'get_slice_items': 0, 'get_annotation_attr': 0, 'keys': 0, '__len__': 0, '__contains__': 0} def get_slice_tuple(self, k): 'get (seqID,start,stop) for a given key' try: sliceInfo = self.sliceDB[k] except KeyError: return '' # XMLRPC-acceptable failure code start = int(self.getSliceAttr(sliceInfo, 'start')) stop = int(self.getSliceAttr(sliceInfo, 'stop')) try: if int(self.getSliceAttr(sliceInfo, 'orientation')) < 0 \ and start >= 0: start, stop = (-stop, -start) # Negative-orientation coords except AttributeError: pass return (self.getSliceAttr(sliceInfo, 'id'), start, stop) def get_slice_items(self): 'get all (key,tuple) pairs in one query' l = [] for k in self.sliceDB: l.append((k, self.get_slice_tuple(k))) return l def get_annotation_attr(self, k, attr): 'get the requested attribute of the requested key' try: sliceInfo = self.sliceDB[k] except KeyError: return '' try: return self.getSliceAttr(sliceInfo, attr) except AttributeError: return '' class AnnotationClientSliceDB(dict): 'proxy just queries the server' def __init__(self, db): self.db = db dict.__init__(self) def __getitem__(self, k): try: return dict.__getitem__(self, k) except KeyError: t = self.db.server.get_slice_tuple(k) if t == '': raise KeyError('no such annotation: ' + str(k)) dict.__setitem__(self, k, t) return t def __setitem__(self, k, v): raise ValueError('XMLRPC client is read-only') def keys(self): return self.db.server.keys() def __iter__(self): return iter(self.keys()) def items(self): return self.db.server.get_slice_items() def iteritems(self): return iter(self.items()) def __len__(self): return self.db.server.__len__() def __contains__(self, k): return self.db.server.__contains__(k) class AnnotationClient(AnnotationDB): 'XMLRPC AnnotationDB client' def __init__(self, url, name, seqDB, itemClass=AnnotationSeq, itemSliceClass=AnnotationSlice, autoGC=True, **kwargs): if autoGC: # automatically garbage collect unused objects self._weakValueDict = classutil.RecentValueDictionary(autoGC) else: self._weakValueDict = {} # object cache self.autoGC = autoGC import coordinator self.server = coordinator.get_connection(url, name) self.url = url self.name = name self.seqDB = seqDB self.sliceDB = AnnotationClientSliceDB(self) self.itemClass = itemClass self.itemSliceClass = itemSliceClass def __getstate__(self): return dict(url=self.url, name=self.name, seqDB=self.seqDB, autoGC=self.autoGC) def getSliceAttr(self, sliceInfo, attr): if attr=='id': return sliceInfo[0] elif attr=='start': return sliceInfo[1] elif attr=='stop': return sliceInfo[2] elif attr=='orientation': raise AttributeError('ori not saved') else: v = self.server.get_annotation_attr(sliceInfo[0], attr) if v=='': raise AttributeError('this annotation has no attr: ' + attr) return v PK7“;Úïç])p)ppygr/annotation.pyc;ò |†Kc@sdklZdkTdkZdkZdkZd„Zd„Zdefd„ƒYZ defd„ƒYZ d efd „ƒYZ d e fd „ƒYZ d efd„ƒYZdefd„ƒYZdefd„ƒYZde fd„ƒYZdefd„ƒYZdefd„ƒYZdeeifd„ƒYZdefd„ƒYZdefd„ƒYZdefd „ƒYZdS(!(s generators(s*NcCs$|ii|ii|i|ƒSdS(s1forward attributes from slice object if availableN(sselfsdbs getSliceAttrssliceDBsidsattr(sselfsattr((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysgetAnnotationAttrscCsw|itj o |i}nd}|idjo!d||i|i|ifSn d||i|i |i fSdS(Nsannotis %s%s[%d:%d]s -%s%s[%d:%d](sselfsannotationTypesNonestitles orientationsidsstartsstop(sselfstitle((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysannotation_repr s  !sAnnotationSeqDescrcBstZdZd„ZRS(s:get the sequence interval corresponding to this annotationcCs$t|i|i|i|iƒSdS(N(s absoluteSlicesobjs _anno_seqs _anno_startsstop(sselfsobjsobjtype((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__get__s(s__name__s __module__s__doc__s__get__(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysAnnotationSeqDescrs sAnnotationSliceDescrcBstZdZd„ZRS(s:get the sequence interval corresponding to this annotationcCs t|ii|i|iƒSdS(N(s relativeSlicesobjs pathForwardssequencesstartsstop(sselfsobjsobjtype((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__get__#s(s__name__s __module__s__doc__s__get__(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysAnnotationSliceDescr s sAnnotationSeqtypeDescrcBstZdZd„ZRS(sEget seqtype of the sequence interval corresponding to this annotationcCs|iiƒSdS(N(sobjs _anno_seqsseqtype(sselfsobjsobjtype((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__get__*s(s__name__s __module__s__doc__s__get__(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysAnnotationSeqtypeDescr's s AnnotationSeqcBshtZdZdZdZdZd„ZeZe ƒZ e i dƒZ eƒZeZd„Zd„ZRS(s%base class representing an annotationiicCs>||_||_|||_||_||_||_dS(N( sidsselfsdbsstopsstartsparents _anno_seqs _anno_startspath(sselfsidsdbsparentsstartsstop((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__init__4s      sannotationTypecCst|tƒ odSnt|i|iƒdjoS|i|ijo|i|ijo)t|i|i f|i|i fƒSqˆnt SdS(Niÿÿÿÿi( s isinstancesothers AnnotationSeqscmpsselfssequencesidsdbsstartsstopsNOT_ON_SAME_PATH(sselfsother((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__cmp__Bs &-cCstdƒ‚dS(Nsàthis is an annotation, and you cannot get a sequence string from it. Use its sequence attribute to get a sequence object representing this interval. (s ValueError(sselfsstartsstop((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysstrsliceJs(s__name__s __module__s__doc__sstartssteps orientations__init__sgetAnnotationAttrs __getattr__sAnnotationSeqDescrssequences classutilsDBAttributeDescrsannotationTypesAnnotationSeqtypeDescrs_seqtypesannotation_reprs__repr__s__cmp__sstrslice(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys AnnotationSeq.s     sAnnotationSlicecBs2tZdZeZeƒZeidƒZ e Z RS(s$represents subslice of an annotationsannotationType( s__name__s __module__s__doc__sgetAnnotationAttrs __getattr__sAnnotationSliceDescrssequences classutilsDBAttributeDescrsannotationTypesannotation_reprs__repr__(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysAnnotationSliceQs  sTranslationAnnotSeqDescrcBstZdZd„ZRS(s:get the sequence interval corresponding to this annotationcCst|i|i|iƒSdS(N(s absoluteSlicesobjs _anno_seqs _anno_starts _anno_stop(sselfsobjsobjtype((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__get__\s(s__name__s __module__s__doc__s__get__(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysTranslationAnnotSeqDescrYs sTranslationAnnotFrameDescrcBstZdZd„ZRS(sDGet the frame of this protein translation, relative to original DNA.cCsM|ii}|idjo|idd}n|iddd S|SdS(Niii(sobjs pathForwardssequencesorigs orientationsstartsframe(sselfsobjsobjtypesframesorig((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__get__cs  (s__name__s __module__s__doc__s__get__(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysTranslationAnnotFrameDescr`s sTranslationAnnotcBs8tZdZd„ZeƒZeƒZeZ d„Z RS(sEannotation representing aa translation of a given nucleotide intervalcCs8ti||||||ƒ|id:_||_dS(Ni( s AnnotationSeqs__init__sselfsidsdbsparentsstartsstops _anno_stop(sselfsidsdbsparentsstartsstop((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__init__oscCsNy |i}Wn/tj o#tt|iƒƒ}|_nX|||!SdS(s,get the aa translation of our associated ORFN( sselfs _translationsaasAttributeErrors translate_orfsstrssequencesstartsstop(sselfsstartsstopsaa((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysstrslicews  !( s__name__s __module__s__doc__s__init__sTranslationAnnotSeqDescrssequencesTranslationAnnotFrameDescrsframesPROTEIN_SEQTYPEs_seqtypesstrslice(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysTranslationAnnotls    sTranslationAnnotSliceDescrcBstZdZd„ZRS(s:get the sequence interval corresponding to this annotationcCs(t|iid|id|iƒSdS(Ni(s relativeSlicesobjs pathForwardssequencesstartsstop(sselfsobjsobjtype((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__get__ƒs(s__name__s __module__s__doc__s__get__(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysTranslationAnnotSliceDescr€s sTranslationAnnotSlicecBstZeƒZeƒZRS(N(s__name__s __module__sTranslationAnnotSliceDescrssequencesTranslationAnnotFrameDescrsframe(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysTranslationAnnotSliceˆs s AnnotationDBcBs|tZdZeeeeeeeed„Zei Z ei Z e ddddddddddddd dd dƒZd „Zd „Zd „Zd„Zd„Zed„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zededeed„Z d„Z!d„Z"d „Z#d!„Z$ed"„Z%d#„Z&d$„Z'd%„Z(d&„Z)RS('s;container of annotations as specific slices of db sequencesc Ks9| oti| ƒ|_n h|_| |_|tjo h}n|tj o ||_nti| |_||_ ||_ ||_ ||_ ||_|tj o ||_n| ouy-t|ƒiƒ} |i| |i| ƒWq5tj o#td| t|ƒfƒ‚q5tj oq5XndS(s“sliceDB must map identifier to a sliceInfo object; sliceInfo must have attributes: id, start, stop, orientation; seqDB must map sequence ID to a sliceable sequence object; sliceAttrDict gives optional dict of item attributes that should be mapped to sliceDB item attributes. maxCache specfies the maximum number of annotation objects to keep in the cache.sKcannot create annotation object %s; sequence database %s may not be correctN(sautoGCs classutilsRecentValueDictionarysselfs_weakValueDicts sliceAttrDictsNonessliceDBsget_shelve_or_dictskwargssseqDBsannotationTypes itemClasssitemSliceClasssmaxCaches checkFirstIDsitersnextsks get_annot_objsKeyErrorsreprs StopIteration( sselfssliceDBsseqDBsannotationTypes itemClasssitemSliceClasss itemAttrDicts sliceAttrDictsmaxCachesautoGCs checkFirstIDskwargssk((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__init__s2               ssliceDBisseqDBsannotationTypesautoGCs itemClasssitemSliceClasss sliceAttrDictsmaxCachecCst|ƒSdS(s1ALLOW THIS OBJECT TO BE USED AS A KEY IN DICTS...N(sidsself(sself((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__hash__¿scCs@y|i|SWntj onX|i||i|ƒSdS(sget annotation object by its IDN(sselfs_weakValueDictsksKeyErrorssliceAnnotationssliceDB(sselfsk((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys __getitem__Ãs cCstdƒ‚dS(NsGyou cannot save annotations directly using annoDB[k] = v. Instead, use annoDB.new_annotation(k,sliceInfo) where sliceInfo provides a sequence ID, start, stop (and any additional info desired), and will be saved directly to the sliceDB.(sKeyError(sselfsksv((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys __setitem__ËscCsgy|i|}Wn tj ot||ƒSnXyt||ƒSWntj o||SnXdS(N(sselfs sliceAttrDictsattrsksKeyErrorsgetattrs sliceInfos TypeError(sselfs sliceInfosattrsk((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys getSliceAttrÒscCst|i|dƒƒ}t|i|dƒƒ}yT|i|dƒ}t|ƒ}|djo |djo| | f\}}nWnttfj onX||jotd|||fƒ‚n|i|dƒ}|i |}|i |||||ƒSdS(s8create an annotation object based on the input sliceInfosstartsstops orientationisOannotation %s has zero or negative length [%s:%s]!sidN(sintsselfs getSliceAttrs sliceInfosstartsstops orientationsAttributeErrors IndexErrorsksseq_idsseqDBsseqs itemClass(sselfsks sliceInfos orientationsseqsseq_idsstopsstart((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys get_annot_objÜs   cCsr|i||ƒ}y5|o|it|iƒjo|ii ƒnWnt j onX||i|<|SdS(screate annotation and cache itN( sselfs get_annot_objsks sliceInfosas limitCachesmaxCacheslens_weakValueDictsclearsAttributeError(sselfsks sliceInfos limitCachesa((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pyssliceAnnotationðs  cCsY|i||ƒ}y||i|g}x-|iD]"}|i||i|ƒfƒqW|SdS(s&get all (key,tuple) pairs in one queryN(slsselfssliceDBsksappendsget_slice_tuple(sselfsksl((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysget_slice_items¦s   cCs]y|i|}Wntj o dSnXy|i||ƒSWntj o dSnXdS(s0get the requested attribute of the requested keysN(sselfssliceDBsks sliceInfosKeyErrors getSliceAttrsattrsAttributeError(sselfsksattrs sliceInfo((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysget_annotation_attr­s (s__name__s __module__s__doc__sxmlrpc_methodssget_slice_tuplesget_slice_itemssget_annotation_attr(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysAnnotationServers <  sAnnotationClientSliceDBcBs_tZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z RS( sproxy just queries the servercCs||_ti|ƒdS(N(sdbsselfsdicts__init__(sselfsdb((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__init__¼s cCsyti||ƒSWnftj oZ|iii|ƒ}|djotdt |ƒƒ‚nti |||ƒ|SnXdS(Nssno such annotation: ( sdicts __getitem__sselfsksKeyErrorsdbsserversget_slice_tuplestsstrs __setitem__(sselfskst((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys __getitem__Às cCstdƒ‚dS(NsXMLRPC client is read-only(s ValueError(sselfsksv((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys __setitem__ÊscCs|iiiƒSdS(N(sselfsdbsserverskeys(sself((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pyskeysÍscCst|iƒƒSdS(N(sitersselfskeys(sself((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__iter__ÐscCs|iiiƒSdS(N(sselfsdbsserversget_slice_items(sself((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysitemsÓscCst|iƒƒSdS(N(sitersselfsitems(sself((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys iteritemsÖscCs|iiiƒSdS(N(sselfsdbsservers__len__(sself((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__len__ÙscCs|iii|ƒSdS(N(sselfsdbsservers __contains__sk(sselfsk((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys __contains__Üs( s__name__s __module__s__doc__s__init__s __getitem__s __setitem__skeyss__iter__sitemss iteritemss__len__s __contains__(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysAnnotationClientSliceDB¹s        sAnnotationClientcBs2tZdZeeed„Zd„Zd„ZRS(sXMLRPC AnnotationDB clientc Ks|oti|ƒ|_n h|_||_dk}|i||ƒ|_ ||_||_||_ t |ƒ|_ ||_ ||_dS(N(sautoGCs classutilsRecentValueDictionarysselfs_weakValueDicts coordinatorsget_connectionsurlsnamesserversseqDBsAnnotationClientSliceDBssliceDBs itemClasssitemSliceClass( sselfsurlsnamesseqDBs itemClasssitemSliceClasssautoGCskwargss coordinator((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__init__ãs       c Cs/td|id|id|id|iƒSdS(NsurlsnamesseqDBsautoGC(sdictsselfsurlsnamesseqDBsautoGC(sself((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys __getstate__óscCsª|djo |dSnŽ|djo |dSnu|djo |dSn\|djotdƒ‚n?|ii|d|ƒ}|d jotd |ƒ‚n|SdS( Nsidisstartisstopis orientations ori not savedssthis annotation has no attr: (sattrs sliceInfosAttributeErrorsselfsserversget_annotation_attrsv(sselfs sliceInfosattrsv((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys getSliceAttr÷s        ( s__name__s __module__s__doc__s AnnotationSeqsAnnotationSlicesTrues__init__s __getstate__s getSliceAttr(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysAnnotationClientàs  (s __future__s generatorsssequences classutilsUserDictsweakrefsgetAnnotationAttrsannotation_reprsobjectsAnnotationSeqDescrsAnnotationSliceDescrsAnnotationSeqtypeDescrsSeqPaths AnnotationSeqs SeqDBSlicesAnnotationSlicesTranslationAnnotSeqDescrsTranslationAnnotFrameDescrsTranslationAnnotsTranslationAnnotSliceDescrsTranslationAnnotSlices DictMixins AnnotationDBsAnnotationServersdictsAnnotationClientSliceDBsAnnotationClient(sTranslationAnnotSliceDescrsAnnotationSeqDescrsAnnotationSlicesAnnotationSliceDescrsTranslationAnnotSeqDescrsTranslationAnnots generatorssTranslationAnnotSlices classutilsUserDictsAnnotationClientSliceDBsTranslationAnnotFrameDescrsAnnotationSeqtypeDescrsgetAnnotationAttrsAnnotationServers AnnotationSeqsAnnotationClients AnnotationDBsweakrefsannotation_repr((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys?s*      # ÿ)'PK7“;Úïç])p)ppygr/annotation.pyo;ò |†Kc@sdklZdkTdkZdkZdkZd„Zd„Zdefd„ƒYZ defd„ƒYZ d efd „ƒYZ d e fd „ƒYZ d efd„ƒYZdefd„ƒYZdefd„ƒYZde fd„ƒYZdefd„ƒYZdefd„ƒYZdeeifd„ƒYZdefd„ƒYZdefd„ƒYZdefd „ƒYZdS(!(s generators(s*NcCs$|ii|ii|i|ƒSdS(s1forward attributes from slice object if availableN(sselfsdbs getSliceAttrssliceDBsidsattr(sselfsattr((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysgetAnnotationAttrscCsw|itj o |i}nd}|idjo!d||i|i|ifSn d||i|i |i fSdS(Nsannotis %s%s[%d:%d]s -%s%s[%d:%d](sselfsannotationTypesNonestitles orientationsidsstartsstop(sselfstitle((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysannotation_repr s  !sAnnotationSeqDescrcBstZdZd„ZRS(s:get the sequence interval corresponding to this annotationcCs$t|i|i|i|iƒSdS(N(s absoluteSlicesobjs _anno_seqs _anno_startsstop(sselfsobjsobjtype((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__get__s(s__name__s __module__s__doc__s__get__(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysAnnotationSeqDescrs sAnnotationSliceDescrcBstZdZd„ZRS(s:get the sequence interval corresponding to this annotationcCs t|ii|i|iƒSdS(N(s relativeSlicesobjs pathForwardssequencesstartsstop(sselfsobjsobjtype((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__get__#s(s__name__s __module__s__doc__s__get__(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysAnnotationSliceDescr s sAnnotationSeqtypeDescrcBstZdZd„ZRS(sEget seqtype of the sequence interval corresponding to this annotationcCs|iiƒSdS(N(sobjs _anno_seqsseqtype(sselfsobjsobjtype((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__get__*s(s__name__s __module__s__doc__s__get__(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysAnnotationSeqtypeDescr's s AnnotationSeqcBshtZdZdZdZdZd„ZeZe ƒZ e i dƒZ eƒZeZd„Zd„ZRS(s%base class representing an annotationiicCs>||_||_|||_||_||_||_dS(N( sidsselfsdbsstopsstartsparents _anno_seqs _anno_startspath(sselfsidsdbsparentsstartsstop((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__init__4s      sannotationTypecCst|tƒ odSnt|i|iƒdjoS|i|ijo|i|ijo)t|i|i f|i|i fƒSqˆnt SdS(Niÿÿÿÿi( s isinstancesothers AnnotationSeqscmpsselfssequencesidsdbsstartsstopsNOT_ON_SAME_PATH(sselfsother((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__cmp__Bs &-cCstdƒ‚dS(Nsàthis is an annotation, and you cannot get a sequence string from it. Use its sequence attribute to get a sequence object representing this interval. (s ValueError(sselfsstartsstop((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysstrsliceJs(s__name__s __module__s__doc__sstartssteps orientations__init__sgetAnnotationAttrs __getattr__sAnnotationSeqDescrssequences classutilsDBAttributeDescrsannotationTypesAnnotationSeqtypeDescrs_seqtypesannotation_reprs__repr__s__cmp__sstrslice(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys AnnotationSeq.s     sAnnotationSlicecBs2tZdZeZeƒZeidƒZ e Z RS(s$represents subslice of an annotationsannotationType( s__name__s __module__s__doc__sgetAnnotationAttrs __getattr__sAnnotationSliceDescrssequences classutilsDBAttributeDescrsannotationTypesannotation_reprs__repr__(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysAnnotationSliceQs  sTranslationAnnotSeqDescrcBstZdZd„ZRS(s:get the sequence interval corresponding to this annotationcCst|i|i|iƒSdS(N(s absoluteSlicesobjs _anno_seqs _anno_starts _anno_stop(sselfsobjsobjtype((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__get__\s(s__name__s __module__s__doc__s__get__(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysTranslationAnnotSeqDescrYs sTranslationAnnotFrameDescrcBstZdZd„ZRS(sDGet the frame of this protein translation, relative to original DNA.cCsM|ii}|idjo|idd}n|iddd S|SdS(Niii(sobjs pathForwardssequencesorigs orientationsstartsframe(sselfsobjsobjtypesframesorig((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__get__cs  (s__name__s __module__s__doc__s__get__(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysTranslationAnnotFrameDescr`s sTranslationAnnotcBs8tZdZd„ZeƒZeƒZeZ d„Z RS(sEannotation representing aa translation of a given nucleotide intervalcCs8ti||||||ƒ|id:_||_dS(Ni( s AnnotationSeqs__init__sselfsidsdbsparentsstartsstops _anno_stop(sselfsidsdbsparentsstartsstop((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__init__oscCsNy |i}Wn/tj o#tt|iƒƒ}|_nX|||!SdS(s,get the aa translation of our associated ORFN( sselfs _translationsaasAttributeErrors translate_orfsstrssequencesstartsstop(sselfsstartsstopsaa((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysstrslicews  !( s__name__s __module__s__doc__s__init__sTranslationAnnotSeqDescrssequencesTranslationAnnotFrameDescrsframesPROTEIN_SEQTYPEs_seqtypesstrslice(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysTranslationAnnotls    sTranslationAnnotSliceDescrcBstZdZd„ZRS(s:get the sequence interval corresponding to this annotationcCs(t|iid|id|iƒSdS(Ni(s relativeSlicesobjs pathForwardssequencesstartsstop(sselfsobjsobjtype((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__get__ƒs(s__name__s __module__s__doc__s__get__(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysTranslationAnnotSliceDescr€s sTranslationAnnotSlicecBstZeƒZeƒZRS(N(s__name__s __module__sTranslationAnnotSliceDescrssequencesTranslationAnnotFrameDescrsframe(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysTranslationAnnotSliceˆs s AnnotationDBcBs|tZdZeeeeeeeed„Zei Z ei Z e ddddddddddddd dd dƒZd „Zd „Zd „Zd„Zd„Zed„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zededeed„Z d„Z!d„Z"d „Z#d!„Z$ed"„Z%d#„Z&d$„Z'd%„Z(d&„Z)RS('s;container of annotations as specific slices of db sequencesc Ks9| oti| ƒ|_n h|_| |_|tjo h}n|tj o ||_nti| |_||_ ||_ ||_ ||_ ||_|tj o ||_n| ouy-t|ƒiƒ} |i| |i| ƒWq5tj o#td| t|ƒfƒ‚q5tj oq5XndS(s“sliceDB must map identifier to a sliceInfo object; sliceInfo must have attributes: id, start, stop, orientation; seqDB must map sequence ID to a sliceable sequence object; sliceAttrDict gives optional dict of item attributes that should be mapped to sliceDB item attributes. maxCache specfies the maximum number of annotation objects to keep in the cache.sKcannot create annotation object %s; sequence database %s may not be correctN(sautoGCs classutilsRecentValueDictionarysselfs_weakValueDicts sliceAttrDictsNonessliceDBsget_shelve_or_dictskwargssseqDBsannotationTypes itemClasssitemSliceClasssmaxCaches checkFirstIDsitersnextsks get_annot_objsKeyErrorsreprs StopIteration( sselfssliceDBsseqDBsannotationTypes itemClasssitemSliceClasss itemAttrDicts sliceAttrDictsmaxCachesautoGCs checkFirstIDskwargssk((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__init__s2               ssliceDBisseqDBsannotationTypesautoGCs itemClasssitemSliceClasss sliceAttrDictsmaxCachecCst|ƒSdS(s1ALLOW THIS OBJECT TO BE USED AS A KEY IN DICTS...N(sidsself(sself((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__hash__¿scCs@y|i|SWntj onX|i||i|ƒSdS(sget annotation object by its IDN(sselfs_weakValueDictsksKeyErrorssliceAnnotationssliceDB(sselfsk((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys __getitem__Ãs cCstdƒ‚dS(NsGyou cannot save annotations directly using annoDB[k] = v. Instead, use annoDB.new_annotation(k,sliceInfo) where sliceInfo provides a sequence ID, start, stop (and any additional info desired), and will be saved directly to the sliceDB.(sKeyError(sselfsksv((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys __setitem__ËscCsgy|i|}Wn tj ot||ƒSnXyt||ƒSWntj o||SnXdS(N(sselfs sliceAttrDictsattrsksKeyErrorsgetattrs sliceInfos TypeError(sselfs sliceInfosattrsk((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys getSliceAttrÒscCst|i|dƒƒ}t|i|dƒƒ}yT|i|dƒ}t|ƒ}|djo |djo| | f\}}nWnttfj onX||jotd|||fƒ‚n|i|dƒ}|i |}|i |||||ƒSdS(s8create an annotation object based on the input sliceInfosstartsstops orientationisOannotation %s has zero or negative length [%s:%s]!sidN(sintsselfs getSliceAttrs sliceInfosstartsstops orientationsAttributeErrors IndexErrorsksseq_idsseqDBsseqs itemClass(sselfsks sliceInfos orientationsseqsseq_idsstopsstart((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys get_annot_objÜs   cCsr|i||ƒ}y5|o|it|iƒjo|ii ƒnWnt j onX||i|<|SdS(screate annotation and cache itN( sselfs get_annot_objsks sliceInfosas limitCachesmaxCacheslens_weakValueDictsclearsAttributeError(sselfsks sliceInfos limitCachesa((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pyssliceAnnotationðs  cCsY|i||ƒ}y||i|g}x-|iD]"}|i||i|ƒfƒqW|SdS(s&get all (key,tuple) pairs in one queryN(slsselfssliceDBsksappendsget_slice_tuple(sselfsksl((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysget_slice_items¦s   cCs]y|i|}Wntj o dSnXy|i||ƒSWntj o dSnXdS(s0get the requested attribute of the requested keysN(sselfssliceDBsks sliceInfosKeyErrors getSliceAttrsattrsAttributeError(sselfsksattrs sliceInfo((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysget_annotation_attr­s (s__name__s __module__s__doc__sxmlrpc_methodssget_slice_tuplesget_slice_itemssget_annotation_attr(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysAnnotationServers <  sAnnotationClientSliceDBcBs_tZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z RS( sproxy just queries the servercCs||_ti|ƒdS(N(sdbsselfsdicts__init__(sselfsdb((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__init__¼s cCsyti||ƒSWnftj oZ|iii|ƒ}|djotdt |ƒƒ‚nti |||ƒ|SnXdS(Nssno such annotation: ( sdicts __getitem__sselfsksKeyErrorsdbsserversget_slice_tuplestsstrs __setitem__(sselfskst((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys __getitem__Às cCstdƒ‚dS(NsXMLRPC client is read-only(s ValueError(sselfsksv((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys __setitem__ÊscCs|iiiƒSdS(N(sselfsdbsserverskeys(sself((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pyskeysÍscCst|iƒƒSdS(N(sitersselfskeys(sself((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__iter__ÐscCs|iiiƒSdS(N(sselfsdbsserversget_slice_items(sself((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysitemsÓscCst|iƒƒSdS(N(sitersselfsitems(sself((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys iteritemsÖscCs|iiiƒSdS(N(sselfsdbsservers__len__(sself((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__len__ÙscCs|iii|ƒSdS(N(sselfsdbsservers __contains__sk(sselfsk((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys __contains__Üs( s__name__s __module__s__doc__s__init__s __getitem__s __setitem__skeyss__iter__sitemss iteritemss__len__s __contains__(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysAnnotationClientSliceDB¹s        sAnnotationClientcBs2tZdZeeed„Zd„Zd„ZRS(sXMLRPC AnnotationDB clientc Ks|oti|ƒ|_n h|_||_dk}|i||ƒ|_ ||_||_||_ t |ƒ|_ ||_ ||_dS(N(sautoGCs classutilsRecentValueDictionarysselfs_weakValueDicts coordinatorsget_connectionsurlsnamesserversseqDBsAnnotationClientSliceDBssliceDBs itemClasssitemSliceClass( sselfsurlsnamesseqDBs itemClasssitemSliceClasssautoGCskwargss coordinator((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys__init__ãs       c Cs/td|id|id|id|iƒSdS(NsurlsnamesseqDBsautoGC(sdictsselfsurlsnamesseqDBsautoGC(sself((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys __getstate__óscCsª|djo |dSnŽ|djo |dSnu|djo |dSn\|djotdƒ‚n?|ii|d|ƒ}|d jotd |ƒ‚n|SdS( Nsidisstartisstopis orientations ori not savedssthis annotation has no attr: (sattrs sliceInfosAttributeErrorsselfsserversget_annotation_attrsv(sselfs sliceInfosattrsv((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys getSliceAttr÷s        ( s__name__s __module__s__doc__s AnnotationSeqsAnnotationSlicesTrues__init__s __getstate__s getSliceAttr(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pysAnnotationClientàs  (s __future__s generatorsssequences classutilsUserDictsweakrefsgetAnnotationAttrsannotation_reprsobjectsAnnotationSeqDescrsAnnotationSliceDescrsAnnotationSeqtypeDescrsSeqPaths AnnotationSeqs SeqDBSlicesAnnotationSlicesTranslationAnnotSeqDescrsTranslationAnnotFrameDescrsTranslationAnnotsTranslationAnnotSliceDescrsTranslationAnnotSlices DictMixins AnnotationDBsAnnotationServersdictsAnnotationClientSliceDBsAnnotationClient(sTranslationAnnotSliceDescrsAnnotationSeqDescrsAnnotationSlicesAnnotationSliceDescrsTranslationAnnotSeqDescrsTranslationAnnots generatorssTranslationAnnotSlices classutilsUserDictsAnnotationClientSliceDBsTranslationAnnotFrameDescrsAnnotationSeqtypeDescrsgetAnnotationAttrsAnnotationServers AnnotationSeqsAnnotationClients AnnotationDBsweakrefsannotation_repr((s5build/bdist.darwin-8.11.1-i386/egg/pygr/annotation.pys?s*      # ÿ)'PKd—~;ržbVTVT pygr/blast.pyimport glob import os import tempfile import classutil import logger from sequtil import * from parse_blast import BlastHitParser from seqdb import write_fasta, read_fasta from nlmsa_utils import CoordsGroupStart, CoordsGroupEnd, CoordsToIntervals,\ EmptySlice from annotation import AnnotationDB, TranslationAnnot, TranslationAnnotSlice import cnestedlist import translationDB import UserDict # NCBI HAS THE NASTY HABIT OF TREATING THE IDENTIFIER AS A BLOB INTO # WHICH THEY STUFF FIELD AFTER FIELD... E.G. gi|1234567|foobarU|NT_1234567|... # THIS JUST YANKS OUT THE SECOND ARGUMENT SEPARATED BY | NCBI_ID_PARSER=lambda id: id.split('|')[1] def blast_program(query_type, db_type): progs = {DNA_SEQTYPE: {DNA_SEQTYPE: 'blastn', PROTEIN_SEQTYPE: 'blastx'}, PROTEIN_SEQTYPE: {DNA_SEQTYPE: 'tblastn', PROTEIN_SEQTYPE: 'blastp'}} if query_type == RNA_SEQTYPE: query_type = DNA_SEQTYPE if db_type == RNA_SEQTYPE: db_type = DNA_SEQTYPE return progs[query_type][db_type] def read_blast_alignment(ofile, srcDB, destDB, al=None, pipeline=None, translateSrc=False, translateDest=False): """Apply sequence of transforms to read input from 'ofile'. srcDB: database for finding query sequences from the blast input; destDB: database for finding subject sequences from the blast input; al, if not None, must be a writeable alignment object in which to store the alignment intervals; translateSrc=True forces creation of a TranslationDB representing the possible 6-frames of srcDB (for blastx, tblastx); translateDest=True forces creation of a TranslationDB representing the possible 6-frames of destDB (for tblastn, tblastx). If pipeline is not None, it must be a list of filter functions each taking a single argument and returning an iterator or iterable result object. """ p = BlastHitParser() d = dict(id='src_id', start='src_start', stop='src_end', ori='src_ori', idDest='dest_id', startDest='dest_start', stopDest='dest_end', oriDest='dest_ori') if translateSrc: srcDB = translationDB.get_translation_db(srcDB) if translateDest: destDB = translationDB.get_translation_db(destDB) cti = CoordsToIntervals(srcDB, destDB, d) alignedIvals = cti(p.parse_file(ofile)) if pipeline is None: result = save_interval_alignment(alignedIvals, al) else: # apply all the filters in our pipeline one by one result = alignedIvals for f in pipeline: result = f(result) return result def save_interval_alignment(alignedIvals, al=None): """Save alignedIvals to al, or a new in-memory NLMSA""" needToBuild = False if al is None: al = cnestedlist.NLMSA('blasthits', 'memory', pairwiseMode=True, bidirectional=False) needToBuild = True al.add_aligned_intervals(alignedIvals) if needToBuild: al.build() return al def start_blast(cmd, seq, seqString=None, seqDict=None, **kwargs): """Run blast and return results.""" p = classutil.FilePopen(cmd, stdin=classutil.PIPE, stdout=classutil.PIPE, **kwargs) if seqString is None: seqString = seq if seqDict is not None: # write all seqs to nonblocking ifile for seqID, seq in seqDict.iteritems(): write_fasta(p.stdin, seq) seqID = None else: # just write one query sequence seqID = write_fasta(p.stdin, seqString) if p.wait(): # blast returned error code raise OSError('command %s failed' % ' '.join(cmd)) return seqID, p def process_blast(cmd, seq, blastDB, al=None, seqString=None, queryDB=None, popenArgs={}, **kwargs): """Run blast and return an alignment.""" seqID, p = start_blast(cmd, seq, seqString, seqDict=queryDB, **popenArgs) try: if not queryDB: # need a query db for translation / parsing results try: queryDB = seq.db # use this sequence's database except AttributeError: queryDB = {seqID: seq} # construct a trivial "database" al = read_blast_alignment(p.stdout, queryDB, blastDB, al, **kwargs) finally: p.close() # close our PIPE files return al def repeat_mask(seq, progname='RepeatMasker', opts=()): 'Run RepeatMasker on a sequence, return lowercase-masked string' ## fd, temppath = tempfile.mkstemp() ## ofile = os.fdopen(fd, 'w') # text file p = classutil.FilePopen([progname] + list(opts), stdin=classutil.PIPE, stdinFlag=None) write_fasta(p.stdin, seq, reformatter=lambda x: x.upper()) # save uppercase try: if p.wait(): raise OSError('command %s failed' % ' '.join(p.args[0])) ifile = file(p._stdin_path + '.masked', 'rU') # text file try: for id, title, seq_masked in read_fasta(ifile): break # JUST READ ONE SEQUENCE finally: ifile.close() finally: # clean up our temp files no matter what happened p.close() # close temp stdin file for fpath in glob.glob(p._stdin_path + '.*'): try: os.remove(fpath) except OSError: pass return seq_masked # ONLY THE REPEATS ARE IN LOWERCASE NOW def warn_if_whitespace(filepath): l = filepath.split() # check filepath for whitespace if len(l) > 1 or len(l[0]) < len(filepath): # contains whitespace logger.warn(""" Your sequence filepath contains whitespace characters: %s The NCBI formatdb (and blastall) programs cannot handle file paths containing whitespace! This is a known NCBI formatdb / blastall bug. Please use a path containing no whitespace characters!""" % filepath) return True # signal caller that a warning was issued class BlastMapping(object): 'Graph interface for mapping a sequence to homologs in a seq db via BLAST' def __init__(self, seqDB, filepath=None, blastReady=False, blastIndexPath=None, blastIndexDirs=None, verbose=True, showFormatdbMessages=True, **kwargs): '''seqDB: sequence database object to search for homologs filepath: location of FASTA format file for the sequence database blastReady: if True, ensure that BLAST index file ready to use blastIndexPath: location of the BLAST index file blastIndexDirs: list of directories for trying to build index in ''' self.seqDB = seqDB self.idIndex = BlastIDIndex(seqDB) self.verbose = verbose self.showFormatdbMessages = showFormatdbMessages if filepath is not None: self.filepath = filepath else: self.filepath = seqDB.filepath if blastIndexPath is not None: self.blastIndexPath = blastIndexPath if blastIndexDirs is not None: self.blastIndexDirs = blastIndexDirs self.checkdb() # CHECK WHETHER BLAST INDEX FILE IS PRESENT... if not self.blastReady and blastReady: # FORCE CONSTRUCTION OF BLAST DB self.formatdb() def __repr__(self): return "" % (self.filepath) def __getitem__(self, k): 'return NLMSASlice representing BLAST results' al = self.__call__(k) # run BLAST & get NLMSA storing results return al[k] # return NLMSASlice representing these results def test_db_location(self, testpath): '''check whether BLAST index files ready for use; return status.''' if not os.access(testpath+'.nsd', os.R_OK) \ and not os.access(testpath+'.psd', os.R_OK) \ and not os.access(testpath+'.00.nsd', os.R_OK) \ and not os.access(testpath+'.00.psd', os.R_OK): return False else: # FOUND INDEX FILES IN THIS LOCATION if testpath != self.filepath: self.blastIndexPath = testpath return True def checkdb(self): 'look for blast index files in blastIndexPath, \ standard list of locations' for testpath in self.blast_index_paths(): self.blastReady = self.test_db_location(testpath) if self.blastReady: break return self.blastReady def run_formatdb(self, testpath): 'ATTEMPT TO BUILD BLAST DATABASE INDEXES at testpath' dirname = classutil.file_dirpath(testpath) if not os.access(dirname, os.W_OK): # check if directory is writable raise IOError('run_formatdb: directory %s is not writable!' % dirname) cmd = ['formatdb', '-i', self.filepath, '-n', testpath, '-o', 'T'] if self.seqDB._seqtype != PROTEIN_SEQTYPE: cmd += ['-p', 'F'] # special flag required for nucleotide seqs logger.info('Building index: ' + ' '.join(cmd)) if self.showFormatdbMessages: kwargs = {} else: # suppress formatdb messages by redirecting them kwargs = dict(stdout=classutil.PIPE, stderr=classutil.PIPE) if classutil.call_subprocess(cmd, **kwargs): # bad exit code, so command failed warn_if_whitespace(self.filepath) \ or warn_if_whitespace(testpath) # only issue one warning raise OSError('command %s failed' % ' '.join(cmd)) self.blastReady=True if testpath!=self.filepath: self.blastIndexPath = testpath def get_blast_index_path(self): 'get path to base name for BLAST index files' try: return self.blastIndexPath except AttributeError: return self.filepath # DEFAULT: BUILD INDEX FILES IN self.filepath . HOME OR APPROPRIATE # USER-/SYSTEM-SPECIFIC TEMPORARY DIRECTORY blastIndexDirs = ['FILEPATH', os.getcwd, os.path.expanduser, tempfile.gettempdir()] def blast_index_paths(self): 'iterate over possible blast index directories' try: # 1ST TRY ACTUAL SAVED LOCATION IF ANY yield self.blastIndexPath except AttributeError: pass for m in self.blastIndexDirs: # NOW TRY STANDARD LOCATIONS if m=='FILEPATH': yield self.filepath continue elif m == os.path.expanduser: s = m('~') # GET HOME DIRECTORY elif callable(m): s = m() else: # TREAT AS STRING s = str(m) yield os.path.join(s, os.path.basename(self.filepath)) def formatdb(self, filepath=None): 'try to build BLAST index files in an appropriate location' if filepath is not None: # JUST USE THE SPECIFIED PATH return self.run_formatdb(filepath) notFirst = False for testpath in self.blast_index_paths(): if notFirst: logger.info('Trying next entry in self.blastIndexDirs...') notFirst = True try: # BUILD IN TARGET DIRECTORY return self.run_formatdb(testpath) except (IOError, OSError): # BUILD FAILED pass raise IOError("cannot build BLAST database for %s" % (self.filepath, )) def raw_fasta_stream(self, ifile=None, idFilter=None): '''Return a stream of fasta-formatted sequences. Optionally, apply an ID filter function if supplied. ''' if ifile is not None: # JUST USE THE STREAM WE ALREADY HAVE OPEN return ifile, idFilter try: # DEFAULT: JUST READ THE FASTA FILE, IF IT EXISTS return file(self.filepath, 'rU'), idFilter except IOError: # TRY READING FROM FORMATTED BLAST DATABASE cmd='fastacmd -D -d "%s"' % self.get_blast_index_path() return os.popen(cmd), NCBI_ID_PARSER #BLAST ADDS lcl| TO id _blast_prog_dict = dict(blastx='#BlastxMapping') def blast_program(self, seq, blastprog=None): 'figure out appropriate blast program & remap via _blast_prog_dict' if blastprog is None: blastprog = blast_program(seq.seqtype(), self.seqDB._seqtype) oldprog = blastprog try: # apply program transformation if provided blastprog = self._blast_prog_dict[blastprog] if blastprog.startswith('#'): # not permitted by this class! raise ValueError('Use %s for %s' % (blastprog[1:], oldprog)) except KeyError: pass # no program transformation to apply, so nothing to do... return blastprog def blast_command(self, blastpath, blastprog, expmax, maxseq, opts): 'generate command string for running blast with desired options' filepath = self.get_blast_index_path() warn_if_whitespace(filepath) cmd = [blastpath, '-d', filepath, '-p', blastprog, '-e', '%e' % float(expmax)] + list(opts) if maxseq is not None: # ONLY TAKE TOP maxseq HITS cmd += ['-b', '%d' % maxseq, '-v', '%d' % maxseq] return cmd def get_seq_from_queryDB(self, queryDB): 'get one sequence obj from queryDB' seqID = iter(queryDB).next() # get 1st seq ID return queryDB[seqID] def translation_kwargs(self, blastprog): 'return kwargs for read_blast_alignment() based on blastprog' d = dict(tblastn=dict(translateDest=True), blastx=dict(translateSrc=True), tblastx=dict(translateSrc=True, translateDest=True)) try: return d[blastprog] except KeyError: return {} def __call__(self, seq=None, al=None, blastpath='blastall', blastprog=None, expmax=0.001, maxseq=None, verbose=None, opts=(), queryDB=None, **kwargs): "Run blast search for seq in database, return alignment object" if seq is None and queryDB is None: raise ValueError("we need a sequence or db to use as query!") if seq and queryDB: raise ValueError("both a sequence AND a db provided for query") if queryDB is not None: seq = self.get_seq_from_queryDB(queryDB) if not self.blastReady: # HAVE TO BUILD THE formatdb FILES... self.formatdb() blastprog = self.blast_program(seq, blastprog) cmd = self.blast_command(blastpath, blastprog, expmax, maxseq, opts) return process_blast(cmd, seq, self.idIndex, al, queryDB=queryDB, ** self.translation_kwargs(blastprog)) class BlastxMapping(BlastMapping): """Because blastx changes the query to multiple sequences (representing its six possible frames), getitem can no longer return a single slice object, but instead an iterator for one or more slice objects representing the frames that had homology hits.""" def __repr__(self): return "" % (self.filepath) _blast_prog_dict = dict(blastn='tblastx', blastp='#BlastMapping', tblastn='#BlastMapping') def __getitem__(self, query): """generate slices for all translations of the query """ # generate NLMSA for this single sequence al = self(query) # get the translation database for the sequence tdb = translationDB.get_translation_db(query.db) # run through all of the frames & find alignments. slices = [] for trans_seq in tdb[query.id].iter_frames(): try: slice = al[trans_seq] except KeyError: continue if not isinstance(slice, EmptySlice): slices.append(slice) return slices class MegablastMapping(BlastMapping): def __repr__(self): return "" % (self.filepath) def __call__(self, seq, al=None, blastpath='megablast', expmax=1e-20, maxseq=None, minIdentity=None, maskOpts=['-U', 'T', '-F', 'm'], rmPath='RepeatMasker', rmOpts=['-xsmall'], verbose=None, opts=(), **kwargs): "Run megablast search with optional repeat masking." if not self.blastReady: # HAVE TO BUILD THE formatdb FILES... self.formatdb() # mask repeats to lowercase masked_seq = repeat_mask(seq, rmPath, rmOpts) filepath = self.get_blast_index_path() warn_if_whitespace(filepath) cmd = [blastpath] + maskOpts \ + ['-d', filepath, '-D', '2', '-e', '%e' % float(expmax)] + list(opts) if maxseq is not None: # ONLY TAKE TOP maxseq HITS cmd += ['-b', '%d' % maxseq, '-v', '%d' % maxseq] if minIdentity is not None: cmd += ['-p', '%f' % float(minIdentity)] return process_blast(cmd, seq, self.idIndex, al, seqString=masked_seq, popenArgs=dict(stdinFlag='-i')) class BlastIDIndex(object): """This class acts as a wrapper around a regular seqDB, and handles the mangled IDs returned by BLAST to translate them to the correct ID. Since NCBI treats FASTA ID as a blob into which they like to stuff many fields... and then NCBI BLAST mangles those IDs when it reports hits, so they no longer match the true ID... we are forced into contortions to rescue the true ID from mangled IDs. Our workaround strategy: since NCBI packs the FASTA ID with multiple IDs (GI, GB, RefSeq ID etc.), we can use any of these identifiers that are found in a mangled ID, by storing a mapping of these sub-identifiers to the true FASTA ID.""" def __init__(self, seqDB): self.seqDB = seqDB self.seqInfoDict = BlastIDInfoDict(self) # FOR UNPACKING NCBI IDENTIFIERS AS WORKAROUND FOR BLAST ID CRAZINESS id_delimiter='|' def unpack_id(self, id): """Return |-packed NCBI identifiers as unpacked list. NCBI packs identifier like gi|123456|gb|A12345|other|nonsense. Return as list.""" return id.split(self.id_delimiter) def index_unpacked_ids(self, unpack_f=None): """Build an index of sub-IDs (unpacked from NCBI nasty habit of using the FASTA ID as a blob); you can customize the unpacking by overriding the unpack_id function or changing the id_delimiter. The index maps each sub-ID to the real ID, so that when BLAST hands back a mangled, fragmentary ID, we can unpack that mangled ID and look up the true ID in this index. Any sub-ID that is found to map to more than one true ID will be mapped to None (so that random NCBI garbage like gnl or NCBI_MITO wont be treated as sub-IDs). """ if unpack_f is None: unpack_f=self.unpack_id t={} for id in self.seqDB: for s in unpack_f(id): if s == id: continue # DON'T STORE TRIVIAL MAPPINGS!! s=s.upper() # NCBI FORCES ID TO UPPERCASE?!?! try: if t[s]!=id and t[s] is not None: t[s]=None # s NOT UNIQUE, CAN'T BE AN IDENTIFIER!! except KeyError: t[s]=id # s UNIQUE, TRY USING s AS AN IDENTIFIER for id in t.itervalues(): if id is not None: # OK THERE ARE REAL MAPPINGS STORED, SO USE THIS self._unpacked_dict=t # SAVE THE MAPPING TO REAL IDENTIFIERS return # NO NON-TRIVIAL MAPPINGS, SO JUST SAVE EMPTY MAPPING self._unpacked_dict={} def get_real_id(self, bogusID, unpack_f=None): "try to translate an id that NCBI has mangled to the real sequence id" if unpack_f is None: unpack_f = self.unpack_id if not hasattr(self, '_unpacked_dict'): self.index_unpacked_ids(unpack_f) for s in unpack_f(bogusID): s = s.upper() # NCBI FORCES ID TO UPPERCASE?!?! try: id = self._unpacked_dict[s] if id is not None: return id # OK, FOUND A MAPPING TO REAL ID except KeyError: pass # KEEP TRYING... # FOUND NO MAPPING, SO RAISE EXCEPTION raise KeyError("no key '%s' in database %s" % (bogusID, repr(self.seqDB))) def __getitem__(self, seqID): "If seqID is mangled by BLAST, use our index to get correct ID" try: # default: treat as a correct ID return self.seqDB[seqID] except KeyError: # translate to the correct ID return self.seqDB[self.get_real_id(seqID)] def __contains__(self, seqID): try: self.seqInfoDict[seqID] return True except KeyError: return False class BlastIDInfoDict(object, UserDict.DictMixin): """provide seqInfoDict interface for BlastIDIndex """ def __init__(self, db): self.blastDB = db def __getitem__(self, seqID): try: return self.blastDB.seqDB.seqInfoDict[seqID] except KeyError: seqID = self.blastDB.get_real_id(seqID) return self.blastDB.seqDB.seqInfoDict[seqID] def __len__(self): return len(self.blastDB.seqDB.seqInfoDict) def __iter__(self): return iter(self.blastDB.seqDB.seqInfoDict) def keys(self): return self.blastDB.seqDB.seqInfoDict.keys() PK7“;Mv“ggpygr/blast.pyc;ò |†Kc@sŽdkZdkZdkZdkZdkZdkTdklZdkl Z l Z dk l Z l Z lZlZdklZlZlZdkZdkZdkZd„Zd„Zeeeed„Zed „Zeed „Zeeehd „Zd fd „Zd„Z de!fd„ƒYZ"de"fd„ƒYZ#de"fd„ƒYZ$de!fd„ƒYZ%de!ei&fd„ƒYZ'dS(N(s*(sBlastHitParser(s write_fastas read_fasta(sCoordsGroupStartsCoordsGroupEndsCoordsToIntervalss EmptySlice(s AnnotationDBsTranslationAnnotsTranslationAnnotSlicecCs|idƒdS(Ns|i(sidssplit(sid((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pysscCszhthtd<td<<thtd<td<<}|tjo t}n|tjo t}n|||SdS(Nsblastnsblastxstblastnsblastp(s DNA_SEQTYPEsPROTEIN_SEQTYPEsprogss query_types RNA_SEQTYPEsdb_type(s query_typesdb_typesprogs((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys blast_programs <    c Csètƒ} tddddddddd d d d d dddƒ}|oti|ƒ}n|oti|ƒ}nt |||ƒ} | | i |ƒƒ} |tjot| |ƒ} n$| } x|D]}|| ƒ} qÊW| SdS(sÜApply sequence of transforms to read input from 'ofile'. srcDB: database for finding query sequences from the blast input; destDB: database for finding subject sequences from the blast input; al, if not None, must be a writeable alignment object in which to store the alignment intervals; translateSrc=True forces creation of a TranslationDB representing the possible 6-frames of srcDB (for blastx, tblastx); translateDest=True forces creation of a TranslationDB representing the possible 6-frames of destDB (for tblastn, tblastx). If pipeline is not None, it must be a list of filter functions each taking a single argument and returning an iterator or iterable result object. sidssrc_idsstarts src_startsstopssrc_endsorissrc_orisidDestsdest_ids startDests dest_startsstopDestsdest_endsoriDestsdest_oriN(sBlastHitParserspsdictsds translateSrcs translationDBsget_translation_dbssrcDBs translateDestsdestDBsCoordsToIntervalssctis parse_filesofiles alignedIvalsspipelinesNonessave_interval_alignmentsalsresultsf( sofilessrcDBsdestDBsalspipelines translateSrcs translateDestsdsfs alignedIvalsspsresultscti((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pysread_blast_alignment!s$   cCset}|tjo(tidddtdtƒ}t}n|i|ƒ|o|i ƒn|SdS(s1Save alignedIvals to al, or a new in-memory NLMSAs blasthitssmemorys pairwiseModes bidirectionalN( sFalses needToBuildsalsNones cnestedlistsNLMSAsTruesadd_aligned_intervalss alignedIvalssbuild(s alignedIvalssals needToBuild((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pyssave_interval_alignmentIs    cKsÉti|dtidti|}|tjo |}n|tj o7x*|i ƒD]\}}t |i |ƒqUWt}nt |i |ƒ}|iƒotddi|ƒƒ‚n||fSdS(sRun blast and return results.sstdinsstdoutscommand %s faileds N(s classutils FilePopenscmdsPIPEskwargssps seqStringsNonesseqsseqDicts iteritemssseqIDs write_fastasstdinswaitsOSErrorsjoin(scmdsseqs seqStringsseqDictskwargsspsseqID((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys start_blastVs$      c Ks”t|||d||\} }z]| o6y |i}Wqbt j oh| |<}qbXnt |i ||||}Wd|iƒX|SdS(s"Run blast and return an alignment.sseqDictN(s start_blastscmdsseqs seqStringsqueryDBs popenArgssseqIDspsdbsAttributeErrorsread_blast_alignmentsstdoutsblastDBsalskwargssclose( scmdsseqsblastDBsals seqStringsqueryDBs popenArgsskwargsspsseqID((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys process_blastgs!  s RepeatMaskerc Cs ti|gt|ƒdtidtƒ}t|i |dd„ƒz~|i ƒo$t ddi |idƒƒ‚nt|idd ƒ}z%xt|ƒD]\}}}PqžWWd |iƒXWd |iƒxEti|id ƒD]-}yti|ƒWqæt j oqæXqæWX|Sd S( s>Run RepeatMasker on a sequence, return lowercase-masked stringsstdins stdinFlags reformattercCs |iƒS(N(sxsupper(sx((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys~sscommand %s faileds is.maskedsrUNs.*(s classutils FilePopensprognameslistsoptssPIPEsNonesps write_fastasstdinsseqswaitsOSErrorsjoinsargssfiles _stdin_pathsifiles read_fastasidstitles seq_maskedsclosesglobsfpathsossremove( sseqsprognamesoptsstitles seq_maskedsifilesfpathspsid((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys repeat_maskxs.  $    cCsY|iƒ}t|ƒdjpt|dƒt|ƒjotid|ƒtSndS(Niisù Your sequence filepath contains whitespace characters: %s The NCBI formatdb (and blastall) programs cannot handle file paths containing whitespace! This is a known NCBI formatdb / blastall bug. Please use a path containing no whitespace characters!(sfilepathssplitslslensloggerswarnsTrue(sfilepathsl((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pyswarn_if_whitespace’s 0s BlastMappingc BsþtZdZeeeeeed„Zd„Zd„Zd„Z d„Z d„Z d„Z de ie iieiƒgZd „Zed „Zeed „Zed d ƒZed„Zd„Zd„Zd„Zeededeefed„ ZRS(sHGraph interface for mapping a sequence to homologs in a seq db via BLASTc Ks²||_t|ƒ|_||_||_|tj o ||_n |i|_|tj o ||_n|tj o ||_ n|i ƒ|i o|o|i ƒndS(sRseqDB: sequence database object to search for homologs filepath: location of FASTA format file for the sequence database blastReady: if True, ensure that BLAST index file ready to use blastIndexPath: location of the BLAST index file blastIndexDirs: list of directories for trying to build index in N( sseqDBsselfs BlastIDIndexsidIndexsverbosesshowFormatdbMessagessfilepathsNonesblastIndexPathsblastIndexDirsscheckdbs blastReadysformatdb( sselfsseqDBsfilepaths blastReadysblastIndexPathsblastIndexDirssverbosesshowFormatdbMessagesskwargs((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys__init__¡s           cCsd|iSdS(Ns(sselfsfilepath(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys__repr__ºscCs|i|ƒ}||SdS(s,return NLMSASlice representing BLAST resultsN(sselfs__call__sksal(sselfsksal((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys __getitem__½scCs™ti|dtiƒ oNti|dtiƒ o3ti|dtiƒ oti|dtiƒ otSn"||ijo ||_ntSdS(s=check whether BLAST index files ready for use; return status.s.nsds.psds.00.nsds.00.psdN( sossaccessstestpathsR_OKsFalsesselfsfilepathsblastIndexPathsTrue(sselfstestpath((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pystest_db_locationÂs l cCsCx5|iƒD]'}|i|ƒ|_|ioPq q W|iSdS(sPlook for blast index files in blastIndexPath, standard list of locationsN(sselfsblast_index_pathsstestpathstest_db_locations blastReady(sselfstestpath((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pyscheckdbÎs   cCs<ti|ƒ}ti|tiƒ otd|ƒ‚ndd|i d|ddg}|i i t jo|ddg7}ntid d i|ƒƒ|io h}ntd tid tiƒ}ti||o7t|i ƒp t|ƒtd d i|ƒƒ‚nt|_||i jo ||_ndS(s3ATTEMPT TO BUILD BLAST DATABASE INDEXES at testpaths+run_formatdb: directory %s is not writable!sformatdbs-is-ns-osTs-psFsBuilding index: s sstdoutsstderrscommand %s failedN(s classutils file_dirpathstestpathsdirnamesossaccesssW_OKsIOErrorsselfsfilepathscmdsseqDBs_seqtypesPROTEIN_SEQTYPEsloggersinfosjoinsshowFormatdbMessagesskwargssdictsPIPEscall_subprocessswarn_if_whitespacesOSErrorsTrues blastReadysblastIndexPath(sselfstestpathskwargsscmdsdirname((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys run_formatdb×s"   cCs,y |iSWntj o|iSnXdS(s+get path to base name for BLAST index filesN(sselfsblastIndexPathsAttributeErrorsfilepath(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pysget_blast_index_pathîs  sFILEPATHccs¿y |iVWntj onXx—|iD]Œ}|djo|iVq+nJ|tiijo|dƒ}n't |ƒo |ƒ}n t |ƒ}tii |tii |iƒƒVq+WdS(s-iterate over possible blast index directoriessFILEPATHs~N(sselfsblastIndexPathsAttributeErrorsblastIndexDirssmsfilepathsosspaths expanduserssscallablesstrsjoinsbasename(sselfsmss((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pysblast_index_pathsùs       cCs |tj o|i|ƒSnt}x_|iƒD]Q}|oti dƒnt }y|i|ƒSWq1t t fj oq1Xq1Wt d|ifƒ‚dS(s9try to build BLAST index files in an appropriate locations+Trying next entry in self.blastIndexDirs...s"cannot build BLAST database for %sN( sfilepathsNonesselfs run_formatdbsFalsesnotFirstsblast_index_pathsstestpathsloggersinfosTruesIOErrorsOSError(sselfsfilepathsnotFirststestpath((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pysformatdb s   cCsr|tj o||fSnyt|idƒ|fSWn6tj o*d|iƒ}t i |ƒt fSnXdS(stReturn a stream of fasta-formatted sequences. Optionally, apply an ID filter function if supplied. srUsfastacmd -D -d "%s"N( sifilesNonesidFiltersfilesselfsfilepathsIOErrorsget_blast_index_pathscmdsosspopensNCBI_ID_PARSER(sselfsifilesidFilterscmd((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pysraw_fasta_streams sblastxs#BlastxMappingcCs|tjot|iƒ|iiƒ}n|}y?|i |}|i dƒot d|d|fƒ‚nWnt j onX|SdS(sAfigure out appropriate blast program & remap via _blast_prog_dicts#s Use %s for %siN( s blastprogsNones blast_programsseqsseqtypesselfsseqDBs_seqtypesoldprogs_blast_prog_dicts startswiths ValueErrorsKeyError(sselfsseqs blastprogsoldprog((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys blast_program*s  "c Cs||iƒ}t|ƒ|d|d|ddt|ƒgt|ƒ}|t j o"|dd|dd|g7}n|SdS( s>generate command string for running blast with desired optionss-ds-ps-es%es-bs%ds-vN( sselfsget_blast_index_pathsfilepathswarn_if_whitespaces blastpaths blastprogsfloatsexpmaxslistsoptsscmdsmaxseqsNone(sselfs blastpaths blastprogsexpmaxsmaxseqsoptssfilepathscmd((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys blast_command7s  / "cCst|ƒiƒ}||SdS(s!get one sequence obj from queryDBN(sitersqueryDBsnextsseqID(sselfsqueryDBsseqID((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pysget_seq_from_queryDBAsc Csftdtdtƒdtdtƒdtdtdtƒƒ}y ||SWntj o hSnXdS(s;return kwargs for read_blast_alignment() based on blastprogstblastns translateDestsblastxs translateSrcstblastxN(sdictsTruesds blastprogsKeyError(sselfs blastprogsd((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pystranslation_kwargsFs sblastallf0.001c KsÚ|tjo | tjotdƒ‚n|o| otdƒ‚n| tj o|i| ƒ}n|i o|iƒn|i||ƒ}|i |||||ƒ} t| ||i|d| |i|ƒSdS(s=Run blast search for seq in database, return alignment objects)we need a sequence or db to use as query!s+both a sequence AND a db provided for querysqueryDBN(sseqsNonesqueryDBs ValueErrorsselfsget_seq_from_queryDBs blastReadysformatdbs blast_programs blastprogs blast_commands blastpathsexpmaxsmaxseqsoptsscmds process_blastsidIndexsalstranslation_kwargs( sselfsseqsals blastpaths blastprogsexpmaxsmaxseqsverbosesoptssqueryDBskwargsscmd((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys__call__Ps  (s__name__s __module__s__doc__sNonesFalsesTrues__init__s__repr__s __getitem__stest_db_locationscheckdbs run_formatdbsget_blast_index_pathsossgetcwdspaths expanduserstempfiles gettempdirsblastIndexDirssblast_index_pathssformatdbsraw_fasta_streamsdicts_blast_prog_dicts blast_programs blast_commandsget_seq_from_queryDBstranslation_kwargss__call__(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys BlastMappingžs$     !    s BlastxMappingcBs;tZdZd„ZeddddddƒZd„ZRS(sBecause blastx changes the query to multiple sequences (representing its six possible frames), getitem can no longer return a single slice object, but instead an iterator for one or more slice objects representing the frames that had homology hits.cCsd|iSdS(Ns(sselfsfilepath(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys__repr__issblastnstblastxsblastps #BlastMappingstblastncCs“||ƒ}ti|iƒ}g}xd||ii ƒD]O}y||}Wnt j o q8nXt |tƒ o|i|ƒq8q8W|SdS(s2generate slices for all translations of the query N(sselfsquerysals translationDBsget_translation_dbsdbstdbsslicessids iter_framess trans_seqsslicesKeyErrors isinstances EmptySlicesappend(sselfsquerysslicesslicesstdbs trans_seqsal((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys __getitem__ns (s__name__s __module__s__doc__s__repr__sdicts_blast_prog_dicts __getitem__(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys BlastxMappingbs   sMegablastMappingc BsGtZd„Zeddeeddddgdd gefd „ ZRS( NcCsd|iSdS(Ns(sselfsfilepath(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys__repr__…ss megablastf9.9999999999999995e-21s-UsTs-Fsms RepeatMaskers-xsmallc  Ks|i o|iƒnt||| ƒ}|iƒ} t | ƒ|g|d| ddddt |ƒgt| ƒ}|tj o"|dd|dd|g7}n|tj o|d d t |ƒg7}nt|||i|d |d td dƒƒSdS(s2Run megablast search with optional repeat masking.s-ds-Ds2s-es%es-bs%ds-vs-ps%fs seqStrings popenArgss stdinFlags-iN(sselfs blastReadysformatdbs repeat_masksseqsrmPathsrmOptss masked_seqsget_blast_index_pathsfilepathswarn_if_whitespaces blastpathsmaskOptssfloatsexpmaxslistsoptsscmdsmaxseqsNones minIdentitys process_blastsidIndexsalsdict(sselfsseqsals blastpathsexpmaxsmaxseqs minIdentitysmaskOptssrmPathsrmOptssverbosesoptsskwargssfilepaths masked_seqscmd((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys__call__ˆs   7 " (s__name__s __module__s__repr__sNones__call__(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pysMegablastMappingƒs s BlastIDIndexcBsPtZdZd„ZdZd„Zed„Zed„Zd„Z d„Z RS(s“This class acts as a wrapper around a regular seqDB, and handles the mangled IDs returned by BLAST to translate them to the correct ID. Since NCBI treats FASTA ID as a blob into which they like to stuff many fields... and then NCBI BLAST mangles those IDs when it reports hits, so they no longer match the true ID... we are forced into contortions to rescue the true ID from mangled IDs. Our workaround strategy: since NCBI packs the FASTA ID with multiple IDs (GI, GB, RefSeq ID etc.), we can use any of these identifiers that are found in a mangled ID, by storing a mapping of these sub-identifiers to the true FASTA ID.cCs||_t|ƒ|_dS(N(sseqDBsselfsBlastIDInfoDicts seqInfoDict(sselfsseqDB((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys__init__­s s|cCs|i|iƒSdS(s’Return |-packed NCBI identifiers as unpacked list. NCBI packs identifier like gi|123456|gb|A12345|other|nonsense. Return as list.N(sidssplitsselfs id_delimiter(sselfsid((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys unpack_id³scCs|tjo |i}nh}xœ|iD]‘}xˆ||ƒD]z}||joq=n|iƒ}y4|||jo||tj ot||scCszhthtd<td<<thtd<td<<}|tjo t}n|tjo t}n|||SdS(Nsblastnsblastxstblastnsblastp(s DNA_SEQTYPEsPROTEIN_SEQTYPEsprogss query_types RNA_SEQTYPEsdb_type(s query_typesdb_typesprogs((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys blast_programs <    c Csètƒ} tddddddddd d d d d dddƒ}|oti|ƒ}n|oti|ƒ}nt |||ƒ} | | i |ƒƒ} |tjot| |ƒ} n$| } x|D]}|| ƒ} qÊW| SdS(sÜApply sequence of transforms to read input from 'ofile'. srcDB: database for finding query sequences from the blast input; destDB: database for finding subject sequences from the blast input; al, if not None, must be a writeable alignment object in which to store the alignment intervals; translateSrc=True forces creation of a TranslationDB representing the possible 6-frames of srcDB (for blastx, tblastx); translateDest=True forces creation of a TranslationDB representing the possible 6-frames of destDB (for tblastn, tblastx). If pipeline is not None, it must be a list of filter functions each taking a single argument and returning an iterator or iterable result object. sidssrc_idsstarts src_startsstopssrc_endsorissrc_orisidDestsdest_ids startDests dest_startsstopDestsdest_endsoriDestsdest_oriN(sBlastHitParserspsdictsds translateSrcs translationDBsget_translation_dbssrcDBs translateDestsdestDBsCoordsToIntervalssctis parse_filesofiles alignedIvalsspipelinesNonessave_interval_alignmentsalsresultsf( sofilessrcDBsdestDBsalspipelines translateSrcs translateDestsdsfs alignedIvalsspsresultscti((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pysread_blast_alignment!s$   cCset}|tjo(tidddtdtƒ}t}n|i|ƒ|o|i ƒn|SdS(s1Save alignedIvals to al, or a new in-memory NLMSAs blasthitssmemorys pairwiseModes bidirectionalN( sFalses needToBuildsalsNones cnestedlistsNLMSAsTruesadd_aligned_intervalss alignedIvalssbuild(s alignedIvalssals needToBuild((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pyssave_interval_alignmentIs    cKsÉti|dtidti|}|tjo |}n|tj o7x*|i ƒD]\}}t |i |ƒqUWt}nt |i |ƒ}|iƒotddi|ƒƒ‚n||fSdS(sRun blast and return results.sstdinsstdoutscommand %s faileds N(s classutils FilePopenscmdsPIPEskwargssps seqStringsNonesseqsseqDicts iteritemssseqIDs write_fastasstdinswaitsOSErrorsjoin(scmdsseqs seqStringsseqDictskwargsspsseqID((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys start_blastVs$      c Ks”t|||d||\} }z]| o6y |i}Wqbt j oh| |<}qbXnt |i ||||}Wd|iƒX|SdS(s"Run blast and return an alignment.sseqDictN(s start_blastscmdsseqs seqStringsqueryDBs popenArgssseqIDspsdbsAttributeErrorsread_blast_alignmentsstdoutsblastDBsalskwargssclose( scmdsseqsblastDBsals seqStringsqueryDBs popenArgsskwargsspsseqID((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys process_blastgs!  s RepeatMaskerc Cs ti|gt|ƒdtidtƒ}t|i |dd„ƒz~|i ƒo$t ddi |idƒƒ‚nt|idd ƒ}z%xt|ƒD]\}}}PqžWWd |iƒXWd |iƒxEti|id ƒD]-}yti|ƒWqæt j oqæXqæWX|Sd S( s>Run RepeatMasker on a sequence, return lowercase-masked stringsstdins stdinFlags reformattercCs |iƒS(N(sxsupper(sx((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys~sscommand %s faileds is.maskedsrUNs.*(s classutils FilePopensprognameslistsoptssPIPEsNonesps write_fastasstdinsseqswaitsOSErrorsjoinsargssfiles _stdin_pathsifiles read_fastasidstitles seq_maskedsclosesglobsfpathsossremove( sseqsprognamesoptsstitles seq_maskedsifilesfpathspsid((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys repeat_maskxs.  $    cCsY|iƒ}t|ƒdjpt|dƒt|ƒjotid|ƒtSndS(Niisù Your sequence filepath contains whitespace characters: %s The NCBI formatdb (and blastall) programs cannot handle file paths containing whitespace! This is a known NCBI formatdb / blastall bug. Please use a path containing no whitespace characters!(sfilepathssplitslslensloggerswarnsTrue(sfilepathsl((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pyswarn_if_whitespace’s 0s BlastMappingc BsþtZdZeeeeeed„Zd„Zd„Zd„Z d„Z d„Z d„Z de ie iieiƒgZd „Zed „Zeed „Zed d ƒZed„Zd„Zd„Zd„Zeededeefed„ ZRS(sHGraph interface for mapping a sequence to homologs in a seq db via BLASTc Ks²||_t|ƒ|_||_||_|tj o ||_n |i|_|tj o ||_n|tj o ||_ n|i ƒ|i o|o|i ƒndS(sRseqDB: sequence database object to search for homologs filepath: location of FASTA format file for the sequence database blastReady: if True, ensure that BLAST index file ready to use blastIndexPath: location of the BLAST index file blastIndexDirs: list of directories for trying to build index in N( sseqDBsselfs BlastIDIndexsidIndexsverbosesshowFormatdbMessagessfilepathsNonesblastIndexPathsblastIndexDirsscheckdbs blastReadysformatdb( sselfsseqDBsfilepaths blastReadysblastIndexPathsblastIndexDirssverbosesshowFormatdbMessagesskwargs((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys__init__¡s           cCsd|iSdS(Ns(sselfsfilepath(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys__repr__ºscCs|i|ƒ}||SdS(s,return NLMSASlice representing BLAST resultsN(sselfs__call__sksal(sselfsksal((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys __getitem__½scCs™ti|dtiƒ oNti|dtiƒ o3ti|dtiƒ oti|dtiƒ otSn"||ijo ||_ntSdS(s=check whether BLAST index files ready for use; return status.s.nsds.psds.00.nsds.00.psdN( sossaccessstestpathsR_OKsFalsesselfsfilepathsblastIndexPathsTrue(sselfstestpath((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pystest_db_locationÂs l cCsCx5|iƒD]'}|i|ƒ|_|ioPq q W|iSdS(sPlook for blast index files in blastIndexPath, standard list of locationsN(sselfsblast_index_pathsstestpathstest_db_locations blastReady(sselfstestpath((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pyscheckdbÎs   cCs<ti|ƒ}ti|tiƒ otd|ƒ‚ndd|i d|ddg}|i i t jo|ddg7}ntid d i|ƒƒ|io h}ntd tid tiƒ}ti||o7t|i ƒp t|ƒtd d i|ƒƒ‚nt|_||i jo ||_ndS(s3ATTEMPT TO BUILD BLAST DATABASE INDEXES at testpaths+run_formatdb: directory %s is not writable!sformatdbs-is-ns-osTs-psFsBuilding index: s sstdoutsstderrscommand %s failedN(s classutils file_dirpathstestpathsdirnamesossaccesssW_OKsIOErrorsselfsfilepathscmdsseqDBs_seqtypesPROTEIN_SEQTYPEsloggersinfosjoinsshowFormatdbMessagesskwargssdictsPIPEscall_subprocessswarn_if_whitespacesOSErrorsTrues blastReadysblastIndexPath(sselfstestpathskwargsscmdsdirname((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys run_formatdb×s"   cCs,y |iSWntj o|iSnXdS(s+get path to base name for BLAST index filesN(sselfsblastIndexPathsAttributeErrorsfilepath(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pysget_blast_index_pathîs  sFILEPATHccs¿y |iVWntj onXx—|iD]Œ}|djo|iVq+nJ|tiijo|dƒ}n't |ƒo |ƒ}n t |ƒ}tii |tii |iƒƒVq+WdS(s-iterate over possible blast index directoriessFILEPATHs~N(sselfsblastIndexPathsAttributeErrorsblastIndexDirssmsfilepathsosspaths expanduserssscallablesstrsjoinsbasename(sselfsmss((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pysblast_index_pathsùs       cCs |tj o|i|ƒSnt}x_|iƒD]Q}|oti dƒnt }y|i|ƒSWq1t t fj oq1Xq1Wt d|ifƒ‚dS(s9try to build BLAST index files in an appropriate locations+Trying next entry in self.blastIndexDirs...s"cannot build BLAST database for %sN( sfilepathsNonesselfs run_formatdbsFalsesnotFirstsblast_index_pathsstestpathsloggersinfosTruesIOErrorsOSError(sselfsfilepathsnotFirststestpath((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pysformatdb s   cCsr|tj o||fSnyt|idƒ|fSWn6tj o*d|iƒ}t i |ƒt fSnXdS(stReturn a stream of fasta-formatted sequences. Optionally, apply an ID filter function if supplied. srUsfastacmd -D -d "%s"N( sifilesNonesidFiltersfilesselfsfilepathsIOErrorsget_blast_index_pathscmdsosspopensNCBI_ID_PARSER(sselfsifilesidFilterscmd((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pysraw_fasta_streams sblastxs#BlastxMappingcCs|tjot|iƒ|iiƒ}n|}y?|i |}|i dƒot d|d|fƒ‚nWnt j onX|SdS(sAfigure out appropriate blast program & remap via _blast_prog_dicts#s Use %s for %siN( s blastprogsNones blast_programsseqsseqtypesselfsseqDBs_seqtypesoldprogs_blast_prog_dicts startswiths ValueErrorsKeyError(sselfsseqs blastprogsoldprog((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys blast_program*s  "c Cs||iƒ}t|ƒ|d|d|ddt|ƒgt|ƒ}|t j o"|dd|dd|g7}n|SdS( s>generate command string for running blast with desired optionss-ds-ps-es%es-bs%ds-vN( sselfsget_blast_index_pathsfilepathswarn_if_whitespaces blastpaths blastprogsfloatsexpmaxslistsoptsscmdsmaxseqsNone(sselfs blastpaths blastprogsexpmaxsmaxseqsoptssfilepathscmd((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys blast_command7s  / "cCst|ƒiƒ}||SdS(s!get one sequence obj from queryDBN(sitersqueryDBsnextsseqID(sselfsqueryDBsseqID((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pysget_seq_from_queryDBAsc Csftdtdtƒdtdtƒdtdtdtƒƒ}y ||SWntj o hSnXdS(s;return kwargs for read_blast_alignment() based on blastprogstblastns translateDestsblastxs translateSrcstblastxN(sdictsTruesds blastprogsKeyError(sselfs blastprogsd((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pystranslation_kwargsFs sblastallf0.001c KsÚ|tjo | tjotdƒ‚n|o| otdƒ‚n| tj o|i| ƒ}n|i o|iƒn|i||ƒ}|i |||||ƒ} t| ||i|d| |i|ƒSdS(s=Run blast search for seq in database, return alignment objects)we need a sequence or db to use as query!s+both a sequence AND a db provided for querysqueryDBN(sseqsNonesqueryDBs ValueErrorsselfsget_seq_from_queryDBs blastReadysformatdbs blast_programs blastprogs blast_commands blastpathsexpmaxsmaxseqsoptsscmds process_blastsidIndexsalstranslation_kwargs( sselfsseqsals blastpaths blastprogsexpmaxsmaxseqsverbosesoptssqueryDBskwargsscmd((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys__call__Ps  (s__name__s __module__s__doc__sNonesFalsesTrues__init__s__repr__s __getitem__stest_db_locationscheckdbs run_formatdbsget_blast_index_pathsossgetcwdspaths expanduserstempfiles gettempdirsblastIndexDirssblast_index_pathssformatdbsraw_fasta_streamsdicts_blast_prog_dicts blast_programs blast_commandsget_seq_from_queryDBstranslation_kwargss__call__(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys BlastMappingžs$     !    s BlastxMappingcBs;tZdZd„ZeddddddƒZd„ZRS(sBecause blastx changes the query to multiple sequences (representing its six possible frames), getitem can no longer return a single slice object, but instead an iterator for one or more slice objects representing the frames that had homology hits.cCsd|iSdS(Ns(sselfsfilepath(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys__repr__issblastnstblastxsblastps #BlastMappingstblastncCs“||ƒ}ti|iƒ}g}xd||ii ƒD]O}y||}Wnt j o q8nXt |tƒ o|i|ƒq8q8W|SdS(s2generate slices for all translations of the query N(sselfsquerysals translationDBsget_translation_dbsdbstdbsslicessids iter_framess trans_seqsslicesKeyErrors isinstances EmptySlicesappend(sselfsquerysslicesslicesstdbs trans_seqsal((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys __getitem__ns (s__name__s __module__s__doc__s__repr__sdicts_blast_prog_dicts __getitem__(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys BlastxMappingbs   sMegablastMappingc BsGtZd„Zeddeeddddgdd gefd „ ZRS( NcCsd|iSdS(Ns(sselfsfilepath(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys__repr__…ss megablastf9.9999999999999995e-21s-UsTs-Fsms RepeatMaskers-xsmallc  Ks|i o|iƒnt||| ƒ}|iƒ} t | ƒ|g|d| ddddt |ƒgt| ƒ}|tj o"|dd|dd|g7}n|tj o|d d t |ƒg7}nt|||i|d |d td dƒƒSdS(s2Run megablast search with optional repeat masking.s-ds-Ds2s-es%es-bs%ds-vs-ps%fs seqStrings popenArgss stdinFlags-iN(sselfs blastReadysformatdbs repeat_masksseqsrmPathsrmOptss masked_seqsget_blast_index_pathsfilepathswarn_if_whitespaces blastpathsmaskOptssfloatsexpmaxslistsoptsscmdsmaxseqsNones minIdentitys process_blastsidIndexsalsdict(sselfsseqsals blastpathsexpmaxsmaxseqs minIdentitysmaskOptssrmPathsrmOptssverbosesoptsskwargssfilepaths masked_seqscmd((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys__call__ˆs   7 " (s__name__s __module__s__repr__sNones__call__(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pysMegablastMappingƒs s BlastIDIndexcBsPtZdZd„ZdZd„Zed„Zed„Zd„Z d„Z RS(s“This class acts as a wrapper around a regular seqDB, and handles the mangled IDs returned by BLAST to translate them to the correct ID. Since NCBI treats FASTA ID as a blob into which they like to stuff many fields... and then NCBI BLAST mangles those IDs when it reports hits, so they no longer match the true ID... we are forced into contortions to rescue the true ID from mangled IDs. Our workaround strategy: since NCBI packs the FASTA ID with multiple IDs (GI, GB, RefSeq ID etc.), we can use any of these identifiers that are found in a mangled ID, by storing a mapping of these sub-identifiers to the true FASTA ID.cCs||_t|ƒ|_dS(N(sseqDBsselfsBlastIDInfoDicts seqInfoDict(sselfsseqDB((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys__init__­s s|cCs|i|iƒSdS(s’Return |-packed NCBI identifiers as unpacked list. NCBI packs identifier like gi|123456|gb|A12345|other|nonsense. Return as list.N(sidssplitsselfs id_delimiter(sselfsid((s0build/bdist.darwin-8.11.1-i386/egg/pygr/blast.pys unpack_id³scCs|tjo |i}nh}xœ|iD]‘}xˆ||ƒD]z}||joq=n|iƒ}y4|||jo||tj ot||û‰Æ…Àt8‹G‹@8‰t$‰<$ÿP‰Ç‹ƒè‰…Àt ‰øƒÄ^_]ËF‰4$ÿP‰øƒÄ^_]Ã1ÿ‰øƒÄ^_]ÃU‰åVƒì$‹uEì‰D$Eð‰D$Eô‰$è¹ú‹ƒÀ‰‹V…Òt‹B‰$èÓù‹F‰$èÈù‹ƒè‰…Àtoè]ú…Àt‰4$èúƒ.‹Eì‰D$‹Eð‰D$‹Eô‰$èNú‹V …Òt ‹ƒè‰…Àt‹F‰4$ÿ ƒÄ$^]ËF ‹P‰$ÿR‹F‰4$ÿ ƒÄ$^]ËF‰4$ÿPë†U‰åƒì‹E‹@ …Àt‹U‰T$‰$ÿU …ÀtÉÃ1ÀÉÃU‰åSƒìè Ù‹U‹J ‹ƒ1ú‰B ƒ…Ét ‹ƒè‰…Àt1ÀƒÄ[]ËA‰ $ÿP1ÀƒÄ[]ÃU‰åWVƒì‹}‹E ‰$è¦ù‰Æ…Àt8‹G‹@8‰t$‰<$ÿP‰Ç‹ƒè‰…Àt ‰øƒÄ^_]ËF‰4$ÿP‰øƒÄ^_]Ã1ÿ‰øƒÄ^_]ÃU‰åSƒìègØ‹EÇD$‰$ÿ˜‰Â…Àt‹ƒŒù‰Bƒ‰Bƒ‰ÐƒÄ[]ÃU‰åVƒì‹u‹V…Òt ‹ƒè‰…ÀtD‹V…Òt ‹ƒè‰…Àt‹F‰u‹ˆ ƒÄ^]ÿá‹F‹P‰$ÿR‹F‰u‹ˆ ƒÄ^]ÿá‹F‹P‰$ÿRë®U‰åWVƒì‹u‹}‹F…Àt‰|$‰$ÿU …Àu‹F…Àt‰|$‰$ÿU …ÀtƒÄ^_]Ã1ÀƒÄ^_]ÃU‰åWVSƒìèo׋}‹W‹³”ø‰wƒ…Òt ‹ƒè‰…Àt5‹W‰wƒ…Òt ‹ƒè‰…Àt 1ÀƒÄ[^_]ËB‰$ÿP1ÀƒÄ[^_]ËB‰$ÿPëÀU‰åSƒìè׋EÇD$‰$ÿ˜‰Â…Àt ‹ƒ'ø‰B ƒ‰ÐƒÄ[]ÃU‰åVƒì‹u‹V …Òt ‹ƒè‰…Àt‹F‰u‹ˆ ƒÄ^]ÿá‹F ‹P‰$ÿR‹F‰u‹ˆ ƒÄ^]ÿáU‰åƒì‹E‹@ …Àt‹U‰T$‰$ÿU …ÀtÉÃ1ÀÉÃU‰åSƒìèSÖ‹U‹J ‹ƒx÷‰B ƒ…Ét ‹ƒè‰…Àt1ÀƒÄ[]ËA‰ $ÿP1ÀƒÄ[]ÃU‰åVƒì$‹uEì‰D$Eð‰D$Eô‰$èÇöƒ‹F…Àt‰$èèõ‹F…Àt‰$èÙõ‹ƒè‰…Àt?ènö…Àt‰4$è!öƒ.‹Eì‰D$‹Eð‰D$‹Eô‰$è_ö‹F‰4$ÿ ƒÄ$^]ËF‰4$ÿPë¶U‰åWVƒì‹}‹E ‰$èTö‰Æ…Àt8‹G‹@8‰t$‰<$ÿP‰Ç‹ƒè‰…Àt ‰øƒÄ^_]ËF‰4$ÿP‰øƒÄ^_]Ã1ÿ‰øƒÄ^_]ÃU‰åWVSƒì,èÕ‰Eä‰Ö‰Ï…Àtƒ…ötƒ…ÿtƒ;»8ötm…ÿtz‹ƒ<ö9Gtoƒ×ˉD$‹ƒPö‹‰$èµõ…öt ‹ƒè‰…Àto‹Eä…Àt‹U䋃艅Àte…ÿt‹ƒè‰…Àu ‹G‰<$ÿPƒÄ,[^_]˃艅À„¯1ÿ…ötv‹ƒ(ö‹Uä9B„²;³8öt!ƒÌénÿÿÿ‹F‰4$ÿP놋B‰$ÿP닃艅Àts‹ƒLö‹Uä9Bt2ƒ7̉D$‹ƒPö‹‰$èîô‹uäé5ÿÿÿ‹“8öƒ‰Öézÿÿÿ‹Bƒ‰Ö‰Eä‰|$‰t$‰$èŽôƒÄ,[^_]ËG‰<$ÿP1ÿéCÿÿÿ‹F‰4$ÿP낉ÐëÉU‰åWVSƒìlè—ӉƋƒsê‰$è¤ó‰EÔ…À„‡‰4$è‘ó‰Ç…À„拃gê‰$èˆó‰EØ…À„ÍÇ$èô‰Æ…À„¹ƒÇ‰$èJó‰EÜ…À„u‰D$4‹ƒoê‰D$0‰|$,‹UÔ‰T$(‰t$$‰t$ ‰t$‰t$‰t$‹E܉D$ÇD$ ÇD$ÇD$Ç$èó‰Eà…ÀtOèNóÇD$ ‹U؉T$‹Uà‰T$‰$è³ò‰Eä…Àt,‰Â‹ƒoê‰B@‰$èóòë1öÇEÜÇEàÇEä‹UÔ‹ƒè‰…Àt}…ÿt‹ƒè‰…À„‘…öt ‹ƒè‰…Àtl‹uÜ…öt‹UÜ‹ƒè‰…Àt;‹Mà…Ét‹Uà‹ƒè‰…ÀtM‹Uä…Òt‹U䋃艅Àu ‹B‰$ÿPƒÄl[^_]ËB‰$ÿP뺋UÔ‹B‰$ÿPérÿÿÿ‹F‰4$ÿP뉋B‰$ÿP먋G‰<$ÿPéaÿÿÿÇEàÇEäé-ÿÿÿU‰åWVSƒìèŒÑ‹} ‹Eƒƒ‰<$è{ò‰Æèò…ÀtQ‹ƒl苉ƒhèǃd胃èÈè¥ýÿÿ1ö‹U‹ƒè‰…ÀtS‹ƒè‰…Àu ‹G‰<$ÿP‰ðƒÄ[^_]Ét$‹U‹B‰$èbðÿÿ…Àt*‹@‰$èåñ…ÀtI‰Æ‹U‹ƒè‰…Àu­‹B‰$ÿPë¢1É1Ò‹ƒ¥ò‹èªûÿÿ‹ƒl苉ƒhèǃdè…éYÿÿÿ‹ƒl苉ƒhèǃdè†é<ÿÿÿU‰åWVSƒìèƒÐƒ ç‰D$ ƒ{ĉD$‹E‰D$‹E ‰$èuð…Àu 1ö‰ðƒÄ[^_]ËEƒ‹ƒ³ç‰D$‹U‰$èÑð‰Æ…ÀtnÇD$‰$è÷ð‰Ç…À„†‹ƒè‰…Àt>‰<$èqð‰Æ…À„—‹ƒè‰…ÀtS‹U‹ƒè‰…Àu…‹B‰$ÿP‰ðƒÄ[^_]ËF‰4$ÿPë·‹ƒc狉ƒ_çǃ[ç~ƒÈèöûÿÿ1öë­‹G‰<$ÿP뢋ƒc狉ƒ_çǃ[ç~‹ƒè‰…ÀuËF‰4$ÿP븋ƒc狉ƒ_çǃ[ç~‹ƒè‰…Àu•‹G‰<$ÿPëŠU‰åWVSƒì<è"σ®å‰D$ ƒÉD$‹E‰D$‹E ‰$èï…Àu 1ÿ‰øƒÄ<[^_]ËEƒ‹³GðƒÇ$èßî‰EØ…À„¥‹ƒè‰…À„ˆ‹U‹B‹‰EÜ…ÀA‹U؃‰×‰Ö‹ƒè‰…Àt!‹U‹ƒè‰…Àu‹B‰$ÿP‰øƒÄ<[^_]ËF‰4$ÿPëÔÇEÔë*‹ƒè‰…À„ú‹ƒè‰…À„ƒEÔ‹EÔ9EÜtŒ‹ƒ.æ‰D$‹E؉$è¾î‰Eä…À„·‹}ÔÁç‹U‹B‹@‹8‰$èäî‰Æ…À„³‹U‹B‹@‹D8‰$èÅî‰Ç…À„ÚÇ$è‚î‰Eà…À„£‰p ‰xÇ$èeî‰Æ…À„¤‹Uà‰P ‰D$‹Eä‰$èdî‰Ç…À„ˆ‹U䋃艅À…ÿÿÿ‹B‰$ÿP‹ƒè‰…À…ÿÿÿ‹F‰4$ÿP‹ƒè‰…À…ýþÿÿ‹G‰<$ÿPéïþÿÿ‹F‰4$ÿPéjþÿÿ‹ƒ拉ƒþåǃúåxƒÊÆèYùÿÿ1ÿéYþÿÿ‹ƒ拉ƒþåǃúåzÇEà‹U䋃艅ÀtI…öt ‹ƒè‰…ÀtH…ÿt ‹ƒè‰…ÀtD‹}à…ÿt‹Uà‹ƒè‰…Àt‹uØë‰‹B‰$ÿP‹uØéxÿÿÿ‹Uä‹B‰$ÿPë©‹F‰4$ÿPë­‹G‰<$ÿP뱋ƒ拉ƒþåǃúåz‹uØé4ÿÿÿ‹ƒ拉ƒþåǃúåz1ÿÇEàé?ÿÿÿ‹ƒ拉ƒþåǃúåzé"ÿÿÿ‹ƒ拉ƒþåǃúåz1ÿéÿÿÿU‰åWVSƒì,èÍ˃]â‰D$ ƒÅ¿‰D$‹E‰D$‹E ‰$è¿ë…Àu 1ÿ‰øƒÄ,[^_]ËEƒ‹³òìƒÇ$èŠë‰EÜ…À„c‹ƒè‰…À„F‹U‹B‹‰Eà…ÀA‹U܃‰×‰Ö‹ƒè‰…Àt!‹U‹ƒè‰…Àu‹B‰$ÿP‰øƒÄ,[^_]ËF‰4$ÿPëÔÇEØë-‹U䋃艅À„µ‹ƒè‰…À„¾ƒEØ‹EØ9Eàt‰‹ƒÙâ‰D$‹E܉$èfë‰Ç…À„3‹U‹B‹@‹UØ‹Љ$èë‰Æ…À„2Ç$èMë‰Eä…À„¡‰p ‰D$‰<$èQë‰Æ…À„ˆ‹ƒè‰…À…Tÿÿÿ‹G‰<$ÿP‹U䋃艅À…Kÿÿÿ‹B‰$ÿP‹ƒè‰…À…Bÿÿÿ‹F‰4$ÿPé4ÿÿÿ‹F‰4$ÿPé¬þÿÿ‹ƒ­â‹‰ƒ©âǃ¥ânƒ•ÃèFöÿÿ1ÿé›þÿÿ‹ƒ­â‹‰ƒ©âǃ¥âp‹ƒè‰…Àt{…öt ‹ƒè‰…Àtz‹Eä…Àt‹U䋃艅Àt‹uÜ뢋B‰$ÿP‹uÜ딋ƒ­â‹‰ƒ©âǃ¥âp‹uÜétÿÿÿ‹ƒ­â‹‰ƒ©âǃ¥âpÇEäézÿÿÿ‹G‰<$ÿPéwÿÿÿ‹F‰4$ÿPéxÿÿÿU‰åWVSƒìèÉ‹Eƒ‹ƒXà‰D$‹U‰$è é‰Æ…À„äÇD$‰$èÂé‰Ç…À„•‹ƒè‰…Àt:‰<$è<鉯…ÀtC‹ƒè‰…Àtf‹U‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄ[^_]ËF‰4$ÿP‰<$èùè‰Æ…Àu½‹ƒüß‹‰ƒøßǃôßt‹ƒè‰…Àu9‹G‰<$ÿPë.‹G‰<$ÿP닃üß‹‰ƒøßǃôßt‹ƒè‰…Àt,ƒÁèuôÿÿ1öéZÿÿÿ‹ƒüß‹‰ƒøßǃôßtëÔ‹F‰4$ÿPëÉU‰åWVSƒì,èàÇ‹Eƒ‹U ƒ‹ƒ߉D$‹U‹B ‰$è[è‰Æ…À„ ‹E ‰D$‰4$èjè‰Ç…À„L‹ƒè‰…À„Œ‰<$è…è‰Æè$è…À„•‹ƒÀÞ‹‰ƒ¼Þǃ¸Þ¨‹ƒè‰…ÀtGƒì¿è óÿÿ1ö‹U‹ƒè‰…Àt!‹U ‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄ,[^_]ËB‰$ÿPëÔ‹G‰<$ÿP뮋F‰4$ÿP‰<$èðç‰Æèç…À…kÿÿÿ‹ƒè‰…À„ê‰t$‹U‹B‰$èæÿÿ‰Ç…À„8‹ƒ߉D$‹U‹B ‰$è:ç‰Æ…À„D‹W‹@‹@4…À„©‹@ …À„ž‰T$‰4$è³æ‰Ç…ÿ„Ç‹ƒè‰…Àt_‰þé ÿÿÿ‹ƒÀÞ‹‰ƒ¼Þǃ¸Þ¨‹ƒè‰…Àt …ÿ…ÇþÿÿéÍþÿÿ‹F‰4$ÿPë苃ÀÞ‹‰ƒ¼Þǃ¸Þ¨é¥þÿÿ‹F‰4$ÿP‰þé¢þÿÿ‹G‰<$ÿPéÿÿÿ‰$è¹æ‰Eä…Àt.‰D$‰4$èƒæ‰Ç‹U䋃艅À…Aÿÿÿ‹B‰$ÿPé3ÿÿÿ1ÿ‹ƒÀÞ‹‰ƒ¼Þǃ¸Þ«éFÿÿÿ1É1Ò‹ƒùè‹èIðÿÿ‹ƒÀÞ‹‰ƒ¼Þǃ¸Þªéýýÿÿ‹ƒÀÞ‹‰ƒ¼Þǃ¸Þ«éàýÿÿU‰åWVSƒì,è"Ń¶Û‰D$ ƒ¹‰D$‹E‰D$‹E ‰$èå…Àu 1ö‰ðƒÄ,[^_]ËEƒÇ$èÄå‰Eä…À„ÌÇ$è­å‰Ç…ÀtSÇ$èn副…ÀtA‹Eƒ‰F ‹Uä‰V‰~‰t$‹ƒ~Û‰$èbå‰Ç…À„º‹ƒè‰…À„“‰þëB‹ƒÜ‹‰ƒþÛǃúÛ´‹U䋃艅Àt[…ÿt ‹ƒè‰…ÀtgƒR½è…ðÿÿ1ö‹U‹ƒè‰…À… ÿÿÿ‹B‰$ÿP‰ðƒÄ,[^_]˃Ü‹‰ƒþÛǃúÛ´ë´‹Uä‹B‰$ÿPë—‹F‰4$ÿP‰þ릋G‰<$ÿP뎋ƒÜ‹‰ƒþÛǃúÛ´‹ƒè‰…À…gÿÿÿ‹F‰4$ÿPéYÿÿÿU‰åWVSƒì,è€ÃƒÚ‰D$ ƒx·‰D$‹E‰D$‹E ‰$èrã…Àu 1ö‰ðƒÄ,[^_]ËEƒÇ$è"ä‰Eä…À„ÌÇ$è ä‰Ç…ÀtSÇ$èÌã‰Æ…ÀtA‹Eƒ‰F ‹Uä‰V‰~‰t$‹ƒÜÙ‰$èÀã‰Ç…À„º‹ƒè‰…À„“‰þëB‹ƒ`Ú‹‰ƒ\ÚǃXÚ±‹U䋃艅Àt[…ÿt ‹ƒè‰…ÀtgƒÔ»èãîÿÿ1ö‹U‹ƒè‰…À… ÿÿÿ‹B‰$ÿP‰ðƒÄ,[^_]˃`Ú‹‰ƒ\ÚǃXڱ봋Uä‹B‰$ÿPë—‹F‰4$ÿP‰þ릋G‰<$ÿP뎋ƒ`Ú‹‰ƒ\ÚǃXÚ±‹ƒè‰…À…gÿÿÿ‹F‰4$ÿPéYÿÿÿU‰åWVSƒìèÞÁ‹EƒÇ$è‰â‰Æ…À„Œ‹Uƒ‰P ‰D$‹ƒ:؉$è‚â‰Ç…Àt9‹ƒè‰…Àt#‰þ‹U‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄ[^_]ËF‰4$ÿPëÒ‹ƒ¾Ø‹‰ƒºØÇƒ¶Ø®‹ƒè‰…Àt)ƒVºè•íÿÿ1ö뢋ƒ¾Ø‹‰ƒºØÇƒ¶Ø®ë׋F‰4$ÿPëÌU‰åWVSƒì,èÁƒŸ×‰D$ ƒû´‰D$‹E‰D$‹E ‰$èõà…Àu 1ö‰ðƒÄ,[^_]ËEƒÇ$è¥á‰Eä…À„ØÇ$èŽá‰Ç…Àt_Ç$èOá‰Æ…ÀtM‹ƒ(⃉F ‹Eä‰F‰~‹Uƒ‰V‰t$‹ƒ_׉$è7á‰Ç…À„º‹ƒè‰…À„“‰þëB‹ƒã׋‰ƒß×ǃÛ×é‹U䋃艅Àt[…ÿt ‹ƒè‰…Àtgƒ›¹èZìÿÿ1ö‹U‹ƒè‰…À…ÿÿÿ‹B‰$ÿP‰ðƒÄ,[^_]˃ã׋‰ƒß×ǃÛ×éë´‹Uä‹B‰$ÿPë—‹F‰4$ÿP‰þ릋G‰<$ÿP뎋ƒã׋‰ƒß×ǃÛ×鋃艅À…gÿÿÿ‹F‰4$ÿPéYÿÿÿU‰åWVSƒì,èU¿ƒõÕ‰D$ ƒM³‰D$‹E‰D$‹E ‰$èGß…Àu 1ö‰ðƒÄ,[^_]ËEƒÇ$è÷߉Eä…À„ØÇ$èà߉DžÀt_Ç$è¡ß‰Æ…ÀtM‹ƒzàƒ‰F ‹Eä‰F‰~‹Uƒ‰V‰t$‹ƒ±Õ‰$è‰ß‰Ç…À„º‹ƒè‰…À„“‰þëB‹ƒ5Ö‹‰ƒ1Öǃ-Öæ‹U䋃艅Àt[…ÿt ‹ƒè‰…Àtgƒ¸è¬êÿÿ1ö‹U‹ƒè‰…À…ÿÿÿ‹B‰$ÿP‰ðƒÄ,[^_]˃5Ö‹‰ƒ1Öǃ-Öæë´‹Uä‹B‰$ÿPë—‹F‰4$ÿP‰þ릋G‰<$ÿP뎋ƒ5Ö‹‰ƒ1Öǃ-Öæ‹ƒè‰…À…gÿÿÿ‹F‰4$ÿPéYÿÿÿU‰åWVSƒìLè§½‹EÇD$‰$ÿ˜‰Ç…À„&‹ƒÌÞ‰G ƒ‰GƒÇEäEà‰D$Eä‰D$ƒû̉D$ ƒ›¶‰D$‹U‰T$‹E ‰$èTÝ…À„ƒ‹E䃋“Ô‰UÔ‹uä…Ò„;³ÌÞt"‹F9EÔt‹UÔ‰T$‰$èìÝ…À„‹u䃋G‹ƒê‰…Ò„½‹Eä‰G‹Eä‹@ ƒ‹G ‹ƒê‰…Ò„‹‹Eä‹@ ‰G ‹Eä‹@‹P‹Eà‹D‰G1ö‹ƒè‰…ÀtI‹E䋃ꉅÒt)…öx ‰øƒÄL[^_]˃艅À„ø1ÿ‰øƒÄL[^_]ËEä‹P‰$ÿR…öyËëÓ‹G‰<$ÿP‹E䋃ꉅÒu®ëÕ‹G ‹P‰$ÿRédÿÿÿ‹G‹P‰$ÿR‹Eä‰G‹Eä‹@ ƒ‹G ‹ƒê‰…Ò…7ÿÿÿëÀ‹F‹@ ‰D$‹UÔ‹B ‰D$ ƒ‹¶‰D$ƒ³¶‰D$‹ƒäÞ‹‰$èÜ‹ƒ‡Ô‹‰ƒƒÔǃÔÔƒë¶èìçÿÿ¾ÿÿÿÿéîþÿÿƒŸ¶‰D$‹ƒ´Þ‹‰$èÁÛë·‹G‰<$ÿP1ÿéßþÿÿU‰åWVSƒì,èM»‹EƒÇ$è%܉Eä…À„/Ç$è܉DžÀt_Ç$èÏۉƅÀtM‹ƒr܃‰F ‹Eä‰F‰~‹Uƒ‰V‰t$‹ƒ©Ñ‰$è·Û‰Ç…À„ ‹ƒè‰…À„„‰þëB‹ƒ-Ò‹‰ƒ)Òǃ%Òã‹U䋃艅Àt=…ÿt ‹ƒè‰…Àt@ƒµ´èÚæÿÿ1ö‹U‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄ,[^_]ËUä‹B‰$ÿP…ÿu·ëÀ‹G‰<$ÿP뵋F‰4$ÿP‰þ뵋ƒ-Ò‹‰ƒ)Òǃ%Ò㋃艅Àu…‹F‰4$ÿPéwÿÿÿ‹ƒ-Ò‹‰ƒ)Òǃ%ÒãéZÿÿÿU‰åWVSƒì,èÖ¹‹Eƒ‹U ƒ‹‹ûÚ‰M䃋ƒщD$‹U‹B ‰$èEډƅÀ„Ü‹M ‰L$‰$èTډDžÀ„Ž‹ƒè‰…À„ž‰<$èoÚ‰ÆèÚ…À„§‹ƒ¶Ð‹‰ƒ²Ðǃ®Ð‹ƒè‰…À„3ƒb³è†åÿÿ1ö‹M䋃艅Àt:‹U‹ƒè‰…Àt!‹M ‹ƒè‰…Àu ‹A‰ $ÿP‰ðƒÄ,[^_]ËB‰$ÿPëÔ‹A‰ $ÿP뻋F‰4$ÿP‰<$èÈÙ‰ÆègÙ…À…Yÿÿÿ‹ƒè‰…À„‰t$‹U‹B‰$èžØÿÿ‰Â…À„-‹M‹A+PÁú‰$èaىƅÀ„òÇ$èىDžÀ„´‹Eƒ‰G ‰w‰|$‹ƒ:Љ$èىƅÀ„‹ƒè‰…À„ü‹U䋃艅À„܉uäƒéÚþÿÿ‹G‰<$ÿPé¿þÿÿ‹ƒ¶Ð‹‰ƒ²Ðǃ®Ð‹ƒè‰…À…˜þÿÿ‹F‰4$ÿPéŠþÿÿ‹ƒ¶Ð‹‰ƒ²Ðǃ®Ðémþÿÿ‹ƒ¶Ð‹‰ƒ²Ðǃ®Ð"묋G‰<$ÿPéÔþÿÿ‹ƒ¶Ð‹‰ƒ²Ðǃ®Ð"é(þÿÿ1É‹ƒïÚ‹è.âÿÿ‹ƒ¶Ð‹‰ƒ²Ðǃ®Ðéüýÿÿ‹B‰$ÿPéÿÿÿ‹G‰<$ÿPéöþÿÿ‹ƒ¶Ð‹‰ƒ²Ðǃ®Ð"é´ýÿÿU‰åWVSƒì<è붃͉D$ ƒãª‰D$‹E‰D$‹E ‰$èÝÖ…Àu 1ÿ‰øƒÄ<[^_]ËEƒ‹“؉U؃Ç$è¥Ö‰EÜ…À„‹UØ‹ƒè‰…À„ø‹U‹B‹‰Eà…Àg‹U܃‰×‰Ö‹UØ‹ƒè‰…Àt0‹ƒè‰…Àt9‹U‹ƒè‰…À…wÿÿÿ‹B‰$ÿP‰øƒÄ<[^_]ËB‰$ÿP‹ƒè‰…ÀuÇ‹F‰4$ÿPë¼ÇEÔ‹EÔ骋UØ‹ƒè‰…À„‰}Ø‹ƒ÷͉D$‹E܉$èj։ƅÀ„úÇ$èr։DžÀ„‹U؃‰P ‰D$‰4$èqÖ‰Eä…À„þ‹ƒè‰…À„¹‹ƒè‰…À„‹U䋃艅À„˃EÔ‹EÔ9Eà„àþÿÿ‰$è-։DžÀ„òÇ$èêՉƅÀ„ù‹Uƒ‰P ‰x‰D$‹ƒO͉$èàՉDžÀ„‹ƒè‰…À…÷þÿÿ‹F‰4$ÿP‹UØ‹ƒè‰…À…îþÿÿ‹B‰$ÿPéàþÿÿ‹F‰4$ÿP‹ƒè‰…À…>ÿÿÿ‹G‰<$ÿP‹U䋃艅À…5ÿÿÿ‹B‰$ÿPé'ÿÿÿ‹B‰$ÿPéúýÿÿ‹ƒËÍ‹‰ƒÇÍǃÃÍB‹u؃›°è©àÿÿ1ÿéæýÿÿ‹ƒËÍ‹‰ƒÇÍǃÃÍE‹uÜëÑ‹ƒËÍ‹‰ƒÇÍǃÃÍE‹ƒè‰…À„“…öt ‹ƒè‰…Àt‹uÜë–‹F‰4$ÿP‹uÜ눋ƒËÍ‹‰ƒÇÍǃÃÍEëÈ‹ƒËÍ‹‰ƒÇÍǃÃÍF‹uÜéNÿÿÿ‹ƒËÍ‹‰ƒÇÍǃÃÍF뎋ƒËÍ‹‰ƒÇÍǃÃÍFé^ÿÿÿ‹G‰<$ÿPé_ÿÿÿU‰åWVSƒì,èT³ƒüɉD$ ƒL§‰D$‹E‰D$‹E ‰$èFÓ…Àu 1ö‰ðƒÄ,[^_]ËEƒÇ$èöÓ‰Eä…À„ÌÇ$èßӉDžÀtSÇ$è Ó‰Æ…ÀtA‹Eƒ‰F ‹Uä‰V‰~‰t$‹ƒ¼É‰$è”ӉDžÀ„º‹ƒè‰…À„“‰þëB‹ƒ4Ê‹‰ƒ0Êǃ,Ê,‹U䋃艅Àt[…ÿt ‹ƒè‰…Àtgƒ$­è·Þÿÿ1ö‹U‹ƒè‰…À… ÿÿÿ‹B‰$ÿP‰ðƒÄ,[^_]˃4Ê‹‰ƒ0Êǃ,Ê,ë´‹Uä‹B‰$ÿPë—‹F‰4$ÿP‰þ릋G‰<$ÿP뎋ƒ4Ê‹‰ƒ0Êǃ,Ê,‹ƒè‰…À…gÿÿÿ‹F‰4$ÿPéYÿÿÿU‰åWVSƒì,è²±ƒ^ȉD$ ƒª¥‰D$‹E‰D$‹E ‰$è¤Ñ…Àu 1ö‰ðƒÄ,[^_]ËEƒÇ$èTÒ‰Eä…À„ÌÇ$è=҉DžÀtSÇ$èþщƅÀtA‹Eƒ‰F ‹Uä‰V‰~‰t$‹ƒȉ$èòщDžÀ„º‹ƒè‰…À„“‰þëB‹ƒ’È‹‰ƒŽÈǃŠÈ)‹U䋃艅Àt[…ÿt ‹ƒè‰…Àtgƒ¦«èÝÿÿ1ö‹U‹ƒè‰…À… ÿÿÿ‹B‰$ÿP‰ðƒÄ,[^_]˃’È‹‰ƒŽÈǃŠÈ)ë´‹Uä‹B‰$ÿPë—‹F‰4$ÿP‰þ릋G‰<$ÿP뎋ƒ’È‹‰ƒŽÈǃŠÈ)‹ƒè‰…À…gÿÿÿ‹F‰4$ÿPéYÿÿÿU‰åWVSƒìè°‹EƒÇ$è»Ð‰Æ…À„Œ‹Uƒ‰P ‰D$‹ƒxƉ$è´Ð‰Ç…Àt9‹ƒè‰…Àt#‰þ‹U‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄ[^_]ËF‰4$ÿPëÒ‹ƒðÆ‹‰ƒìÆÇƒèÆ&‹ƒè‰…Àt)ƒ$ªèÇÛÿÿ1ö뢋ƒðÆ‹‰ƒìÆÇƒèÆ&ë׋F‰4$ÿPëÌU‰åWVSƒì<è5¯‹Eƒ‹“ZЃ‹E ‰$èЉÆè½Ï…À…Ø…öx ‹E;p ŒöÇ$è­Ï‰Æ…ÀtY‹ƒ™Æƒ‹ƒ™Æ‰F ‰t$‹ƒFЋ‰$èŸÏ‰Ç…À„:‹ƒè‰…À„1É1Ò‰øèÙÿÿ‹ƒè‰…À„‹ƒÆ‹‰ƒÆÇƒ ư‹“ZЉU؃i©èÀÚÿÿ1ö‹UØ‹ƒè‰…ÀtD‹M‹ƒè‰…Àu ‹A‰ $ÿP‰ðƒÄ<[^_]˃Æ‹‰ƒÆÇƒ Ƭ‹‹ZЉMØë¡‹B‰$ÿP뱯p¯p‹@4°‰uÔÇ$è÷͉Eà…À„΋“ZЋƒè‰…À„«‹M‹I‰MÜ‹E¯H‰M܅ɰ‹Eàƒ‰Æ‰E؉Âé<ÿÿÿ‹F‰4$ÿPéãþÿÿ‹G‰<$ÿPéïþÿÿ‹ƒÆ‹‰ƒÆÇƒ ưÇE䋃ZЉEØ‹ƒè‰…ÀtD‹Eä…À„Òþÿÿ1ÿ‹M䋃艅À„D…ÿ„¶þÿÿ‹ƒè‰…À…§þÿÿ‹G‰<$ÿPé™þÿÿ‹F‰4$ÿPë±ÇEÐë.‹ƒè‰…À„º‹ƒè‰…À„ƒEЋMÐ9MÜ„ÿÿÿ‹ƒAƉD$‹Uà‰$èQ͉Eä…À„Ë‹MЋUÔ‹Љ$è€Í‰Æ…À„ÓÇ$è=͉DžÀ„â‰p ‰D$‹Eä‰$è?͉ƅÀ„é‹U䋃艅À…Sÿÿÿ‹B‰$ÿPéEÿÿÿ‹F‰4$ÿPéUÿÿÿ‹G‰<$ÿPé8ÿÿÿ‹B‰$ÿPéGþÿÿ‹ƒÆ‹‰ƒÆÇƒ Ʋ‹ƒZЉEØézýÿÿ‹A‰ $ÿPé®þÿÿ‹ƒÆ‹‰ƒÆÇƒ Æ´‹Uà‰UØéIýÿÿ‹ƒÆ‹‰ƒÆÇƒ Æ´1ÿ‹Mà‰MØéTþÿÿ‹ƒÆ‹‰ƒÆÇƒ Æ´‹Mà‰MØéþÿÿ‹ƒÆ‹‰ƒÆÇƒ Æ´ë¸U‰åWVSƒìLèI«‹}ÇEäEä‰D$ƒ©º‰D$ ƒ ¢‰D$‹E‰D$‹E ‰$è*Ë…Àu 1ö‰ðƒÄL[^_]ËE䃋G‰$èòÊ‹Eä‰$èæË‰Æè…Ë…Àt_‹ƒ)‹‰ƒ%Âǃ!½ƒ©¥è×ÿÿ1ö‹ƒè‰…Àt$‹E䋃ꉅÒuŽ‹Eä‹P‰$ÿR‰ðƒÄL[^_]ËG‰<$ÿPëщw‹G‰$èUˉƅÀ„À‰D$‹Eä‰$èçʉEÐ…À„û‹ƒè‰…À„‹G‰$èˉƅÀ„Ÿ‰D$‹EЉ$è©Ê‰EÔ…À„½‹UЋƒè‰…À„‹ƒè‰…À„Ù‹EÔ‰$èàʉÆèÊ…À…ô‹UÔ‹ƒè‰…À„»‰4$èÊÿÿ‰G‹ƒñ‰Æéîþÿÿ‹ƒ)‹‰ƒ%Âǃ!¾éÄþÿÿ‹ƒ)‹‰ƒ%Âǃ!¾‹UЋƒè‰…À…šþÿÿ‹B‰$ÿPéŒþÿÿ‹ƒ)‹‰ƒ%Âǃ!¾‹ƒè‰…ÀtD‹EÐ…Àu¶é]þÿÿ‹F‰4$ÿPé×þÿÿ‹F‰4$ÿPéÿÿÿ‹B‰$ÿPé7ÿÿÿ‹B‰$ÿPéîþÿÿ‹F‰4$ÿP뱋ƒ)‹‰ƒ%Âǃ!¾‹UÔéQÿÿÿU‰åWVSƒìL謨‹EÇD$‰$ÿ˜‰Ç…À„3ÇEäÇEà‹ƒ8À‰EÜ‹ƒ<À‰EØE؉D$E܉D$Eà‰D$Eä‰D$ƒ¸‰D$ ƒL£‰D$‹E‰D$‹U ‰$èDÈ…À„ºƒ‹E䃋Eàƒ‹E܃‹E؃‹Eä‰$èɉÆè È…À„,‹ƒŒ¿‹‰ƒˆ¿Çƒ„¿˜ƒT£è'Ôÿÿ¾ÿÿÿÿ‹ƒè‰…Àt‹E䋃ꉅ҄ˆ‹Eà‹ƒê‰…Ò„”‹EÜ‹ƒê‰…Ò„ ‹EØ‹ƒê‰…Òt)…öx ‰øƒÄL[^_]˃艅À„Õ1ÿ‰øƒÄL[^_]ËEØ‹P‰$ÿR…öyËëÓ‹G‰<$ÿP‹E䋃ꉅ҅xÿÿÿ‹Eä‹P‰$ÿR‹Eà‹ƒê‰…Ò…lÿÿÿ‹Eà‹P‰$ÿR‹EÜ‹ƒê‰…Ò…`ÿÿÿ‹EÜ‹P‰$ÿR‹EØ‹ƒê‰…Ò…Pÿÿÿétÿÿÿ‰wÇG ‹E܉$è±Ç‰ÆèPÇ…Àt-‹ƒŒ¿‹‰ƒˆ¿Çƒ„¿šé¯þÿÿ‹G‰<$ÿP1ÿéÿÿÿ‰w‹Eà‰D$‹Eä‰$èöƉƅÀtz‹E܉D$‰4$èáÆ‰EÔ…À„ˆ‹ƒè‰…Àtr‹EÔ‰$è.ljÆèÍÆ…À„˜‹ƒŒ¿‹‰ƒˆ¿Çƒ„¿›‹UÔ‹ƒè‰…À…þÿÿ‹UÔ‹B‰$ÿPé þÿÿ‹ƒŒ¿‹‰ƒˆ¿Çƒ„¿›éíýÿÿ‹F‰4$ÿP냋ƒŒ¿‹‰ƒˆ¿Çƒ„¿›‹ƒè‰…À…»ýÿÿ‹F‰4$ÿPé­ýÿÿ‹UÔ‹ƒè‰…Àu ‹B‰$ÿP‰4$èÐÅÿÿ‰G‹Eà‰$èZƉÆèùÅ…Àt‹ƒŒ¿‹‰ƒˆ¿Çƒ„¿œéXýÿÿ‰w‹Eà‰$è$ƉÆèÃÅ…Àt‹ƒŒ¿‹‰ƒˆ¿Çƒ„¿é"ýÿÿ‰4$è\Åÿÿ‰G‹EØ;ƒÑÉt4‰$èÞʼnÆè}Å…À„Ä‹ƒŒ¿‹‰ƒˆ¿Çƒ„¿¡éØüÿÿÇ$èʼnƅÀ„¢‰D$‹Eà‰$èÙĉEÔ…ÀtG‹ƒè‰…Àu ‹F‰4$ÿP‹EÔ‰$ègʼnÆèÅ…Àt:‹ƒŒ¿‹‰ƒˆ¿Çƒ„¿Ÿé8þÿÿ‹ƒŒ¿‹‰ƒˆ¿Çƒ„¿Ÿé~þÿÿ‹UÔ‹ƒè‰…Àu ‹B‰$ÿP‰w ÇG$1öé0üÿÿ‹ƒŒ¿‹‰ƒˆ¿Çƒ„¿ŸéüÿÿU‰åVSƒì0èÍ£ÇEôEô‰D$ƒI³‰D$ ƒš‰D$‹E‰D$‹E ‰$è±Ã…Àu 1ö‰ðƒÄ0[^]ËEôƒèöÉƅÀ„Ù‰D$‹ƒ»‰D$‹Eô‰$è<Ä…ÀˆÒ‹ƒè‰…À„›Ç$èGÉƅÀtb‰D$‹ƒõº‰D$‹Eô‰$èúÃ…ÀˆÌ‹ƒè‰…À„¯‹ƒòă‰Æ‹Eô‹ƒê‰…Ò…Sÿÿÿ‹Eô‹P‰$ÿR‰ðƒÄ0[^]˃­º‹‰ƒ©ºÇƒ¥º ƒ™žè Ïÿÿ1ö벋F‰4$ÿPéWÿÿÿ‹ƒ­º‹‰ƒ©ºÇƒ¥ºëÉ‹ƒ­º‹‰ƒ©ºÇƒ¥º‹ƒè‰…Àu¦‹F‰4$ÿP뛋F‰4$ÿPéCÿÿÿ‹ƒ­º‹‰ƒ©ºÇƒ¥º ëÂU‰åWVSƒì\è¢ÇEäÇEàÇEÜÇEØÇEÔEà‰D$Eä‰D$ƒ¢±‰D$ ƒ‰D$‹E‰D$‹E ‰$èßÁ…Àu 1ö‰ðƒÄ\[^_]ËE䃋Eàƒ‹»C˃V¹‰D$‹Eä‰$è,‰‰EÜ…À„‚‹Eà‰D$‰$è8‰EØ…Àtl‹EÜ‹ƒê‰…Ò„™ÇEÜ‹uØÇEØ‹ƒè‰…À„M‹E䋃ꉅ҄V‹Eà‹ƒê‰…Ò…Sÿÿÿ‹Eà‹P‰$ÿR‰ðƒÄ\[^_]˃þ¸‹‰ƒú¸Çƒö¸‹UÜ…Òt‹ƒè‰…Àu ‹EÜ‹P‰$ÿRÇEÜ‹UØ…Òt‹ƒè‰…Àu ‹EØ‹P‰$ÿRÇEØ‹ƒ7ˉ$èXÁ…À…Ö1öÇE¼‹»CËUÜ…Òt‹ƒè‰…À„”‹UØ…Òt‹ƒè‰…À„‹UÔ…Òt‹ƒè‰…À„Š…öt‹ƒè‰…À„ˆ‹E¼…Àt‹U¼‹ƒè‰…À„.ƒ*èWÌÿÿ1ö‹ƒè‰…À…³þÿÿ‹G‰<$ÿP‹E䋃ꉅ҅ªþÿÿ‹Eä‹P‰$ÿRé™þÿÿ‹EÜ‹P‰$ÿRéVþÿÿƒèþËÿÿè.À‰EÀEÔ‰E¸‰D$}؉|$u܉4$èPÀ‹U¸‰T$‰|$‰4$èÀèÀ…À„Õ‹UÜ…Òt‹ƒè‰…Àu ‹EÜ‹P‰$ÿR‹UØ…Òt‹ƒè‰…Àu ‹EØ‹P‰$ÿR‹UÔ…Òt‹ƒè‰…Àu ‹EÔ‹P‰$ÿR‹ƒþ¸‹‰ƒú¸Çƒö¸1öÇE¼‹»CÃédþÿÿ‹B‰$ÿPéÄþÿÿ‹EÜ‹P‰$ÿRé[þÿÿ‹EØ‹P‰$ÿRé`þÿÿ‹EÔ‹P‰$ÿRéeþÿÿ‹F‰4$ÿPéjþÿÿ‹E܃‹E؃‹EÔƒ‹EÀ‹P4…Òt‹ƒè‰…À„R‹EÀ‹P8…Òt‹ƒè‰…À„P‹EÀ‹P<…Ò„Y‹ƒè‰…À„‹UÀ‹E܉B4‹E؉B8‹EÔ‰B<‹ƒF¹‰D$‹Eä‰$èž¾‰Æ…À„§‰$èi¾‰Çƒøÿ„”‹ƒè‰…À„"‰<$èµ¾‰EÄ…À„+‹“C˃艅À„‹ƒV¹‰D$‹Eä‰$è5¾‰Æ…À„´‹EĉD$‹Eà‰D$‰4$è~¾…Àˆ–‹ƒè‰…À„=‹ƒF¹‰D$‹Eä‰$è齉ƅÀ„÷‹ƒ*¹‰D$‰4$èͽ‰E¼…À„º‹ƒè‰…À„Ç$莉ƅÀ„•‹Eàƒ‹Eà‰F ‰t$‹U¼‰$è¾½‰Ç…À„p‹U¼‹ƒè‰…À„‹ƒè‰…À„ó‹ƒè‰…À„Ö‹Eă‹EÜ‹ƒê‰…Ò„­ÇEÜ‹EØ‹ƒê‰…Ò„ƒÇEØ‹EÔ‹ƒê‰…Ò„YÇEÔ‹uĉ÷éûÿÿ‹ƒþ¸‹‰ƒú¸Çƒö¸ÇE¼‹»CÃé¯ûÿÿ‹UÀ‹B<‹P‰$ÿR‹UÀéçýÿÿ‹UÀ‹B4‹P‰$ÿR‹EÀéšýÿÿ‹UÀ‹B8‹P‰$ÿR‹EÀéœýÿÿ‰Âé²ýÿÿ‹ƒþ¸‹‰ƒú¸Çƒö¸‹}ÄÇE¼é<ûÿÿ‹F‰4$ÿPéÐýÿÿ‹B‰$ÿPéêýÿÿ‹ƒþ¸‹‰ƒú¸Çƒö¸1öÇE¼‹»CÃéôúÿÿ‹ƒþ¸‹‰ƒú¸Çƒö¸‹}ÄéÔúÿÿ‹ƒþ¸‹‰ƒú¸Çƒö¸‹}ÄÇE¼é­úÿÿ‹F‰4$ÿPéµýÿÿ‹F‰4$ÿPéòýÿÿ‹EÔ‹P‰$ÿRé–þÿÿ‹EØ‹P‰$ÿRélþÿÿ‹EÜ‹P‰$ÿRéBþÿÿ‹G‰<$ÿPéþÿÿ‹F‰4$ÿPéÿýÿÿ‹B‰$ÿPéâýÿÿU‰åVSƒì0蜚ÇEôÇEðEð‰D$Eô‰D$ƒ,ª‰D$ ƒŒ•‰D$‹E‰D$‹E ‰$èrº…Àu 1ö‰ðƒÄ0[^]ËEôƒ‹Eðƒ‹Eð‰D$‹ƒä±‰D$‹Eô‰$è»…ÀˆÃÇ$èùº‰Æ…Àtp‰D$‹ƒÀ±‰D$‹Eô‰$èк…Àˆ¸‹ƒè‰…À„›‹ƒÁ»ƒ‰Æ‹Eô‹ƒê‰…ÒtZ‹Eð‹ƒê‰…Ò…Zÿÿÿ‹Eð‹P‰$ÿR‰ðƒÄ0[^]˃|±‹‰ƒx±Çƒt±-ƒÐ•èÑÅÿÿ1ö‹Eô‹ƒê‰…Òu¦‹Eô‹P‰$ÿR똋ƒ|±‹‰ƒx±Çƒt±,뽋F‰4$ÿPéWÿÿÿ‹ƒ|±‹‰ƒx±Çƒt±-‹ƒè‰…ÀuŒ‹F‰4$ÿPëU‰åVSƒìPèõ˜ÇEôÇEðÇEìÇEèÇEäEä‰D$ Eè‰D$Eì‰D$Eð‰D$Eô‰D$ƒ‘¨‰D$ ƒy”‰D$‹E‰D$‹E ‰$衸…Àu 1ö‰ðƒÄP[^]ËEôƒ‹Eðƒ‹E샋E胋E䃋Eð‰D$‹ƒ°‰D$‹Eô‰$è ¹…ÀˆP‹Eì‰D$‹ƒ5°‰D$‹Eô‰$èü¸…Àˆ¤‹Eè‰D$‹ƒ°‰D$‹Eô‰$èØ¸…Àˆc‹ƒ-°‰D$‹Eè‰$èz¸‰Æ…À„Œ‰D$‹ƒ-°‰D$‹Eô‰$蘸…Àˆˆ‹ƒè‰…À„1‹Eä‰D$‹ƒE°‰D$‹Eô‰$èe¸…Àˆ‹ƒºƒ‰Æë%‹ƒÕ¯‹‰ƒÑ¯ÇƒÍ¯Aƒ”è¨Ãÿÿ1ö‹Eô‹ƒê‰…Ò„›‹Eð‹ƒê‰…Òt|‹E싃ꉅÒt`‹E苃ꉅÒtD‹E䋃ꉅ҅zþÿÿ‹Eä‹P‰$ÿR‰ðƒÄP[^]˃կ‹‰ƒÑ¯ÇƒÍ¯@ésÿÿÿ‹Eè‹P‰$ÿR뮋Eì‹P‰$ÿRë’‹Eð‹P‰$ÿRésÿÿÿ‹Eô‹P‰$ÿRéTÿÿÿ‹ƒÕ¯‹‰ƒÑ¯ÇƒÍ¯Béÿÿÿ‹F‰4$ÿPéÁþÿÿ‹ƒÕ¯‹‰ƒÑ¯ÇƒÍ¯Déíþÿÿ‹ƒÕ¯‹‰ƒÑ¯ÇƒÍ¯CéÐþÿÿ‹ƒÕ¯‹‰ƒÑ¯ÇƒÍ¯C‹ƒè‰…À…©þÿÿ‹F‰4$ÿPé›þÿÿU‰åWVSƒì<èå•ÇEäEä‰D$ƒ™¥‰D$ ƒ¥Œ‰D$‹E‰D$‹E ‰$èɵ…Àu 1ö‰ðƒÄ<[^_]ËE䃋ƒ%­‰D$‹Eä‰$è%¶‰Æ…Àt*‰$èôµ‰Çƒøÿts‹ƒè‰…Àt]‰<$èH¶…Àt‰Æë%‹ƒÅ¬‹‰ƒÁ¬Çƒ½¬Gƒ•‘èŽÁÿÿ1ö‹E䋃ꉅ҅tÿÿÿ‹Eä‹P‰$ÿR‰ðƒÄ<[^_]ËF‰4$ÿP똋ƒÅ¬‹‰ƒÁ¬Çƒ½¬G‹ƒè‰…Àu‹F‰4$ÿPë’U‰åWVSƒìLè”ÇEäEä‰D$ƒ~¤‰D$ ƒ‚‹‰D$‹E‰D$‹E ‰$覴…Àu 1ö‰ðƒÄL[^_]ËE䃋ƒ¬‰D$‹Eä‰$赉ƅÀ„y‹ƒî«‰D$‰4$èæ´‰Ç…À„®‹ƒè‰…À„‡‰<$è„´‰Æ…Àˆƒ‹ƒè‰…À„p…ö„B1É1Ò‹ƒßµ‹èÓ¾ÿÿ‹ƒ¢«‹‰ƒž«Çƒš«Xƒ–è,Àÿÿ1ö‹E䋃ꉅ҅5ÿÿÿ‹Eä‹P‰$ÿR‰ðƒÄL[^_]ËF‰4$ÿPékÿÿÿ‹ƒ¢«‹‰ƒž«Çƒš«WÇEÈÇEÌÇEÐÇEÔ‹ƒè‰…À„I‹uÈ…öt‹UÈ‹ƒè‰…À„>‹MÌ…Ét‹UÌ‹ƒè‰…À„A‹UÐ…Òt‹UЋƒè‰…À„‹EÔ…À„$ÿÿÿ‹UÔ‹ƒè‰…À…ÿÿÿ‹B‰$ÿPéÿÿÿ‹ƒ¢«‹‰ƒž«Çƒš«Wéçþÿÿ‹ƒ¬‰D$‹Eä‰$èM³‰Æ…À„Ý‹ƒÞ«‰D$‹Eä‰$è.³‰Ç…À„B‹ƒÒ«‰D$‹Eä‰$賉EÈ…À„»Ç$èC³‰EÌ…À„Ö‹ƒ¬‰D$‹Eä‰$èØ²‰EÐ…À„áÇ$èß²‰EÔ…À„î‰x ‹UȉP‹ỦP‹UЉP‹E䃋Eä‹UÔ‰B‰T$‰4$貉DžÀ„û‹ƒè‰…À„Þ‹UÔ‹ƒè‰…À„¾‹ƒè‰…À„¡‹ƒçµƒ‰ÆéÎýÿÿ‹G‰<$ÿPé‚ýÿÿ‹ƒ¢«‹‰ƒž«Çƒš«WÇEÈÇEÌÇEÐÇEÔ‹ƒè‰…Àt{…ÿ…ãýÿÿéíýÿÿ‹ƒ¢«‹‰ƒž«Çƒš«YÇEÈÇEÌÇEÐÇEÔ벋G‰<$ÿPé©ýÿÿ‹B‰$ÿPé´ýÿÿ‹B‰$ÿPéØýÿÿ‹B‰$ÿPé±ýÿÿ‹F‰4$ÿPéwÿÿÿ‹ƒ¢«‹‰ƒž«Çƒš«YéÎüÿÿ‹ƒ¢«‹‰ƒž«Çƒš«YÇEÌÇEÐÇEÔéÿÿÿ‹ƒ¢«‹‰ƒž«Çƒš«YÇEÐÇEÔéòþÿÿ‹ƒ¢«‹‰ƒž«Çƒš«YÇEÔéÎþÿÿ‹ƒ¢«‹‰ƒž«Çƒš«Yé±þÿÿ‹G‰<$ÿPéQþÿÿ‹B‰$ÿPé4þÿÿ‹F‰4$ÿPéþÿÿ‹ƒ¢«‹‰ƒž«Çƒš«YÇEÈÇEÌÇEÐéUþÿÿU‰åWVSƒì\è¢ÇEäÇEàEà‰D$Eä‰D$ƒfŸ‰D$ ƒ’ЉD$‹E‰D$‹E ‰$èx¯…Àu 1ÿ‰øƒÄ\[^_]ËE䃋Eàƒ‹ƒÇ°ƒ‹ƒú¦‰Eȃš‹‰D$‹ƒv¦‰$èZ¯‰Æ…À„™Ç$诉DžÀ„r¦‰$诉EÌ…À„LèS¯‰EÐ…À„h‰|$‰D$‹ẺD$ ‹UȉT$ƒ¦‹‰D$‰4$莯‰EÔ‹ƒè‰…À„‹ƒè‰…À„©‹EÐ…Àt‹UЋƒè‰…À„Ì‹EÔ…À„틓ǰ‹ƒè‰…À„ž‹ƒ–¦‰D$‹EÔ‰$èÙ®‰Æ…À„_‰D$‹Eà‰$èR®‰Çƒøÿ„y‹ƒè‰…À„ª…ÿ„‹Ç$è°®‰Æ…ÀtY‹ƒþ¦ƒ‹ƒþ¦‰F ‰t$‹ƒ³°‹‰$袮‰Ç…À„틃艅À„Â1É1Ò‰øè‚¸ÿÿ‹ƒè‰…À„¶‹ƒ‚¦‹‰ƒ~¦Çƒz¦P‹uÔ닃‚¦‹‰ƒ~¦Çƒz¦M‹³Ç°ƒ®‹è©¹ÿÿ1ÿ‹ƒè‰…ÀtW‹E䋃ꉅÒt;‹Eà‹ƒê‰…Ò…Çýÿÿ‹Eà‹P‰$ÿR‰øƒÄ\[^_]ÃÇEÔÇEÐéaþÿÿ‹Eä‹P‰$ÿRë·‹F‰4$ÿPëž‹F‰4$ÿPéIþÿÿ‹ƒ‚¦‹‰ƒ~¦Çƒz¦O‹uÔéXÿÿÿ‹B‰$ÿPéTþÿÿ‹B‰$ÿPé&þÿÿÇEÔÇEÐéÜýÿÿ‹G‰<$ÿPéÝýÿÿ‹»†¦‰|$‹ƒr¦‰$èû¬‰Æ…À„拃¾¦‰D$‹Eä‰$èܬ‰Ç…À„Ó‹ƒâ¦‰D$‹Eä‰$转‰E¼…À„ü‰Â‹Eà‰D$‰$èɬ‰EÀ…À„¿‹U¼‹ƒè‰…À„k‹ƒ²¦‰D$‹Eä‰$èo¬‰E¼…À„'Ç$èv¬‰EÄ…À„š‰x ‹UÀ‰P‹U¼‰P‰D$‰4$èn¬‰Ç…À„ ‹ƒè‰…À„ƒ‹UÄ‹ƒè‰…À„·‹uÔéþÿÿ‹ƒ‚¦‹‰ƒ~¦Çƒz¦SÇE¼ÇEÀÇEÄ‹ƒè‰…À„Õ…ÿt‹ƒè‰…À„ì‹E¼…Àt‹U¼‹ƒè‰…À„Å‹EÀ…Àt‹UÀ‹ƒè‰…À„ž‹}Ä…ÿt‹UÄ‹ƒè‰…Àt‹uÔéiýÿÿ‹B‰$ÿP‹uÔéXýÿÿ‹UÄ‹B‰$ÿP‹uÔéQýÿÿ‹ƒ‚¦‹‰ƒ~¦Çƒz¦O1ÿÇE¼ÇEÀÇEÄé6ÿÿÿÇEÔé·ûÿÿ‹F‰4$ÿPéHüÿÿ‹F‰4$ÿPéÿÿÿ‹B‰$ÿPéTÿÿÿ‹B‰$ÿPé-ÿÿÿ‹G‰<$ÿPéÿÿÿ‹ƒ‚¦‹‰ƒ~¦Çƒz¦SÇEÀÇEÄé¹þÿÿ‹F‰4$ÿPé0üÿÿ‹G‰<$ÿPé<üÿÿ‹ƒ‚¦‹‰ƒ~¦Çƒz¦PÇE¼ÇEÀÇEÄékþÿÿ‹ƒ‚¦‹‰ƒ~¦Çƒz¦TÇEÄéGþÿÿ‹B‰$ÿPé‡ýÿÿ‰|$‹ƒÏ°‹‰$豩‹ƒ‚¦‹‰ƒ~¦Çƒz¦S‹uÔéßûÿÿ‹ƒ‚¦‹‰ƒ~¦Çƒz¦SÇEÄéáýÿÿ‹ƒ‚¦‹‰ƒ~¦Çƒz¦SéÄýÿÿ‹F‰4$ÿPéoýÿÿ‹ƒ‚¦‹‰ƒ~¦Çƒz¦SÇE¼ÇEÀé‹ýÿÿU‰åWVSƒìLè°ˆÇEäEä‰D$ƒ€˜‰D$ ƒp‰D$‹E‰D$‹E ‰$蔨…Àu 1ö‰ðƒÄL[^_]ËE䃋»œŸ‰|$‹ƒ€Ÿ‰$èí¨‰Æ…À„æÇ$èõ¨‰Ç…Àtd‹E䃋Eä‰G ‰|$‰4$èõ¨‰EÔ…ÀtE‹ƒè‰…À„‚‹ƒè‰…Àtl‹uÔ‹E䋃ꉅ҅nÿÿÿ‹Eä‹P‰$ÿR‰ðƒÄL[^_]˃Ÿ‹‰ƒŒŸÇƒˆŸJ‹ƒè‰…Àt7…ÿt ‹ƒè‰…Àt3ƒä„èì³ÿÿ1öë—‹G‰<$ÿP뉋F‰4$ÿPépÿÿÿ‹F‰4$ÿP뾋G‰<$ÿPë‰|$‹ƒÝ©‹‰$裧‹ƒŸ‹‰ƒŒŸÇƒˆŸJë”U‰åWVSƒìLè"‡ÇEäEä‰D$ƒú–‰D$ ƒâ}‰D$‹E‰D$‹E ‰$è§…Àu 1ö‰ðƒÄL[^_]ËE䃋ƒG¨ƒ‹ƒFž‰D$‹Eä‰$èY§‰Ç…À„W‹ƒjž‰D$‹Eä‰$è:§‰Æ…À„R‹ƒbž‰D$‰4$觉EÌ…À„&‹ƒè‰…À„Ó‹Ẻ$èÖ¦‰Æƒøÿ„Ë‹UÌ‹ƒè‰…À„#‰4$觉ƅÀ„ìEà‰D$‰t$‰<$èS¦…Àˆ‹Eà÷ÐÁè‰Eà‹ƒè‰…À„V‹ƒè‰…À„9‹Mà…É…÷‹³ž‰t$‹ƒò‰$èc¦‰EÌ…À„’‹ƒjž‰D$‹Eä‰$èC¦‰Ç…À„É‹ƒ>ž‰D$‰<$è'¦‰Æ…À„#‹ƒè‰…À„‹ƒjž‰D$‹Eä‰$èù¥‰Ç…À„³‹ƒbž‰D$‰<$èÝ¥‰EÐ…À„•‹ƒè‰…À„[‹ƒFž‰D$‹Eä‰$讥‰Ç…À„‰D$‹EЉ$è½¥‰EÔ…À„–‹UЋƒè‰…À„v‹ƒè‰…À„Y‹ƒjž‰D$‹Eä‰$èT¥‰EÐ…À„2ž‰D$‹EЉ$è4¥‰Ç…À„ЋUЋƒè‰…À„pÇ$è*¥‰EÐ…À„3‰Â‰p ‹EÔ‰B‰z‰T$‹Ủ$è ¥‰Æ…À„ª‹UÌ‹ƒè‰…À„j‹UЋƒè‰…À„J‹“G¨‹ƒè‰…À„'‹ƒFž‰D$‹Eä‰$茤‰EÔ…À„çÇ$èÀ¤‰Ç…À„‰D$‹EÔ‰$èW¤‰EÌ…À„N‹UÔ‹ƒè‰…Àu ‹B‰$ÿP‹ƒè‰…Àu ‹G‰<$ÿP‹ẺD$‹ƒFž‰D$‹Eä‰$èK¤…Àˆ(‹UÌ‹ƒè‰…Àu ‹B‰$ÿPƒ‰uȉò鳋ƒž‹‰ƒþǃú3ÇEÌÇEÐÇEÔ‹ƒG¨‰EÈ‹ƒè‰…À„Ý…öt‹ƒè‰…À„¼‹UÌ…Òt‹UÌ‹ƒè‰…À„Í‹EÐ…Àt‹UЋƒè‰…À„‹EÔ…Àt‹UÔ‹ƒè‰…À„ƒzƒèì®ÿÿ1ö‹UÈ‹ƒè‰…ÀtK‹E䋃ꉅ҅‡ûÿÿ‹Eä‹P‰$ÿR‰ðƒÄL[^_]˃ž‹‰ƒþǃú3‹“G¨‰UÈëš‹B‰$ÿP몋F‰4$ÿPé6ÿÿÿ‹G‰<$ÿPéÿÿÿ‹B‰$ÿPéeÿÿÿ‹B‰$ÿPé%ÿÿÿ‹B‰$ÿPé0ÿÿÿ1É1Ò‹ƒ?¨‹è³¬ÿÿ‹ƒž‹‰ƒþǃú4‹ƒG¨‰EÈéÿÿÿ‹F‰4$ÿPé¹ûÿÿ‹G‰<$ÿPéœûÿÿ‹F‰4$ÿPéûÿÿ‹ƒž‹‰ƒþǃú31öÇEÐÇEÔ‹“G¨‰UÈéEþÿÿ‹ƒž‹‰ƒþǃú3ÇEÐÇEÔ‹“G¨‰UÈéþÿÿ‹B‰$ÿPéÏúÿÿ‹ƒž‹‰ƒþǃú3ÇEÌÇEÐÇEÔ‹“G¨‰UÈéÈýÿÿ‹ƒž‹‰ƒþǃú5ÇEÐÇEÔ‹ƒG¨‰EÈé¶ýÿÿ‹ƒž‹‰ƒþǃú6ÇEÐÇEÔ‹ƒG¨‰EÈésýÿÿ‹G‰<$ÿPéìúÿÿ‹ƒž‹‰ƒþǃú5ÇEÐÇEÔ‹“G¨‰UÈéýÿÿ‰t$‹ƒO¨‹‰$èl ‹ƒž‹‰ƒþǃú5‹“G¨‰UÈéQýÿÿ‹ƒž‹‰ƒþǃú6ÇEÔéRÿÿÿ‹G‰<$ÿPé—úÿÿ‹ƒž‹‰ƒþǃú7é'ÿÿÿ‹ƒž‹‰ƒþǃú6ÇEÔ‹“G¨‰UÈéhüÿÿ‹G‰<$ÿPé™úÿÿ‹B‰$ÿPé|úÿÿ‹ƒž‹‰ƒþǃú6‹“G¨‰UÈé&üÿÿ‹ƒž‹‰ƒþǃú5‹ƒG¨‰EÈéüÿÿ‹B‰$ÿPé‚úÿÿ‹ƒž‹‰ƒþǃú8‰uÈé?üÿÿ‹B‰$ÿPéËúÿÿ‹B‰$ÿPé¨úÿÿ‹B‰$ÿPéˆúÿÿ‹ƒž‹‰ƒþǃú8‰uÈéÜûÿÿ‹ƒž‹‰ƒþǃú5ÇEÔ‹ƒG¨‰EÈé}ûÿÿ‹ƒž‹‰ƒþǃú8‰uÈ1öÇEÐé2ûÿÿ‹ƒž‹‰ƒþǃú8‰uÈÇEÐÇEÔé&ûÿÿU‰åWVSƒì<èÿ}ÇE䋃ƒ•‰Eà‹ƒ‡•‰EÜE܉D$Eà‰D$Eä‰D$ƒß‰D$ ƒ›z‰D$‹E‰D$‹E ‰$èÃ…À„‹Eƒ‹E䃋Eàƒ‹E܃‹»_”‹uä…ÿ„–;³$Ÿt‹F9Çt‰|$‰$èSž…À„!‹u䃋U‹B ‹ƒê‰…Ò„Ò‹Eä‹U‰B ‹Eà‰$è+ž‰ÆèÊ…À„Q‹ƒß”‹‰ƒÛ”ǃה{ƒ£zèQ©ÿÿ¾ÿÿÿÿ‹U‹ƒè‰…Àtk‹E䋃ꉅÒtO‹Eà‹ƒê‰…Òt3‹EÜ‹ƒê‰…Òu ‹EÜ‹P‰$ÿR‰ðƒÄ<[^_]þÿÿÿÿ‰ðƒÄ<[^_]ËEà‹P‰$ÿRë¿‹Eä‹P‰$ÿR룋U‹B‰$ÿP뇋U‹B ‹P‰$ÿR‹Eä‹U‰B ‹Eà‰$èJ‰Æè霅À…ÿÿÿën‹F‹@ ‰D$‹G ‰D$ ƒz‰D$ƒ w‰D$‹ƒ<Ÿ‹‰$èUœ‹ƒß”‹‰ƒÛ”ǃהyéãþÿÿƒ÷v‰D$‹ƒ Ÿ‹‰$èœëÇ‹E‰p‹E܉$躜‰ÆèYœ…Àt‹ƒß”‹‰ƒÛ”ǃה|éŽþÿÿ‹U‰rÇB1öéŠþÿÿU‰åWVSƒìLèm{ÇE䋃咉Eà‹ƒé’‰EÜ‹³í’‰uØE؉D$E܉D$Eà‰D$Eä‰D$ƒ]‹‰D$ ƒ=x‰D$‹E‰D$‹E ‰$è!›…À„Ž‹Eƒ‹E䃋Eàƒ‹E܃‹E؃‹»Ù‘‹uä…ÿ„;³’œt‹F9Çt‰|$‰$è«›…À„§‹»Ñ‘‹uØ…ÿ„{‹“’œ‰UÔ9Öt'‹F9Çt‰|$‰$èr›…À„À‹uØ;uÔ…‚‹Eä9ð„Xƒ‹M‹A‹ƒê‰…Ò„ô‹Eä‹U‰B‹P‹M‰Q ‹@ ƒ‹A‹ƒê‰…Ò„¹‹Eä‹@ ‹U‰B‹Eà‰$è ›‰Æè¨š…À„t‹ƒM’‹‰ƒI’ǃE’^ƒExè/¦ÿÿ¾ÿÿÿÿ‹U‹ƒè‰…Àt]‹E䋃ꉅÒtf‹Eà‹ƒê‰…Òtr‹EÜ‹ƒê‰…Òt~‹EØ‹ƒê‰…Òu ‹EØ‹P‰$ÿR‰ðƒÄL[^_]þÿÿÿÿ‰ðƒÄL[^_]ËB‰$ÿP‹E䋃ꉅÒuš‹Eä‹P‰$ÿR‹Eà‹ƒê‰…ÒuŽ‹Eà‹P‰$ÿR‹EÜ‹ƒê‰…Òu‚‹EÜ‹P‰$ÿRéqÿÿÿ‹F‹@ ‰D$‹G ‰D$ ƒ5x‰D$ƒyt‰D$‹ƒªœ‹‰$è'™‹ƒM’‹‰ƒI’ǃE’Ré×þÿÿ‹F‹@ ‰D$‹G ‰D$ ƒ9x‰D$ƒyt‰D$‹ƒªœ‹‰$èÕ˜‹ƒM’‹‰ƒI’ǃE’Sé…þÿÿ‹A‹P‰$ÿRé6þÿÿ‹A‹P‰$ÿRéûýÿÿƒet‰D$‹ƒzœ‹‰$è|˜éPÿÿÿƒet‰D$‹ƒzœ‹‰$è]˜ë†Ç$踘‰Æ…ÀtU‹ƒÍ’ƒ‹ƒÍ’‰F ‰t$‹ƒªœ‹‰$誘‰Ç…À„¨‹ƒè‰…À„‹1É1Ò‰øèŠ¢ÿÿ‹ƒè‰…Àtj‹ƒM’‹‰ƒI’ǃE’]é¤ýÿÿ‹M‰q‹E܉$èu˜‰Æè˜…Àt‹ƒM’‹‰ƒI’ǃE’_ékýÿÿ‹E‰pÇ@1öégýÿÿ‹G‰<$ÿPë‹‹F‰4$ÿPégÿÿÿ‹ƒM’‹‰ƒI’ǃE’]‹ƒè‰…À…ýÿÿ‹F‰4$ÿPé ýÿÿƒ‹M‹A‹ƒê‰…Òu ‹A‹P‰$ÿR‹EØ‹U‰B‹P‹M‰Q ‹@ ƒ‹A‹ƒê‰…Òu ‹A‹P‰$ÿR‹EØ‹@ ‹U‰BétüÿÿU‰åWVSƒìLèwvƒ¿…‰ƒWÇD$ôÇD$ ÇD$ƒïŒ‰D$ƒss‰$è—‰ƒG…À„ôƒƒ{s‰$èÔ–‰ƒK…À„Õ‰D$ƒ‡s‰D$‹ƒG‰$èë–…Àˆ±‹»…ÿtL³ë ƒÆ‹>…ÿt;‹F ƒè‰D$‹F‰$èÜ•‰‹‹…É„s‹V…Òt͉$èÓ•ƒÆ‹>…ÿuųÛ~‰4$è –…Àˆo‰t$ƒ—s‰D$‹ƒG‰$è[–…ÀˆK‰³ëŒ³[}‹»¼—‰»û}‰4$èÀ•…ÀˆM‰t$ƒ§s‰D$‹ƒG‰$è–…Àˆ)‰³ãŒ³Û{‰»{|‰4$èz•…Àˆ!‰t$ƒ³s‰D$‹ƒG‰$èÉ•…Àˆý ‰³ÛŒ³z‰»»z‰4$è4•…Àˆõ ‰t$ƒÃs‰D$‹ƒG‰$胕…ÀˆÑ ‰³×Œ³[y‰»ûy‰4$èî”…ÀˆÌ ‰t$ƒÏs‰D$‹ƒG‰$è=•…Àˆ¨ ‰³ÓŒ³›x‰»;y‰4$訔…Àˆ£ ‰t$ƒßs‰D$‹ƒG‰$è÷”…Àˆ ‰³ßŒ³›v‰4$èh”…Àˆ€ ‰t$ƒïs‰D$‹ƒG‰$è·”…Àˆ\ ‰³çŒè"”‰Eà…À„g ‹»»‰|$‹ƒK‰$è'”‰Æ…À„Ç$è/”‰Eä…À„‹Eä‰p ‹ƒß‰D$“ÿs‰UÔ‰T$‹Eà‰$èÊ“…Àˆ®‹³_“t‰UЉ$è=“‰Ç…À„‰D$ƒt‰ẺD$‹Uà‰$è…“…ÀˆY‰t$‹Eà‰D$‹Uä‰$芓‰Æ‹ƒè‰…Àu ‹G‰<$ÿP…ö„5‹U䋃艅Àu ‹B‰$ÿPÇD$ÇD$ƒ‰$è “‰Eä…À„Á‰t$ÇD$‹Eä‰$èÊ’‰EØ…À„‚‹U䋃艅Àu ‹B‰$ÿP‹E؉D$‹ƒs‰D$‰4$è “…Àˆ&‹UØ‹ƒè‰…Àu ‹B‰$ÿPÇD$ÇD$ƒ³€‰$èp’‰Eä…À„‰t$ÇD$‹Eä‰$è0’‰EØ…À„ƒ‹U䋃艅Àu ‹B‰$ÿP‹E؉D$‹ƒo‰D$‰4$èr’…Àˆi‹UØ‹ƒè‰…Àu ‹B‰$ÿP‰t$‹ƒ_‰D$‹ƒG‰$è7’…Àˆ‹ƒè‰…Àu ‹F‰4$ÿP‹Uà‹ƒè‰…Àu ‹B‰$ÿPè–‘‰Eä…À„YÇ$èÅ‘‰EØ…À„%‹ƒ¨—ƒ‹U؉B ‹ƒã‰D$‹EÔ‰D$‹Uä‰$è]‘…Àˆò‹³[‹EЉ$è։DžÀ„׉D$‹ỦT$‹Eä‰$è$‘…Àˆ²‰t$‹Uä‰T$‹E؉$è)‘‰Æ‹ƒè‰…Àu ‹G‰<$ÿP…ö„…‹UØ‹ƒè‰…Àu ‹B‰$ÿPÇD$ÇD$ƒ£€‰$詉Eà…À„‰t$ÇD$‹Eà‰$èi‰EØ…À„Û‹Uà‹ƒè‰…Àu ‹B‰$ÿP‹E؉D$‹ƒs‰D$‰4$è«…Àˆ†‹UØ‹ƒè‰…Àu ‹B‰$ÿP‰t$‹ƒ[‰D$‹ƒG‰$èp…Àˆ'‹ƒè‰…Àu ‹F‰4$ÿP‹U䋃艅Àu ‹B‰$ÿPèωEà…À„Ï‹³»‰t$‹ƒK‰$èÔ‰EØ…À„rÇ$èۉƅÀ„8‹E؉F ‹ƒç‰D$‹UÔ‰T$‹Eà‰$è}…Àˆã‹“c‰UÜ‹EЉ$èóŽ‰Ç…À„ʼnD$‹ỦT$‹Eà‰$èA…Àˆ›‹U܉T$‹Eà‰D$‰4$èF‰E䋃艅Àu ‹G‰<$ÿP‹Eä…À„o‹ƒè‰…Àu ‹F‰4$ÿPÇD$ÇD$ƒ“€‰$èÅŽ‰EØ…À„‹Uä‰T$ÇD$‹E؉$肎‰Æ…À„Æ ‹UØ‹ƒè‰…Àu ‹B‰$ÿP‰t$‹ƒs‰D$‹Eä‰$èÅŽ…Àˆj ‹ƒè‰…Àu ‹F‰4$ÿPÇD$ÇD$ƒƒ€‰$è,މEØ…À„ ‹Uä‰T$ÇD$‹E؉$è鉯…À„Ù ‹UØ‹ƒè‰…Àu ‹B‰$ÿP‰t$‹ƒw‰D$‹Eä‰$è,Ž…Àˆ} ‹ƒè‰…Àu ‹F‰4$ÿPÇD$ÇD$ƒs€‰$蓉EØ…À„! ‹Uä‰T$ÇD$‹E؉$èP‰Æ…À„à ‹UØ‹ƒè‰…Àu ‹B‰$ÿP‰t$‹ƒ‰D$‹Eä‰$è“…Àˆ„ ‹ƒè‰…Àu ‹F‰4$ÿP‹Uä‰T$‹ƒc‰D$‹ƒG‰$èX…Àˆ# ‹U䋃艅Àu ‹B‰$ÿP‹Uà‹ƒè‰…Àu ‹B‰$ÿPè´Œ‰EØ…À„È‹»»‰|$‹ƒK‰$蹌‰Æ…À„uÇ$èÁŒ‰Eä…À„A‹Eä‰p ‹ƒë‰D$‹UÔ‰T$‹E؉$èbŒ…Àˆú‹»g‹UЉ$èÛ‹‰Æ…À„߉D$‹ẺD$‹U؉$è)Œ…Àˆµ‰|$‹E؉D$‹Uä‰$è.Œ‰Eà‹ƒè‰…Àu ‹F‰4$ÿP‹Eà…À„‰‹U䋃艅Àu ‹B‰$ÿPÇD$ÇD$ƒc€‰$誋‰Æ…À„‹Eà‰D$ÇD$‰4$èk‹‰Eä…À„Û‹ƒè‰…Àu ‹F‰4$ÿP‹Uä‰T$‹ƒs‰D$‹Eà‰$è­‹…Àˆ„‹U䋃艅Àu ‹B‰$ÿPÇD$ÇD$ƒS€‰$苉ƅÀ„!‹Eà‰D$ÇD$‰4$èÒŠ‰Eä…À„⋃艅Àu ‹F‰4$ÿP‹Uä‰T$‹ƒ{‰D$‹Eà‰$è‹…Àˆ‹‹U䋃艅Àu ‹B‰$ÿPÇD$ÇD$ƒC€‰$èxŠ‰Æ…À„(‹Eà‰D$ÇD$‰4$è9ЉEä…À„鋃艅Àu ‹F‰4$ÿP‹Uä‰T$‹ƒw‰D$‹Eà‰$è{Š…Àˆ’‹U䋃艅Àu ‹B‰$ÿPÇD$ÇD$ƒ3€‰$è߉‰Æ…À„/‹Eà‰D$ÇD$‰4$è ‰‰Eä…À„ð‹ƒè‰…Àu ‹F‰4$ÿP‹Uä‰T$‹ƒo‰D$‹Eà‰$è≅Àˆ™‹U䋃艅Àu ‹B‰$ÿPÇD$ÇD$ƒ#€‰$èF‰‰Æ…À„6‹Eà‰D$ÇD$‰4$艉Eä…À„Ó‹ƒè‰…Àu ‹F‰4$ÿP‹Uä‰T$‹ƒ‰D$‹Eà‰$èI‰…Àˆ$‹U䋃艅Àu ‹B‰$ÿP‹Eà‰D$‹ƒg‰D$‹ƒG‰$è ‰…Àˆ‹Uà‹ƒè‰…Àu ‹B‰$ÿP‹UØ‹ƒè‰…Àu ‹B‰$ÿPÇ$èÓˆ…À„;‰ƒïÇ$蹈…À„!‰ƒó‹³œ—ƒ‰³÷Ç$舅À„Û‰ƒûÇ$èvˆ…À„Á‰ƒÿÇ$è\ˆ…À„ЉƒŽƒ‰³ŽÇ$è9ˆ…À„J‰ƒ ŽƒÄL[^_]˃W‹‰ƒSǃOƒtƒÄL[^_]éj“ÿÿ‹ƒW‹‰ƒSǃO\ƒtƒÄL[^_]é@“ÿÿ‹ƒW‹‰ƒSǃO몋ƒW‹‰ƒSǃOÑ닃W‹‰ƒSǃOésÿÿÿ‹ƒW‹‰ƒSǃOOéVÿÿÿ‹ƒW‹‰ƒSǃOvé9ÿÿÿ‹ƒW‹‰ƒSǃO”éÿÿÿ‹ƒW‹‰ƒSǃOV1ö‹Uà‹ƒè‰…Àtt…öt ‹ƒè‰…ÀtZ‹}ä…ÿt‹U䋃艅Àta‹uØ…ö„Åþÿÿ‹UØ‹ƒè‰…À…³þÿÿ‹B‰$ÿPé¥þÿÿ‹ƒW‹‰ƒSǃOV뉋F‰4$ÿP뛋Uà‹B‰$ÿPé{ÿÿÿ‹B‰$ÿP딋ƒW‹‰ƒSǃOVÇEäé>ÿÿÿ‹ƒW‹‰ƒSǃOL1öéÿÿÿ‹ƒW‹‰ƒSǃOLéÿÿÿ‹ƒW‹‰ƒSǃOLÇEäéÞþÿÿ‹ƒW‹‰ƒSǃOI1öé¿þÿÿ‹ƒW‹‰ƒSǃOIé¢þÿÿ‹ƒW‹‰ƒSǃOIÇEäé~þÿÿ‹ƒW‹‰ƒSǃOF1öé_þÿÿ‹ƒW‹‰ƒSǃOFéBþÿÿ‹ƒW‹‰ƒSǃOFÇEäéþÿÿ‹ƒW‹‰ƒSǃO?1öéÿýÿÿ‹ƒW‹‰ƒSǃO?éâýÿÿ‹ƒW‹‰ƒSǃO?ÇEäé¾ýÿÿÇEàéXøÿÿ‹ƒW‹‰ƒSǃO<é²ýÿÿ‹ƒW‹‰ƒSǃO<éŠýÿÿ‰|$‹ƒ¤—‹‰$èàƒ‹ƒW‹‰ƒSǃO<éyýÿÿ‹ƒW‹‰ƒSǃO<é,üÿÿ‹ƒW‹‰ƒSǃO(1öÇEØéýÿÿ‹ƒW‹‰ƒSǃO2ÇEØéàüÿÿ‹ƒW‹‰ƒSǃO2éÃüÿÿ‹ƒW‹‰ƒSǃO21öé¤üÿÿ‹ƒW‹‰ƒSǃO/ÇEØé€üÿÿ‹ƒW‹‰ƒSǃO/écüÿÿ‹ƒW‹‰ƒSǃO<1öÇEäé=üÿÿ‰|$‹ƒ¤—‹‰$襂‹ƒW‹‰ƒSǃOÇEäÇEØéþûÿÿ‹ƒW‹‰ƒSǃO ÇEäéÚûÿÿ‹ƒW‹‰ƒSǃO¤é¿úÿÿ‹ƒW‹‰ƒSǃO—é¢úÿÿ‹ƒW‹‰ƒSǃOyé…úÿÿ‹ƒW‹‰ƒSǃORéhúÿÿ‹ƒW‹‰ƒSǃO1öÇEØé@ûÿÿ‹ƒW‹‰ƒSǃOÇEØéûÿÿ‹ƒW‹‰ƒSǃO éÿúÿÿ‹ƒW‹‰ƒSǃO ÇEØéÛúÿÿ‹ƒW‹‰ƒSǃOÇEäé·úÿÿ‹ƒW‹‰ƒSǃOéšúÿÿ‹ƒW‹‰ƒSǃOÇEØévúÿÿ1öé¸íÿÿ‹ƒW‹‰ƒSǃO/1öéPúÿÿ‹ƒW‹‰ƒSǃO+ÇEØé,úÿÿ‹ƒW‹‰ƒSǃO+éúÿÿ‹ƒW‹‰ƒSǃO+1öéðùÿÿÇEäérñÿÿ‹ƒW‹‰ƒSǃO(ÇEäÇEØé¹ùÿÿ‹ƒW‹‰ƒSǃO(ÇEäé•ùÿÿ‰t$‹ƒ¤—‹‰$èý‹ƒW‹‰ƒSǃO(1öÇEäé[ùÿÿ‹ƒW‹‰ƒSǃO(é@øÿÿ‹ƒW‹‰ƒSǃOÇEØé,ùÿÿ‹ƒW‹‰ƒSǃOéùÿÿ‹ƒW‹‰ƒSǃOéàøÿÿ‹ƒW‹‰ƒSǃOÇEØéÎøÿÿ1öé_îÿÿ‹ƒW‹‰ƒSǃOéµøÿÿ‹ƒW‹‰ƒSǃOé}÷ÿÿU‰åWVSƒìlè^ÇEäÇEàÇEÜÇEØE؉D$E܉D$Eà‰D$Eä‰D$ƒ”n‰D$ ƒ”Z‰D$‹E‰D$‹E ‰$èJ~…Àu 1ö‰ðƒÄl[^_]ËE䃋Eàƒ‹E܃‹E؃‹“µƒ‹ƒŒu‰D$‹ƒÁ‰$èˆ~‰Æ…À„Ç$è~‰E¼…À„¯‹E䃋Eä‹U¼‰B ‰T$‰4$èˆ~‰Ç…À„Š‹ƒè‰…À„ ‹U¼‹ƒè‰…À„틃艅À„ÐÇ$èQ~‰Ç…À„8 ‹“µ‹ƒè‰…À„ ‹ƒÈu‰D$‹E؉$èÒ}‰E¼…À„¯‰Â‹ƒ¸u‰D$‰$è³}‰EÄ…À„€ ‹U¼‹ƒè‰…À„F‹³µ‹ƒè‰…À„#‹E܃‹ƒè‰…À„‹E܉E´‰}¬‰u¸‰÷‰Â‰$è1}ƒøÿ„eƒèŽŸ ÇD$ÇD$‹E´‰$è,}‰Æ…À„º ‰$èè|‰E¼…À„} ‹ƒè‰…À„f‹U¼‰$èO}‰EÌ…À„>‹ƒè‰…À„O‹U¼‰$è*}‰EÔ…À„W‹U¸‹ƒè‰…À„5‹E¼‰$è}‰Â…À…M èž|…À…i ‹U¼‹ƒè‰…À„‹ẺD$‹Uĉ$è|‰EÈ…À„t ‹ƒ°u‰D$‹Eà‰$èH|‰Æ…À„U ‹E¬‰D$‰4$èW|‰E¼…À„¨ ‹ƒè‰…À„»‹ƒÜu‰D$‹U¼‰$è|‰Æ…À„ð ‹U¼‹ƒè‰…À„˜‹EȉD$‰t$‹Eä‰$è7|…Àˆ ‹ƒè‰…À„y‹UÈ‹ƒè‰…À„u‹ƒ°u‰D$‹Eà‰$è{‰E¼…À„Ö ‰Â‹E¬‰D$‰$èœ{‰EÈ…À„ ‹U¼‹ƒè‰…À„5‹ƒ¤u‰D$‹Eȉ$èB{‰Æ…À„O ‹UÈ‹ƒè‰…À„ ‹ƒè‰…À„;³µ„t‹EÔ‰D$‹Uĉ$è!{‰E¼…À„È ‹ƒ°u‰D$‹Eà‰$èÙz‰EÈ…À„O‰Â‹E¬‰D$‰$èåz‰Æ…À„4‹UÈ‹ƒè‰…À„ዃ¤u‰D$‰4$èz‰EÈ…À„Ù‹ƒè‰…À„˃°u‰D$‹Eà‰$è`z‰Æ…À„׋E¬‰D$‰4$èoz‰EÀ…À„‘‹ƒè‰…À„‰‹ƒÜu‰D$‹UÀ‰$èz‰Æ…À„8 ‹UÀ‹ƒè‰…À„fÇ$èz‰EÀ…À„:‹UȉP ‰p‹E¼‰D$‹UÀ‰T$‹Eä‰$è,z…Àˆ²‹UÀ‹ƒè‰…À„/‹U¼‹ƒè‰…À„Ç$èÖy‰EÈ…À„ÉD$‹E¬‰$èly‰EÐ…À„©‹UÈ‹ƒè‰…À„x‹U¬‹ƒè‰…À„XÇD$ÿÿÿÇD$‹E´‰$è,y‰Æ…À„¾‹U´‹ƒè‰…À„=‹UÔ‰U¸‹}̉u´‹EЉE¬‰ò‰$èÌxƒøÿ…›ûÿÿ‹ƒpu‹‰ƒluǃhu‹EĉE°ÇEÈÇEÀëb‹ƒpu‹‰ƒluǃhuÇEÈ‹ƒµ‰E°‰E¬‰Ç‰E´‰E¸‹ƒè‰…À„–‹E¼…Àt®ÇEÀ‹U¼‹ƒè‰…À„^‹EÈ…Àt‹UÈ‹ƒè‰…À„š‹uÀ…öt‹UÀ‹ƒè‰…À„sƒd\èÕƒÿÿ1ö‹U¬‹ƒè‰…À„F‹U°‹ƒè‰…À„&‹U´‹ƒè‰…À„‹ƒè‰…À„é‹U¸‹ƒè‰…À„É‹E䋃ꉅ҄¦‹Eà‹ƒê‰…Ò„ƒ‹EÜ‹ƒê‰…Òtg‹EØ‹ƒê‰…Ò…±øÿÿ‹EØ‹P‰$ÿR‰ðƒÄl[^_]˃pu‹‰ƒluǃhuÇEÈ‹ƒµ‰E°‰E¬‰Ç‰E´‰E¸ÇEÀéÑþÿÿ‹EÜ‹P‰$ÿRë‹‹Eà‹P‰$ÿRélÿÿÿ‹Eä‹P‰$ÿRéIÿÿÿ‹B‰$ÿPé)ÿÿÿ‹G‰<$ÿPé ÿÿÿ‹B‰$ÿPéìþÿÿ‹B‰$ÿPéÌþÿÿ‹B‰$ÿPé¬þÿÿ‹B‰$ÿPéþÿÿ‹B‰$ÿPéXþÿÿ‹F‰4$ÿPéŒùÿÿ‹G‰<$ÿPé£ùÿÿ‹B‰$ÿPé½ùÿÿ‹U¼‹B‰$ÿPéàùÿÿ‹F‰4$ÿPé7úÿÿ‹B‰$ÿPéZúÿÿ‹F‰4$ÿPéyúÿÿ‹B‰$ÿPé}úÿÿ‹B‰$ÿPé½úÿÿ‹F‰4$ÿPéïúÿÿ‹B‰$ÿPéÒúÿÿ‹B‰$ÿPé”ýÿÿ‹B‰$ÿPéšüÿÿ‹B‰$ÿPézüÿÿ‹B‰$ÿPéµüÿÿ‹B‰$ÿPéûÿÿ‹F‰4$ÿPé/ûÿÿ‹F‰4$ÿPéiûÿÿ‹B‰$ÿPéŒûÿÿ‹B‰$ÿPéãûÿÿ‹B‰$ÿPéÃûÿÿ‹F‰4$ÿPéò÷ÿÿ‹F‰4$ÿPéÏ÷ÿÿ‹B‰$ÿPé¬÷ÿÿ‹G‰<$ÿPé"÷ÿÿ‹B‰$ÿPé÷ÿÿ‹F‰4$ÿPéåöÿÿ‹ƒpu‹‰ƒluǃhu‰}¬ÇEÈ‹ƒµ‰E´‰E°‰E¸‰Çéüÿÿ‹F‰4$ÿPé\üÿÿ‹B‰$ÿPéÝöÿÿ‹ƒpu‹‰ƒluǃhuéYýÿÿè¬t…À„±‹ƒpu‹‰ƒluǃhu‹EĉE°ÇEÈÇEÀéüÿÿènt…À„’‹ƒpu‹‰ƒluǃhu‹EĉE°‹}ÌÇEÈÇEÀéÀûÿÿ‹ƒpu‹‰ƒluǃhu‰}¬ÇEÈÇEÀ‹ƒµ‰E´‰E°‰E¸‰ÇéûÿÿƒD\‰D$‹ƒÑ‹‰$èté0ÿÿÿƒD\‰D$‹ƒÑ‹‰$ètéOÿÿÿ‹ƒpu‹‰ƒluǃhu"‹EĉE°‹}Ì‹UÔ‰U¸éúúÿÿ‹ƒpu‹‰ƒluǃhu"‹EĉE°‹}Ì‹UÔ‰U¸ÇEÀéäúÿÿ‹ƒè‰…À„“ƒD\‰D$‹ƒÑ‹‰$èss‹ƒpu‹‰ƒluǃhu‹UÔ‰U¸‹}Ì‹EĉE°ÇEÀÇEÈéúÿÿ‹ƒpu‹‰ƒluǃhu ‹EĉE°‹}Ì‹UÔ‰U¸éüùÿÿ‹ƒpu‹‰ƒluǃhu$ëÒ‹ƒµƒ‹UĉU°‰Æévúÿÿ‹ƒpu‹‰ƒluǃhu‹UĉU°ÇEÈéÞùÿÿ‹ƒpu‹‰ƒluǃhu‹UĉU°ÇEÈéxùÿÿ‹ƒpu‹‰ƒluǃhu ‹EĉE°‹}Ì‹UÔ‰U¸ÇE¼éùÿÿ‹ƒpu‹‰ƒluǃhu é‚þÿÿ‹ƒpu‹‰ƒluǃhu!éûþÿÿ‹ƒpu‹‰ƒluǃhu!éHþÿÿ‹ƒpu‹‰ƒluǃhu!‹EĉE°‹}Ì‹UÔ‰U¸ÇEÈ黸ÿÿ‹ƒpu‹‰ƒluǃhu éÌýÿÿ‹ƒpu‹‰ƒluǃhu%‹EЉE¬‹UĉU°‹}Ì‹EÔ‰E¸ÇEÈéeøÿÿ‹ƒpu‹‰ƒluǃhu#érÿÿÿ‹ƒpu‹‰ƒluǃhu"‹EĉE°‹}Ì‹UÔ‰U¸ÇEÈénøÿÿ‹ƒpu‹‰ƒluǃhu"‹EĉE°‹}Ì‹UÔ‰U¸éBøÿÿ‹B‰$ÿPé_ýÿÿU‰åWVSƒì\èïO‰E´‰U°ƒƒ‹»qƒ‰$èNpƒøÿ„ú‰$è‡nÿÿ‰EÀ…À„x‹ƒ#g‰D$‹E´‰$è@p‰EÈ…À„ ÇD$‰$èap‰Æ…À„Ø‹UÈ‹ƒè‰…À„‰4$èÔo‰EÈ…À„Ú‹ƒè‰…À„–‰}ÄÇE¼‹Eȉ$è1p‰Æ…À„o‰$è“o‰EÌ…À„‹ƒè‰…À„G‹Ủ$èúo‰EÔ…À„P‹UÄ‹ƒè‰…À„µ‹Ẻ$èÒo‰EÐ…À„¾‹ƒè‰…À„ÿ‹Ẻ$è­o‰Â…À…]èIo…À…y‹UÌ‹ƒè‰…À„Ù‹EÔ‰D$‹U°‰$è;o‰Æ…À„܉$èeo‰Çèo…À…˜‹ƒè‰…À„¨‹E¼Áà‰E¸‹UÀ‹B‹U¸‰<‹EЉD$‹U°‰$èän‰EÌ…À„±‰$è o‰Æè¬n…À…‹UÌ‹ƒè‰…À„’‹UÀ‹B‹U¸‰tƒE¼‹}ЋEÔ‰EÄ‹Eȉ$èÂn‰Æ…À…‘þÿÿè^n…À„É‹ƒÏf‹‰ƒËfǃÇf”ÇEÌ鋃Ïf‹‰ƒËfǃÇf”‹»q‰}ÄE܉D$Eà‰D$Eä‰$è nƒëM‰$è^m‰Æ‹E܉D$‹Eà‰D$‹Eä‰$èèm…ö„Õ‰4$è~m1ö‹UÄ‹ƒè‰…À„‹ƒè‰…À„e‹U´‹ƒè‰…À„n‹U°‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄ\[^_]ËF‰4$ÿP‹Ủ$èªm‰EÔ…À…°ýÿÿèEm…À„º‹ƒÏf‹‰ƒËfǃÇf”1ö‹UÈ‹ƒè‰…À„œ…öt‹ƒè‰…À„j‹EÌ…À„âþÿÿ‹UÌ‹ƒè‰…À…Ðþÿÿ‹B‰$ÿPéÂþÿÿ‹B‰$ÿP‹Ẻ$èm‰EÐ…À…Býÿÿè¯l…À„틃Ïf‹‰ƒËfǃÇf”‹UÔ‰UÄ1ö‹UÈ‹ƒè‰…À…dÿÿÿ‹UÈ‹B‰$ÿPéSÿÿÿ‹G‰<$ÿPéóüÿÿ‹UÌ‹B‰$ÿPéýÿÿ‹F‰4$ÿPéJýÿÿ‹G‰<$ÿP‹U´‹ƒè‰…À…’þÿÿ‹B‰$ÿPé„þÿÿ‹B‰$ÿPéUþÿÿ‹B‰$ÿPé`ýÿÿ‹³qé þÿÿÇD$‹ƒ$q‹‰$èl‰Æ…Àt1É1Òèöuÿÿ‹ƒè‰…À„²‹ƒÏf‹‰ƒËfǃÇf’ézýÿÿ‹F‰4$ÿPéˆþÿÿ‹B‰$ÿPéeûÿÿ‹ƒÏf‹‰ƒËfǃÇféAýÿÿ‹F‰4$ÿPé\ûÿÿ‹ƒÏf‹‰ƒËfǃÇf”ÇẺ}Äéþÿÿ‹ƒÏf‹‰ƒËfǃÇf”ÇẺ}Äéòýÿÿ‹F‰4$ÿPé@ÿÿÿ‹ƒè‰…À„Gƒ£M‰D$‹ƒ0q‹‰$èk‹ƒÏf‹‰ƒËfǃÇf”‹UÔ‰UÄ‹}Ð1öé}ýÿÿ‹ƒÏf‹‰ƒËfǃÇf”é`ýÿÿƒ£M‰D$‹ƒ0q‹‰$è¯jé'ýÿÿ‹ƒÏf‹‰ƒËfǃÇf•‹EÔ‰EÄ‹}ÐÇEÌéýÿÿ‹ƒÏf‹‰ƒËfǃÇf•‹UÔ‰UÄ‹}ÐÇEÌéçüÿÿ‹ƒÏf‹‰ƒËfǃÇf–‹UÔ‰UÄ‹}Ð1öé¿üÿÿ‹ƒÏf‹‰ƒËfǃÇf–‹EÔ‰EÄ‹}Ð1öé—üÿÿƒ£M‰D$‹ƒ0q‹‰$èæiéôüÿÿ‹B‰$ÿPé«þÿÿ‹UÈ‹ƒè‰…Àt4‹E¼‹UÀ‰‹ƒq‰D$ ÇD$‹E¼‰D$‹B‰$èÑh‹uÀéŽûÿÿ‹B‰$ÿPëÁU‰åVSƒì0èŠH‹EÇD$‰$ÿ˜‰Æ…À„勃¯i‰F ƒÇEôÇEðEð‰D$Eô‰D$ƒ¢X‰D$ ƒzC‰D$‹E‰D$‹E ‰$è6h…À„„ƒ‹Eôƒ‹Eðƒ‹Uð‹Eôèÿ÷ÿÿ‰F‹Eðƒ‹F ‹ƒê‰…Ò„‹Eð‰F ‹ƒè‰…À„‹Eô‹ƒê‰…ÒtB‹Eð‹ƒê‰…Òt ‰ðƒÄ0[^]ËEð‹P‰$ÿR‰ðƒÄ0[^]˃艅Àte1ö‰ðƒÄ0[^]ËEô‹P‰$ÿR‹Eð‹ƒê‰…Òu²ë¹‹F ‹P‰$ÿR‹Eð‰F ‹ƒè‰…À…sÿÿÿ‹F‰4$ÿP‹Eô‹ƒê‰…Ò…fÿÿÿ릋F‰4$ÿP1öébÿÿÿU‰åWVSƒì\èG‹EÇD$‰$ÿ˜‰E¸…À„©‹³)h‰p ƒÇEäÇEàEà‰D$Eä‰D$ƒ(W‰D$ ƒôA‰D$‹E‰D$‹U ‰$è¯f…À„A‹E¸ƒ‹E䃋Eàƒƒ‹Eä‰$èëfƒøÿ„M‰$èfÿÿ‹U¸‰B‹Eàƒ‹B ‹ƒê‰…Ò„‹Eà‹U¸‰B ‹R…Ò„Ç$è.f‰EÀ…À„•‹ƒè‰…À„‹Eä‰$èmf‰EÄ…À„׉uÈ‹Uĉ$èàf‰Ç…À„r‹UÈ‹ƒè‰…À„닃^‰D$‹EÀ‰$èPf‰EÌ…À„ĉ|$‹Eà‰$è^f‰EÐ…À„ÒÇ$è=f‰EÔ…À„߉‹EЉB ‰T$‹Ủ$è9f‰Æ…À„Û‹UÌ‹ƒè‰…À„u‹UÔ‹ƒè‰…À„~‹ƒè‰…À„÷‰}Èé,ÿÿÿ‹ƒä]‹‰ƒà]ǃÜ]ÇEÐÇEÔ‰uÀ‰uȉ÷‹EÐ…Àt‹UЋƒè‰…À„•‹EÔ…Àt‹UÔ‹ƒè‰…À„nƒEè qÿÿ¾ÿÿÿÿ‹UÀ‹ƒè‰…À„>‹ƒè‰…À„!‹U¸‹ƒè‰…À„‹E䋃ꉅ҄À‹Eà‹ƒê‰…Ò„Ì…öy‹U¸‹ƒè‰…À„§ÇE¸‹E¸ƒÄ\[^_]ËF‰4$ÿP‰}Èé,þÿÿ‹ƒä]‹‰ƒà]ǃÜ] ÇEÐÇEÔ‰uȉ÷éþþÿÿ‹F‰4$ÿPéÕýÿÿ‹B‰$ÿPéþÿÿ‹B‰$ÿP‹UÔ‹ƒè‰…À…‚þÿÿ‹B‰$ÿPétþÿÿ‹Eä‹P‰$ÿR‹Eà‹ƒê‰…Ò…4ÿÿÿ‹Eà‹P‰$ÿRé#ÿÿÿ‹B‰$ÿPéñþÿÿ‹G‰<$ÿPéÑþÿÿ‹B‰$ÿPé´þÿÿ‹B‰$ÿPé„þÿÿ‹B‰$ÿPé]þÿÿ‹U¸‹B ‹P‰$ÿRéÛüÿÿÇD$‹ƒ9h‹‰$èÞc‰Ç…Àt51É1ÒèÓmÿÿ‹ƒè‰…À„‹ƒä]‹‰ƒà]ǃÜ] éÇýÿÿ‹ƒä]‹‰ƒà]ǃÜ] ÇEÐÇEÔ‰uÀ‰uȉ÷éªýÿÿ‹B‰$ÿPÇE¸éKþÿÿ‹ƒä]‹‰ƒà]ǃÜ] ë¶è c…À„‹ƒä]‹‰ƒà]ǃÜ] ‹}ÈÇEÌÇEÐÇEÔ‹UÄ‹ƒè‰…Àt+‹EÌ…À„%ýÿÿ‹UÌ‹ƒè‰…À…ýÿÿ‹B‰$ÿPéýÿÿ‹UÄ‹B‰$ÿPëÇ‹ƒä]‹‰ƒà]ǃÜ] ÇEÐÇEÔë‘‹ƒä]‹‰ƒà]ǃÜ] ÇEÔémÿÿÿ‹ƒä]‹‰ƒà]ǃÜ] éPÿÿÿ‹ƒä]‹‰ƒà]ǃÜ] ÇEÐé,ÿÿÿ‹G‰<$ÿPébþÿÿ‹UÄ‹ƒè‰…À„Ñ‹ƒX^‰D$‹EÀ‰$è¿a‰EÌ…À„ƒÇD$‰$èàa‰Æ…À„è‹UÌ‹ƒè‰…À„È‹ƒè‰…À„«‹EÀ‰$èAa‰EÐ…À„n‹}ÈÇE¼éÌ‹Eȉ$è­a‰ÆèLa…À….‹}¼Áç‹U¸‹B‹@‰48‹ƒ,^‰D$‹Eà‰$èa‰EÌ…À„Չ‹EȉD$‰$èa‰EÔ…À„h‹UÌ‹ƒè‰…À„…‹EÔ‰D$‹Eä‰$èð`‰Æ…À„Ù‹UÔ‹ƒè‰…Àtt‹U¸‹Bx‹Uà‰ðèðÿÿ‰G‹ƒè‰…ÀtHƒE¼‹}È‹UЉ$èÜ`‰EÈ…À„ ‹ƒè‰…À…ÿÿÿ‹G‰<$ÿPéÿÿÿ‹B‰$ÿPémÿÿÿ‹F‰4$ÿPë­‹B‰$ÿP닃ä]‹‰ƒà]ǃÜ]ÇEÐÇEÔ‹}Èéyúÿÿ‹B‰$ÿPé!þÿÿ‹ƒä]‹‰ƒà]ǃÜ]ÇEÔ‹}ÈéDúÿÿ‹F‰4$ÿPéGþÿÿ‹B‰$ÿPé*þÿÿ‹ƒä]‹‰ƒà]ǃÜ]‹}ÈÇEÐÇEÔéÕüÿÿ‹ƒä]‹‰ƒà]ǃÜ]‹}Èë×èl_…À„•‹ƒä]‹‰ƒà]ǃÜ]‰}ÈÇEÔé©ùÿÿ‹ƒä]‹‰ƒà]ǃÜ]ÇEÔ‹}Èé‚ùÿÿ‹ƒä]‹‰ƒà]ǃÜ]ÇEÔ‹}Èé[ùÿÿ‹ƒä]‹‰ƒà]ǃÜ]‹}Èé;ùÿÿ‹UЋƒè‰…Àt‹U¸‹B‹U¼‰1öé]ùÿÿ‹B‰$ÿPëãU‰åWVSƒì\èí=‹EÇD$‰$ÿ˜‰Ç…À„†ÇEäEä‰D$ƒN‰D$ ƒ­4‰D$‹E‰D$‹U ‰$è³]…À„6ƒ‹E䃋Eä‰$èû]ƒøÿ„Ô‰$è4\ÿÿ‰G…À„‹ƒ!U‰D$‹Eä‰$èí]‰EÐ…À„ÇD$‰$è^‰Æ…À„c‹MЋƒè‰…À„J‰4$è]‰EÐ…À„S‹ƒè‰…À„6ÇEÌ‹EЉ$èá]‰Æ…À„‰$èC]‰EÔ…À„‹ƒè‰…À„­‹UÔ‰$èª]‰Æ…À„Ó‰$è]‰EÄè;]…À…Þ‹ƒè‰…À„‹MÔ‰ $èn]‰Æ…À„—‰$èa]‰EÈèÿ\…À…¢‹ƒè‰…À„Q‹EÔ‰$è2]‰Â…À…èÎ\…À…µ‹UÔ‹ƒè‰…À„+‹UÌÁâ‹G‹@‹Mĉ ‹G‹@‹MȉLƒEÌ‹EЉ$èÛ\‰Æ…À…úþÿÿèw\…À„ˆ‹ƒÍT‹‰ƒÉTǃÅTeÇEÔ鋃ÍT‹‰ƒÉTǃÅTaƒ%<èÚgÿÿ¾ÿÿÿÿ‹ƒè‰…ÀtZ‹E䋃ꉅÒt>…öy‹ƒè‰…Àu ‹G‰<$ÿP1ÿ‰øƒÄ\[^_]˃ÍT‹‰ƒÉTǃÅTe뙋Eä‹P‰$ÿRë´‹G‰<$ÿP뛋F‰4$ÿPéEþÿÿ‹F‰4$ÿPésþÿÿ‹F‰4$ÿPé¡þÿÿ‹UÔ‹B‰$ÿPéÄþÿÿès[…Àuƒ¡;‰D$‹ƒ._‹‰$è›[‹ƒÍT‹‰ƒÉTǃÅTe‹UЋƒè‰…À„¤…öt‹ƒè‰…À„ƒ‹MÔ…É„Úþÿÿ‹MÔ‹ƒè‰…À…Èþÿÿ‹A‰ $ÿPéºþÿÿÇD$‹ƒ"_‹‰$è[‰Æ…Àt1É1Òèüdÿÿ‹ƒè‰…Àu ‹F‰4$ÿP‹ƒÍT‹‰ƒÉTǃÅTcébþÿÿ‹F‰4$ÿPéoÿÿÿ‹UЋB‰$ÿPéKÿÿÿ‹A‰ $ÿPé¨üÿÿ‹F‰4$ÿPé¼üÿÿ‹ƒÍT‹‰ƒÉTǃÅTeÇEÔéÿÿÿ‹ƒè‰…Àt9ƒ¡;‰D$‹ƒ._‹‰$èWZ‹ƒÍT‹‰ƒÉTǃÅTe1öéµþÿÿ‹B‰$ÿP뼋UЋƒè‰…Àt5‹G‹M̉‹W‹ƒ_‰D$ ÇD$‹‰D$‹B‰$è)Y1öéýÿÿ‹B‰$ÿPëÀU‰åWVSƒìLèâ8ÇE䋃vP‰EàEà‰D$Eä‰D$ƒI‰D$ ƒR7‰D$‹E‰D$‹E ‰$è¶X…À„E‹Eƒ‹E䃋Eàƒ‹U‹R‰UÔ…Ò޳ÇEÐëV‹MЉL$‰4$è¥X‰Æ…ö„a‰4$èLY‰ÇèëX…À…d‹ƒè‰…À„Ì‹U‹B‹MЉ<ˆƒÁ‰MÐ9MÔtT‹uä‹F‹@4…Àt‹x …ÿu–‹EЉ$èßX‰Ç…À„û‰D$‰4$è¦X‰Æ‹ƒè‰…À…uÿÿÿ‹G‰<$ÿPégÿÿÿ‹Eà‰$èXƒøŒ’u~‹ƒZƒ‰Æ‹U‹ƒè‰…ÀtZ‹E䋃ꉅÒt>‹Eà‹ƒê‰…Òu ‹Eà‹P‰$ÿR‰ðƒÄL[^_]ËF‰4$ÿPé&ÿÿÿ1ö‰ðƒÄL[^_]ËEä‹P‰$ÿRë´‹B‰$ÿP뛋E‹P ‹@ƒépÿÿÿ‹ƒÂO‹‰ƒ¾OǃºO©ƒV7èRcÿÿ1öéQÿÿÿ‹ƒÂO‹‰ƒ¾OǃºO¨ëÔ‹ƒÂO‹‰ƒ¾OǃºO¨‹ƒè‰…Àu±‹F‰4$ÿPë¦U‰åWVSƒì,èš6‹Eƒ‹»¿Wƒ‹H ‹Q‹u‹F;H‹F…À…¬‰}Ø‹U‹B…À…7‹U؃‹“¿W‹ƒè‰…À„Ò‹uØ‹MƒAƒ‰uÜ‹ƒè‰…ÀtZ‹UØ‹ƒè‰…Àt-‹ƒè‰…Àt6‹M‹ƒè‰…Àu ‹A‰ $ÿP‹E܃Ä,[^_]ËB‰$ÿP‹ƒè‰…ÀuÊ‹F‰4$ÿPë¿‹G‰<$ÿP뛋ƒÂM‰D$‹A ‰$èJV‰Æ…À„0‹U‹B ‹@‹R‹@‹ЋF‹@4…À„V‹@ …À„K‰T$‰4$è´U‰Eà‹Eà…À„v‹ƒè‰…À„‹“¿W‹ƒè‰…À„ç‹uà‰uØ‹U‹B…À„Éþÿÿ‹B‰$èV‰Æ…À„¯Ç$èÀU‰Eà…À„m‹M‹A ƒ‹A ‹Uà‰B ‰r‰T$‹ƒþL‰$è¬U‰Æ…À„‹Mà‹ƒè‰…À„ù‹ƒè‰…À„܉÷‹u‹F…À…¦‰þƒ‹“¿W‹ƒè‰…À…?þÿÿ‹B‰$ÿPé1þÿÿ‹B‰$ÿPé þÿÿ‹ƒzM‹‰ƒvMǃrMŠƒ25è˜`ÿÿ‹³¿WÇEÜéûýÿÿ‰$è U‰Eä…Àt/‰D$‰4$è×T‰Eà‹U䋃艅À…”þÿÿ‹B‰$ÿPé†þÿÿÇEà‹ƒzM‹‰ƒvMǃrM‡‹‹¿W‰MØ‹ƒè‰…À„¸‹Eà…À„cÿÿÿ‹uà‹ƒè‰…À…Qÿÿÿ‹F‰4$ÿPéCÿÿÿ‹ƒzM‹‰ƒvMǃrMŠ묋ƒzM‹‰ƒvMǃrM‡‰}Øé ÿÿÿ‹B‰$ÿP‹Eà‰EØéÔüÿÿ‹F‰4$ÿPéâýÿÿ1É1Ò‹ƒ·W‹èý]ÿÿ‹ƒzM‹‰ƒvMǃrM…‰}Øé¶þÿÿ‹F‰4$ÿPé:ÿÿÿÇ$è¡S‰Æ…ÀtM‹E؃‰F ƒ‰~é9þÿÿ‹G‰<$ÿPéþÿÿ‹A‰ $ÿPéùýÿÿ‹ƒzM‹‰ƒvMǃrMŠéæþÿÿ‹ƒzM‹‰ƒvMǃrMŒé,þÿÿU‰åWVSƒì,èf2‹Eƒ‹³‹Sƒ‹P ‹M‹A;„‹y…ÿ…«‰uØ‹E‹P…Ò…3‹M؃‹»‹S‹ƒè‰…À„̉΋Eƒ@ƒ‰uÜ‹MØ‹ƒè‰…ÀtW‹ƒè‰…Àt-‹ƒè‰…Àt6‹U‹ƒè‰…Àu ‹B‰$ÿP‹E܃Ä,[^_]ËG‰<$ÿP‹ƒè‰…ÀuÊ‹F‰4$ÿPë¿‹A‰ $ÿPëž‹ƒŽI‰D$‹A‰$èR‰Ç…À„K‹M‹A ‹Q‹@‹ЋG‹@4…À„"‹p …ö„‰T$‰<$è‡Q‰Eä‹Mä…É„|‹ƒè‰…À„-‹“‹S‹ƒè‰…À„‹Uä‰UØ‹E‹P…Ò„Íþÿÿ‰Â‹ƒŽI‰D$‹B‰$èQ‰Ç…À„ñ‹M‹A ‹Q‹@‹TЋG‹@4…À„À‹@ …À„µ‰T$‰<$èëP‰Eä‹uä…ö„S‹ƒè‰…À„D‹³‹S‹ƒè‰…À„!‹E‹H…É…Ò‹U䃋ƒè‰…À„<‰Ö‰×é6þÿÿ‹G‰<$ÿP‹uØé%þÿÿ‰$èQ‰Æ…Àtj‰D$‰<$èßP‰E䋃艅À…Ìþÿÿ‹F‰4$ÿPé¾þÿÿ‰$èÚP‰Æ…À„Ÿ‰D$‰<$è¡P‰E䋃艅À…*ÿÿÿ‹F‰4$ÿPéÿÿÿÇE䋃FI‹‰ƒBIǃ>Ii‹ƒ‹S‰EØ‹ƒè‰…À„e‹Uä…Òt‹U䋃艅À„8‹»‹Sƒ"1è´[ÿÿ‹³‹SÇEÜéGýÿÿÇE䋃FI‹‰ƒBIǃ>Ik딋ƒFI‹‰ƒBIǃ>Ii‰÷‰uØë£‹B‰$ÿP‹Mä‰MØé»üÿÿ‹G‰<$ÿPéÅýÿÿ‹ƒFI‹‰ƒBIǃ>Ik‹»‹Sé^ÿÿÿ1É1Ò‹ƒƒS‹èYÿÿ‹ƒFI‹‰ƒBIǃ>Ig‰÷‰uØé+ÿÿÿÇ$è@O‰Eà…À„‹U؃‹Mà‰Q ‹E䃉A‹ƒè‰…Àt[‹}ä‰ÎéAüÿÿ‹F‰4$ÿPéÑýÿÿ‹G‰<$ÿPé®ýÿÿ‹B‰$ÿP‹»‹Séºþÿÿ‹G‰<$ÿPéþÿÿ‹F‰4$ÿP‹uä‰÷éðûÿÿ‹F‰4$ÿP‹}ä‹uàéÜûÿÿ‹ƒFI‹‰ƒBIǃ>Im‹}äéeþÿÿU‰åWVSƒì<è»-ƒkD‰D$ ƒ³!‰D$‹E‰D$‹E ‰$è­M…Àu 1ÿ‰øƒÄ<[^_]ËEƒ‹“àN‰UЃÇ$èuM‰EÔ…À„ì‹MЋƒè‰…À„Ì‹U‹B‹‰EØ…Àg‹EÔƒ‰Ç‰Æ‹MЋƒè‰…Àt0‹ƒè‰…Àt9‹U‹ƒè‰…À…wÿÿÿ‹B‰$ÿP‰øƒÄ<[^_]ËA‰ $ÿP‹ƒè‰…ÀuÇ‹F‰4$ÿPë¼ÇEÌ‹MÌ鹉T$‰4$èM‰Ç…ÿ„l‹ƒè‰…À„ÖÇ$èQM‰Æ…À„£‰x ‹M䃉HÇ$è/M‰Ç…À„%‰p ‰D$‹E܉$è1M‰Æ…À„e‹UÜ‹ƒè‰…À„~‹ƒè‰…À„‡‹ƒè‰…À„ƒEÌ‹MÌ9MØ„Ñþÿÿ‰ $èîL‰Æ…À„8Ç$è«L‰EÜ…À„n‹Eƒ‹U܉B ‰r‰T$‹ƒD‰$èL‰Eä…À„#‹MÜ‹ƒè‰…À„Í‹UЋƒè‰…À„­‹Mä‰MЋƒÇD‰D$‹EÔ‰$èL‰EÜ…À„4‹ƒãD‰D$‹U‹B ‰$èôK‰Æ…À„ó‹M‹A‹@‹M̋ȋF‹@4…Àt ‹@ …À…bþÿÿ‰$è L‰Eà…À„щD$‰4$èÏK‰Ç‹Uà‹ƒè‰…À…=þÿÿ‹B‰$ÿPé/þÿÿ‹B‰$ÿPéEÿÿÿ‹A‰ $ÿPé%ÿÿÿ‹F‰4$ÿPéþÿÿ‹B‰$ÿP‹ƒè‰…À…yþÿÿ‹G‰<$ÿP‹ƒè‰…À…pþÿÿ‹F‰4$ÿPébþÿÿ‹A‰ $ÿPé&ýÿÿ‹ƒ›D‹‰ƒ—Dǃ“D1‹uЃ›,è¥Vÿÿ1ÿéýÿÿ‹ƒ›D‹‰ƒ—Dǃ“D5‹ƒè‰…Àt~‹EÜ…Àt1ÿ‹UÜ‹ƒè‰…Àt<…ÿt ‹ƒè‰…Àt‹uÔë ‹G‰<$ÿP‹uÔë’‹ƒ›D‹‰ƒ—Dǃ“D5ë¶‹B‰$ÿP빋ƒ›D‹‰ƒ—Dǃ“D4‹uÔéMÿÿÿ‹F‰4$ÿPétÿÿÿ‹ƒ›D‹‰ƒ—Dǃ“D41ÿé^ÿÿÿ‹ƒ›D‹‰ƒ—Dǃ“D4é-ÿÿÿ‹ƒ›D‹‰ƒ—Dǃ“D51ÿé"ÿÿÿ‹ƒ›D‹‰ƒ—Dǃ“D5‹uÔéÄþÿÿU‰åWVSƒì<è )ƒ¿?‰D$ ƒ‰D$‹E‰D$‹E ‰$èýH…Àu 1ÿ‰øƒÄ<[^_]ËEƒ‹³0JƒÇ$èÈH‰EØ…À„‹ƒè‰…À„ê‹U‹B‹‰EÜ…ÀA‹U؃‰×‰Ö‹ƒè‰…Àt!‹M‹ƒè‰…Àu‹A‰ $ÿP‰øƒÄ<[^_]ËF‰4$ÿPëÔÇEÔ鞉T$‰4$è‚H‰Eä‹Eä…À„¬‹ƒè‰…À„Ç$èÌH‰Æ…À„$‹Eä‰F ‰t$‹Uà‰$èËH‰Ç…À„h‹Mà‹ƒè‰…À„à‹ƒè‰…À„鋃艅À„òƒEÔ‹EÔ9EÜ„ÿÿÿ‹ƒ@‰D$‹M؉ $è0H‰Eà…À„…‹ƒ3@‰D$‹U‹B ‰$è H‰Æ…À„æ‹U‹B‹@‹MÔ‹È‹F‹@4…Àt ‹@ …À…üþÿÿ‰$è"H‰Ç…À„°‰D$‰4$èéG‰E䋃艅À…Ûþÿÿ‹G‰<$ÿPéÍþÿÿ‹F‰4$ÿPéÙþÿÿ‹A‰ $ÿP‹ƒè‰…À…ÿÿÿ‹F‰4$ÿP‹ƒè‰…À…ÿÿÿ‹G‰<$ÿPéÿÿÿ‹F‰4$ÿPéþÿÿ‹ƒë?‹‰ƒç?ǃã?:ƒ(èàRÿÿ1ÿé÷ýÿÿ‹ƒë?‹‰ƒç?ǃã?<ÇEä‹Mà‹ƒè‰…Àt7…öt ‹ƒè‰…Àt6‹Eä…Àt‹U䋃艅Àt‹uØë˜‹B‰$ÿP‹uØëŠ‹Mà‹A‰ $ÿP뻋F‰4$ÿPë¿‹ƒë?‹‰ƒç?ǃã?<‹uØéQÿÿÿ‹ƒë?‹‰ƒç?ǃã?<éeÿÿÿU‰åWVSƒì<è¶%ƒn<‰D$ ƒ®‰D$‹E‰D$‹E ‰$è¨E…Àu 1ÿ‰øƒÄ<[^_]ËEƒ‹³ÛFƒÇ$èsE‰EÔ…À„ö‹ƒè‰…À„Ù‹U‹B‹‰EØ…ÀA‹UÔƒ‰×‰Ö‹ƒè‰…Àt!‹U‹ƒè‰…Àu‹B‰$ÿP‰øƒÄ<[^_]ËF‰4$ÿPëÔÇEÐé5‰T$‰4$è-E‰EÜ‹EÜ…À„›‹ƒè‰…À„÷‹ƒÞ<‰D$‹U‹B ‰$èME‰Æ…À„ô‹M‹A‹@‹MÌ‹T‹F‹@4…À„y‹x …ÿ„n‰T$‰4$è¹D‰Eä‹Mä…É„±‹ƒè‰…À„‘Ç$èE‰Æ…À„!‹E܉F ‹Uä‰VÇ$èáD‰EÜ…À„¬‰p ‰D$‹Eà‰$èâD‰Æ…À„‹Uà‹ƒè‰…À„8‹MÜ‹ƒè‰…À„A‹ƒè‰…À„JƒEЋEÐ9EØ„~þÿÿ‹ƒÂ<‰D$‹MÔ‰ $èDD‰Eà…À„_‹ƒÞ<‰D$‹U‹B ‰$è!D‰Æ…À„>‹EÐÁà‰EÌ‹U‹B‹@‹MÌ‹‹F‹@4…Àt ‹@ …À…\þÿÿ‰$è-D‰Ç…À„ÿ‰D$‰4$èôC‰EÜ‹ƒè‰…À…;þÿÿ‹G‰<$ÿPé-þÿÿ‰$èïC‰Ç…À„K‰D$‰4$è¶C‰E䋃艅À…qþÿÿ‹G‰<$ÿPécþÿÿ‹F‰4$ÿPéûýÿÿ‹F‰4$ÿPéaþÿÿ‹B‰$ÿP‹MÜ‹ƒè‰…À…¿þÿÿ‹A‰ $ÿP‹ƒè‰…À…¶þÿÿ‹F‰4$ÿPé¨þÿÿ‹F‰4$ÿPéýÿÿ‹ƒ–<‹‰ƒ’<ǃŽ<íƒÎ$èœNÿÿ1ÿéýÿÿ‹ƒ–<‹‰ƒ’<ǃŽ<ïÇEÜÇEä‹Mà‹ƒè‰…Àtz…öt ‹ƒè‰…Àt|‹UÜ…Òt‹UÜ‹ƒè‰…À„•‹Eä…Àt‹M䋃艅Àt‹uÔéuÿÿÿ‹A‰ $ÿP‹uÔédÿÿÿ‹ƒ–<‹‰ƒ’<ǃŽ<ðÇEäéxÿÿÿ‹Mà‹A‰ $ÿPéuÿÿÿ‹F‰4$ÿPévÿÿÿ‹ƒ–<‹‰ƒ’<ǃŽ<ïÇEäé5ÿÿÿ‹B‰$ÿPé]ÿÿÿ‹ƒ–<‹‰ƒ’<ǃŽ<ï‹uÔéÏþÿÿ‹ƒ–<‹‰ƒ’<ǃŽ<ïéêþÿÿU‰åWVSƒì<è𠃬7‰D$ ƒè‰D$‹E‰D$‹E ‰$èâ@…Àu 1ÿ‰øƒÄ<[^_]ËEƒ‹³BƒÇ$è­@‰EØ…À„‹ƒè‰…À„ê‹U‹B‹‰EÜ…ÀA‹U؃‰×‰Ö‹ƒè‰…Àt!‹M‹ƒè‰…Àu‹A‰ $ÿP‰øƒÄ<[^_]ËF‰4$ÿPëÔÇEÔ鞉T$‰4$èg@‰Eä‹Eä…À„¬‹ƒè‰…À„Ç$è±@‰Æ…À„$‹Eä‰F ‰t$‹Uà‰$è°@‰Ç…À„h‹Mà‹ƒè‰…À„à‹ƒè‰…À„鋃艅À„òƒEÔ‹EÔ9EÜ„ÿÿÿ‹ƒü7‰D$‹M؉ $è@‰Eà…À„…‹ƒ8‰D$‹U‹B ‰$èò?‰Æ…À„æ‹U‹B‹@‹MÔ‹È‹F‹@4…Àt ‹@ …À…üþÿÿ‰$è@‰Ç…À„°‰D$‰4$èÎ?‰E䋃艅À…Ûþÿÿ‹G‰<$ÿPéÍþÿÿ‹F‰4$ÿPéÙþÿÿ‹A‰ $ÿP‹ƒè‰…À…ÿÿÿ‹F‰4$ÿP‹ƒè‰…À…ÿÿÿ‹G‰<$ÿPéÿÿÿ‹F‰4$ÿPéþÿÿ‹ƒÐ7‹‰ƒÌ7ǃÈ7õƒ( èÅJÿÿ1ÿé÷ýÿÿ‹ƒÐ7‹‰ƒÌ7ǃÈ7÷ÇEä‹Mà‹ƒè‰…Àt7…öt ‹ƒè‰…Àt6‹Eä…Àt‹U䋃艅Àt‹uØë˜‹B‰$ÿP‹uØëŠ‹Mà‹A‰ $ÿP뻋F‰4$ÿPë¿‹ƒÐ7‹‰ƒÌ7ǃÈ7÷‹uØéQÿÿÿ‹ƒÐ7‹‰ƒÌ7ǃÈ7÷éeÿÿÿU‰åWVSƒì<蛃[4‰D$ ƒ“‰D$‹E‰D$‹E ‰$è=…Àu 1ÿ‰øƒÄ<[^_]ËEƒ‹³À>ƒÇ$èX=‰EØ…À„‹ƒè‰…À„ë‹U‹B‹‰EÜ…ÀA‹U؃‰×‰Ö‹ƒè‰…Àt!‹M‹ƒè‰…Àu‹A‰ $ÿP‰øƒÄ<[^_]ËF‰4$ÿPëÔÇEÔ鞉T$‰4$è=‰Eä‹Uä…Ò„­‹ƒè‰…À„Ç$è\=‰Æ…À„%‹Eä‰F ‰t$‹Uà‰$è[=‰Ç…À„i‹Mà‹ƒè‰…À„ዃ艅À„ꋃ艅À„óƒEÔ‹EÔ9EÜ„ÿÿÿ‹ƒ§4‰D$‹M؉ $èÀ<‰Eà…À„†‹ƒÃ4‰D$‹U‹B ‰$è<‰Æ…À„ç‹U‹B‹@‹MÔ‹TÈ‹F‹@4…Àt ‹H …É…ûþÿÿ‰$è±<‰Ç…À„°‰D$‰4$èx<‰E䋃艅À…Úþÿÿ‹G‰<$ÿPéÌþÿÿ‹F‰4$ÿPéØþÿÿ‹A‰ $ÿP‹ƒè‰…À…ÿÿÿ‹F‰4$ÿP‹ƒè‰…À… ÿÿÿ‹G‰<$ÿPéÿþÿÿ‹F‰4$ÿPéþÿÿ‹ƒ{4‹‰ƒw4ǃs4üƒóèoGÿÿ1ÿéöýÿÿ‹ƒ{4‹‰ƒw4ǃs4þÇEä‹Mà‹ƒè‰…Àt7…öt ‹ƒè‰…Àt6‹Eä…Àt‹U䋃艅Àt‹uØë˜‹B‰$ÿP‹uØëŠ‹Mà‹A‰ $ÿP뻋F‰4$ÿPë¿‹ƒ{4‹‰ƒw4ǃs4þ‹uØéQÿÿÿ‹ƒ{4‹‰ƒw4ǃs4þéeÿÿÿU‰åWVSƒì,èE‹Eƒ‹U ƒ‹ƒ}1‰D$‹U‹B ‰$èÀ:‰Æ…À„ ‹E ‰D$‰4$èÏ:‰Ç…À„L‹ƒè‰…À„Œ‰<$èê:‰Æè‰:…À„•‹ƒ%1‹‰ƒ!1ǃ1Ý‹ƒè‰…ÀtGƒÁèFÿÿ1ö‹U‹ƒè‰…Àt!‹U ‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄ,[^_]ËB‰$ÿPëÔ‹G‰<$ÿP뮋F‰4$ÿP‰<$èU:‰Æèô9…À…kÿÿÿ‹ƒè‰…À„ê‰t$‹U‹B‰$èz8ÿÿ‰Ç…À„8‹ƒm1‰D$‹U‹B ‰$èŸ9‰Æ…À„D‹W‹@‹@4…À„©‹x …ÿ„ž‰T$‰4$è9‰Ç…ÿ„Ç‹ƒè‰…Àt_‰þé ÿÿÿ‹ƒ%1‹‰ƒ!1ǃ1Ý‹ƒè‰…Àt …ÿ…ÇþÿÿéÍþÿÿ‹F‰4$ÿPë苃%1‹‰ƒ!1ǃ1Ýé¥þÿÿ‹F‰4$ÿP‰þé¢þÿÿ‹G‰<$ÿPéÿÿÿ‰$è9‰Eä…Àt.‰D$‰4$èè8‰Ç‹U䋃艅À…Aÿÿÿ‹B‰$ÿPé3ÿÿÿ1ÿ‹ƒ%1‹‰ƒ!1ǃ1àéFÿÿÿ1É1Ò‹ƒ^;‹è®Bÿÿ‹ƒ%1‹‰ƒ!1ǃ1ßéýýÿÿ‹ƒ%1‹‰ƒ!1ǃ1àéàýÿÿU‰åWVSƒì<臃K.‰D$ ƒ ‰D$‹E‰D$‹E ‰$èy7…Àu 1ÿ‰øƒÄ<[^_]ËEƒ‹³¬8ƒÇ$èD7‰EÔ…À„ö‹ƒè‰…À„Ù‹U‹B‹‰EØ…ÀA‹UÔƒ‰×‰Ö‹ƒè‰…Àt!‹U‹ƒè‰…Àu‹B‰$ÿP‰øƒÄ<[^_]ËF‰4$ÿPëÔÇEÐé5‰T$‰4$èþ6‰EÜ‹EÜ…À„›‹ƒè‰…À„÷‹ƒ¯.‰D$‹U‹B ‰$è7‰Æ…À„ô‹M‹A‹@‹MÌ‹T‹F‹@4…À„y‹@ …À„n‰T$‰4$èŠ6‰Eä‹Eä…À„±‹ƒè‰…À„‘Ç$èÔ6‰Æ…À„!‹E܉F ‹Uä‰VÇ$è²6‰EÜ…À„¬‰p ‰D$‹Eà‰$è³6‰Æ…À„‹Uà‹ƒè‰…À„8‹MÜ‹ƒè‰…À„A‹ƒè‰…À„JƒEЋEÐ9EØ„~þÿÿ‹ƒ“.‰D$‹MÔ‰ $è6‰Eà…À„_‹ƒ¯.‰D$‹U‹B ‰$èò5‰Æ…À„>‹EÐÁà‰EÌ‹U‹B‹@‹MÌ‹‹F‹@4…Àt ‹@ …À…\þÿÿ‰$èþ5‰Ç…À„ÿ‰D$‰4$èÅ5‰EÜ‹ƒè‰…À…;þÿÿ‹G‰<$ÿPé-þÿÿ‰$èÀ5‰Ç…À„K‰D$‰4$è‡5‰E䋃艅À…qþÿÿ‹G‰<$ÿPécþÿÿ‹F‰4$ÿPéûýÿÿ‹F‰4$ÿPéaþÿÿ‹B‰$ÿP‹MÜ‹ƒè‰…À…¿þÿÿ‹A‰ $ÿP‹ƒè‰…À…¶þÿÿ‹F‰4$ÿPé¨þÿÿ‹F‰4$ÿPéýÿÿ‹ƒg.‹‰ƒc.ǃ_.¸ƒ+èm@ÿÿ1ÿéýÿÿ‹ƒg.‹‰ƒc.ǃ_.ºÇEÜÇEä‹Mà‹ƒè‰…Àtz…öt ‹ƒè‰…Àt|‹EÜ…Àt‹UÜ‹ƒè‰…À„•‹Eä…Àt‹M䋃艅Àt‹uÔéuÿÿÿ‹A‰ $ÿP‹uÔédÿÿÿ‹ƒg.‹‰ƒc.ǃ_.»ÇEäéxÿÿÿ‹Mà‹A‰ $ÿPéuÿÿÿ‹F‰4$ÿPévÿÿÿ‹ƒg.‹‰ƒc.ǃ_.ºÇEäé5ÿÿÿ‹B‰$ÿPé]ÿÿÿ‹ƒg.‹‰ƒc.ǃ_.º‹uÔéÏþÿÿ‹ƒg.‹‰ƒc.ǃ_.ºéêþÿÿU‰åWVSƒì<èÁƒ‰)‰D$ ƒ¹‰D$‹E‰D$‹E ‰$è³2…Àu 1ÿ‰øƒÄ<[^_]ËEƒ‹³æ3ƒÇ$è~2‰EØ…À„‹ƒè‰…À„ê‹U‹B‹‰EÜ…ÀA‹U؃‰×‰Ö‹ƒè‰…Àt!‹M‹ƒè‰…Àu‹A‰ $ÿP‰øƒÄ<[^_]ËF‰4$ÿPëÔÇEÔ鞉T$‰4$è82‰Eä‹Mä…É„¬‹ƒè‰…À„Ç$è‚2‰Æ…À„$‹Eä‰F ‰t$‹Uà‰$è2‰Ç…À„h‹Mà‹ƒè‰…À„à‹ƒè‰…À„鋃艅À„òƒEÔ‹EÔ9EÜ„ÿÿÿ‹ƒÍ)‰D$‹M؉ $èæ1‰Eà…À„…‹ƒé)‰D$‹U‹B ‰$èÃ1‰Æ…À„æ‹U‹B‹@‹MÔ‹È‹F‹@4…Àt ‹x …ÿ…üþÿÿ‰$èØ1‰Ç…À„°‰D$‰4$èŸ1‰E䋃艅À…Ûþÿÿ‹G‰<$ÿPéÍþÿÿ‹F‰4$ÿPéÙþÿÿ‹A‰ $ÿP‹ƒè‰…À…ÿÿÿ‹F‰4$ÿP‹ƒè‰…À…ÿÿÿ‹G‰<$ÿPéÿÿÿ‹F‰4$ÿPéþÿÿ‹ƒ¡)‹‰ƒ)ǃ™)Àƒ…è–<ÿÿ1ÿé÷ýÿÿ‹ƒ¡)‹‰ƒ)ǃ™)ÂÇEä‹Mà‹ƒè‰…Àt7…öt ‹ƒè‰…Àt6‹Uä…Òt‹U䋃艅Àt‹uØë˜‹B‰$ÿP‹uØëŠ‹Mà‹A‰ $ÿP뻋F‰4$ÿPë¿‹ƒ¡)‹‰ƒ)ǃ™)‹uØéQÿÿÿ‹ƒ¡)‹‰ƒ)ǃ™)ÂéeÿÿÿU‰åWVSƒì<èlƒ8&‰D$ ƒd‰D$‹E‰D$‹E ‰$è^/…Àu 1ÿ‰øƒÄ<[^_]ËEƒ‹³‘0ƒÇ$è)/‰EØ…À„‹ƒè‰…À„ë‹U‹B‹‰EÜ…ÀA‹U؃‰×‰Ö‹ƒè‰…Àt!‹M‹ƒè‰…Àu‹A‰ $ÿP‰øƒÄ<[^_]ËF‰4$ÿPëÔÇEÔ鞉T$‰4$èã.‰Eä‹Eä…À„­‹ƒè‰…À„Ç$è-/‰Æ…À„%‹Eä‰F ‰t$‹Uà‰$è,/‰Ç…À„i‹Mà‹ƒè‰…À„ዃ艅À„ꋃ艅À„óƒEÔ‹EÔ9EÜ„ÿÿÿ‹ƒx&‰D$‹M؉ $è‘.‰Eà…À„†‹ƒ”&‰D$‹U‹B ‰$èn.‰Æ…À„ç‹U‹B‹@‹MÔ‹TÈ‹F‹@4…Àt ‹@ …À…ûþÿÿ‰$è‚.‰Ç…À„°‰D$‰4$èI.‰E䋃艅À…Úþÿÿ‹G‰<$ÿPéÌþÿÿ‹F‰4$ÿPéØþÿÿ‹A‰ $ÿP‹ƒè‰…À…ÿÿÿ‹F‰4$ÿP‹ƒè‰…À… ÿÿÿ‹G‰<$ÿPéÿþÿÿ‹F‰4$ÿPéþÿÿ‹ƒL&‹‰ƒH&ǃD&ǃLè@9ÿÿ1ÿéöýÿÿ‹ƒL&‹‰ƒH&ǃD&ÉÇEä‹Mà‹ƒè‰…Àt7…öt ‹ƒè‰…Àt6‹Eä…Àt‹U䋃艅Àt‹uØë˜‹B‰$ÿP‹uØëŠ‹Mà‹A‰ $ÿP뻋F‰4$ÿPë¿‹ƒL&‹‰ƒH&ǃD&É‹uØéQÿÿÿ‹ƒL&‹‰ƒH&ǃD&Ééeÿÿÿpygr.cdict.IntTupleArrayholder for array of integer index valuesisDoneset_vectorreallocpygr.cdict.CGraphIteratoriterator for looping over elements in CGraphDictpygr.cdict.CDictIteratoriterator for looping over elements in CDictionarypygr.cdict.CGraphDictgeneral purpose graph in C; key_index supplies mapping to integer indexeskey_indexiteritemsitervaluesitemskeysvaluespygr.cdict.CDictionaryRefholds a reference to a CDictpygr.cdict.CDictionarygeneral purpose dict in C; key_index supplies mapping to integer indexespygr.cdict.CIntDictionaryboth keys and values MUST be integersget_more__getitem____iter____len____init____next__cdict.pyxselfOraise: arg 3 must be a traceback or Noneinstance exception may not have a separate valueraise: exception must be an old-style class or instancepygr.cdict.CIntDictionary.__getitem__pygr.cdict.CIntDictionary.iteritemspygr.cdict.CIntDictionary.itemspygr.cdict.CIntDictionary.keyspygr.cdict.CIntDictionary.__iter__pygr.cdict.CDictionary.__getitem__pygr.cdict.CDictionary.itervaluespygr.cdict.CDictionary.iteritemspygr.cdict.CDictionary.__iter__pygr.cdict.CDictionaryRef.itervaluespygr.cdict.CDictionaryRef.iteritemsgraphidictOiMissing type objectArgument '%s' has incorrect type (expected %s, got %s)pygr.cdict.CDictionaryRef.__cinit__pygr.cdict.CDictionaryRef.__iter__pygr.cdict.CGraphDict.__getitem__pygr.cdict.CGraphDict.valuespygr.cdict.CGraphDict.itervaluespygr.cdict.CGraphDict.iteritemspygr.cdict.CGraphDict.__iter__pygr.cdict.IntTupleArray.__getitem__npygr.cdict.IntTupleArray.reallocvector_lendimskipIndexOO|OOpygr.cdict.IntTupleArray.__cinit__pygr.cdict.KeyIndex.__init__kOOpygr.cdict.__getitem__pygr.cdict.KeyIndex.__getitem__qmlistpygr.cdict.QueryMatchIterator.__init__gqcompilermatchesdataGraphquery_fOOOOOpygr.cdict.QueryMatchList.__init__pygr.cdict.QueryMatchList.__len__pygr.cdict.QueryMatchList.get_more__import__OOOOpygr.cdict.QueryMatchList.__getitem__pygr.cdict.QueryMatchList.__iter__pygr.cdict.QueryMatchIterator.__next__gyieldKeysyieldValuesO|OOpygr.cdict.CGraphIterator.__init__cdcdrO|OOOpygr.cdict.CDictIterator.__init__cdict__builtin____builtins__CIntDictionaryCDictionaryCDictionaryRefCGraphDictCDictIteratorCGraphIteratorIntTupleArray__doc__pygr.cdict__module__dataTupleunpack sequence of wrong sizepygr.cdict.CGraphQueryMatch.__init__pygr.cdict.cdict_initdpygr.cdict.CGraphDict.__cinit__pygr.cdict.CIntDictionary.__cinit__vectorgotoNextO|Opygr.cdict.IntTupleArray.set_vectorpygr.cdict.CGraphIterator.__next__pygr.cdict.CDictIterator.__next__pygr.cdict.CGraphDict.itemspygr.cdict.CGraphDict.keyspygr.cdict.CDictionaryRef.itemspygr.cdict.CDictionaryRef.keyspygr.cdict.CDictionaryRef.valuespygr.cdict.CDictionaryRef.__getitem__pygr.cdict.CDictionary.itemspygr.cdict.CDictionary.keyspygr.cdict.CDictionary.values‹$ÃØã(ã€àñÀñ`ûøã ñàðBG$ä$,ä ·„ñ8ä¥DPñchange the number of hits to be loaded as one blocksave vector for continuing from this point, or next pointÒ¹@Ò|@ä( `8(ûE\äv¬T¹ïqîä ÉÀ€XHûE¬ä7†ˆ½8t‰àäñ€ õõXûEøä½äÞ? ô`ôê¨Då På<>\åš<hå3ÂpåãÆxå96*€åm@ ö€öûEœåÛ#¡4 öG2På™0\åë.hå8ÊpåþÎxåSÒ©Õ’¼åã øøØûEÔå¡È. ÷e§Pån,\åÌ*hågØpå-Ýxå‚à( æ öÀ€ù`ù˜û<æÒ& ù²på!$håÌ Påkb„dæ,[pæL`|æ>gˆæ ZæúVœæÌh|æþæSUæ^‘pæÐMHúget the integer index for python object k, or create one if neededæ"Là3ÿä*ÿ èÿìÿðþþ ôòþ øéþ üàþ ØþÏþ Èþ ¾þ µþ ¬þ ¡þ þ ›þ$þ (‰þ,ƒþ0yþ 4oþ 8jþ<bþ@[þDTþHJþ LBþP=þT7þXþ\ûý`çýd´ý3hlýFlDý%pýAprovide queryMatch mapping based on a list of (node,edge) tuplesiterate over items in QueryMatchListprovides mapping of query nodes / edges onto CGraphDict nodes / edgesconstruct integer index for sets of python objectsindex out of boundscd or cdr must be non-Nonethis type cannot do slicing...typessortquery_fqueryNodeqmlistobjectmatcheskeyskey_indexiteritemsitemsisDoneindex_keysigqigqcompilerget_morefromNodedataGraphappend__next____len____iter____init____getitem__SliceTypeQueryMatchListQueryMatchIteratorKeyIndexCGraphQueryMatch¨æ´æàèèèXêXê€êŒêê´æ´æèê´æ(ë´æXëdëlëxë´æ´æ´æèê´æ´æ|ì€ìŒìÄì€ìŒìÈì´æXë¤ílëîDåîDåîXî`îààôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô6ð84,$  øÿôÿðÿìÿäÿàÿÜÿÔÿÌÿÄÿÀÿ¸ÿ°ÿ¨ÿ¤ÿ ÿœÿ˜ÿÿŒÿ„ÿ€ÿxÿpÿlÿhÿdÿ\ÿTÿPÿHÿDÿèüàüØüÐüÈüÀü¸ü°ü¨ü ü˜üüˆü€üxüpühü`üXüPüHü@ü8ü0ü(ü üüüüüøûðûèûàûØûÐûÈûÀû¸û°û¨û û˜ûûˆû€ûxûpûhû`ûXûPûHû@û8û0û(û ûûûûûøúðúèúàúØúÐúÈúÀú¸ú°ú¨ú úúŒúDú<ú8ú,ú(úúú úúüùøùìùèùÜùØùÌùÈù¼ù¸ù¬ù¨ùŒùdùDù@ù4ù0ù$ù ùüøÔøÌø¸ø°ø˜ø”øøxølø,øøä÷à÷Ô÷Ð÷Ä÷À÷´÷°÷¤÷ ÷|÷T÷L÷@÷<÷8÷0÷÷÷÷øöìö¬ö„ödö`öTöPöDö@ö4ö0ö$ö öüõÔõÌõÀõ¼õ¸õ°õ˜õ”õõxõlõ,õõäôàôÔôÐôÄôÀô´ô°ô¤ô ô`ô<ôôô ôôüóøóðóØóÔóÐó¸ó¬ó|ótóTóPóLó@ó<ó8ó0óóóóøòìò¼ò´ò”òòŒò€ò|òxòpòXòTòPò8ò,òìñàñÄñÀñ<ñ4ñ0ñ,ñ$ñ ñàð¼ð˜ð”ðxðpðXðTðPð8ð,ðsd „€¦€¸€Â„ è„ „ „  „ F„ l$a ˆDb ‰Dc¥Šð¡Dd¦¢@ÇDe¬ÈDf²É$j´ßDk´àDl¹áDúDmºûDnÀüd´ ýdÂdÂ,f-<<€.ÂDÂD ÉD ßD ãDùDýDJ$Â] f@oÀÂpàq€€€ª€½€ç€ö€ €5 $ON.DDD&D.6 $H  Q @Z $%N6.6D6D!9D#ED'KD!MD'R[ $6r  €   Ž @œ @ª €º €Ê $NT.TD+TD/_D4cD>eD2lD3rD4tD5zD6~D8ŒD4ŽD5’D6ŸD8¬D9±Ë $+Tà  *é  * ò @,û € @, @, €-ôÿÿÿ" @*+ ÀT, à¶- $bN¶.¶DC¶DF½DGÓDI×DJíDOñDKù. $C¶C  BL @DV À¶W àX €i € €« €¼ €× €ÿ $ON.D^DbDgDqDeDf#Dg%Dh+Di/Dk=Dg?DhCDiPDk]Dlb $^  ]!  ] * @_3 @_> @_G €`ôÿÿÿP @]Z À[ àg\ $bNg.gDugDvmDw€] $ugp  ty @t‚ €’ $N‚.‚DS‚DUŠDW“DXžDZ©DU²DV»DÂDÍDUÕDWßDXêDZõ“ $S‚¦  R° @T¹ À‚º @Và ÀÂÄ àÕÅ àþÆ $|NþÇ dþÈ dþé dþö f÷ < € ãA €c àñ‡ Àñª `Ì  ñö àð BGI  ·z „ñ­ ¥DÛ Pñ Ò9¹@k|•(àæ` 8/(Rv­¬ÝT¹ 8ïqhî’É¿Àá€X(HJ7x£†Òˆ½8+tZ‰ƒñ­€Ì õíõ X,½WäÞ?« ôÒ`ôùê¨<>Lš<z3£ãÆË9õ6$*Kmy@œ öÁ€öåÛ7#c¡4“ ö¾G2è™0ë.K8ÊxþΤSÒÒ©Õ’0ã[{ øø¾ØÞ¡ È3.` ÷ˆe§¯n,ÝÌ* gØ6-Ý_‚àŠ(ºâöÀ3€ùX`ù|˜ŸÒ&Ï ùú²$!$PÌ }k®bá„ X4\Y`‚d«hѨù,[4¸ùjL`ÈùÐ>gØù2 Zaèù”úVÄøùûÌh/ úf þš úÑ SU!(ú:!^‘l!8ú›!ÐMÇ!Húõ!Œú!""LJ"lr"p›" ú­"àÇ"3ÿÒ"ää"*ÿï"è #ÿ#ì.#ÿ9#ðL#þþW#ôl#òþw#ø‰#éþ“#ü¥#àþ°#Á#ØþÌ#Þ#Ïþé#ù#Èþ$ $¾þ!$3$µþ=$O$¬þZ$n$¡þy$†$þ$ ›$›þ¥$$¹$þÃ$(Ó$‰þÞ$,í$ƒþø$0 %yþ%4)%oþ3%8A%jþL%<]%bþh%@x%[þƒ%D“%Tþ%H°%Jþº%LË%BþÖ%Pä%=þï%Tþ%7þ &X&þ &\,&ûý7&`C&çýN&dZ&´ýe&hq&lý|&lˆ&Dý“&pŸ&ýª&t¹&DÿÊ&Hÿ.þDTþDU DXDYCDZID[OD`RDb]D`fDbrDX{Db}ß&$Tþ' T+' T =' TO'€Uôÿÿÿb'@Vq'&WHÿ‡'€“'€¢'€¼'€Ò'€(€(€N(€h(€’(€£(€O-€`-€z-€‹-€¤-€µ-€Ð-€á-€ü-€ .€$.€5.€M.€^.€o.€€.€‘.€©.€º.€Õ.€æ.€/€/€//€@/€q/€‚/€ž/€¯/€Æ/€×/€ò/€ 0€)0€:0€K0€\0€x0€”0€¬0€½0€Ö0€ç0€þ0€1€'1€71€G1€W1€g1€w1€‡1€¦1€Ç1€ç1€ø1€2€2€(2€E2€U2€e2€u2€Þ2€N3€¿3€Ï3€ß3€ï3€ú7€ 9€f9€î9€ :€:€1:€C:€Y:€i:€ƒ:€œ:€®:€Æ:€Ø:€ò:€;€!;€3;€P;€c;€…;€ ;€¾;€Ñ;€ô;€<€+<€L<€_<€‚<€“<€¤<€µ<€Æ<€×<€è<€ù<€ =€=€,=@T>=@TP=ÀþQ=à†R=$ˆN†.†D´ †D½ D¿ ¤S=$´ †ˆ= ´ œ=@´ °=$&N¬.¬DS ¬D\ ¶D^ ʱ=$S ¬ç= S û=@S >$&NÒ.ÒD– ÒD˜ ÜD™ ÞDž áD  î>$– ÒF> – Z>@— k>€ …>@– ™>ÀÒš>àö›>$$Nö.öDò öDõ DùDú Dû#Dü'D1Dø :Dù KDú NDü gDý sDyœ>$ò öÐ> ò Ù>@ò â>€ô ôÿÿÿî>€ô ðÿÿÿù>€ô ìÿÿÿ?À?àg?€ô ôÿÿÿ?€ô ðÿÿÿ?€ô ìÿÿÿ&?Ày'?à„(?$ŽN„.„Dþ „D D  D ²D ½D ÆD ÏD ØD Ú)?$þ „Z? þ c? þ n?@ÿ w?@ €?@þ ‰?@þ ”?À„•?àã–?$_Nã.ãD ãD” íDËDÌ DÍDÎDÓD— 'D˜ 8D™ ;D› TDœ fD rD› xDœ „D DÓ–—?$ ãÈ?  Ñ?€R@€e@€|@€ª@€½@€Ù@€A@  A€“ ôÿÿÿA€“ ðÿÿÿ"A€“ ìÿÿÿ,AÀí-AàT.A€“ ôÿÿÿ:A€“ ðÿÿÿEA€“ ìÿÿÿOAÀ–PAà¡QA$¾N¡.¡DŸ ¡D¢ §D£ ±D¦ ÂD£ ÄD¦ ÆRA$Ÿ ¡„A Ÿ A Ÿ ˜A Ÿ ¢A@  «A€¶A€ÉA€äA€õA@Ÿ þAÀ¡ÿAàÈB$'NÈ.ÈD¨ ÈD« ×D¬ ÚD­ æD¯ õD­ ýD¯ B$¨ È0B ¨ 9B@ª BB@¨ KBÀÈLBàMB$FN.D° D² D³ *D´ <D¶ GD´ PD¶ YD² bD¶ dNB$° |B ° …B ° B@± ™B@² ¢B@° «B@° ¶BÀ·Bàm¸B$_Nm.mDEmDGwDH‰DI›DJ§DI¬DH®DIºDJÆDIËDG͹B$EmíB EöB€C@E–C$nNÛ.ÛDLÛDOéDPðDRþDSDVDSDV—C$LÛÌC LÕC L àC LêC@MóC@LüC@LDÀÛDà#D$HN#.#DX#D[4D\7D]CD^RD_UD`[DbjD`tDb}D]‡ D$X#;D XDD@ZMD@XVDÀ#WDà’XD$oN’.’Dc’DeDf®DgÀDiËDgÔDiÝDeæDièYD$c’ŠD c“D c žD@d§D@e°D@c¹D@cÄDÀ’ÅDàñÆD$_Nñ.ñD÷ñDûûDB DC DD DG "DJ -DO :DþCDÿTDWDpD‚DŽD”D D¬DO ²ÇD$÷ñ÷D ÷E€€E€“E€«E€ÙE€ìE€ F€4F@÷=F€úôÿÿÿIF€úðÿÿÿTF€úìÿÿÿ^FÀû_Fàp`F€úôÿÿÿlF€úðÿÿÿwF€úìÿÿÿFÀ²‚FགྷF$ÌN½.½D½D ÃD ÍD ÞD àD â„F$½µF ¾F  ÉF ÓF@ÜF@åFÀ½æFàäçF$'Nä.äDäDóDöDDDD"èF$äG G@(G@1GÀä2Gà*3G$FN*.*D*D5DFDXDcDlDuD~D€4G$*aG jG  uG@~G@‡G@G@›GÀ*œGà‰G$_N‰.‰D¤‰D¦˜D§«D©¯Dª»D¬ÁžG$¤‰ÍG ¤ØG ¤ áG ¤êG€¼H€ÏH€ìH@¦õH@¤IÀ‰IàÉI$@NÉ.ÉD®ÉD°ÓD±åD²÷D³D²D± D²D³"D²'D°)I$®É6I ®?I@®HI$nN7.7Dµ7D¸ED¹LD»ZD¼aD¿oD¼vD¿xII$µ7}I µ†I µ ‘I µ›I@¶¤I@µ­I@µ·IÀ7¸Ià¹I$HN.DÁDÄDÅ“DÆŸDÇ®DȱDÉ·DËÆDÉÐDËÙDÆãºI$ÁëI ÁôI@ÃýI@ÁJÀJàîJ$oNî.îDHîDJýDKDMDO  J$Hî9J HDJ H MJ HVJ@J_J@HjJÀîkJà(lJ$:N(.(DQ(DS2DTDDUPDTUDSWDTcDUoDTtmJ$Q(¡J QªJ€VK€iK@QrK$NNv.vDWvDZ|D[†D^—D[™D^›sK$Wv¨K W±K W ¼K WÆK@XÏK@WØKÀvÙKàÚK$'N.D`Dc¬Dd¯De»DgÊDeÒDgÛÛK$` L `L@`L$FNã.ãDíãDðíDÔ D× DØ DÙ Dß Dà Dá Dæ 'Dó2DôCDõFD÷_DøkDæ q L$íãSL í\L@íeL€ïôÿÿÿqL€ïðÿÿÿ|L€ïìÿÿÿ†LÀí‡Là_ˆL€ïôÿÿÿ”L€ïðÿÿÿŸL€ïìÿÿÿ©LÀqªLà|«L$™N|.|Dù|Dû‡Dü˜DýªDÿµDý¾DÿÇDûÐDÿÒ¬L$ù|ÜL ùåL ù ðL@úùL@ûM@ù M@ùMÀ|MàÛM$_NÛMÛ.ÛD—ÛD˜ðD™÷DšþDœD  D¡DÐ6DÑEDÒZDÔrDzD£‰D¦‹D«D±¡D²©DдDÑ¿D·ÊDºÕD¿ãD¨D»D¼DÍ DÔ0D8D·H&M$—Û9M —äÿÿÿEM@—RM@—\M$|NW]MW.WDGWDPgqMØDQxDR€DSŠDT’MÌDU£DV«DW¹DXÁDYÒDZÚŠMÔDj5Dk9Dq_DreDsnD{xDuDvDw°Dx¿DyÔDzéD{DxDuDw+Dy6DvADYO˜M$GW²M@GÂM€HÔÿÿÿÓM@IæM€JØÿÿÿ÷M@K N€LÜÿÿÿN€Màÿÿÿ-N€Näÿÿÿ>N€QN€dN€‚N€¡N€'P€•R€¨R€¹R€ÌR€ëR€S€&S€BS€UU€ U€³U€ÆU€ÙU€÷U€V€,V€"W€5WÀW6Wàb7W$ Nb.bDÏbDÔsDÕyDØ|8WÜDî§Dñ´DòÂDôÖDÙàDÝòDåöDñDÞ Dß1DåNAW$ÏbzW ÏŽW Ï ŸW@вW@ÑÁW@ÓÐW@ÏáWÀbâWàkãW$ NkäW„.kD²kD·yDÌ¥D¸¯D¹µDºÐD»êD¼õD½ DÊ DÌ) D»3 D¹> DÇV D½e Dºp Dň D¼ž Dƶ ùW$²k0X ²DX ² VX ²hX@³wX@´†X@µ•X&¶„­X€ÉX@²ÛX@²íXÀkîXàÌ ïX$aNÌ ðXˆ.Ì DuÌ DÚ D¯!D€!D!D„!D…6!DŠE!D‹P!DžT!D¬^!D­i!D¯€!D¬Š!D‹•!D™ž!Dš­!D‹¼!DŒÈ!Dî!DŽ "D+"DB"D‘E"D”H"D•^"D—d"D˜}"D™˜"Dš°"D…Í"D„Û"D©ó"D—#D¥$#D¦2#D§A#D¨P#D¥{#D¦‰#D§”#DŒŸ#D¿#Då#D”$Y$uÌ 8Y uLY u ^Y upY€vÔÿÿÿ€Y@w‘Y@x Y€yØÿÿÿ®Y€zÜÿÿÿ¼Y@{ËY@|ÚY€}àÿÿÿèY&~ˆZ€Z@u.Z@u@ZÀÌ AZà!$BZ$UN!$CZŒ.!$D%!$D./$DW[$D/e$D0k$D3t$D4‹$D9š$D:¥$DG©$DT³$DU¾$DWÕ$DTß$D:ê$DBó$DC%D:%D; %D<?%D=`%D>w%D@z%DA%DB¨%DCÃ%D4à%D3î%DQ&D@&DN0&DO;&DPJ&D;r&D<’&DN¶&DOÄ&XZ$%!$ŠZ %žZ % °Z %ÂZ€&ØÿÿÿÒZ@'ãZ@(òZ€)Üÿÿÿ[€*àÿÿÿ[@+[€,äÿÿÿ+[&-ŒC[€_[@%q[@%ƒ[À!$„[àÒ&…[$±NÒ&.Ò&DZÒ&D^à&D_æ&D`'Da'Db*'Dc8'DpC'DrZ'Dad'Dbm'Dl“'Dc©'D`´'DkÌ'Dm×'D_é'Dk(†[$ZÒ&¼[ ZÐ[@[ß[@\î[@]ý[ÀÒ&þ[à(ÿ[$<N(.(D…(D‹(DŒ"(D((DJ(D‘c(D’r(D«¡(D¬¬(D¯¹(D°Ç(D²Þ(D¯è(D«ó(D‘þ(D’)D“)D”-)D˜A)D I)D¡k)D n)D‡)D¡•)D¢)D¯)DªÇ)D«Ò)Dªß)Dê)D¢*D“*D%*D0*D4*DB*Db*D¡d*D™*Dš’*D ¯*\$…(6\ …J\ … [\@†n\@‡}\@ˆŒ\@‰›\À(œ\@¡§\Àn)¨\à•)©\@¡´\À%*µ\€äÿÿÿ½\À%*¾\àd*¿\àd*À\àÌ*Á\$¾NÌ*Â\.Ì*DõÌ*DûÚ*D+Dü+Dý+Dþ-+Dÿ?+DQ+DW+DZ+D`+Dc+D+Dþ’+Dª+D¸+DÇ+DÔ+Dï+Dýù+D,D!,D.,D9,DQ,×\$õÌ* ] õ ] õ 2] õD]@öS]€÷äÿÿÿa]@øp]@ù]&ú—]€³]@õÅ]@õ×]ÀÌ*Ø]àn,Ù]$¢Nn,Ú]”.n,DÐn,DÖ|,Dò¨,Dײ,Dظ,DÙÏ,DÚá,DÛó,DÜù,DÝü,DÞ-Dá-Dâ!-DÙ4-DêL-DëZ-Díi-Dðv-Dò‘-DØ›-Dêµ-DâÃ-DëÐ-DáÛ-Dìó-ï]$Ðn,#^ Ð7^ Ð I^ Ð[^@Ñj^€Òäÿÿÿx^@Ó‡^@Ô–^&Õ”®^€Ê^@ÐÜ^@Ðî^Àn,ï^à.ð^$¢N...Dµ.D¹.Dº$.D»:.D¼@.D½C.D¾[.DËh.DÍ.D¾‰.D½”.DƬ.DÈ·.DºÆ.DÆà.ñ^$µ.$_ µ8_@¶G_@·V_@¸e_À.f_àë.g_$ÛNë.h_˜.ë.Dvë.D|ù.Dš%/D}//D~5/DL/D€^/Dp/D‚y/Dƒ|/D„‚/D……/D†‹/D‰Ž/DŠª/D½/D’Õ/D“ã/D•ò/D˜ÿ/Dš0D~$0D’>0DŠL0D“Y0D‰d0D”|0}_$vë.µ_ vÉ_ v Û_ ví_@wü_€xäÿÿÿ `@y`@z(`&{˜@`€\`@vn`@v€`Àë.`à™0‚`$®N™0ƒ`œ.™0DO™0DU§0DsÓ0DVÝ0DWã0DXú0DY 1DZ1D['1D\*1D]01D^31D_91Db<1DcX1DXk1Dkƒ1Dl‘1Dn 1Dq­1DsÈ1DWÒ1Dkì1Dcú1Dl2Db2Dm*2˜`$O™0Ï` Oã` O õ` Oa@Pa€Qäÿÿÿ$a@R3a@SBa&TœZa€va@Oˆa@OšaÀ™0›aàG2œa$®NG2aPÿ.G2D8G2D:X2D;k2D=s2D>2DØ…2DÜŒ2DÝÈ2DÞË2DßÑ2DÝ2Då2Dâ3Dã3Dä$3Dç*3Dè33DéE3DìN3Dôc3Dõn3D?|3DC€3D@Š3DC›3Dõ¥3D?±3Dô·3DõÀ3DèÐ3Dãá3Däí3Dçó3Dèü3D 4DßH4Dñ`4Du4D@‘4²a$8G2âa 8ía 8 öa 8ÿa@:b@8bÀG2b€Øäÿÿÿ*b€Ùàÿÿÿ>b@ÚMbÀ…2Nb€ßÔÿÿÿ[bÀÝ2\bà3]bà|3^b€Øäÿÿÿtb€Ùàÿÿÿˆb@Ú—bÀ¥3˜bà±3™b€Øäÿÿÿ¯b€ÙàÿÿÿÃb@ÚÒbÀ·3Ób€ßÔÿÿÿàbÀ4ábàH4âb€ßÔÿÿÿïbÀu4ðbà‘4ñbà‘4òbà¡4ób$ZN¡4.¡4D*¡4D/¯4D0µ4D1Ì4D2Þ4D3ð4D4ù4D5ü4D65D75D8 5D;5D<*5D1=5DDU5DEc5DGr5DJ5DL–5DD 5DE¬5D<½5D;Ê5DFâ5D0û5ôb$*¡4*c *>c@+Mc€,äÿÿÿ[c@-jc@.ycÀ¡4zcà6{c$wN6.6DÏ6D×&6DØ,6DÙ26DÜ>6DÝ`6DÞy6D߈6D ·6D Æ6D Ó6D á6D ï6D 7D 7D 7DÞ&7Dß/7DàF7DáU7Dåi7Dðq7Dñ7Dò¥7Dó«7Dô®7Dö±7D÷Í7DøÜ7Dýî7D ù7DÝ8D 8DÜ<8DñY8Dàs8Dð8Dæž8Dç­8DøÊ8D÷Ø8Döæ8|c$Ï6±c ÏÅc Ï Öc@Ðéc€Ñäÿÿÿüc€d@Ód@Ô-d@Õd$ëN9?d .9Dú 9D 9D= =9D G9D M9D V9D Y9D p9D ‚9D 9D, ‘9D9 ›9D: ©9D; ´9D= Ï9D9 Ù9D: â9D ø9D :D :D! :D" ;:D# Q:D$ W:D% Z:D& q:D' €:D( :D ¡:D ±:D Ã:D Ù:D ß:D â:D å:D ;D ;D& 9;D' B;D( Z;D z;D ˆ;D6 £;D µ;D Ò;D3 ê;D4 ù;D <D! 5<D" U<D% o<D3 Œ<Td$ú 9„d ú ˜d ú ªd ú ¼d€û ÔÿÿÿÌd€ü Øÿÿÿßd@ý ðd@þ ÿd€ÿ Üÿÿÿ e€ àÿÿÿe@ *e€ äÿÿÿ8e&  Pe€le@ú ~e@ú eÀ9‘eàš<’e$—Nš<“e¤.š<DP š<DV ¨<Dr Ô<DW Þ<DX ä<DY û<DZ =D[ =D\ %=D] (=D^ .=Da 1=Db M=DY `=Dj x=Dk †=Dm •=Dp ¢=Dr ½=DX Ç=Dj á=Db ï=Dk ü=Da >Dl >¨e$P š<Üe P ðe P f P f@Q #f€R äÿÿÿ1f@S @f@T Of&U ¤gf€ƒf@P •f@P §fÀš<¨fà<>©f$¢N<>ªf¨.<>D+ <>D1 J>DM v>D2 €>D3 †>D4 >D5 ¯>D6 Á>D7 Ç>D8 Ê>D9 Ð>D< Ó>D= ï>D4 ?DE ?DF (?DH 7?DK D?DM _?D3 i?DE ƒ?D= ‘?DF ž?D< ©?DG Á?¿f$+ <>òf + g + g + *g@, 9g€- äÿÿÿGg@. Vg@/ eg&0 ¨}g€™g@+ «g@+ ½gÀ<>¾gàÞ?¿g$¢NÞ?.Þ?D Þ?D ì?D ò?D @D @D @D )@D& 6@D( M@D W@D b@D! z@D# …@D ”@D! ®@Àg$ Þ?òg  h@ h@ $h@ 3hÀÞ?4hà¹@5h$ÛN¹@.¹@DK ¹@DU Ç@DV Í@DW Ö@D[ ð@D^ ô@D_ AD` ADa ADb $ADc BADd QADe \ADf kAD ŒAD œAD‘ §AD“ ¾ADW ÈAD ëADl öADo BDp BDu 3BDv FBDƒ NBDc `BDe nBDb |BDŠ ¤BD‹ ¯BDŒ ÎBDŠ óBDv þBD~ CD CDv %CDw 5CDx UCDy pCDz †CD| ‰CD} ¢CD ÂCD~ ÐCDp ÞCDo ìCD‹ DDw DDx CDDŠ ]DDy hDD| ‹D6h$K ¹@nh K ‚h K •h€M Ðÿÿÿ¥h€N Ôÿÿÿºh€Ëh€O ØÿÿÿÛh@P êh€Q Üÿÿÿøh€R àÿÿÿi@S i@T $i@K 7iÀ¹@8ià¥D9i$ìN¥D:i\ÿ.¥DD¤ ¥DD¥ ¶DD¬ ½DDÏ ðDD­ úDD® ýDD± ED´ EDÉ €ÿZo€vo@1ˆo@1šoÀÐM›o€gÀÿÿÿªoÀYP«oà÷P¬o€gÀÿÿÿ»oÀrQ¼oàèQ½o€gÀÿÿÿÌoÀØSÍoà$TÎoàSUÏo$ƒNSUÐoŒÿ.SUD4SUD5`UD6gUD:nUDP¨UD;±UD<·UD?½UDBáUDCóUDDVDF#VDM.VDNt@Mt€ŽÈÿÿÿ[t€Ìÿÿÿit€Ðÿÿÿwt€‘Ôÿÿÿ…t&’¸ÿt€¹t@ˆËt@ˆÝtÀ,[ÞtàL`ßt$ NL`àtÀÿ.L`D8L`D9Z`D:a`DDh`D„¢`DE¬`DF²`DG¸`DJÁ`DåÊ`õtÐDæä`Dëì`Dìú`DðaDñaDóaDô#aDö+aDùVaDúeaDûtaDJaDK˜aDP­aDQÌaDRæaDSõaDTýaDUbDVbDW!bDX?bDYNbDZYbD[hbDJ…bD}£bD€°bD»bD‚ÉbD„çbDìñbDcD€cDúcDP+cDKKcDûYcDñgcDùzcD_ˆcDØŽcDÙ¢cD`ªcDaÉcDbëcDcdDddDe7dDfNdDgQdDhWdDl]dDmsdDn‚dD`œdDxÉdDyØdDzëdD{eD|eDnKeDQ_eDô“eDRŸeDx­eD{»eDzÉeDy×eDaåeDXfDZfDW,fDd^fDc‚fDÚfD_¤fDbÄfDeèfDmgDlgþt$8L`7u 8Iu 8 [u 8mu€9äÿÿÿ€u€:àÿÿÿu@;¥u@<´u@=Ãu@>Òu@?áu€@¼ÿÿÿïu€AÀÿÿÿýu€BÄÿÿÿ v&CÀÿ#v€?v@8Qv@8cvÀL`dv€JÈÿÿÿovÀÊ`pv@ß‚v@à”v€âÌÿÿÿ¦v€ãÐÿÿÿ·vÀÊ`¸vàa¹vàaºv€JÈÿÿÿÅvÀñbÆv@ߨv@àêv€âÌÿÿÿüv€ãÐÿÿÿ wÀñbwàcwàcw€JÈÿÿÿwÀcw@ß.w@à@w€âÌÿÿÿRw€ãÐÿÿÿcwÀcdwà+cewà+cfw€JÈÿÿÿqwÀYcrw@ß„w@à–w€âÌÿÿÿ¨w€ãÐÿÿÿ¹wÀYcºwàˆc»wàˆc¼w@_ÈwÀŽcÉwàªcÊw€JÈÿÿÿÕwÀ“eÖw@ßèw@àúw€âÌÿÿÿ x€ãÐÿÿÿxÀ“exàŸexàŸe x@_,xÀf-xà¤f.xà>g/x$òN>g0xÌÿ.>gD>gDLgDSgD4†gDgD–gDØœgDÙ°gD¸gD ÊgD!ÐgD"ÖgD#égD$øgD2hD4$hD.hD,FhD-QhD/`hD$ohD#zhD,ˆhD-“hDÚžhD²hEx$>g{x x  Ÿx ±x€äÿÿÿÄx@Óx@âx@ñx€Ôÿÿÿÿx&Ìÿy€3y@Ey@WyÀ>gXy@dyÀœgeyà¸gfy@ryÀžhsyà²htyàÌhuy$ŽNÌhvyÔÿ.ÌhDfÌhDgÚhDráhDÂiDsiDt$iDw-iDxLiDykiDzˆiD{—iD|­iD}¿iD~ÑiDìiD€÷iDjD‚jDŠ jDØ&jDÙ;jD‹CjDŒbjD~jDŽjD¬jDÉjD‘ØjD’÷jD“kD”#kD•2kD–RkD—qkD˜ƒkD™œkDšŸkD›¥kDŸ¨kD ÁkD¡ÓkD¢åkD§úkD¨lD©0lDªJlD«alD¬ulD­™lD°°lDx½lD·ólD¸mD¹mDº.mD»GmD¼`mD¿pmDÀ{mD™mDw£mD¿ÆmD¸ÑmD·ßmD»ímD¹ûmDº nDƒnD„(nDNnD€\nDzjnD{xnDy®nD|ânD~ðnD‹+oDŽ_oD·…oD“oDŒ¡oDÚÕoDŠéoD‘pD3pD–ApD^pD”‹pD“™pD’§pD˜ÍpD—ópD§qD¢!qD¡/qD =qD¨KqDŸkqD©˜qD¬Áq‹y$fÌhÅy f×y f éy fûy€gäÿÿÿz€hÈÿÿÿ'z@i6z@jEz@kTz€lÌÿÿÿbz@msz€nàÿÿÿz€oÐÿÿÿz€pÔÿÿÿz&qÔÿµz€Ñz@fãz@fõzÀÌhöz@Š{À&j{àCj{@Š{ÀÕo{àéo{àïq{$# Nïq{Üÿ.ïqD% ïqD& ýqD, r){€D- r3{„D. rD/ YrD0 _rD1 erD2 krD3 qrDzrD‚rD6 ¨rD7 «rD8 ÀrD; ÉrDH ûrDK sDL sDM 'sDN 5sDP OsD. YsDP ^sDM hsDL vsDK „sD7 ’sD8 ¡sD; ªsD ÆsD3 ûsDtD< 4tD? :tD@ mtDC st={$% ïqs{ % ‡{ % ™{ % «{€& äÿÿÿ½{€' àÿÿÿÕ{€( Üÿÿÿï{@) þ{&+ Üÿ|€2|@% D|@% V|ÀïqW|@3 e|Àzrf|à¨rg|@3 u|ÀÆsv|àûsw|@3 …|Àt†|à4t‡|àtˆ|$’Nt‰|ìÿ.tDS tDT tD] –tž|tD^ Ÿt¨|xD_ ¨t²||D` ±tDa ûtDb uDc uDd uDe uDf uD"uD*uDg MuDVuD^uDk ‰uD{ ’uD| •uD uD€  uD µuD„ ¾uD‡ ÇuDˆ ÍuD‰ ßuD™ ëuD¨ vD« -vD¬ ;vD­ IvD® WvD¯ evD± vD` ‰vD± ŽvD« ˜vD¬ ¡vD­ »vD® ÕvD ôvDf )wD FwDg {wDˆ ˜wD€ ©wDºwD õwDŽ xD xD xD‘ 7xD’ FxD“ QxD” \xDš yxD xDž ²xD¡ ¸xD“ ÆxD‘ ÑxD ßxD¦ ÷xDn yDo yDp 4yDs =yDv FyDw LyDx fy¼|$S tñ| S } S } S )}€T äÿÿÿ<}€O}€U àÿÿÿg}€V Üÿÿÿ}€W Øÿÿÿ•}@X ¤}@Z ³}@[ Â}&\ ìÿÚ}€ö}@S ~@S ~Àt~@f )~@f 4~À"u5~àMu6~@g D~ÀVuE~à‰uF~@f T~@f _~Àôv`~à)wa~@g o~ÀFwp~à{wq~@f ~@f Š~Àºw‹~àÙwŒ~@g š~ÀÙw›~àõwœ~àwy~$öNwy.wyDŠwyDc…yD’‘yD“ÇyD”ÏyD•ÒyD–æyD—îyD'zD-$zD''zD(-zD)DzD+PzD,WzD-_zD'bzD™hzDš~zD›¢zDœ¨zDºzDžÊzDŸîzD ôzD¡{D¢{D£4{D¤:{D¥F{D¦V{D§z{D¨€{D©Œ{Dªœ{D«À{D¬Æ{D­Ò{D®â{D¯|D° |D±"|D²F|DµL|D¶\|DØb|DÙv|D·~|D¸•|Dº›|D»Å|D8Ë|D9Þ|D;æ|D= }D?"}D»6}D¼>}D¿U}DÀ~}DÁ }D·}DÃØ}DÆï}DÇ~DÈ:~DÉQ~DÊr~Dˉ~DÌ­~DÍÁ~DÐØ~DÑè~DÒÿ~DÓDÔDÕ2D88D9ED;MD=kD?ƒDÕ—DÖŸD×¶DØßDÙ€DÚ€DÛ9€DÜP€DÝt€DÞˆ€DៀD⯀Dص€DÙÊ€DãÒ€Däè€Dæî€DçD8D9(D;0D=ND?gDç{Dè†DëšDìÃDíçDîþDï‚Dò3‚Dó\‚Dô€‚Dõ—‚Dö¸‚DùÌ‚Dúõ‚DûƒDü0ƒDýQƒDþeƒDÿŒƒD£ƒDºƒDʃDØЃDÙäƒDìƒD„D „D -„D83„D9@„D;H„D=f„D?„D “„D ž„D µ„DÝ„Dÿ„D…D7…DN…Dv…D˜…D¬…DÐ…Dç…D†D1†DE†Di†D"€†D#¨†D$ʆD%Þ†D&‡D)‡D*A‡D+c‡D,w‡D-›‡D.²‡D/Ù‡D0ð‡D3ˆD4ˆD6!ˆD75ˆD9;ˆD:DˆD=JˆD>^ˆD@dˆDAxˆDE~ˆDF’ˆDH˜ˆDI›ˆDL¡ˆDMµˆž~DZ»ˆDµÈDYÛˆDZáˆDYèˆDšíˆDY‰DZ ‰DY‰Dž‰D¢1‰D¦K‰Dªh‰D®…‰D±¢‰D,¿‰DSÙ‰DTç‰DUö‰DV ŠD*6ŠDTPŠDS[ŠDUlŠD)wŠD%›ŠD#ºŠD"׊DûŠD‹D7‹D[‹Dz‹D—‹D»‹DÚ‹D ÷‹D?ŒD 'ŒDDŒDÚaŒDuŒD’ŒDþ¯ŒDüÕŒDúùŒDùDõ5DóYD.vDÚœD¶°DÉÛDLÿDEŽD@9ŽD6VŽD»sŽD·™ŽDǽŽDÆÚŽDÂþŽDÀ"D¿?D™cDòjDî‰Dì­DëÊD?éDçõDã DÚDDâXDá~DÜ›DÚ¿DØÜD×ùD?‘DÕ$‘DÐA‘¨~$Šwy¹~@‹È~@Œ×~@æ~€ŽØÿÿÿô~@@Àwy@˜Àzàhz @¶,Àb|-à~|.@»:ÀË|;@5M€`€†€ÏÀË|Ðà6}Ñà6}Ò@ÕÞÀ8ß@5ñÀ8òà—óà—ô@â€Àµ€€àÒ€€€çÜÿÿÿ €À€@5 €À!€à{"€à{#€@/€ÀЃ0€àìƒ1€@ =€À3„>€@5P€À3„Q€à“„R€à“„S€€çÜÿÿÿ^€ÀŒ_€@5q€ÀŒr€à'Œs€à'Œt€@€€ÀaŒ€àuŒ‚€@¶Ž€Àœ€à°€@Õœ€Àé€@5¯€Àé°€àõ±€àõ²€@â¾€ÀD¿€àXÀ€@»Ì€À‘Í€@5߀À‘à€à$‘á€à$‘â€à^‘ã€$çN^‘ä€.^‘D“^‘D”l‘D•s‘D–z‘D—‘D¥ˆ‘D0БD¦Ú‘D§à‘D¨æ‘D©ì‘D®ò‘D±û‘D²’D³4’D´:’DµC’D¶Y’D·h’D¸z’D»‰’D¼Ÿ’DÁ´’DÂÖ’DÃó’DÄ“DÉ“DÊ “DË/“DÏ?“DÑP“DÔY“DÕ~“DÖ‘“Dƒ “Dض“DƒÅ“DÜÛ“DŒí“D‘”Dà”Dã!”Dä>”Då]”Dæw”D熔D襔Dé·”DêÕ”Dëä”Dîö”Dï•Dð2•DñD•Dòc•Dôu•Dõ„•Dö•D÷­•DøÏ•Dùè•Dúú•Dû–Dü&–DýE–Dþ_–Dÿn–D–DŸ–D¶–D¼–D¿–Dà–Dò–D—D—D5—DG—DY—D~—DË—DϤ—D Ú—D²ã—D˜D %˜D!E˜D"^˜D#w˜D&„˜D'–˜D(¨˜D)º˜D*ɘD+Û˜D,í˜D-ÿ˜D. ™D0+™D±5™D h™D-t™D,‚™D+“™D*¤™D)²™D(À™D'ΙD&Ü™D"ê™D!ø™DÖšDØšDÜ"šDà0šDæAšDèOšDê]šDëkšDðyšDô‡šDò•šD £šD±šD¿šDÍšDùÛšDûéšDþ÷šD›D›D!›DÊ/›DÄ=›DÃK›D¸Y›D·g›D¶u›DÁƒ›D»›D¼É›D»×›D„ô›DלD„2œDÛ?œDÂsœD~²œDðœDüDï4DOD~^DßxDä²DñÊDÞDøDÕžDÔ8žDébžD畞Dñ²žDïÏžDîìžDöŸDåŸD<ŸDöuŸD’ŸDÿÅŸDñŸù€$“^‘1 “C “ U “g€”äÿÿÿz€•àÿÿÿ“€–Üÿÿÿ«€—ØÿÿÿÀ˜¬ÿÿÿÓ€™°ÿÿÿ쀚´ÿÿÿü@›‚€œ¸ÿÿÿ#‚@2‚@žA‚€Ÿ¼ÿÿÿO‚@ ^‚@¡o‚€£Àÿÿÿ}‚&¤•‚€±‚@“Â@“Õ‚À^‘Ö‚@‹â‚Àí“ã‚à”ä‚@‹ð‚ÀOñ‚àxò‚@‹þ‚ÀñŸÿ‚àÿŸƒàÿŸƒ$¡NÿŸƒÿŸ.ÿŸDÿŸD D D D" D3 D> D'F D(f D)€ D*’ D+¥ D-¾ D.Ë D2Ó D3æ Dƒõ D5 ¡Dƒ¡D93¡DŒB¡D‘W¡D=d¡D@v¡DA’¡DB©¡DCÁ¡DFÍ¡DGê¡DH¢DI¢DL ¢D--¢D.:¢D/B¢D's¢D8‹¢D”¢D­¢D½¢DÖ¢DÞ¢Dcè¢Ddú¢De £Df£Dh2£D3<£DƒE£D„[£D4h£D]‚£D^”£D_§£D5Ò£DƒÛ£D„ñ£D8þ£D]¤D9A¤D=O¤DB`¤Ddn¤Dew¤Dc—¤DH¥¤D³¤D¾¤DܤDå¤Dô¤D^¥D)¥D-¥D+J¥D(X¥D*¥D¦¥D´¥D~Ã¥D<Ý¥D2¦D~"¦DAA¦D@n¦DF›¦DGæD~ë¦D §DN§DQ&§DT.§DNZ§#ƒ$ÿŸLƒ ´ÿÿÿ]ƒ °ÿÿÿvƒ€¼ÿÿÿ†ƒ€Àÿÿÿ™ƒ€Äÿÿÿ©ƒ@ºƒ@ ˃@ ܃€ Èÿÿÿêƒ@ ùƒ€Ìÿÿÿ„ÀÿŸ„@‹„ÀB¡„àd¡„€äÿÿÿ$„€àÿÿÿ2„€Üÿÿÿ?„@J„À”¢K„àè¢L„€äÿÿÿZ„€àÿÿÿh„€Üÿÿÿu„@€„À³¤„ྤ‚„@‹Ž„À´¥„àÝ¥„@‹œ„À §„à§ž„àe§Ÿ„$fNe§ „.e§D„ e§D† u§D‡ ˆ§D‰ §Dlœ§Dm£§Dpª§Dqæ§Dré§Dsï§Dvõ§Dy¨Dz ¨D{¨D~!¨D0¨D€>¨DŽ L¨D€U¨DŽ a¨D‹ j¨DŽ w¨D€¨D€Œ¨Dzœ¨D{¨¨D~®¨DƨD‹ Ú¨µ„$„ e§â„ „ í„ „ ö„ „ ÿ„@† …@„ …Àe§…€lôÿÿÿ$…€mðÿÿÿ<…Àœ§=…àL¨>…€lôÿÿÿN…€mðÿÿÿf…ÀU¨g…àa¨h…€lôÿÿÿx…€mðÿÿÿ…À€¨‘…àÚ¨’…àꨓ…$…Nꨔ… .ê¨Dëê¨Díû¨Dî©Dð©DM#©DN*©DZ1©D[m©D\s©D]y©D_©Db‚©Dc–©Df¤©Dgª©Dh¼©DlÅ©DvЩDwç©D|ö©D~ªDªDƒ$ªD†6ªD‡VªDˆpªD‰‰ªD‹ªDŒ¨ªDºªDŽ̪D|ÛªDbãªDpûªDÁ«DÂ*«DÃC«DÆS«DÇe«DÈt«DɆ«Dʘ«Dñª«Dò®«DõÇ«DŽÒ«D|Û«Dw¬Dƒ!¬DŒ/¬D8¬DÉX¬DÊd¬Dȇ¬DÇ•¬DÆ£¬D±¬DÁ¿¬DgͬDmá¬Dnÿ¬Do­Dp­Dm4­DvL­Dòg­Dv|­D€–­D¿Ó­DÀá­D¿ ®D†®D‡B®Dˆf®D‹ƒ®Do§®Dµ®D“Ç®D”ç®D•¯D–¯Dœ"¯D¨G¯D©g¯D¬s¯D­•¯D®¯¯D¯Á¯D°ݯD±ë¯D²°Dµ °Dž°DŸ!°D£)°D®F°D²T°D°_°D“j°D˜°Dœ¦°D–ͰD•Û°D”é°D¿ ±D­±D 4±D¬h±D¨±D¯¶±D·Ö±Dºä±D·ö±©…$ëê¨Õ… ëà… ë é… ëò…€í¸ÿÿÿú…@ë†Àꨆ€Mäÿÿÿ†€Nàÿÿÿ.†€O¼ÿÿÿ>†€PÀÿÿÿN†@R]†@Sn†@W}†@XŒ†À#©†àª«Ž†€Mäÿÿÿž†€Nàÿÿÿ¶†€O¼ÿÿÿƆ€PÀÿÿÿÖ†@Rå†@Sö†@W‡@X‡ÀÒ«‡àg­‡€Mäÿÿÿ&‡€Nàÿÿÿ>‡€O¼ÿÿÿN‡€PÀÿÿÿ^‡@Rm‡@S~‡@W‡@Xœ‡À|­‡à²ž‡à²Ÿ‡$ N² ‡,.²Dé ²Dê ²Dë %²DË-²DÖ4²D×i²DØl²DÛr²D܆²Dà‘²D홲Dî¹²DïÓ²Dðå²Dñø²Dó³Dô³Dø#³Dù6³DƒE³DûZ³Dür³Dƒ³Dÿ–³D®³DŒ½³D‘Ò³Dß³D÷³D ´D ´Dó´Dô!´Dõ)´Dî6´DÛZ´Dr´D‚´D ´Dì ›´Dí Ÿ´Dð µ´Dí¿´D Ù´Dç´Dùò´DüµDµDµD„-µD~6µDþPµDhµDzµDµDḵDâÖµDãßµDäóµD¶D¶Dï/¶Dñ=¶DðK¶Do¶D~z¶D”¶D³¶D¾¶D̶DÔ¶D·µ‡$é ²å‡ é ð‡ é ù‡ é ˆ@ê  ˆ@é ˆÀ²ˆ€Ëäÿÿÿ'ˆ€ÌÌÿÿÿ7ˆ@ÏFˆ@ÐWˆ€ÒÐÿÿÿeˆ@Ótˆ€ÔÔÿÿÿ‚ˆÀ-²ƒˆ@‹ˆÀ½³ˆàß³‘ˆà›´’ˆ€Ëäÿÿÿ¢ˆ€ÌÌÿÿÿ²ˆ@ÏÁˆ@ÐÒˆ€ÒÐÿÿÿàˆ@ÓÔÔÿÿÿýˆÀ¿´þˆ@‹ ‰Ào¶ ‰à”¶ ‰@‹‰À³¶‰à¾¶‰à ·‰à ·‰$ N ·‰4. ·D ·D ·D& !·D' *·D( f·D) l·D* r·D- x·D. ·D’·D/ £·D0 «·D1 ·D2 Ñ·D. Ý·D/ è·D ë·Dü·D ¸D¸D¸D6 <¸D7 P¸D= R¸DD ]¸DE k¸DF y¸DH “¸D1 ¸D' «¸DH ­¸DE ·¸DD ŸD8 иD6 â¸DA ú¸D/ ¹D0 &¹D@ >¹3‰$ ·j‰  ~‰  ‰  ¢‰€ äÿÿÿ·‰€ àÿÿÿΉ€ ÐÿÿÿÞ‰@! 퉀" Ôÿÿÿû‰@#  Š@$ Š&% 41Š€MŠ@ _Š@ qŠÀ ·rŠ@/ {ŠÀ’·|Šà£·}Š@/ †ŠÀë·‡Š@ŠÀü·‘Šà<¸’Šà<¸“ŠàT¹”Š$HNT¹.T¹Da T¹Di b¹Dj h¹Dl n¹Do q¹Dp t¹Dy …¹D† “¹D« ¡¹D¬ §¹D² ¿¹Dµ ƹDÁ ̹D ׹Dà å¹DÄ ð¹DÆ ºD ºDà ºDÁ 1ºDz <ºD{ [ºD mºD†ºD{ •ºD|  ºD} ¯ºD† ʺD‰ غDŠ íºD‹ »DŒ »D »D »D 5»D‘ G»D’ V»D— X»D£ f»D¤ k»D¬ Ž»D‰ œ»D¾ ´»DÑ»DÜ»Dà»Dï»D¼D{ ¼D¼ 7¼D½ F¼DŠ q¼Dz ‹¼D} «¼D| ¿¼Dq ͼDr Þ¼D¼ þ¼D˜ ½D™ ½Dš $½D› '½Dœ *½D‘ 2½D @½D N½D˜ k½•Š$a T¹ËŠ a ߊ@b óŠ€c Øÿÿÿ‹@d ‹€e Üÿÿÿ'‹@g 6‹€h àÿÿÿD‹ÀT¹E‹@{ P‹ÀmºQ‹à•ºR‹@{ ]‹ÀÑ»^‹€äÿÿÿf‹ÀÑ»g‹à¼h‹à¼i‹àˆ½j‹$4Nˆ½.ˆ½D ˆ½DÊ –½DÍ œ½DÑ ¥½DÚ ¶½Dç ĽD Ò½D ؽD ï½D ö½D ü½D ¾D ¾D ¾D" 7¾D B¾D K¾D a¾DÛ l¾DÜ ‹¾D š¾D³¾DÜ Â¾DÝ Í¾DÞ Ü¾Dç ÷¾Dê ¿Dë &¿D 6¿DO¿Dë ^¿Dì i¿Dí x¿Dó ¿Dÿ ›¿D ¡¿D ¹¿DÊ¿DÔ¿DØ¿Dç¿DÀDÀDÀD%ÀDBÀDÜ IÀD jÀD yÀD ˜ÀDµÀDë ¼ÀDÛ ÖÀDÞ õÀDÝ ÁDê ÁDÒ :ÁDÓ KÁDô mÁDõ „ÁDö ŠÁD÷ ÁDø –ÁDù ™ÁDí ®ÁDì ¼ÁD ÊÁD ÞÁD ìÁDù ÿÁDô Âk‹$ ˆ½ ‹ Â ´‹€Ã ØÿÿÿÄ‹@Ä Õ‹@Å ë‹€Æ Üÿÿÿù‹€È àÿÿÿŒ€É äÿÿÿŒÀˆ½Œ@Ü !ŒÀš¾"Œà¾#Œ@ë .ŒÀ6¿/Œà^¿0Œ@Ü ;ŒÀÊ¿<Œ@EŒÀÊ¿FŒàÀGŒàÀHŒ@ë SŒÀÀTŒ@]ŒÀÀ^ŒàBÀ_ŒàBÀ`Œ@Ü kŒÀBÀlŒ@uŒÀBÀvŒàIÀwŒàIÀxŒ@ë ƒŒÀµÀ„Œ@ŒÀµÀŽŒà¼ÀŒà¼ÀŒà3‘Œ$«N3Â’Œ¬.3ÂDu 3ÂD AÂDÀ mÂD€ wÂD }ÂD‚ †ÂD… ‰ÂD†  ÂD‹ ²ÂDŒ ½ÂD¯ ÁÂD¼ ËÂD½ ÙÂD¾ äÂDÀ ÿÂD¼ ÃD½ ÃDŒ (ÃD7ÃDž EÃDŸ MÃD  \ÃD¡ rÃD¢ uÃD£ {ÃD¥ ~ÃD¦ ”ÃD¨ —ÃD© °ÃDª ÂÃD« ÑÃDŒ àÃD ðÃD ÄD‘ ÄD’ ÄD“ %ÄD• (ÄD– EÄD— WÄD˜ iÄDœ oÄD ÄDž ±ÄD ÀÄDÕÄDàÄDèÄDöÄD— ÅD– $ÅDŸ 2ÅD© @ÅDª IÅD« aÅD† ~ÅD… ŒÅD¹ §ÅD¥ ¹ÅD¶ ÑÅD· ÜÅD¸ óÅD¨ ÆD· /ÆD :ÆD¶ ZÆD• hÆD ‡ÆD ¤ÆDœ ÃÆ§Œ$u 3ÂÖŒ u ꌠu üŒ u €v Ìÿÿÿ€w Ðÿÿÿ1@x B@y Q€z Ôÿÿÿ_€{ Øÿÿÿm€| Üÿÿÿ{@} Š&~ ¬¢€¾@u Ð@u âÀ3Âã@ž îÀ7ÃïàEÃð@ž ûÀÀÄü€àÿÿÿŽÀÕÄŽàÅŽàÅŽàãÆŽ$°NãÆ Ž°.ãÆDà ãÆDÌ ñÆD÷ ÇDÍ 'ÇDÎ -ÇDÑ 6ÇDÒ MÇD× \ÇDØ gÇDç kÇDô uÇDõ €ÇD÷ —ÇDô ¡ÇDØ ¬ÇD¸ÇDÛ ÇÇDÜ ÒÇDÝ áÇDÞ ÷ÇDà ýÇDá ÈDâ (ÈDã 7ÈDØ FÈDÙ VÈDÚ vÈDÛ ˜ÈD §ÈD¼ÈDÆÈDÎÈDÝÈDÜ úÈDá ÉDâ ÉDã )ÉDÒ FÉDÑ TÉDñ lÉDÚ ~ÉDî ÉDï «ÉDð ºÉDî âÉDï ðÉDÙ ûÉDÝ ÊŽ$à ãÆLŽ Ã `Ž Ã rŽ Ã „Ž€Ä Ôÿÿÿ”Ž@Å ¥Ž@Æ ´Ž€Ç ØÿÿÿÂŽ€È ÜÿÿÿÐŽ@É ߎ@Ê îŽ&Ë °€"@à 4@à FÀãÆG@Û RÀ¸ÇSàÇÇT@Û _À§È`@iÀ¼ÈjàúÈkàúÈlà8Êm$UN8Ên´.8ÊD8ÊD§FÊDÛrÊD¨|ÊD©‚ÊD¬‹ÊD­¢ÊD²±ÊD³¼ÊDÊÀÊDØÊÊDÙÕÊDÛìÊDØöÊD³ËD ËD¶ËD·'ËD¸6ËD¹XËD hËDËD¹ËDº›ËD»ªËD¼ÀËD½ÆËDÀÌËDÁãËDÃæËDÄÿËDÅÌDÆ#ÌD³2ÌD´BÌDµbÌD¶ÌD œÌD±ÌD»ÌDÃÌDÒÌDïÌDùÌDÍDÍD·-ÍDº;ÍDÄIÍDÅRÍDÆmÍD­ŠÍD¬˜ÍDÕ°ÍDµÂÍDÑèÍDÒöÍDÓÎDÔÎD¹LÎDÑpÎDÒÎDÃÎDÓ³ÎD´ÁÎD»á΃$8ʶ Ê  Ü Ðÿÿÿþ@Ÿ@ €¡Ôÿÿÿ,€¢Øÿÿÿ:@£I€¤ÜÿÿÿW@¥f&¦´~€š@¬@¾À8Ê¿@¶ÊÀ ËËàËÌ@¹×ÀhËØàËÙ@¶äÀœÌå@îÀ±ÌïàïÌðàïÌñ@¹üÀïÌý@‘ÀïÌ‘à-Í‘à-Í ‘àþÎ ‘$ÆNþÎ ‘¸.þÎDÞþÎDç ÏD8ÏDèBÏDéHÏDìQÏDíhÏDòwÏDó‚ÏD†ÏDÏD›ÏD²ÏD¼ÏDóÇÏDÓÏDöâÏD÷íÏDøüÏDùÐDûÐDü1ÐDýCÐDþRÐDóaÐDôqÐDõ‘ÐDö³ÐD ÂÐD×ÐDáÐDéÐDøÐD÷ÑDü#ÑDý,ÑDþDÑDíaÑDìoÑD ‡ÑDõ™ÑD ¸ÑD ÆÑD ÕÑD ýÑD  ÒDôÒDø6Ò ‘$ÞþÎR‘ Þf‘ Þ x‘ ÞŠ‘€ßÔÿÿÿš‘@à«‘@ẑ€âØÿÿÿÈ‘€ãÜÿÿÿÖ‘@äå‘@åô‘&æ¸ ’€(’@Þ:’@ÞL’ÀþÎM’@öX’ÀÓÏY’àâÏZ’@öe’ÀÂÐf’@o’À×Ðp’àÑq’àÑr’àSÒs’$UNSÒt’¼.SÒDSÒDaÒDIÒD—ÒD ÒD#¦ÒD$½ÒD)ÌÒD*×ÒD9ÛÒDFåÒDGðÒDIÓDFÓD*ÓD(ÓD-7ÓD.BÓD/QÓD0gÓD2mÓD3†ÓD4˜ÓD5§ÓD*¶ÓD+ÆÓD,æÓD-ÔD ÔD-ÔD7ÔD?ÔDNÔD.kÔD3yÔD4‚ÔD5šÔD$·ÔD#ÅÔDCÝÔD,ïÔD@ÕDAÕDB+ÕD@SÕDAaÕD+lÕD/ŒÕ‰’$SÒ½’ Ñ’  ã’ õ’€Ôÿÿÿ“@“@%“€Øÿÿÿ3“€ÜÿÿÿA“@P“@_“&¼w“€““@¥“@·“ÀSÒ¸“@-ÓÀ(ÓÄ“à7ÓÅ“@-ГÀÔÑ“@Ú“À-ÔÛ“àkÔÜ“àkÔÝ“à©ÕÞ“$VN©Õ.©ÕDú©ÕD·ÕD½ÕDÃÕDåÕDþÕD ÖD <ÖD!GÖD$TÖD%bÖD'yÖD$ƒÖD ŽÖD™ÖD¢ÖD¹ÖD ÈÖD ÜÖDäÖD×D  ×D"×D0×D8×DJ×Db×D m×Dz×D…×D¢×D²×DÀ×DË×DÏ×DÝ×Dý×Dÿ×DØD-ØDJØß“$ú©Õ” ú,” ú =”@ûP”@ü_”@ýn”@þ}”À©Õ~”@‰”À ׊”à0׋”@–”ÀÀ×—”€äÿÿÿŸ”ÀÀ× ”àÿס”àÿ×¢”àgØ£”$¾Ngؤ”À.gØDgØD$uØDX¡ØD%«ØD&±ØD)ºØD*ÑØD/àØD0ëØDGïØDUùØDVÙDXÙDU%ÙD00ÙD<ÙD3KÙD4VÙD5eÙD6‡ÙD —ÙD°ÙD6¿ÙD7ÊÙD8ÙÙD9ïÙD:õÙD=ûÙD>ÚD@ÚDA.ÚDB@ÚDCRÚD0aÚD1qÚD2‘ÚD3¼ÚD ËÚDàÚDêÚDòÚDÛDÛD(ÛD0ÛD?ÛD4\ÛD7jÛDAxÛDBÛDCœÛD*¹ÛD)ÇÛDRßÛD2ñÛDNÜDO%ÜDP4ÜDQMÜD6{ÜDNŸÜDO°ÜD@¾ÜDPâÜD1ðÜD8ݹ”$gØé” ý”  • !•€Ðÿÿÿ1•@B•@Q•€Ôÿÿÿ_•€Øÿÿÿm•@ |•€!ÜÿÿÿŠ•@"™•&#À±•€Í•@ß•@ñ•ÀgØò•@3ý•À<Ùþ•àKÙÿ•@6 –À—Ù –à¿Ù –@3–ÀËÚ–@!–ÀàÚ"–àÛ#–àÛ$–@6/–ÀÛ0–@9–ÀÛ:–à\Û;–à\Û<–à-Ý=–$ÆN-Ý>–Ä.-ÝD[-ÝDd;ÝDgÝDeqÝDfwÝDi€ÝDj—ÝDo¦ÝDp±ÝDµÝDŒ¿ÝDÊÝDáÝDŒëÝDpöÝDÞDsÞDtÞDu+ÞDvAÞDxGÞDy`ÞDzrÞD{ÞDpÞDq ÞDrÀÞDsâÞD ñÞDßDßDßD'ßDtDßDyRßDz[ßD{sßDjßDižßD‰¶ßDrÈßD†çßD‡õßDˆàD†,àD‡:àDqEàDueàS–$[-Ý‚– [–– [ ¨– [º–€\ÔÿÿÿÊ–@]Û–@^ê–€_Øÿÿÿø–€`Üÿÿÿ—@a—@b$—&cÄ<—€X—@[j—@[|—À-Ý}—@sˆ—ÀÞ‰—àÞŠ—@s•—ÀñÞ–—@Ÿ—Àß —àDß¡—àDߢ—à‚ࣗ$UN‚गÈ.‚àD’‚àD›àDƼàDœÆàDÌàD ÕàD¡ìàD¦ûàD§áD¶ áDÃáDÄáDÆ6áDÃ@áD§KáDWáDªfáD«qáD¬€áD­–áD¯œáD°µáD±ÇáD²ÖáD§åáD¨õáD©âDª7âD GâD\âDfâDnâD}âD«šâD°¨âD±±âD²ÉâD¡æâD ôâDÀ ãD©ãD½=ãD¾KãD¿ZãD½‚ãD¾ãD¨›ãD¬»ã¹—$’‚àê— ’þ— ’ ˜ ’"˜€“Ôÿÿÿ2˜@”C˜@•R˜€–Øÿÿÿ`˜€—Üÿÿÿn˜@˜}˜@™Œ˜&šÈ¤˜€À˜@’Ò˜@’ä˜À‚àå˜@ªð˜ÀWáñ˜àfáò˜@ªý˜ÀGâþ˜@™À\â™àšâ ™àšâ ™àØã ™$VNØã ™(%Ì™(&Ð*™('Ô>™((ØT™€`™()Üq™€‚™&p³™&‚há™&ƒ`š&„\?š&…Xoš&†d š&‡lК&oþâš&Žþôš&Èþ›&éþ›&‘þ*›&’Jþ<›&“µþN›&”Tþ`›&•›þr›&–bþ…›&—3ÿ˜›&˜¡þ«›&™¾þ¾›&šBþÑ›&›ÿä›&œ7þ÷›&þþ œ&žþœ&Ÿ‰þ0œ& yþCœ&¡jþVœ&¢ƒþiœ&£=þ|œ&¤ûýœ&¥çý¢œ&¦*ÿµœ&§[þÈœ&¨´ýÛœ&©òþîœ&ªlý&«Dý&¬àþ'&­Ïþ:&®ÿM&¯ý`&°Øþs&±¬þ†(³à¦(´ä¾(µèà(¶ìþ(·ðž(¸ô2ž(¹øJž(ºübž(»yž(¼‘ž(½§ž(¾ Àž(¿Øž(Àðž(Á Ÿ(Ÿ(à .Ÿ(Ä$HŸ(Å(^Ÿ(Æ,sŸ(Ç0ŒŸ(È4¥Ÿ(É8¹Ÿ(Ê<П(Ë@æŸ(ÌDüŸ(ÍH (ÎL, (ÏP@ (ÐTU (ÒXg (Ó\y (Ô`‹ (Õd (Öh¯ (×lÁ (ØpÓ &Ú úí (tý (x ¡(|¡€;¡€X¡€t¡€¡€¬¡€È¡€ä¡€¢€¢€8¢€U¢€r¢€Ž¢€ª¢€Ç¢€ã¢€ÿ¢€£€8£€T£€p£€Œ£€¨£€Å£€â£€þ£€¤€7¤€T¤€q¤€Ž¤€ª¤€Æ¤€ã¤€¥€¥€8¥€W¥(€g¥(„w¥(ˆ‡¥( Œ—¥( §¥&Œúꥀ¦&/Hú<¦&08ús¦&’(ú°¦&3úï¦&Sú.§&eøùm§&Åèù¨§&÷Øùâ§&Èù¨&7¸ù[¨&‡¨ù–¨& „ñѨ&£ Pñ ©& ù<©& Àf©&9 €ù’©&F `ù½©&L ˜ç©&¸  ÷ª&Á >ª&í øgª&ú øª&ضª&k öéª&t@«&  ö?«&­€öj«&³”«& ôë&(`ôò«&-€¬&Y õ@¬&fõg¬&lX¬&Í8¿¬&ÑÀè¬&ý€­& X=­&Hf­&i™­&m í&™`ï­&¦8®&¬(D®& ñv®&àð¨®& €Ñ®&8àñü®&EÀñ&¯&K`O¯&ƒtf¯&\Dÿ¯ S ¯¯ ܯ º ° s8° g° ³—° Rư€ã°€±€±€:±€W±€t±€‘±€®±€Ë±€è±€²€"²€?²€[²dØãÁ€üï0Ùàòàö%`õM óq ò™`øÁ ðCgOÂ\hTw6ˆ¶–‚£èwyóþþ#þ0þ>þJþVþlþyþ‘þžþ¬þÆþÖþåþöþþþ0þ@þSþdþyþŒþþ¯þ¼þÐþáþïþÿþ þþ&þ8þFþYþlþƒþ˜þ¦þ·þÉþáþóþþþ+þ=þUþgþvþŠþŸþ´þÐþèþûþ þþ,þ>þLþ\þ³»l©¨‡hžª‰•Ÿ’l›Œrv–ˆx¡”mši¥n ‹Š‘œtjs‚£u“pq¦Ž—…w¤˜†„™~ykz}c§¢|o{ƒ€__dyld_func_lookupdyld_stub_binding_helper__mh_bundle_header_calloc_int_cdict_alloc_cdict_free_cdict_getitem_cdict_qsort_cmp_cgraph_alloc_cgraph_free_cgraph_getitem_calloc_free___i686.get_pc_thunk.bx___pyx_type_4pygr_5cdict_CDictIterator___pyx_type_4pygr_5cdict_CDictionary___pyx_type_4pygr_5cdict_CDictionaryRef___pyx_type_4pygr_5cdict_CGraphDict___pyx_type_4pygr_5cdict_CGraphIterator___pyx_type_4pygr_5cdict_CIntDictionary___pyx_type_4pygr_5cdict_IntTupleArray_initcdict_PyArg_ParseTupleAndKeywords_PyCFunction_NewEx_PyClass_New_PyClass_Type_PyCode_New_PyDict_New_PyDict_SetItemString_PyDict_Type_PyErr_ExceptionMatches_PyErr_Fetch_PyErr_Format_PyErr_NormalizeException_PyErr_Occurred_PyErr_Restore_PyErr_SetObject_PyErr_SetString_PyErr_WriteUnraisable_PyExc_IndexError_PyExc_KeyError_PyExc_MemoryError_PyExc_NameError_PyExc_StopIteration_PyExc_SystemError_PyExc_TypeError_PyExc_ValueError_PyFrame_New_PyImport_AddModule_PyInstance_Type_PyInt_AsLong_PyInt_FromLong_PyIter_Next_PyList_New_PyMethod_New_PyModule_GetDict_PyNumber_Add_PyNumber_Multiply_PyNumber_Subtract_PyObject_CallFunction_PyObject_CallObject_PyObject_Cmp_PyObject_GC_Del_PyObject_GetAttr_PyObject_GetAttrString_PyObject_GetItem_PyObject_GetIter_PyObject_IsInstance_PyObject_IsTrue_PyObject_SetAttr_PyObject_SetAttrString_PyObject_SetItem_PyObject_Size_PySequence_GetItem_PySequence_GetSlice_PyString_FromString_PyString_FromStringAndSize_PyString_InternInPlace_PyThreadState_Get_PyTraceBack_Here_PyTraceBack_Type_PyTuple_New_PyType_IsSubtype_PyType_Ready_Py_InitModule4__Py_NoneStruct_qsort{standard input}int:t1=r1;-2147483648;2147483647;char:t2=r2;0;127;void:t3=3/SourceCache/Csu/Csu-58.1.1/bundle1.s/SourceCache/Csu/Csu-58.1.1///SourceCache/Csu/Csu-58.1.1/bundle1.s/SourceCache/Csu/Csu-58.1.1/bundle1.sdyld_stub_binding_helper:F3dyld__mh_bundle_headerdyld_lazy_symbol_binding_entry_point__dyld_func_lookup:F3dyld_func_lookup_pointer/Users/marek/Desktop/pygr-0.8.1/pygr/cgraph.cgcc2_compiled.:t(0,1)=(0,1)cdict_alloc:F(0,2)n:p(0,3)d:r(0,2):t(0,2)=*(0,4)int:t(0,3)=r(0,3);-2147483648;2147483647;CDict:t(0,4)=(0,5):T(0,5)=s8n:(0,3),0,32;dict:(0,6),32,32;;:t(0,6)=*(0,7)CDictEntry:t(0,7)=(0,8):T(0,8)=s8k:(0,3),0,32;v:(0,3),32,32;;cdict_free:F(0,3)d:p(0,2)d:r(0,2)cdict_qsort_cmp:F(0,3)void_a:p(0,9)void_b:p(0,9)void_a:r(0,9)void_b:r(0,9):t(0,9)=*(0,10):t(0,10)=k(0,1)cdict_getitem:F(0,6)d:p(0,2)k:p(0,3)l:r(0,3)int:t(0,3)mid:r(0,3)r:r(0,3)p:(0,6)d:r(0,2)cgraph_alloc:F(0,11)n:p(0,3)d:r(0,11):t(0,11)=*(0,12)CGraph:t(0,12)=(0,13):T(0,13)=s8n:(0,3),0,32;dict:(0,14),32,32;;:t(0,14)=*(0,15)CGraphEntry:t(0,15)=(0,16):T(0,16)=s8k:(0,3),0,32;v:(0,2),32,32;;cgraph_getitem:F(0,14)d:p(0,11)k:p(0,3)l:r(0,3)mid:r(0,3)r:r(0,3)p:(0,14)d:r(0,11)calloc_int:F(0,17)n:p(0,3)n:r(0,3):t(0,17)=*(0,3)cgraph_free:F(0,3)d:p(0,11)i:r(0,3)d:r(0,2)/Users/marek/Desktop/pygr-0.8.1/pygr/cdict.cgcc2_compiled.:t(0,1)=(0,1)___pyx_tp_dealloc_4pygr_5cdict_IntTupleArray___pyx_tp_as_number_IntTupleArray___pyx_tp_as_sequence_IntTupleArray___pyx_tp_as_mapping_IntTupleArray___pyx_tp_as_buffer_IntTupleArray___pyx_methods_4pygr_5cdict_IntTupleArray___pyx_members_4pygr_5cdict_IntTupleArray___pyx_tp_new_4pygr_5cdict_IntTupleArray___pyx_f_4pygr_5cdict_13IntTupleArray_set_vector___pyx_doc_4pygr_5cdict_13IntTupleArray_set_vector___pyx_f_4pygr_5cdict_13IntTupleArray_realloc___pyx_doc_4pygr_5cdict_13IntTupleArray_realloc___pyx_f_4pygr_5cdict_13IntTupleArray___len_____pyx_f_4pygr_5cdict_13IntTupleArray___getitem_____pyx_sq_item_4pygr_5cdict_IntTupleArray___pyx_tp_dealloc_4pygr_5cdict_CGraphIterator___pyx_tp_as_number_CGraphIterator___pyx_tp_as_sequence_CGraphIterator___pyx_tp_as_mapping_CGraphIterator___pyx_tp_as_buffer_CGraphIterator___pyx_tp_traverse_4pygr_5cdict_CGraphIterator___pyx_tp_clear_4pygr_5cdict_CGraphIterator___pyx_f_4pygr_5cdict_14CGraphIterator___iter_____pyx_f_4pygr_5cdict_14CGraphIterator___next_____pyx_methods_4pygr_5cdict_CGraphIterator___pyx_f_4pygr_5cdict_14CGraphIterator___init_____pyx_tp_new_4pygr_5cdict_CGraphIterator___pyx_tp_dealloc_4pygr_5cdict_CDictIterator___pyx_tp_as_number_CDictIterator___pyx_tp_as_sequence_CDictIterator___pyx_tp_as_mapping_CDictIterator___pyx_tp_as_buffer_CDictIterator___pyx_tp_traverse_4pygr_5cdict_CDictIterator___pyx_tp_clear_4pygr_5cdict_CDictIterator___pyx_f_4pygr_5cdict_13CDictIterator___iter_____pyx_f_4pygr_5cdict_13CDictIterator___next_____pyx_methods_4pygr_5cdict_CDictIterator___pyx_f_4pygr_5cdict_13CDictIterator___init_____pyx_tp_new_4pygr_5cdict_CDictIterator___pyx_tp_dealloc_4pygr_5cdict_CGraphDict___pyx_tp_as_number_CGraphDict___pyx_tp_as_sequence_CGraphDict___pyx_tp_as_mapping_CGraphDict___pyx_tp_as_buffer_CGraphDict___pyx_tp_traverse_4pygr_5cdict_CGraphDict___pyx_tp_clear_4pygr_5cdict_CGraphDict___pyx_f_4pygr_5cdict_10CGraphDict___iter_____pyx_methods_4pygr_5cdict_CGraphDict___pyx_members_4pygr_5cdict_CGraphDict___pyx_tp_new_4pygr_5cdict_CGraphDict___pyx_f_4pygr_5cdict_10CGraphDict_iteritems___pyx_f_4pygr_5cdict_10CGraphDict_itervalues___pyx_f_4pygr_5cdict_10CGraphDict_items___pyx_f_4pygr_5cdict_10CGraphDict_keys___pyx_f_4pygr_5cdict_10CGraphDict_values___pyx_f_4pygr_5cdict_10CGraphDict___getitem_____pyx_sq_item_4pygr_5cdict_CGraphDict___pyx_tp_dealloc_4pygr_5cdict_CDictionaryRef___pyx_tp_as_number_CDictionaryRef___pyx_tp_as_sequence_CDictionaryRef___pyx_tp_as_mapping_CDictionaryRef___pyx_tp_as_buffer_CDictionaryRef___pyx_tp_traverse_4pygr_5cdict_CDictionaryRef___pyx_tp_clear_4pygr_5cdict_CDictionaryRef___pyx_f_4pygr_5cdict_14CDictionaryRef___iter_____pyx_methods_4pygr_5cdict_CDictionaryRef___pyx_tp_new_4pygr_5cdict_CDictionaryRef___pyx_f_4pygr_5cdict_14CDictionaryRef_iteritems___pyx_f_4pygr_5cdict_14CDictionaryRef_itervalues___pyx_f_4pygr_5cdict_14CDictionaryRef_items___pyx_f_4pygr_5cdict_14CDictionaryRef_keys___pyx_f_4pygr_5cdict_14CDictionaryRef_values___pyx_f_4pygr_5cdict_14CDictionaryRef___getitem_____pyx_sq_item_4pygr_5cdict_CDictionaryRef___pyx_tp_dealloc_4pygr_5cdict_CDictionary___pyx_tp_as_number_CDictionary___pyx_tp_as_sequence_CDictionary___pyx_tp_as_mapping_CDictionary___pyx_tp_as_buffer_CDictionary___pyx_tp_traverse_4pygr_5cdict_CDictionary___pyx_tp_clear_4pygr_5cdict_CDictionary___pyx_f_4pygr_5cdict_11CDictionary___iter_____pyx_methods_4pygr_5cdict_CDictionary___pyx_tp_new_4pygr_5cdict_CDictionary___pyx_f_4pygr_5cdict_11CDictionary_iteritems___pyx_f_4pygr_5cdict_11CDictionary_itervalues___pyx_f_4pygr_5cdict_11CDictionary_items___pyx_f_4pygr_5cdict_11CDictionary_keys___pyx_f_4pygr_5cdict_11CDictionary_values___pyx_f_4pygr_5cdict_11CDictionary___getitem_____pyx_sq_item_4pygr_5cdict_CDictionary___pyx_tp_dealloc_4pygr_5cdict_CIntDictionary___pyx_tp_as_number_CIntDictionary___pyx_tp_as_sequence_CIntDictionary___pyx_tp_as_mapping_CIntDictionary___pyx_tp_as_buffer_CIntDictionary___pyx_f_4pygr_5cdict_14CIntDictionary___iter_____pyx_methods_4pygr_5cdict_CIntDictionary___pyx_tp_new_4pygr_5cdict_CIntDictionary___pyx_f_4pygr_5cdict_14CIntDictionary_keys___pyx_f_4pygr_5cdict_14CIntDictionary_items___pyx_f_4pygr_5cdict_14CIntDictionary_iteritems___pyx_f_4pygr_5cdict_14CIntDictionary___getitem_____pyx_sq_item_4pygr_5cdict_CIntDictionary___pyx_ptype_4pygr_5cdict_CDictIterator___pyx_ptype_4pygr_5cdict_CGraphDict___pyx_ptype_4pygr_5cdict_CDictionaryRef___pyx_ptype_4pygr_5cdict_CGraphIterator___pyx_ptype_4pygr_5cdict_CDictionary___pyx_mdef_4pygr_5cdict_14QueryMatchList_get_more___pyx_f_4pygr_5cdict_14QueryMatchList_get_more___pyx_mdef_4pygr_5cdict_14QueryMatchList___getitem_____pyx_f_4pygr_5cdict_14QueryMatchList___getitem_____pyx_mdef_4pygr_5cdict_14QueryMatchList___iter_____pyx_f_4pygr_5cdict_14QueryMatchList___iter_____pyx_mdef_4pygr_5cdict_14QueryMatchList___len_____pyx_f_4pygr_5cdict_14QueryMatchList___len_____pyx_mdef_4pygr_5cdict_14QueryMatchList___init_____pyx_f_4pygr_5cdict_14QueryMatchList___init_____pyx_mdef_4pygr_5cdict_18QueryMatchIterator___next_____pyx_f_4pygr_5cdict_18QueryMatchIterator___next_____pyx_mdef_4pygr_5cdict_18QueryMatchIterator___iter_____pyx_f_4pygr_5cdict_18QueryMatchIterator___iter_____pyx_mdef_4pygr_5cdict_18QueryMatchIterator___init_____pyx_f_4pygr_5cdict_18QueryMatchIterator___init_____pyx_mdef_4pygr_5cdict_16CGraphQueryMatch___init_____pyx_f_4pygr_5cdict_16CGraphQueryMatch___init_____pyx_mdef_4pygr_5cdict_8KeyIndex___getitem_____pyx_f_4pygr_5cdict_8KeyIndex___getitem_____pyx_doc_4pygr_5cdict_8KeyIndex___getitem_____pyx_mdef_4pygr_5cdict_8KeyIndex___init_____pyx_f_4pygr_5cdict_8KeyIndex___init_____pyx_ptype_4pygr_5cdict_IntTupleArray___pyx_ptype_4pygr_5cdict_CIntDictionary___pyx_string_tab___pyx_n_CGraphQueryMatch___pyx_k11___pyx_n_KeyIndex___pyx_k26___pyx_n_QueryMatchIterator___pyx_k15___pyx_n_QueryMatchList___pyx_k34___pyx_n_SliceType___pyx_k17___pyx_n___getitem_____pyx_k29___pyx_n___init_____pyx_k4___pyx_n___iter_____pyx_k32___pyx_n___len_____pyx_k36___pyx_n___next_____pyx_k33___pyx_n_append___pyx_k3___pyx_n_dataGraph___pyx_k13___pyx_n_fromNode___pyx_k7___pyx_n_get_more___pyx_k37___pyx_n_gqcompiler___pyx_k12___pyx_n_gqi___pyx_k5___pyx_n_i___pyx_k9___pyx_n_index_keys___pyx_k2___pyx_n_isDone___pyx_k19___pyx_n_items___pyx_k22___pyx_n_iteritems___pyx_k20___pyx_n_key_index___pyx_k1___pyx_n_keys___pyx_k21___pyx_n_matches___pyx_k10___pyx_n_object___pyx_k27___pyx_n_qmlist___pyx_k8___pyx_n_queryNode___pyx_k6___pyx_n_query_f___pyx_k14___pyx_n_sort___pyx_k23___pyx_n_types___pyx_k16___pyx_k18p___pyx_k18___pyx_k24p___pyx_k24___pyx_k25p___pyx_k25___pyx_k28p___pyx_k28___pyx_k30p___pyx_k30___pyx_k31p___pyx_k31___pyx_k35p___pyx_k35___pyx_methods___pyx_filenames___pyx_argnames.7492__pyx_f_4pygr_5cdict_18QueryMatchIterator___iter__:f(0,2)__pyx_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_self:(0,2)__pyx_r:r(0,2)__pyx_argnames:V(0,3)void:t(0,1):t(0,2)=*(0,4):t(0,3)=ar(0,5);0;1;(0,6)PyObject:t(0,4)=(0,7)long unsigned int:t(0,5)=r(0,5);0;037777777777;:t(0,6)=*(0,8)_object:T(0,7)=s8ob_refcnt:(0,9),0,32;ob_type:(0,10),32,32;;char:t(0,8)=r(0,8);0;127;int:t(0,9)=r(0,9);-2147483648;2147483647;:t(0,10)=*(0,11)_typeobject:T(0,11)=s192ob_refcnt:(0,9),0,32;ob_type:(0,10),32,32;ob_size:(0,9),64,32;tp_name:(0,6),96,32;tp_basicsize:(0,9),128,32;tp_itemsize:(0,9),160,32;tp_dealloc:(0,12),192,32;tp_print:(0,14),224,32;tp_getattr:(0,16),256,32;tp_setattr:(0,18),288,32;tp_compare:(0,20),320,32;tp_repr:(0,22),352,32;tp_as_number:(0,24),384,32;tp_as_sequence:(0,25),416,32;tp_as_mapping:(0,26),448,32;tp_hash:(0,27),480,32;tp_call:(0,29),512,32;tp_str:(0,22),544,32;tp_getattro:(0,31),576,32;tp_setattro:(0,33),608,32;tp_as_buffer:(0,35),640,32;tp_flags:(0,36),672,32;tp_doc:(0,6),704,32;tp_traverse:(0,37),736,32;tp_clear:(0,39),768,32;tp_richcompare:(0,41),800,32;tp_weaklistoffset:(0,36),832,32;tp_iter:(0,43),864,32;tp_iternext:(0,44),896,32;tp_methods:(0,45),928,32;tp_members:(0,46),960,32;tp_getset:(0,47),992,32;tp_base:(0,10),1024,32;tp_dict:(0,2),1056,32;tp_descr_get:(0,48),1088,32;tp_descr_set:(0,49),1120,32;tp_dictoffset:(0,36),1152,32;tp_init:(0,50),1184,32;tp_alloc:(0,51),1216,32;tp_new:(0,53),1248,32;tp_free:(0,55),1280,32;tp_is_gc:(0,39),1312,32;tp_bases:(0,2),1344,32;tp_mro:(0,2),1376,32;tp_cache:(0,2),1408,32;tp_subclasses:(0,2),1440,32;tp_weaklist:(0,2),1472,32;tp_del:(0,12),1504,32;;:t(0,13)=*(0,57)destructor:t(0,12)=(0,13):t(0,15)=*(0,58)printfunc:t(0,14)=(0,15):t(0,17)=*(0,59)getattrfunc:t(0,16)=(0,17):t(0,19)=*(0,60)setattrfunc:t(0,18)=(0,19):t(0,21)=*(0,61)cmpfunc:t(0,20)=(0,21):t(0,23)=*(0,62)reprfunc:t(0,22)=(0,23):t(0,24)=*(0,63):t(0,25)=*(0,64):t(0,26)=*(0,65):t(0,28)=*(0,66)hashfunc:t(0,27)=(0,28):t(0,30)=*(0,67)ternaryfunc:t(0,29)=(0,30):t(0,32)=*(0,68)getattrofunc:t(0,31)=(0,32):t(0,34)=*(0,69)setattrofunc:t(0,33)=(0,34):t(0,35)=*(0,70)long int:t(0,36)=r(0,36);-2147483648;2147483647;:t(0,38)=*(0,71)traverseproc:t(0,37)=(0,38):t(0,40)=*(0,72)inquiry:t(0,39)=(0,40):t(0,42)=*(0,73)richcmpfunc:t(0,41)=(0,42)getiterfunc:t(0,43)=(0,23)iternextfunc:t(0,44)=(0,23):t(0,45)=*(0,74):t(0,46)=*(0,75):t(0,47)=*(0,76)descrgetfunc:t(0,48)=(0,30)descrsetfunc:t(0,49)=(0,34)initproc:t(0,50)=(0,34):t(0,52)=*(0,77)allocfunc:t(0,51)=(0,52):t(0,54)=*(0,78)newfunc:t(0,53)=(0,54):t(0,56)=*(0,79)freefunc:t(0,55)=(0,56):t(0,57)=f(0,1):t(0,58)=f(0,9):t(0,59)=f(0,2):t(0,60)=f(0,9):t(0,61)=f(0,9):t(0,62)=f(0,2)PyNumberMethods:t(0,63)=(0,80)PySequenceMethods:t(0,64)=(0,81)PyMappingMethods:t(0,65)=(0,82):t(0,66)=f(0,36):t(0,67)=f(0,2):t(0,68)=f(0,2):t(0,69)=f(0,9)PyBufferProcs:t(0,70)=(0,83):t(0,71)=f(0,9):t(0,72)=f(0,9):t(0,73)=f(0,2)PyMethodDef:T(0,74)=s16ml_name:(0,6),0,32;ml_meth:(0,84),32,32;ml_flags:(0,9),64,32;ml_doc:(0,6),96,32;;PyMemberDef:T(0,75)=s20name:(0,6),0,32;type:(0,9),32,32;offset:(0,9),64,32;flags:(0,9),96,32;doc:(0,6),128,32;;PyGetSetDef:T(0,76)=s20name:(0,6),0,32;get:(0,85),32,32;set:(0,87),64,32;doc:(0,6),96,32;closure:(0,89),128,32;;:t(0,77)=f(0,2):t(0,78)=f(0,2):t(0,79)=f(0,1):T(0,80)=s152nb_add:(0,90),0,32;nb_subtract:(0,90),32,32;nb_multiply:(0,90),64,32;nb_divide:(0,90),96,32;nb_remainder:(0,90),128,32;nb_divmod:(0,90),160,32;nb_power:(0,29),192,32;nb_negative:(0,91),224,32;nb_positive:(0,91),256,32;nb_absolute:(0,91),288,32;nb_nonzero:(0,39),320,32;nb_invert:(0,91),352,32;nb_lshift:(0,90),384,32;nb_rshift:(0,90),416,32;nb_and:(0,90),448,32;nb_xor:(0,90),480,32;nb_or:(0,90),512,32;nb_coerce:(0,92),544,32;nb_int:(0,91),576,32;nb_long:(0,91),608,32;nb_float:(0,91),640,32;nb_oct:(0,91),672,32;nb_hex:(0,91),704,32;nb_inplace_add:(0,90),736,32;nb_inplace_subtract:(0,90),768,32;nb_inplace_multiply:(0,90),800,32;nb_inplace_divide:(0,90),832,32;nb_inplace_remainder:(0,90),864,32;nb_inplace_power:(0,29),896,32;nb_inplace_lshift:(0,90),928,32;nb_inplace_rshift:(0,90),960,32;nb_inplace_and:(0,90),992,32;nb_inplace_xor:(0,90),1024,32;nb_inplace_or:(0,90),1056,32;nb_floor_divide:(0,90),1088,32;nb_true_divide:(0,90),1120,32;nb_inplace_floor_divide:(0,90),1152,32;nb_inplace_true_divide:(0,90),1184,32;;:T(0,81)=s40sq_length:(0,39),0,32;sq_concat:(0,90),32,32;sq_repeat:(0,94),64,32;sq_item:(0,94),96,32;sq_slice:(0,96),128,32;sq_ass_item:(0,98),160,32;sq_ass_slice:(0,100),192,32;sq_contains:(0,102),224,32;sq_inplace_concat:(0,90),256,32;sq_inplace_repeat:(0,94),288,32;;:T(0,82)=s12mp_length:(0,39),0,32;mp_subscript:(0,90),32,32;mp_ass_subscript:(0,103),64,32;;:T(0,83)=s16bf_getreadbuffer:(0,104),0,32;bf_getwritebuffer:(0,106),32,32;bf_getsegcount:(0,107),64,32;bf_getcharbuffer:(0,109),96,32;;PyCFunction:t(0,84)=(0,32):t(0,86)=*(0,111)getter:t(0,85)=(0,86):t(0,88)=*(0,112)setter:t(0,87)=(0,88):t(0,89)=*(0,1)binaryfunc:t(0,90)=(0,32)unaryfunc:t(0,91)=(0,23):t(0,93)=*(0,113)coercion:t(0,92)=(0,93):t(0,95)=*(0,114)intargfunc:t(0,94)=(0,95):t(0,97)=*(0,115)intintargfunc:t(0,96)=(0,97):t(0,99)=*(0,116)intobjargproc:t(0,98)=(0,99):t(0,101)=*(0,117)intintobjargproc:t(0,100)=(0,101)objobjproc:t(0,102)=(0,21)objobjargproc:t(0,103)=(0,34):t(0,105)=*(0,118)getreadbufferproc:t(0,104)=(0,105)getwritebufferproc:t(0,106)=(0,105):t(0,108)=*(0,119)getsegcountproc:t(0,107)=(0,108):t(0,110)=*(0,120)getcharbufferproc:t(0,109)=(0,110):t(0,111)=f(0,2):t(0,112)=f(0,9):t(0,113)=f(0,9):t(0,114)=f(0,2):t(0,115)=f(0,2):t(0,116)=f(0,9):t(0,117)=f(0,9):t(0,118)=f(0,9):t(0,119)=f(0,9):t(0,120)=f(0,9)__pyx_args:r(0,2)__pyx_kwds:r(0,2)__pyx_f_4pygr_5cdict_13CDictIterator___iter__:f(0,2)__pyx_v_self:p(0,2)__pyx_v_self:r(0,2)__pyx_f_4pygr_5cdict_14CGraphIterator___iter__:f(0,2)__pyx_v_self:p(0,2)__pyx_v_self:r(0,2)__pyx_f_4pygr_5cdict_13IntTupleArray___len__:f(0,121)__pyx_v_self:p(0,2)__pyx_r:r(0,121)Py_ssize_t:t(0,121)=(0,9)__pyx_v_self:r(0,2)__pyx_tp_dealloc_4pygr_5cdict_CIntDictionary:f(0,1)o:p(0,2)o:r(0,2)etype:(0,2)eval:(0,2)etb:(0,2)etype:(0,2)eval:(0,2)etb:(0,2)__pyx_sq_item_4pygr_5cdict_CIntDictionary:f(0,2)o:p(0,2)i:p(0,121)r:r(0,2)x:r(0,2)o:r(0,2)i:r(0,121)__pyx_tp_dealloc_4pygr_5cdict_CDictionary:f(0,1)o:p(0,2)__pyx_obj_4pygr_5cdict_CDictionary:T(0,122)=s16ob_refcnt:(0,9),0,32;ob_type:(0,10),32,32;d:(0,123),64,32;key_index:(0,2),96,32;;:t(0,123)=*(0,124)CDict:t(0,124)=(0,125):T(0,125)=s8n:(0,9),0,32;dict:(0,126),32,32;;:t(0,126)=*(0,127)CDictEntry:t(0,127)=(0,128):T(0,128)=s8k:(0,9),0,32;v:(0,9),32,32;;o:r(0,2)etype:(0,2)eval:(0,2)etb:(0,2)etype:(0,2)eval:(0,2)etb:(0,2)__pyx_tp_traverse_4pygr_5cdict_CDictionary:f(0,9)o:p(0,2)v:p(0,129)a:p(0,89)e:r(0,9)int:t(0,9):t(0,130)=*(0,131)visitproc:t(0,129)=(0,130):t(0,131)=f(0,9)o:r(0,2)__pyx_tp_clear_4pygr_5cdict_CDictionary:f(0,9)o:p(0,2)t:r(0,2)o:r(0,2)__pyx_sq_item_4pygr_5cdict_CDictionary:f(0,2)o:p(0,2)i:p(0,121)r:r(0,2)x:r(0,2)o:r(0,2)i:r(0,121)__pyx_tp_dealloc_4pygr_5cdict_CDictionaryRef:f(0,1)o:p(0,2)__pyx_obj_4pygr_5cdict_CDictionaryRef:T(0,132)=s20ob_refcnt:(0,9),0,32;ob_type:(0,10),32,32;d:(0,123),64,32;key_index:(0,2),96,32;graph:(0,2),128,32;;o:r(0,2)__pyx_tp_traverse_4pygr_5cdict_CDictionaryRef:f(0,9)o:p(0,2)v:p(0,129)a:p(0,89)e:r(0,9)o:r(0,2)a:r(0,89)__pyx_tp_clear_4pygr_5cdict_CDictionaryRef:f(0,9)o:p(0,2)t:r(0,2)o:r(0,2)__pyx_sq_item_4pygr_5cdict_CDictionaryRef:f(0,2)o:p(0,2)i:p(0,121)r:r(0,2)x:r(0,2)o:r(0,2)i:r(0,121)__pyx_tp_dealloc_4pygr_5cdict_CGraphDict:f(0,1)o:p(0,2)__pyx_obj_4pygr_5cdict_CGraphDict:T(0,133)=s16ob_refcnt:(0,9),0,32;ob_type:(0,10),32,32;d:(0,134),64,32;key_index:(0,2),96,32;;:t(0,134)=*(0,135)CGraph:t(0,135)=(0,136):T(0,136)=s8n:(0,9),0,32;dict:(0,137),32,32;;:t(0,137)=*(0,138)CGraphEntry:t(0,138)=(0,139):T(0,139)=s8k:(0,9),0,32;v:(0,123),32,32;;o:r(0,2)etype:(0,2)eval:(0,2)etb:(0,2)etype:(0,2)eval:(0,2)etb:(0,2)__pyx_tp_traverse_4pygr_5cdict_CGraphDict:f(0,9)o:p(0,2)v:p(0,129)a:p(0,89)e:r(0,9)o:r(0,2)__pyx_tp_clear_4pygr_5cdict_CGraphDict:f(0,9)o:p(0,2)t:r(0,2)o:r(0,2)__pyx_sq_item_4pygr_5cdict_CGraphDict:f(0,2)o:p(0,2)i:p(0,121)r:r(0,2)x:r(0,2)o:r(0,2)i:r(0,121)__pyx_tp_new_4pygr_5cdict_CDictIterator:f(0,2)t:p(0,140)a:p(0,2)k:p(0,2)__pyx_obj_4pygr_5cdict_CDictIterator:T(0,141)=s32ob_refcnt:(0,9),0,32;ob_type:(0,10),32,32;i:(0,9),64,32;d:(0,123),96,32;cd:(0,2),128,32;yieldKeys:(0,9),160,32;yieldValues:(0,9),192,32;key_index:(0,2),224,32;;:t(0,140)=*(0,142)PyTypeObject:t(0,142)=(0,11)o:r(0,2)t:r(0,140)__pyx_tp_dealloc_4pygr_5cdict_CDictIterator:f(0,1)o:p(0,2)o:r(0,2)__pyx_tp_traverse_4pygr_5cdict_CDictIterator:f(0,9)o:p(0,2)v:p(0,129)a:p(0,89)e:r(0,9)o:r(0,2)a:r(0,89)__pyx_tp_clear_4pygr_5cdict_CDictIterator:f(0,9)o:p(0,2)t:r(0,2)o:r(0,2)__pyx_tp_new_4pygr_5cdict_CGraphIterator:f(0,2)t:p(0,140)a:p(0,2)k:p(0,2)o:r(0,2)t:r(0,140)__pyx_tp_dealloc_4pygr_5cdict_CGraphIterator:f(0,1)o:p(0,2)__pyx_obj_4pygr_5cdict_CGraphIterator:T(0,143)=s24ob_refcnt:(0,9),0,32;ob_type:(0,10),32,32;i:(0,9),64,32;g:(0,144),96,32;yieldKeys:(0,9),128,32;yieldValues:(0,9),160,32;;:t(0,144)=*(0,133)o:r(0,2)__pyx_tp_traverse_4pygr_5cdict_CGraphIterator:f(0,9)o:p(0,2)v:p(0,129)a:p(0,89)e:r(0,9)o:r(0,2)__pyx_tp_clear_4pygr_5cdict_CGraphIterator:f(0,9)o:p(0,2)o:r(0,2)__pyx_tp_dealloc_4pygr_5cdict_IntTupleArray:f(0,1)o:p(0,2)o:r(0,2)etype:(0,2)eval:(0,2)etb:(0,2)etype:(0,2)eval:(0,2)etb:(0,2)__pyx_sq_item_4pygr_5cdict_IntTupleArray:f(0,2)o:p(0,2)i:p(0,121)r:r(0,2)x:r(0,2)o:r(0,2)i:r(0,121)___Pyx_Raise__Pyx_Raise:f(0,1)type:p(0,2)value:P(0,2)tb:P(0,2)___Pyx_AddTraceback___pyx_filename___pyx_m___pyx_lineno__Pyx_AddTraceback:f(0,1)funcname:P(0,6)py_srcfile:(0,2)py_funcname:r(0,2)py_globals:(0,2)empty_tuple:r(0,2)empty_string:(0,2)py_code:(0,145)py_frame:(0,146):t(0,145)=*(0,147):t(0,146)=*(0,148)PyCodeObject:t(0,147)=(0,149)PyFrameObject:t(0,148)=(0,150):T(0,149)=s64ob_refcnt:(0,9),0,32;ob_type:(0,10),32,32;co_argcount:(0,9),64,32;co_nlocals:(0,9),96,32;co_stacksize:(0,9),128,32;co_flags:(0,9),160,32;co_code:(0,2),192,32;co_consts:(0,2),224,32;co_names:(0,2),256,32;co_varnames:(0,2),288,32;co_freevars:(0,2),320,32;co_cellvars:(0,2),352,32;co_filename:(0,2),384,32;co_name:(0,2),416,32;co_firstlineno:(0,9),448,32;co_lnotab:(0,2),480,32;;_frame:T(0,150)=s336ob_refcnt:(0,9),0,32;ob_type:(0,10),32,32;ob_size:(0,9),64,32;f_back:(0,151),96,32;f_code:(0,145),128,32;f_builtins:(0,2),160,32;f_globals:(0,2),192,32;f_locals:(0,2),224,32;f_valuestack:(0,152),256,32;f_stacktop:(0,152),288,32;f_trace:(0,2),320,32;f_exc_type:(0,2),352,32;f_exc_value:(0,2),384,32;f_exc_traceback:(0,2),416,32;f_tstate:(0,153),448,32;f_lasti:(0,9),480,32;f_lineno:(0,9),512,32;f_restricted:(0,9),544,32;f_iblock:(0,9),576,32;f_blockstack:(0,154),608,1920;f_nlocals:(0,9),2528,32;f_ncells:(0,9),2560,32;f_nfreevars:(0,9),2592,32;f_stacksize:(0,9),2624,32;f_localsplus:(0,155),2656,32;;:t(0,151)=*(0,150):t(0,152)=*(0,2):t(0,153)=*(0,156):t(0,154)=ar(0,5);0;19;(0,157):t(0,155)=ar(0,5);0;0;(0,2)PyThreadState:t(0,156)=(0,158)PyTryBlock:t(0,157)=(0,159)_ts:T(0,158)=s84next:(0,160),0,32;interp:(0,161),32,32;frame:(0,151),64,32;recursion_depth:(0,9),96,32;tracing:(0,9),128,32;use_tracing:(0,9),160,32;c_profilefunc:(0,162),192,32;c_tracefunc:(0,162),224,32;c_profileobj:(0,2),256,32;c_traceobj:(0,2),288,32;curexc_type:(0,2),320,32;curexc_value:(0,2),352,32;curexc_traceback:(0,2),384,32;exc_type:(0,2),416,32;exc_value:(0,2),448,32;exc_traceback:(0,2),480,32;dict:(0,2),512,32;tick_counter:(0,9),544,32;gilstate_counter:(0,9),576,32;async_exc:(0,2),608,32;thread_id:(0,36),640,32;;:T(0,159)=s12b_type:(0,9),0,32;b_handler:(0,9),32,32;b_level:(0,9),64,32;;:t(0,160)=*(0,158):t(0,161)=*(0,164):t(0,163)=*(0,165)Py_tracefunc:t(0,162)=(0,163)PyInterpreterState:t(0,164)=(0,166):t(0,165)=f(0,9)_is:T(0,166)=s36next:(0,167),0,32;tstate_head:(0,160),32,32;modules:(0,2),64,32;sysdict:(0,2),96,32;builtins:(0,2),128,32;codec_search_path:(0,2),160,32;codec_search_cache:(0,2),192,32;codec_error_registry:(0,2),224,32;dlopenflags:(0,9),256,32;;:t(0,167)=*(0,166)___pyx_f__pyx_f_4pygr_5cdict_14CIntDictionary___getitem__:f(0,2)__pyx_v_self:p(0,2)__pyx_v_k:p(0,2)__pyx_v_e:r(0,126)__pyx_r:r(0,2)__pyx_2:r(0,2)__pyx_v_k:r(0,2)___pyx_argnames.8182__pyx_f_4pygr_5cdict_14CIntDictionary_iteritems:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_argnames:V(0,168):t(0,168)=ar(0,5);0;0;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.8113__pyx_f_4pygr_5cdict_14CIntDictionary_items:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_i:(0,9)__pyx_v_l:r(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:(0,9)__pyx_3:r(0,2)__pyx_4:r(0,2)__pyx_5:(0,2)__pyx_argnames:V(0,169):t(0,169)=ar(0,5);0;0;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.8015__pyx_f_4pygr_5cdict_14CIntDictionary_keys:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_i:(0,9)__pyx_v_l:r(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:(0,9)__pyx_3:r(0,2)__pyx_4:(0,2)__pyx_argnames:V(0,170):t(0,170)=ar(0,5);0;0;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)__pyx_f_4pygr_5cdict_14CIntDictionary___iter__:f(0,2)__pyx_v_self:p(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_f_4pygr_5cdict_11CDictionary___getitem__:f(0,2)__pyx_v_self:p(0,2)__pyx_v_k:p(0,2)__pyx_v_e:r(0,126)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)i:r(0,121)i:r(0,121)j:(0,2)___pyx_argnames.8527__pyx_f_4pygr_5cdict_11CDictionary_itervalues:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_argnames:V(0,171):t(0,171)=ar(0,5);0;0;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.8481__pyx_f_4pygr_5cdict_11CDictionary_iteritems:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_argnames:V(0,172):t(0,172)=ar(0,5);0;0;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)__pyx_f_4pygr_5cdict_11CDictionary___iter__:f(0,2)__pyx_v_self:p(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)___pyx_argnames.8996__pyx_f_4pygr_5cdict_14CDictionaryRef_itervalues:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_argnames:V(0,173):t(0,173)=ar(0,5);0;0;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.8950__pyx_f_4pygr_5cdict_14CDictionaryRef_iteritems:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_argnames:V(0,174):t(0,174)=ar(0,5);0;0;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.8800__pyx_tp_new_4pygr_5cdict_CDictionaryRef:f(0,2)t:p(0,140)a:p(0,2)k:p(0,2)o:r(0,2)t:r(0,140)__pyx_v_graph:(0,144)__pyx_v_idict:(0,9)__pyx_r:r(0,9)type:(0,140)__pyx_v_graph:(0,144)__pyx_v_idict:(0,9)__pyx_r:r(0,9)__pyx_v_graph:(0,144)__pyx_v_idict:(0,9)__pyx_r:r(0,9)type:(0,140)type:(0,140)__pyx_f_4pygr_5cdict_14CDictionaryRef___iter__:f(0,2)__pyx_v_self:p(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_f_4pygr_5cdict_10CGraphDict___getitem__:f(0,2)__pyx_v_self:p(0,2)__pyx_v_k:p(0,2)__pyx_v_e:r(0,137)__pyx_v_cd:(0,175):t(0,175)=*(0,132)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)___pyx_argnames.9721__pyx_f_4pygr_5cdict_10CGraphDict_values:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_i:(0,9)__pyx_v_cd:(0,175)__pyx_v_l:r(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:(0,9)__pyx_3:r(0,2)__pyx_4:(0,2)__pyx_argnames:V(0,176):t(0,176)=ar(0,5);0;0;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.9518__pyx_f_4pygr_5cdict_10CGraphDict_itervalues:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_argnames:V(0,177):t(0,177)=ar(0,5);0;0;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.9472__pyx_f_4pygr_5cdict_10CGraphDict_iteritems:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_argnames:V(0,178):t(0,178)=ar(0,5);0;0;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)__pyx_f_4pygr_5cdict_10CGraphDict___iter__:f(0,2)__pyx_v_self:p(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_f_4pygr_5cdict_13IntTupleArray___getitem__:f(0,2)__pyx_v_self:p(0,2)__pyx_arg_k:p(0,2)__pyx_v_i:(0,9)__pyx_v_data:(0,179):t(0,179)=*(0,9)__pyx_v_l:(0,2)__pyx_r:r(0,2)__pyx_1:(0,9)__pyx_2:(0,2)__pyx_3:r(0,2)__pyx_4:r(0,2)__pyx_arg_k:r(0,2)___pyx_argnames.10406__pyx_f_4pygr_5cdict_13IntTupleArray_realloc:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_n:(0,2)__pyx_r:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_argnames:V(0,180):t(0,180)=ar(0,5);0;1;(0,6)__pyx_v_self:r(0,2)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.10159___pyx_d6___pyx_d7__pyx_tp_new_4pygr_5cdict_IntTupleArray:f(0,2)t:p(0,140)a:p(0,2)k:p(0,2)o:r(0,2)t:r(0,140)__pyx_v_n:(0,2)__pyx_v_vector_len:(0,2)__pyx_v_dim:(0,2)__pyx_v_skipIndex:(0,2)__pyx_r:r(0,9)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_v_n:(0,2)__pyx_v_vector_len:(0,2)__pyx_v_dim:(0,2)__pyx_v_skipIndex:(0,2)__pyx_r:r(0,9)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_v_n:(0,2)__pyx_v_vector_len:(0,2)__pyx_v_dim:(0,2)__pyx_v_skipIndex:(0,2)__pyx_r:r(0,9)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_v_n:(0,2)__pyx_v_vector_len:(0,2)__pyx_v_dim:(0,2)__pyx_v_skipIndex:(0,2)__pyx_r:r(0,9)__pyx_2:r(0,2)__pyx_3:(0,2)___pyx_argnames.7176__pyx_f_4pygr_5cdict_8KeyIndex___init__:f(0,2)__pyx_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_self:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_argnames:V(0,181):t(0,181)=ar(0,5);0;1;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.7224__pyx_f_4pygr_5cdict_8KeyIndex___getitem__:f(0,2)__pyx_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_self:(0,2)__pyx_v_k:(0,2)__pyx_v_i:r(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:(0,2)__pyx_3:r(0,9)__pyx_4:(0,2)__pyx_5:r(0,2)__pyx_6:r(0,121)__pyx_7:(0,2)__pyx_8:r(0,2)__pyx_argnames:V(0,182):t(0,182)=ar(0,5);0;2;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)tstate:(0,153)tstate:(0,153)tstate:(0,153)___pyx_argnames.7450__pyx_f_4pygr_5cdict_18QueryMatchIterator___init__:f(0,2)__pyx_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_self:(0,2)__pyx_v_qmlist:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_argnames:V(0,183):t(0,183)=ar(0,5);0;2;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.7614__pyx_f_4pygr_5cdict_14QueryMatchList___init__:f(0,2)__pyx_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_self:(0,2)__pyx_v_gqcompiler:(0,2)__pyx_v_matches:(0,2)__pyx_v_dataGraph:(0,2)__pyx_v_query_f:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_argnames:V(0,184):t(0,184)=ar(0,5);0;5;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.7682__pyx_f_4pygr_5cdict_14QueryMatchList___len__:f(0,2)__pyx_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_self:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,121)__pyx_argnames:V(0,185):t(0,185)=ar(0,5);0;1;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.7863__pyx_f_4pygr_5cdict_14QueryMatchList_get_more:f(0,2)__pyx_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_self:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:r(0,9)__pyx_4:(0,2)__pyx_5:(0,2)__pyx_6:(0,2)__pyx_7:(0,2)__pyx_argnames:V(0,186):t(0,186)=ar(0,5);0;1;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.7773___pyx_b__pyx_f_4pygr_5cdict_14QueryMatchList___getitem__:f(0,2)__pyx_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_self:(0,2)__pyx_v_k:(0,2)__pyx_v_types:r(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,9)__pyx_3:r(0,2)__pyx_4:(0,2)__pyx_5:(0,2)__pyx_6:(0,2)__pyx_argnames:V(0,187):t(0,187)=ar(0,5);0;2;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)name:(0,2)__import__:r(0,2)empty_list:r(0,2)global_dict:(0,2)empty_dict:(0,2)name:(0,2)__import__:r(0,2)empty_list:r(0,2)global_dict:(0,2)empty_dict:(0,2)name:(0,2)__import__:r(0,2)empty_list:r(0,2)global_dict:(0,2)empty_dict:(0,2)name:(0,2)__import__:r(0,2)empty_list:r(0,2)global_dict:(0,2)empty_dict:(0,2)name:r(0,2)name:(0,2)__import__:r(0,2)empty_list:r(0,2)global_dict:(0,2)empty_dict:(0,2)name:r(0,2)___pyx_argnames.7720__pyx_f_4pygr_5cdict_14QueryMatchList___iter__:f(0,2)__pyx_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_self:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_argnames:V(0,188):t(0,188)=ar(0,5);0;1;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)name:r(0,2)name:r(0,2)___pyx_argnames.7524__pyx_f_4pygr_5cdict_18QueryMatchIterator___next__:f(0,2)__pyx_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_self:(0,2)__pyx_v_queryMatch:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_4:r(0,121)__pyx_5:(0,9)__pyx_6:(0,2)__pyx_7:(0,2)__pyx_argnames:V(0,189):t(0,189)=ar(0,5);0;1;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)name:r(0,2)name:r(0,2)___pyx_argnames.9998___pyx_d4___pyx_d5__pyx_f_4pygr_5cdict_14CGraphIterator___init__:f(0,9)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_g:(0,144)__pyx_v_yieldKeys:(0,2)__pyx_v_yieldValues:(0,2)__pyx_r:r(0,9)__pyx_argnames:V(0,190):t(0,190)=ar(0,5);0;3;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)type:r(0,140)type:r(0,140)type:r(0,140)___pyx_argnames.9809___pyx_d1___pyx_d2___pyx_d3__pyx_f_4pygr_5cdict_13CDictIterator___init__:f(0,9)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_cd:(0,191):t(0,191)=*(0,122)__pyx_v_yieldKeys:(0,2)__pyx_v_yieldValues:(0,2)__pyx_v_cdr:(0,175)__pyx_r:r(0,9)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_argnames:V(0,192):t(0,192)=ar(0,5);0;4;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)type:r(0,140)obj:r(0,2)type:r(0,140)type:r(0,140)obj:r(0,2)type:r(0,140)type:r(0,140)obj:r(0,2)type:r(0,140)___pyx_d8initcdict:F(0,1)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_4:(0,2)__pyx_5:r(0,2)__pyx_6:r(0,2)t:r(0,193)name:r(0,2)name:r(0,2)py_modname:r(0,2):t(0,193)=*(0,194)__Pyx_StringTabEntry:t(0,194)=(0,195):T(0,195)=s16p:(0,152),0,32;i:(0,9),32,32;s:(0,6),64,32;n:(0,36),96,32;;name:r(0,2)py_modname:r(0,2)name:r(0,2)name:(0,2)py_modname:r(0,2)name:r(0,2)name:r(0,2)py_modname:r(0,2)name:(0,2)py_modname:r(0,2)name:r(0,2)name:r(0,2)name:r(0,2)py_modname:r(0,2)name:r(0,2)name:r(0,2)py_modname:r(0,2)___pyx_argnames.7323__pyx_f_4pygr_5cdict_16CGraphQueryMatch___init__:f(0,2)__pyx_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_self:(0,2)__pyx_v_gqcompiler:(0,2)__pyx_v_dataTuple:(0,2)__pyx_v_dataGraph:(0,2)__pyx_v_i:(0,2)__pyx_v_index_keys:(0,2)__pyx_v_l:(0,2)__pyx_v_node:r(0,2)__pyx_v_edge:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:(0,2)__pyx_3:r(0,2)__pyx_4:r(0,121)__pyx_6:(0,2)__pyx_argnames:V(0,196):t(0,196)=ar(0,5);0;4;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)___pyx_f_4pygr_5cdict_cdict_init__pyx_f_4pygr_5cdict_cdict_init:f(0,123)__pyx_v_d:p(0,2)__pyx_v_key_index:p(0,2)__pyx_v_i:(0,9)__pyx_v_cd:(0,123)__pyx_v_k:(0,2)__pyx_v_v:r(0,2)__pyx_r:r(0,123)__pyx_1:r(0,121)__pyx_3:(0,2)__pyx_4:r(0,2)__pyx_5:(0,2)item:r(0,2)old_exc:(0,2)old_val:(0,2)old_tb:(0,2)ctx:r(0,2)old_exc:(0,2)old_val:(0,2)old_tb:(0,2)ctx:r(0,2)item:r(0,2)item:r(0,2)___pyx_argnames.8356__pyx_tp_new_4pygr_5cdict_CDictionary:f(0,2)t:p(0,140)a:p(0,2)k:p(0,2)o:r(0,2)t:r(0,140)__pyx_v_d:(0,2)__pyx_v_key_index:(0,2)__pyx_v_d:(0,2)__pyx_v_key_index:(0,2)__pyx_v_d:(0,2)__pyx_v_key_index:(0,2)___pyx_argnames.9264__pyx_tp_new_4pygr_5cdict_CGraphDict:f(0,2)t:p(0,140)a:p(0,2)k:p(0,2)o:(0,2)t:r(0,140)__pyx_v_d:(0,2)__pyx_v_key_index:(0,2)__pyx_v_i:(0,9)__pyx_v_l:(0,2)__pyx_r:r(0,9)__pyx_1:r(0,121)__pyx_5:r(0,2)__pyx_6:r(0,2)__pyx_v_d:(0,2)__pyx_v_key_index:(0,2)__pyx_v_i:(0,9)__pyx_v_l:(0,2)__pyx_r:r(0,9)__pyx_1:r(0,121)__pyx_5:r(0,2)__pyx_6:r(0,2)__pyx_v_d:(0,2)__pyx_v_key_index:(0,2)__pyx_v_i:(0,9)__pyx_v_l:(0,2)__pyx_r:r(0,9)__pyx_1:r(0,121)__pyx_5:r(0,2)__pyx_6:r(0,2)___pyx_argnames.7939__pyx_tp_new_4pygr_5cdict_CIntDictionary:f(0,2)t:p(0,140)a:p(0,2)k:p(0,2)o:r(0,2)t:r(0,140)__pyx_v_d:(0,2)__pyx_v_i:(0,9)__pyx_r:r(0,9)__pyx_1:r(0,121)__pyx_3:(0,2)__pyx_4:r(0,2)__pyx_5:(0,2)item:r(0,2)__pyx_v_d:(0,2)__pyx_v_i:(0,9)__pyx_r:r(0,9)__pyx_1:r(0,121)__pyx_3:(0,2)__pyx_4:r(0,2)__pyx_5:(0,2)item:r(0,2)item:r(0,2)___pyx_argnames.10244__pyx_f_4pygr_5cdict_13IntTupleArray_set_vector:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_vector:(0,2)__pyx_v_gotoNext:(0,2)__pyx_v_i:(0,9)__pyx_r:r(0,2)__pyx_1:(0,9)__pyx_2:r(0,2)__pyx_3:r(0,9)__pyx_argnames:V(0,197):t(0,197)=ar(0,5);0;2;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)o:r(0,2)o:r(0,2)j:r(0,2)__pyx_f_4pygr_5cdict_14CGraphIterator___next__:f(0,2)__pyx_v_self:p(0,2)__pyx_v_cd:r(0,175)__pyx_v_k:(0,2)__pyx_v_result:r(0,2)__pyx_r:(0,2)__pyx_2:r(0,2)__pyx_3:(0,2)i:r(0,121)i:r(0,121)j:(0,2)__pyx_f_4pygr_5cdict_13CDictIterator___next__:f(0,2)__pyx_v_self:p(0,2)__pyx_v_k:(0,2)__pyx_v_v:r(0,2)__pyx_v_result:r(0,2)__pyx_r:(0,2)__pyx_2:(0,2)__pyx_3:(0,2)i:r(0,121)i:r(0,121)i:r(0,121)j:r(0,2)i:r(0,121)j:r(0,2)i:r(0,121)j:r(0,2)i:r(0,121)j:r(0,2)___pyx_argnames.9568__pyx_f_4pygr_5cdict_10CGraphDict_items:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_i:(0,9)__pyx_v_cd:(0,175)__pyx_v_l:r(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:(0,9)__pyx_3:(0,2)__pyx_4:r(0,2)__pyx_argnames:V(0,198):t(0,198)=ar(0,5);0;0;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)i:r(0,121)i:r(0,121)j:(0,2)___pyx_argnames.9652__pyx_f_4pygr_5cdict_10CGraphDict_keys:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_i:(0,9)__pyx_v_l:r(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:(0,9)__pyx_3:r(0,2)__pyx_4:r(0,2)__pyx_argnames:V(0,199):t(0,199)=ar(0,5);0;0;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)i:r(0,121)i:r(0,121)j:r(0,2)___pyx_argnames.9046__pyx_f_4pygr_5cdict_14CDictionaryRef_items:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_i:(0,9)__pyx_v_l:r(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:(0,9)__pyx_3:r(0,2)__pyx_4:(0,2)__pyx_5:r(0,2)__pyx_argnames:V(0,200):t(0,200)=ar(0,5);0;0;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)i:r(0,121)i:r(0,121)i:r(0,121)j:r(0,2)i:r(0,121)j:r(0,2)___pyx_argnames.9123__pyx_f_4pygr_5cdict_14CDictionaryRef_keys:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_i:(0,9)__pyx_v_l:r(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:(0,9)__pyx_3:r(0,2)__pyx_4:r(0,2)__pyx_argnames:V(0,201):t(0,201)=ar(0,5);0;0;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)i:r(0,121)i:r(0,121)j:r(0,2)___pyx_argnames.9191__pyx_f_4pygr_5cdict_14CDictionaryRef_values:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_i:(0,9)__pyx_v_l:r(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:(0,9)__pyx_3:r(0,2)__pyx_4:r(0,2)__pyx_argnames:V(0,202):t(0,202)=ar(0,5);0;0;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)i:r(0,121)i:r(0,121)j:r(0,2)__pyx_f_4pygr_5cdict_14CDictionaryRef___getitem__:f(0,2)__pyx_v_self:p(0,2)__pyx_v_k:p(0,2)__pyx_v_e:r(0,126)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)i:r(0,121)i:r(0,121)j:(0,2)___pyx_argnames.8577__pyx_f_4pygr_5cdict_11CDictionary_items:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_i:(0,9)__pyx_v_l:r(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:(0,9)__pyx_3:r(0,2)__pyx_4:(0,2)__pyx_5:r(0,2)__pyx_argnames:V(0,203):t(0,203)=ar(0,5);0;0;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)i:r(0,121)i:r(0,121)i:r(0,121)j:r(0,2)i:r(0,121)j:r(0,2)___pyx_argnames.8654__pyx_f_4pygr_5cdict_11CDictionary_keys:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_i:(0,9)__pyx_v_l:r(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:(0,9)__pyx_3:r(0,2)__pyx_4:r(0,2)__pyx_argnames:V(0,204):t(0,204)=ar(0,5);0;0;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)i:r(0,121)i:r(0,121)j:r(0,2)___pyx_argnames.8722__pyx_f_4pygr_5cdict_11CDictionary_values:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_i:(0,9)__pyx_v_l:r(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:(0,9)__pyx_3:r(0,2)__pyx_4:r(0,2)__pyx_argnames:V(0,205):t(0,205)=ar(0,5);0;0;(0,6)__pyx_args:r(0,2)__pyx_kwds:r(0,2)i:r(0,121)i:r(0,121)j:r(0,2)__pyx_m:S(0,2)__pyx_b:S(0,2)__pyx_lineno:S(0,9)__pyx_filename:S(0,6)char:t(0,8)__pyx_f:S(0,206):t(0,206)=*(0,6)__pyx_ptype_4pygr_5cdict_CIntDictionary:S(0,140)__pyx_ptype_4pygr_5cdict_CDictionary:S(0,140)__pyx_ptype_4pygr_5cdict_CDictionaryRef:S(0,140)__pyx_ptype_4pygr_5cdict_CGraphDict:S(0,140)__pyx_ptype_4pygr_5cdict_CDictIterator:S(0,140)__pyx_ptype_4pygr_5cdict_CGraphIterator:S(0,140)__pyx_ptype_4pygr_5cdict_IntTupleArray:S(0,140)__pyx_k1:S(0,207)__pyx_k2:S(0,208)__pyx_k3:S(0,209)__pyx_k4:S(0,210)__pyx_k5:S(0,211)__pyx_k6:S(0,212)__pyx_k7:S(0,213)__pyx_k8:S(0,214)__pyx_k9:S(0,215)__pyx_k10:S(0,216)__pyx_k11:S(0,217)__pyx_k12:S(0,218)__pyx_k13:S(0,219)__pyx_k14:S(0,220)__pyx_k15:S(0,221)__pyx_k16:S(0,222)__pyx_k17:S(0,223)__pyx_k18:S(0,224)__pyx_k19:S(0,225)__pyx_k20:S(0,226)__pyx_k21:S(0,227)__pyx_k22:S(0,228)__pyx_k23:S(0,229)__pyx_k24:S(0,230)__pyx_k25:S(0,231)__pyx_k26:S(0,232)__pyx_k27:S(0,233)__pyx_k28:S(0,234)__pyx_k29:S(0,235)__pyx_k30:S(0,236)__pyx_k31:S(0,237)__pyx_k32:S(0,238)__pyx_k33:S(0,239)__pyx_k34:S(0,240)__pyx_k35:S(0,241)__pyx_k36:S(0,242)__pyx_k37:S(0,243)__pyx_n_CGraphQueryMatch:S(0,2)__pyx_n_KeyIndex:S(0,2)__pyx_n_QueryMatchIterator:S(0,2)__pyx_n_QueryMatchList:S(0,2)__pyx_n_SliceType:S(0,2)__pyx_n___getitem__:S(0,2)__pyx_n___init__:S(0,2)__pyx_n___iter__:S(0,2)__pyx_n___len__:S(0,2)__pyx_n___next__:S(0,2)__pyx_n_append:S(0,2)__pyx_n_dataGraph:S(0,2)__pyx_n_fromNode:S(0,2)__pyx_n_get_more:S(0,2)__pyx_n_gqcompiler:S(0,2)__pyx_n_gqi:S(0,2)__pyx_n_i:S(0,2)__pyx_n_index_keys:S(0,2)__pyx_n_isDone:S(0,2)__pyx_n_items:S(0,2)__pyx_n_iteritems:S(0,2)__pyx_n_key_index:S(0,2)__pyx_n_keys:S(0,2)__pyx_n_matches:S(0,2)__pyx_n_object:S(0,2)__pyx_n_qmlist:S(0,2)__pyx_n_queryNode:S(0,2)__pyx_n_query_f:S(0,2)__pyx_n_sort:S(0,2)__pyx_n_types:S(0,2)__pyx_k18p:S(0,2)__pyx_k24p:S(0,2)__pyx_k25p:S(0,2)__pyx_k28p:S(0,2)__pyx_k30p:S(0,2)__pyx_k31p:S(0,2)__pyx_k35p:S(0,2)__pyx_string_tab:S(0,244)__pyx_d1:S(0,2)__pyx_d2:S(0,2)__pyx_d3:S(0,175):t(0,207)=ar(0,5);0;9;(0,8):t(0,208)=ar(0,5);0;10;(0,8):t(0,209)=ar(0,5);0;6;(0,8):t(0,210)=ar(0,5);0;8;(0,8):t(0,211)=ar(0,5);0;3;(0,8):t(0,212)=ar(0,5);0;9;(0,8):t(0,213)=ar(0,5);0;8;(0,8):t(0,214)=ar(0,5);0;6;(0,8):t(0,215)=ar(0,5);0;1;(0,8):t(0,216)=ar(0,5);0;7;(0,8):t(0,217)=ar(0,5);0;16;(0,8):t(0,218)=ar(0,5);0;10;(0,8):t(0,219)=ar(0,5);0;9;(0,8):t(0,220)=ar(0,5);0;7;(0,8):t(0,221)=ar(0,5);0;18;(0,8):t(0,222)=ar(0,5);0;5;(0,8):t(0,223)=ar(0,5);0;9;(0,8):t(0,224)=ar(0,5);0;30;(0,8):t(0,225)=ar(0,5);0;6;(0,8):t(0,226)=ar(0,5);0;9;(0,8):t(0,227)=ar(0,5);0;4;(0,8):t(0,228)=ar(0,5);0;5;(0,8):t(0,229)=ar(0,5);0;4;(0,8):t(0,230)=ar(0,5);0;26;(0,8):t(0,231)=ar(0,5);0;19;(0,8):t(0,232)=ar(0,5);0;8;(0,8):t(0,233)=ar(0,5);0;6;(0,8):t(0,234)=ar(0,5);0;50;(0,8):t(0,235)=ar(0,5);0;11;(0,8):t(0,236)=ar(0,5);0;69;(0,8):t(0,237)=ar(0,5);0;36;(0,8):t(0,238)=ar(0,5);0;8;(0,8):t(0,239)=ar(0,5);0;8;(0,8):t(0,240)=ar(0,5);0;14;(0,8):t(0,241)=ar(0,5);0;64;(0,8):t(0,242)=ar(0,5);0;7;(0,8):t(0,243)=ar(0,5);0;8;(0,8):t(0,244)=ar(0,5);0;37;(0,194)__pyx_d4:S(0,2)__pyx_d5:S(0,2)__pyx_d6:S(0,2)__pyx_d7:S(0,2)__pyx_d8:S(0,2)__pyx_mdef_4pygr_5cdict_8KeyIndex___init__:S(0,245)=xsPyMethodDef:PyMethodDef:t(0,245)=(0,74)__pyx_doc_4pygr_5cdict_8KeyIndex___getitem__:S(0,246)__pyx_mdef_4pygr_5cdict_8KeyIndex___getitem__:S(0,245)__pyx_mdef_4pygr_5cdict_16CGraphQueryMatch___init__:S(0,245)__pyx_mdef_4pygr_5cdict_18QueryMatchIterator___init__:S(0,245)__pyx_mdef_4pygr_5cdict_18QueryMatchIterator___iter__:S(0,245)__pyx_mdef_4pygr_5cdict_18QueryMatchIterator___next__:S(0,245)__pyx_mdef_4pygr_5cdict_14QueryMatchList___init__:S(0,245)__pyx_mdef_4pygr_5cdict_14QueryMatchList___len__:S(0,245)__pyx_mdef_4pygr_5cdict_14QueryMatchList___iter__:S(0,245)__pyx_mdef_4pygr_5cdict_14QueryMatchList___getitem__:S(0,245)__pyx_mdef_4pygr_5cdict_14QueryMatchList_get_more:S(0,245)__pyx_doc_4pygr_5cdict_13IntTupleArray_set_vector:S(0,247)__pyx_doc_4pygr_5cdict_13IntTupleArray_realloc:S(0,248)__pyx_methods_4pygr_5cdict_CIntDictionary:S(0,249)__pyx_tp_as_number_CIntDictionary:S(0,63)__pyx_tp_as_sequence_CIntDictionary:S(0,64)__pyx_tp_as_mapping_CIntDictionary:S(0,65)__pyx_tp_as_buffer_CIntDictionary:S(0,70)__pyx_methods_4pygr_5cdict_CDictionary:S(0,250)__pyx_tp_as_number_CDictionary:S(0,63)__pyx_tp_as_sequence_CDictionary:S(0,64)__pyx_tp_as_mapping_CDictionary:S(0,65)__pyx_tp_as_buffer_CDictionary:S(0,70)__pyx_methods_4pygr_5cdict_CDictionaryRef:S(0,251)__pyx_tp_as_number_CDictionaryRef:S(0,63)__pyx_tp_as_sequence_CDictionaryRef:S(0,64)__pyx_tp_as_mapping_CDictionaryRef:S(0,65)__pyx_tp_as_buffer_CDictionaryRef:S(0,70)__pyx_methods_4pygr_5cdict_CGraphDict:S(0,252)__pyx_members_4pygr_5cdict_CGraphDict:S(0,253)__pyx_tp_as_number_CGraphDict:S(0,63)__pyx_tp_as_sequence_CGraphDict:S(0,64)__pyx_tp_as_mapping_CGraphDict:S(0,65)__pyx_tp_as_buffer_CGraphDict:S(0,70)__pyx_methods_4pygr_5cdict_CDictIterator:S(0,254)__pyx_tp_as_number_CDictIterator:S(0,63)__pyx_tp_as_sequence_CDictIterator:S(0,64)__pyx_tp_as_mapping_CDictIterator:S(0,65)__pyx_tp_as_buffer_CDictIterator:S(0,70)__pyx_methods_4pygr_5cdict_CGraphIterator:S(0,255)__pyx_tp_as_number_CGraphIterator:S(0,63)__pyx_tp_as_sequence_CGraphIterator:S(0,64)__pyx_tp_as_mapping_CGraphIterator:S(0,65)__pyx_tp_as_buffer_CGraphIterator:S(0,70)__pyx_methods_4pygr_5cdict_IntTupleArray:S(0,256)__pyx_members_4pygr_5cdict_IntTupleArray:S(0,257)__pyx_tp_as_number_IntTupleArray:S(0,63)__pyx_tp_as_sequence_IntTupleArray:S(0,64)__pyx_tp_as_mapping_IntTupleArray:S(0,65)__pyx_tp_as_buffer_IntTupleArray:S(0,70)__pyx_methods:S(0,258)__pyx_filenames:S(0,259)__pyx_type_4pygr_5cdict_CIntDictionary:G(0,142)__pyx_type_4pygr_5cdict_CDictionary:G(0,142)__pyx_type_4pygr_5cdict_CDictionaryRef:G(0,142)__pyx_type_4pygr_5cdict_CGraphDict:G(0,142)__pyx_type_4pygr_5cdict_CDictIterator:G(0,142)__pyx_type_4pygr_5cdict_CGraphIterator:G(0,142)__pyx_type_4pygr_5cdict_IntTupleArray:G(0,142):t(0,246)=ar(0,5);0;66;(0,8):t(0,247)=ar(0,5);0;57;(0,8):t(0,248)=ar(0,5);0;51;(0,8):t(0,249)=ar(0,5);0;3;(0,74):t(0,250)=ar(0,5);0;5;(0,74):t(0,251)=ar(0,5);0;5;(0,74):t(0,252)=ar(0,5);0;5;(0,74):t(0,253)=ar(0,5);0;1;(0,75):t(0,254)=ar(0,5);0;0;(0,74):t(0,255)=ar(0,5);0;0;(0,74):t(0,256)=ar(0,5);0;2;(0,74):t(0,257)=ar(0,5);0;1;(0,75):t(0,258)=ar(0,5);0;0;(0,74):t(0,259)=ar(0,5);0;0;(0,6)PKd—~;9ôÈ[_[_pygr/classutil.pyimport os import sys import tempfile from weakref import WeakValueDictionary import dbfile import logger class FilePopenBase(object): '''Base class for subprocess.Popen-like class interface that can be supported on Python 2.3 (without subprocess). The main goal is to avoid the pitfalls of Popen.communicate(), which cannot handle more than a small amount of data, and to avoid the possibility of deadlocks and the issue of threading, by using temporary files''' def __init__(self, args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, *largs, **kwargs): '''Mimics the interface of subprocess.Popen() with two additions: - stdinFlag, if passed, gives a flag to add the stdin filename directly to the command line (rather than passing it by redirecting stdin). example: stdinFlag="-i" will add the following to the commandline: -i /path/to/the/file If set to None, the stdin filename is still appended to the commandline, but without a preceding flag argument. -stdoutFlag: exactly the same thing, except for the stdout filename. ''' self.stdin, self._close_stdin = self._get_pipe_file(stdin, 'stdin') self.stdout, self._close_stdout = self._get_pipe_file(stdout, 'stdout') self.stderr, self._close_stderr = self._get_pipe_file(stderr, 'stderr') kwargs = kwargs.copy() # get a copy we can change try: # add as a file argument stdinFlag = kwargs['stdinFlag'] if stdinFlag: args.append(stdinFlag) args.append(self._stdin_path) del kwargs['stdinFlag'] stdin = None except KeyError: # just make it read this stream stdin = self.stdin try: # add as a file argument stdoutFlag = kwargs['stdoutFlag'] if stdoutFlag: args.append(stdoutFlag) args.append(self._stdout_path) del kwargs['stdoutFlag'] stdout = None except KeyError: # make it write to this stream stdout = self.stdout self.args = (args, bufsize, executable, stdin, stdout, self.stderr) + largs self.kwargs = kwargs def _get_pipe_file(self, ifile, attr): 'create a temp filename instead of a PIPE; save the filename' if ifile == PIPE: # use temp file instead! fd, path = tempfile.mkstemp() setattr(self, '_' + attr + '_path', path) return os.fdopen(fd, 'w+b'), True elif ifile is not None: setattr(self, '_' + attr + '_path', ifile.name) return ifile, False def _close_file(self, attr): 'close and delete this temp file if still open' if getattr(self, '_close_' + attr): getattr(self, attr).close() setattr(self, '_close_' + attr, False) os.remove(getattr(self, '_' + attr + '_path')) def _rewind_for_reading(self, ifile): if ifile is not None: ifile.flush() ifile.seek(0) def close(self): """Close any open temp (PIPE) files. """ self._close_file('stdin') self._close_file('stdout') self._close_file('stderr') def __del__(self): self.close() def call_subprocess(*popenargs, **kwargs): 'portable interface to subprocess.call(), even if subprocess not available' p = FilePopen(*popenargs, **kwargs) return p.wait() try: import subprocess PIPE = subprocess.PIPE class FilePopen(FilePopenBase): 'this subclass uses the subprocess module Popen() functionality' def wait(self): self._rewind_for_reading(self.stdin) p = subprocess.Popen(*self.args, **self.kwargs) p.wait() self._close_file('stdin') self._rewind_for_reading(self.stdout) self._rewind_for_reading(self.stderr) return p.returncode except ImportError: CSH_REDIRECT = False # SH style redirection is default import platform if platform.system() == 'Windows': def mkarg(arg): """Very basic quoting of arguments for Windows """ return '"' + arg + '"' else: # UNIX from commands import mkarg try: if os.environ['SHELL'].endswith('csh'): CSH_REDIRECT = True except KeyError: pass badExecutableCode = None class FilePopen(FilePopenBase): 'this subclass fakes subprocess.Popen.wait() using os.system()' def wait(self): self._rewind_for_reading(self.stdin) args = map(mkarg, self.args[0]) if self.args[3]: # redirect stdin args += ['<', mkarg(self._stdin_path)] if self.args[4]: # redirect stdout args += ['>', mkarg(self._stdout_path)] cmd = ' '.join(args) if self.args[5]: # redirect stderr if CSH_REDIRECT: cmd = '(%s) >& %s' % (cmd, mkarg(self._stderr_path)) else: cmd = cmd + ' 2> ' + mkarg(self._stderr_path) returncode = os.system(cmd) self._close_file('stdin') self._rewind_for_reading(self.stdout) self._rewind_for_reading(self.stderr) if badExecutableCode is not None and \ badExecutableCode == returncode: raise OSError('no such command: %s' % str(self.args[0])) return returncode PIPE = id(FilePopen) # an arbitrary code for identifying this code # find out exit code for a bad executable name, silently badExecutableCode = call_subprocess(('aZfDqW9', ), stdout=PIPE, stderr=PIPE) def ClassicUnpickler(cls, state): 'standard python unpickling behavior' self = cls.__new__(cls) try: setstate = self.__setstate__ except AttributeError: # JUST SAVE TO __dict__ AS USUAL self.__dict__.update(state) else: setstate(state) return self ClassicUnpickler.__safe_for_unpickling__ = 1 def filename_unpickler(cls, path, kwargs): 'raise IOError if path not readable' if not os.path.exists(path): try:# CONVERT TO ABSOLUTE PATH BASED ON SAVED DIRECTORY PATH path = os.path.normpath(os.path.join(kwargs['curdir'], path)) if not os.path.exists(path): raise IOError('unable to open file %s' % path) except KeyError: raise IOError('unable to open file %s' % path) if cls is SourceFileName: return SourceFileName(path) raise ValueError('Attempt to unpickle untrusted class ' + cls.__name__) filename_unpickler.__safe_for_unpickling__ = 1 class SourceFileName(str): '''store a filepath string, raise IOError on unpickling if filepath not readable, and complain if the user tries to pickle a relative path''' def __reduce__(self): if not os.path.isabs(str(self)): print >>sys.stderr, ''' WARNING: You are trying to pickle an object that has a local file dependency stored only as a relative file path: %s This is not a good idea, because anyone working in a different directory would be unable to unpickle this object, since it would be unable to find the file using the relative path. To avoid this problem, SourceFileName is saving the current working directory path so that it can translate the relative path to an absolute path. In the future, please use absolute paths when constructing objects that you intend to save to worldbase or pickle!''' % str(self) return (filename_unpickler, (self.__class__, str(self), dict(curdir=os.getcwd()))) def file_dirpath(filename): 'return path to directory containing filename' dirname = os.path.dirname(filename) if dirname == '': return os.curdir else: return dirname def get_valid_path(*pathTuples): '''for each tuple in args, build path using os.path.join(), and return the first path that actually exists, or else None.''' for t in pathTuples: mypath = os.path.join(*t) if os.path.exists(mypath): return mypath def search_dirs_for_file(filepath, pathlist=()): 'return successful path based on trying pathlist locations' if os.path.exists(filepath): return filepath b = os.path.basename(filepath) for s in pathlist: # NOW TRY EACH DIRECTORY IN pathlist mypath = os.path.join(s, b) if os.path.exists(mypath): return mypath raise IOError('unable to open %s from any location in %s' % (filepath, pathlist)) def report_exception(): 'print string message from exception to stderr' import traceback info = sys.exc_info()[:2] l = traceback.format_exception_only(info[0], info[1]) print >>sys.stderr, 'Warning: caught %s\nContinuing...' % l[0] def standard_invert(self): 'keep a reference to an inverse mapping, using self._inverseClass' try: return self._inverse except AttributeError: self._inverse = self._inverseClass(self) return self._inverse def lazy_create_invert(klass): """Create a function to replace __invert__ with a call to a cached object. lazy_create_invert defines a method that looks up self._inverseObj and, it it doesn't exist, creates it from 'klass' and then saves it. The resulting object is then returned as the inverse. This allows for one-time lazy creation of a single object per parent class. """ def invert_fn(self, klass=klass): try: return self._inverse except AttributeError: # does not exist yet; create & store. inverseObj = klass(self) self._inverse = inverseObj return inverseObj return invert_fn def standard_getstate(self): 'get dict of attributes to save, using self._pickleAttrs dictionary' d = {} for attr, arg in self._pickleAttrs.items(): try: if isinstance(arg, str): d[arg] = getattr(self, attr) else: d[attr] = getattr(self, attr) except AttributeError: pass try: # DON'T SAVE itemClass IF SIMPLY A SHADOW of default itemClass # from __class__ if not hasattr(self.__class__, 'itemClass') or \ (self.itemClass is not self.__class__.itemClass and (not hasattr(self.itemClass, '_shadowParent') or self.itemClass._shadowParent is not self.__class__.itemClass)): try: d['itemClass'] = self.itemClass._shadowParent except AttributeError: d['itemClass'] = self.itemClass if not hasattr(self.__class__, 'itemSliceClass') or \ (self.itemSliceClass is not self.__class__.itemSliceClass and (not hasattr(self.itemSliceClass, '_shadowParent') or self.itemSliceClass._shadowParent is not self.__class__.itemSliceClass)): try: d['itemSliceClass'] = self.itemSliceClass._shadowParent except AttributeError: d['itemSliceClass'] = self.itemSliceClass except AttributeError: pass try: # SAVE CUSTOM UNPACKING METHOD d['unpack_edge'] = self.__dict__['unpack_edge'] except KeyError: pass return d def standard_setstate(self, state): 'apply dict of saved state by passing as kwargs to constructor' if isinstance(state, list): # GET RID OF THIS BACKWARDS-COMPATIBILITY CODE self.__init__(*state) print >>sys.stderr, 'WARNING: obsolete list pickle %s. Update \ by resaving!' % repr(self) else: state['unpicklingMode'] = True # SIGNAL THAT WE ARE UNPICKLING self.__init__(**state) def apply_itemclass(self, state): try: self.itemClass = state['itemClass'] self.itemSliceClass = state['itemSliceClass'] except KeyError: pass def generate_items(items): 'generate o.id,o for o in items' for o in items: yield o.id, o def item_unpickler(db, *args): 'get an item or subslice of a database' obj = db for arg in args: obj = obj[arg] return obj item_unpickler.__safe_for_unpickling__ = 1 def item_reducer(self): ############################# SUPPORT FOR PICKLING 'pickle an item of a database just as a reference' return (item_unpickler, (self.db, self.id)) def shadow_reducer(self): 'pickle shadow class instance using its true class' shadowClass = self.__class__ trueClass = shadowClass._shadowParent # super() TOTALLY FAILED ME HERE! self.__class__ = trueClass # FORCE IT TO PICKLE USING trueClass keepDB = False if hasattr(shadowClass, 'db') and not hasattr(self, 'db'): keepDB = True self.__dict__['db'] = shadowClass.db # retain this attribute!! if hasattr(trueClass, '__reduce__'): # USE trueClass.__reduce__ result = trueClass.__reduce__(self) elif hasattr(trueClass, '__getstate__'): # USE trueClass.__getstate__ result = (ClassicUnpickler, (trueClass, self.__getstate__())) else: # PICKLE __dict__ AS USUAL PYTHON PRACTICE result = (ClassicUnpickler, (trueClass, self.__dict__)) self.__class__ = shadowClass # RESTORE SHADOW CLASS if keepDB: # now we can drop the temporary db attribute we added del self.__dict__['db'] return result def get_bound_subclass(obj, classattr='__class__', subname=None, factories=(), attrDict=None, subclassArgs=None): 'create a subclass specifically for obj to bind its shadow attributes' targetClass = getattr(obj, classattr) try: if targetClass._shadowOwner is obj: return targetClass # already shadowed, so nothing to do except AttributeError: # not a shadow class, so just shadow it pass else: # someone else's shadow class, so shadow its parent targetClass = targetClass._shadowParent if subname is None: # get a name from worldbase ID try: subname = obj._persistent_id.split('.')[-1] except AttributeError: subname = '__generic__' class shadowClass(targetClass): __reduce__ = shadow_reducer _shadowParent = targetClass # NEED TO KNOW ORIGINAL CLASS _shadowOwner = obj # need to know who owns it if attrDict is not None: # add attributes to the class dictionary locals().update(attrDict) for f in factories: f(locals()) if classattr == 'itemClass' or classattr == 'itemSliceClass': shadowClass.db = obj # the class needs to know its db object try: # run subclass initializer if present subclass_init = shadowClass._init_subclass except AttributeError: # no subclass initializer, so nothing to do pass else: # run the subclass initializer if subclassArgs is None: subclassArgs = {} subclass_init(**subclassArgs) shadowClass.__name__ = targetClass.__name__ + '_' + subname setattr(obj, classattr, shadowClass) # SHADOW CLASS REPLACES ORIGINAL return shadowClass def method_not_implemented(*args, **kwargs): raise NotImplementedError def read_only_error(*args, **kwargs): raise NotImplementedError("read only dict") def methodFactory(methodList, methodStr, localDict): 'save a method or exec expression for each name in methodList' for methodName in methodList: if callable(methodStr): localDict[methodName] = methodStr else: localDict[methodName] = eval(methodStr % methodName) def open_shelve(filename, mode=None, writeback=False, allowReadOnly=False, useHash=False, verbose=True): '''Alternative to shelve.open with several benefits: - uses bsddb btree by default instead of bsddb hash, which is very slow for large databases. Will automatically fall back to using bsddb hash for existing hash-based shelve files. Set useHash=True to force it to use bsddb hash. - allowReadOnly=True will automatically suppress permissions errors so user can at least get read-only access to the desired shelve, if no write permission. - mode=None first attempts to open file in read-only mode, but if the file does not exist, opens it in create mode. - raises standard exceptions defined in dbfile: WrongFormatError, PermissionsError, ReadOnlyError, NoSuchFileError - avoids generating bogus __del__ warnings as Python shelve.open() does. ''' if mode=='r': # READ-ONLY MODE, RAISE EXCEPTION IF NOT FOUND return dbfile.shelve_open(filename, flag=mode, useHash=useHash) elif mode is None: try: # 1ST TRY READ-ONLY, BUT IF NOT FOUND CREATE AUTOMATICALLY return dbfile.shelve_open(filename, 'r', useHash=useHash) except dbfile.NoSuchFileError: mode = 'c' # CREATE NEW SHELVE FOR THE USER try: # CREATION / WRITING: FORCE IT TO WRITEBACK AT close() IF REQUESTED return dbfile.shelve_open(filename, flag=mode, writeback=writeback, useHash=useHash) except dbfile.ReadOnlyError: if allowReadOnly: d = dbfile.shelve_open(filename, flag='r', useHash=useHash) if verbose: logger.warn(''' Opening shelve file %s in read-only mode because you lack write permissions to this file. You will NOT be able to modify the contents of this shelve dictionary. To avoid seeing this warning message, use verbose=False argument for the classutil.open_shelve() function. ''' % filename) return d else: raise def get_shelve_or_dict(filename=None, dictClass=None, **kwargs): if filename is not None: if dictClass is not None: return dictClass(filename, **kwargs) else: from mapping import IntShelve return IntShelve(filename, **kwargs) return {} class PathSaver(object): def __init__(self, origPath): self.origPath = origPath self.origDir = os.getcwd() def __str__(self): if os.access(self.origPath, os.R_OK): return self.origPath trypath = os.path.join(self.origDir, self.origPath) if os.access(trypath, os.R_OK): return trypath def override_rich_cmp(localDict): 'create rich comparison methods that just use __cmp__' mycmp = localDict['__cmp__'] localDict['__lt__'] = lambda self, other: mycmp(self, other) < 0 localDict['__le__'] = lambda self, other: mycmp(self, other) <= 0 localDict['__eq__'] = lambda self, other: mycmp(self, other) == 0 localDict['__ne__'] = lambda self, other: mycmp(self, other) != 0 localDict['__gt__'] = lambda self, other: mycmp(self, other) > 0 localDict['__ge__'] = lambda self, other: mycmp(self, other) >= 0 class DBAttributeDescr(object): 'obtain an attribute from associated db object' def __init__(self, attr): self.attr = attr def __get__(self, obj, objtype): return getattr(obj.db, self.attr) def get_env_or_cwd(envname): 'get the specified environment value or path to current directory' try: return os.environ[envname] # USER-SPECIFIED DIRECTORY except KeyError: return os.getcwd() # DEFAULT: SAVE IN CURRENT DIRECTORY class RecentValueDictionary(WeakValueDictionary): '''keep the most recent n references in a WeakValueDictionary. This combines the elegant cache behavior of a WeakValueDictionary (only keep an item in cache if the user is still using it), with the most common efficiency pattern: locality, i.e. references to a given thing tend to cluster in time. Note that this works *even* if the user is not holding a reference to the item between requests for it. Our Most Recent queue will hold a reference to it, keeping it in the WeakValueDictionary, until it is bumped by more recent requests. n: the maximum number of objects to keep in the Most Recent queue, default value 50.''' def __init__(self, n=None): WeakValueDictionary.__init__(self) if n<1: # user doesn't want any Most Recent value queue self.__class__ = WeakValueDictionary # revert to regular WVD return if isinstance(n, int): self.n = n # size limit else: self.n = 50 self._head = self._tail = None self._keepDict = {} # most recent queue def __getitem__(self, k): v = WeakValueDictionary.__getitem__(self, k) # KeyError if not found self.keep_this(v) return v def _splice(self, previous, after): 'link previous <--> after in queue, setting head & tail if needed' if previous is not None: self._keepDict[previous][1] = after if after is not None: self._keepDict[after][0] = previous elif previous is not None: # previous is end of queue! self._tail = previous if after is self._head: self._head = previous def keep_this(self, v): """add v as our most recent ref; drop oldest ref if over size limit. """ if v is self._head: return # already at head of queue, so nothing to do try: # check if already in _keepDict previous, after = self._keepDict[v] except KeyError: self._keepDict[v] = [None, None] else: # remove from current position self._splice(previous, after) self._keepDict[v][0] = None self._splice(v, self._head) # place at head of queue if len(self._keepDict) > self.n: # delete oldest entry vdel = self._tail # get current tail self._splice(self._keepDict[vdel][0], None) # set new tail del self._keepDict[vdel] def __setitem__(self, k, v): WeakValueDictionary.__setitem__(self, k, v) self.keep_this(v) def clear(self): self._head = self._tail = None self._keepDict.clear() WeakValueDictionary.clear(self) def __repr__(self): return '' %\ (len(self._keepDict), self.n) def make_attribute_interface(d): """ If 'd' contains int values, use them to index tuples. If 'd' contains str values, use them to retrieve attributes from an obj. If d empty, use standard 'getattr'. """ if len(d): v = d.values()[0] if isinstance(v, int): return AttrFromTuple(d) elif isinstance(v, str): return AttrFromObject(d) raise ValueError('dictionary values must be int or str!') return getattr class AttrFromTuple(object): def __init__(self, attrDict): self.attrDict = attrDict def __call__(self, obj, attr, default=None): 'getattr from tuple obj' try: return obj[self.attrDict[attr]] except (IndexError, KeyError): if default is not None: return default raise AttributeError("object has no attribute '%s'" % attr) class AttrFromObject(AttrFromTuple): def __call__(self, obj, attr, default=None): 'getattr with attribute name aliases' try: return getattr(obj, self.attrDict[attr]) except KeyError: try: return getattr(obj, attr) except KeyError: if default is not None: return default raise AttributeError("object has no attribute '%s'" % attr) def kwargs_filter(kwargs, allowed): 'return dictionary of kwargs filtered by list allowed' d = {} for arg in allowed: try: d[arg] = kwargs[arg] except KeyError: pass return d def split_kwargs(kwargs, *targets): '''split kwargs into n+1 dicts for n targets; each target must be a list of arguments for that target''' kwargs = kwargs.copy() out = [] for args in targets: d = {} for arg in args: try: d[arg] = kwargs[arg] del kwargs[arg] except KeyError: pass out.append(d) out.append(kwargs) return out PK7“;ð†`e%%pygr/classutil.pyc;ò |†Kc@s dkZdkZdkZdklZdkZdkZdefd„ƒYZd„Z y,dk Z e i Z defd„ƒYZ WnÍe j oÁeZdkZeiƒdjo d„ZnId klZy%eid id ƒo eZnWnej onXeZdefd „ƒYZ ee ƒZ e d fde de ƒZnXd„Zde_d„Zde_defd„ƒYZd„Z d„Z!fd„Z"d„Z#d„Z$d„Z%d„Z&d„Z'd„Z(d„Z)d„Z*de*_d „Z+d!„Z,d"efeed#„Z-d$„Z.d%„Z/d&„Z0eeeeed'„Z1eed(„Z2d)efd*„ƒYZ3d+„Z4d,efd-„ƒYZ5d.„Z6d/efd0„ƒYZ7d1„Z8d2efd3„ƒYZ9d4e9fd5„ƒYZ:d6„Z;d7„Z<dS(8N(sWeakValueDictionarys FilePopenBasecBsStZdZdeeeed„Zd„Zd„Zd„Zd„Zd„Z RS(sCBase class for subprocess.Popen-like class interface that can be supported on Python 2.3 (without subprocess). The main goal is to avoid the pitfalls of Popen.communicate(), which cannot handle more than a small amount of data, and to avoid the possibility of deadlocks and the issue of threading, by using temporary filesic OsY|i|dƒ\|_|_|i|dƒ\|_|_|i|dƒ\|_|_|i ƒ}yC|d} | o|i | ƒn|i |i ƒ|d=t}Wntj o|i}nXyC|d} | o|i | ƒn|i |iƒ|d=t}Wntj o|i}nX||||||if||_ ||_dS(sØMimics the interface of subprocess.Popen() with two additions: - stdinFlag, if passed, gives a flag to add the stdin filename directly to the command line (rather than passing it by redirecting stdin). example: stdinFlag="-i" will add the following to the commandline: -i /path/to/the/file If set to None, the stdin filename is still appended to the commandline, but without a preceding flag argument. -stdoutFlag: exactly the same thing, except for the stdout filename. sstdinsstdoutsstderrs stdinFlags stdoutFlagN(sselfs_get_pipe_filesstdins _close_stdinsstdouts _close_stdoutsstderrs _close_stderrskwargsscopys stdinFlagsargssappends _stdin_pathsNonesKeyErrors stdoutFlags _stdout_pathsbufsizes executableslargs( sselfsargssbufsizes executablesstdinsstdoutsstderrslargsskwargss stdinFlags stdoutFlag((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys__init__s2      "cCs‹|tjoDtiƒ\}}t|d|d|ƒt i |dƒt fSn-|t j ot|d|d|i ƒn|tfSdS(s;create a temp filename instead of a PIPE; save the filenames_s_pathsw+bN(sifilesPIPEstempfilesmkstempsfdspathssetattrsselfsattrsossfdopensTruesNonesnamesFalse(sselfsifilesattrsfdspath((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys_get_pipe_file6s  cCsat|d|ƒoIt||ƒiƒt|d|tƒtit|d|dƒƒndS(s-close and delete this temp file if still opens_close_s_s_pathN(sgetattrsselfsattrsclosessetattrsFalsesossremove(sselfsattr((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys _close_file@s cCs,|tj o|iƒ|idƒndS(Ni(sifilesNonesflushsseek(sselfsifile((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys_rewind_for_readingGs  cCs+|idƒ|idƒ|idƒdS(s"Close any open temp (PIPE) files. sstdinsstdoutsstderrN(sselfs _close_file(sself((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pyscloseLs  cCs|iƒdS(N(sselfsclose(sself((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys__del__Rs( s__name__s __module__s__doc__sNones__init__s_get_pipe_files _close_files_rewind_for_readingscloses__del__(((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys FilePopenBase s &   cOst||Ž}|iƒSdS(sIportable interface to subprocess.call(), even if subprocess not availableN(s FilePopens popenargsskwargsspswait(s popenargsskwargssp((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pyscall_subprocessVss FilePopencBstZdZd„ZRS(s>this subclass uses the subprocess module Popen() functionalitycCsj|i|iƒti|i|iŽ}|iƒ|i dƒ|i|i ƒ|i|i ƒ|i SdS(Nsstdin( sselfs_rewind_for_readingsstdins subprocesssPopensargsskwargsspswaits _close_filesstdoutsstderrs returncode(sselfsp((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pyswaitbs  (s__name__s __module__s__doc__swait(((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys FilePopen_s sWindowscCsd|dSdS(s,Very basic quoting of arguments for Windows s"N(sarg(sarg((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysmkargps(smkargsSHELLscshcBstZdZd„ZRS(s=this subclass fakes subprocess.Popen.wait() using os.system()cCsW|i|iƒtt|idƒ}|ido|dt|iƒg7}n|ido|dt|iƒg7}ndi|ƒ}|ido?t od|t|i ƒf}qØ|d t|i ƒ}nt i |ƒ}|id ƒ|i|iƒ|i|iƒttj o t|jo!td t|idƒƒ‚n|SdS( Niiss is (%s) >& %ss 2> sstdinsno such command: %s(sselfs_rewind_for_readingsstdinsmapsmkargsargss _stdin_paths _stdout_pathsjoinscmds CSH_REDIRECTs _stderr_pathsosssystems returncodes _close_filesstdoutsstderrsbadExecutableCodesNonesOSErrorsstr(sselfsargsscmds returncode((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pyswait€s$ !(s__name__s __module__s__doc__swait(((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys FilePopen}s saZfDqW9sstdoutsstderrcCsT|i|ƒ}y |i}Wn#tj o|ii|ƒn X||ƒ|SdS(s#standard python unpickling behaviorN( sclss__new__sselfs __setstate__ssetstatesAttributeErrors__dict__supdatesstate(sclssstatessetstatesself((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysClassicUnpicklerœs  icCsÁtii|ƒ o{yQtiitii|d|ƒƒ}tii|ƒ otd|ƒ‚nWqtj otd|ƒ‚qXn|t jot |ƒSnt d|i ƒ‚dS(s"raise IOError if path not readablescurdirsunable to open file %ss$Attempt to unpickle untrusted class N( sosspathsexistssnormpathsjoinskwargssIOErrorsKeyErrorsclssSourceFileNames ValueErrors__name__(sclsspathskwargs((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysfilename_unpicklerªs% sSourceFileNamecBstZdZd„ZRS(s‡store a filepath string, raise IOError on unpickling if filepath not readable, and complain if the user tries to pickle a relative pathcCsdtiit|ƒƒ otidt|ƒIJnt|it|ƒt dti ƒƒffSdS(Ns1 WARNING: You are trying to pickle an object that has a local file dependency stored only as a relative file path: %s This is not a good idea, because anyone working in a different directory would be unable to unpickle this object, since it would be unable to find the file using the relative path. To avoid this problem, SourceFileName is saving the current working directory path so that it can translate the relative path to an absolute path. In the future, please use absolute paths when constructing objects that you intend to save to worldbase or pickle!scurdir( sosspathsisabssstrsselfssyssstderrsfilename_unpicklers __class__sdictsgetcwd(sself((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys __reduce__¿s (s__name__s __module__s__doc__s __reduce__(((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysSourceFileNameºs cCs2tii|ƒ}|djo tiSn|SdS(s,return path to directory containing filenamesN(sosspathsdirnamesfilenamescurdir(sfilenamesdirname((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys file_dirpathÑs   cGsBx;|D]3}tii|Œ}tii|ƒo|SqqWdS(szfor each tuple in args, build path using os.path.join(), and return the first path that actually exists, or else None.N(s pathTuplesstsosspathsjoinsmypathsexists(s pathTuplesstsmypath((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysget_valid_pathÚs cCsˆtii|ƒo|Sntii|ƒ}x>|D]6}tii||ƒ}tii|ƒo|Sq4q4Wt d||fƒ‚dS(s9return successful path based on trying pathlist locationss)unable to open %s from any location in %sN( sosspathsexistssfilepathsbasenamesbspathlistsssjoinsmypathsIOError(sfilepathspathlistsbsssmypath((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pyssearch_dirs_for_fileãs cCsLdk}tiƒd }|i|d|dƒ}tid|dIJdS(s-print string message from exception to stderrNiiis Warning: caught %s Continuing...(s tracebackssyssexc_infosinfosformat_exception_onlyslsstderr(sinfos tracebacksl((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysreport_exceptionðs  cCs>y |iSWn,tj o |i|ƒ|_|iSnXdS(s@keep a reference to an inverse mapping, using self._inverseClassN(sselfs_inversesAttributeErrors _inverseClass(sself((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysstandard_invertøs  cCs|d„}|SdS(shCreate a function to replace __invert__ with a call to a cached object. lazy_create_invert defines a method that looks up self._inverseObj and, it it doesn't exist, creates it from 'klass' and then saves it. The resulting object is then returned as the inverse. This allows for one-time lazy creation of a single object per parent class. cCs>y |iSWn,tj o ||ƒ}||_|SnXdS(N(sselfs_inversesAttributeErrorsklasss inverseObj(sselfsklasss inverseObj((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys invert_fn s    N(sklasss invert_fn(sklasss invert_fn((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pyslazy_create_inverts cCsëh}xq|iiƒD]`\}}y>t|tƒot||ƒ||s   cCs8y|d|_|d|_Wntj onXdS(Ns itemClasssitemSliceClass(sstatesselfs itemClasssitemSliceClasssKeyError(sselfsstate((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysapply_itemclassIs  ccs"x|D]}|i|fVqWdS(sgenerate o.id,o for o in itemsN(sitemssosid(sitemsso((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysgenerate_itemsQscGs)|}x|D]}||}q W|SdS(s%get an item or subslice of a databaseN(sdbsobjsargssarg(sdbsargssobjsarg((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysitem_unpicklerWs cCst|i|iffSdS(s0pickle an item of a database just as a referenceN(sitem_unpicklersselfsdbsid(sself((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys item_reducer`scCsæ|i}|i}||_t}t|dƒot|dƒ ot}|i |i düss__lt__csˆ||ƒdjS(Ni(smycmpsselfsother(sselfsother(smycmp(s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysýss__le__csˆ||ƒdjS(Ni(smycmpsselfsother(sselfsother(smycmp(s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysþss__eq__csˆ||ƒdjS(Ni(smycmpsselfsother(sselfsother(smycmp(s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysÿss__ne__csˆ||ƒdjS(Ni(smycmpsselfsother(sselfsother(smycmp(s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysss__gt__csˆ||ƒdjS(Ni(smycmpsselfsother(sselfsother(smycmp(s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysss__ge__N(s localDictsmycmp(s localDictsmycmp((smycmps4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysoverride_rich_cmpùs sDBAttributeDescrcBs tZdZd„Zd„ZRS(s-obtain an attribute from associated db objectcCs ||_dS(N(sattrsself(sselfsattr((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys__init__scCst|i|iƒSdS(N(sgetattrsobjsdbsselfsattr(sselfsobjsobjtype((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys__get__ s(s__name__s __module__s__doc__s__init__s__get__(((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysDBAttributeDescrs  cCs3yti|SWntj otiƒSnXdS(s@get the specified environment value or path to current directoryN(sossenvironsenvnamesKeyErrorsgetcwd(senvname((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysget_env_or_cwds sRecentValueDictionarycBsPtZdZed„Zd„Zd„Zd„Zd„Zd„Z d„Z RS(s—keep the most recent n references in a WeakValueDictionary. This combines the elegant cache behavior of a WeakValueDictionary (only keep an item in cache if the user is still using it), with the most common efficiency pattern: locality, i.e. references to a given thing tend to cluster in time. Note that this works *even* if the user is not holding a reference to the item between requests for it. Our Most Recent queue will hold a reference to it, keeping it in the WeakValueDictionary, until it is bumped by more recent requests. n: the maximum number of objects to keep in the Most Recent queue, default value 50.cCsnti|ƒ|djot|_dSnt|tƒo ||_n d|_t|_|_ h|_ dS(Nii2( sWeakValueDictionarys__init__sselfsns __class__s isinstancesintsNones_heads_tails _keepDict(sselfsn((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys__init__$s     cCs'ti||ƒ}|i|ƒ|SdS(N(sWeakValueDictionarys __getitem__sselfsksvs keep_this(sselfsksv((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys __getitem__0s cCs|tj o||i|d after in queue, setting head & tail if needediiN(sprevioussNonesaftersselfs _keepDicts_tails_head(sselfsprevioussafter((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys_splice5s    cCsÛ||ijodSny|i|\}}Wn&tj ottg|i|(slensselfs _keepDictsn(sself((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys__repr__[s( s__name__s __module__s__doc__sNones__init__s __getitem__s_splices keep_thiss __setitem__sclears__repr__(((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysRecentValueDictionarys     cCsqt|ƒo\|iƒd}t|tƒot|ƒSnt|tƒot|ƒSnt dƒ‚nt SdS(s¶ If 'd' contains int values, use them to index tuples. If 'd' contains str values, use them to retrieve attributes from an obj. If d empty, use standard 'getattr'. is%dictionary values must be int or str!N( slensdsvaluessvs isinstancesints AttrFromTuplesstrsAttrFromObjects ValueErrorsgetattr(sdsv((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysmake_attribute_interface`s s AttrFromTuplecBstZd„Zed„ZRS(NcCs ||_dS(N(sattrDictsself(sselfsattrDict((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys__init__uscCsXy||i|SWn.ttfj o|tj o|SqDnXtd|ƒ‚dS(sgetattr from tuple objsobject has no attribute '%s'N( sobjsselfsattrDictsattrs IndexErrorsKeyErrorsdefaultsNonesAttributeError(sselfsobjsattrsdefault((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys__call__xs  (s__name__s __module__s__init__sNones__call__(((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys AttrFromTupless sAttrFromObjectcBstZed„ZRS(NcCs~yt||i|ƒSWnOtj oCyt||ƒSWqjtj o|tj o|SqeqjXnXtd|ƒ‚dS(s#getattr with attribute name aliasessobject has no attribute '%s'N( sgetattrsobjsselfsattrDictsattrsKeyErrorsdefaultsNonesAttributeError(sselfsobjsattrsdefault((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys__call__„s (s__name__s __module__sNones__call__(((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysAttrFromObject‚scCsGh}x6|D].}y||||this subclass uses the subprocess module Popen() functionalitycCsj|i|iƒti|i|iŽ}|iƒ|i dƒ|i|i ƒ|i|i ƒ|i SdS(Nsstdin( sselfs_rewind_for_readingsstdins subprocesssPopensargsskwargsspswaits _close_filesstdoutsstderrs returncode(sselfsp((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pyswaitbs  (s__name__s __module__s__doc__swait(((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys FilePopen_s sWindowscCsd|dSdS(s,Very basic quoting of arguments for Windows s"N(sarg(sarg((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysmkargps(smkargsSHELLscshcBstZdZd„ZRS(s=this subclass fakes subprocess.Popen.wait() using os.system()cCsW|i|iƒtt|idƒ}|ido|dt|iƒg7}n|ido|dt|iƒg7}ndi|ƒ}|ido?t od|t|i ƒf}qØ|d t|i ƒ}nt i |ƒ}|id ƒ|i|iƒ|i|iƒttj o t|jo!td t|idƒƒ‚n|SdS( Niiss is (%s) >& %ss 2> sstdinsno such command: %s(sselfs_rewind_for_readingsstdinsmapsmkargsargss _stdin_paths _stdout_pathsjoinscmds CSH_REDIRECTs _stderr_pathsosssystems returncodes _close_filesstdoutsstderrsbadExecutableCodesNonesOSErrorsstr(sselfsargsscmds returncode((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pyswait€s$ !(s__name__s __module__s__doc__swait(((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys FilePopen}s saZfDqW9sstdoutsstderrcCsT|i|ƒ}y |i}Wn#tj o|ii|ƒn X||ƒ|SdS(s#standard python unpickling behaviorN( sclss__new__sselfs __setstate__ssetstatesAttributeErrors__dict__supdatesstate(sclssstatessetstatesself((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysClassicUnpicklerœs  icCsÁtii|ƒ o{yQtiitii|d|ƒƒ}tii|ƒ otd|ƒ‚nWqtj otd|ƒ‚qXn|t jot |ƒSnt d|i ƒ‚dS(s"raise IOError if path not readablescurdirsunable to open file %ss$Attempt to unpickle untrusted class N( sosspathsexistssnormpathsjoinskwargssIOErrorsKeyErrorsclssSourceFileNames ValueErrors__name__(sclsspathskwargs((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysfilename_unpicklerªs% sSourceFileNamecBstZdZd„ZRS(s‡store a filepath string, raise IOError on unpickling if filepath not readable, and complain if the user tries to pickle a relative pathcCsdtiit|ƒƒ otidt|ƒIJnt|it|ƒt dti ƒƒffSdS(Ns1 WARNING: You are trying to pickle an object that has a local file dependency stored only as a relative file path: %s This is not a good idea, because anyone working in a different directory would be unable to unpickle this object, since it would be unable to find the file using the relative path. To avoid this problem, SourceFileName is saving the current working directory path so that it can translate the relative path to an absolute path. In the future, please use absolute paths when constructing objects that you intend to save to worldbase or pickle!scurdir( sosspathsisabssstrsselfssyssstderrsfilename_unpicklers __class__sdictsgetcwd(sself((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys __reduce__¿s (s__name__s __module__s__doc__s __reduce__(((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysSourceFileNameºs cCs2tii|ƒ}|djo tiSn|SdS(s,return path to directory containing filenamesN(sosspathsdirnamesfilenamescurdir(sfilenamesdirname((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys file_dirpathÑs   cGsBx;|D]3}tii|Œ}tii|ƒo|SqqWdS(szfor each tuple in args, build path using os.path.join(), and return the first path that actually exists, or else None.N(s pathTuplesstsosspathsjoinsmypathsexists(s pathTuplesstsmypath((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysget_valid_pathÚs cCsˆtii|ƒo|Sntii|ƒ}x>|D]6}tii||ƒ}tii|ƒo|Sq4q4Wt d||fƒ‚dS(s9return successful path based on trying pathlist locationss)unable to open %s from any location in %sN( sosspathsexistssfilepathsbasenamesbspathlistsssjoinsmypathsIOError(sfilepathspathlistsbsssmypath((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pyssearch_dirs_for_fileãs cCsLdk}tiƒd }|i|d|dƒ}tid|dIJdS(s-print string message from exception to stderrNiiis Warning: caught %s Continuing...(s tracebackssyssexc_infosinfosformat_exception_onlyslsstderr(sinfos tracebacksl((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysreport_exceptionðs  cCs>y |iSWn,tj o |i|ƒ|_|iSnXdS(s@keep a reference to an inverse mapping, using self._inverseClassN(sselfs_inversesAttributeErrors _inverseClass(sself((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysstandard_invertøs  cCs|d„}|SdS(shCreate a function to replace __invert__ with a call to a cached object. lazy_create_invert defines a method that looks up self._inverseObj and, it it doesn't exist, creates it from 'klass' and then saves it. The resulting object is then returned as the inverse. This allows for one-time lazy creation of a single object per parent class. cCs>y |iSWn,tj o ||ƒ}||_|SnXdS(N(sselfs_inversesAttributeErrorsklasss inverseObj(sselfsklasss inverseObj((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys invert_fn s    N(sklasss invert_fn(sklasss invert_fn((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pyslazy_create_inverts cCsëh}xq|iiƒD]`\}}y>t|tƒot||ƒ||s   cCs8y|d|_|d|_Wntj onXdS(Ns itemClasssitemSliceClass(sstatesselfs itemClasssitemSliceClasssKeyError(sselfsstate((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysapply_itemclassIs  ccs"x|D]}|i|fVqWdS(sgenerate o.id,o for o in itemsN(sitemssosid(sitemsso((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysgenerate_itemsQscGs)|}x|D]}||}q W|SdS(s%get an item or subslice of a databaseN(sdbsobjsargssarg(sdbsargssobjsarg((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysitem_unpicklerWs cCst|i|iffSdS(s0pickle an item of a database just as a referenceN(sitem_unpicklersselfsdbsid(sself((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys item_reducer`scCsæ|i}|i}||_t}t|dƒot|dƒ ot}|i |i düss__lt__csˆ||ƒdjS(Ni(smycmpsselfsother(sselfsother(smycmp(s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysýss__le__csˆ||ƒdjS(Ni(smycmpsselfsother(sselfsother(smycmp(s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysþss__eq__csˆ||ƒdjS(Ni(smycmpsselfsother(sselfsother(smycmp(s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysÿss__ne__csˆ||ƒdjS(Ni(smycmpsselfsother(sselfsother(smycmp(s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysss__gt__csˆ||ƒdjS(Ni(smycmpsselfsother(sselfsother(smycmp(s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysss__ge__N(s localDictsmycmp(s localDictsmycmp((smycmps4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysoverride_rich_cmpùs sDBAttributeDescrcBs tZdZd„Zd„ZRS(s-obtain an attribute from associated db objectcCs ||_dS(N(sattrsself(sselfsattr((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys__init__scCst|i|iƒSdS(N(sgetattrsobjsdbsselfsattr(sselfsobjsobjtype((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys__get__ s(s__name__s __module__s__doc__s__init__s__get__(((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysDBAttributeDescrs  cCs3yti|SWntj otiƒSnXdS(s@get the specified environment value or path to current directoryN(sossenvironsenvnamesKeyErrorsgetcwd(senvname((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysget_env_or_cwds sRecentValueDictionarycBsPtZdZed„Zd„Zd„Zd„Zd„Zd„Z d„Z RS(s—keep the most recent n references in a WeakValueDictionary. This combines the elegant cache behavior of a WeakValueDictionary (only keep an item in cache if the user is still using it), with the most common efficiency pattern: locality, i.e. references to a given thing tend to cluster in time. Note that this works *even* if the user is not holding a reference to the item between requests for it. Our Most Recent queue will hold a reference to it, keeping it in the WeakValueDictionary, until it is bumped by more recent requests. n: the maximum number of objects to keep in the Most Recent queue, default value 50.cCsnti|ƒ|djot|_dSnt|tƒo ||_n d|_t|_|_ h|_ dS(Nii2( sWeakValueDictionarys__init__sselfsns __class__s isinstancesintsNones_heads_tails _keepDict(sselfsn((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys__init__$s     cCs'ti||ƒ}|i|ƒ|SdS(N(sWeakValueDictionarys __getitem__sselfsksvs keep_this(sselfsksv((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys __getitem__0s cCs|tj o||i|d after in queue, setting head & tail if needediiN(sprevioussNonesaftersselfs _keepDicts_tails_head(sselfsprevioussafter((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys_splice5s    cCsÛ||ijodSny|i|\}}Wn&tj ottg|i|(slensselfs _keepDictsn(sself((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys__repr__[s( s__name__s __module__s__doc__sNones__init__s __getitem__s_splices keep_thiss __setitem__sclears__repr__(((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysRecentValueDictionarys     cCsqt|ƒo\|iƒd}t|tƒot|ƒSnt|tƒot|ƒSnt dƒ‚nt SdS(s¶ If 'd' contains int values, use them to index tuples. If 'd' contains str values, use them to retrieve attributes from an obj. If d empty, use standard 'getattr'. is%dictionary values must be int or str!N( slensdsvaluessvs isinstancesints AttrFromTuplesstrsAttrFromObjects ValueErrorsgetattr(sdsv((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysmake_attribute_interface`s s AttrFromTuplecBstZd„Zed„ZRS(NcCs ||_dS(N(sattrDictsself(sselfsattrDict((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys__init__uscCsXy||i|SWn.ttfj o|tj o|SqDnXtd|ƒ‚dS(sgetattr from tuple objsobject has no attribute '%s'N( sobjsselfsattrDictsattrs IndexErrorsKeyErrorsdefaultsNonesAttributeError(sselfsobjsattrsdefault((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys__call__xs  (s__name__s __module__s__init__sNones__call__(((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys AttrFromTupless sAttrFromObjectcBstZed„ZRS(NcCs~yt||i|ƒSWnOtj oCyt||ƒSWqjtj o|tj o|SqeqjXnXtd|ƒ‚dS(s#getattr with attribute name aliasessobject has no attribute '%s'N( sgetattrsobjsselfsattrDictsattrsKeyErrorsdefaultsNonesAttributeError(sselfsobjsattrsdefault((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pys__call__„s (s__name__s __module__sNones__call__(((s4build/bdist.darwin-8.11.1-i386/egg/pygr/classutil.pysAttrFromObject‚scCsGh}x6|D].}y||||‰Ç‹…Äóÿÿ‰x…Òt G‹•Äóÿÿ‰B‹…Àóÿÿ‹µÄóÿÿ‰F‰N‹U‰T$ƒA‰D$‹µ¼óÿÿ‰4$è“‹…¸óÿÿ‰D$‰4$è“‹•Äóÿÿ‰B,…À„j‹…ÄóÿÿÄl [^_]Ã1É“‰•¸óÿÿé?ÿÿÿ‰|$ƒ5‰D$ÇD$ ]ƒí‰D$ƒ‰D$µÔûÿÿ‰4$蜒‰t$‹ƒ—‹‰$è«’‹•Àóÿÿ‰$謒‹…Äóÿÿ…Àt4‹µÄóÿÿ‰4$è”’Ç…Äóÿÿ‹…ÄóÿÿÄl [^_]ËE …À…ÑÇ…Äóÿÿ‹…ÄóÿÿÄl [^_]ËEÔƒÀ‰D$ƒ ‰D$ÇD$ Fƒí‰D$ƒ9‰D$µÔûÿÿ‰4$è㑉t$‹ƒ—‹‰$èò‘Ç…ÄóÿÿéÈþÿÿÇD$ƒ‰D$ÇD$ Sƒí‰D$ƒ9‰D$µÔûÿÿ‰4$è„‘‰t$‹ƒ—‹‰$è“‘éãþÿÿ‹…¼óÿÿ‰D$ƒá‰D$‹U ‰$èL‘Ç…ÄóÿÿéEþÿÿ‹E …À„öþÿÿ‹•¼óÿÿ‰T$ƒá‰D$‹u ‰4$è‘Ç…Äóÿÿé þÿÿ‰|$ƒ5‰D$ÇD$ ]éCÿÿÿ‰D$ƒ ‰D$ÇD$ Fƒí‰D$ƒ‰D$µÔûÿÿ‰4$豉t$‹ƒ—‹‰$èÀÇ…Äóÿÿé–ýÿÿ‹E …Àt‰t$ƒá‰D$‹u ‰4$èn‹…Äóÿÿ‰$è’Ç…ÄóÿÿéYýÿÿU‰åVƒì‹u‹F,…Àt‰$èy‹F(…Àt‰$èj‹F…Àt‰$èLÇF‹F…Àt‰$è6ÇF‰4$è'1ÀƒÄ^]ÃU‰åWVSìœèÎ/‹E‰D$ƒN ‰D$•¬÷ÿÿ‰•”÷ÿÿ‰$è·ƒV ‰D$‹…”÷ÿÿ‰$蚉ƅÀ„3EÔ‰D$E؉D$E܉D$Eà‰D$ Eä‰D$ƒr ‰D$‰4$è~ƒø…‰4$è‹uà‹}܉ð™÷ÿ…ÒŽ‰ø)Љ…¤÷ÿÿ‹EÔ‰D$‹E؉D$‰|$‰t$‹Eä‰D$ ‹E ‰D$ƒÂ ‰D$‹U‰$è…ÀˆË‹EÔ…ÀŽ»‹E‰D$ƒ† ‰D$‹•”÷ÿÿ‰$èÄŽƒ’ ‰D$‹…”÷ÿÿ‰$è§Ž‰Ç…À„@‹EÔ…À~k1öỦ•÷ÿÿë‹•÷ÿÿ‰|$ ÇD$ÇD$‰$èqŽƒè…‹EЉD$ ‹ẺD$ƒÚ ‰D$‹E‰$èYŽ…ÀˆƒÆ;uÔ|¢‰<$èiŽ‹EØ…ÀŽÉ‹U‰T$ƒ¢ ‰D$‹…”÷ÿÿ‰$èþƒ’ ‰D$‹•”÷ÿÿ‰$èá‰Ç…À„z‹EØ…À~y1öEĉ…˜÷ÿÿë‹…˜÷ÿÿ‰|$ ÇD$ÇD$‰$諃è…V‹EȉD$ ‹EĉD$ƒæ ‰D$‹U‰$è“…ÀˆO‹EÄ‹UÈЉ…¤÷ÿÿƒÆ;uØ|”‰<$è•‹…¤÷ÿÿ…ÀŽ×‹E‰D$ƒº ‰D$‹•”÷ÿÿ‰$è'ƒ’ ‰D$‹…”÷ÿÿ‰$è ‰Æ…À„£1ÿU¬‰•œ÷ÿÿƒò ‰… ÷ÿÿë‹•œ÷ÿÿ‰t$ ÇD$ÇD$‰$èÏŒƒèu~‹EÀ‰D$‹E¼‰D$‹E¸‰D$‹E´‰D$‹E°‰D$ ‹E¬‰D$‹… ÷ÿÿ‰D$‹U‰$蟌…Àx_ƒÇ9½¤÷ÿÿu‹‰4$è°Œ1ÀÄœ[^_]Ë}…ÿ…•¸ÿÿÿÿÄœ[^_]Ëu…öté‹…”÷ÿÿ‰D$ƒ ë|‰µ¤÷ÿÿéôüÿÿ‹M…ÉtÅ‹EÇerroÇ@r wrÇ@itinÇ@ g ouÇ@tputÇ@ filÇ@e! oÇ@ut oÇ@ f diÇ@$sk sÇ@(pacefÇ@,?ékÿÿÿ‹…”÷ÿÿ‰D$ƒZ ‰D$‹U‰$裋éGÿÿÿU‰åWVSì¬è+‹E‰D$ÇD$ÿ•¬oÿÿ‰•ˆoÿÿ‰$è`‹…ÀtPEÔ‰D$E؉D$E܉D$Eà‰D$Eä‰D$ …¬÷ÿÿ‰…oÿÿ‰D$ƒÛ ‰D$‹•ˆoÿÿ‰$è/‹ƒøtX‹U…Òu¸ÿÿÿÿĬ[^_]ËEÇerroÇ@r orÇ@ EOFÇ@ reaÇ@dingÇ@ inpÇ@ut fÇ@ile¸ÿÿÿÿë´‹…oÿÿ‰D$ ‹U ‰T$ƒó ‰D$…¬ïÿÿ‰…”oÿÿ‰$芃ÿ ‰D$‹•”oÿÿ‰$èrŠ‰Æ…À„£‹EÔ‰D$‹E؉D$‹E܉D$‹Eà‰D$ ‹Eä‰D$ƒ ‰D$‰4$èQŠ…Àˆš‰4$èiŠ‹}à‹u܉ø™÷þ…Ò~)Ö÷‹EÔ…ÀŽ/‹…oÿÿ‰D$ ‹U ‰T$ƒ ‰D$‹…”oÿÿ‰$èቓ ‰•Œoÿÿ‰T$‹…”oÿÿ‰$辉‰… oÿÿ…À„ë‹EÔ…ÀŽ™1ö‹U‰T$ÇD$ÿ‹…ˆoÿÿ‰$艅À„mþÿÿUĉ•˜oÿÿEȉD$ ‰T$ƒ# ‰D$‹…ˆoÿÿ‰$èk‰ƒø…8þÿÿ‹• oÿÿ‰T$ ÇD$ÇD$‹…˜oÿÿ‰$èS‰ƒè…‡ƒÆ;uÔŒiÿÿÿ‹• oÿÿ‰$èD‰‹EØ…ÀŽû‹•oÿÿ‰T$ ‹E ‰D$ƒ+ ‰D$‹•”oÿÿ‰$èψ‹…Œoÿÿ‰D$‹•”oÿÿ‰$貈‰…œoÿÿ…À„ß‹uØ…öŽ“1ö‹E‰D$ÇD$ÿ‹•ˆoÿÿ‰$èuˆ…À„aýÿÿ}ÌEЉD$ ‰|$ƒ; ‰D$‹…ˆoÿÿ‰$èeˆƒø…2ýÿÿ‹•œoÿÿ‰T$ ÇD$ÇD$‰<$èSˆƒè…‡‹}Ì}ЃÆ;uØŒoÿÿÿ‹…œoÿÿ‰$è>ˆ‹•oÿÿ‰T$ ‹E ‰D$ƒC ‰D$‹•”oÿÿ‰$èÔ‡‹…Œoÿÿ‰D$‹•”oÿÿ‰$è·‡‰Æ…À„è…ÿŽÀÇ…¤oÿÿE¬‰…„oÿÿ‹U‰T$ÇD$ÿ‹…ˆoÿÿ‰$èp‡…À„\üÿÿEÀ‰D$E¼‰D$E¸‰D$E´‰D$E°‰D$ ‹•„oÿÿ‰T$ƒO ‰D$‹…ˆoÿÿ‰$èA‡ƒø…üÿÿ‰t$ ÇD$ÇD$‹•„oÿÿ‰$è/‡ƒèugƒ…¤oÿÿ;½¤oÿÿ…Sÿÿÿ‰4$è#‡1ÀéÑûÿÿƒ ‰…ŒoÿÿéÇýÿÿ‹M…É„°ûÿÿ‹…”oÿÿ‰D$ƒ ‰D$‹U‰$è †¸ÿÿÿÿéŒûÿÿ‹E…À„|ûÿÿ‹•”oÿÿ‰T$ƒc ‰D$‹E‰$èl†¸ÿÿÿÿéXûÿÿU‰åWVƒì‹E…Ày ¸ÿÿÿÿƒÄ^_]ËU‹H‰Mô‹‰Eð@‹U‰Eìƒé‰Mä…É~11öë‰Uä;uä}'‹Eäð‰ÂÁêÂÑú R‰Mè‹E‹}ì;DÏ|ØrëÖ1ö;uô}•v‹Uì‹M ;~…‹};xyÿÿÿ…öˆqÿÿÿ‹UðékÿÿÿU‰åWVSì|èš%‹u…öˆ$‹E(‹P9Ur‹H‰Ç‹ ‰½Ìûÿÿ‹‰…Ðûÿÿ‹E™÷ù‹})×9‹u$)þ9E$Mñ‰ø™ÇD$ ¤úÁà‰D$‰T$‹•Ìûÿÿ‰$è_…‹Ìûÿÿ‰L$ ‰t$ÇD$‹…Ðûÿÿ‰$è…‰ú‹M(‰y)U‹}(‹‹UЉE ‹H‰´ûÿÿ9M0Œ¾ÿÿÿÿÇ…ÄûÿÿÇ…Èûÿÿ‹}‹G…À„š…öˆ‹…ÄûÿÿE,‰…ØûÿÿµÈûÿÿ‰µÜûÿÿ‹U‹R‰•àûÿÿ‰ð¯E0‰Æ‰ÇÁÿ‹E0™‰…¨ûÿÿ‰•¬ûÿÿµ¨ûÿÿ½¬ûÿÿ‹…Øûÿÿ™‰…¸ûÿÿ‰•¼ûÿÿ9•¬ûÿÿ|F9…¨ûÿÿ‡:ÇD$ ‰ð‰ú¤òÁà¤÷Áæ)Æ׉t$‰|$‹M4‰ $è3„‹}4‰|$ ‹E0‰D$ÇD$‹•àûÿÿ‰$è샋}0‹M‰y‹…Øûÿÿ‰A ‹…ÈûÿÿE‰A‹•Üûÿÿ‰Q‹M‹I‰äûÿÿ‹}‹‰½´ûÿÿƒé‰¤ûÿÿ…ÉŽ®1ö뉕¤ûÿÿ;µ¤ûÿÿ}4‹…¤ûÿÿð‰ÂÁêÂÑúR‰…¨ûÿÿ‹} ‹´ûÿÿ;|Á|Ér;µ¤ûÿÿ|Ì9µäûÿÿ~Yv‹•´ûÿÿ‹M;~F‹} ;x}>‹E‰0‰ðÄ|[^_]ËH 9EŒþÿÿ‹}(‹E(éyýÿÿ‹…Øûÿÿ™÷}0‰U0é´þÿÿ¾ÿÿÿÿë»1ö딋8‰½Äûÿÿ‰ø™÷}0‰…Èûÿÿ‹…´ûÿÿ™÷}0ƒúƒØÿ‰E‹•Èûÿÿ‹Mщ•Ôûÿÿ‰Áƒé…É~c1öë‰Á9Î}[1‰ÐÁèÐÑø‹U ‹½Ôûÿÿ;TÇ|ßpëÜ‹Mƒé…ÉŽÉ1öë ‰Á9Îzýÿÿ1‰ÐÁèÐÑø‹} ‹U;|Â|ÞpëÛ1ö‹´ûÿÿ‰M,‹}‹G…À…fýÿÿ‹}0…ÿ޹ÇD$‹U0‰$èE‚‹M‰A…À…:ýÿÿ‹}0‰|$ƒª‰D$ÇD$ 7ƒ2‰D$ƒ~‰D$µèûÿÿ‰4$èÀ‰t$‹ƒ`‡‹‰$èϾþÿÿÿéyþÿÿ1öé¸üÿÿ‹M‹A‰D$‹} ‰|$‹E4‰$èþæÿÿ‹G‹U‰BÇBÇBé£ýÿÿ‹E0‰D$ƒª‰D$ÇD$ 7ƒ2‰D$ƒJ‰D$µèûÿÿ‰4$è(‰t$‹ƒd‡‹‰$è7¾þÿÿÿéáýÿÿU‰åWVSìŒèë ‹E…À~0‹E‰D$‹U‰T$ ‹M‰L$‹E ‰D$‹U‰$èèÿÿƒøþ„’‹E ‰D$ƒ¿þ‰D$•à÷ÿÿ‰•˜÷ÿÿ‰$耋‹ÿ‰œ÷ÿÿ‰L$‹…˜÷ÿÿ‰$èz€‰…´÷ÿÿ…À„æ‹M ‰L$ƒ×þ‰D$‹…˜÷ÿÿ‰$èR€‹•œ÷ÿÿ‰T$‹˜÷ÿÿ‰ $è5€‰…°÷ÿÿ…À„€‰D$ ‹M‰L$ÇD$‹E‰$è;€‹E™÷}‰Ö…Ò…Àu‰µ¨÷ÿÿ‹E…Àl‹°÷ÿÿ‰ $耋…´÷ÿÿ‰$耋U ‰T$ƒ£þ‰D$‹˜÷ÿÿ‰ $讋…œ÷ÿÿ‰D$‹•˜÷ÿÿ‰$葉…Ð÷ÿÿ…À„j‹}…ÿÇ…¬÷ÿÿ‹E…ÀŽm‹M‰È÷ÿÿÇ…Ô÷ÿÿ‹EÀ‰…Œ÷ÿÿ‰Êë9Ç…Ä÷ÿÿ‹…Ä÷ÿÿ…¬÷ÿÿƒ…Ô÷ÿÿƒ…È÷ÿÿ‹•Ô÷ÿÿ9U„‹•È÷ÿÿ‹r9u}Õ‹@‹MÁ‰…À÷ÿÿ…ö~ª1ÿÇ…Ä÷ÿÿÇ…”÷ÿÿ‹…Œ÷ÿÿE‰…÷ÿÿ‹•Ð÷ÿÿ‰T$ ÇD$ÇD$‹”÷ÿÿ‹•À÷ÿÿʉ$èÇ~}‹÷ÿÿ”÷ÿÿGÿVÿ9ÆN‹•Ð÷ÿÿ‰T$ ÇD$ÇD$@‹À÷ÿÿDÁ‰$è~~ƒ…Ä÷ÿÿ9þwÿÿÿéÿÿÿ‹M)щ΅ÉŽ1þÿÿ1ÿ‹…°÷ÿÿ‰D$ ÇD$ÇD$‹U‰$è4~ƒÇ9þuÔéþýÿÿ‹Ð÷ÿÿ‰ $è.~‹E ‰D$ƒkþ‰D$‹•˜÷ÿÿ‰$èÎ}ƒkÿ‰D$‹˜÷ÿÿ‰ $è±}‰Æ…À…Ô‹…˜÷ÿÿ‰D$ƒ#‰D$³o‰4$èŠ}‰ðÄŒ[^_]Ë}Ç…¤÷ÿÿMà‰ ÷ÿÿ鈋@‹U‰…¸÷ÿÿ‹°÷ÿÿ‰L$ ‹…Ì÷ÿÿ‰D$ÇD$‹•¸÷ÿÿ‰$èT}‹…Ì÷ÿÿ™÷}‰Ö…Òt‹M)щ΅É’‹Ì÷ÿÿ…¨÷ÿÿƒ…¤÷ÿÿƒÇ‹•¤÷ÿÿ9U„÷üÿÿ‹ ÷ÿÿ‹…¨÷ÿÿ‰Eà‹G‰Eä‹•´÷ÿÿ‰T$ ÇD$ÇD$‰ $èÖ|‹G‰…Ì÷ÿÿ9EŒ5ÿÿÿ‰Â‹…°÷ÿÿ‰D$ ‰T$ÇD$‹@‹MÁ‰$è™|‹G…¨÷ÿÿéeÿÿÿ1öÇ…¬÷ÿÿ‹…Ð÷ÿÿ‰D$ ÇD$ÇD$v‹U‰$èT|uFÿ‹Uƒê9EN‹Ð÷ÿÿ‰L$ ÇD$ÇD$@‹UD‰$è|ƒ…¬÷ÿÿ9u‹éeüÿÿ‹•¬÷ÿÿ‰T$‹M‰L$‹E‰D$‹U‰T$ ‹M ‰L$ƒoÿ‰D$‰4$è¹{‰4$èÙ{1ÀÄŒ[^_]Ë•˜÷ÿÿ‰T$ƒ#éÚýÿÿÇ…¼÷ÿÿ‹…°÷ÿÿ‰D$ ÇD$ÇD$‹•¸÷ÿÿ‰$èq{ƒ…¼÷ÿÿ;µ¼÷ÿÿuÉé(þÿÿ‹M‰L$ƒé‚ýÿÿ‹˜÷ÿÿ‰L$ƒ#émýÿÿU‰åWVSìlèê‹E …À~?‹M1öë ƒÆƒÁ9u t-‹…Òyï‹A÷؉÷Ú‰Q‹Q ‹A÷؉A ÷Ú‰QƒÆƒÁ9u uÓƒIÜÿÿ‰D$ ÇD$‹E ‰D$‹U‰$èÅzƒ} ¿1Ò‹E‰ƒÿ„>w…öŽÃÇD$‰4$èz‰…Ôûÿÿ…À„‹uÇF‹…ÔûÿÿÇÿÿÿÿÇ@ƒ} Ž„¿Ç…Üûÿÿ¹1ÀÇ…ÐûÿÿÇ…Ìûÿÿ‹uµÌûÿÿ@‹EЋB9F„ ‹…ÔûÿÿÈ‹Bƒøƒ•ÜûÿÿƒÀ‰B‰N‹•Üûÿÿ‹µÔûÿÿ‰<Ö‰ø‰ÑƒÇƒ…Ìûÿÿƒ…Ðûÿÿ9} Ž…ÉuŒ‹uµÐûÿÿ륋MƒÁ‹uV¾¿‹Bì9 „§ƒÇƒÆƒÁƒÂ9u uâWÿ‹E‰ƒÿ…Âþÿÿ‹U ‹E‰ÇD$Ç$èQy‰…Ôûÿÿ…À…4ÇD$ƒÊø‰D$ÇD$ ƒƒ‚÷‰D$ƒÎ÷‰D$µèûÿÿ‰4$èËx‰t$‹ƒ°|‹‰$èÚx‹…ÔûÿÿéÙ‹Aü;Bè…MÿÿÿéKÿÿÿ1À¹Ç…Üûÿÿ@‹U‹P‹µÔûÿÿ‹TÖƒê‰΋H‹Î…ÉÚ‹•Ôûÿÿ‹B‹u‰‹½ÜûÿÿƒÇ…ÿ~‹•Ôûÿÿ1ö1É‹B‰JÁƒÆƒÂ9þuîƒ} ~W‹}ƒÇ,‹uÇ…àûÿÿ‹‹N9È~#‹•Ôûÿÿ‰…Äûÿÿ‹‹•ÔûÿÿDÊ‹•Äûÿÿ‰ƒ…àûÿÿƒÇƒÆ‹…àûÿÿ9E u¼ƒvÜÿÿ‰D$ ÇD$‹U ‰T$‹u‰4$èãw‹…ÔûÿÿÇÇ@‹E …Àމ‰÷Ç…äûÿÿ1Àë.‹•Ôûÿÿ ƒA‹•ØûÿÿÇÿÿÿÿƒ…äûÿÿƒÇ‹µäûÿÿ9u tKW‰•Øûÿÿ‹w‰µ´ûÿÿ9ð}¼‹…Ôûÿÿ ð‹@‰…Àûÿÿƒî‹U‰tÂÇA‹µäûÿÿ‰1‹…´ûÿÿë‹•ÜûÿÿÕøÿÿÿ‰D$‹…ÔûÿÿƒÀ‰D$‹µÔûÿÿ‰4$èèv‹…ÔûÿÿÄl[^_]Ë;…íüÿÿ‹R‹µÔûÿÿ‹DÖƒè‰ΉыÖéýÿÿ‰t$ƒÊø‰D$ÇD$ ‡ƒ‚÷‰D$ƒš÷‰D$µèûÿÿ‰4$èiv‰t$‹ƒ´|‹‰$èxvÇ…Ôûÿÿ‹…Ôûÿÿémÿÿÿ‰t$ƒÊø‰D$ÇD$ ‡é8ýÿÿU‰åWVSìLè‹E …À~?‹M1öë ƒÆƒÁ9u t-‹…Òyï‹A÷؉÷Ú‰Q‹Q ‹A÷؉A ÷Ú‰QƒÆƒÁ9u uÓƒe×ÿÿ‰D$ ÇD$‹E ‰D$‹U‰$èáu‹E …ÀŽ?1ÀÇ…Üûÿÿp9u ~U…Àˆë‰Áv‹U<‰Ðë(„݉Oƒ…Üûÿÿ‰ñƒÆƒÇ9u ~!…Ɉ·‹EIЋB9G~Ê‹J9u ß‹…Üûÿÿ…ÀŽÈÇD$‹•Üûÿÿ‰$èNu‰…Øûÿÿ…À„‰Á‹U1öÇ…àûÿÿë3‰1‰AƒÁ@‹}Ç‹x…ÿˆÅ‹…ÔûÿÿÇÿÿÿÿƒÆƒÂ9u t#z‰½Ôûÿÿ‹B…Ày½‰øÇÿÿÿÿƒÆƒÂ9u u݃’×ÿÿ‰D$ ÇD$‹•Üûÿÿ‰T$‹Øûÿÿ‰ $è¨t‹àûÿÿ…ÉŽäÇD$‹•àûÿÿ‰$è‰t‰…äûÿÿ…À„ñ‹µØûÿÿÇ…Ôûÿÿ‹V‹ @‹} Ï‹‰‹A‰F‹A‰F‹A ‰F ‹A‰F‹A‰FR‹T׋½äûÿÿ׋P…Òu‹•Ôûÿÿ‰ƒ@ÇAÿÿÿÿÇÿÿÿÿƒ…ÔûÿÿƒÆ‹Üûÿÿ9Ôûÿÿuˆ‹U1ö1ÿ‰Ñë9þ$ƒÇƒÁƒÆƒÂ9u „ ƒ:ÿuâƒzÿtæ9þ~Ü‹‰‹B‰A‹B‰A‹B ‰A ‹B‰A‹B‰A븋E ‹}‰ÇD$Ç$è€s‰…äûÿÿ…À„“Ç…àûÿÿ‹àûÿÿ‹U‰ ‹…äûÿÿÄL[^_]˽àûÿÿ‰xƒÇ‰½àûÿÿ‹…Ôûÿÿé$þÿÿ‹EЋÜûÿÿIÁà‰D$‹…Øûÿÿ‰D$‰$èÒr‹…äûÿÿ1Ò8ƒÂƒÀ;•àûÿÿuð‹•Øûÿÿ‰$èÔr‹M‰9élÿÿÿ‰ðéþüÿÿ‹;…ýÿÿ‹JéDýÿÿ‹½àûÿÿ‰|$ƒæó‰D$ÇD$ ƒžò‰D$ƒ¶ò‰D$µèûÿÿ‰4$èAr‰t$‹ƒÐw‹‰$èPrÇ…äûÿÿ‹…Øûÿÿ‰$èGr‹…äûÿÿÄL[^_]ËÜûÿÿ‰L$ƒbõ‰D$ÇD$ ÿƒžò‰D$ƒêò‰D$µèûÿÿ‰4$èÆq‰t$‹ƒÌw‹‰$èÕqÇ…äûÿÿé‚þÿÿÇD$ƒæó‰D$ÇD$ )ƒžò‰D$ƒêò‰D$µèûÿÿ‰4$ègq‰t$‹ƒÌw‹‰$èvqé-þÿÿ‹àûÿÿ‰L$ƒæó‰D$ÇD$ ƒžò‰D$ƒêò‰D$µèûÿÿ‰4$èq‰t$‹ƒÌw‹‰$èqéÔþÿÿU‰åWVSìlèØ‹u…ö„£‹}‹M …ɈðÇ…Ðûÿÿ‹W…Ò…«‹M‰Oƒé‰Äûÿÿ…É~WÇ…´ûÿÿ뉕Äûÿÿ‹µ´ûÿÿ9µÄûÿÿ~A‹…Äûÿÿ…´ûÿÿ‰ÂÁêÂÑú4R‰µÀûÿÿ‹M ‹E;Lð|ƒÂ‰•´ûÿÿ‰ÖëÁÇ…´ûÿÿ‹E9…´ûÿÿ}‹•´ûÿÿR‹MÁ‹u;0ÖÇ…´ûÿÿÿÿÿÿ‹´ûÿÿ‰Ç…Ìûÿÿ‹…Àx!;G}@‹U ‹u;1~ ‹E ;AŒ‚‹w‰ð…öt‰ÇëÌ‹E…À„1ÿ‹…Ìûÿÿ…À~A‹M$1ö‹‰ÐÁøƒÈ9…Ðûÿÿt‹A÷؉÷Ú‰Q‹Q ‹A÷؉A ÷Ú‰QƒÆƒÁ9µÌûÿÿuÄ‹E,‹•Ìûÿÿ‰‹E0‰81ÀÄl[^_]˵Ìûÿÿv‹U$‹‰‹Q‰P‹Q‰P‹Q ‰P ‹Q‰P‹Q‰PƒÆ‰µÌûÿÿ‹@‹M‹TуÀ‰…҈NjuÖ‰•Ôûÿÿ‹B‰…Üûÿÿ‹‰•ØûÿÿRÁ‰…àûÿÿ‹Üûÿÿƒé‰Äûÿÿ…ÉŽŸÇ…´ûÿÿ뉕Äûÿÿ‹µ´ûÿÿ9µÄûÿÿ~@‹…Äûÿÿ…´ûÿÿ‰ÂÁêÂÑú4R‰µÀûÿÿ‹M ‹…àûÿÿ;Lð|¿ƒÂ‰•´ûÿÿ‰Ö9µÄûÿÿÀ‹…Üûÿÿ9…´ûÿÿ}‹•´ûÿÿR‹àûÿÿÁ‹u;0$‹u(9µÌûÿÿoþÿÿ‰ø‰Çé%þÿÿÇ…´ûÿÿ뵋U ;P}Ô‹…´ûÿÿ…ÀxÊ‹µ´ûÿÿµØûÿÿx¼‹W…Ò„1‰2‹Ôûÿÿ‹A‰B‰×ë‹E÷Ø‹U ÷Ú‰U‰E Ç…Ðûÿÿÿÿÿÿéûüÿÿ‹W‰•äûÿÿ…ÒtH‰Ñë"‰$è×m‹…äûÿÿ‰$èÉm…öt ‰µäûÿÿ‰ñ‹q‹A…Àuԉȉ$è©m…öuà‹wë‰÷‹v‹G…Àt‰$èŒm‰<$è„m…öuàé…ýÿÿ‹U ;PŒ(ýÿÿéýÿÿÇD$ Ç$è`m‰Ç…À…BüÿÿÇD$ƒ@î‰D$ÇD$ ¦ƒpí‰D$ƒ¼í‰D$µèûÿÿ‰4$èÞl‰t$‹ƒžr‹‰$èíl¸ÿÿÿÿé[ýÿÿÇD$ Ç$èèl‰Â…Àt ‰x‰GéªþÿÿÇD$ƒ<ð‰D$ÇD$ ¾é|ÿÿÿU‰åWVSì|è] ‹E…À„‹E‰…Èûÿÿ‹E …ÀˆgÇ…Ôûÿÿ‹Èûÿÿ‹A…À„¯‰ÎÇ…ÐûÿÿÇ…Øûÿÿ‹F‰ò;B@‹ÐûÿÿI‹u4<Æë‰µÈûÿÿƒÇ‹U89•ÐûÿÿC‹µÈûÿÿ‹…Ɉî;NÇI‹FЋE;޳‹u ;r§‹‰‹B‰G‹B‰G‹B ‰G ‹B‰G‹B‰Gƒ…Ðûÿÿ‹µÈûÿÿ‹‹N@‹Tщ•ÌûÿÿH‰‹…Èûÿÿ‹p…ö„!‹…Ìûÿÿ…Àxf‹M0‰L$,‹E,‰D$(‹U(‰T$$‹M$‰L$ ‹E ‰D$‹U‰T$‹M‰L$‹E‰D$‹•Ìûÿÿ‰T$ ‹M‰L$‹E ‰D$‰4$è9åÿÿ‰…Øûÿÿ…À‰èþÿÿƒ½Øûÿÿþ…áþÿÿ¸ÿÿÿÿé‹r…öt‰µÈûÿÿ‹F‰òé þÿÿ‹E…À„þÇ…Èûÿÿ‹½Ðûÿÿ…ÿ~A‹M41ö‹‰ÐÁøƒÈ9…Ôûÿÿt‹A÷؉÷Ú‰Q‹Q ‹A÷؉A ÷Ú‰QƒÆƒÁ9µÐûÿÿuÄ‹•Ðûÿÿ‹M<‰‹…Èûÿÿ‹u@‰1ÀÄ|[^_]ÃÇD$ Ç$è[j‰Æ…À„‹•Èûÿÿ‰P‰Bé°þÿÿ‹•Èûÿÿ‹BƒÀ‰B;Jt*‹•ÈûÿÿéÏýÿÿ‹E÷Ø‹U ÷Ú‰U‰E Ç…Ôûÿÿÿÿÿÿé„ýÿÿ;B}Ñ‹J ‰Üûÿÿ‹r‰µàûÿÿ¯E,‰Æ‰ÇÁÿ‹E,™‰…°ûÿÿ‰•´ûÿÿµ°ûÿÿ½´ûÿÿ‰È™‰Àûÿÿ‰•Äûÿÿ9•´ûÿÿŽÏ‰È™÷},‰•äûÿÿÇD$ ‰ð‰ú¤òÁà¤÷Áæ)Æ׉t$‰|$‹M0‰ $èXi‹u0‰t$ ‹…äûÿÿ‰D$ÇD$‹•àûÿÿ‰$èi‹µäûÿÿ‹Èûÿÿ‰qÇ‹A‹•ÈûÿÿéÐüÿÿ‰òéáþÿÿÇD$ Ç$èi‰…Èûÿÿ…À…füÿÿÇD$ƒÅé‰D$ÇD$ Xé¦| 9°ûÿÿ‡Ø‹U,‰•äûÿÿé!ÿÿÿ‹E0‰D$,‹U,‰T$(‹M(‰L$$‹u$‰t$ ‹E ‰D$‹U‰T$‹M‰L$‹u‰t$ÇD$ ÿÿÿÿ‹E‰D$‹U ‰T$‹Èûÿÿ‰ $èmâÿÿƒøþ„Fýÿÿ‹µÈûÿÿéãûÿÿÇD$ƒÁë‰D$ÇD$ sƒõè‰D$ƒAé‰D$µèûÿÿ‰4$èÖg‰t$‹ƒ#n‹‰$èåg¸ÿÿÿÿézýÿÿ‹…ÜûÿÿéBþÿÿ‹•Èûÿÿ‹z…ÿuëZ‰÷‹w‹G…Àt‰$è¼g‰<$è´g…öuà‹Èûÿÿ‹q‰Êë-‰$è›g‹Èûÿÿ‰ $èg…ö„¨üÿÿ‰µÈûÿÿ‹v‹•Èûÿÿ‹B…ÀủÑëÖU‰åVƒì‹u‹ƒÀ‰…Àu ‹F‰4$ÿP‰ðƒÄ^]ÃU‰åWVSƒìè÷‹}ƒû`‰D$ ƒ£ã‰D$‹E‰D$‹E ‰$è¤g…ÀtEƒ‹G…Àt‰$èøf‹G…Àt‰$èéfÇGÇG‹³Õhƒ‹ƒè‰…Àt ‰ðƒÄ[^_]ËG‰<$ÿPëëU‰åƒì‹U‹ÇB…Àt1ÀÉËB‰$ÿP1ÀÉÃU‰åWVƒì‹uƒ‹~;~(}ZÁâ‹N‹E ‰‹N‹E‰D ‹N‹E‰D ‹N‹E‰D ‹N‹E‰D ƒÇ‰~‹ƒè‰…Àu ‹F‰4$ÿP‰øƒÄ^_]ËFÇD$‰4$ÿP ‹~ëU‰åWVƒì‹u‹ƒÀ‰‹V…Òu1ÿƒè‰…Àu ‹F‰4$ÿP‰øƒÄ^_]Ã;V(|‹VÇF‰×ëÒRÁà‰D$‹F‰$èQf‰Â‹ëÚU‰åVƒì‹u‹ƒÀ‰…Àu ‹F‰4$ÿP‰ðƒÄ^]ÃU‰åWVSƒìè-‹}ƒ5_‰D$ ƒÙá‰D$‹E‰D$‹E ‰$èÚe…Àt/ƒ‹G…Àt‰$è«ÔÿÿÇG‹³ gƒ‹ƒè‰…Àt ‰ðƒÄ[^_]ËG‰<$ÿPëëU‰åVƒì‹U‹‹r …Àu ‹B‰$ÿP‰ðƒÄ^]ÃU‰åVƒì‹u‹ƒÀ‰…Àu ‹F‰4$ÿP‰ðƒÄ^]ÃU‰åVƒì‹U‹‹r…Àu ‹B‰$ÿP‰ðƒÄ^]ÃU‰åWVƒì0‹}‹ƒÀ‰Eð‰‹w‰uô‹O9Î~6‹G‰Eä‹G I‹@(Ð1Ò)Ήñ‹uä90 ;p}‹u 9pt*ƒÂƒÀ9Êuâ1ö‹Eðƒè‰…Àu ‹G‰<$ÿP‰ðƒÄ0^_]Ëu9p uξëÓU‰åWVƒì ‹E‰Eô‹U ‰Uð‹E‰Eì‹Uôƒ‹Uð…Ò1‹Eì‰$è×c‹Uô‹ƒè‰…ÀtƒÄ ^_]ËB‰U‹HƒÄ ^_]ÿá‰Æ1ÿ‹‰$è£cƒÇƒÆ9}ðuëë´U‰åVƒì$‹uEì‰D$Eð‰D$Eô‰$è×cƒ‹F…Àt‰$èac‹F…Àt‰$èRc‹ƒè‰…Àt?è`c…Àt‰4$èdƒ.‹Eì‰D$‹Eð‰D$‹Eô‰$èØc‹F‰4$ÿ ƒÄ$^]ËF‰4$ÿPë¶U‰åVƒì$‹uEì‰D$Eð‰D$Eô‰$è>cƒ‹F‰$èçÆÿÿ‹ƒè‰…ÀtuèÚb…Àt‰4$è dƒ.‹Eì‰D$‹Eð‰D$‹Eô‰$èRc‹–$`…Òt ‹ƒè‰…Àt‹F‰4$ÿ ƒÄ$^]ˆ$`‹P‰$ÿR‹F‰4$ÿ ƒÄ$^]ËF‰4$ÿPë€U‰åƒì‹E‹€$`…Àt‹U‰T$‰$ÿU …ÀtÉÃ1ÀÉÃU‰åSƒìèË‹U‹Š$`‹ƒ©c‰‚$`ƒ…Ét ‹ƒè‰…Àt1ÀƒÄ[]ËA‰ $ÿP1ÀƒÄ[]ÃU‰åVƒì$‹uEì‰D$Eð‰D$Eô‰$è b‹ƒÀ‰‹V…Òt ‰$èÑÿÿ‹ƒè‰…Àt?è a…Àt‰4$èÏbƒ.‹Eì‰D$‹Eð‰D$‹Eô‰$èb‹F‰4$ÿ ƒÄ$^]ËF‰4$ÿPë¶U‰åSƒìèñ‹EÇD$‰$ÿ˜‰Â…Àt?‹ƒu[‰B‹ƒÏb‰B ƒ‰B$ƒ‰B(ƒ‰B,ƒ‰B0ƒ‰B8ƒ‰B<ƒ‰B@ƒ‰ÐƒÄ[]ÃU‰åVƒì$‹uEì‰D$Eð‰D$Eô‰$èa‹ƒÀ‰‹V4…Òt ‰$è¦`‹ƒè‰…À„ è¡`…Àt‰4$èÐaƒ.‹Eì‰D$‹Eð‰D$‹Eô‰$èa‹V …Òt‹ƒè‰…À„Ô‹V$…Òt‹ƒè‰…À„à‹V(…Òt‹ƒè‰…À„¹‹V,…Òt‹ƒè‰…À„ø‹V0…Òt‹ƒè‰…À„Ñ‹V8…Òt‹ƒè‰…À„ª‹V<…Òt‹ƒè‰…À„ƒ‹V@…Òt ‹ƒè‰…Àt‹F‰4$ÿ ƒÄ$^]ËF@‹P‰$ÿR‹F‰4$ÿ ƒÄ$^]ËF‰4$ÿPééþÿÿ‹F ‹P‰$ÿRéÿÿÿ‹F(‹P‰$ÿRé6ÿÿÿ‹F$‹P‰$ÿRéÿÿÿ‹F<‹P‰$ÿRélÿÿÿ‹F8‹P‰$ÿRéEÿÿÿ‹F0‹P‰$ÿRéÿÿÿ‹F,‹P‰$ÿRé÷þÿÿU‰åWVƒì‹u‹}‹F …Àt‰|$‰$ÿU …À…“‹F$…Àt‰|$‰$ÿU …Àu~‹F(…Àt‰|$‰$ÿU …Àui‹F,…Àt‰|$‰$ÿU …ÀuT‹F0…Àt‰|$‰$ÿU …Àu?‹F8…Àt‰|$‰$ÿU …Àu*‹F<…Àt‰|$‰$ÿU …Àu‹F@…Àt‰|$‰$ÿU …ÀtƒÄ^_]Ã1ÀëõU‰åWVSƒìèçý‹u‹V ‹»Å_‰~ ƒ…Òt‹ƒè‰…À„G‹V$‰~$ƒ…Òt‹ƒè‰…À„‹V(‰~(ƒ…Òt‹ƒè‰…À„ç‹V,‰~,ƒ…Òt‹ƒè‰…À„·‹V0‰~0ƒ…Òt‹ƒè‰…À„‡‹V8‰~8ƒ…Òt ‹ƒè‰…Àt^‹V<‰~<ƒ…Òt ‹ƒè‰…Àt5‹V@‰~@ƒ…Òt ‹ƒè‰…Àt 1ÀƒÄ[^_]ËB‰$ÿP1ÀƒÄ[^_]ËB‰$ÿP‹»Å_뺋B‰$ÿP‹»Å_ë‘‹B‰$ÿP‹»Å_éeÿÿÿ‹B‰$ÿP‹»Å_é5ÿÿÿ‹B‰$ÿP‹»Å_éÿÿÿ‹B‰$ÿP‹»Å_éÕþÿÿ‹B‰$ÿPé«þÿÿU‰åWVƒì‹}‹E ‰$èd]‰Æ…Àt8‹G‹@8‰t$‰<$ÿP‰Ç‹ƒè‰…Àt ‰øƒÄ^_]ËF‰4$ÿP‰øƒÄ^_]Ã1ÿ‰øƒÄ^_]ÃU‰åVƒì$‹uEì‰D$Eð‰D$Eô‰$è\ƒ‹F‰$è8Àÿÿ‹F…Àt‰$è\‹ƒè‰…À„è\…Àt‰4$èG]ƒ.‹Eì‰D$‹Eð‰D$‹Eô‰$è\‹V,…Òt ‹ƒè‰…ÀtP‹V0…Òt ‹ƒè‰…Àt‹F‰4$ÿ ƒÄ$^]ËF0‹P‰$ÿR‹F‰4$ÿ ƒÄ$^]ËF‰4$ÿPéqÿÿÿ‹F,‹P‰$ÿRë¢U‰åWVƒì‹u‹}‹F,…Àt‰|$‰$ÿU …Àu‹F0…Àt‰|$‰$ÿU …ÀtƒÄ^_]Ã1ÀƒÄ^_]ÃU‰åWVSƒìèÌú‹}‹W,‹³ª\‰w,ƒ…Òt ‹ƒè‰…Àt5‹W0‰w0ƒ…Òt ‹ƒè‰…Àt 1ÀƒÄ[^_]ËB‰$ÿP1ÀƒÄ[^_]ËB‰$ÿPëÀU‰åSƒìè_ú‹EÇD$‰$ÿ˜‰Â…ÀtW‹ƒëT‰B‹ƒ=\‰B ƒ‰Bƒ‰Bƒ‰Bƒ‰Bƒ‰B$ƒ‰B(ƒ‰BDƒ‰BHƒ‰BLƒ‰BPƒ‰BTƒ‰ÐƒÄ[]ÃU‰åVƒì‹u‹V …Òt‹ƒè‰…À„¼‹V…Òt‹ƒè‰…À„•‹V…Òt‹ƒè‰…À„n‹V…Òt‹ƒè‰…À„G‹V…Òt‹ƒè‰…À„ ‹V$…Òt‹ƒè‰…À„ù‹V(…Òt‹ƒè‰…À„Ò‹VD…Òt‹ƒè‰…À„«‹VH…Òt‹ƒè‰…À„„‹VL…Òt ‹ƒè‰…Àtd‹VP…Òt ‹ƒè‰…ÀtD‹VT…Òt ‹ƒè‰…Àt‹F‰u‹ˆ ƒÄ^]ÿá‹FT‹P‰$ÿR‹F‰u‹ˆ ƒÄ^]ÿá‹FP‹P‰$ÿR뮋FL‹P‰$ÿR뎋FH‹P‰$ÿRékÿÿÿ‹FD‹P‰$ÿRéDÿÿÿ‹F(‹P‰$ÿRéÿÿÿ‹F$‹P‰$ÿRéöþÿÿ‹F‹P‰$ÿRéÏþÿÿ‹F‹P‰$ÿRé¨þÿÿ‹F‹P‰$ÿRéþÿÿ‹F‹P‰$ÿRéZþÿÿ‹F ‹P‰$ÿRé3þÿÿU‰åWVƒì‹u‹}‹F …Àt‰|$‰$ÿU …À…÷‹F…Àt‰|$‰$ÿU …À…Þ‹F…Àt‰|$‰$ÿU …À…Å‹F…Àt‰|$‰$ÿU …À…¬‹F…Àt‰|$‰$ÿU …À…“‹F$…Àt‰|$‰$ÿU …Àu~‹F(…Àt‰|$‰$ÿU …Àui‹FD…Àt‰|$‰$ÿU …ÀuT‹FH…Àt‰|$‰$ÿU …Àu?‹FL…Àt‰|$‰$ÿU …Àu*‹FP…Àt‰|$‰$ÿU …Àu‹FT…Àt‰|$‰$ÿU …ÀtƒÄ^_]Ã1ÀëõU‰åWVSƒìèÂö‹u‹V ‹» X‰~ ƒ…Òt‹ƒè‰…À„‹V‰~ƒ…Òt‹ƒè‰…À„׋V‰~ƒ…Òt‹ƒè‰…À„§‹V‰~ƒ…Òt‹ƒè‰…À„w‹V‰~ƒ…Òt‹ƒè‰…À„G‹V$‰~$ƒ…Òt‹ƒè‰…À„‹V(‰~(ƒ…Òt‹ƒè‰…À„ç‹VD‰~Dƒ…Òt‹ƒè‰…À„·‹VH‰~Hƒ…Òt‹ƒè‰…À„‡‹VL‰~Lƒ…Òt ‹ƒè‰…Àt^‹VP‰~Pƒ…Òt ‹ƒè‰…Àt5‹VT‰~Tƒ…Òt ‹ƒè‰…Àt 1ÀƒÄ[^_]ËB‰$ÿP1ÀƒÄ[^_]ËB‰$ÿP‹» X뺋B‰$ÿP‹» Xë‘‹B‰$ÿP‹» Xéeÿÿÿ‹B‰$ÿP‹» Xé5ÿÿÿ‹B‰$ÿP‹» Xéÿÿÿ‹B‰$ÿP‹» XéÕþÿÿ‹B‰$ÿP‹» Xé¥þÿÿ‹B‰$ÿP‹» Xéuþÿÿ‹B‰$ÿP‹» XéEþÿÿ‹B‰$ÿP‹» Xéþÿÿ‹B‰$ÿPéëýÿÿU‰åWVƒì‹}‹E ‰$èU‰Æ…Àt8‹G‹@8‰t$‰<$ÿP‰Ç‹ƒè‰…Àt ‰øƒÄ^_]ËF‰4$ÿP‰øƒÄ^_]Ã1ÿ‰øƒÄ^_]ÃU‰åVƒì$‹uEì‰D$Eð‰D$Eô‰$èªTƒ‹F(…Àt‰$è4TÇF(‹F,…Àt‰$èTÇF,‹ƒè‰…À„©è!T…Àt‰4$èPUƒ.‹Eì‰D$‹Eð‰D$‹Eô‰$è™T‹V0…Òt ‹ƒè‰…Àtx‹V4…Òt‹ƒè‰…À„‹V8…Òt ‹ƒè‰…Àta‹V<…Òt ‹ƒè‰…Àt‹F‰4$ÿ ƒÄ$^]ËF<‹P‰$ÿR‹F‰4$ÿ ƒÄ$^]ËF‰4$ÿPéIÿÿÿ‹F0‹P‰$ÿRéwÿÿÿ‹F8‹P‰$ÿRë‘‹F4‹P‰$ÿRénÿÿÿU‰åWVƒì‹u‹}‹F0…Àt‰|$‰$ÿU …Àu?‹F4…Àt‰|$‰$ÿU …Àu*‹F8…Àt‰|$‰$ÿU …Àu‹F<…Àt‰|$‰$ÿU …ÀtƒÄ^_]Ã1ÀƒÄ^_]ÃU‰åWVSƒìèaò‹}‹W0‹³?T‰w0ƒ…Òt‹ƒè‰…À„‡‹W4‰w4ƒ…Òt ‹ƒè‰…Àt^‹W8‰w8ƒ…Òt ‹ƒè‰…Àt5‹W<‰w<ƒ…Òt ‹ƒè‰…Àt 1ÀƒÄ[^_]ËB‰$ÿP1ÀƒÄ[^_]ËB‰$ÿP‹³?T뺋B‰$ÿP‹³?Të‘‹B‰$ÿPékÿÿÿU‰åWVƒì‹}‹E ‰$èžR‰Æ…Àt8‹G‹@8‰t$‰<$ÿP‰Ç‹ƒè‰…Àt ‰øƒÄ^_]ËF‰4$ÿP‰øƒÄ^_]Ã1ÿ‰øƒÄ^_]ÃU‰åVƒì‹u‹V…Òt ‹ƒè‰…Àt‹F‰u‹ˆ ƒÄ^]ÿá‹F‹P‰$ÿR‹F‰u‹ˆ ƒÄ^]ÿáU‰åƒì‹E‹@…Àt‹U‰T$‰$ÿU …ÀtÉÃ1ÀÉÃU‰åSƒìèÇð‹U‹J‹ƒ¥R‰Bƒ…Ét ‹ƒè‰…Àt1ÀƒÄ[]ËA‰ $ÿP1ÀƒÄ[]ÃU‰åWVƒì‹}‹E ‰$è„Q‰Æ…Àt8‹G‹@8‰t$‰<$ÿP‰Ç‹ƒè‰…Àt ‰øƒÄ^_]ËF‰4$ÿP‰øƒÄ^_]Ã1ÿ‰øƒÄ^_]ÃU‰åVƒì‹u‹V …Òt ‹ƒè‰…Àt‹F‰u‹ˆ ƒÄ^]ÿá‹F ‹P‰$ÿR‹F‰u‹ˆ ƒÄ^]ÿáU‰åƒì‹E‹@ …Àt‹U‰T$‰$ÿU …ÀtÉÃ1ÀÉÃU‰åSƒìè­ï‹U‹J ‹ƒ‹Q‰B ƒ…Ét ‹ƒè‰…Àt1ÀƒÄ[]ËA‰ $ÿP1ÀƒÄ[]ÃU‰åWVƒì‹}‹E ‰$èjP‰Æ…Àt8‹G‹@8‰t$‰<$ÿP‰Ç‹ƒè‰…Àt ‰øƒÄ^_]ËF‰4$ÿP‰øƒÄ^_]Ã1ÿ‰øƒÄ^_]ÃU‰åVƒì‹u‹V…Òt ‹ƒè‰…Àt‹F‰u‹ˆ ƒÄ^]ÿá‹F‹P‰$ÿR‹F‰u‹ˆ ƒÄ^]ÿáU‰åƒì‹E‹@…Àt‹U‰T$‰$ÿU …ÀtÉÃ1ÀÉÃU‰åSƒìè“î‹U‹J‹ƒqP‰Bƒ…Ét ‹ƒè‰…Àt1ÀƒÄ[]ËA‰ $ÿP1ÀƒÄ[]ÃU‰åWVSƒì,èKî‰Eä‰Ö‰Ï…Àtƒ…ötƒ…ÿtƒ;»)Ptm…ÿtz‹ƒ5P9GtoƒgÔ‰D$‹ƒeP‹‰$è/N…öt ‹ƒè‰…Àto‹Mä…Ét‹U䋃艅Àte…ÿt‹ƒè‰…Àu ‹G‰<$ÿPƒÄ,[^_]˃艅À„¯1ÿ…ötv‹ƒIP‹Uä9B„²;³)Pt!ƒ“Ôénÿÿÿ‹F‰4$ÿP놋B‰$ÿP닃艅Àts‹ƒ9P‹Uä9Bt2ƒÇÔ‰D$‹ƒeP‹‰$èhM‹uäé5ÿÿÿ‹“)Pƒ‰Öézÿÿÿ‹Bƒ‰Ö‰Eä‰|$‰t$‰$èNƒÄ,[^_]ËG‰<$ÿP1ÿéCÿÿÿ‹F‰4$ÿP낉ÐëÉU‰åWVSƒì<èÏì‰EÔ‰UЉMÌ‹u‹E …Àt ‹E Ç‹E…Àt ‹UÇ‹E …À„›‰t$ÇD$‹UÔ‹‰$èÃM‰EØ…À„H‹UÔ‹‹P‰T$‰t$‰$è M‹U ‰…À„Ù‹E…Àt ‹UЋ:…ÿ„‰‹M…É„‹EЋ…Ò„–èSM‰EÜ…À„¹‹UЋ‰$è³M‹U‰…À„Ÿ‹UÌ‹…À„x‰Ö‹U‰UàëB‰D$‹‰D$‹E܉$èIL…Àxo‹‰D$‹U‹‰$è,M…ÀxX‹FƒÆƒEà…À„,‰÷‰D$‹UЋ‰$èM…Àu§‹E…ÀtЋEà€8tÈ‹‰D$ƒ¿Ó‰D$‹ƒéN‹‰$è®K‹EØ…Àt‹UØ‹ƒè‰…À„‹EÜ…Àt‹UÜ‹ƒè‰…Àtd‹E …Àt‹E ‹…Òt ‹ƒè‰…Àt2‹}…ÿuT¸ÿÿÿÿƒÄ<[^_]ËEÔ‹‰EØ‹@9ð‹E؃éþÿÿ‹U ‹‹P‰$ÿR‹}…ÿtÀë‹B‰$ÿP‹E …Àu“륋E‹…Òt£‹ƒè‰…Àu˜‹U‹‹P‰$ÿR¸ÿÿÿÿëˆè½K‹U‰…À„ÇEÜ‹UØ‹EÔ‰‹UÜ‹EЉ1ÀƒÄ<[^_]ÉD$ ‰t$ƒƒÓ‰D$‹ƒéN‹‰$èŒJ‹}…ÿ„#ÿÿÿérÿÿÿ‹EЋ‰EÜ…Àtƒ‹E…Àtž‹UЋ…Àt•‹UÌ‹…ÀtŒ‰Ö‹U‰Uäë‹FƒÆƒEä…À„pÿÿÿ‹Uä‰÷€:tä‰D$‹UЋ‰$èXK…ÀuÏéFþÿÿ‹B‰$ÿPéqþÿÿ‹EÌ‹0…ö„jýÿÿ‹U€:u3‹}̃Ç‹7…ö„Rýÿÿ¶BƒÂ„ÀtèÇEÜéüýÿÿÇEÜéþÿÿ‰ÇÇEÜéâýÿÿÇEÜéöýÿÿU‰åWVƒì ‰Ç‰Uô‰MðèJ‰Æ‹Eð‰D$‹Uô‰T$‰<$èÇI‹Eð‰D$‹Uô‰T$‰<$èeJèfI…À…“‹ƒ‹Uô‹ƒ‹Uð‹ƒ‹V4…Òt ‹ƒè‰…Àt^‹V8…Òt ‹ƒè‰…Àt>‹V<…Òt ‹ƒè‰…Àt‹‰F4‹Uô‹‰F8‹Uð‹‰F<1ÀƒÄ ^_]ËF<‹P‰$ÿRëÔ‹F8‹P‰$ÿRë´‹F4‹P‰$ÿR딋…Òt ‹ƒè‰…Àt\‹Eô‹…Òt ‹ƒè‰…Àt8‹Eð‹…Òu ¸ÿÿÿÿƒÄ ^_]˃艅Àué‹Uð‹‹P‰$ÿR¸ÿÿÿÿérÿÿÿ‹Uô‹‹P‰$ÿR븋‹P‰$ÿRë—U‰åWVSƒì<èåç‰E؉փωD$‹ƒUB‰$èŠH‰Ç…À„Ï…ö„Ó‰uäÇEÜ‹ƒQB‰$è÷G‰Æ…À„‚èÄH‰Eà…À„†‹Uä‰T$‰D$‰t$ ‹U؉T$ƒ ωD$‰<$èdH‰Æ‹EÜ…Àt‹UÜ‹ƒè‰…ÀtK‹ƒè‰…Àt1‹Eà…Àt‹Uà‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄ<[^_]ÃÇEà믋G‰<$ÿPëÄ1öë ‹B‰$ÿPëª1ö‰ðƒÄ<[^_]ÃÇ$è…G‰EÜ…Àt‰Eäéÿÿÿ1öÇEàéuÿÿÿU‰åWVSƒìlè¬æ‰Æ‹ƒ$A‰$èÂG‰EÔ…À„‡‰4$è¯G‰Ç…À„拃A‰$èÊF‰EØ…À„ÍÇ$èåF‰Æ…À„¹ƒXÉ$èhG‰EÜ…À„u‰D$4‹ƒ A‰D$0‰|$,‹UÔ‰T$(‰t$$‰t$ ‰t$‰t$‰t$‹E܉D$ÇD$ ÇD$ÇD$Ç$èÓF‰Eà…ÀtOè³FÇD$ ‹U؉T$‹Uà‰T$‰$è&G‰Eä…Àt,‰Â‹ƒ A‰B@‰$èÆFë1öÇEÜÇEàÇEä‹UÔ‹ƒè‰…Àt}…ÿt‹ƒè‰…À„‘…öt ‹ƒè‰…Àtl‹uÜ…öt‹UÜ‹ƒè‰…Àt;‹Mà…Ét‹Uà‹ƒè‰…ÀtM‹Uä…Òt‹U䋃艅Àu ‹B‰$ÿPƒÄl[^_]ËB‰$ÿP뺋UÔ‹B‰$ÿPérÿÿÿ‹F‰4$ÿP뉋B‰$ÿP먋G‰<$ÿPéaÿÿÿÇEàÇEäé-ÿÿÿU‰åWVSƒìLè¡ä‹}ÇE䋃ýB‰EàEà‰D$Eä‰D$ƒå/‰D$ ƒÕˉD$‹E‰D$‹E ‰$è0E…Àu 1ö‰ðƒÄL[^_]ËE䃋Eàƒ‹Eà‰$è)E‰Æè‡D…À„‡‹ƒ?‹‰ƒ?ǃ?ŽƒÙËèDýÿÿ1ö‹ƒè‰…Àt2‹E䋃ꉅÒt;‹Eà‹ƒê‰…Òu‹Eà‹P‰$ÿR‰ðƒÄL[^_]ËG‰<$ÿP‹E䋃ꉅÒuÅ‹Eä‹P‰$ÿRë·‹Eä‰$èûD…À„ˉD$‹G‰D$‹G‰D$‰t$ ‹G ‰D$‹G‰D$‹G‰$è\Âÿÿ…À„±‰$ènD‰EÐ…ÀthÇ$èÀC‰Æ…À„œ‹EЉF ‰t$‹ƒËF‹‰$è(D‰EÔ…À„΋ƒè‰…À„±1É1Ò‹EÔè’ôÿÿ‹UÔ‹ƒè‰…À„…‹ƒ?‹‰ƒ?ǃ?‘é³þÿÿ‹ƒ?‹‰ƒ?ǃ?é–þÿÿ‹ƒFƒ‰Æé“þÿÿ‹ƒ?‹‰ƒ?ǃ?‘‹UЋƒè‰…À…\þÿÿ‹UЋB‰$ÿPéKþÿÿ‹B‰$ÿPémÿÿÿ‹F‰4$ÿPéAÿÿÿ‹ƒ?‹‰ƒ?ǃ?‘‹ƒè‰…À…þÿÿ‹F‰4$ÿPéúýÿÿU‰åWVSƒì,èõá‹}ƒ<‰D$ ƒ¡¾‰D$‹E‰D$‹E ‰$è¢B…Àthƒ‹“ÓCƒ‹G…Àta‹³+Dƒ‰Uà‹ƒè‰…Àt(‹ƒè‰…Àt ‰ðƒÄ,[^_]ËG‰<$ÿP‰ðƒÄ,[^_]ËB‰$ÿP‹ƒè‰…ÀuÏë×1ö‰ðƒÄ,[^_]˃5?ƒ‹ƒè‰…À„§‹ƒ5?‰EàÇ$è²A‰Æ…ÀtI‹Uàƒ‰P ‰D$‹ƒûC‹‰$èB‰Eä…Àtv‹ƒè‰…ÀtR1É1Ò‹Eäèòÿÿ‹U䋃艅Àt-‹ƒq<‹‰ƒm<ǃi<ŠƒYÉèûùÿÿ1ö‹Uàéÿÿÿ‹B‰$ÿPëÈ‹F‰4$ÿP룋B‰$ÿPéKÿÿÿ‹ƒq<‹‰ƒm<ǃi<Š‹ƒè‰…Àu¤‹F‰4$ÿPë™U‰åWVSì|`èHàEà‰D$Eä‰D$ƒ˜+‰D$ ƒü½‰D$‹E‰D$‹E ‰$èê@…Àu1ö‰ðÄ|`[^_]ËEƒ‹“&Bƒ‹ƒ€;‰D$‹M‰ $èO@‰Ç…À„GÇD$‰$èÚ@‰Æ…À„U‹ƒè‰…À„‹ƒè‰…À„óèg£ÿÿ‰…¸Ÿÿÿ…À„v‰EØÇ$è'@‰…ÔŸÿÿ…À„‹“&B‹ƒè‰…À„#‹UØ…Ò„šE؉D$(E܉D$$ÇD$ …ØŸÿÿ‰D$‹M‹A‰D$‹A‰D$‹A ‰D$‹A‰D$ ‹Eà‰D$‹Eä‰D$‰$è ÎÿÿƒÀ„‹EÜ…À~Ç…°ŸÿÿèŸÿÿ‰ÈŸÿÿë;‹ƒè‰…À„‡‹ƒè‰…À„ƒ…°Ÿÿÿƒ…ÈŸÿÿ‹…°Ÿÿÿ;EÜ=ÿÿÿ‹ƒ`;‰D$‹•ÔŸÿÿ‰$èí>‰…Пÿÿ…À„¬‹ÈŸÿÿ‹Að‰$èi?‰Ç…À„º‹•ÈŸÿÿ‹Bô‰$èN?‰…ÌŸÿÿ…À„î‹ÈŸÿÿ‹Aø‰$è/?‰…¼Ÿÿÿ…À„‹•ÈŸÿÿ‹Bü‰$è?‰…ÀŸÿÿ…À„4‹ÈŸÿÿ‹‰$èò>‰…ÄŸÿÿ…À„IÇ$èV>‰Æ…À„\‰x ‹…ÌŸÿÿ‰F‹•¼Ÿÿÿ‰V‹ÀŸÿÿ‰N‹…ÄŸÿÿ‰FÇ$è>‰Ç…À„H‰p ‰D$‹•Пÿÿ‰$è†>‰Æ…À„F‹ÐŸÿÿ‹ƒè‰…À…‚þÿÿ‹A‰ $ÿP‹ƒè‰…À…yþÿÿ‹G‰<$ÿP‹ƒè‰…À…pþÿÿ‹F‰4$ÿPébþÿÿ‹ƒÄ:‹‰ƒÀ:ǃ¼:y‹ƒ&B‰…´ŸÿÿƒÜÇè)öÿÿ1ö‹´Ÿÿÿ‹ƒè‰…Àta‹U‹ƒè‰…À…°üÿÿ‹B‰$ÿP‰ðÄ|`[^_]ËF‰4$ÿPéÿüÿÿ‹G‰<$ÿPéâüÿÿ‹ƒÄ:‹‰ƒÀ:ǃ¼:xéuÿÿÿ‹A‰ $ÿP딋ƒÄ:‹‰ƒÀ:ǃ¼:xDžПÿÿÇ…ÌŸÿÿÇ…¼ŸÿÿÇ…ÀŸÿÿÇ…ÄŸÿÿ‹“&B‰•´Ÿÿÿ‹ƒè‰…À„¾‹•Пÿÿ…Ò„ 1ö‹•Пÿÿ‹ƒè‰…À„ç‹…ÌŸÿÿ…Àt‹ÌŸÿÿ‹ƒè‰…À„º‹…¼Ÿÿÿ…Àt‹•¼Ÿÿÿ‹ƒè‰…À„‹…ÀŸÿÿ…Àt‹ÀŸÿÿ‹ƒè‰…Àtg‹…ÄŸÿÿ…Àt‹•ÄŸÿÿ‹ƒè‰…ÀtA…ö„pþÿÿ‹ƒè‰…À…aþÿÿ‹F‰4$ÿPéSþÿÿ‹G‰<$ÿPé4ÿÿÿ‹B‰$ÿPéÏûÿÿ‹B‰$ÿPë´‹A‰ $ÿP뎋B‰$ÿPéeÿÿÿ‹A‰ $ÿPé8ÿÿÿ‹B‰$ÿPé ÿÿÿ1öéÿÿÿ‹ƒÄ:‹‰ƒÀ:ǃ¼:{éÇýÿÿ‹ƒÄ:‹‰ƒÀ:ǃ¼:‹…ÔŸÿÿ‰…´Ÿÿÿéªýÿÿ‹ƒÄ:‹‰ƒÀ:ǃ¼:1ö‹…ÔŸÿÿ‰…´ŸÿÿÇ…ÄŸÿÿÇ…ÀŸÿÿÇ…¼ŸÿÿÇ…ÌŸÿÿéVþÿÿ‹ƒÄ:‹‰ƒÀ:ǃ¼:‹•ÔŸÿÿ‰•´ŸÿÿÇ…¼ŸÿÿÇ…ÀŸÿÿÇ…ÄŸÿÿéðýÿÿ‹ƒÄ:‹‰ƒÀ:ǃ¼:‹ÔŸÿÿ‰´ŸÿÿÇ…ÀŸÿÿÇ…ÄŸÿÿé³ýÿÿ‹ƒÄ:‹‰ƒÀ:ǃ¼:‹…ÔŸÿÿ‰…´ŸÿÿÇ…ÄŸÿÿé€ýÿÿ‹ƒÄ:‹‰ƒÀ:ǃ¼:‹•ÔŸÿÿ‰•´ŸÿÿéWýÿÿ‹ƒÄ:‹‰ƒÀ:ǃ¼:‹ÔŸÿÿ‰´Ÿÿÿé.ýÿÿ‹ƒÄ:‹‰ƒÀ:ǃ¼:é¡þÿÿ‹ƒÄ:‹‰ƒÀ:ǃ¼:‹…ÔŸÿÿ‰…´ŸÿÿÇ…ÌŸÿÿÇ…¼ŸÿÿÇ…ÀŸÿÿÇ…ÄŸÿÿéÀüÿÿ‹ƒÄ:‹‰ƒÀ:ǃ¼:}éþÿÿ‹•¸Ÿÿÿ‰$èþœÿÿ‹ÔŸÿÿƒ‰Î‰´Ÿÿÿé²ûÿÿU‰åWVSƒìLèØEà‰D$Eä‰D$ƒÛ#‰D$ ƒ3¶‰D$‹E‰D$‹E ‰$è!9…Àu 1ö‰ðƒÄL[^_]ËEƒ‹ƒ·3‰D$‹U‰$è’8‰Æ…À„ÇD$‰$è9‰Ç…À„m‹ƒè‰…À„Ú‹ƒè‰…À„Ù‹Eä‰$èà8‰Æ…Àtp‹Eà‰$èÏ8‰EÔ…À„ÚÇ$è68‰Ç…À„ĉp ‹EÔ‰G‹Uƒ‰W‰|$‹ƒ[2‰$è”8‰Æ…À„‹ƒè‰…Àu0‹G‰<$ÿPë%‹ƒû2‹‰ƒ÷2ǃó2rƒCÀè€ðÿÿ1ö‹U‹ƒè‰…À…áþÿÿ‹B‰$ÿP‰ðƒÄL[^_]ËF‰4$ÿPéÿÿÿ‹G‰<$ÿPéÿÿÿ‹ƒû2‹‰ƒ÷2ǃó2q똋ƒû2‹‰ƒ÷2ǃó2r‹ƒè‰…ÀtL‹MÔ…É„jÿÿÿ‹UÔ‹ƒè‰…À…Xÿÿÿ‹B‰$ÿPéJÿÿÿ‹ƒû2‹‰ƒ÷2ǃó2qÇEÔë©‹F‰4$ÿPë©‹ƒû2‹‰ƒ÷2ǃó2r‹ƒè‰…À…÷þÿÿ‹G‰<$ÿPééþÿÿU‰åWVSƒìLè ÖÇEäÇEÜUE ÇD$ M܉L$ÇD$Ç$‹ˆ!èéÿÿ…Àˆ†Eà‰D$Eä‰D$ƒˆ!‰D$ ƒ ¾‰D$‹E‰D$‹E ‰$è}6…À„‹Eƒ‹E䃋ƒh1‰D$‹U‰$èð5‰Ç…À„@ÇD$‰$è{6‰Æ…À„‹‹ƒè‰…À„n‹ƒè‰…À„Q‹Eä‰$è6‰Â…À„ƒÐü‰D$‰$è5‰Æ…À„•‹Eà‰$è2—ÿÿ‰Ç…À„‹Eà‰D$ÇD$ ‰D$‰|$‰4$è»™ÿÿ‰EЉ4$è5‹EÐ;Eà„Ç$è?5‰EÔ…Àt_‹ƒ\3ƒ‹ƒ\3‹UÔ‰B ‰T$‹ƒJ8‹‰$è›5‰Æ…À„Ú‹UÔ‹ƒè‰…À„Ž1É1Ò‰ðèæÿÿ‹ƒè‰…À„‚‹ƒœ0‹‰ƒ˜0ǃ”0k닃œ0‹‰ƒ˜0ǃ”0aƒ$¾èWíÿÿ1ö‹UÜ…Òt‹ƒè‰…À„Ï‹U‹ƒè‰…À„¯‹E䋃ꉅ҄Œ‹U …Òt‹ƒè‰…À„¦‹U…Òt‹ƒè‰…Àu ‹E‹P‰$ÿR‰ðƒÄL[^_]ËU …Òt‹ƒè‰…À„w‹U…Òt‹ƒè‰…À„r‹UÜ…Òt‹ƒè‰…À„—1ö‰ðƒÄL[^_]ËEä‹P‰$ÿRécÿÿÿ‹B‰$ÿPéCÿÿÿ‹EÜ‹P‰$ÿRé ÿÿÿ‹E ‹P‰$ÿRéIÿÿÿ‹ƒœ0‹‰ƒ˜0ǃ”0béÏþÿÿ‹F‰4$ÿPé¡ýÿÿ‹G‰<$ÿPé„ýÿÿ‹ƒœ0‹‰ƒ˜0ǃ”0aÇEÔ‹ƒè‰…À„Ö‹uÔ…ö„zþÿÿ‹UÔ‹ƒè‰…À…hþÿÿ‹B‰$ÿPéZþÿÿ‹Eä‰D$‹ƒX3‰$è´3‰Ç…ÀtdÇ$èÚ2‰EÔ…À„Þ‰x ‰D$‹ƒJ8‹‰$èD3‰Æ…À„ ‹UÔ‹ƒè‰…À„Ö1É1Ò‰ðè­ãÿÿ‹ƒè‰…À„®‹ƒœ0‹‰ƒ˜0ǃ”0dé¾ýÿÿ‹B‰$ÿPédýÿÿ‹F‰4$ÿPépýÿÿ‹EÜ‹P‰$ÿR1öé þÿÿ‰Â‹E‰P‰x‹ƒÄ2‰D$‹E‰$èý1‰EÔ…À„ÃÇ$èÿ1‰Ç…À„ç‹E܉D$‰|$‹UÔ‰$èC2‰Æ…À„d‹UÔ‹ƒè‰…À„'‹ƒè‰…À„ ‹ƒè‰…À„틃þ7ƒ‰Æéûüÿÿ‹E ‹P‰$ÿRéxýÿÿ‹E‹P‰$ÿRé}ýÿÿ‹ƒœ0‹‰ƒ˜0ǃ”0eé¯üÿÿ‹G‰<$ÿPéþÿÿ‹ƒœ0‹‰ƒ˜0ǃ”0né„üÿÿ‹ƒœ0‹‰ƒ˜0ǃ”0kéíýÿÿ‹ƒœ0‹‰ƒ˜0ǃ”0néÐýÿÿ‹ƒœ0‹‰ƒ˜0ǃ”0dé™ýÿÿ‹F‰4$ÿPéDþÿÿ‹B‰$ÿPéþÿÿ‹F‰4$ÿPéÿÿÿ‹G‰<$ÿPéèþÿÿ‹B‰$ÿPéËþÿÿ‹ƒœ0‹‰ƒ˜0ǃ”0déPýÿÿ‹ƒœ0‹‰ƒ˜0ǃ”0néýÿÿU‰åWVSƒì<è»Ï‹u‹ƒ.‰EäEä‰D$ƒ/‰D$ ƒ¸‰D$‹E‰D$‹E ‰$èX0…Àu 1ÿ‰øƒÄ<[^_]ËE䃋Eä‰$èä/ƒøŒ°teF‰D$ F ‰D$‹F‰D$‹F‰$è8´ÿÿ…À„°‰F‹ƒ™1ƒ‰Ç‹ƒè‰…Àtb‹E䋃ꉅÒuˆ‹Eä‹P‰$ÿR‰øƒÄ<[^_]ÃF‰D$ F ‰D$‹F‰D$‹F‰$è·¸ÿÿ…ÀuŸ‹ƒ7*‹‰ƒ3*ǃ/*Zë#‹F‰4$ÿPë“‹ƒ7*‹‰ƒ3*ǃ/*Wƒ¸èÈçÿÿ1ÿé^ÿÿÿ‹ƒ7*‹‰ƒ3*ǃ/*XëÔU‰åWVSƒì\èS΋EÇD$‰$ÿ˜‰Æ…À„á‹E ‰Eà‹U‰UäÇEÔ‹ƒ£,‰EÜ‹ƒ§,‰EØUäEàÇD$ MÔ‰L$ÇD$Ç$‹Ïèáÿÿ…ÀxzE؉D$E܉D$ƒÏ‰D$ ƒÓ¶‰D$‹Eä‰D$‹Eà‰$è.…Àu]‹Uà…Òt‹ƒè‰…À„V‹Uä…Òt‹ƒè‰…À„\‹UÔ…Òt‹ƒè‰…À„b‹ƒè‰…À„®1ö‰ðƒÄ\[^_]ËE܃‹E؃‹»10ƒ‹E؉$è.‰EÐè{-…À„‹ƒÏ(‹‰ƒË(ǃÇ(6‰}¼ƒ×¶è5æÿÿ¿ÿÿÿÿ‹UÔ…Òt‹ƒè‰…Àu ‹EÔ‹P‰$ÿR‹U¼‹ƒè‰…À„‹ƒè‰…À„é‹EÜ‹ƒê‰…Ò„Æ‹EØ‹ƒê‰…Ò„£‹Uà…Òt‹ƒè‰…Àu ‹Eà‹P‰$ÿR‹Uä…Òt‹ƒè‰…Àu ‹Eä‹P‰$ÿR…ÿˆàþÿÿ‰ðƒÄ\[^_]ËEà‹P‰$ÿR‹Uä…Ò…šþÿÿé¤þÿÿ‹Eä‹P‰$ÿR‹UÔ…Ò…”þÿÿéžþÿÿ‹EÔ‹P‰$ÿR‹ƒè‰…À…’þÿÿë>‹EØ‹P‰$ÿRéLÿÿÿ‹EÜ‹P‰$ÿRé)ÿÿÿ‹F‰4$ÿPé ÿÿÿ‹B‰$ÿPéìþÿÿ‹F‰4$ÿP1öéDþÿÿ‹EЉFÇ$è‘,‰EÄ…ÀtVEЉD$‹EĉD$‹E؉$è€,…Àˆ1Àƒ}ПÀ‰EЋUÄ‹ƒè‰…À„S‹EÐ…Àu0‹ƒ10‰E¼1ÿé=þÿÿ‹ƒÏ(‹‰ƒË(ǃÇ(7‰}¼é þÿÿ‹E܉$èh,‰Â…À„zƒõ‰D$‰$èé*‰E¸…À•À¶À‰EÐ…À„r‹E¸‰D$‹F‰$肊ÿÿ…À„,‰F‹U¸‰$èñ*1Àƒ~•À‰EÐ…À„Wÿÿÿ‹ƒ÷*‰D$‰4$èî*‰EÄ…À„;Ç$èð*‰EÀ…À„™‹EÔ‰D$‹EÀ‰D$‹Uĉ$è0+‰Ç…À„v‹UÄ‹ƒè‰…À„V‹UÀ‹ƒè‰…À„6‹ƒè‰…À…Íþÿÿ‹G‰<$ÿP‹ƒ10‰E¼1ÿéýÿÿ‹B‰$ÿPéŸþÿÿ‹ƒÏ(‹‰ƒË(ǃÇ(7ÇEÀ‹UÄ‹ƒè‰…À„ ‹}À…ÿ„‹“10‰U¼‹UÀ‹ƒè‰…À…Œüÿÿ‹B‰$ÿPé~üÿÿ‹ƒÏ(‹‰ƒË(ǃÇ(8‰}¼é^üÿÿ‹E܉D$‹ƒƒ+‰$è‚*‰E¼…À„⋃艅À„ÅÇ$è¨)‰EÀ…ÀtV‹U¼ƒ‹EÀ‰P ‰D$‹ƒ}0‹‰$è *‰Ç…À„ò‹UÀ‹ƒè‰…À„Ò1É1Ò‰øèvÚÿÿ‹ƒè‰…À„ª‹ƒÏ(‹‰ƒË(ǃÇ(@é©ûÿÿ‹UÄ‹B‰$ÿPéæþÿÿ‹ƒ10‰E¼éŠûÿÿ‹ƒÏ(‹‰ƒË(ǃÇ(:‰}¼éjûÿÿ‹G‰<$ÿPé-ÿÿÿ‹ƒÏ(‹‰ƒË(ǃÇ(?‰}¼é<ûÿÿ‹ƒÏ(‹‰ƒË(ǃÇ(=‰}¼éûÿÿ‹G‰<$ÿPéHÿÿÿ‹B‰$ÿPé ÿÿÿ‹ƒÏ(‹‰ƒË(ǃÇ(@éEþÿÿ‹B‰$ÿPé¼ýÿÿ‹B‰$ÿPéœýÿÿ‹ƒÏ(‹‰ƒË(ǃÇ(=éæýÿÿU‰åWVSƒìLè–Ç‹EÇD$‰$ÿ˜‰Æ…À„‹ƒ"‰F‹ƒt)‰†$`ƒÇEÜE܉D$Eà‰D$Eä‰D$ƒ‰D$ ƒF°‰D$‹E‰D$‹U ‰$èô'…À„ ƒ‹E܃‹»v!‹E܉EÔ…ÿ„J‹@9Çt‰|$‰$è‰(…À„œèªŠÿÿ…À„‰F ‰F‹E䉆`‹Eà‰† `‹E܃‹†$`‹ƒê‰…Ò„Á‹E܉†$`1ÿ‹ƒè‰…Àt;‹EÜ‹ƒê‰…Òt…ÿy‹ƒè‰…À„Ô1ö‰ðƒÄL[^_]ËEÜ‹P‰$ÿRëÓ‹F‰4$ÿP뺋UÔ‹B‹@ ‰D$‹G ‰D$ ƒB°‰D$ƒ^°‰D$‹ƒ°)‹‰$è^&‹ƒ"‹‰ƒ"ǃ "ƒ–°è-ßÿÿ¿ÿÿÿÿéJÿÿÿ‹†$`‹P‰$ÿRé+ÿÿÿ‹ƒ"‹‰ƒ"ǃ " 뽃J°‰D$‹ƒ¤)‹‰$èé%뉋F‰4$ÿP1öéÿÿÿU‰åWVSƒì,èuÅ‹Eƒ‹U‹B‰$ÿ…Àˆ)@‹U4‹F‰$èU&‰EÜ…À„E‹F‰$è?&‰Ç…Àtt‹F‰$è.&‰Eà…À„v‹F ‰$è&‰Eä…À„"‹F$‰$è&‰Æ…À„›Ç$èj%…À„Ò‹U܉P ‰x‹Uà‰P‹Uä‰P‰p‰ÆéŸ‹ƒñ‹‰ƒíǃé'ÇEàÇEä1ö‹UÜ‹ƒè‰…À„Í…ÿt‹ƒè‰…À„ñ‹Eà…Àt‹Uà‹ƒè‰…À„“‹Eä…Àt‹U䋃艅À„Û…öt‹ƒè‰…À„ºƒ¥®èaÝÿÿ1ö‹U‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄ,[^_]˃ñ‹‰ƒíǃé'븋ƒñ‹‰ƒíǃé(1öé/ÿÿÿ‹B‰$ÿPé_ÿÿÿ‹UÜ‹B‰$ÿPé"ÿÿÿ‹ƒñ‹‰ƒíǃé'ÇEä1öéêþÿÿ‹G‰<$ÿPéÿÿÿ‹F‰4$ÿPé8ÿÿÿ‹B‰$ÿPéÿÿÿ‹ƒñ‹‰ƒíǃé(é£þÿÿ1É1Ò‹ƒw'‹èÉÔÿÿ‹ƒñ‹‰ƒíǃé*éßþÿÿ‹ƒñ‹‰ƒíǃé'éXþÿÿU‰åWVSƒì,èÚ‹}ƒê‰D$ ƒ†Ÿ‰D$‹E‰D$‹E ‰$è‡#…Àt=ƒ‹G…Àt?‹ƒ¸$ƒ‰Æ‹ƒè‰…Àt ‰ðƒÄ,[^_]ËG‰<$ÿP‰ðƒÄ,[^_]Ã1ö‰ðƒÄ,[^_]ÃÇ$èã"‰Æ…Àt[‹ƒ* ƒ‹ƒ* ‰F ‰t$‹ƒà$‹‰$èC#‰Eä…Àtc‹ƒè‰…ÀtM1É1Ò‹EäèµÓÿÿ‹U䋃艅Àu ‹B‰$ÿP‹ƒV‹‰ƒRǃN˜ƒ:¬èÛÿÿ1öé5ÿÿÿ‹F‰4$ÿP먋ƒV‹‰ƒRǃN˜‹ƒè‰…ÀuÀ‹F‰4$ÿPëµU‰åWVSìŒ`èƒÁEà‰D$Eä‰D$ƒ ‰D$ ƒ7Ÿ‰D$‹E‰D$‹E ‰$è%"…Àu1ö‰ðÄŒ`[^_]ËEƒ‹“a#ƒ‹ƒ»‰D$‹E‰$èŠ!‰Ç…À„jÇD$‰$è"‰Æ…À„x‹ƒè‰…À„3‹ƒè‰…À„袄ÿÿ‰…¸Ÿÿÿ…À„™‰EØÇ$èb!‰…ÔŸÿÿ…À„°‹“a#‹ƒè‰…À„F‹MØ…É„½‹E‹PE؉D$8E܉D$4ÇD$0…ØŸÿÿ‰D$,‹B,‰D$(‹B ‰D$$‹B‰D$ B‰D$‹B‰D$‹B‰D$‹B‰D$‹B‰D$ ‹Eà‰D$‹Eä‰D$‰ $褳ÿÿƒÀ„#‹EÜ…ÀŽmÿÿÿÇ…°Ÿÿÿ…èŸÿÿ‰…ÈŸÿÿë;‹ƒè‰…À„‡‹ƒè‰…À„ƒ…°Ÿÿÿƒ…ÈŸÿÿ‹…°Ÿÿÿ;EÜÿÿÿ‹ƒ›‰D$‹…ÔŸÿÿ‰$è ‰…Пÿÿ…À„¬‹•ÈŸÿÿ‹Bð‰$è ‰Ç…À„º‹•ÈŸÿÿ‹Bô‰$èf ‰…ÌŸÿÿ…À„î‹•ÈŸÿÿ‹Bø‰$èG ‰…¼Ÿÿÿ…À„‹•ÈŸÿÿ‹Bü‰$è( ‰…ÀŸÿÿ…À„4‹•ÈŸÿÿ‹‰$è ‰…ÄŸÿÿ…À„IÇ$èn‰Æ…À„\‰x ‹…ÌŸÿÿ‰F‹•¼Ÿÿÿ‰V‹…ÀŸÿÿ‰F‹•ÄŸÿÿ‰VÇ$è1‰Ç…À„H‰p ‰D$‹…Пÿÿ‰$螉ƅÀ„F‹•Пÿÿ‹ƒè‰…À…‚þÿÿ‹B‰$ÿP‹ƒè‰…À…yþÿÿ‹G‰<$ÿP‹ƒè‰…À…pþÿÿ‹F‰4$ÿPébþÿÿ‹ƒÿ‹‰ƒûǃ÷†‹“a#‰•´Ÿÿÿƒ«èA×ÿÿ1ö‹•´Ÿÿÿ‹ƒè‰…Àta‹U‹ƒè‰…À…üÿÿ‹B‰$ÿP‰ðÄŒ`[^_]ËF‰4$ÿPéÜüÿÿ‹G‰<$ÿPé¿üÿÿ‹ƒÿ‹‰ƒûǃ÷…éuÿÿÿ‹B‰$ÿP딋ƒÿ‹‰ƒûǃ÷…DžПÿÿÇ…ÌŸÿÿÇ…¼ŸÿÿÇ…ÀŸÿÿÇ…ÄŸÿÿ‹ƒa#‰…´Ÿÿÿ‹ƒè‰…À„¾‹…Пÿÿ…À„ 1ö‹•Пÿÿ‹ƒè‰…À„狽̟ÿÿ…ÿt‹•ÌŸÿÿ‹ƒè‰…À„º‹¼Ÿÿÿ…Ét‹•¼Ÿÿÿ‹ƒè‰…À„‹•ÀŸÿÿ…Òt‹•ÀŸÿÿ‹ƒè‰…Àtg‹…ÄŸÿÿ…Àt‹•ÄŸÿÿ‹ƒè‰…ÀtA…ö„pþÿÿ‹ƒè‰…À…aþÿÿ‹F‰4$ÿPéSþÿÿ‹G‰<$ÿPé4ÿÿÿ‹B‰$ÿPé¬ûÿÿ‹B‰$ÿPë´‹B‰$ÿP뎋B‰$ÿPéeÿÿÿ‹B‰$ÿPé8ÿÿÿ‹B‰$ÿPé ÿÿÿ1öéÿÿÿ‹ƒÿ‹‰ƒûǃ÷ˆéÇýÿÿ‹ƒÿ‹‰ƒûǃ÷‘‹•ÔŸÿÿ‰•´Ÿÿÿéªýÿÿ‹ƒÿ‹‰ƒûǃ÷‘1ö‹…ÔŸÿÿ‰…´ŸÿÿÇ…ÄŸÿÿÇ…ÀŸÿÿÇ…¼ŸÿÿÇ…ÌŸÿÿéVþÿÿ‹ƒÿ‹‰ƒûǃ÷‘‹…ÔŸÿÿ‰…´ŸÿÿÇ…¼ŸÿÿÇ…ÀŸÿÿÇ…ÄŸÿÿéðýÿÿ‹ƒÿ‹‰ƒûǃ÷‘‹•ÔŸÿÿ‰•´ŸÿÿÇ…ÀŸÿÿÇ…ÄŸÿÿé³ýÿÿ‹ƒÿ‹‰ƒûǃ÷’‹…ÔŸÿÿ‰…´ŸÿÿÇ…ÄŸÿÿé€ýÿÿ‹ƒÿ‹‰ƒûǃ÷’‹•ÔŸÿÿ‰•´ŸÿÿéWýÿÿ‹ƒÿ‹‰ƒûǃ÷‘‹…ÔŸÿÿ‰…´Ÿÿÿé.ýÿÿ‹ƒÿ‹‰ƒûǃ÷‘é¡þÿÿ‹ƒÿ‹‰ƒûǃ÷‘‹•ÔŸÿÿ‰•´ŸÿÿÇ…ÌŸÿÿÇ…¼ŸÿÿÇ…ÀŸÿÿÇ…ÄŸÿÿéÀüÿÿ‹ƒÿ‹‰ƒûǃ÷Šéþÿÿ‹•¸Ÿÿÿ‰$è~ÿÿ‹…ÔŸÿÿƒ‰Æ‰…´Ÿÿÿ‰Âé°ûÿÿU‰åWVSƒìL蕹Eà‰D$Eä‰D$ƒ9‰D$ ƒI—‰D$‹E‰D$‹E ‰$è7…Àu 1ö‰ðƒÄL[^_]ËEƒ‹ƒÍ‰D$‹U‰$訉ƅÀ„ÇD$‰$è3‰Ç…À„m‹ƒè‰…À„Ú‹ƒè‰…À„Ù‹Eä‰$èö‰Æ…Àtp‹Eà‰$èå‰EÔ…À„ÚÇ$èL‰Ç…À„ĉp ‹EÔ‰G‹Uƒ‰W‰|$‹ƒy‰$誉ƅÀ„‹ƒè‰…Àu0‹G‰<$ÿPë%‹ƒ‹‰ƒ ǃ ƒY£è–Ñÿÿ1ö‹U‹ƒè‰…À…áþÿÿ‹B‰$ÿP‰ðƒÄL[^_]ËF‰4$ÿPéÿÿÿ‹G‰<$ÿPéÿÿÿ‹ƒ‹‰ƒ ǃ ~똋ƒ‹‰ƒ ǃ ‹ƒè‰…ÀtL‹EÔ…À„jÿÿÿ‹UÔ‹ƒè‰…À…Xÿÿÿ‹B‰$ÿPéJÿÿÿ‹ƒ‹‰ƒ ǃ ~ÇEÔë©‹F‰4$ÿPë©‹ƒ‹‰ƒ ǃ ‹ƒè‰…À…÷þÿÿ‹G‰<$ÿPééþÿÿU‰åWVSì<è3·‹uÇEäEä‰D$ƒã‰D$ ƒ'¡‰D$‹E‰D$‹E ‰$èÒ…Àu1ÿ‰øÄ<[^_]ËE䃋Eä‰$èA‰Â…Àt^ÇD$…äûÿÿ‰D$‰$èOÿÿ…Àt@‰F‹ƒƒ‰Ç‹ƒè‰…ÀtW‹E䋃ꉅÒu”‹Eä‹P‰$ÿR‰øÄ<[^_]˃¯‹‰ƒ«ǃ§yƒ+¡è”Ïÿÿ1ÿ‹ƒè‰…Àu©‹F‰4$ÿPëžU‰åWVSƒìLè(¶‹EÇD$‰$ÿ˜‰Æ…À„Ä‹ƒ˜‰E䋃œ‰EàEà‰D$Eä‰D$ƒà‰D$ ƒ¨ž‰D$‹E‰D$‹U ‰$èš…Àtkƒ‹E䃋Eàƒ‹ƒ9Eä•À¶À‰EÜ…À…¤‹EÜ…À…Ô1ÿ‹ƒè‰…Àts‹E䋃ꉅÒtI‹Eà‹ƒê‰…Òt)…ÿx ‰ðƒÄL[^_]˃艅À„Ó1ö‰ðƒÄL[^_]ËEà‹P‰$ÿR…ÿyËëÓ‹Eä‹P‰$ÿR‹Eà‹ƒê‰…Òu«ëÒ‹F‰4$ÿP‹E䋃ꉅÒu„ëËE܉D$‹ƒ˜‰D$‹Eà‰$èó…Àˆ1Àƒ}Ü”À‰EÜ‹EÜ…À„,ÿÿÿ‹ƒ\‰D$‰4$è‰Ç…Àt|Ç$è‰EÐ…À„’‹E䃋Eä‹UЉB ‰T$‰<$è…‰EÔ…Àtp‹ƒè‰…À„Ì‹UЋƒè‰…À„¬‹UÔ‹ƒè‰…À…¨þÿÿ‹B‰$ÿP1ÿéšþÿÿ‹ƒ¤‹‰ƒ ǃœuƒP èGÍÿÿ¿ÿÿÿÿémþÿÿ‹ƒ¤‹‰ƒ ǃœu‹ƒè‰…ÀtV‹EÐ…ÀtÁ‹UЋƒè‰…Àu³‹B‰$ÿP먋ƒ¤‹‰ƒ ǃœt뎋B‰$ÿPéFÿÿÿ‹G‰<$ÿPé&ÿÿÿ‹G‰<$ÿP럋F‰4$ÿP1öéþÿÿU‰åWVSƒì<èU³ÇEäÇEàÇEÜ‹Eƒ‹U ƒ‹»3ƒ‰T$‹M‹A<‹@‰$è}‰Eä…À„‘‹ƒè‰…Àtx‹UäÇEä‹Eƒ‰Æ‹ƒè‰…ÀtP‹ƒè‰…Àt:‹U‹ƒè‰…Àt!‹M ‹ƒè‰…Àu ‹A‰ $ÿP‰ðƒÄ<[^_]ËB‰$ÿPëÔ‹G‰<$ÿP뻋B‰$ÿP륋G‰<$ÿPézÿÿÿ‹ƒÑ ‹‰ƒÍ ÇƒÉ ™ÇE䋃/‹‰$èÌ…À„]ƒ©è~ËÿÿMÜUàEäèÚÈÿÿ…ÀˆH‹E䋃ꉅ҄bÇEä‹Eà‹ƒê‰…Ò„8ÇEà‹EÜ‹ƒê‰…Ò„ÇEÜ‹ƒ­‰D$‹U ‰$è4‰Eä…À„‹M ‹ƒè‰…À„ï‹Eä‰E ÇEä‰$èòƒøÿ„ß‹M‹Q<A;B0Ž‹B<…À„®‹ƒa‰D$‰$èʉEà…À„.Ç$è̉EÜ…À„‹³3ƒ‰p ‹E܉D$‹Eà‰$è/‰Eä…À„‹‹Eà‹ƒê‰…Ò„4ÇEà‹EÜ‹ƒê‰…Ò„ ÇEÜ‹ƒè‰…À„‹}äÇEä‹E‹P<‹ƒa‰D$‰$è‰Eà…À„Ç$è‰Â‰EÜ…À„‹ƒ3ƒ‰B 誉Eä…À„æÇ$èk‰EÔ…À„^‰D$‹ƒ ‰D$‹Eä‰$è…Àˆ=‹MÔ‹ƒè‰…À„Ä‹Eä‰D$‹E܉D$‹Eà‰$èö‰Æ…À„y‹Eà‹ƒê‰…Ò„«ÇEà‹EÜ‹ƒê‰…Ò„´ÇEÜ‹E䋃ꉅ҄ŠÇE䋃艅À„U‹ƒI‰D$‰4$è‰Eà…À„ÞÇ$è‰EÜ…À„Ç‹E ƒ‹EÜ‹U ‰P ‹E܉D$‹Eà‰$èe‰Eä…À„›‹Eà‹ƒê‰…Òu ‹Eà‹P‰$ÿRÇEà‹EÜ‹ƒê‰…Òu ‹EÜ‹P‰$ÿRÇEÜ‹E䋃ꉅÒu ‹Eä‹P‰$ÿRÇE䃉÷‹“3éâûÿÿ‹EÜ‹P‰$ÿRéáüÿÿ‹Eà‹P‰$ÿRé·üÿÿ‹Eä‹P‰$ÿRéüÿÿ‹ƒÑ ‹‰ƒÍ ÇƒÉ žÇEÔ‹Uä…Òt ‹ƒè‰…Àtj‹Uà…Òt ‹ƒè‰…Àtf‹UÜ…Òt ‹ƒè‰…Àt-‹EÔ…Àt‹MÔ‹ƒè‰…Àt&ƒÅènÇÿÿ‹“31öé-ûÿÿ‹EÜ‹P‰$ÿRëÅ‹A‰ $ÿPëÏ‹Eä‹P‰$ÿR눋Eà‹P‰$ÿRëŒÇEÔé\ÿÿÿ‹ƒÑ ‹‰ƒÍ ÇƒÉ ›ÇEÔé8ÿÿÿ‹A‰ $ÿPéüÿÿ‹ƒÑ ‹‰ƒÍ ÇƒÉ ŸÇEÔéÿÿÿ‹ƒÑ ‹‰ƒÍ ÇƒÉ ¢ÇEÔéâþÿÿ‹ƒý‰D$‹B‰$è½ ‰EÔ…À„þ‹M‹A ‰$è?‰Eà…À„å‹U‹B‰$è&‰EÜ…À„ÌÇ$è ‰Eä…À„µ‹M ƒ‹Eä‰H ‹Uà‹Eä‰P‹UÜ‹Eä‰PÇEàÇEÜ‹Eä‰D$‹EÔ‰$èÐ ‰Eà…Àtp‹UÔ‹ƒè‰…À„ß‹E䋃ꉅ҄¼ÇEä‹Eà‹ƒê‰…Ò„’ÇEà‹M ‰ $èÅ ƒøÿ„M‹UBƒ‰Ö‹»3‰úéTùÿÿ‹ƒÑ ‹‰ƒÍ ÇƒÉ ¦‹»3é¡ýÿÿ‹ƒÑ ‹‰ƒÍ ÇƒÉ ¡ÇEÔ‹»3éwýÿÿ‹ƒÑ ‹‰ƒÍ ÇƒÉ ¢éZýÿÿ‹EÜ‹P‰$ÿRéåúÿÿ‹Eà‹P‰$ÿRé»úÿÿ‹F‰4$ÿPéÜúÿÿ‹ƒÑ ‹‰ƒÍ ÇƒÉ £‰÷ÇEÔéýÿÿ‹ƒÑ ‹‰ƒÍ ÇƒÉ ¡ÇEÔ‰÷éÞüÿÿ‹A‰ $ÿPé.ûÿÿ‹G‰<$ÿPéûÿÿ‹Eà‹P‰$ÿRéDûÿÿ‹Eä‹P‰$ÿRéeûÿÿ‹EÜ‹P‰$ÿRé;ûÿÿ‹ƒÑ ‹‰ƒÍ ÇƒÉ §ÇEÔ‹»3éeüÿÿ‹Eà‹P‰$ÿRé]þÿÿ‹Eä‹P‰$ÿRé3þÿÿ‹B‰$ÿPéþÿÿU‰åWVSƒì襪‹u‹ƒÀ‰‹V$;“ƒ t-‰$èê ƒøÿt%‰Ç‹ƒè‰…Àu ‹F‰4$ÿP‰øƒÄ[^_]Ë~ëß‹ƒ!‹‰ƒǃ”ƒ=•èÃÿÿ¿ÿÿÿÿ‹ë³U‰åWVSƒì<è$ªÇEäÇEàÇEÜÇEØUE ÇD$ Mä‰L$ÇD$Ç$‹8èü¼ÿÿ…ÀˆØƒ8‰D$ ƒÐ†‰D$‹E‰D$‹E ‰$è …À„h‹Eƒ‹» ƒ‹U‹B@‰$èè ƒøÿ„‰$è‚ ‰Eà…À„ý‹ƒè‰…À„‹‹Eà‰EÔÇEà‹ƒÔ‰D$‹U‹B0‰$è¨ ‰Æ…À„?Ç$è« ‰Eà…À„(‹U‹B@ƒ‹E‹P@‹Eà‰P ‹Eä‰D$‹Eà‰D$‰4$èÙ ‰EÜ…À„ò‹ƒè‰…À„ß‹Eà‹ƒê‰…Ò„¼ÇEà‹EÜ‹ƒê‰…Ò„’ÇE܃‹U‹B@‹ƒê‰…Ò„_‹ƒ ‹U‰B@‹EÔƒ‰Æéº‹ƒ ‹‰ƒœǃ˜Z‹Uà…Òt‹ƒè‰…À„€ÇEà‹ƒ> ‹‰$è©…À…Ý1ö‹ƒ ‰EÔ‹Uà…Òt‹ƒè‰…À„«‹UÜ…Òt‹ƒè‰…À„„‹UØ…Òt‹ƒè‰…À„]…öt‹ƒè‰…À„<ƒ•èûÀÿÿ1ö‹Uä…Òt‹ƒè‰…À„‹UÔ‹ƒè‰…À„׋U‹ƒè‰…À„·‹U …Òt‹ƒè‰…À„½‹U…Òt‹ƒè‰…Àu ‹E‹P‰$ÿR‰ðƒÄ<[^_]ËU …Òt‹ƒè‰…À„í‹U…Òt‹ƒè‰…À„Æ‹Uä…Òt‹ƒè‰…À„u1ö‰ðƒÄ<[^_]˃ ‹‰ƒœǃ˜^é»þÿÿ‹G‰<$ÿPégýÿÿ‹B‰$ÿPé;ÿÿÿ‹B‰$ÿPéÿÿÿ‹E ‹P‰$ÿRé2ÿÿÿ‹Eä‹P‰$ÿRéçþÿÿ‹F‰4$ÿPé¶þÿÿ‹EØ‹P‰$ÿRé’þÿÿ‹EÜ‹P‰$ÿRékþÿÿ‹Eà‹P‰$ÿRéDþÿÿƒä”è~¿ÿÿMØUÜEàèÚ¼ÿÿ…Àˆ±Ç$è#‰Æ…À„)‹Eà‹ƒê‰…ÒtlÇEà‹EÜ‹ƒê‰…ÒtIÇEÜ‹EØ‹ƒê‰…Òt&ÇEØ‹“ ‰UÔé þÿÿ‹Eà‹P‰$ÿRéoýÿÿ‹EØ‹P‰$ÿRëÌ‹EÜ‹P‰$ÿRë©‹Eà‹P‰$ÿR놋Eä‹P‰$ÿR1öé,þÿÿ‹ƒ ‹‰ƒœǃ˜[1ö‹“ ‰UÔé4ýÿÿ‹E‹P‰$ÿRé)þÿÿ‹E ‹P‰$ÿRéþÿÿ‹U‹B@‹P‰$ÿRéüÿÿ‹EÜ‹P‰$ÿRé]üÿÿ‹Eà‹P‰$ÿRé3üÿÿ‹F‰4$ÿPéüÿÿ‹ƒ ‹‰ƒœǃ˜\‹ƒ ‰EÔé¨üÿÿU‰åWVSƒìL诤ÇEäUE ÇD$ Mä‰L$ÇD$Ç$‹Çþ蜷ÿÿ…ÀˆûƒÇþ‰D$ ƒ[‰D$‹E‰D$‹E ‰$è!…À„†‹Eƒ‹“‰U¼‰U¸ƒ‹U‹B4…À„‰$èg‹UÇB4‹ƒ/‰D$‹B8‰$èL‰EÈ…À„„‹U¼‹ƒè‰…À„ÀÇD$‹ƒþ‰$è݉EÌ…À„L‹U¼‹ƒè‰…À„,‹ẺE¼‹U‹J…ÉŽª‹ƒ×ÿ‰D$‹E¼‰$èò‰Æ…À„Ú‹U‹B‰$èu‰Ç…À„Ç$è݉EÔ…À„‡‹Eȃ‹UÔ‰B ‰z‹Eä‰D$‰T$‰4$è‰Ç…À„[‹ƒè‰…À„Ï‹UÔ‹ƒè‰…À„¯‹ƒè‰…À„’‹ƒ×‰D$‹Ẻ$èH‰Æ…À„ÉÇ$èK‰EÔ…À„Þ‹U‹B8ƒ‹B8‹UÔ‰B ‰T$‰4$讉DžÀ„^‹ƒè‰…À„J‹UÔ‹ƒè‰…À„*‹ƒè‰…À„ ‹ƒ÷ÿ‰D$‹Ẻ$躉ƅÀ„•ÇD$‰$èE‰Ç…À„Q‹ƒè‰…À„ý‹ƒè‰…À„à1Ò‹ƒïèºÿÿ‰EÐ…À„N‹“‹ƒè‰…À„ø‹ƒG‰D$‹UЉ$è6‰Æ…À„°Ç$è9‰EÔ…À„/‹Eȃ‹UÔ‰B ‰T$‰4$袉DžÀ„‹‹ƒè‰…À„n‹UÔ‹ƒè‰…À„N‹ƒè‰…À„1Ç$èЉƅÀ„ò‹U‹B8ƒ‹B8‰F ‰t$‹ƒ›þ‰$è1‰Ç…À„e‹ƒè‰…À„H‹U‹B,‹ƒê‰…Ò„‹E‰x,‹U‹B‰$èå…À„U‹UȉUÀ‹UЉUĉÆé‹U …Òt‹ƒè‰…Àu ‹E ‹P‰$ÿR‹U…Òt‹ƒè‰…Àu ‹E‹P‰$ÿR‹Uä…Ò…ß1ö‰ðƒÄL[^_]˃+ÿ‹‰ƒ'ÿǃ#ÿM‹E¼‰EĉEÀƒ¿脹ÿÿ1ö‹Uä…Òt‹ƒè‰…À„è‹U¼‹ƒè‰…À„È‹UÀ‹ƒè‰…À„¨‹UÄ‹ƒè‰…À„ˆ‹U‹ƒè‰…Àto‹U …Òt‹ƒè‰…À„Ÿ‹U…Ò„Mÿÿÿ‹ƒè‰…À…>ÿÿÿ‹E‹P‰$ÿR‰ðƒÄL[^_]˃+ÿ‹‰ƒ'ÿǃ#ÿP‹UȉUÀ‹E¸‰EÄé*ÿÿÿ‹B‰$ÿP놋B‰$ÿPéjÿÿÿ‹B‰$ÿPéJÿÿÿ‹B‰$ÿPé*ÿÿÿ‹Eä‹P‰$ÿRéÿÿÿ‹E ‹P‰$ÿRéPÿÿÿ‹B‰$ÿPé2ûÿÿÇ$èÿ‰Æ…ÀtY‹ƒ7ƒ‹ƒ7‰F ‰t$‹ƒÙ‹‰$èíÿ‰Ç…À„O‹ƒè‰…À„V1É1Ò‰øèY°ÿÿ‹ƒè‰…À„.‹ƒ+ÿ‹‰ƒ'ÿǃ#ÿJ‹E¼‰EĉEÀé4þÿÿ‹B‰$ÿPéÆúÿÿ‹ƒ+ÿ‹‰ƒ'ÿǃ#ÿN‹EȉEÀ‹U¼‰UÄéýýÿÿ‹ƒ+ÿ‹‰ƒ'ÿǃ#ÿP‹EȉEÀÇEÔ‹U¸‰UÄ‹ƒè‰…Àt:…ÿt ‹ƒè‰…Àt6‹UÔ…Ò„­ýÿÿ‹UÔ‹ƒè‰…À…›ýÿÿ‹B‰$ÿPéýÿÿ‹F‰4$ÿP뻋G‰<$ÿPë¿‹ƒ+ÿ‹‰ƒ'ÿǃ#ÿP‹EȉEÀ‹U¸‰UÄé|ÿÿÿ‹ƒè‰…À…ýÿÿ‹Eä‹P‰$ÿR1öéýÿÿ‹G‰<$ÿPéÄþÿÿ‹F‰4$ÿPéœþÿÿ‹G‰<$ÿPé`úÿÿ‹B‰$ÿPéCúÿÿ‹F‰4$ÿPé#úÿÿ‹ƒ+ÿ‹‰ƒ'ÿǃ#ÿQ‹EȉEÀ‹“‰UÄéèþÿÿ‹ƒ+ÿ‹‰ƒ'ÿǃ#ÿQ‹UȉUÀ‹ƒ‰EÄéŽüÿÿ‹ƒ+ÿ‹‰ƒ'ÿǃ#ÿQ‹UȉUÀ1ÿ‹ƒ‰EÄéŽþÿÿ‹ƒ+ÿ‹‰ƒ'ÿǃ#ÿR‹UȉUÀ‹ƒ‰EÄé4üÿÿ‹ƒ+ÿ‹‰ƒ'ÿǃ#ÿJÇEÔ‹U¼‰UĉUÀé5þÿÿ‹G‰<$ÿPéåùÿÿ‹B‰$ÿPéÈùÿÿ‹F‰4$ÿPé¨ùÿÿ‹G‰<$ÿPéúÿÿ‹F‰4$ÿPéõùÿÿ‹ƒ+ÿ‹‰ƒ'ÿǃ#ÿT‹EȉEÀ‹UЉUÄé˜ûÿÿ‹B‰$ÿPéúùÿÿ‹ƒ+ÿ‹‰ƒ'ÿǃ#ÿR‹UȉUÀÇEÔ‹ƒ‰EÄé…ýÿÿ‹ƒ+ÿ‹‰ƒ'ÿǃ#ÿS‹UȉUÀ‹ƒ‰EÄé+ûÿÿ‹ƒ+ÿ‹‰ƒ'ÿǃ#ÿT‹EȉEÀ‹UЉUÄ1ÿé.ýÿÿ‹ƒ+ÿ‹‰ƒ'ÿǃ#ÿU‹EȉEÀ‹UЉUÄé×úÿÿ‹G‰<$ÿPéÁùÿÿ‹B‰$ÿPé¤ùÿÿ‹F‰4$ÿPé„ùÿÿ‹ƒ+ÿ‹‰ƒ'ÿǃ#ÿT‹EȉEÀ‹UЉUÄé²üÿÿ‹U‹B,‹P‰$ÿRéÍùÿÿ‹F‰4$ÿPéªùÿÿ‹ƒ+ÿ‹‰ƒ'ÿǃ#ÿU‹EȉEÀ‹UЉUÄÇEÔé`üÿÿ‹ƒ+ÿ‹‰ƒ'ÿǃ#ÿV‹EȉEÀ‹UЉUÄé úÿÿU‰åWVSƒì,èDšƒ`ô‰D$ ƒðv‰D$‹E‰D$‹E ‰$èôú…À„^‹Eƒ‹P,‹ƒ"ü‰Eà9Âtx‹ƒŒõ‰D$‰$è`ú‰Æ…À„ÇD$‰$èëú‰Ç…À„‹ƒè‰…À„D‹ƒè‰…À„'‹Uàƒ‹U‹B,‹ƒê‰…Ò„(‹Uà‹E‰P,‹E‹P0‹Eà‰Eä9Âtx‹ƒŒõ‰D$‰$èØù‰Æ…À„°ÇD$‰$ècú‰Ç…À„h‹ƒè‰…À„K‹ƒè‰…À„.‹U䃋U‹B0‹ƒê‰…Ò„ÿ‹Uà‹E‰P0‹U‹B4…Àt‰$è=ù‹EÇ@4‹ƒ"üƒ‰Æ‹U‹ƒè‰…Àu‹B‰$ÿP‰ðƒÄ,[^_]Ã1ö‰ðƒÄ,[^_]˃Àô‹‰ƒ¼ôǃ¸ô@ƒ€…èϱÿÿ1ö묋G‰<$ÿPéËþÿÿ‹F‰4$ÿPé®þÿÿ‹U‹B,‹P‰$ÿRéÄþÿÿ‹ƒÀô‹‰ƒ¼ôǃ¸ô=ë§‹ƒÀô‹‰ƒ¼ôǃ¸ô=‹ƒè‰…Àu„‹F‰4$ÿPévÿÿÿ‹U‹B0‹P‰$ÿRéíþÿÿ‹G‰<$ÿPéÄþÿÿ‹F‰4$ÿPé§þÿÿ‹ƒÀô‹‰ƒ¼ôǃ¸ô@ëU‰åWVSƒì,è²—‹}ƒÒñ‰D$ ƒ^t‰D$‹E‰D$‹E ‰$è_ø…Àu 1ö‰ðƒÄ,[^_]ÃÇ$èõ÷‰Æ…À„ ‹G8ƒ‹G8‰F ‹ƒ"ôƒ‹ƒ"ô‰F‰t$‹ƒžñ‰$èGø‰Eä…À„Œ‹ƒè‰…ÀtO‹G,‹ƒê‰…Òt3‹Eä‰G,‹ƒùƒ‰Æ‹ƒè‰…À…iÿÿÿ‹G‰<$ÿP‰ðƒÄ,[^_]ËG,‹P‰$ÿRë¿‹F‰4$ÿP릋ƒ.ò‹‰ƒ*òǃ&ò8ƒƒèã¯ÿÿ1öëž‹ƒ.ò‹‰ƒ*òǃ&ò8‹ƒè‰…Àu΋F‰4$ÿPëÃU‰åWVSƒìLè]–ƒð‰D$ ƒ s‰D$‹E‰D$‹E ‰$è ÷…À„ì‹Eƒ‹P…ÒŽú‹ƒ3ø‰D$ ÇD$‰T$‹U‹B‰$è?ö‹u‹v‰uà…öŽ#¹ÿÿÿÿÇEØÇEÜÇEäÇEÐë/…Éx9}ÜŒ=ƒE܃EЋUä‹L‹}؃E؃Eä‹EØ9EàtZ‹E‹p‹Eä;JuÀÁà‰EÔð‰Eăx ˆ7‰Æ‹R;V~½‰V‹E‹P‹uä‹D2‹uÔ‰D2ƒE؃Eä‹EØ9Eàu¦‹u܃Æ;}Ü~}‹E‹P‹EÜ @ Ê‹‰‹P‰Q‹P‰Q‹P ‰Q ‹P‰Q‹@‰A‹U‰r‰4$èúõ…ÀtF‰Æ‹U‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄL[^_]ÃÇEܾ;}܃‹U‰r‰4$è´õ…Àuº‹ƒÙð‹‰ƒÕðǃÑð[ƒíèÆ­ÿÿ1öë•‹UÐ Æ‹‰‹P‰Q‹P‰Q‹P ‰Q ‹P‰Q‹@‰A‹E‹péŠþÿÿ1ö‰ðƒÄL[^_]ËB …À‰fþÿÿ‹uÄé¸þÿÿÇ$è%õ…À…'ÿÿÿ‹ƒÙð‹‰ƒÕðǃÑðHéhÿÿÿU‰åWVSƒì,èå“‹Eƒ‹U‹BÇD$‰$ÿP…ÀˆP@4Å‹U‹B‹0‰$èµô‰EÜ…À„e‹U‹B‹D‰$è˜ô‰Ç…À„‰‹U‹B‹D‰$è|ô‰Eà…À„„‹U‹B‹D ‰$è_ô‰Eä…À„)‹U‹B‹D‰$èBô‰Æ…À„›Ç$èªó…À„Ò‹U܉P ‰x‹Uà‰P‹Uä‰P‰p‰ÆéŸ‹ƒaƒ]îǃYîeÇEàÇEä1ö‹UÜ‹ƒè‰…À„Í…ÿt‹ƒè‰…À„ñ‹Uà…Òt‹Uà‹ƒè‰…À„“‹Eä…Àt‹U䋃艅À„Û…öt‹ƒè‰…À„ºƒ©è¡«ÿÿ1ö‹U‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄ,[^_]˃aƒ]îǃYîe븋ƒaƒ]îǃYîf1öé/ÿÿÿ‹B‰$ÿPé_ÿÿÿ‹UÜ‹B‰$ÿPé"ÿÿÿ‹ƒaƒ]îǃYîeÇEä1öéêþÿÿ‹G‰<$ÿPéÿÿÿ‹F‰4$ÿPé8ÿÿÿ‹B‰$ÿPéÿÿÿ‹ƒaƒ]îǃYîfé£þÿÿ1É1Ò‹ƒçõ‹è £ÿÿ‹ƒaƒ]îǃYîhéßþÿÿ‹ƒaƒ]îǃYîeéXþÿÿU‰åWVSƒì,è‘‹Eƒ‹U ƒ‹ƒÂí‰D$‹U‹B‰$èhñ‰Æ…À„MÇ$èkñ‰Ç…À„…‹E ƒ‰G ‰|$‰4$èØñ‰Eä…Àti‹ƒè‰…À„²‹ƒè‰…À„»‹U䋃艅À„Ä‹U‹ƒÀ‰‰Ö‹Uƒè‰…Àtn‹U ‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄ,[^_]˃–닉ƒ’ëǃŽë£‹ƒè‰…Àtv…ÿt ‹ƒè‰…Àtuƒ}èZ©ÿÿ1ö‹U‹ƒè‰…Àu’‹B‰$ÿP뇋F‰4$ÿP‹ƒè‰…À…Eÿÿÿ‹G‰<$ÿP‹U䋃艅À…<ÿÿÿ‹B‰$ÿPé.ÿÿÿ‹F‰4$ÿPé|ÿÿÿ‹G‰<$ÿP뀋ƒ–닉ƒ’ëǃŽë£écÿÿÿU‰åWVSƒì,èt‹}‹B‰‹GT;ƒRñt$ƒ‹wT‹ƒè‰…Àu ‹G‰<$ÿP‰ðƒÄ,[^_]ËO8…Ét B‰‰þëÔÇ$èªï‰Æ…ÀtR‹ƒ„탋ƒ„í‰F ‰t$‹ƒ>ñ‹‰$è ð‰Eä…Àtg‹ƒè‰…ÀtQ1É1Ò‹Eäè| ÿÿ‹U䋃艅Àt,‹ƒð鋉ƒìéǃèéÿƒŒ{èê§ÿÿ1ö‹éDÿÿÿ‹B‰$ÿPëÉ‹F‰4$ÿP뤋ƒð鋉ƒìéǃèéÿ‹ƒè‰…Àu³‹F‰4$ÿPë¨U‰åWVSƒìLèIŽÇEäEä‰D$ƒ Ú‰D$ ƒ=x‰D$‹E‰D$‹E ‰$èëî…Àu 1ÿ‰øƒÄL[^_]ËEƒ‹E䃋³'ðƒ‹ƒë‰D$‹Eä‰$èMî‰EÌ…À„8‹ƒè‰…À„‹ƒ=é‰D$‹U‰$èî‰Æ…À„ÜÇ$è!î‰Ç…À„‹Ẽ‰G ‰|$‰4$èŽî‰EÔ…À„ð‹ƒè‰…À„Z‹ƒè‰…À„g‹UÔ‹ƒè‰…À„G‹ẺD$‹U‰$è‘î‰Æ…À„ዃ=é‰D$‰4$è€í‰Ç…À„+‹ƒè‰…À„¨Ç$ètí‰Æ…À„u‹E䃋Eä‰F ‰t$‰<$èÞí‰EÐ…À„R‹ƒè‰…À„ ‹ƒè‰…À„ð‹UЋƒè‰…À„Ћƒ'ðƒ‹ủÇë_‹ƒÅ苉ƒÁèǃ½è©‹ƒè‰…À„6…ÿt$1ö‹ƒè‰…À„/…öt‹ƒè‰…À„²‹ũ‰zèe¥ÿÿ1ÿ‹ƒè‰…ÀtA‹U‹ƒè‰…Àt(‹E䋃ꉅ҅ãýÿÿ‹Eä‹P‰$ÿR‰øƒÄL[^_]ËB‰$ÿPëÍ‹F‰4$ÿPë´‹ƒÅ苉ƒÁèǃ½è©‹uÌé|ÿÿÿ‹F‰4$ÿPé×ýÿÿ‹ƒÅ苉ƒÁèǃ½è¨éQÿÿÿ‹F‰4$ÿP‹uÌé@ÿÿÿ‹ƒÅ苉ƒÁèǃ½èªéþþÿÿ‹F‰4$ÿPéJþÿÿ‹ƒÅ苉ƒÁèǃ½èª‹uÌéõþÿÿ‹F‰4$ÿPé¼þÿÿ‹G‰<$ÿPéÃþÿÿ‹F‰4$ÿPé˜ýÿÿ‹B‰$ÿPé«ýÿÿ‹G‰<$ÿPé‹ýÿÿ‹ƒÅ苉ƒÁèǃ½èªéXþÿÿ‹B‰$ÿPé"þÿÿ‹F‰4$ÿPéþÿÿ‹G‰<$ÿPéåýÿÿU‰åWVSƒì脊ƒ¬ä‰D$ ƒ0g‰D$‹E‰D$‹E ‰$è4ë…Àu 1ö‰ðƒÄ[^_]ËEƒ‹»b샋U‹B4‰$è>ë‰Æ…ÀtY‹ƒè‰…ÀtC‹Eƒ@4ƒ‰ò‹ƒè‰…Àt!‹U‹ƒè‰…Àu£‹B‰$ÿP‰ðƒÄ[^_]ËB‰$ÿPëÔ‹G‰<$ÿP벋ƒå‹‰ƒüäǃøä`ƒìvèõ¢ÿÿ‰úë—U‰åWVSƒì\艋ƒáè‰E䋃åè‰EàEà‰D$Eä‰D$ƒiÕ‰D$ ƒr‰D$‹E‰D$‹E ‰$è-ê…Àu 1ÿ‰øƒÄ\[^_]ËEƒ‹E䃋Eàƒ‹“{ë‰U¼ƒ‹ƒ­å‰D$‹U‹B‰$èƒé‰Æ…À„¹ÇD$‰$èê‰Ç…À„‹ƒè‰…À„å‹U¼‹ƒè‰…À„Å‹Eƒx<”À¶À‰$èÄ鉯…À„á‰$è+é‰E܃øŒ„¨‹ƒè‰…À„5‹uàƒ‰4$èüè‰E܃øŒ)„y‹ƒè‰…À„ÔÇ$èVé‰EÔ…ÀtP‰ÂE܉D$‰T$‰<$èIé…ÀˆÇ1Àƒ}ÜŸÀ‰EÜ‹UÔ‹ƒè‰…À„‹E܉$è 鉯…À…‹ƒä‹‰ƒäǃäN‰}À‹E¼‰EĉEÈë$‹ƒä‹‰ƒäǃäN‰}À‹U¼‰UĉUȃ%vèã ÿÿ1ÿ‹U¼‹ƒè‰…À„­‹UÀ‹ƒè‰…À„‹UÄ‹ƒè‰…À„m‹UÈ‹ƒè‰…À„M‹U‹ƒè‰…À„-‹E䋃ꉅ҄ ‹Eà‹ƒê‰…Ò…Ìýÿÿ‹Eà‹P‰$ÿR‰øƒÄ\[^_]ËB‰$ÿPé-þÿÿ‹F‰4$ÿPé þÿÿ‰4$èiç‰EÜ…ÀˆÇ‹ƒè‰…À„‹EÜ…À…U‰}ÀÇ$è:ç‰EÔ…À„΋EÀƒ‹UÔ‰B ‰T$‹ƒë‰$èç‰Æ…À„Ë‹UÔ‹ƒè‰…À„@‰t$‹U‹B ‰$è«ç‰EÐ…À„ ‹ƒè‰…À„‹³{닃艅À„\‹U‹B@‰EÜ…À„¥‹ƒ…僋ƒè‰…À„‹ƒ…å‰EÈÇ$èvæ‰Æ…À„Å‹Uƒ‰P ‹EЃ‰F‹E䃋Eä‰F‹Uȃ‰Vèêæ‰EÔ…À„]‰Â‹Eà‰D$‹ƒUå‰D$‰$è[æ…Àˆ:‹UÔ‰T$‰t$‹ƒ‘ã‰$è]æ‰Ç…À„‹ƒè‰…À„®‹UÔ‹ƒè‰…À„¸‹U¼‹ƒè‰…À„˜‰}¼‹Eà‰$è©å‰E܃øŒàt$‹U¼ƒ‹U‹B‹ƒê‰…Ò„æ‹U¼‹E‰P‹ƒ©ä‰D$‹E‰$èN副…À„UÇ$èQå‰EÔ…À„aƒ‹UÔ‰z ‹E䃋Eä‰B‰T$‰4$è±å‰EÌ…À„5‹ƒè‰…À„œ‹UÔ‹ƒè‰…À„|‹UÌ‹ƒè‰…À„\ƒ‹EЉEÄé³üÿÿ‹ƒä‹‰ƒäǃäM‹E¼‰EĉEÀ‰EÈé}üÿÿ‹Eä‹P‰$ÿRéåüÿÿ‹B‰$ÿPéÅüÿÿ‹B‰$ÿPé¥üÿÿ‹B‰$ÿPé…üÿÿ‹B‰$ÿPéeüÿÿ‹B‰$ÿPéEüÿÿ‹ƒä‹‰ƒäǃäMÇEÔ‹U¼‰UĉUÀ‰UÈ‹ƒè‰…À„‹uÔ…ö„áûÿÿ‹UÔ‹ƒè‰…À…Ïûÿÿ‹B‰$ÿPéÁûÿÿ‹ƒ©å‰D$‹U‰$èÆã‰EÔ…À„œÇD$‰$èP䉯…À„‹UÔ‹ƒè‰…À„±‹ƒè‰…À„”‹ƒ­å‰D$‹U‹B‰$èhã‰EÔ…À„òÇD$‰$èòã‰Æ…À„ ‹UÔ‹ƒè‰…À„΋ƒè‰…Àt‰uÀéñûÿÿ‹F‰4$ÿPéÕûÿÿ‹G‰<$ÿP‰uÀéÒûÿÿ‹F‰4$ÿPéëþÿÿ‹ƒä‹‰ƒäǃäN‰}ÀÇEÔ‹E¼‰EĉEÈé¬þÿÿ‹F‰4$ÿPé½ùÿÿ‹ƒä‹‰ƒäǃäN‰}ÀÇEÔ‹U¼‰UĉUÈénþÿÿ‹ƒä‹‰ƒäǃäN…ö„‰}ÀÇEÔ‹“{ë‰UĉUÈé3þÿÿ‹ƒä‹‰ƒäǃäQ‹ƒ{ë‰EȉEÄéúÿÿ‹ƒä‹‰ƒäǃäO‰}À‹ƒ{ë‰EĉEÈéÙùÿÿ‹F‰4$ÿPéùÿÿ‹ƒ±æƒ‹ƒè‰…À„†‹“±æ‰UÈéVûÿÿ‹ƒä‹‰ƒäǃäV‹EЉEÄé‡ýÿÿ‹B‰$ÿPé²úÿÿ‹ƒä‹‰ƒäǃäV‹EЉEÄéQùÿÿ‹ƒä‹‰ƒäǃäP‰}À‹ƒ{ë‰EĉEÈé%ùÿÿ‹F‰4$ÿPé–úÿÿ‹F‰4$ÿPésúÿÿ‹ƒä‹‰ƒäǃäQ‹ƒ{ë‰EȉEÄéÿüÿÿ‹B‰$ÿPésøÿÿ‹F‰4$ÿPé^ýÿÿ‹B‰$ÿPéAýÿÿ‹ƒä‹‰ƒäǃäN‰}À먋ƒä‹‰ƒäǃäQÇEÔ‹ƒ{ë‰EĉEÈénüÿÿ‹ƒä‹‰ƒäǃäO‰}ÀéXÿÿÿ‹B‰$ÿPé$ýÿÿ‹F‰4$ÿPéÕùÿÿ‹F‰4$ÿPélþÿÿ‹ƒä‹‰ƒäǃäP‰}Àéÿÿÿ‹F‰4$ÿPéDúÿÿ‹B‰$ÿPéZúÿÿ‹B‰$ÿPé:úÿÿ‹ƒä‹‰ƒäǃäY‹UЉUÄé²÷ÿÿ‹ƒä‹‰ƒäǃäY‹EЉEÄé”ûÿÿ‹ƒä‹‰ƒäǃäW‹EЉEÄél÷ÿÿ‹U‹B‹P‰$ÿRéúÿÿ‹B‰$ÿPé–úÿÿ‹B‰$ÿPévúÿÿ‹F‰4$ÿPéVúÿÿ‰}ÀéýÿÿU‰åWVSƒìLèÀ~ÇEäEä‰D$ƒ˜Ê‰D$ ƒ´h‰D$‹E‰D$‹E ‰$èbß…Àu 1ö‰ðƒÄL[^_]ËEƒ‹E䃋ƒ¸Ù‰D$‹U‰$èÍމƅÀ„ùÇ$èÐމDžÀ„‹‹Eä‰D$‰|$‰4$è߉EÔ…Àtq‹ƒè‰…À„Ô‹ƒè‰…À„á‹UÔ‹ƒè‰…À„Á‹ƒžàƒ‰Æ‹U‹ƒè‰…Àtu‹E䋃ꉅ҅@ÿÿÿ‹Eä‹P‰$ÿR‰ðƒÄL[^_]˃<Ù‹‰ƒ8Ùǃ4Ù‹ƒè‰…Àty…ÿt ‹ƒè‰…Àtxƒtkè¹–ÿÿ1ö‹U‹ƒè‰…Àu‹‹B‰$ÿP뀋ƒ<Ù‹‰ƒ8Ùǃ4ÙëÀ‹F‰4$ÿPéÿÿÿ‹B‰$ÿPé1ÿÿÿ‹G‰<$ÿPéÿÿÿ‹F‰4$ÿPéyÿÿÿ‹G‰<$ÿPézÿÿÿU‰åWVSƒì,èê|ƒ×‰D$ ƒ–Y‰D$‹E‰D$‹E ‰$èšÝ…À„Ÿ‹Eƒ‹@@…À…ØÇ$è*݉ƅÀ„ÁèÅ݉DžÀ„u‹U‹B ‰D$‹ƒFÙ‰D$‰<$è6Ý…ÀˆQ‹U‹B‰D$‹ƒ¦Ù‰D$‰<$èÝ…Àˆ-‹U‹BT‰D$‹ƒ’؉D$‰<$èîÜ…Àˆ ‰|$‰t$‹ƒ ߉$èó܉Eä…À„苃艅À„w‹ƒè‰…À„W‹uäé•Ç$èR܉ƅÀt^‹ƒ†Úƒ‹ƒ†Ú‰F ‰t$‹ƒ´Þ‹‰$è²Ü‰Ç…À„ó‹ƒè‰…À„Ö1É1Ò‰øèÿÿ‹ƒè‰…Àu ‹G‰<$ÿP‹ƒf׋‰ƒb×ǃ^× ƒÂi膔ÿÿ1ö‹U‹ƒè‰…Àu‹B‰$ÿP‰ðƒÄ,[^_]Ã1ö‰ðƒÄ,[^_]˃f׋‰ƒb×ǃ^׋ƒè‰…Àt7…ÿtŸ‹ƒè‰…Àu”‹G‰<$ÿP뉋ƒf׋‰ƒb×ǃ^×élÿÿÿ‹F‰4$ÿP뾋F‰4$ÿPéÿÿÿ‹ƒf׋‰ƒb×ǃ^× ë‹‹G‰<$ÿP‹uäé5ÿÿÿ‹F‰4$ÿPé{þÿÿU‰åWVSƒì,èWzƒ‡Ô‰D$ ƒW‰D$‹E‰D$‹E ‰$èÛ…Àu 1ÿ‰øƒÄ,[^_]ËEƒ‹³5܃1Ò‹ƒ—Õè’ÿÿ‰EÜ…À„Å‹ƒè‰…À„¨‹ƒ÷Ô‰D$‹U܉$èHÚ‰Eä…À„k‹ƒCÕ‰D$‹E‰$è(ډƅÀ„‹ƒGÕ‰D$‹E‰$è ډDžÀ„”ÇD$‰$è”Ú‰Eà…À„⋃艅À„ðÇ$èâىDžÀ„½‰p ‹Uà‰PÇ$èÃÙ…À„l‹Uä‰P ‰x‹u܉Çé‚‹ƒÓÔ‹‰ƒÏÔǃËÔ 1ÿÇEà‹U䋃艅À„Ò…öt‹ƒè‰…À„9…ÿt‹ƒè‰…À„½‹Eà…Àt‹Uà‹ƒè‰…À„Ö‹u܃Sgèã‘ÿÿ1ÿ‹ƒè‰…Àt%‹U‹ƒè‰…À…Sþÿÿ‹B‰$ÿP‰øƒÄ,[^_]ËF‰4$ÿPëЋƒÓÔ‹‰ƒÏÔǃËÔ ‹uÜ뛋F‰4$ÿPéJþÿÿ‹ƒÓÔ‹‰ƒÏÔǃËÔépÿÿÿ‹Uä‹B‰$ÿPéÿÿÿ‹G‰<$ÿPé5ÿÿÿ‹ƒÓÔ‹‰ƒÏÔǃËÔ ÇEàéÙþÿÿ‹B‰$ÿP‹uÜéÿÿÿ‹ƒÓÔ‹‰ƒÏÔǃËÔ 1öÇEàé¢þÿÿ‹F‰4$ÿPé¹þÿÿ‹ƒÓÔ‹‰ƒÏÔǃËÔ éwþÿÿ‹G‰<$ÿPéþÿÿU‰åWVSƒìèWw‹EƒÇ$èÐ׉ƅÀtQ‹ƒÕƒ‹ƒÕ‰F ‰t$‹ƒMÙ‹‰$è0؉DžÀ„‘‹ƒè‰…Àte1É1Ò‰øè ˆÿÿ‹ƒè‰…ÀtD‹ƒÓÑ‹‰ƒÏÑǃËÑœƒwdèÿÿ‹U‹ƒè‰…Àu ‹B‰$ÿP1ÀƒÄ[^_]ËG‰<$ÿP뱋F‰4$ÿP1É1Ò‰øè2ˆÿÿ‹ƒè‰…Àu’ëÔ‹ƒÓÑ‹‰ƒÏÑǃËÑœ‹ƒè‰…Àu…‹F‰4$ÿPéwÿÿÿU‰åWVSƒìè?v‹E…À„R‹Eƒ‹U ƒ‹EƒÇ$è¡Ö‰Æ…ÀtY‹ƒŸÓƒ‹ƒŸÓ‰F ‰t$‹ƒ Ø‹‰$è׉DžÀ„É‹ƒè‰…À„#1É1Ò‰øèm‡ÿÿ‹ƒè‰…À„’‹ƒ»Ð‹‰ƒ·Ðǃ³ÐƒcèÚŽÿÿ‹U‹ƒè‰…Àt?‹U ‹ƒè‰…ÀtH‹U‹ƒè‰…Àt ¸ÿÿÿÿƒÄ[^_]ËB‰$ÿP¸ÿÿÿÿƒÄ[^_]ËB‰$ÿP‹U ‹ƒè‰…Àu¸‹B‰$ÿPë­‹G‰<$ÿPé`ÿÿÿ‹ƒ»Ð‹‰ƒ·Ðǃ³Ð‹ƒè‰…À…Qÿÿÿ‹F‰4$ÿPéCÿÿÿ‹U‹B‹@ ‰D$ƒ§c‰D$‹ƒ5Ø‹‰$èÕ¸ÿÿÿÿƒÄ[^_]ËF‰4$ÿPéÏþÿÿU‰åWVSƒìLè’tƒÆÎ‰D$ ƒ>Q‰D$‹E‰D$‹E ‰$èBÕ…Àu 1ÿ‰øƒÄL[^_]ËEƒ‹³pÖƒÇ$èïÔ‰EÈ…À„‹ƒè‰…À„ý‹U‹R‰UÌ…ÒA‹Uȃ‰×‰Ö‹ƒè‰…Àt!‹U‹ƒè‰…Àu‘‹B‰$ÿP‰øƒÄL[^_]ËF‰4$ÿPëÔÇEÄÇEàë.‹ƒè‰…À„j‹ƒè‰…À„sƒEăEà‹EÄ9EÌt‹ƒªÏ‰D$‹Eȉ$èøÓ‰Eä…À„õ‹U‹B(‹Uà‹‰$ètԉDžÀ„œ‹U‹B(‹Uà‹D‰$èUԉƅÀ„L‹U‹B(‹Uà‹D‰$è6Ô‰EÐ…À„¸‹U‹B(‹Uà‹D ‰$èÔ‰EÔ…À„Ê‹U‹B(‹Uà‹D‰$èöÓ‰EØ…À„ÕÇ$è]Ó‰EÜ…À„â‰x ‰p‹UЉP‹UÔ‰P‹U؉PÇ$è.ӉDžÀ„Ñ‹E܉G ‰|$‹Uä‰$è›Ó‰Æ…À„ˆ‹U䋃艅À…Ÿþÿÿ‹B‰$ÿP‹ƒè‰…À…–þÿÿ‹G‰<$ÿP‹ƒè‰…À…þÿÿ‹F‰4$ÿPéþÿÿ‹F‰4$ÿPéõýÿÿ‹ƒÏ‹‰ƒ ÏǃÏ>ƒ"bè?‹ÿÿ1ÿéâýÿÿ‹ƒÏ‹‰ƒ ÏǃÏ@ÇEÐÇEÔÇEØÇEÜ‹U䋃艅À„¥…ÿt‹ƒè‰…À„£…öt‹ƒè‰…À„·‹MÐ…Ét‹UЋƒè‰…À„‹UÔ…Òt‹UÔ‹ƒè‰…ÀtC‹uÈ‹EØ…Àt‹UØ‹ƒè‰…ÀtX‹EÜ…À„1ÿÿÿ‹UÜ‹ƒè‰…À…ÿÿÿ‹B‰$ÿPéÿÿÿ‹B‰$ÿP‹uÈ벋Uä‹B‰$ÿPéJÿÿÿ‹G‰<$ÿPéOÿÿÿ‹B‰$ÿPë‹B‰$ÿPébÿÿÿ‹F‰4$ÿPé;ÿÿÿ‹ƒÏ‹‰ƒ ÏǃÏ@1öÇEÐÇEÔÇEØÇEÜéÈþÿÿ‹ƒÏ‹‰ƒ ÏǃÏ@‹uÈébþÿÿ‹ƒÏ‹‰ƒ ÏǃÏ@ÇEÔÇEØÇEÜévþÿÿ‹ƒÏ‹‰ƒ ÏǃÏAÇEØÇEÜéKþÿÿ‹ƒÏ‹‰ƒ ÏǃÏAÇEÜé'þÿÿ‹ƒÏ‹‰ƒ ÏǃÏ@é þÿÿ‹ƒÏ‹‰ƒ ÏǃÏ@1öÇEÐÇEÔÇEØéÖýÿÿU‰åWVSƒì|è†oÇEà‹ƒfΉEäUE ÇD$ Mà‰L$ÇD$Ç$‹f»èj‚ÿÿ…Àˆ©Eä‰D$ƒf»‰D$ ƒÎW‰D$‹E‰D$‹E ‰$èèÏ…À„2‹Eƒ‹E䃋»dу‹ƒË‰D$‹U‰$èRωƅÀ„øÇ$èUωE´…À„…‰Â‹Eà‰D$‰T$‰4$è™Ï‰E¸…À„e‹ƒè‰…À„H‹U´‹ƒè‰…À„‹ƒè‰…À„‹³¼Ñ‰t$‹ƒf̉D$‹Eà‰$èïÎ…Àˆ¾‰t$‹ƒ"ˉD$‹Eà‰$èÎÎ…Àˆó‹ƒË‰D$‹E‰$è„ΉƅÀ„Ç$è‡Î‰E´…À„b‹E¸ƒ‹U´‰B èωEÐ…À„‹Eä‰D$‹ƒ~ˉD$‹EЉ$è…Î…Àˆ§‹Eà‰D$‹UЉ$è)Ï…ÀˆÑ‹EЉD$‹U´‰T$‰4$èpΉE¼…À„°‹ƒè‰…À„” ‹U´‹ƒè‰…À„t ‹UЋƒè‰…À„T ‹³dÑ‹ƒè‰…À„1 Ç$èÐ͉EÔ…À„Œ ‹ƒè‰…À„o ‹U¼‰$è`͉E´…À„- ÇEÀÇEĉu°‰u¬éÅ‹ƒv̉D$‹Ẻ$è6͉EÈ…À„¬ ‹U‹B ‰$è¸Í‰Æ…À„ }܉|$‰D$‹Uȉ$è§Í…Àˆ 1Àƒ}Ü”À‰EÜ‹UÈ‹ƒè‰…À„ö‹ƒè‰…À„Ù‹EÜ…À„‹ƒ~̉D$‹Ẻ$è¨Ì‰EÐ…À„ó ‹U‹B‰$è*͉EÈ…À„· ‰|$‰D$‹EЉ$èÍ…Àˆy 1Àƒ}Ü”À‰EÜ‹UЋƒè‰…À„¸‹UÈ‹ƒè‰…À„˜‹EÜ…À…û‹ƒv̉D$‹Ẻ$è̉ƅÀ„î ‹ƒ~̉D$‹Ẻ$èúˉEÐ…À„‡ ‹U‹B‰$è|̉EÈ…À„. ‹U‹B$‰$èc̉EÀ…À„Ü Ç$èÊˉEÄ…À„$ ‹U‹B0ƒ‹B0‹UĉB ‰r‹EЉB‹EȉB‹EÀ‰B‹U‹B8ƒ‹B8‹UĉB ‰T$‹ƒnɉ$è̉ƅÀ„—‹UÄ‹ƒè‰…À„z‹U°‹ƒè‰…À„Z‹ƒžÊ‰D$‹EÔ‰$èˉEÐ…À„ñÇ$èˉEÈ…À„¦ƒ‹Uȉr ‰T$‹EЉ$èƒË‰EÀ…À„ì‹UЋƒè‰…À„ ‹UÈ‹ƒè‰…À„%‹UÀ‹ƒè‰…À„ô‰u°ÇEÀÇEÄ‹ỦU¬‹E´‰$è*ˉEÌ…À„œ‹U¬‹ƒè‰…À…ýÿÿ‹B‰$ÿPéýÿÿ‹ƒÊ‹‰ƒþÉǃúÉ ‰}¤‰}¨‹ƒdщE°‰E¬ƒJ]èï‚ÿÿ1ö‹Uà…Òt‹ƒè‰…À„«‹U¤‹ƒè‰…À„z‹ƒè‰…À„]‹U¨‹ƒè‰…À„=‹U¬‹ƒè‰…À„‹U°‹ƒè‰…À„ý‹U‹ƒè‰…À„Ý‹E䋃ꉅ҄º‹U …Òt‹ƒè‰…À„ ‹U…Òt‹ƒè‰…Àu ‹E‹P‰$ÿR‰ðƒÄ|[^_]ËU …Òt‹ƒè‰…À„Å‹U…Òt‹ƒè‰…À„ž‹Uà…Òt‹ƒè‰…À„O1ö‰ðƒÄ|[^_]˃Ê‹‰ƒþÉǃúÉ ‹E¸‰E¤‰}¨é¤þÿÿ‹B‰$ÿPéØùÿÿ‹G‰<$ÿPéÙùÿÿ‹F‰4$ÿPéªùÿÿ‹ƒÊ‹‰ƒþÉǃúÉ ÇEÐÇEÈÇEÀÇEĉ}¤‰}¬‰}¨‰}°‹ƒè‰…À„$‹E´…Àt‹U´‹ƒè‰…À„ý‹EÐ…Àt‹UЋƒè‰…À„‹EÈ…Àt‹UÈ‹ƒè‰…À„‹EÀ…Àt‹UÀ‹ƒè‰…À„΋uÄ…ö„Èýÿÿ‹UÄ‹ƒè‰…À…¶ýÿÿ‹B‰$ÿPé¨ýÿÿ‹Eä‹P‰$ÿRé5þÿÿ‹B‰$ÿPéþÿÿ‹B‰$ÿPéõýÿÿ‹B‰$ÿPéÕýÿÿ‹B‰$ÿPéµýÿÿ‹G‰<$ÿPé•ýÿÿ‹B‰$ÿPéxýÿÿ‹E ‹P‰$ÿRéæýÿÿ‹Eà‹P‰$ÿRéDýÿÿ‹B‰$ÿPéõþÿÿ‹F‰4$ÿPéÎþÿÿ‹B‰$ÿPé$ÿÿÿ‹B‰$ÿPéäþÿÿ‹B‰$ÿPéïþÿÿ‹ƒÊ‹‰ƒþÉǃúÉ ‹E¸‰E¤ÇEÐÇEÈÇEÀÇEĉ}¨‰}°‰}¬éMþÿÿ‹Eà‹P‰$ÿR1öéRýÿÿ‹ƒÊ‹‰ƒþÉǃúÉ ‹U¸‰U¤‰}¨éNüÿÿ‹E‹P‰$ÿRéQýÿÿ‹E ‹P‰$ÿRé*ýÿÿ‹ƒÊ‹‰ƒþÉǃúÉ ‹U¸‰U¤‰}¨éüÿÿ‹ƒÊ‹‰ƒþÉǃúÉ ‹E¸‰E¤ÇEÈÇEÀÇEÄ‹“dщU¨‰×‰U°‰U¬éƒýÿÿ‹F‰4$ÿPéùÿÿ‹B‰$ÿPéüøÿÿ‹B‰$ÿPé˜úÿÿ‹B‰$ÿPéxúÿÿ‹B‰$ÿPéèúÿÿ‹B‰$ÿP‰u°ÇEÀÇEÄéþúÿÿ‹B‰$ÿPéÍúÿÿ‹ƒÊ‹‰ƒþÉǃúÉ ‹U¸‰U¤ÇEÈÇEÀÇEÄ‹ƒdщE¨‰Ç‰E°‰E¬éÇüÿÿ‹ƒžÊ‰D$‹EÔ‰$èʼnƅÀ„±Ç$è!ʼnEÐ…À„}‹Eƒ‹UЉB ‰T$‰4$èŠÅ‰EÈ…À„Ø‹ƒè‰…ÀtJ‹UЋƒè‰…ÀtG‹UÈ‹ƒè‰…À…#úÿÿ‹B‰$ÿPéúÿÿ‹B‰$ÿPéZøÿÿ‹B‰$ÿPé:øÿÿ‹F‰4$ÿPë«‹B‰$ÿP뮋F‰4$ÿPéÁöÿÿ‹B‰$ÿPéžöÿÿ‹B‰$ÿPé~öÿÿ‹F‰4$ÿPé^öÿÿ‹ƒÊ‹‰ƒþÉǃúÉ‹U¸‰U¤‹}¼‹EÔ‰E¨éÙùÿÿ‹F‰4$ÿPéƒöÿÿ‹ƒÊ‹‰ƒþÉǃúÉ‹E¸‰E¤‹}¼‰u¨é¢ùÿÿè»Ã…À„•‹ƒÊ‹‰ƒþÉǃúÉÇEÐÇEÈÇEÀÇEÄ‹UÔ‰U¨‹}¼‹E¸‰E¤é)ûÿÿ‹ƒÊ‹‰ƒþÉǃúÉ‹ỦU¬ÇEÐëÅ‹ƒÊ‹‰ƒþÉǃúÉ‹U¸‰U¤‹}¼‹EÔ‰E¨‹ỦU¬ÇEÐÇEÀÇEÄé¥úÿÿ‹ƒÊ‹‰ƒþÉǃúÉ‹ẺE¬ÇEÐéTÿÿÿ‹ƒÊ‹‰ƒþÉǃúÉ‹ỦU¬‰u°ÇEÄé'ÿÿÿ‹ƒÊ‹‰ƒþÉǃúÉ‹ẺE¬ÇEÐÇEÈÇEÀéïþÿÿ‹ƒÊ‹‰ƒþÉǃúÉ‹U¸‰U¤‹}¼‹EÔ‰E¨‹ỦU¬éäùÿÿ‹ƒÊ‹‰ƒþÉǃúÉ‹ẺE¬‰u°ÇEÀÇEÄé‰þÿÿ‹ƒÊ‹‰ƒþÉǃúÉ‹ỦU¬‰u°ÇEÈÇEÀÇEÄéNþÿÿ‹ƒÊ‹‰ƒþÉǃúÉ‹E¸‰E¤‹}¼‹UÔ‰U¨‹ẺE¬ÇEÄé<ùÿÿ‹ƒÊ‹‰ƒþÉǃúÉ‹U¸‰U¤‹}¼‹EÔ‰E¨‹ỦU¬ÇEÀÇEÄéüøÿÿ‹ƒÊ‹‰ƒþÉǃúÉ‹E¸‰E¤‹}¼‹UÔ‰U¨‹ẺE¬ÇEÈÇEÀÇEÄéµøÿÿ‹ƒÊ‹‰ƒþÉǃúÉ‹ỦU¬ÇEÐÇEÈé]ýÿÿ‹ƒÊ‹‰ƒþÉǃúÉ‹ỦU¬é:ýÿÿ‹ƒÊ‹‰ƒþÉǃúÉ‹ẺE¬éýÿÿ‹ƒÊ‹‰ƒþÉǃúÉ‹ỦU¬ÇEÈéíüÿÿ‹ƒÊ‹‰ƒþÉǃúÉéÿÿÿ‹ƒÊ‹‰ƒþÉǃúÉ‹ỦU¬ÇEÐÇEÈéŸüÿÿ‹U´‹ƒè‰…Àu ‹B‰$ÿP‹EÔƒ‹U¸‰U¤‹}¼‰Æ‰E¨ééõÿÿ‹ƒÊ‹‰ƒþÉǃúÉéUþÿÿU‰åWVSƒì\èe_ƒ¹‰D$ ƒ<‰D$‹E‰D$‹E ‰$èÀ…À„¨‹Eƒ‹³CÁƒ‹U‹B0‹@<ƒ‹ƒè‰…À„¹‹U‹B0‹@<‰EäÇ$裿‰EÈ…À„‹ƒè‰…À„X‹U‹R‰UÌ…Òa‰uĉuÀ‹Uȃ‰×‰Ö‹U䋃艅À„½‹ƒè‰…À„Æ‹UÀ‹ƒè‰…À„Ï‹UÄ‹ƒè‰…À„Ø‹U‹ƒè‰…Àu ‹B‰$ÿP‰øƒÄ\[^_]ËF‰4$ÿP‹U‹B0‹@<‰EäÇ$èᾉEÈ…À…>ÿÿÿ‹ƒá¹‹‰ƒÝ¹ǃٹÉuÀ‰uăMMèEwÿÿ1ÿ‹U䋃艅À…Cÿÿÿ‹B‰$ÿP‹ƒè‰…À…:ÿÿÿ‹F‰4$ÿP‹UÀ‹ƒè‰…À…1ÿÿÿ‹B‰$ÿP‹UÄ‹ƒè‰…À…(ÿÿÿ‹B‰$ÿPéÿÿÿ1ÿ‰øƒÄ\[^_]ËF‰4$ÿP‹U‹R‰UÌ…ÒŽŸþÿÿÇE¼‰uĉuÀÇEÔëO‹UÜ‹ƒè‰…À„؉<$追‰Æ…Àˆ1‹ƒè‰…À„Å…ö„΃E¼ƒEÔ‹E¼9EÌ„@þÿÿ‹ƒ»‰D$‹Uä‹B‰$è^½‰Æ…À„ ‹U‹B,‹UÔ‹D‰$èÚ½‰Ç…À„¡Ç$èB½‰EÜ…À„ô‰x ‰D$‰4$è´½‰Ç…À„Û‹ƒè‰…À…1ÿÿÿ‹F‰4$ÿP‹UÜ‹ƒè‰…À…(ÿÿÿ‹B‰$ÿPéÿÿÿ‹G‰<$ÿP…ö…2ÿÿÿ‹UÔ‹EP,‹H‹B‰D$‹B ‰D$ ‹B‰D$‹Uä‰T$‹E‰$ÿQ‰Eà…À„4‹UÀ‹ƒè‰…À„‹Eà‰D$‹U‰$èQ½‰EØ…À„Q‹UÄ‹ƒè‰…À„㋃}º‰D$‹Eȉ$è*¼‰Ç…À„ô‹ƒI¼‰D$‹U؉$è ¼‰Æ…À„©Ç$載EÜ…À„i‰p ‹Uàƒ‰P‹E؃‹U܉BÇ$èß»‰Æ…À„‹E܉F ‰t$‰<$èO¼‰EÐ…À„Å‹ƒè‰…Àt_‹ƒè‰…ÀtI‹UЋƒè‰…Àt-‹Eà‰EÀ‹U؉UÄéàýÿÿ‹B‰$ÿPéîþÿÿ‹B‰$ÿPéÿÿÿ‹UЋB‰$ÿPëÅ‹F‰4$ÿP묋G‰<$ÿPë–‹ƒá¹‹‰ƒÝ¹ǃٹÅ‹ƒè‰…ÀtH…ÿt ‹ƒè‰…Àt.‹UÜ…Òt‹UÜ‹ƒè‰…Àt‹uÈé_üÿÿ‹B‰$ÿP‹uÈéNüÿÿ‹G‰<$ÿPëÇ‹F‰4$ÿPë­‹ƒá¹‹‰ƒÝ¹ǃٹÅ‹uÈéüÿÿ‹ƒá¹‹‰ƒÝ¹ǃٹÅÇEÜé^ÿÿÿ‹ƒá¹‹‰ƒÝ¹ǃٹÅÇEÜéIÿÿÿ‹ƒá¹‹‰ƒÝ¹ǃٹÉ‹uÈé°ûÿÿ‹ƒá¹‹‰ƒÝ¹ǃٹ΋uÈ‹Uà‰UÀ‹E؉EÄé„ûÿÿ‹ƒá¹‹‰ƒÝ¹ǃٹÍ‹uÈ‹Eà‰EÀé^ûÿÿ‹ƒá¹‹‰ƒÝ¹ǃٹ΋Uà‰UÀ‹E؉EÄÇEÜé˜þÿÿ‹ƒá¹‹‰ƒÝ¹ǃٹ΋Eà‰EÀ‹U؉UÄé~þÿÿ‹ƒá¹‹‰ƒÝ¹ǃٹ΋Eà‰EÀ‹U؉UÄéFþÿÿ‹ƒá¹‹‰ƒÝ¹ǃٹ΋Eà‰EÀ‹U؉UÄÇEÜé%þÿÿU‰åWVSƒìLè¨XÇEäEä‰D$ƒ¤‰D$ ƒœB‰D$‹E‰D$‹E ‰$èJ¹…À„²‹Eƒ‹E䃋“†ºƒ‹M‹A0‹@<ƒ‹ƒè‰…À„t‹U‹B0‹@<‰EÔ‹ƒ$´‰D$‹MÔ‹A‰$芸‰Æ…À„ÙÇ$踉DžÀ„J‹E䃋Eä‰G ‰|$‰4$è÷¸‰EÐ…À„'‹ƒè‰…À„¹‹ƒè‰…À„Ž‹EЉ$襸‰EÌ踅À…ê‹UЋƒè‰…À„o‹ƒä´‰D$‹Eä‰$è緉ƅÀ„%‰$è\¸‰Ç躷…À„c‹ƒ$³‹‰ƒ ³ǃ³·1ÿ韋ƒ$³‹‰ƒ ³ǃ³¶ƒ¼FèXpÿÿ1ö‹MÔ‹ƒè‰…À„ª‹U‹ƒè‰…À„Š‹E䋃ꉅÒu ‹Eä‹P‰$ÿR‰ðƒÄL[^_]ËB‰$ÿPé~þÿÿ1ö‰ðƒÄL[^_]˃$³‹‰ƒ ³ǃ³¶‹ƒè‰…À„ˆ…ÿ„bÿÿÿ‹ƒè‰…À…Sÿÿÿ‹G‰<$ÿPéEÿÿÿ‹B‰$ÿPéhÿÿÿ‹A‰ $ÿPéHÿÿÿ‹ƒ$³‹‰ƒ ³ǃ³·é ÿÿÿ‹G‰<$ÿPédþÿÿ‹B‰$ÿPéƒþÿÿ‹F‰4$ÿPé9þÿÿ‹F‰4$ÿPéjÿÿÿ‹ƒè‰…Àt]‹M‹A‰|$‹ỦT$‰ $ÿ…ÀxN@‹M‹A,ЋI‹B‰D$‹B ‰D$ ‹B‰D$‹UÔ‰T$‹E‰$ÿQ…À„މÆéyþÿÿ‹F‰4$ÿPë˜Ç$èýµ‰Ç…ÀtM‹ƒ ¶ƒ‹ƒ ¶‰G ‰|$‹ƒ‚º‹‰$è]¶‰Æ…Àtq‹ƒè‰…Àt[1É1Ò‰ðèÑfÿÿ‹ƒè‰…Àt:‹ƒ$³‹‰ƒ ³ǃ³¹éåýÿÿ‹ƒ$³‹‰ƒ ³ǃ³ºéÈýÿÿ‹F‰4$ÿP뻋G‰<$ÿPëš‹ƒ$³‹‰ƒ ³ǃ³¹é3þÿÿ‹ƒ$³‹‰ƒ ³ǃ³¶‹UЋƒè‰…À…kýÿÿ‹B‰$ÿPé]ýÿÿU‰åWVSƒì<èlTÇEäUE ÇD$ Mä‰L$ÇD$Ç$‹¨®èYgÿÿ…Àˆ£ƒ¨®‰D$ ƒ1‰D$‹E‰D$‹E ‰$èÞ´…À„3‹Eƒ‹ƒ(°‰D$‹U‰$èW´‰Æ…À„ƒÇ$èZ´‰Ç…À„b‹Eä‰D$‰|$‰4$è¡´‰EÔ…À„D‹ƒè‰…À„'‹ƒè‰…À„ ‹EÔ‰$è᳉ƅÀ„”‹UÔ‹ƒè‰…Àu3‹UÔ‹B‰$ÿPë%‹ƒè®‹‰ƒä®ǃà®mƒ¨Bè{lÿÿ1ö‹Uä…Òt‹ƒè‰…À„!‹U‹ƒè‰…À„ð‹U …Òt‹ƒè‰…À„è‹U…Òt‹ƒè‰…Àu ‹E‹P‰$ÿR‰ðƒÄ<[^_]ËU …Òt‹ƒè‰…À„6‹U…Òt‹ƒè‰…À„‹Uä…Òt‹ƒè‰…À„æ1ö‰ðƒÄ<[^_]ËG‰<$ÿPéèþÿÿ‹F‰4$ÿPéËþÿÿ‹ƒè®‹‰ƒä®ǃà®m‹ƒè‰…ÀtU…ÿ„øþÿÿ‹ƒè‰…À…éþÿÿ‹G‰<$ÿPéÛþÿÿ‹B‰$ÿPéÿÿÿ‹E ‹P‰$ÿRéÿÿÿ‹Eä‹P‰$ÿRéÎþÿÿ‹F‰4$ÿPë ‹ƒè®‹‰ƒä®ǃà®m‹UÔ‹ƒè‰…À…vþÿÿ‹UÔ‹B‰$ÿPéeþÿÿ‹Eä‹P‰$ÿR1öé»þÿÿ‹E‹P‰$ÿRéàþÿÿ‹E ‹P‰$ÿRé¹þÿÿU‰åWVSƒìèbQ‹EƒÇ$èÛ±‰Æ…À„Š‹Uƒ‰P ‰D$‹ƒZ«‰$èB²‰Ç…Àt7‹ƒè‰…Àt!‹U‹ƒè‰…Àu ‹B‰$ÿP‰øƒÄ[^_]ËF‰4$ÿPëÔ‹ƒÞ«‹‰ƒÚ«ǃ֫3‹ƒè‰…Àt)ƒÆ?èjÿÿ1ÿ뢋ƒÞ«‹‰ƒÚ«ǃ֫3ë׋F‰4$ÿPëÌU‰åWVSƒìè‰P‹Eƒ‹ƒQ¬‰D$‹U‰$èఉƅÀ„äÇD$‰$èk±‰Ç…À„•‹ƒè‰…Àt:‰<$èš°‰Æ…ÀtC‹ƒè‰…Àtf‹U‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄ[^_]ËF‰4$ÿP‰<$èW°‰Æ…Àu½‹ƒ«‹‰ƒ«ǃýªy‹ƒè‰…Àu9‹G‰<$ÿPë.‹G‰<$ÿP닃«‹‰ƒ«ǃýªy‹ƒè‰…Àt,ƒ?èÍhÿÿ1öéZÿÿÿ‹ƒ«‹‰ƒ«ǃýªyëÔ‹F‰4$ÿPëÉU‰åWVSƒìèMOƒ©‰D$ ƒù+‰D$‹E‰D$‹E ‰$èý¯…Àu 1ö‰ðƒÄ[^_]ËEƒ‹ƒ «‰D$‹U‰$èn¯‰Æ…ÀtnÇD$‰$èý¯‰Ç…À„†‹ƒè‰…Àt>‰<$è,¯‰Æ…À„—‹ƒè‰…ÀtS‹U‹ƒè‰…Àu…‹B‰$ÿP‰ðƒÄ[^_]ËF‰4$ÿPë·‹ƒÉ©‹‰ƒÅ©ǃÁ©¹ƒ>è«gÿÿ1öë­‹G‰<$ÿP뢋ƒÉ©‹‰ƒÅ©ǃÁ©¹‹ƒè‰…ÀuËF‰4$ÿP븋ƒÉ©‹‰ƒÅ©ǃÁ©¹‹ƒè‰…Àu•‹G‰<$ÿPëŠU‰åWVSƒì<èìMƒ0¨‰D$ ƒ˜*‰D$‹E‰D$‹E ‰$蜮…ÀuÇEЋEЃÄ<[^_]ËEƒ‹³Ê¯ƒÇ$èC®‰EÔ…À„›‹ƒè‰…À„þ‹U‰$èÓ­‰Eä…À„Z‹Eä‰$è{®‰Ç…À„ª‹ƒè‰…À„‹ƒ©‰D$‹EÔ‰$èž­‰EØ…À„º‹ƒ ª‰D$‰<$è­‰Eà…À„ÊÇD$‰$è ®‰EÜ…À„z‹Uà‹ƒè‰…À„¨Ç$èV­‰Eà…À„Qƒ‹Eà‰x ‹U܉PÇ$è0­‰EÜ…À„+‹Uà‰P ‰D$‹E؉$蜭‰Æ…À„g‹UØ‹ƒè‰…ÀtW‹UÜ‹ƒè‰…Àt>‹ƒè‰…Àt‰þéèþÿÿ‹F‰4$ÿP‰þéØþÿÿ‹F‰4$ÿPéîþÿÿ‹B‰$ÿPéJÿÿÿ‹B‰$ÿPë·‹B‰$ÿPëž‹ƒh¨‹‰ƒd¨ǃ`¨´‹}Ô‹³Ê¯ƒÔ<è%eÿÿÇEЋƒè‰…Àt1‹ƒè‰…Àt:‹U‹ƒè‰…À…õýÿÿ‹B‰$ÿP‹EЃÄ<[^_]ËG‰<$ÿP‹ƒè‰…ÀuÆ‹F‰4$ÿP뻋F‰4$ÿPéôýÿÿ‹ƒh¨‹‰ƒd¨ǃ`¨µ‰þ‹U䋃艅Àtw‹EØ…Àt‹UØ‹ƒè‰…Àt~‹}à…ÿt‹Uà‹ƒè‰…Àt^‹MÜ…Ét‹UÜ‹ƒè‰…Àt‹}Ôéÿÿÿ‹B‰$ÿP‹}Ôéÿÿÿ‹ƒh¨‹‰ƒd¨ǃ`¨³‰÷éàþÿÿ‹Uä‹B‰$ÿPéxÿÿÿ‹B‰$ÿPë—‹B‰$ÿPétÿÿÿèÿª…À„«‹ƒh¨‹‰ƒd¨ǃ`¨´ÇEØÇEàÇEÜéÿÿÿ‹ƒh¨‹‰ƒd¨ǃ`¨µ‰þÇEàÇEÜéåþÿÿ‹ƒh¨‹‰ƒd¨ǃ`¨µ‰þÇEÜé¿þÿÿ‹ƒh¨‹‰ƒd¨ǃ`¨µ‰þÇEàé™þÿÿ‹U䋃艅Àt‹EÔƒ‰EЉÇéøýÿÿ‹B‰$ÿPëåU‰åWVSƒìè·I‹EƒÇ$è0ª‰Æ…À„’‹U‹Bƒ‹B‰F ‰t$‹ƒ·£‰$葪‰Ç…Àt9‹ƒè‰…Àt#‰þ‹U‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄ[^_]ËF‰4$ÿPëÒ‹ƒ3¤‹‰ƒ/¤ǃ+¤¬‹ƒè‰…Àt)ƒË8èSbÿÿ1ö뢋ƒ3¤‹‰ƒ/¤ǃ+¤¬ë׋F‰4$ÿPëÌU‰åWVSƒìèÖH‹Eƒ‹U ƒÇ$èI©‰Æ…ÀtQ‹ƒN¦ƒ‹ƒN¦‰F ‰t$‹ƒÌª‹‰$è©©‰Ç…À„®‹ƒè‰…Àt~1É1Ò‰øèZÿÿ‹ƒè‰…Àt]‹ƒR£‹‰ƒN£ǃJ£°ƒ8èŠaÿÿ‹U‹ƒè‰…Àt!‹U ‹ƒè‰…Àu ‹B‰$ÿP1ÀƒÄ[^_]ËB‰$ÿPëÔ‹G‰<$ÿP똋F‰4$ÿP1É1Ò‰øè’Yÿÿ‹ƒè‰…À…uÿÿÿëЋƒR£‹‰ƒN£ǃJ£°‹ƒè‰…À…dÿÿÿ‹F‰4$ÿPéVÿÿÿU‰åWVSƒìLè—G‹Eƒ‹³u©ƒ‹U‹B ‹@0‹@<ƒ‹ƒè‰…À„‹M‹A ‹@0‹@<‰EäÇ$èý§‰EÄ…À„F‹ƒè‰…À„à‹E‹@‰EÈ‹U‹R‰U¼9ÐŽPRÁà‰EÜÇEÔÇEÐÇEÌÇEàÇE؉ÂëƒE؃EÜ‹EÈ+E¼;EØ„ ‹UÜ‹M‹A P(‹A9Ö;B}Ñ‹ƒK£‰D$‹Uä‹B‰$觉ƅÀ„‹M‹A ‹@(‹UÜ‹D‰$觉DžÀ„”Ç$è÷¦‰Eà…À„}‰x ‰D$‰4$èi§‰Ç…À„d‹ƒè‰…À„‹Uà‹ƒè‰…À„à‰<$襦‰Æ…Àˆ‹ƒè‰…À„q…ö„ÓÇEàÇEÌÇEÐÇEÔƒE؃EÜ‹EÈ+E¼;EØ…÷þÿÿ‹Mĉ $è#¦…À„f‹uĉNjU䋃艅Àt7‹ƒè‰…Àt!‹M‹ƒè‰…Àu ‹A‰ $ÿP‰øƒÄL[^_]ËF‰4$ÿPëÔ‹B‰$ÿP뾋F‰4$ÿPéëýÿÿ‹F‰4$ÿPéþÿÿ‹B‰$ÿPéÿÿÿ‹F‰4$ÿPéòþÿÿ‹M‹A ‹@(EÜ‹P ‰UÀ‹IʉUÀ‹)ʉUÀ‹ƒ¯¢‰D$‹Eĉ$èg¥‰Æ…À„‹ƒ[¤‰D$‹Uä‰$èH¥‰Eà…À„‹M‹A ‹@(‹UÜ‹D‰$èÀ¥‰Ç…À„{‹MÀ‰ $è«¥‰EÌ…À„e‹EÀƒÀ‰$è’¥‰EÐ…À„LÇ$èù¤‰EÔ…À„5‰x ‹ỦP‹MЉH‰D$‹Eà‰$è\¥‰Ç…À„²‹Uà‹ƒè‰…À„°‹MÔ‹ƒè‰…À„Ç$è–¤‰EÌ…À„E‰x ‰D$‰4$襉DžÀ„,‹ƒè‰…Àt|‹UÌ‹ƒè‰…Àtc‹ƒè‰…À…Áýÿÿ‹G‰<$ÿPÇEàÇEÌÇEÐÇEÔéªüÿÿ‹G‰<$ÿPéýÿÿ‹A‰ $ÿPébÿÿÿ‹B‰$ÿPéBÿÿÿ‹B‰$ÿPë’‹F‰4$ÿPévÿÿÿ‹ƒ¢‹‰ƒ¢ǃ ¢•ÇEÔ‹uÄ‹EÔ…Àt‹MÔ‹ƒè‰…Àtƒÿ6èV\ÿÿ1ÿéVýÿÿ‹A‰ $ÿPë㋃¢‹‰ƒ¢ǃ ¢ŽëÉ‹ƒ¢‹‰ƒ¢ǃ ¢’‹ƒè‰…Àtr…ÿt ‹ƒè‰…ÀtX‹Eà…Àt‹Uà‹ƒè‰…ÀtY‹EÌ…Àt‹MÌ‹ƒè‰…ÀtO‹EÐ…À„Jÿÿÿ‹UЋƒè‰…À…8ÿÿÿ‹B‰$ÿP‹uÄé*ÿÿÿ‹G‰<$ÿPë‹F‰4$ÿP냋B‰$ÿP뜋A‰ $ÿP릋ƒ¢‹‰ƒ¢ǃ ¢”éEÿÿÿ‹ƒ¢‹‰ƒ¢ǃ ¢’ÇEÔÇEÐÇEÌÇEàéÿÿÿ‹ƒ¢‹‰ƒ¢ǃ ¢’éþÿÿ‹ƒ¢‹‰ƒ¢ǃ ¢”ÇEàÇEÐÇEÔé½þÿÿ‹ƒ¢‹‰ƒ¢ǃ ¢”ÇEÌÇEÐé’þÿÿ‹ƒ¢‹‰ƒ¢ǃ ¢”‹uÄé#þÿÿ‹ƒ¢‹‰ƒ¢ǃ ¢”1ÿéSþÿÿU‰åWVSƒì,èA‹uƒÇEä}ä‹F‰|$‰4$ÿPƒøþt%…Àê‹~‹ƒè‰…Àu ‹F‰4$ÿP‰øƒÄ,[^_]˃›‹‰ƒ‰›ǃ…›%ƒ0èíYÿÿ¿ÿÿÿÿë¸U‰åWVSƒì\è’@‹u‹ƒÀ‰‹~ …ÿ„È1Àƒ} •À‰Eà…À…Ã1ÿ‹F,;ƒp¢„í‹HF ‰D$8F‰D$4‹F()ø‰D$0‹V‰D$,‹A,‰D$(‹A ‰D$$‹A‰D$ A‰D$‹A‰D$‹A‰D$‹A‰D$‹A‰D$ ‹F$‰D$‹F ‰D$‹F ‰$èr3ÿÿƒÀ„ó~‰~‹Mà…ÉuN‹~+~‹ƒè‰…Àu ‹F‰4$ÿP‰øƒÄ\[^_]ËE ‹…Òˆ0ÿÿÿ;V'ÿÿÿ‹F‰T$‰4$ÿP ‰Çéÿÿÿ‹E ‹…Òx©Çë¡‹N09Á„µF ‰D$(F‰D$$‹F()ø‰D$ ‹V‰D$‹A‰D$‹A‰D$‹A ‰D$‹A‰D$ ‹F$‰D$‹F ‰D$‹F ‰$è.ÿÿƒÀ…'ÿÿÿ‹ƒ›‹‰ƒ ›ǃ›ë‹ƒ›‹‰ƒ ›ǃ›üƒN0èXÿÿ¿þÿÿÿ‹éóþÿÿ¿ÿÿÿÿééþÿÿÇ$è*Ÿ‰Ç…ÀtR‹ƒÚƒ‹ƒÚ‰G ‰|$‹ƒ¼¢‹‰$芟‰Eä…ÀtX‹ƒè‰…ÀtB1É1Ò‹EäèüOÿÿ‹U䋃艅Àt‹ƒ›‹‰ƒ ›ǃ› é^ÿÿÿ‹B‰$ÿPëØ‹G‰<$ÿP볋ƒ›‹‰ƒ ›ǃ› ‹ƒè‰…À…!ÿÿÿ‹G‰<$ÿPéÿÿÿU‰åWVSƒì,èÑ=‹u‹}ƒ‹EƒƒÇF‹E ‰F ‹E‰F$‹Uƒ‹F,‹ƒê‰…Ò„³‹E‰F,‹“¯Ÿ9×t@‹G09Є˃‹F0‹ƒê‰…Ò„¥‹G0‰F0‹G,ƒ‹F,‹ƒê‰…Òtz‹G,‰F,‹F‰F ‰$èþÿÿÇEÜ‹ƒè‰…Àt8‹U‹ƒè‰…Àt‹ƒè‰…Àu ‹G‰<$ÿP‹E܃Ä,[^_]ËB‰$ÿPëÖ‹F‰4$ÿP뽋F,‹P‰$ÿRé<ÿÿÿ‹F,‹P‰$ÿRéuÿÿÿ‹F0‹P‰$ÿRéJÿÿÿ9G,…Gÿÿÿ‹ƒA™‰D$‰<$è‰Eà…À„›ÇD$‰$è‰Eä…Àt9‹Uà‹ƒè‰…Àt ‹U䋃艅À…óþÿÿ‹B‰$ÿPéåþÿÿ‹B‰$ÿPëÕ‹ƒM˜‹‰ƒI˜ǃE˜Ç‹Uà‹ƒè‰…ÀtƒÁ-èMUÿÿÇEÜþÿÿÿéÌþÿÿ‹Uà‹B‰$ÿPëÛ‹ƒM˜‹‰ƒI˜ǃE˜ÇëÁU‰åWVSƒìLèÅ;‹}‹ƒÂ‰‹‡`;‡`|x‹O …Ét{‹—$`G ‰D$(‡`‰D$$ÇD$ G‰D$‹B‰D$‹B‰D$‹B ‰D$‹B‰D$ ‹‡ `‰D$‹‡`‰D$‰ $è_*ÿÿƒÀtD1ÀLJ`‹‰Æ;‡`|!¾ÿÿÿÿBÿ‰…Àu ‹G‰<$ÿP‰ðƒÄL[^_]Ã@‰‡`ëÙ‹ƒA–‹‰ƒ=–ǃ9–E܉D$Eà‰D$Eä‰$èr›ƒå+‰$èæ›‰Æ‹E܉D$‹Eà‰D$‹Eä‰$裛…öt‰4$è2œ1ö‹éjÿÿÿ‹³£ëçU‰åWVSƒì,èz:‹u‹Eƒ‹E…À„’‹E…Àt7…ö~3‹U 1Éë ƒÁƒÂ9Ît"‹…Àˆ2‹B‹};G~á‰GƒÁƒÂ9ÎuÞ‹E‰D$ ÇD$‰t$‹U ‰$èUÿÿ9Æ„ÓÇ$蚉ƅÀtY‹ƒ˜ƒ‹ƒ˜‰F ‰t$‹ƒ¤œ‹‰$èᚉDžÀ„y‹ƒè‰…À„Ç1É1Ò‰øèMKÿÿ‹ƒè‰…À„Ÿ‹ƒö”‹‰ƒò”ǃî”oE܉D$Eà‰D$Eä‰$è šƒÆ*‰$è~š‰Æ‹E܉D$‹Eà‰D$‹Eä‰$è;š…öt]‰4$èÊš1ö‹}‹ƒè‰…Àu ‹G‰<$ÿP‰ðƒÄ,[^_]Ã÷Ø‹};Gެþÿÿ‰GéÆþÿÿ‹G‰<$ÿPéSÿÿÿ‹F‰4$ÿPé+ÿÿÿ‹³Xœë›Ç$èS™‰Æ…Àt^‹ƒ˜ƒ‹ƒ˜‰F ‰t$‹ƒ¤œ‹‰$è³™‰Ç…À„€‹ƒè‰…À„‹1É1Ò‰øèJÿÿ‹ƒè‰…Àu ‹G‰<$ÿP‹ƒö”‹‰ƒò”ǃî”eéÈþÿÿ‹ƒö”‹‰ƒò”ǃî”o‹ƒè‰…À…¡þÿÿ‹F‰4$ÿPé“þÿÿ‹ƒö”‹‰ƒò”ǃî”eëÉ‹F‰4$ÿPégÿÿÿU‰åWVSƒì,èÜ7‹}‹ƒÂ‰‹G;G|‹G‹U ‰T$‰<$ÿPƒøþt5‹‹G‰Æ;G|!¾ÿÿÿÿBÿ‰…Àu ‹G‰<$ÿP‰ðƒÄ,[^_]Ã@‰GëÜ‹ƒX’‹‰ƒT’ǃP’,E܉D$Eà‰D$Eä‰$èó—ƒT(‰$èg˜‰Æ‹E܉D$‹Eà‰D$‹Eä‰$è$˜…öt‰4$賘1ö‹émÿÿÿ‹³º™ëçU‰åWVSƒì,èû6‹} ‹Eƒ‹p()þvÁà…ÿ~ …À~‹M‹Q‰D$‰D$‰$èà–ƒÿ~!‹U‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄ,[^_]ËU‹B(@Áà‰D$‹B‰$èl—…Àt ‹M‰AÑa(ëµÇ$èò–‰Æ…ÀtU‹ƒ?”ƒ‹ƒ?”‰F ‰t$‹ƒÁ˜‹‰$èR—‰Ç…À„³‹ƒè‰…À„–1É1Ò‰øè¾Gÿÿ‹ƒè‰…Àtu‹ƒw‘‹‰ƒs‘ǃo‘ÞE܉D$Eà‰D$Eä‰$è–ƒ£'‰$è󖉯‹E܉D$‹Eà‰D$‹Eä‰$è°–…öt‰4$è?—1öéáþÿÿ‹³Ù˜ëé‹G‰<$ÿP뀋F‰4$ÿPé\ÿÿÿ‹ƒw‘‹‰ƒs‘ǃo‘Þ‹ƒè‰…À…cÿÿÿ‹F‰4$ÿPéUÿÿÿU‰åWVSƒì<è;5‹}‹u ƒƒ;³—„‹F;G(Z‰G‹V…Ò~‹GRÁâ‹N‰T$‰L$‰$è •‹ƒè‰…Àt‹ƒè‰…Àu ‹F‰4$ÿP1ÀƒÄ<[^_]ËG‰<$ÿPë×@Áà‰D$‹G‰$è–•…À„;‰G‹F‰G(é{ÿÿÿÇ$蕉EÈ…Àti‹ƒ‡’ƒ‹ƒ‡’‹UȉB ‰T$‹ƒ—‹‰$èq•‰EÔ…À„«‹UÈ‹ƒè‰…À„l1É1Ò‹EÔèØEÿÿ‹UÔ‹ƒè‰…Àu ‹B‰$ÿP‹ƒ·‹‰ƒ³ǃ¯8E܉D$Eà‰D$Eä‰$蔃&‰$蕉EЋE܉D$‹Eà‰D$‹Eä‰$è½”‹EÐ…À„Ó‹UЉ$èB•é¯þÿÿ‹ƒ·‹‰ƒ³ǃ¯8‹UÈ‹ƒè‰…À…xÿÿÿ‹UÈ‹B‰$ÿPégÿÿÿÇ$è蓉EÈ…ÀtX‹ƒ’ƒ‹ƒ’‹UȉB ‰T$‹ƒ—‹‰$èD”‰EÌ…Àty‹UÈ‹ƒè‰…Àt`1É1Ò‹EÌè³Dÿÿ‹UÌ‹ƒè‰…Àt;‹ƒ·‹‰ƒ³ǃ¯<éßþÿÿ‹ƒ—‰EЉÂé ÿÿÿ‹B‰$ÿPé†þÿÿ‹B‰$ÿP뺋B‰$ÿPë•‹ƒ·‹‰ƒ³ǃ¯<éÿÿÿU‰åWVSƒìLè‚2ÇEàE؉D$E܉D$Eà‰D$Eä‰D$ƒr~‰D$ ƒš#‰D$‹E‰D$‹E ‰$è“…À„#‹Eàƒ‹³jŒ‹}à…ö„X‹G9Æt‰t$‰$誓…À„ë‹}à‹G‰EÈ‹u؉uÐ9ðŽ/‹Mä‰MÌ‹W(v9 Â,v ʼnòƒÂ‰UØ;UÈ„‹G(‹ƒÁ;EÌ~ã‹uØ‹E܉EÔ9ð}1‹W(@Áà‹MÌ;L|L‹UÔƒÂ9Öt ‹ƒÁ9EÌ}ï‰UÔ‰Ñë‹MÔ‰ $èr’‰Æ…À„*‹E؉$è]’‰Ç…ÀtHÇ$èÉ‘…Àt8‰p ‰x‰Æ‹Eà‹ƒê‰…Òu‹Eà‹P‰$ÿR‰ðƒÄL[^_]Ã1ö‰ðƒÄL[^_]˃þŒ‹‰ƒúŒǃöŒR‹ƒè‰…À„<…ÿt‹ƒè‰…À„7ƒ¢#èJÿÿ1öë‡Ç$è8‘‰Æ…ÀtY‹ƒîƒ‹ƒî‰F ‰t$‹ƒˆ”‹‰$蘑‰Ç…À„‹ƒè‰…À„ó1É1Ò‰øèBÿÿ‹ƒè‰…À„Ë‹ƒþŒ‹‰ƒúŒǃöŒIéiÿÿÿ‹ƒþŒ‹‰ƒúŒǃöŒRéLÿÿÿ‹G‹@ ‰D$‹F ‰D$ ƒ¢‰D$ƒJ‰D$‹ƒœ”‹‰$è3‹ƒþŒ‹‰ƒúŒǃöŒEéúþÿÿƒ6‰D$‹ƒ”‹‰$èüëljÖéôýÿÿ‹F‰4$ÿPé¶þÿÿ‹G‰<$ÿPé»þÿÿ‹G‰<$ÿPé'ÿÿÿ‹F‰4$ÿPéÿþÿÿ‹ƒþŒ‹‰ƒúŒǃöŒIé`þÿÿU‰åWVSƒìLè‹E܉F ÇE܉t$‹Eà‰$è|‰EÐ…À„^‹Eà‹ƒê‰…Ò„ÇEà‹ƒè‰…À„䋃艅À„Á‹UЉUÌ‹ƒRx‰D$‹U‹B<‰$è˜{‰Eä…À„;‹ƒvy‰D$‹Ẻ$èx{‰EÜ…À„Ç$èz{‰Â‰Eà…À„‹E܉B ÇEÜ‹Eà‰D$‹Eä‰$èÚ{‰Æ…À„Ù‹E䋃ꉅ҄/ÇEä‹Eà‹ƒê‰…Ò„ÇEà‹ƒè‰…À„á‹UÌ‹ƒÀ‰‰Ö‹UÌ鋃šw‹‰ƒ–wǃ’wTÇEÔ‰}Ì‹Uä…Òt‹ƒè‰…À„ä‹Uà…Òt‹ƒè‰…À„ß‹UÜ…Òt‹ƒè‰…À„Ú‹EÔ…Àt‹UÔ‹ƒè‰…À„ÒƒÂè"3ÿÿ1ö‹UÌ‹ƒè‰…Àtv‹U‹ƒè‰…Àt]‹U ‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄ<[^_]˃šw‹‰ƒ–wǃ’wRÇEÔ‹ƒè‰…À„E‹ƒü~‰EÌéÿÿÿ‹B‰$ÿP똋B‰$ÿPé|ÿÿÿ‹Eä‹P‰$ÿRé ÿÿÿ‹Eà‹P‰$ÿRéÿÿÿ‹EÜ‹P‰$ÿRéÿÿÿ‹B‰$ÿPé ÿÿÿ‹ƒšw‹‰ƒ–wǃ’wRÇEÔ‰}Ìéžþÿÿ‹ƒšw‹‰ƒ–wǃ’wV‹UÜ…Òt‹ƒè‰…À„„ÇEÜ‹Uä…Òt‹ƒè‰…À„VÇEä‹Uà…Òt‹ƒè‰…À„(ÇEà‹»¶w‰|$‹ƒŽw‰$èËx‰Æ…À„€‰$èÈx‰Ç‹ƒè‰…Àt;…ÿuBÇEÔéèýÿÿ‹F‰4$ÿPé­þÿÿ‹ƒšw‹‰ƒ–wǃ’wRéþÿÿ‹F‰4$ÿP뺃žè/1ÿÿMàUäEÜè‹.ÿÿ…ÀˆŸ‹EÜ‹ƒê‰…Ò„|ÇEÜ‹E䋃ꉅ҄RÇEä‹Eà‹ƒê‰…Ò„(ÇEàé ýÿÿ‹G‰<$ÿP‹EЉEÌé1üÿÿ‹F‰4$ÿPéüÿÿ‹Eà‹P‰$ÿRéçûÿÿ‹Eà‹P‰$ÿRéÇþÿÿ‹Eä‹P‰$ÿRé™þÿÿ‹EÜ‹P‰$ÿRékþÿÿ‹ƒšw‹‰ƒ–wǃ’wTÇEÔé{ýÿÿ‹G‰<$ÿPéèúÿÿ‹B‰$ÿPéËúÿÿ‹F‰4$ÿPé«úÿÿ‰|$‹ƒ‹‰$ènw‹ƒšw‹‰ƒ–wǃ’wWÇEÔéUüÿÿ‹F‰4$ÿPéüÿÿ‹Eà‹P‰$ÿRéêûÿÿ‹Eä‹P‰$ÿRéÀûÿÿ‹Eà‹P‰$ÿRéÇþÿÿ‹Eä‹P‰$ÿRéþÿÿ‹EÜ‹P‰$ÿRésþÿÿ‹ƒšw‹‰ƒ–wǃ’wWéáýÿÿU‰åWVSì¡èÇE䋃Zu‰Eà‹ƒ^u‰EÜ‹ƒbu‰EØE؉D$E܉D$Eà‰D$Eä‰D$ƒ&b‰D$ ƒò‰D$‹E‰D$‹E ‰$èxv…À„—‹E䃋Eàƒ‹E܃‹E؃‹“äwƒ1À9Uà•À‰E°…À„ú‹ƒr‰D$‹…\_ÿÿ‰$èük‰Ç…À„L ‹…_ÿÿ‰$è˜l‰…”_ÿÿ…À„Q‹ƒt‰D$‹…”_ÿÿ‰$èŸl‰…|_ÿÿ…À„û‹•”_ÿÿ‹ƒè‰…À„‹Ç$è¨k‰…”_ÿÿ…À„‰Â‹…|_ÿÿ‰B ‹ƒ rƒ‹ƒ r‰B‰T$‰<$èýk‰…l_ÿÿ…À„Å ‹ƒè‰…À„Ћ•”_ÿÿ‹ƒè‰…À„­‹³äw‹ƒè‰…À„+‹ƒ>r‰D$‹…\_ÿÿ‰$èùj‰Ç…À„o‹•_ÿÿ‰$è•k‰…”_ÿÿ…À„û‹ƒBt‰D$‹…”_ÿÿ‰$èœk‰…|_ÿÿ…À„Ç‹•”_ÿÿ‹ƒè‰…Àu ‹B‰$ÿPÇ$è j‰…”_ÿÿ…À„\‹•|_ÿÿ‹…”_ÿÿ‰P ‹ƒ rƒ‹ƒ r‹•”_ÿÿ‰B‰T$‰<$èëj‰…p_ÿÿ…À„`‹ƒè‰…Àu ‹G‰<$ÿP‹•”_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹ƒè‰…Àu ‹F‰4$ÿPè´j‰…˜_ÿÿ…À„Ç‹³äw‹ƒè‰…Àu ‹F‰4$ÿP1Àƒ}Äÿ•À‰E°…À…i1Àƒ}Àÿ•À‰E°…Àt]‹EÀ‰$è5j‰…|_ÿÿ…À„Ò‹…|_ÿÿ‰D$‹ƒVr‰D$‹•˜_ÿÿ‰$è—i…Àˆ=‹•|_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹…_ÿÿ‰$èîi‰Ç…À„y‹ƒ¶s‰D$‰<$èÿi‰…”_ÿÿ…À„Ï‹ƒè‰…À„²Ç$èi‰…|_ÿÿ…À„½ ‹…”_ÿÿ‹•|_ÿÿ‰B ‹ƒ"sƒ‹ƒ"s‰B‹“èw‰•_ÿÿ‹…|_ÿÿ‰D$‰$èMi‰…œ_ÿÿ…À„ ‹•|_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹“äw‹ƒè‰…Àu ‹B‰$ÿP‹ƒbq‰D$‹…`_ÿÿ‰$èNh‰Æ…À„… Ç$èQh‰Ç…À„'‹•˜_ÿÿƒ‰P ‹…œ_ÿÿƒ‰G‰|$‰4$è¯h‰… _ÿÿ…À„õ‹ƒè‰…Àu ‹F‰4$ÿP‹ƒè‰…Àu ‹G‰<$ÿP‹• _ÿÿ‹ƒè‰…Àu‹• _ÿÿ‹B‰$ÿPÇ…d_ÿÿ‹ƒNq‰D$‹…œ_ÿÿ‰$è’g‰…”_ÿÿ…À„õÇD$‹•”_ÿÿ‰$èh‰Æ…À„Õ‹•”_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹ƒè‰…Àu ‹F‰4$ÿPƒ½d_ÿÿ„a‹³äw1À9uÜ”À‰E°‰$è«g‰Ç…À„»‰$èg‰E°ƒøŒ&u‹ƒè‰…Àu ‹G‰<$ÿP‹… _ÿÿƒ‰Ç‰<$èÝf‰E°…Àˆ] ‹ƒè‰…Àu ‹G‰<$ÿP‹E°…Àt,èag‰Æ…À„‹EÜ‹ƒê‰…Òu ‹EÜ‹P‰$ÿR‰uÜÇ$è§f‰…t_ÿÿ…À„Ò‹“äw‹ƒè‰…Àu ‹B‰$ÿP‹E¼…ÀŽçÇ…_ÿÿÇ…|_ÿÿÇ…”_ÿÿ…¬ßÿÿ‰…ø^ÿÿ‹•_ÿÿ‰T$ÇD$ÿ‹…_ÿÿ‰$è€e…À”À¶À‰E°…À…Ñ ‹…ø^ÿÿ‰D$ ‹•_ÿÿ‰T$ƒ·`‰D$‹…_ÿÿ‰$è_eƒø•À¶À‰E°…À…¼J‹… _ÿÿ‰$è¡e‰E°ƒøŒ’„aÇ…”_ÿÿÇ…|_ÿÿƒ…_ÿÿ‹…_ÿÿ;E¼ŒCÿÿÿ‹•t_ÿÿ‰$è3fƒøÿ„>J…ÀŸÀ¶À‰E°…À„c"‹…t_ÿÿ‰D$‹ƒFt‰$èÜe‰Ç…À„$"Ç$èe‰…|_ÿÿ…À„í!‹•|_ÿÿ‰z ‰T$‹ƒàw‹‰$èse‰Æ…À„5!‹•|_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP1É1Ò‰ðèÔÿÿ‹ƒè‰…Àu ‹F‰4$ÿP‹ƒ‚p‹‰ƒ~pǃzp¤é ‹ƒ‚p‹‰ƒ~pǃzpqÇ…|_ÿÿ‹“äw‰•(_ÿÿ‰•$_ÿÿ‰•0_ÿÿ‰•,_ÿÿ‰•8_ÿÿ‰•4_ÿÿ‰•@_ÿÿ‰•<_ÿÿ‰•D_ÿÿ‰•H_ÿÿ‰•L_ÿÿ‰•P_ÿÿ‰•T_ÿÿ‰•X_ÿÿ‰Ö‹•”_ÿÿ…Òt‹•”_ÿÿ‹ƒè‰…À„Ú‹…|_ÿÿ…À„úôÿÿ‹•|_ÿÿ‹ƒè‰…À…åôÿÿ‹B‰$ÿPé×ôÿÿ‹ƒ‚p‹‰ƒ~pǃzpx‹ƒäw‰…(_ÿÿ‰…$_ÿÿ‰…0_ÿÿ‰…,_ÿÿ‰…8_ÿÿ‰…4_ÿÿ‰…@_ÿÿ‰…<_ÿÿ‰…D_ÿÿ‰…H_ÿÿé^ôÿÿ‹ƒ‚p‹‰ƒ~pǃzpy‹ƒäw‰…(_ÿÿ‰…$_ÿÿ‰…0_ÿÿéÿóÿÿ‹ƒ‚p‹‰ƒ~pǃzpn‹ƒè‰…À„ü‹³äw‰µX_ÿÿ‰µT_ÿÿ‰µP_ÿÿ‰µL_ÿÿ‰µH_ÿÿ‰µD_ÿÿ‰µ@_ÿÿ‰µ<_ÿÿ‰µ8_ÿÿ‰µ4_ÿÿ‰µ0_ÿÿ‰µ,_ÿÿ‰µ(_ÿÿ‰µ$_ÿÿé]îÿÿ‹F‰4$ÿPéfíÿÿ‹G‰<$ÿPéríÿÿ‹…_ÿÿ‰$èc‰Æ…À„ó‹»äw‹ƒè‰…À„ó‰µ(_ÿÿ‰½$_ÿÿétõÿÿ‹ƒ‚p‹‰ƒ~pǃzpn‹ƒè‰…À…‚íÿÿ‹F‰4$ÿPétíÿÿ‹B‰$ÿPéþÿÿ‹G‰<$ÿPéöþÿÿ‹ƒ‚p‹‰ƒ~pǃzpxÇ…|_ÿÿ‹“äw‰•(_ÿÿ‰•$_ÿÿ‰•0_ÿÿ‰•,_ÿÿ‰•8_ÿÿ‰•4_ÿÿ‰•@_ÿÿ‰•<_ÿÿ‰•D_ÿÿ‰•H_ÿÿ‰•L_ÿÿ‰•P_ÿÿ‰•T_ÿÿ‰•X_ÿÿ‰Ö…ÿ„eýÿÿ‹ƒè‰…À…Výÿÿ‹G‰<$ÿPéHýÿÿ‹G‰<$ÿPéÎñÿÿ‹ƒ‚p‹‰ƒ~pǃzpqÇ…”_ÿÿé@ÿÿÿ‹ƒ‚p‹‰ƒ~pǃzp{‰µ$_ÿÿ‹ƒäw‰…,_ÿÿ‰…(_ÿÿ‰…4_ÿÿ‰…0_ÿÿ‰…<_ÿÿ‰…8_ÿÿ‰…@_ÿÿé^ýÿÿ‹• _ÿÿ‰T$‹…_ÿÿ‰$èVa…À•À¶À‰E°…À…l‹“äw‰•,_ÿÿéôÿÿ‹F‰4$ÿPé]ïÿÿ‹B‰$ÿPé5ïÿÿ‹B‰$ÿPéwòÿÿ‹G‰<$ÿPéÿýÿÿ‹ƒ‚p‹‰ƒ~pǃzpxÇ…|_ÿÿ‹“äw‰•(_ÿÿ‰•$_ÿÿéÉûÿÿÇ$è`‰…|_ÿÿ…À„0‹ƒ>tƒ‹ƒ>t‹•|_ÿÿ‰B ‰T$‹ƒÐw‹‰$èb`‰Æ…À„V‹•|_ÿÿ‹ƒè‰…À„ª1É1Ò‰ðèÈÿÿ‹ƒè‰…À„‚‹ƒ‚p‹‰ƒ~pǃzp‰½0_ÿÿ‰øéRðÿÿ‹ƒ‚p‹‰ƒ~pǃzp~‹“äw‰•(_ÿÿ‰•$_ÿÿ‰•0_ÿÿ‰•,_ÿÿ‰•8_ÿÿ‰•4_ÿÿ‰•@_ÿÿ‰•<_ÿÿ‰•D_ÿÿ‰•H_ÿÿ‰•L_ÿÿ‰•P_ÿÿ‰•T_ÿÿ‰•X_ÿÿ‰Öéðÿÿ‹ƒ‚p‹‰ƒ~pǃzpz‹“äw‰•(_ÿÿ‰•$_ÿÿ‰•0_ÿÿë…‹F‰4$ÿPéhòÿÿ‹ƒ‚p‹‰ƒ~pǃzp‡‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‰µ<_ÿÿ‰ò‰µ8_ÿÿ‰µ@_ÿÿ‰µD_ÿÿ‰µH_ÿÿéLÿÿÿ‹ƒ‚p‹‰ƒ~pǃzp{‰µ$_ÿÿÇ…|_ÿÿ‹“äw‰•,_ÿÿ‰•(_ÿÿ‰•4_ÿÿ‰•0_ÿÿ‰•<_ÿÿ‰•8_ÿÿ‰•@_ÿÿ‰•D_ÿÿéÞùÿÿ‹F‰4$ÿPéÌñÿÿ‹G‰<$ÿPéJðÿÿ‹ƒ‚p‹‰ƒ~pǃzp…‹“äw‰•4_ÿÿ‰•0_ÿÿ‰•<_ÿÿ‰•8_ÿÿ‰•@_ÿÿ‰•D_ÿÿ‰•H_ÿÿé€þÿÿ‹ƒ‚p‹‰ƒ~pǃzp‡‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿÇ…|_ÿÿ‰µ<_ÿÿ‰ò‰µ8_ÿÿ‰µ@_ÿÿ‰µD_ÿÿé¯ûÿÿ‹ƒ‚p‹‰ƒ~pǃzp†‹…\_ÿÿ‰…0_ÿÿ‰µ8_ÿÿ‰òéØýÿÿ‹ƒ‚p‹‰ƒ~pǃzp{‰µ$_ÿÿ‹ƒäw‰…,_ÿÿ‰…(_ÿÿ‰…4_ÿÿ‰…0_ÿÿ‰…<_ÿÿ‰…8_ÿÿ‰…@_ÿÿ‰…D_ÿÿ‰…H_ÿÿ‰…L_ÿÿ‰…P_ÿÿ‰…T_ÿÿ‰…X_ÿÿ‰Æé%ûÿÿ‹ƒ‚p‹‰ƒ~pǃzp{‰µ$_ÿÿÇ…|_ÿÿ‹“äw‰•,_ÿÿ‰•(_ÿÿ‰•4_ÿÿ‰•0_ÿÿ‰•<_ÿÿ‰•8_ÿÿ‰•@_ÿÿ‰•D_ÿÿ‰•H_ÿÿé¢úÿÿÇ$èI\‰…”_ÿÿ…À„Ú‹ƒ&sƒ‹…”_ÿÿ‹P ‹ƒ&s‰‹•”_ÿÿ‹ƒrrèoÿÿ‰…|_ÿÿ…À„†‹•”_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹ƒ&s‰D$‹…|_ÿÿ‰$è”[‰Æ…À„Ý‹»äw‹ƒè‰…À„º‹•|_ÿÿ‹ƒè‰…À„—‹…_ÿÿ‰$è\‰…”_ÿÿ…À„PÇ$èQ[‰…|_ÿÿ…À„b‹…”_ÿÿ‹•|_ÿÿ‰B ‰T$‰4$è´[‰…¤_ÿÿ…À„¢‹•|_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹Eà‹ƒê‰…Òu ‹Eà‹P‰$ÿR‹…¤_ÿÿ‰Eà‰µ,_ÿÿéKîÿÿ‹ƒ‚p‹‰ƒ~pǃzp‰½0_ÿÿ‰úéeûÿÿ‹ƒ‚p‹‰ƒ~pǃzp|‰µ$_ÿÿ‰½(_ÿÿ‹ƒäwéRëÿÿ‹ƒ‚p‹‰ƒ~pǃzp‡‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‰µ<_ÿÿ‰ð‰µ8_ÿÿ‰µ@_ÿÿ‰µD_ÿÿ‰µH_ÿÿéoýÿÿ‹B‰$ÿPégîÿÿ‹B‰$ÿPéíÿÿ‹B‰$ÿPéëìÿÿ‹B‰$ÿPéÈìÿÿ‹ƒ‚p‹‰ƒ~pǃzp{‰µ$_ÿÿéŒûÿÿ‹ƒ‚p‹‰ƒ~pǃzp‡‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿé5üÿÿ‹ƒ‚p‹‰ƒ~pǃzpˆ‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‰µ@_ÿÿ‰ð‰µ<_ÿÿ‰µD_ÿÿ‰µH_ÿÿéBêÿÿ‹ƒ‚p‹‰ƒ~pǃzpƒ‹ƒäwéïéÿÿ‹F‰4$ÿPépùÿÿ‹B‰$ÿPéHùÿÿ‹F‰4$ÿPéÇíÿÿ‹ƒ‚p‹‰ƒ~pǃzpˆ‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿÇ…|_ÿÿ‰µ@_ÿÿ‰ò‰µ<_ÿÿ‰µD_ÿÿéüöÿÿ‹B‰$ÿPéEíÿÿ‹G‰<$ÿPé"íÿÿ‹ƒ‚p‹‰ƒ~pǃzp‰½0_ÿÿ‰ø‰½,_ÿÿ‰½8_ÿÿ‰½4_ÿÿ‰½@_ÿÿ‰½<_ÿÿ‰½D_ÿÿ‰½H_ÿÿ‰…L_ÿÿ‰…P_ÿÿ‰…T_ÿÿ‰…X_ÿÿ‰Æé#ôÿÿ‹ƒ‚p‹‰ƒ~pǃzp„‰µ,_ÿÿ‰½4_ÿÿ‰úéúÿÿ‹B‰$ÿPé[üÿÿ‹G‰<$ÿPé8üÿÿ‹ƒ‚p‹‰ƒ~pǃzpƒ‹“äw‰•0_ÿÿ‰•,_ÿÿ‰•8_ÿÿ‰•4_ÿÿ‰•@_ÿÿ‰•<_ÿÿ‰•D_ÿÿ‰•H_ÿÿ‰•L_ÿÿ‰•P_ÿÿ‰•T_ÿÿ‰•X_ÿÿ‰Öéoóÿÿ‹ƒ‚p‹‰ƒ~pǃzpƒ‹“äwéãòÿÿ‹ƒ‚p‹‰ƒ~pǃzpˆ‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‰µ@_ÿÿ‰ò‰µ<_ÿÿ‰µD_ÿÿéKõÿÿ‹ƒ‚p‹‰ƒ~pǃzp„‰µ,_ÿÿ‰½4_ÿÿ‰ø‰½0_ÿÿ‰½<_ÿÿ‰½8_ÿÿ‰½@_ÿÿ‰½D_ÿÿ‰½H_ÿÿ‰…L_ÿÿ‰…P_ÿÿ‰…T_ÿÿ‰…X_ÿÿ‰Æéoòÿÿ‹ƒ‚p‹‰ƒ~pǃzp„‰µ,_ÿÿ‰½4_ÿÿ‰ú‰½0_ÿÿ‰½<_ÿÿ‰½8_ÿÿ‰½@_ÿÿé±þÿÿ‹ƒ‚p‹‰ƒ~pǃzp‰‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹ƒäw‰…@_ÿÿ‰…D_ÿÿ‰…H_ÿÿéÔæÿÿ‹ƒ‚p‹‰ƒ~pǃzpŽ‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹ƒäw‰…H_ÿÿ‰…D_ÿÿéiæÿÿ‹Eĉ$èÜU‰…”_ÿÿ…À„‹•”_ÿÿ‰T$‹ƒ¶q‰D$‹…˜_ÿÿ‰$è>U…Àˆ'‹•”_ÿÿ‹ƒè‰…À…?ëÿÿ‹B‰$ÿPé1ëÿÿ‹ƒ‚p‹‰ƒ~pǃzpˆ‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‰µ@_ÿÿ‰ð‰µ<_ÿÿ‰µD_ÿÿ‰µH_ÿÿéê÷ÿÿ‹ƒ‚p‹‰ƒ~pǃzp•‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹“äw‰•H_ÿÿéõÿÿ‹• _ÿÿ‰T$‹…ø^ÿÿ‰$èÀT…À”À¶À‰E°…À„~‹•_ÿÿ‰$è•T‰Ç…À„I‰D$‹E܉$èU‰E°ƒøŒ½”À¶À‰E°‹ƒè‰…Àu ‹G‰<$ÿP‹}°…ÿ„-îÿÿ‹ƒq‰D$‹…t_ÿÿ‰$è|S‰…”_ÿÿ…À„Þ‹•_ÿÿ‰$èT‰…|_ÿÿ…À„1Ç$è_S‰Ç…À„‹…|_ÿÿ‰G ‰|$‹•”_ÿÿ‰$èÆS‰Æ…Àt_‹•”_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹ƒè‰…Àu ‹G‰<$ÿP‹ƒè‰…À…cíÿÿ‹F‰4$ÿPÇ…”_ÿÿÇ…|_ÿÿéUíÿÿ‹ƒ‚p‹‰ƒ~pǃzpŸ‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿÇ…|_ÿÿ‹ƒäw‰…P_ÿÿ‰…L_ÿÿ‰…X_ÿÿ‰…T_ÿÿ‰ÆéÄðÿÿ‹ƒ‚p‹‰ƒ~pǃzpŸ‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿ‹ƒäw‰…P_ÿÿ‰…L_ÿÿ‰…X_ÿÿ‰…T_ÿÿ‰Æé íÿÿ‹ƒ‚p‹‰ƒ~pǃzpŸ‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿ‹ƒäw‰…P_ÿÿ‰…L_ÿÿ‰…X_ÿÿ‰…T_ÿÿ‰Æé6âÿÿ‹ƒ‚p‹‰ƒ~pǃzpž‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿéHþÿÿ‹ƒ‚p‹‰ƒ~pǃzpžéùþÿÿÇ$è¡P‰…”_ÿÿ…À„‹ƒ&sƒ‹…”_ÿÿ‹P ‹ƒ&s‰‹•”_ÿÿ‹ƒrrèÇÿÿ‰Ç…À„Ë•”_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹ƒ&s‰D$‰<$èöO‰Æ…À„‹•,_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹ƒè‰…Àu ‹G‰<$ÿP‹…ø^ÿÿ‰$èdP‰…”_ÿÿ…À„›Ç$è¯O‰Ç…À„‹•”_ÿÿ‰P ‰D$‰4$èP‰…|_ÿÿ…À„`‹ƒè‰…Àu ‹G‰<$ÿP‹…_ÿÿ‰$èûO‰…”_ÿÿ…À„™‹•|_ÿÿ‰T$‰D$‹E܉$èMO…ÀxY‹•”_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹•|_ÿÿ‹ƒè‰…Àu‹•|_ÿÿ‹B‰$ÿP‰µ,_ÿÿÇ…”_ÿÿÇ…|_ÿÿé\éÿÿ‹ƒ‚p‹‰ƒ~pǃzp¢‰µ,_ÿÿé—üÿÿ‹ƒ‚p‹‰ƒ~pǃzp¢‰µ,_ÿÿ‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿ‹ƒäw‰…P_ÿÿ‰…L_ÿÿ‰…X_ÿÿ‰…T_ÿÿ‰Æé8êÿÿ‹ƒ‚p‹‰ƒ~pǃzp¢‰µ,_ÿÿ‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿÇ…”_ÿÿéBûÿÿ‹ƒ‚p‹‰ƒ~pǃzp¢‰µ,_ÿÿ‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿÇ…|_ÿÿéRûÿÿ‹ƒ‚p‹‰ƒ~pǃzp¢‰µ,_ÿÿélûÿÿ‹ƒ‚p‹‰ƒ~pǃzp¡‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿÇ…”_ÿÿÇ…|_ÿÿéúÿÿ‹ƒ‚p‹‰ƒ~pǃzp¡é9úÿÿ‹ƒ‚p‹‰ƒ~pǃzp¡é­úÿÿ‹ƒ‚p‹‰ƒ~pǃzp‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹“äw‰•H_ÿÿ‰•D_ÿÿé[ôÿÿ‹ƒ‚p‹‰ƒ~pǃzp‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹“äw‰•H_ÿÿ‰•D_ÿÿéJìÿÿ‹G‰<$ÿPé@âÿÿ‹ƒ‚p‹‰ƒ~pǃzpŽ‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿÇ…|_ÿÿ‹ƒäw‰…H_ÿÿ‰…D_ÿÿé+îÿÿ‹ƒ‚p‹‰ƒ~pǃzp“‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿÇ…”_ÿÿÇ…|_ÿÿ‰µH_ÿÿ‰òéÔèÿÿ‹ƒ‚p‹‰ƒ~pǃzp“‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹•œ_ÿÿ‰•D_ÿÿ‰µH_ÿÿ‰µL_ÿÿ‰µP_ÿÿ‰µT_ÿÿ‰µX_ÿÿéÿÚÿÿ‹E¸‰D$‹E´‰D$‹E¬‰$è;J‰»zpÇE¬ÇE´ÇE¸éõÿÿ‹ƒ‚p‹‰ƒ~pǃzp’ƒ½d_ÿÿ„È‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹•œ_ÿÿ‰•D_ÿÿÇ…|_ÿÿ‹ƒäw‰…H_ÿÿé‰òÿÿ‹ƒ‚p‹‰ƒ~pǃzp‹ƒè‰…Àu ‹F‰4$ÿP…ÿt‹ƒè‰…Àu ‹G‰<$ÿPE¸‰D$E´‰D$E¬‰$èÜH‹»zpÇ…d_ÿÿéëàÿÿ‹ƒ‚p‹‰ƒ~pǃzpŽ‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹ƒäw‰…H_ÿÿ‰…D_ÿÿéðÿÿ‹ƒ‚p‹‰ƒ~pǃzpŽ‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹ƒäw‰…H_ÿÿ‰…D_ÿÿéAñÿÿ‹ƒ‚p‹‰ƒ~pǃzpéßþÿÿ‹U¬…Òt‹ƒè‰…Àu ‹E¬‹P‰$ÿR‹U´…Òt‹ƒè‰…Àu ‹E´‹P‰$ÿR‹U¸…Ò„ñýÿÿ‹ƒè‰…À„p-‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿÇ…|_ÿÿ‹“äwéßâÿÿ‹ƒ‚p‹‰ƒ~pǃzp›éZõÿÿ‹ƒ‚p‹‰ƒ~pǃzp”‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹•œ_ÿÿ‰•D_ÿÿ‹ƒäw‰…H_ÿÿé~×ÿÿ‹ƒ‚p‹‰ƒ~pǃzp“‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿÇ…”_ÿÿÇ…|_ÿÿ‹“äwéeäÿÿ‹ƒ‚p‹‰ƒ~pǃzp‹‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿÇ…|_ÿÿ‰µH_ÿÿ‰ð‰µD_ÿÿéóîÿÿ‹ƒ‚p‹‰ƒ~pǃzp‹‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‰µH_ÿÿ‰ð‰µD_ÿÿé'Öÿÿ‹Eä‰D$‹ƒ2t‰$èÂE‰Ç…À„?Ç$èøD‰…”_ÿÿ…À„‰x ‰D$‹ƒ0x‹‰$è_E‰Æ…À„Ê‹•”_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP1É1Ò‰ðèÀõþÿ‹ƒè‰…Àu ‹F‰4$ÿP‹ƒ‚p‹‰ƒ~pǃzp˜‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹•œ_ÿÿ‰•D_ÿÿ‹…t_ÿÿ‰…H_ÿÿ‹“äw‰•P_ÿÿ‰•L_ÿÿ‰•X_ÿÿ‰•T_ÿÿ‰ÖéÕÿÿ‹ƒ‚p‹‰ƒ~pǃzp˜é_öÿÿ‹ƒ‚p‹‰ƒ~pǃzp˜éÅòÿÿ‹ƒ‚p‹‰ƒ~pǃzp˜éòÿÿ‹ƒ‚p‹‰ƒ~pǃzp¤‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹•œ_ÿÿ‰•D_ÿÿ‹…t_ÿÿ‰…H_ÿÿ‹“äw‰•P_ÿÿ‰•L_ÿÿ‰•X_ÿÿ‰•T_ÿÿ‰Öé-ßÿÿ‹ƒ‚p‹‰ƒ~pǃzp¤éöôÿÿ‹ƒ‚p‹‰ƒ~pǃzp¦éLñÿÿ‹E܉$è©Cƒøÿ„—'…ÀŸÀ¶À‰E°…À…÷$‹ƒäw‰…L_ÿÿ‹³"r‰t$‹ƒrp‰$èyB‰…|_ÿÿ…À„”$‹ƒ²r‰D$‹…|_ÿÿ‰$èSB‰…”_ÿÿ…À„Q$‹•|_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹…_ÿÿ‰$èÑB‰Ç…À„¤#Ç$è B‰…|_ÿÿ…À„m#‹•|_ÿÿ‰z ‹Eàƒ‹Eà‰B‰T$‹…”_ÿÿ‰$èwB‰Æ…À„#‹•”_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹•|_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹ƒè‰…Àu ‹F‰4$ÿP‹uÔ…öŽ1ö‹…_ÿÿ‰D$ÇD$ÿ‹•_ÿÿ‰$èå@…À”À¶À‰E°…À…½EȉD$ẺD$EЉD$ ‹…_ÿÿ‰D$ƒ¥`‰D$‹•_ÿÿ‰$è¹@ƒø•À¶À‰E°…À…ó ‹EЉ$è…A‰…”_ÿÿ…À„½ ‹Ẻ$èlA‰…|_ÿÿ…À„ ‹Eȉ$èSA‰Ç…À„ Ç$è»@‰…€_ÿÿ…À„y ‹•”_ÿÿ‰P ‹•|_ÿÿ‰P‰x‹…_ÿÿ‰$è%A‰…”_ÿÿ…À„ù ‹…€_ÿÿ‰D$‹•”_ÿÿ‰T$‹…l_ÿÿ‰$èn@…ÀˆÏ ‹•”_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹•€_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹…_ÿÿ‰$è«@‰…|_ÿÿ…À„ô ‹Ẻ$èy@‰Ç…À„T Ç$èá?‰…€_ÿÿ…À„¥‹•|_ÿÿ‰P ‰x‹EЉ$è>@‰…”_ÿÿ…À„KÇ$è¢?‰…|_ÿÿ…À„‹•”_ÿÿ‹…|_ÿÿ‰P ‰D$‹ƒøw‰$èÿ?‰Ç…À„¨‹•|_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹…€_ÿÿ‰D$‰|$‹•p_ÿÿ‰$èG?…Àˆ«‹ƒè‰…Àu ‹G‰<$ÿP‹•€_ÿÿ‹ƒè‰…Àu ‹B‰$ÿPƒÆ;uÔŒeýÿÿ‹ƒNq‰D$‹…l_ÿÿ‰$èÀ>‰…”_ÿÿ…À„ìÇD$‹•”_ÿÿ‰$èA?‰Æ…À„7‹•”_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹ƒè‰…Àu ‹F‰4$ÿP‹ƒNq‰D$‹…p_ÿÿ‰$èL>‰…€_ÿÿ…À„ÆÇD$‹•€_ÿÿ‰$èÍ>‰Æ…À„g‹•€_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹ƒè‰…Àu ‹F‰4$ÿP‹ƒ:tƒ‹“äw‹ƒè‰…Àu ‹B‰$ÿP‹ƒ:t‰…P_ÿÿ‹•_ÿÿ‰T$‰D$‹E؉$èR>…ÀˆÌ1Àƒ}°•À‰E°…À„1Ò‹ƒFrèõþÿ‰…_ÿÿ…À„W‹•$_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹ƒZr‰D$‹…_ÿÿ‰$è?=‰…|_ÿÿ…À„†‹ƒÊq‰D$‹…|_ÿÿ‰$è=‰…€_ÿÿ…À„Ï‹•|_ÿÿ‹ƒè‰…Àu ‹B‰$ÿPÇ$èþ<‰Ç…À„B‹E؃‹E؉G ‹ƒ:tƒ‹ƒ:t‰G‰|$‹•€_ÿÿ‰$èP=‰Æ…À„‹•€_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹ƒè‰…Àu ‹G‰<$ÿP‹»äw‹ƒè‰…Àu ‹G‰<$ÿP‰4$èK=…À„%‰D$‹…_ÿÿ‰$èn<‹•_ÿÿ‰•$_ÿÿ‰µT_ÿÿ1Ò‹ƒ sè³óþÿ‰…x_ÿÿ…À„i‹³äw‹ƒè‰…Àu ‹F‰4$ÿP•¬÷ÿÿ‰•ü^ÿÿ‹…_ÿÿ‰D$ÇD$ÿ‹•_ÿÿ‰$èV;…À•À¶À‰E°…À„Ä‹…_ÿÿ‰$èW<‰…ˆ_ÿÿ…À„+‹ƒè‰…Àu ‹F‰4$ÿP‹ƒúr‰D$‹•ˆ_ÿÿ‰$èi;‰Ç…À„ØÇ$èl;‰…”_ÿÿ…À„1‹ƒÆpƒ‹ƒÆp‹•”_ÿÿ‰B ‰T$‰<$èÆ;‰…|_ÿÿ…À„|‹ƒè‰…Àu ‹G‰<$ÿP‹•”_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹…|_ÿÿ‰$èë:‰E°…Àˆ‹•|_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹M°…É„eÇD$ÿÿÿÇD$‹•ˆ_ÿÿ‰$è«;‰…|_ÿÿ…À„¶‰D$‹…P_ÿÿ‰$èJ;‰…„_ÿÿ…À„‹•|_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹•P_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹³Úq‰t$‹ƒrp‰$è:‰Ç…À„Œ ‹ƒ¦q‰D$‰<$èó9‰…”_ÿÿ…À„O ‹ƒè‰…Àu ‹G‰<$ÿPÇD$ÿÿÿÇD$‹…ˆ_ÿÿ‰$èÕ:‰…|_ÿÿ…À„€ ‰D$‹ƒNt‰$èt:‰…€_ÿÿ…À„Ñ ‹•|_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹ƒRt‰D$‹…€_ÿÿ‰$è4:‰Ç…À„D ‹•€_ÿÿ‹ƒè‰…Àu ‹B‰$ÿPÇ$è<9‰…|_ÿÿ…À„Ÿ‰x ‰D$‹…”_ÿÿ‰$è¥9‰Æ…À„B ‹•”_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹•|_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹ƒè‰…Àu ‹F‰4$ÿP‹…ü^ÿÿ‰D$‹•_ÿÿ‰T$‹…_ÿÿ‰$芬þÿÁè‰E°…À…—‹µˆ_ÿÿ‹•„_ÿÿ‰•P_ÿÿéƒüÿÿ‹ƒ‚p‹‰ƒ~pǃzp²‹…œ_ÿÿ‰…D_ÿÿÇ…”_ÿÿÇ…|_ÿÿ‹“äw‰•T_ÿÿ‰•P_ÿÿ‰Ö‰•X_ÿÿ‹•€_ÿÿ‹ƒè‰…Àu‹•€_ÿÿ‹B‰$ÿP‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹•t_ÿÿ‰•H_ÿÿéKÖÿÿ‹ƒ‚p‹‰ƒ~pǃzp²‹…œ_ÿÿ‰…D_ÿÿÇ…”_ÿÿéFÿÿÿ‹ƒ‚p‹‰ƒ~pǃzp²‹…œ_ÿÿ‰…D_ÿÿ1ÿéÿÿÿ‹ƒ‚p‹‰ƒ~pǃzp²‹…œ_ÿÿ‰…D_ÿÿ1ÿÇ…|_ÿÿéæþÿÿ‹ƒ‚p‹‰ƒ~pǃzp²‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿÇ…”_ÿÿ‹ƒäw‰…T_ÿÿ‰…P_ÿÿ‰Æ‰…X_ÿÿé#Õÿÿ‹ƒ‚p‹‰ƒ~pǃzp²‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿ‹ƒäw‰…T_ÿÿ‰…P_ÿÿ‰Æ‰…X_ÿÿé$Òÿÿ‹ƒ‚p‹‰ƒ~pǃzp²‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿ‹ƒäw‰…T_ÿÿ‰…P_ÿÿ‰Æ‰…X_ÿÿ顯ÿÿ‹ƒ‚p‹‰ƒ~pǃzp±‹•œ_ÿÿ‰•D_ÿÿ1ÿÇ…|_ÿÿ‹ƒäw‰…T_ÿÿ‰…P_ÿÿ‰Æ‰…X_ÿÿéýÿÿ‹ƒ‚p‹‰ƒ~pǃzp±‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿé þÿÿ‹ƒ‚p‹‰ƒ~pǃzp±‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿ‹ƒäw‰…T_ÿÿ‰…P_ÿÿ‰Æ‰…X_ÿÿé/Ðÿÿ‹ƒ‚p‹‰ƒ~pǃzp±é%þÿÿ‹Eä‰D$‹ƒ6t‰$èº4‰…”_ÿÿ…À„?Ç$èì3‰…|_ÿÿ…À„‹•”_ÿÿ‰P ‰D$‹ƒ0x‹‰$èM4‰Æ…À„Ä‹•|_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP1É1Ò‰ðè®äþÿ‹ƒè‰…Àu ‹F‰4$ÿP‹ƒ‚p‹‰ƒ~pǃzp°‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹•œ_ÿÿ‰•D_ÿÿ‹…t_ÿÿ‰…H_ÿÿ‹“äw‰•T_ÿÿ‰•P_ÿÿ‰Ö‰•X_ÿÿéÄÿÿ‹ƒ‚p‹‰ƒ~pǃzp°éUüÿÿ‹ƒ‚p‹‰ƒ~pǃzp°éþÿÿ‹ƒ‚p‹‰ƒ~pǃzp°é¦üÿÿ‹Eä‰D$‹ƒ2t‰$è;3‰…”_ÿÿ…À„ÍÇ$èm2‰…|_ÿÿ…À„–‹•”_ÿÿ‰P ‰D$‹ƒ0x‹‰$èÎ2‰Æ…ÀtV‹•|_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP1É1Ò‰ðè3ãþÿ‹ƒè‰…Àu ‹F‰4$ÿP‹ƒ‚p‹‰ƒ~pǃzp­é€þÿÿ‹ƒ‚p‹‰ƒ~pǃzp­éHûÿÿ‹ƒ‚p‹‰ƒ~pǃzp­éýÿÿ‹ƒ‚p‹‰ƒ~pǃzp­é™ûÿÿ‹ƒ‚p‹‰ƒ~pǃzpË•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿ‹…„_ÿÿ‰…P_ÿÿ‹•x_ÿÿ‰•X_ÿÿ‹µˆ_ÿÿéŠÏÿÿ‹…ü^ÿÿ‰$è1‰Ç…À„;Ç$èÜ0‰…”_ÿÿ…À„ˆ‹•”_ÿÿ‰z ‰T$‹ƒ0x‹‰$è=1‰Æ…À„È‹•”_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP1É1Ò‰ðèžáþÿ‹ƒè‰…Àu ‹F‰4$ÿP‹ƒ‚p‹‰ƒ~pǃzpÅ‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹•œ_ÿÿ‰•D_ÿÿ‹…t_ÿÿ‰…H_ÿÿ‹•„_ÿÿ‰•P_ÿÿ‹…x_ÿÿ‰…X_ÿÿ‹µˆ_ÿÿéýÀÿÿ‹ƒ‚p‹‰ƒ~pǃzpÅ‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹•œ_ÿÿ‰•D_ÿÿ‹…t_ÿÿ‰…H_ÿÿ‹•„_ÿÿ‰•P_ÿÿ‹…x_ÿÿ‰…X_ÿÿ‹µˆ_ÿÿÇ…|_ÿÿé=Ëÿÿ‹ƒ‚p‹‰ƒ~pǃzpÅ‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹•œ_ÿÿ‰•D_ÿÿ‹…t_ÿÿ‰…H_ÿÿ‹•„_ÿÿ‰•P_ÿÿ‹…x_ÿÿ‰…X_ÿÿ‹µˆ_ÿÿÇ…|_ÿÿé7Íÿÿ‹ƒ‚p‹‰ƒ~pǃzpÅ‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿ‹…„_ÿÿ‰…P_ÿÿ‹•x_ÿÿ‰•X_ÿÿ‹µˆ_ÿÿé<¿ÿÿ‹ƒ‚p‹‰ƒ~pǃzpË…œ_ÿÿ‰…D_ÿÿ‹•„_ÿÿ‰•P_ÿÿ‹…x_ÿÿ‰…X_ÿÿ‹µˆ_ÿÿÇ…|_ÿÿéŸõÿÿ‹ƒ‚p‹‰ƒ~pǃzpË…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹•œ_ÿÿ‰•D_ÿÿ‹…t_ÿÿ‰…H_ÿÿ‹•„_ÿÿ‰•P_ÿÿ‹…x_ÿÿ‰…X_ÿÿ‹µˆ_ÿÿé5Éÿÿ‹ƒ‚p‹‰ƒ~pǃzpË•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿ‹…„_ÿÿ‰…P_ÿÿ‹•x_ÿÿ‰•X_ÿÿ‹µˆ_ÿÿé¦Èÿÿ‹ƒ‚p‹‰ƒ~pǃzpÃédýÿÿ‰t$‹ƒx‹‰$è¦,‹ƒ‚p‹‰ƒ~pǃzpÃéÌýÿÿ‹ƒ‚p‹‰ƒ~pǃzp‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿ‹…x_ÿÿ‰…X_ÿÿ‹µˆ_ÿÿéôÇÿÿ‹ƒ‚p‹‰ƒ~pǃzp‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿ‹…x_ÿÿ‰…X_ÿÿ‹µˆ_ÿÿéy¼ÿÿ‹Eä‰D$‹ƒJt‰$èú+‰…€_ÿÿ…ÀtlÇ$è0+‰Ç…Àtw‹…€_ÿÿ‰G ‰|$‹ƒ0x‹‰$è™+‰Æ…À„Ÿ‹ƒè‰…Àu ‹G‰<$ÿP1É1Ò‰ðèÜþÿ‹ƒè‰…Àu ‹F‰4$ÿP‹ƒ‚p‹‰ƒ~pǃzpÁéíþÿÿ‹ƒ‚p‹‰ƒ~pǃzpÁ‹…œ_ÿÿ‰…D_ÿÿ‹•x_ÿÿ‰•X_ÿÿ‹µˆ_ÿÿÇ…”_ÿÿÇ…|_ÿÿé6òÿÿ‹ƒ‚p‹‰ƒ~pǃzpÁ‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿ‹…x_ÿÿ‰…X_ÿÿ‹µˆ_ÿÿÇ…”_ÿÿÇ…|_ÿÿéWÈÿÿ‹ƒ‚p‹‰ƒ~pǃzpÀégýÿÿ‹ƒ‚p‹‰ƒ~pǃzpÀ‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿ‹…x_ÿÿ‰…X_ÿÿ‹µˆ_ÿÿé·Çÿÿ‹ƒ‚p‹‰ƒ~pǃzpÀ‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿ‹…x_ÿÿ‰…X_ÿÿ‹µˆ_ÿÿÇ…|_ÿÿé*Çÿÿ‹ƒ‚p‹‰ƒ~pǃzpÀé½üÿÿ‹ƒ‚p‹‰ƒ~pǃzp¿‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿ‹…x_ÿÿ‰…X_ÿÿé$¹ÿÿ‹ƒ¦s‰D$‹•(_ÿÿ‰$è¶(‰…€_ÿÿ…À„©Ç$èÔ'‰Ç…À„J‹…€_ÿÿ‰G ‹ƒsƒ‹ƒs‰G‰|$‹•_ÿÿ‰$è)(‰…Œ_ÿÿ…À„~‹ƒè‰…Àu ‹G‰<$ÿP‹•œ_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹ƒ*s‰D$‹…Œ_ÿÿ‰$è0'‰…|_ÿÿ…À„ Ç$è/'‰…€_ÿÿ…À„v‹•P_ÿÿƒ‹…€_ÿÿ‰P ‰D$‹•|_ÿÿ‰$è‰'‰Ç…À„ ‹•|_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹•€_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹ƒè‰…Àu ‹G‰<$ÿP‹ƒNq‰D$‹…Œ_ÿÿ‰$èz&‰…”_ÿÿ…À„<ÇD$‹•”_ÿÿ‰$èû&‰Ç…À„•‹•”_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹ƒè‰…Àu ‹G‰<$ÿP‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹•Œ_ÿÿ‰•D_ÿÿ‹…t_ÿÿ‰…H_ÿÿ‹•x_ÿÿ‰•X_ÿÿ1ÿé·ÿÿ‹ƒ‚p‹‰ƒ~pǃzpÈ‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹•Œ_ÿÿ‰•D_ÿÿ‹…t_ÿÿ‰…H_ÿÿ‹•x_ÿÿ‰•X_ÿÿÇ…|_ÿÿé@Áÿÿ‹ƒ‚p‹‰ƒ~pǃzpÈ‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…Œ_ÿÿéÁüÿÿ‹ƒ‚p‹‰ƒ~pǃzpÇ‹…Œ_ÿÿ‰…D_ÿÿ‹•x_ÿÿ‰•X_ÿÿÇ…”_ÿÿé}ìÿÿ‹ƒ‚p‹‰ƒ~pǃzpÇ‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…Œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿ‹…x_ÿÿ‰…X_ÿÿéDÀÿÿ‹ƒ‚p‹‰ƒ~pǃzpÇéàþÿÿ‹ƒ‚p‹‰ƒ~pǃzpÆ‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹•œ_ÿÿ‰•D_ÿÿ‹…t_ÿÿ‰…H_ÿÿ‹•x_ÿÿ‰•X_ÿÿÇ…”_ÿÿÇ…|_ÿÿé Âÿÿ‹ƒ‚p‹‰ƒ~pǃzpÆ‹…œ_ÿÿ‰…D_ÿÿ‹•x_ÿÿ‰•X_ÿÿÇ…”_ÿÿÇ…|_ÿÿé ëÿÿ‹ƒ‚p‹‰ƒ~pǃzpÆ‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹•œ_ÿÿ‰•D_ÿÿ‹…t_ÿÿ‰…H_ÿÿ‹•x_ÿÿ‰•X_ÿÿ騳ÿÿ‹ƒ‚p‹‰ƒ~pǃzp½‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹•œ_ÿÿ‰•D_ÿÿ‹…t_ÿÿ‰…H_ÿÿ‹³äw‰µX_ÿÿé[³ÿÿ‹ƒ‚p‹‰ƒ~pǃzpº‹…_ÿÿ‰…$_ÿÿ‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿ‰µT_ÿÿ‰þ‰½X_ÿÿéвÿÿ‹ƒ‚p‹‰ƒ~pǃzp¹‹…_ÿÿ‰…$_ÿÿ‹•œ_ÿÿ‰•D_ÿÿÇ…”_ÿÿÇ…|_ÿÿ‹ƒäw‰…X_ÿÿ‰…T_ÿÿ‰Æé'éÿÿ‹ƒ‚p‹‰ƒ~pǃzp¹‹•_ÿÿ‰•$_ÿÿ‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹•œ_ÿÿ‰•D_ÿÿ‹…t_ÿÿ‰…H_ÿÿ‹“äw‰•X_ÿÿ‰•T_ÿÿ‰ÖéÚ¼ÿÿ‹ƒ‚p‹‰ƒ~pǃzp¹‹•_ÿÿ‰•$_ÿÿ‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹•œ_ÿÿ‰•D_ÿÿ‹…t_ÿÿ‰…H_ÿÿ‹“äw‰•X_ÿÿ‰•T_ÿÿ‰ÖéQ±ÿÿ‹ƒ‚p‹‰ƒ~pǃzp¸évÿÿÿƒ©L‰D$‹…_ÿÿ‰$è ‹“äw‰•T_ÿÿé¯ãÿÿ‹ƒ‚p‹‰ƒ~pǃzp·é0ÿÿÿ‹ƒ‚p‹‰ƒ~pǃzp´‹…œ_ÿÿ‰…D_ÿÿ1ÿÇ…”_ÿÿÇ…|_ÿÿéIçÿÿ‹ƒ‚p‹‰ƒ~pǃzp´é~éÿÿ‹ƒ‚p‹‰ƒ~pǃzp³‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹•œ_ÿÿ‰•D_ÿÿ‹…t_ÿÿ‰…H_ÿÿÇ…|_ÿÿ‹“äw‰•T_ÿÿ‰•P_ÿÿ‰Ö‰•X_ÿÿéÖºÿÿ‹ƒ‚p‹‰ƒ~pǃzp³éÌèÿÿ‹ƒ‚p‹‰ƒ~pǃzpªéúéÿÿ‹ƒ‚p‹‰ƒ~pǃzpªéléÿÿ‹ƒ‚p‹‰ƒ~pǃzpª‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿÇ…|_ÿÿé¶éÿÿ‹ƒ‚p‹‰ƒ~pǃzpªéoçÿÿ‰t$‹ƒx‹‰$苃‚p‹‰ƒ~pǃzpªéYêÿÿ1Ò‹ƒÎrè4Õþÿ‰Ç…À„Y‹“äw‹ƒè‰…Àu ‹B‰$ÿP‹ƒÖp‰D$‰<$èc‰…|_ÿÿ…À„¨Ç$èb‰…”_ÿÿ…À„ý‹E܃‹EÜ‹•”_ÿÿ‰B ‰T$‹…|_ÿÿ‰$載ƅÀt\‹•|_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹•”_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹Eà‹ƒê‰…Òu ‹Eà‹P‰$ÿR‰uà‰½L_ÿÿé$Úÿÿ‹ƒ‚p‹‰ƒ~pǃzp©‹•\_ÿÿ‰•0_ÿÿ‹…`_ÿÿ‰…4_ÿÿ‹•l_ÿÿ‰•8_ÿÿ‹…p_ÿÿ‰…<_ÿÿ‹•˜_ÿÿ‰•@_ÿÿ‹…œ_ÿÿ‰…D_ÿÿ‹•t_ÿÿ‰•H_ÿÿ‰½L_ÿÿéèÿÿ‹ƒ‚p‹‰ƒ~pǃzp©‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹•œ_ÿÿ‰•D_ÿÿ‹…t_ÿÿ‰…H_ÿÿ‰½L_ÿÿ‹“äw‰•T_ÿÿ‰•P_ÿÿ‰Ö‰•X_ÿÿéÜ·ÿÿ‹ƒ‚p‹‰ƒ~pǃzp©‹…\_ÿÿ‰…0_ÿÿ‹•`_ÿÿ‰•4_ÿÿ‹…l_ÿÿ‰…8_ÿÿ‹•p_ÿÿ‰•<_ÿÿ‹…˜_ÿÿ‰…@_ÿÿ‹•œ_ÿÿ‰•D_ÿÿ‹…t_ÿÿ‰…H_ÿÿ‰½L_ÿÿé=èÿÿ‹ƒ‚p‹‰ƒ~pǃzp¨é¡Éÿÿ‹ƒ‚p‹‰ƒ~pǃzp§éÖÿÿ‹ƒ‚p‹‰ƒ~pǃzp£é€Öÿÿ‹Eä‰D$‹ƒ6t‰$藉DžÀ„ÇÇ$è͉…”_ÿÿ…À„‰x ‰D$‹ƒ0x‹‰$è4‰Æ…ÀtV‹•”_ÿÿ‹ƒè‰…Àu ‹B‰$ÿP1É1Ò‰ðè™Ëþÿ‹ƒè‰…Àu ‹F‰4$ÿP‹ƒ‚p‹‰ƒ~pǃzpšéÔÕÿÿ‹ƒ‚p‹‰ƒ~pǃzpšé¬Ìÿÿ‹ƒ‚p‹‰ƒ~pǃzpšéÉÿÿ‹ƒ‚p‹‰ƒ~pǃzpšédÈÿÿ‹E¸‹P‰$ÿRéaÐÿÿU‰åWVSƒìLèK¹ƒ‹‰ƒÇÇD$ôÇD$ ÇD$ƒO‰D$ƒg¬‰$èô‰ƒ·…À„« ƒƒs¬‰$èX‰ƒ»…À„Œ ‰D$ƒ¬‰D$‹ƒ·‰$èØ…Àˆh ‹»à…ÿtL³àë ƒÆ‹>…ÿt;‹F ƒè‰D$‹F‰$艋‹…É„* ‹V…Òt͉$諃Ƌ>…ÿuųÞ‰4$装Àˆ& ‰t$ƒ¬‰D$‹ƒ·‰$èH…Àˆ ‰³+ƒ«‰ƒËƒx}ÿÿ‰ƒ«ƒO݉EЋƒ1‰ƒïÝ‹UЉ$è9…Àˆæ ‹»ÓÝÇD$‹ƒË‰$è)‰Æ…À„À ‰D$ƒ›¬‰Eà‰D$‰<$è%‰ÇÁÿ‹ƒè‰…À„­ …ÿˆ‹ ‹UЉT$ƒ«¬‰D$‹ƒ·‰$者Àˆd ‹EЉƒ'³/܉4$蘅Àˆm ‰t$ƒ¿¬‰D$‹ƒ·‰$è=…ÀˆI ‰³7ƒ¯‰ƒÏƒÃ~ÿÿ‰ƒ¯“o؉UÈ‹ƒ1‰ƒÙ‰$è1…Àˆ ‹»óØÇD$‹ƒÏ‰$è!‰Æ…À„ú ‰D$‹Eà‰D$‰<$è#‰ÇÁÿ‹ƒè‰…Àu ‹F‰4$ÿP…ÿˆÆ ‹UȉT$ƒÏ¬‰D$‹ƒ·‰$èy…ÀˆŸ ‹Eȉƒ?ƒÏ‰ƒÓƒl{ÿÿ‰ƒÏƒÙ²þÿ‰ƒÓƒaÿÿ‰ƒ×ƒB‚ÿÿ‰ƒÛƒ³þÿ‰ƒßƒ«xÿÿ‰ƒãƒ†³þÿ‰ƒçƒ,xÿÿ‰ƒëƒ„ÿÿ‰ƒï“O׉UÜ‹ƒ1‰ƒï׉$è …Àˆ ‹»Ó×ÇD$‹ƒÓ‰$èú‰Æ…À„ð‰D$‹Eà‰D$‰<$èü‰ÇÁÿ‹ƒè‰…Àu ‹F‰4$ÿP…ÿˆ¼‹U܉T$ƒß¬‰D$‹ƒ·‰$èR…Àˆ•‹E܉ƒ/ƒó‰ƒ×ƒ‚µþÿ‰ƒóƒX’ÿÿ‰ƒ÷ƒŒ‰ƒû“ωUØ‹ƒ1‰ƒ/Љ$è+…Àˆý‹»ÐÇD$‹ƒ×‰$è‰Æ…À„׉D$‹Eà‰D$‰<$è‰ÇÁÿ‹ƒè‰…Àu ‹F‰4$ÿP…ÿˆ£‹U؉T$ƒ÷¬‰D$‹ƒ·‰$ès…Àˆ|‹E؉ƒ;ƒÿ‰ƒÛƒæ$‰ƒÿƒœÿÿ‰ƒ“¯¾‰UÌ‹ƒ1‰ƒO¿‰$èX…Àˆ ‹»3¿ÇD$‹ƒÛ‰$èH‰Æ…À„ç‰D$‹Eà‰D$‰<$èJ‰ÇÁÿ‹ƒè‰…Àu ‹F‰4$ÿP…ÿˆ³‹ỦT$ƒÿ¬‰D$‹ƒ·‰$è …ÀˆŒ‹Ẻƒ3³ï¼‹»1‰»½‰4$謅ÀˆD‰t$ƒ ­‰D$‹ƒ·‰$èQ…Àˆ ‰³Cƒ‰ƒßƒû´þÿ‰ƒ“/º‰UÔ‰»Ïº‰$èK…ÀˆÆ‹»³ºÇD$‹ƒß‰$è;‰Æ…À„ ‰D$‹Eà‰D$‰<$è=‰ÇÁÿ‹ƒè‰…Àu ‹F‰4$ÿP…ÿˆl‹UÔ‰T$ƒ­‰D$‹ƒ·‰$è“…ÀˆE‹EÔ‰ƒG³o¹‹ƒ1‰ƒº‰4$蟅ÀˆU‰t$ƒ+­‰D$‹ƒ·‰$èD…Àˆ1‰³K1Ò‹ƒè$Êþÿ‰Æ…À„·‰D$‹ƒ‰D$‹ƒ·‰$èô…ÀˆÓ‹ƒè‰…Àu ‹F‰4$ÿP1Ò‹ƒgèÕÉþÿ‰Æ…À„‹‰D$‹ƒg‰D$‹ƒ·‰$襅ÀˆJ‹ƒè‰…Àu ‹F‰4$ÿP1Ò‹ƒè†Éþÿ‰Æ…À„‰D$‹ƒ‰D$‹ƒ·‰$èV…ÀˆÁ‹ƒè‰…Àu ‹F‰4$ÿP‹ƒoƒ‹ƒo‰ƒ›Ç$è#…À„g‰ƒŸ‹»ƒ‰»£Ç$èú…À„!‰ƒ§‹³)‹‰³«‰³¯ǃ³‰³·ƒÀ‰‰³»‹ƒ»ƒ‹ƒ»‰ƒ¿ǃÃÿÿÿÿǃǃ‰³Ë‹“}‰U䋉“σÀ‰‰“Ó‹‰³×ǃÛǃßǃ㉳çƒÀ‰‰³ëƒ‰“ïÇ$eÍè#…À„-‰ƒóƒ‰»÷‹‰³û‰³ÿ‰³‰³‰³ ƒÀ‰‰³‹U䋉“ƒÀ‰‰“ƒ‰³Ç$è¶…À„£‰ƒÇ$ÇD$èÕ…À„d‰ƒ#ƒ‰³'Ç$èq…À„$‰ƒ+ƒ‰³/ǃ3ǃ7ÿÿÿÿ‹ƒ»ƒ‹ƒ»‰ƒ;Ç$è%…À„»‰ƒ?ƒ‰³C‹ƒƒ‹ƒ‰ƒG‹ƒ»ƒ‹ƒ»‰ƒK‹‰³O‰³SƒÀ‰‰³WÇ$è¿…À„8‰ƒ[ƒ‰³_Ç$@B蜅À„‰ƒcÇ$jÈ{è‚…À„û‰ƒgƒ‰³kƒ‰»oÇ$ÿÿÿÿèV…À„²‰ƒs‹»g‰|$‹ƒ·‰$蕉ƅÀ„Y‹ƒ³‰D$‰4$èy‰Ç…À„w‹ƒè‰…Àu ‹F‰4$ÿP‰»w‹³)‹‰³{‰³‰³ƒ‰³‡‰³‹ƒÀ‰‰³Ç$è³…À„M‰ƒ“‹E䃉ƒ—‹‰³›‰³ŸƒÀ‰‰³£‹ƒƒ‹ƒ‰ƒ§ƒÄL[^_]˃Ç‹‰ƒÃǃ¿ƒ?­ƒÄL[^_]érÆþÿ‹ƒÇ‹‰ƒÃǃ¿1ƒ?­ƒÄL[^_]éHÆþÿ‹ƒÇ‹‰ƒÃǃ¿몋F‰4$ÿPéEõÿÿ‹ƒÇ‹‰ƒÃǃ¿që‚‹ƒÇ‹‰ƒÃǃ¿éeÿÿÿ‹ƒÇ‹‰ƒÃǃ¿¥éHÿÿÿ‹ƒÇ‹‰ƒÃǃ¿±‹ƒè‰…À…!ÿÿÿ‹F‰4$ÿPéÿÿÿ‹ƒÇ‹‰ƒÃǃ¿Jéöþÿÿ‹ƒÇ‹‰ƒÃǃ¿oéÙþÿÿ‹ƒÇ‹‰ƒÃǃ¿¥é¼þÿÿ‹ƒÇ‹‰ƒÃǃ¿¼éŸþÿÿ‹ƒÇ‹‰ƒÃǃ¿«é‚þÿÿ‰|$‹ƒE‹‰$è_ ‹ƒÇ‹‰ƒÃǃ¿±éQþÿÿ‹ƒÇ‹‰ƒÃǃ¿°é4þÿÿ‹ƒÇ‹‰ƒÃǃ¿¯éþÿÿ‹ƒÇ‹‰ƒÃǃ¿éúýÿÿ‹ƒÇ‹‰ƒÃǃ¿éÝýÿÿ‹ƒÇ‹‰ƒÃǃ¿…éÀýÿÿ‹ƒÇ‹‰ƒÃǃ¿„é£ýÿÿ‹ƒÇ‹‰ƒÃǃ¿Ôé†ýÿÿ‹ƒÇ‹‰ƒÃǃ¿Œéiýÿÿ‹ƒÇ‹‰ƒÃǃ¿3éLýÿÿ‹ƒÇ‹‰ƒÃǃ¿éÿýÿÿ‹ƒÇ‹‰ƒÃǃ¿éýÿÿ‹ƒÇ‹‰ƒÃǃ¿éÅýÿÿ‹ƒÇ‹‰ƒÃǃ¿éØüÿÿ‹ƒÇ‹‰ƒÃǃ¿é‹ýÿÿ‹ƒÇ‹‰ƒÃǃ¿UéžüÿÿU‰åWVSƒì,èΩ‹Eƒ‹U ƒ‹ƒÊ‰D$‰$èh ƒøÿ„¬…Àu8¾ÿÿÿÿ‹U‹ƒè‰…À„ƒ‹U ‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄ,[^_]˳‰t$‹ƒ>‰$èÅ ‰EØ…À„W‹»z‰|$‹ƒ>‰$è¢ ‰Æ…À„{Ç$è¥ ‰Ç…À„‹‹U‹B ƒ‹B ‰G ‰w‹ƒæ‰D$‹E ‰$è[ ‰Æ…À„Z‹“z‰Uä‰T$‹ƒ>‰$è6 ‰EÜ…À„Ç$è8 ‰Eà…À„—‰Â‰p ‹E܉BÇ$è ‰Æ…À„‰x ‹Uà‰P‰D$‹E؉$è€ ‰EÜ…À„o‹UØ‹ƒè‰…À„‹ƒè‰…À„÷‹E܉$è+ ‰Æè‰…À„Z‹ƒJ‹‰ƒFǃBºë-‹B‰$ÿPéoþÿÿ‹ƒJ‹‰ƒFǃB¹ÇEÜÇEà‹}Ü…ÿt‹UÜ‹ƒè‰…Àt0‹uà…öt‹Uà‹ƒè‰…ÀtƒÖèæÀþÿéøýÿÿ‹B‰$ÿPëå‹B‰$ÿPëÅ‹ƒJ‹‰ƒFǃBºÇEÜÇEà‹UØ‹ƒè‰…Àt8…öt‹ƒè‰…À„……ÿ„aÿÿÿ‹ƒè‰…À…Rÿÿÿ‹G‰<$ÿPéDÿÿÿ‹UØ‹B‰$ÿP뺋ƒJ‹‰ƒFǃBºë’‰t$‹ƒÈ ‹‰$苃J‹‰ƒFǃBºÇEÜéÝþÿÿ‹F‰4$ÿPémÿÿÿ‰|$‹ƒÈ ‹‰$èJ‹ƒJ‹‰ƒFǃBº1ÿÇEÜÇEàé ÿÿÿ‹ƒJ‹‰ƒFǃBºÇEÜéçþÿÿ‹F‰4$ÿPéûýÿÿ‹B‰$ÿPéÞýÿÿ‹Eä‰D$‹ƒÈ ‹‰$èÆ‹ƒJ‹‰ƒFǃBºÇEàéþÿÿ‹ƒJ‹‰ƒFǃBº1ÿÇEàéjþÿÿ‹UÜ‹ƒè‰…À…üÿÿ‹UÜ‹B‰$ÿPéüÿÿU‰åWVSƒì<蘥‹Eƒ‹“v‰UЃÇ$è(‰Eà…À„ú‹UЋƒè‰…À„î‹»h‰|$‹ƒ‰$跉ƅÀ„ø‹ƒœ‰D$‰4$蛉DžÀ„j‹ƒè‰…À„½‹U‹B‰$è‰Æ…À„š‹U‹BƒÀ‰$èô‰EÔ…À„lÇ$è[‰EØ…À„­‹U‹B ‹@8ƒ‹B ‹@8‹U؉B ‰r‹EÔ‰B‰T$‰<$诉Eä…À„닃艅À„•‹UØ‹ƒè‰…À„Ÿ‹³v‹ƒè‰…À„|‹E‰$诉EÔ…À„8‹UÔ‰$èW‰EÜ…À„ß‹ƒè‰…À„=‹ƒ°‰D$‹Eà‰$èy‰EØ…À„=Ç$è{‰Æ…À„'‹U䃉P ‹E܃‰F‹ƒvƒ‰FÇ$èG‰Ç…À„–‰p ‰D$‹U؉$跉ƅÀ„—‹UØ‹ƒè‰…À„Á‹ƒè‰…À„¤‹ƒè‰…À„=‹uÜéÿÿÿ‹ƒ‹‰ƒǃ ªÇEÔÇEØ‹EЉE܉E䋃艅À„¿‹EÔ…Àt‹UÔ‹ƒè‰…À„ЋEØ…Àt‹UØ‹ƒè‰…À„©ƒÄ™è)¼þÿ‹UàÇEà‹ƒè‰…ÀtT‹U䋃艅Àt;‹UÜ‹ƒè‰…Àt"‹U‹ƒè‰…Àu ‹B‰$ÿP‹EàƒÄ<[^_]ËB‰$ÿPëÓ‹B‰$ÿP뺋B‰$ÿPë¡‹B‰$ÿPéýÿÿ‹G‰<$ÿPé3ÿÿÿ‹F‰4$ÿPé5ýÿÿ‹B‰$ÿPéIÿÿÿ‹B‰$ÿPé"ÿÿÿ‹F‰4$ÿP‹uÜé×ýÿÿ‹ƒ‹‰ƒǃ ©‹UЉU܉U䋃艅Àtq…ÿ…µþÿÿé¿þÿÿ‹F‰4$ÿPéµýÿÿ‹G‰<$ÿPéNþÿÿ‹B‰$ÿPé1þÿÿ‹ƒ‹‰ƒǃ ©ÇEÔÇEØ‹UЉU܉U䋃艅Àu‹F‰4$ÿPë„‹ƒ‹‰ƒǃ ªÇEØ‹EЉE܉EäéLÿÿÿ‰|$‹ƒ’‹‰$è⋃‹‰ƒǃ ©‹EЉE܉Eäéþÿÿ‹ƒ‹‰ƒǃ «‰uÜéûýÿÿ‹G‰<$ÿPé]üÿÿ‹F‰4$ÿPévüÿÿ‹B‰$ÿPéSüÿÿ‹ƒ‹‰ƒǃ ¬é‚ýÿÿ‹ƒ‹‰ƒǃ ©ÇEÔ‹UЉU܉UäéFýÿÿ‹ƒ‹‰ƒǃ ¨‹EЉEà‰Eä‰EÜé^ýÿÿ襅Àta‹ƒ‹‰ƒǃ «‰uÜÇEØéüüÿÿ‹ƒ‹‰ƒǃ ¬éþÿÿ‹ƒ‹‰ƒǃ ¬é³üÿÿ‹UÔ‹ƒè‰…Àt‹Eàƒ‰Â‰uÜéëüÿÿ‹B‰$ÿPëåU‰åWVSƒì\諟ÇEäÇEàÇEÜÇEØEä‰D$ƒßë‰D$ ƒŸ‰‰D$‹E‰D$‹E ‰$è8…Àu 1ö‰ðƒÄ\[^_]ËEƒ‹E䃋ƒ'û‰D$‹U‹B ‹@0‹@<‹@‰$è—ÿ‰Eà…À„ˆÇ$è™ÿ‰EÜ…Àtu‹E䃋Uä‹E܉P ‹E܉D$‹Eà‰$èýÿ‰EØ…ÀtM‹Eà‹ƒê‰…Ò„ŸÇEà‹EÜ‹ƒê‰…Ò„uÇEÜ‹E؉$è›ÿ‰EÄèøþ…À„¤‹ƒ'ú‹‰ƒ#úǃú›‹Uà…Òt‹ƒè‰…À„.ÇEà‹UÜ…Òt‹ƒè‰…À„ÇEÜ‹UØ…Òt‹ƒè‰…À„ÇEØ‹³…‹‰$è”þ…À…Å1ÿÇEÈ‹Uà…Òt‹ƒè‰…À„”‹UÜ…Òt‹ƒè‰…À„m‹UØ…Òt‹ƒè‰…À„F…ÿt‹ƒè‰…À„%‹EÈ…Àt‹UÈ‹ƒè‰…À„þƒ”è϶þÿ1ö‹M‹ƒè‰…Àt(‹E䋃ꉅ҅ þÿÿ‹Eä‹P‰$ÿR‰ðƒÄ\[^_]ËA‰ $ÿPë̓”è¶þÿMØUÜEàèݳþÿ…ÀˆÇ$è¤ý‰Ç…À„¬‹ƒýƒ‹ƒý‰G ‰|$‹‰$èþ‰Æ…À„‚‹ƒè‰…À„p1É1Ò‰ðèr®þÿ‹ƒè‰…À„H‹ƒ'ú‹‰ƒ#úǃú1ÿÇEÈé”þÿÿ‹B‰$ÿPéôþÿÿ‹G‰<$ÿPéÍþÿÿ‹EØ‹P‰$ÿRé©þÿÿ‹EÜ‹P‰$ÿRé‚þÿÿ‹Eà‹P‰$ÿRé[þÿÿ‹EÜ‹P‰$ÿRéïýÿÿ‹Eà‹P‰$ÿRéÁýÿÿ‹EØ‹P‰$ÿRéêýÿÿ‹ƒ'ú‹‰ƒ#úǃúœ1ÿÇEÈéìýÿÿ‹EØ‹ƒê‰…Ò„„ÇEØ‹M‹I‰MÔ‹E‹@‰EÐ9ÁŽž‰Á‹E‹P I ÅJ(‹EÄ;At$yq ‹UЃÂ9UÔ„l‰ù‹ƒÆ;EÄuå‹q ‹Ur+1‹‹{ü‰M̉L$‹ƒú‰$èÆû‰Ç…À„•‹ƒ¯ú‰D$‰<$èªû‰EÈ…À„9‹ƒè‰…À„‰4$è#ü‰Eà…À„ÄF‰$è ü‰EÜ…À„®Ç$ètû‰EØ…À„—‹E䃋Uä‹E؉P ‹Uà‹E؉P‹UÜ‹E؉PÇEàÇEÜ‹E؉D$‹Eȉ$è´û‰Æ…À„L‹UÈ‹ƒè‰…À„‹EØ‹ƒê‰…Ò„õÇEØéÜüÿÿ‹ƒ'ú‹‰ƒ#úǃúÇEÈé=üÿÿ‹EÜ‹P‰$ÿRézûÿÿ‹Eà‹P‰$ÿRéPûÿÿÇ$èœú‰Eà…À„Þ‹ƒýƒ‹“ý‹Eà‰P ‹Eà‰D$‹ƒ…‹‰$èñú‰EÜ…À„§‹Eà‹ƒê‰…Ò„æÇEà‹EÜ1É1ÒèQ«þÿ‹EÜ‹ƒê‰…Ò„ÒÇEÜ‹ƒ'ú‹‰ƒ#úǃú¢éiûÿÿ‹F‰4$ÿPéªüÿÿ‹G‰<$ÿPé‚üÿÿ‹EØ‹P‰$ÿRékýÿÿ‹ƒ'ú‹‰ƒ#úǃú¡1ÿé&ûÿÿ‹ƒ'ú‹‰ƒ#úǃú¢1ÿÇEÈéûÿÿ‹G‰<$ÿPéÖýÿÿ‹ƒ'ú‹‰ƒ#úǃú¡éÕúÿÿ‹Eà‹P‰$ÿRé ÿÿÿ‹EÜ‹P‰$ÿRéÿÿÿ‹M̉L$‹ƒ¥‹‰$èQù‹ƒ'ú‹‰ƒ#úǃú¡ÇEÈéxúÿÿ‹EØ‹P‰$ÿRéúýÿÿ‹B‰$ÿPéÚýÿÿU‰åWVSƒì,èM˜‹} ‹Eƒƒ‹ƒ5ò‰D$‰<$èçøƒøÿ„[…Àu5¾ÿÿÿÿ‹U‹ƒè‰…À„2‹ƒè‰…Àu ‹G‰<$ÿP‰ðƒÄ,[^_]Ë“™ó‰Uä‰T$‹ƒ½ò‰$èDø‰Æ…À„§‹ƒaô‰D$‰<$è(ø‰EÜ…À„Ç$è*ø‰Eà…À„/‹U‹B0ƒ‹B0‹Uà‰B ‹E܉B‰T$‰4$è‡ø‰EÜ…À„‹ƒè‰…À„'‹Uà‹ƒè‰…À„‹E܉$è2ø‰Æè÷…À„K‹ƒÉò‹‰ƒÅòǃÁò7ÇEà‹UÜ‹ƒè‰…À„®‹Eà…Àt?‹Uà‹ƒè‰…Àu1‹B‰$ÿPë&‹B‰$ÿPéÀþÿÿ‹ƒÉò‹‰ƒÅòǃÁò6ƒéŒèî¯þÿéþÿÿ‹ƒÉò‹‰ƒÅòǃÁò7ÇEà‹ƒè‰…À„ˆ‹EÜ…À…_ÿÿÿélÿÿÿ‹ƒÉò‹‰ƒÅòǃÁò7ëÇ‹B‰$ÿPéDÿÿÿ‹B‰$ÿPéëþÿÿ‹F‰4$ÿPéËþÿÿ‹Eä‰D$‹ƒGú‹‰$è½ö‹ƒÉò‹‰ƒÅòǃÁò7é:ÿÿÿ‹F‰4$ÿPéjÿÿÿ‹UÜ‹ƒè‰…À…°ýÿÿ‹UÜ‹B‰$ÿPéŸýÿÿU‰åWVSƒì,讕‹Eƒ‹³Bñ‰t$‹ƒð‰$èö‰Ç…À„ÇÇ$èö‰Æ…À„'‹Uƒ‰P ‰D$‰<$èrö‰Eä…À„Š‹ƒè‰…À„t‹ƒè‰…À„W‹ƒBñ‰D$‹U‹B8‰$èŒõ‰Ç…À„Ç$èõ‰Æ…Àt8‹Eä‰F ‰~‰t$‹ƒ ó‰$è"ö‰Ç…À„[‹ƒè‰…À„<‰þë\‹ƒ*ð‹‰ƒ&ðǃ"ðC‹ƒè‰…À„€…öt‹ƒè‰…À„†‹Eä…Àt‹U䋃艅ÀtfƒnŠè²­þÿ1ö‹U‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄ,[^_]˃*ð‹‰ƒ&ðǃ"ðCÇE䋃艅Àu€‹G‰<$ÿPérÿÿÿ‹B‰$ÿPë‹F‰4$ÿPélÿÿÿ‹ƒ*ð‹‰ƒ&ðǃ"ðCéOÿÿÿ‹F‰4$ÿPé›þÿÿ‹G‰<$ÿPé~þÿÿ‰t$‹ƒ¨÷‹‰$è^ô‹ƒ*ð‹‰ƒ&ðǃ"ðCéÿÿÿ‹F‰4$ÿP‰þéÿÿÿ‹ƒ*ð‹‰ƒ&ðǃ"ðCÇEäé¿þÿÿU‰åWVSƒì,èL“‹Eƒ‹»àî‰|$‹ƒ¼í‰$è ó‰Æ…À„>Ç$è£ó‰Ç…À„³‹Uƒ‰P ‰D$‰4$èô‰Eä…À„“‹ƒè‰…À„Ï‹ƒè‰…À„²‹Eä‰$è¾ó‰Æèó…À„‹ƒÈ틉ƒÄíǃÀí@‹U䋃艅À„•ƒ4ˆèÇ«þÿ¾ÿÿÿÿ‹U‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄ,[^_]˃È틉ƒÄíǃÀí@‹ƒè‰…Àt6…ÿt¨‹ƒè‰…Àu‹G‰<$ÿPë’‹G‰<$ÿPé@ÿÿÿ‹F‰4$ÿPé#ÿÿÿ‹F‰4$ÿPë¿‹Uä‹B‰$ÿPéZÿÿÿ‰|$‹ƒFõ‹‰$è…ò‹ƒÈ틉ƒÄíǃÀí@é)ÿÿÿ‹U䋃艅À…'ÿÿÿ‹Uä‹B‰$ÿPéÿÿÿU‰åWVSƒì|è„‘‹ƒð‰EäEä‰D$ƒÀ݉D$ ƒÌy‰D$‹E‰D$‹E ‰$è$ò…À„\‹Eƒ‹E䃋»bóƒ‹U‹B0‹@<ƒ‹ƒè‰…À„7‹M‹A0‹@<‰EÔ9}ä„@‰Â‹ƒí‰D$‹B‰$è\ñ‰Æ…À„Ç$è_ñ‰EÌ…À„•‹E䃋Eä‹ỦB ‰T$‰4$èÅñ‰E¸…À„‹ƒè‰…À„ó‹UÌ‹ƒè‰…À„Ó‹M¸‰ $èpñ‰ÆèÎð…À„›‹ƒì‹‰ƒüëǃøëŽÇEÐÇEÀ‰}¨‰}¬‹u¸…öt‹M¸‹ƒè‰…À„X‹MÐ…Ét‹UЋƒè‰…À„M‹UÀ…Ò„?‹MÀ‹ƒè‰…À…-‹A‰ $ÿPé‹G‰<$ÿP‹M‹A0‹@<‰EÔ9}ä…ÀþÿÿÇE¤ÿÿÿÿÇ$è\ð‰Ç…À„‹³bó‹ƒè‰…À„´‹U‹R‰U°…Ò‰u¬‰u¨ƒ‰þ‹UÔ‹ƒè‰…À…À‹B‰$ÿP‹ƒè‰…À…·‹G‰<$ÿP‹M¨‹ƒè‰…À…®‹A‰ $ÿP‹U¬‹ƒè‰…À…¥‹B‰$ÿP‹M‹ƒè‰…À…œ‹A‰ $ÿPéŽ1ö‰ðƒÄ|[^_]˃싉ƒüëǃøëމ}¨‰}¬ƒ”†èû§þÿ1ö‹UÔ‹ƒè‰…À„@ÿÿÿ‹ƒè‰…À„Iÿÿÿ‹M¨‹ƒè‰…À„Rÿÿÿ‹U¬‹ƒè‰…À„[ÿÿÿ‹M‹ƒè‰…À„dÿÿÿ‹E䋃ꉅ҅bÿÿÿ‹Eä‹P‰$ÿR‰ðƒÄ|[^_]˃싉ƒüëǃøëŽÇE¸ÇEÐÇEÀ‰}¨‰}¬‹ƒè‰…Àtc‹EÌ…À„¯ýÿÿ‹UÌ‹ƒè‰…À…ýÿÿ‹B‰$ÿPéýÿÿ‹A‰ $ÿPéšýÿÿ‹B‰$ÿPé¥ýÿÿ‹B‰$ÿPéýÿÿ‹F‰4$ÿPéÿüÿÿ‹F‰4$ÿPë’‹ƒì‹‰ƒüëǃøëŽéVÿÿÿÇE ÇEÀÇEЉu¬‰u¨ÇEÄ鋃艅À„ ‹M¸‰ $è°í‰Eà…Àˆ‹U¸‹ƒè‰…À„ñ‹Eà…Àu/‹E¤…Àˆí‹M‹A(‹M¤‹UÄ;L„×ÇEÐÇEÀƒE ƒEÄ‹U 9U°„Kýÿÿ‹ƒ8í‰D$‹UÔ‹B‰$èí‰EÌ…À„‹M‹A(‹UÄ‹D‰$è˜í‰E¸…À„ÄÇ$èÿì‰Æ…À„Š‹M¸‰H ‰D$‹Ẻ$èlí‰E¸…À„M‹UÌ‹ƒè‰…À…ôþÿÿ‹B‰$ÿPéæþÿÿ‹F‰4$ÿPéçþÿÿ‹B‰$ÿPéÿÿÿ‹ƒHî‰D$‹EÔ‰$èkì‰EÌ…À„΋U‹B(‹MÄ‹D‰$èæì‰Æ…À„n‹U‹B(‹MÄ‹D ‰$èÇì‰E¸…À„1‹U‹B(‹MÄ‹D‰$è§ì‰EÐ…À„RÇ$èì‰EÀ…À„ú‰p ‹U¸‰P‹MЉH‰D$‹Ẻ$èqì‰EÈ…À„î‹UÌ‹ƒè‰…À„€‹MÀ‹ƒè‰…À„`‹U¨‹ƒè‰…À„@‹ƒbó9Eä”À¶À‰Eà…À„‡‹Eà…À…E‹MȉM¨ÇEÐÇEÀéþÿÿ‹F‰4$ÿPé>ûÿÿ‹U¸‹ƒè‰…Àt‰u¤éýúÿÿ‹M¸‹A‰ $ÿP‰u¤ééúÿÿ‹ƒì‹‰ƒüëǃøë‘‹ƒbó‰E¨‰Ç‰E¬é¸ûÿÿ‹ƒÀí‰D$‹Mȉ $èÕê‰E¸…À„Ì‹ƒÀí‰D$‹Eä‰$èµê‰EÐ…À„‚Eà‰D$‹EЉD$‹U¸‰$è;ë…Àˆ71Àƒ}à”À‰Eà‹M¸‹ƒè‰…À„)‹UЋƒè‰…À…èþÿÿ‹B‰$ÿPéÚþÿÿ‹B‰$ÿPé²þÿÿ‹A‰ $ÿPé’þÿÿ‹B‰$ÿPérþÿÿ‹³Tî‰t$‹ƒðë‰$è ê‰EÌ…À„;‹ƒˆì‰D$‹Ẻ$èéé‰EÀ…À„‹MÌ‹ƒè‰…À„‹U‹B(‹MÄ‹‰$èSê‰Æ…À„9‹U‹B(‹MÄ‹D‰$è4ê‰E¸…À„*Ç$è›é‰EÐ…À„é‹U‹B8ƒ‹B8‹MЉA ‰q‹E¸‰A‰L$‹UÀ‰$èòé‰E´…À„‘‹MÀ‹ƒè‰…À„‹UЋƒè‰…À„ø‹M¬‹ƒè‰…À„Ø‹ƒœì‰D$‰<$èúè‰Æ…À„pÇ$èýè‰E¸…À„‹E´ƒ‹U¸‰B ‹Mȃ‰JÇ$èÑè‰EÀ…À„¸‹U¸‰P ‰D$‰4$è@é‰E¼…À„]‹ƒè‰…À„°‹MÀ‹ƒè‰…À„‹U¼‹ƒè‰…Àte‹MȉM¨‹E´‰E¬ÇEÐÇEÀéùúÿÿ‹A‰ $ÿPéÉýÿÿ‹A‰ $ÿPéÿÿÿ‹B‰$ÿPéúþÿÿ‹A‰ $ÿPéÚþÿÿ‹A‰ $ÿPé0þÿÿ‹U¼‹B‰$ÿP‹MȉM¨‹E´‰E¬éˆúÿÿ‹A‰ $ÿPébÿÿÿ‹F‰4$ÿPéBÿÿÿ‰t$‹ƒ~ó‹‰$èð狃싉ƒüëǃøë˜‹MȉM¨éZøÿÿ‹ƒì‹‰ƒüëǃøë“éÁöÿÿ‹ƒì‹‰ƒüëǃøë“éßøÿÿ‹ƒì‹‰ƒüëǃøë“ÇEÐéÑøÿÿ‹ƒì‹‰ƒüëǃøë“ÇEÀëÓ‹ƒì‹‰ƒüëǃøë“é¾÷ÿÿ‹ƒì‹‰ƒüëǃøë•é`øÿÿ‹ƒì‹‰ƒüëǃøë•ÇE¸éuÿÿÿ‹ƒì‹‰ƒüëǃøë–éøÿÿ‹ƒì‹‰ƒüëǃøë•éC÷ÿÿ‹ƒì‹‰ƒüëǃøë™‹EȉE¨éÖõÿÿ‹ƒì‹‰ƒüëǃøë—‹UȉU¨ÇEÀézõÿÿ‹ƒì‹‰ƒüëǃøë—‹EȉE¨ÇEÀéPõÿÿ‹ƒì‹‰ƒüëǃøë—‹MȉM¨é©öÿÿ‹ƒì‹‰ƒüëǃøë˜‹UȉU¨ÇE¸éwþÿÿ‹ƒì‹‰ƒüëǃøë˜‹UȉU¨éùôÿÿ‹ƒì‹‰ƒüëǃøë˜‹UȉU¨ÇEÌéñöÿÿ‹ƒì‹‰ƒüëǃøë™‹EȉE¨ÇEÌÇEÐéÀöÿÿ‹ƒì‹‰ƒüëǃøëš‹EȉE¨‹U´‰U¬ÇEÌÇE¸ÇEÐé‚öÿÿ‹ƒì‹‰ƒüëǃøëš‹UȉU¨‹M´‰M¬ÇEÌÇEÐéKöÿÿ‹ƒì‹‰ƒüëǃøëš‹MȉM¨‹E´‰E¬ÇEÌÇEÐÇEÀé öÿÿ‹ƒì‹‰ƒüëǃøëš‹MȉM¨‹E´‰E¬é%õÿÿU‰åWVSƒì,è׃‹Eƒ‹U ƒ‹»§à‰|$‹ƒCÞ‰$è%䉯…À„q‹ƒ¯Þ‰D$‰4$è ä‰Ç…À„㋃艅À„Ç$èýã‰Æ…Àty‹Eƒ‰F ‹U ƒ‰V‰t$‰<$èeä‰Eä…À„™‹ƒè‰…À„艅À„Æ‹uä‹U‹ƒè‰…Àt_‹U ‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄ,[^_]˃SÞ‹‰ƒOÞǃKÞ|‹ƒè‰…ÀtXƒyè œþÿ1ö‹U‹ƒè‰…Àu¡‹B‰$ÿPë–‹ƒSÞ‹‰ƒOÞǃKÞ|‹ƒè‰…Àt6…ÿt³‹ƒè‰…Àu¨‹G‰<$ÿPë‹F‰4$ÿPéáþÿÿ‹F‰4$ÿPé,ÿÿÿ‹F‰4$ÿPë¿‹G‰<$ÿPéÿÿÿ‰|$‹ƒÑ勉$è×⋃SÞ‹‰ƒOÞǃKÞ|é7ÿÿÿU‰åWVSìÜèöÇE ÇEœÇE˜ÇE”‹ƒòà‰E‹ƒöà‰Eà‹ƒúà‰EÜ‹ƒþà‰EØ‹ƒá‰EÔ‹ƒá‰EЋƒ á‰EÌ‹ƒá‰EÈ‹ƒá‰EÄ‹ƒá‰EÀ‹ƒá‰E¼‹ƒá‰E¸‹ƒ"á‰E´‹ƒ&á‰E°‹ƒ*á‰E¬‹ƒ.á‰E¨‹ƒ2á‰E¤UE ÇD$ M ‰L$ÇD$Ç$‹:Îè5”þÿ…ÀˆžE¤‰D$PE¨‰D$LE¬‰D$HE°‰D$DE´‰D$@E¸‰D$®‰Eˆ…À„‹•lÿÿÿ‹B ‰$è½®‰Æ…À„ Ç$è§®‰E´…À„Ü‹•lÿÿÿ‹B‰$è‹®‰Ç…À„Ç$èó­‰E¬…À„„‰Â‰p ‹ƒ³«ƒ‹ƒ³«‰B‹E´‰B‰z‰T$‹ƒë®‰$èj®‰Æ…À„õ‹U¬‹ƒè‰…À„Ç$莭‰E´…À„£‰p ‰D$‹Eˆ‰$èý­‰Æ…À„Š‹Uˆ‹ƒè‰…À„ü‹U´‹ƒè‰…À„t‹ƒè‰…À„}‹Eœ‰…pÿÿÿéƒýÿÿ‹ƒg«‹‰ƒc«ǃ_«¼ÇE¼1öÇE¤‹…lÿÿÿ‰…tÿÿÿ‰…pÿÿÿ‰…|ÿÿÿ‰…xÿÿÿ‹E¼…Àt‹U¼‹ƒè‰…À„k…öt‹ƒè‰…À„J‹E¤…Àt‹U¤‹ƒè‰…À„ƒ«GèKeþÿ1ö‹Uä…Òt‹ƒè‰…À„Ó‹•lÿÿÿ‹ƒè‰…À„Ÿ‹•pÿÿÿ‹ƒè‰…À„|‹•tÿÿÿ‹ƒè‰…À„Y‹•xÿÿÿ‹ƒè‰…À„6‹•|ÿÿÿ‹ƒè‰…À„‹U‹ƒè‰…À„ó‹EЋƒê‰…҄ЋU …Òt‹ƒè‰…À„‹U…Òt‹ƒè‰…Àu ‹E‹P‰$ÿR‰ðĬ[^_]ËU …Òt‹ƒè‰…À„ª‹U…Òt‹ƒè‰…À„ƒ‹Uä…Òt‹ƒè‰…À„Z1ö‰ðĬ[^_]ËB‰$ÿPéöýÿÿ‹ƒg«‹‰ƒc«ǃ_«¾‰µpÿÿÿÇE¼1öÇE¤‹…lÿÿÿ‰…xÿÿÿ‰…tÿÿÿ‰…|ÿÿÿé þÿÿ‹B‰$ÿPé˜úÿÿ‹ƒ®‰D$‹E”‰$èΉE¬…À„Ï‹•lÿÿÿ‹B ‰$èC«‰Æ…À„€Ç$è-«‰Eˆ…À„<‹•lÿÿÿ‹B‰$諉E´…À„úÇ$èxª‰Ç…À„¾‰p ‹•lÿÿÿ‹B(ƒ‹B(‰G‹Eˆ‰G‹U´‰W‰|$‹ƒë®‰$è憎ƅÀ„M‹ƒè‰…À„ªÇ$誉Eˆ…À„ú‰p ‰D$‹U¬‰$è…ª‰Æ…À„±‹U¬‹ƒè‰…Àt8‹Uˆ‹ƒè‰…À…Œüÿÿ‹B‰$ÿP‹ƒè‰…À…ƒüÿÿ‹F‰4$ÿPéuüÿÿ‹B‰$ÿP‹Uˆë½‹•lÿÿÿ‹B‰$ÿPé?úÿÿ‹B‰$ÿPéªúÿÿ‹G‰<$ÿPéŠúÿÿ‹ƒ®‰D$‹E”‰$è=©‰E´…À„‹•lÿÿÿ‹B ‰$輩‰Æ…À„ÒÇ$覩‰Ç…À„g‹•lÿÿÿ‹B‰$è‹©‰E¬…À„ Ç$èò¨‰Eˆ…À„\‰p ‹ƒ¯«ƒ‹ƒ¯«‹Uˆ‰B‰z‹E¬‰B‰T$‹ƒë®‰$èh©‰Æ…À„ù‹Uˆ‹ƒè‰…À„JÇ$茨‰Ç…À„Ï ‰p ‰D$‹E´‰$èü¨‰Æ…À„T‹U´‹ƒè‰…À„‹ƒè‰…À…ûÿÿ‹G‰<$ÿPéôúÿÿ‹B‰$ÿPé›ùÿÿ‹F‰4$ÿPéxùÿÿ‹EЋP‰$ÿRéüÿÿ‹B‰$ÿPéÿûÿÿ‹B‰$ÿPéßûÿÿ‹B‰$ÿPé¼ûÿÿ‹B‰$ÿPé™ûÿÿ‹B‰$ÿPévûÿÿ‹B‰$ÿPéSûÿÿ‹E ‹P‰$ÿRéÐûÿÿ‹Eä‹P‰$ÿRéûÿÿ‹B‰$ÿPéëúÿÿ‹B‰$ÿPéÞùÿÿ‹G‰<$ÿPéHýÿÿ‹F‰4$ÿPé¨úÿÿ‹B‰$ÿPé‡úÿÿ‹B‰$ÿPé¨þÿÿ‹B‰$ÿPéÞþÿÿ‹F‰4$ÿPéŸöÿÿ‹G‰<$ÿPé‚öÿÿ‹ƒg«‹‰ƒc«ǃ_«¼ÇE°‹•lÿÿÿ‰•tÿÿÿ‰•pÿÿÿ‰•|ÿÿÿ‰•xÿÿÿ‹ƒè‰…À„cÇE¼1öÇE¤‹}°…ÿ„Ïùÿÿ‹U°‹ƒè‰…À…½ùÿÿ‹B‰$ÿPé¯ùÿÿ‹ƒg«‹‰ƒc«ǃ_«½ÇE¼éfùÿÿ‹ƒg«‹‰ƒc«ǃ_«¾‰µpÿÿÿÇE¤‹•lÿÿÿ‰•xÿÿÿ‰•tÿÿÿ‰•|ÿÿÿ‹U€‹ƒè‰…À…hùÿÿ‹B‰$ÿPéZùÿÿ‹Eä‹P‰$ÿR1öéDúÿÿ‹E‹P‰$ÿRélúÿÿ‹E ‹P‰$ÿRéEúÿÿ‹ƒg«‹‰ƒc«ǃ_«À‰µpÿÿÿE؉D$EÔ‰D$E܉$軥‹ƒ_«‰EŒ¿‹ƒ3¬‰D$‹U”‰$èf¥‰E€…À„ºÇD$‰$èð¥‰Æ…À„ ‹U€‹ƒè‰…À„k‹ƒè‰…À„Nƒÿ„aÇ$覥‰Æ…À„)Eà‰D$‰t$‹•pÿÿÿ‰$è’¥…ÀˆÏ1Àƒ}à”À‰Eà‹ƒè‰…À„¦‹Eà…À„(‹³­‰t$‹ƒW«‰$袤‰E¤…À„Q‹ƒ“«‰D$‹E¤‰$肤‰E°…À„ ‹U¤‹ƒè‰…À„… Ç$èr¤‰Ç…À„ ‹ƒï®ƒ‹ƒï®‰G ‰|$‹E°‰$èÓ¤‰Æ…À„[‹U°‹ƒè‰…À„⋃艅À„Å1É1Ò‰ðè-Uþÿ‹ƒè‰…À„‹ƒg«‹‰ƒc«ǃ_«Ë‹E”‰…tÿÿÿÇE¼1öÇE¤‹“ɲ‰•|ÿÿÿ‰•xÿÿÿéÚöÿÿ‹ƒg«‹‰ƒc«ǃ_«Éƒÿ„Q‹U€…Ò„&‹E”‰…tÿÿÿ‹“ɲ‰•|ÿÿÿ‰•xÿÿÿÇE¤é9ýÿÿ‹G‰<$ÿPÇE¼1öÇE¤éüÿÿ‹B‰$ÿPéyóÿÿ‹G‰<$ÿPéVóÿÿ‹ƒg«‹‰ƒc«ǃ_«¾‰µpÿÿÿÇE°‹…lÿÿÿ‰…xÿÿÿ‰…tÿÿÿ‰…|ÿÿÿéüÿÿ‹F‰4$ÿPé¤ýÿÿ‹B‰$ÿPé‡ýÿÿ‹E؉D$‹EÔ‰D$‹E܉$è)£‹EŒ‰ƒ_«ÇEÜÇEÔÇEØ‹U”‰•tÿÿÿÇE¼1öÇE¤‹ƒÉ²‰…|ÿÿÿ‰…xÿÿÿéˆõÿÿ‹E”‰…tÿÿÿ‹“ɲ‰•|ÿÿÿ‰•xÿÿÿé­õÿÿ‹UÜ…Òt‹ƒè‰…À„A‹UÔ…Òt‹ƒè‰…À„‹UØ…Ò„xþÿÿ‹ƒè‰…À…iþÿÿ‹EØ‹P‰$ÿRéXþÿÿ‹ƒg«‹‰ƒc«ǃ_«Ê‹U”‰•tÿÿÿÇE¼ÇE¤‹ƒÉ²‰…|ÿÿÿ‰…xÿÿÿéËôÿÿ1Ò‹ƒK­è Yþÿ‰E¸…À„÷‹»É²‹ƒè‰…À„w1Ò‹ƒï­èóXþÿ‰E„…À„à ‹ƒè‰…À„­‹ƒ›®‰D$‹U‹B ‰$袉E¤…À„IÇ$è(¡‰E°…À„9 ‹U¤‰P ‹ƒ®ƒ‹ƒ®‹U°‰B‰T$‹…hÿÿÿ‰$è|¡‰EÄ…À„W ‹U°‹ƒè‰…À„7 ‹U”‹ƒè‰…À„ ‹ƒG¬‰D$‹E¸‰$è“ ‰E˜…À„f Ç$è• ‰Ç…À„P è0¡‰E¨…À„_ ‹U‹B8‰$èï ‰E …À„}‹E ‰D$‹ƒ›¬‰D$‹U¨‰$臠…ÀˆY‹U ‹ƒè‰…Àu ‹B‰$ÿP‹U‹B<‰$è› ‰Æ…À„I‰D$‹ƒ;­‰D$‹E¨‰$è7 …Àˆð‹ƒè‰…À„Ó‹U¨‰T$‰|$‹ƒ ³‰$è* ‰Æ…À„¾‹ƒè‰…À„Û‹U¨‹ƒè‰…À„»Ç$蟉E …À„m‰p ‹Eă‹U ‰B‰T$‹E˜‰$èòŸ‰Æ…À„(‹U˜‹ƒè‰…À„‹U ‹ƒè‰…À„苃艅À„ËÇE‹ƒ3¬‰D$‹Eĉ$èôž‰E¼…À„X ÇD$‰$è~Ÿ‰Æ…À„> ‹U¼‹ƒè‰…À„Œ ‹ƒè‰…À„o ƒ}„ ‹³¿¬‰t$‹ƒW«‰$茞‰Ç…À„0‹ƒ‹¬‰D$‰<$èpž‰E€…À„" ‹ƒè‰…À„ Ç$ècž‰E¤…À„¶ ‹ƒó®ƒ‹ƒó®‹U¤‰B ‰T$‹E€‰$èÀž‰Æ…À„f‹U€‹ƒè‰…Àu ‹B‰$ÿP‹U¤‹ƒè‰…Àu ‹B‰$ÿP‹ƒè‰…Àu ‹F‰4$ÿP‹EЉ$èØ‰EàƒøŒ*„® ‹ƒ—­‰D$‹U‰$è‰E¼…À„`ÇD$‹U¼‰$è$ž‰Æ…À„‹U¼‹ƒè‰…Àu ‹B‰$ÿP‹ƒè‰…Àu ‹F‰4$ÿP‹ƒÉ²ƒ‹Uĉ•tÿÿÿ‹U¸‰•xÿÿÿ‹U„‰•|ÿÿÿ‰Æéªðÿÿ‹F‰4$ÿPéLøÿÿ‹ƒg«‹‰ƒc«ǃ_«Ê‹E”‰…tÿÿÿÇE¼ÇE¤‹“ɲ‰•|ÿÿÿ‰•xÿÿÿéðÿÿ‹ƒg«‹‰ƒc«ǃ_«Á‹MÀ…É„÷ÿÿ‹UÀ‹ƒè‰…À…ôöÿÿ‹B‰$ÿPéæöÿÿƒŸ9‰D$‹ƒù²‹‰$èPœ‹ƒg«‹‰ƒc«ǃ_«ÀÇE´1öÇE¬ÇEˆ‹ƒè‰…À„……öt ‹ƒè‰…Àtk‹E¬…Àt‹U¬‹ƒè‰…ÀtK‹}ˆ…ÿt‹Uˆ‹ƒè‰…Àt+‹u´…ö„9ÿÿÿ‹U´‹ƒè‰…À…'ÿÿÿ‹B‰$ÿPéÿÿÿ‹B‰$ÿPëÊ‹B‰$ÿP몋F‰4$ÿP늋G‰<$ÿPémÿÿÿè„›…À„Ÿ‹ƒg«‹‰ƒc«ǃ_«ÀéÀþÿÿ‹ƒg«‹‰ƒc«ǃ_«ÁÇE¬ÇEˆé ÿÿÿ‹ƒg«‹‰ƒc«ǃ_«Á1öÇE¬ÇEˆéÜþÿÿ‹ƒg«‹‰ƒc«ǃ_«ÁÇE´ÇE¬ÇEˆé¹þÿÿ‹EÔ‹P‰$ÿRéÕøÿÿ‹EÜ‹P‰$ÿR鮸ÿÿ‹ƒg«‹‰ƒc«ǃ_«Å‹Eœ‰…pÿÿÿÇE¬éjþÿÿ‹ƒg«‹‰ƒc«ǃ_«Ã‹Eœ‰…pÿÿÿÇE¬ÇEˆé6þÿÿ‹F ‰D$ ‹G‹@ ‰D$ƒïB‰D$‹ƒ³‹‰$èšéÈýÿÿ‹ƒg«‹‰ƒc«ǃ_«Ë‹E”‰…tÿÿÿÇE¼1öÇE¤‹“ɲ‰•|ÿÿÿ‰•xÿÿÿéMóÿÿ‹G‰<$ÿPé{øÿÿ‹B‰$ÿPémõÿÿ‹ƒg«‹‰ƒc«ǃ_«Î‹E”‰…tÿÿÿ‹U¸‰•xÿÿÿ‹E„‰…|ÿÿÿÇE¼1öéÊìÿÿ‹G‰<$ÿPéEøÿÿ‹ƒg«‹‰ƒc«ǃ_«Ìé•õÿÿ‹ƒg«‹‰ƒc«ǃ_«Ë‹U”‰•tÿÿÿÇE¼1ö‹ƒÉ²‰…|ÿÿÿ‰…xÿÿÿé^ìÿÿ‹ƒg«‹‰ƒc«ǃ_«Ç‹Eœ‰…pÿÿÿÇE´é×üÿÿ‹ƒg«‹‰ƒc«ǃ_«Ç‹Uœ‰•pÿÿÿÇE´é›üÿÿ‹ƒg«‹‰ƒc«ǃ_«Ç‹Eœ‰…pÿÿÿÇE´ÇEˆéXüÿÿ‹ƒg«‹‰ƒc«ǃ_«Ç‹Eœ‰…pÿÿÿéAüÿÿ‹ƒg«‹‰ƒc«ǃ_«Ç‹Uœ‰•pÿÿÿéüÿÿ‹ƒg«‹‰ƒc«ǃ_«Ç‹Eœ‰…pÿÿÿÇE´éîûÿÿ‹ƒg«‹‰ƒc«ǃ_«Ç‹Uœ‰•pÿÿÿÇE´ÇEˆéÉûÿÿ‹ƒg«‹‰ƒc«ǃ_«Ç‹Eœ‰…pÿÿÿéûÿÿ‹ƒg«‹‰ƒc«ǃ_«Å‹Uœ‰•pÿÿÿé’ûÿÿ‹ƒg«‹‰ƒc«ǃ_«Å‹Uœ‰•pÿÿÿÇE´éPûÿÿ‹ƒg«‹‰ƒc«ǃ_«Å‹Uœ‰•pÿÿÿé˜úÿÿ‹ƒg«‹‰ƒc«ǃ_«Å‹Eœ‰…pÿÿÿéæúÿÿ‹ƒg«‹‰ƒc«ǃ_«Å‹Uœ‰•pÿÿÿÇE¬éÈúÿÿ‹ƒg«‹‰ƒc«ǃ_«Å‹Eœ‰…pÿÿÿÇE´é¿úÿÿ‹ƒg«‹‰ƒc«ǃ_«Î‹U”‰•tÿÿÿ‹E¸‰…xÿÿÿ‹U„‰•|ÿÿÿÇE¼1öéÃéÿÿ‹ƒg«‹‰ƒc«ǃ_«Í‹E”‰…tÿÿÿ‹U¸‰•xÿÿÿÇE¼1öÇE¤‰½|ÿÿÿé~éÿÿ‹ƒg«‹‰ƒc«ǃ_«Ã‹Uœ‰•pÿÿÿé(úÿÿ‹ƒg«‹‰ƒc«ǃ_«Ã‹Eœ‰…pÿÿÿéFùÿÿ‹ƒg«‹‰ƒc«ǃ_«Ã‹Uœ‰•pÿÿÿÇE¬ÇEˆé†ùÿÿ‹ƒg«‹‰ƒc«ǃ_«Ã‹Eœ‰…pÿÿÿÇEˆéYùÿÿ‹ƒg«‹‰ƒc«ǃ_«Ã‹Uœ‰•pÿÿÿéfùÿÿ‹ƒg«‹‰ƒc«ǃ_«Ã‹Uœ‰•pÿÿÿé ùÿÿ‹F‰4$ÿPéUñÿÿ‹G‰<$ÿPé-ñÿÿ‹B‰$ÿPéñÿÿ‹ƒg«‹‰ƒc«ǃ_«ÐÇE 1ö‹E˜…Àt‹U˜‹ƒè‰…À„»‹E …Àt‹U ‹ƒè‰…À„°…öt‹ƒè‰…À„«E܉D$EÔ‰D$E؉$èÕ”‹»_«ÇEéˆõÿÿ‹ƒg«‹‰ƒc«ǃ_«Óƒ}„L‹Eĉ…tÿÿÿ‹U¸‰•xÿÿÿ‹E„‰…|ÿÿÿ1öÇE¤éçÿÿ‰t$‹ƒå²‹‰$ès”‹ƒg«‹‰ƒc«ǃ_«Ë‹E”‰…tÿÿÿÇE¼1ö‹“ɲ‰•|ÿÿÿ‰•xÿÿÿé*çÿÿ‹UÀ‹ƒè‰…Àt1ÿéaîÿÿ‹UÀ‹B‰$ÿP1ÿéNîÿÿ‹ƒg«‹‰ƒc«ǃ_«Ë‹U”‰•tÿÿÿ‹ƒÉ²‰…|ÿÿÿ‰…xÿÿÿéÑìÿÿ‹B‰$ÿPéÛòÿÿ‹B‰$ÿPé»òÿÿ‹ƒg«‹‰ƒc«ǃ_«Î‹U”‰•tÿÿÿ‹E¸‰…xÿÿÿ‹U„‰•|ÿÿÿÇE¼1öÇE¤éŒìÿÿ‹B‰$ÿPé7þÿÿ‹B‰$ÿPéBþÿÿ‹F‰4$ÿPéGþÿÿ‹ƒg«‹‰ƒc«ǃ_«Ð1öÇE ‹ƒè‰…Àu ‹G‰<$ÿP‹E¨…À„Âýÿÿ‹U¨‹ƒè‰…À…°ýÿÿ‹B‰$ÿPé¢ýÿÿ‹E܉D$‹EÔ‰D$‹E؉$蓉»_«ÇEØÇEÔÇEÜ‹Uĉ•tÿÿÿ‹E¸‰…xÿÿÿ‹U„‰•|ÿÿÿÇE¼1öÇE¤éxåÿÿ‹F‰4$ÿPéƒóÿÿ‹B‰$ÿPéfóÿÿ‹UØ…Òt‹ƒè‰…À„ø‹UÔ…Òt‹ƒè‰…À„ó‹UÜ…Ò„}ýÿÿ‹ƒè‰…À…nýÿÿ‹EÜ‹P‰$ÿRé]ýÿÿ‹ƒg«‹‰ƒc«ǃ_«Ð1öéËþÿÿ‹ƒg«‹‰ƒc«ǃ_«ÑÇE é§þÿÿ‹ƒg«‹‰ƒc«ǃ_«Ô‹Eĉ…tÿÿÿ‹U¸‰•xÿÿÿ‹E„‰…|ÿÿÿé<ëÿÿ‹G‰<$ÿPéíòÿÿ‹ƒg«‹‰ƒc«ǃ_«Ô‹Uĉ•tÿÿÿ‹E¸‰…xÿÿÿ‹U„‰•|ÿÿÿÇE°éDêÿÿ‹³¿¬‰t$‹ƒW«‰$èì‰Ç…À„4‹ƒ‹¬‰D$‰<$èЉE€…À„ú‹ƒè‰…À„ÝÇ$èÉE¤…À„©‹ƒ÷®ƒ‹ƒ÷®‹U¤‰B ‰T$‹E€‰$è ‘‰Æ…À„ô‹U€‹ƒè‰…Àu ‹B‰$ÿP‹U¤éàòÿÿ‰t$‹ƒå²‹‰$苃g«‹‰ƒc«ǃ_«Ô‹Eĉ…tÿÿÿ‹U¸‰•xÿÿÿ‹E„‰…|ÿÿÿÇE¼1öÇE¤é/ãÿÿ‹ƒg«‹‰ƒc«ǃ_«Øéhþÿÿ‹G‰<$ÿPéÿÿÿ‹ƒg«‹‰ƒc«ǃ_«Øéƒþÿÿ‰t$‹ƒå²‹‰$èÛ‹ƒg«‹‰ƒc«ǃ_«ØéWÿÿÿ‹ƒg«‹‰ƒc«ǃ_«Ø‹Uĉ•tÿÿÿ‹E¸‰…xÿÿÿ‹U„‰•|ÿÿÿé0éÿÿ‹F‰4$ÿPé'ðÿÿ‹B‰$ÿPé ðÿÿ‹B‰$ÿPéêïÿÿ‹ƒg«‹‰ƒc«ǃ_«Ðéûùÿÿ‹ƒg«‹‰ƒc«ǃ_«Ð‹ƒè‰…À…Ôùÿÿ‹F‰4$ÿP1öéÆùÿÿ‹B‰$ÿPé7ïÿÿ‹G‰<$ÿPéïÿÿ‹ƒg«‹‰ƒc«ǃ_«Ôé)ÿÿÿ‹ƒg«‹‰ƒc«ǃ_«ÕéKþÿÿ‹ƒg«‹‰ƒc«ǃ_«Ö‹Eĉ…tÿÿÿ‹U¸‰•xÿÿÿ‹E„‰…|ÿÿÿÇE¤ékáÿÿ‹ƒg«‹‰ƒc«ǃ_«Öé¦ùÿÿ‹EØ‹P‰$ÿRé÷ûÿÿ‹EÔ‹P‰$ÿRéüûÿÿ‹F‰4$ÿPéîÿÿ‹ƒg«‹‰ƒc«ǃ_«ÐÇE éßúÿÿU‰åWVSƒì,èA-ƒ™‡‰D$ ƒí ‰D$‹E‰D$‹E ‰$èñ…Àu 1ö‰ðƒÄ,[^_]ËEƒ‹»]‰‰|$‹ƒ­‡‰$è_‰Æ…À„q‹ƒí‰‰D$‰4$èC‰Ç…À„³‹ƒè‰…À„Ç$è7‰Æ…À„Ó‹U‹B ƒ‹B ‰F ‹Bƒ‹B‰F‰t$‰<$è’‰Eä…Àt`‹ƒè‰…À„勃艅À„È‹U䋃艅À„¨‹ƒƒ‰Æ‹U‹ƒè‰…À…ÿÿÿ‹B‰$ÿP‰ðƒÄ,[^_]˃½‡‹‰ƒ¹‡ǃµ‡à‹ƒè‰…À„¬…ÿt ‹ƒè‰…Àt7ƒ%$èEþÿ1öë–‹ƒ½‡‹‰ƒ¹‡ǃµ‡àëÌ‹F‰4$ÿPéïþÿÿ‹G‰<$ÿP뾋B‰$ÿPéJÿÿÿ‹F‰4$ÿPé*ÿÿÿ‹G‰<$ÿPé ÿÿÿ‰|$‹ƒ;‹‰$茋ƒ½‡‹‰ƒ¹‡ǃµ‡àécÿÿÿ‹F‰4$ÿPéFÿÿÿU‰åWVSƒìLè%+ÇEäÇEÜÇEØÇEÔUE ÇD$ Mä‰L$ÇD$Ç$‹…èý=þÿ…Àˆ×ƒ…‰D$ ƒÑ‰D$‹E‰D$‹E ‰$è‚‹…À„b‹Eƒ‹³ƒ‹@ …À”À¶À‰Eà…À…¦‹ƒW‰D$‹ƒ-†‰D$‹U‹B‰$è`‹…Àˆî‹U‹B@‰Eà…À„Ç$èE‹‰EØ…À„拳‹ƒè‰…À„‚‹}ØÇEØ‹U‹B‰$ècЉEÜ…À„8‰uÀéÞ‹EÔ‰EÀÇEÔ‹ƒQ†‰D$‹UÀ‰$è=ЉEØ…À„8Ç$è?Š‰Â‰EÔ…À„‹Eä‰D$‰T$‹E؉$耊‰EÄ…À„"‹EØ‹ƒê‰…Ò„}ÇEØ‹EÔ‹ƒê‰…Ò„SÇEÔ‹EĉD$‰<$蘊‰EØ…À„Ö‹UÄ‹ƒè‰…À„P‹ƒè‰…À„3‹}ØÇEØ‹E܉$è%ЉEÔ…À„á‹UÀ‹ƒè‰…À…úþÿÿ‹B‰$ÿPéìþÿÿÇ$èX‰‰EÜ…Àtq‹ƒ­ˆƒ‹“­ˆ‹E܉P ‹E܉D$‹ƒïŒ‹‰$豉‰EØ…Àt>‹EÜ‹ƒê‰…Ò„ðÇEÜ‹EØ1É1Òè:þÿ‹EØ‹ƒê‰…Ò„ºÇEØ‹ƒ¡…‹‰ƒ…ǃ™…åÇEĉuÀ‰÷‹UÜ…Òt‹ƒè‰…À„£‹UØ…Òt‹ƒè‰…À„|‹UÔ…Òt‹ƒè‰…À„U‹EÄ…Àt‹UÄ‹ƒè‰…À„.ƒI"èAþÿ1ö‹Uä…Òt‹ƒè‰…À„ú‹ƒè‰…À„Ñ‹UÀ‹ƒè‰…À„±‹U‹ƒè‰…À„‘‹U …Òt‹ƒè‰…À„ ‹U…Òt‹ƒè‰…Àu ‹E‹P‰$ÿR‰ðƒÄL[^_]ËU …Òt‹ƒè‰…Àu ‹E ‹P‰$ÿR‹U…Òt‹ƒè‰…Àu ‹E‹P‰$ÿR‹Uä…Ò…Ò1ö‰ðƒÄL[^_]ËB‰$ÿPéaÿÿÿ‹B‰$ÿPéAÿÿÿ‹G‰<$ÿPé!ÿÿÿ‹ƒI†‰D$‹E‰$è"‡‰EÄ…À„%Ç$è$‡‰Â‰EØ…À„§‹Eä‰D$‰T$‹Uĉ$èe‡‰EÜ…À„†‹UÄ‹ƒè‰…À„”‹EØ‹ƒê‰…Ò„qÇEØ‹EÜ‹ƒê‰…Ò„GÇEÜ‹»‰ø‰}À‹UÇB ƒ‰Æé?þÿÿ‹EÔ‹P‰$ÿRéœüÿÿ‹EØ‹P‰$ÿRérüÿÿ‹G‰<$ÿPé¿üÿÿ‹B‰$ÿPé¢üÿÿ‹E ‹P‰$ÿRéOþÿÿ‹Eä‹P‰$ÿRéõýÿÿ‹B‰$ÿPéÄýÿÿ‹EÔ‹P‰$ÿRéšýÿÿ‹EØ‹P‰$ÿRésýÿÿ‹EÜ‹P‰$ÿRéLýÿÿ‹ƒ¡…‹‰ƒ…ǃ™…ç‹UÜ…Òt‹ƒè‰…À„2ÇEÜ‹UØ…Òt‹ƒè‰…À„&ÇEØ‹»½…‰|$‹ƒ•…‰$èo…‰Æ…À„²‰uÜ…ö„‰4$èa…‰Eà‹EÜ‹ƒê‰…Ò„yÇEÜ‹Eà…À…ÇEÄ‹ƒ‰EÀ‰Çéqüÿÿ‹EØ‹P‰$ÿRé5üÿÿ‹EÜ‹P‰$ÿRéÿûÿÿ‹ƒ¡…‹‰ƒ…ǃ™…ñ‹“‰UÀ‰×é'üÿÿ‹ƒ¡…‹‰ƒ…ǃ™…èÇEÄ‹ƒ‰EÀ‰Çéøûÿÿ‹ƒè‰…À…ýÿÿ‹Eä‹P‰$ÿR1öé»üÿÿ‹EÜ‹P‰$ÿRé½þÿÿ‹EØ‹P‰$ÿRéÉþÿÿ‹ƒ¡…‹‰ƒ…ǃ™…ñ‹ƒ‰EÀ‰ÇéŒûÿÿ‹ƒ¡…‹‰ƒ…ǃ™…ìÇEĉuÀéeûÿÿ‹F‰4$ÿPépùÿÿ‹ƒ¡…‹‰ƒ…ǃ™…íÇEÄé3ûÿÿ‹ƒ¡…‹‰ƒ…ǃ™…íéûÿÿ‹ƒ¡…‹‰ƒ…ǃ™…ëÇEÄ‹ƒ‰EÀ‰Çéçúÿÿèqƒ…À„‹ƒ¡…‹‰ƒ…ǃ™…ìÇEÄé¶úÿÿ‹EÜ‹P‰$ÿRé¨üÿÿ‹EØ‹P‰$ÿRé~üÿÿ‹B‰$ÿPé^üÿÿƒ1"èò;þÿMÔUÜEØèN9þÿ…Àˆ‹EØ‹ƒê‰…Òt|ÇEØ‹EÜ‹ƒê‰…ÒtYÇEÜ‹EÔ‹ƒê‰…Òt6ÇEÔéý÷ÿÿ‹EÜ‹P‰$ÿRévýÿÿ‰|$‹ƒ‹‰$èà‚é5ýÿÿ‹EÔ‹P‰$ÿR뼋EÜ‹P‰$ÿR뙋EØ‹P‰$ÿRésÿÿÿ‹EÜ‹ƒê‰…Ò„½ÇEÜÇ$èら‰EÔ…Àt}Eà‰D$‰T$‰<$èÖ‚…Àxf1Àƒ}à”À‰Eà‹EÔ‹ƒê‰…Ò„¯ÇEÔ‹Eà…Àuo‹ƒécûÿÿ‹ƒ¡…‹‰ƒ…ǃ™…èÇEÄ‹“‰UÀ‰×éùÿÿ‹ƒ¡…‹‰ƒ…ǃ™…îÇEÄéûøÿÿ‹EÜ‹P‰$ÿRé2ÿÿÿ‹³A‡‰t$‹ƒ‘…‰$èu‰EÄ…À„=‹ƒÍ…‰D$‹Eĉ$èU‰EØ…À„‹UÄ‹ƒè‰…Àu ‹B‰$ÿPÇ$è@‰EÜ…À„‹ƒ)‰ƒ‹“)‰‹E܉P ‹E܉D$‹E؉$蚉EÔ…Àto‹EØ‹ƒê‰…Òu ‹EØ‹P‰$ÿRÇEØ‹EÜ‹ƒê‰…Òu ‹EÜ‹P‰$ÿRÇEÜ‹EÔ1É1ÒèÕ1þÿ‹EÔ‹ƒê‰…Òu ‹EÔ‹P‰$ÿRÇEÔ‹ƒ¡…‹‰ƒ…ǃ™…ïÇEÄé¸÷ÿÿ‹EÔ‹P‰$ÿRé@þÿÿ‹ƒ¡…‹‰ƒ…ǃ™…ïéŠ÷ÿÿ‰t$‹ƒ‹‰$èZ€‹ƒ¡…‹‰ƒ…ǃ™…ïéY÷ÿÿU‰åWVSƒìLè|E܉D$Eà‰D$Eä‰D$ƒl‰D$ ƒÈ‰D$‹E‰D$‹E ‰$者Àu 1ö‰ðƒÄL[^_]ËEƒ‹“Zƒ‹ƒ{‰D$‹U‹B‰$è|‰Æ…À„*‹Eä‰$耉DžÀ„RÇ$èj‰EÐ…À„A‰x ‰D$‰4$è܉EÌ…À„Ë‹ƒè‰…À„®‹UЋƒè‰…À„Ž‹“Z‹ƒè‰…À„k‹»L|‰|$‹ƒèy‰$èÞ~‰Æ…À„‹ƒ|‰D$‰4$èÂ~‰EÐ…À„Œ‹ƒè‰…À„o‹Eà‰$è8‰Ç…À„Þ‹E܉$è#‰Æ…À„xÇ$è‹~‰EÔ…À„„‹Ũ‹EÔ‰P ‰x‰p‰D$‹UЉ$èë~‰Æ…À„Ò‹UЋƒè‰…À„²‹UÔ‹ƒè‰…À„‹ẺEȉÂé“‹ƒøy‹‰ƒôyǃðyöÇEЋ“Z‰UÈ‹ƒè‰…À„õ…ÿt‹ƒè‰…À„§ÇEÔ‹UÐ…Òt‹UЋƒè‰…À„ЋEÔ…Àt‹UÔ‹ƒè‰…À„ŃÌèQ6þÿ1ö‹UÈ‹ƒè‰…ÀtH‹U‹ƒè‰…À…®ýÿÿ‹B‰$ÿP‰ðƒÄL[^_]˃øy‹‰ƒôyǃðyö‹ƒZ‰EÈë‹B‰$ÿPë­‹G‰<$ÿPÇEÔéKÿÿÿ‹ƒøy‹‰ƒôyǃðyö‹ƒZ‰EÈéüþÿÿ‹F‰4$ÿPéýþÿÿ‹B‰$ÿPé"ÿÿÿ‹B‰$ÿPé-ÿÿÿ‹ƒøy‹‰ƒôyǃðy÷‹ẺEÈÇEÔéÑþÿÿ‹B‰$ÿPé‡ýÿÿ‹B‰$ÿPédýÿÿ‹F‰4$ÿPéDýÿÿ‹ƒøy‹‰ƒôyǃðyö1ÿ‹ƒZ‰EÈéVþÿÿ‹F‰4$ÿPéƒýÿÿ‹ƒøy‹‰ƒôyǃðy÷‹ỦUÈ1ÿé#þÿÿ‹ƒøy‹‰ƒôyǃðy÷‹ỦUÈéþÿÿ‹ƒøy‹‰ƒôyǃðy÷‹ẺEÈéÝýÿÿ‰|$‹ƒv‹‰$èí{‹ƒøy‹‰ƒôyǃðy÷‹ẺEÈéþÿÿ‹UÔ‹B‰$ÿPé`ýÿÿ‹B‰$ÿPé@ýÿÿ‹ƒøy‹‰ƒôyǃðy÷‹ẺEÈéýÿÿU‰åWVSƒì<èÇ‹E…À„‹Eƒ‹U ƒ‹Eƒ‹»ãv‰|$‹ƒ3u‰$è{‰Æ…À„‹ƒcu‰D$‰4$èèz‰Ç…À„΋ƒè‰…À„®‰|$‹U‰$è{‰EäƒÀ„·‹ƒè‰…À„ö‹Eä…À„Ž‹ƒ{w‰D$‹E‰$è…z‰Â…À„È1À;“¥|•À‰E䋃艅À„@‹Eä…À…½‹ƒ{v‰D$‹U‰$è>z‰Æ…À„ž‰$è@z‰EäƒøŒÃ„Þ‹ƒè‰…À„ꋃí|‰D$‹E ‰$èþÿÿ‹F‰4$ÿPéüÿÿ‹U‹B‹@ ‰D$ƒ/‰D$‹ƒ½|‹‰$èÎu¾ÿÿÿÿé¡ýÿÿ‹F‰4$ÿPéºüÿÿ‹ƒCu‹‰ƒ?uǃ;u~…ö…èýÿÿé+ýÿÿ‹ƒCu‹‰ƒ?uǃ;uéýÿÿ‹ƒCu‹‰ƒ?uǃ;ué’ýÿÿ‹ƒ¿w‰D$‹E ‰$è`u‰Ç…Àt«‹ƒ¿w‰D$‹U‰$èEu‰Æ…Àt­‹EÔ‰D$‰t$‰<$èÖu…Àx–1Àƒ}ä”À‰E䋃艅Àu ‹G‰<$ÿP‹ƒè‰…À…¨ûÿÿ‹F‰4$ÿPéšûÿÿ‹F‰4$ÿPéûÿÿ‹G‰<$ÿPédûÿÿ‹ƒCu‹‰ƒ?uǃ;u1öéÍüÿÿU‰åWVSƒì,è0ÇEäÇEàÇEÜ‹Eƒ‹U ƒ‹ƒˆp‰D$‰$èot‰Æ‰Eä…À„â‹E‹x$‹ƒè‰…À„,ÇEä9þ„ Ç$èKt‰EÜ…Àtq‹ƒÀqƒ‹“Àq‹E܉P ‹E܉D$‹ƒ v‹‰$è¤t‰Eä…Àt>‹EÜ‹ƒê‰…Ò„ÇEÜ‹Eä1É1Òè%þÿ‹E䋃ꉅ҄ÇE䋃¬n‹‰ƒ¨nǃ¤n‹Uä…Òt‹ƒè‰…À„›‹Uà…Òt ‹ƒè‰…Àtx‹UÜ…Òt ‹ƒè‰…ÀtXƒè è1,þÿ1ö‹U‹ƒè‰…Àt!‹U ‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄ,[^_]ËB‰$ÿPëÔ‹Eä‹P‰$ÿRéÃþÿÿ‹EÜ‹P‰$ÿRëš‹Eà‹P‰$ÿRéwÿÿÿ‹Eä‹P‰$ÿRéTÿÿÿ‹EÜ‹P‰$ÿRÇEÜ‹Eä1É1Òèö#þÿ‹E䋃ꉅ҅îþÿÿ‹Eä‹P‰$ÿRéÝþÿÿ‹ƒ q‰D$‹U ‰$è‰r‰Eä…À„ ‹ƒ(q‰D$‹E ‰$èir‰Eà…À„€Ç$èkr‰EÜ…Àtm‹Uƒ‰P ‹Uä‹E܉P‹Uà‹E܉PÇEäÇEà‹E܉D$‹ƒn‰$è²r‰Eä…Àt(‹EÜ‹ƒê‰…Ò„ÝÇEÜ‹uäÇEäéƒþÿÿ‹ƒ¬n‹‰ƒ¨nǃ¤nŠ‹Uà…Òt‹ƒè‰…À„oÇEà‹UÜ…Òt‹ƒè‰…À„AÇEÜ‹Uä…Òt‹ƒè‰…À„ÇEä‹»Èn‰|$‹ƒ n‰$èWq‰Æ…À„‰uà…ö„¥‰4$èIq‰Æ‹Eà‹ƒê‰…Òt|ÇEà…ö„yýÿÿƒÈ èä)þÿMàUäEÜè@'þÿ…Àxa‹EÜ‹ƒê‰…Ò„ÇEÜ‹E䋃ꉅ҄ÞÇEä‹Eà‹ƒê‰…Ò„´ÇEàépüÿÿ‹Eà‹P‰$ÿRésÿÿÿ‹ƒ¬n‹‰ƒ¨nǃ¤n‹éÞüÿÿ‹ƒ¬n‹‰ƒ¨nǃ¤n‰éþÿÿ‹Eä‹P‰$ÿRéÜþÿÿ‹EÜ‹P‰$ÿRé®þÿÿ‹Eà‹P‰$ÿRé€þÿÿ‰|$‹ƒ*v‹‰$è]péÊþÿÿ‹EÜ‹P‰$ÿRéþÿÿ‹Eà‹P‰$ÿRé;ÿÿÿ‹Eä‹P‰$ÿRéÿÿÿ‹EÜ‹P‰$ÿRéçþÿÿU‰åWVSƒì,èS‹Eƒƒ@‹³gj‰t$‹ƒ¿i‰$è£o‰Ç…À„¬‹U‹B‰$è&p‰Æ…À„Ñ‹M‹A ‰$èp‰EÜ…À„÷‹U‹B‰$èõo‰Eä…À„>Ç$è\o‰Eà…À„ ‰Á‰p ‹U‹Bƒ‹B‰A‹E܉A‹Uä‰Q‰L$‰<$è±o‰Æ…À„p‹ƒè‰…À„7‹Mà‹ƒè‰…À„3‰4$èÊn‰EÜ…À„g‹ƒè‰…À„‹E܉$èco‰Eä…À„Ú‰$è(o‰Æè†n…À„V‹ƒÏi‹‰ƒËiǃÇibÇEàëH‹ƒÏi‹‰ƒËiǃÇicÇEäÇEà‹ƒè‰…À„È…öt‹ƒè‰…À„ËEÜ…Àt‹MÜ‹ƒè‰…À„¸‹Eä…Àt‹U䋃艅À„­‹Eà…Àt‹Mà‹ƒè‰…À„¢ƒWè§&þÿ1ö‹U‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄ,[^_]˃Ïi‹‰ƒËiǃÇicÇEÜÇEäÇEà‹ƒè‰…À…8ÿÿÿ‹G‰<$ÿPé*ÿÿÿ‹F‰4$ÿPé/ÿÿÿ‹A‰ $ÿPé:ÿÿÿ‹B‰$ÿPéEÿÿÿ‹A‰ $ÿPéPÿÿÿ‹ƒÏi‹‰ƒËiǃÇicéÆþÿÿ‹ƒÏi‹‰ƒËiǃÇicÇEàé¢þÿÿ‰t$‹ƒMq‹‰$èm‹ƒÏi‹‰ƒËiǃÇicéÞþÿÿ‹G‰<$ÿPé»ýÿÿ‹A‰ $ÿPé¿ýÿÿ‹F‰4$ÿPéÓýÿÿ‹ƒÏi‹‰ƒËiǃÇicÇEÜÇEäéþÿÿ‹ƒÏi‹‰ƒËiǃÇibÇEäÇEàéþÿÿ‹M䋃艅À„‡‹E‰p ‹U܉$èÈl‰Ç…À„ì‰$èŽl‰Æèìk…Àtg‹ƒÏi‹‰ƒËiǃÇib1öÇEäÇEàé„ýÿÿè¶k…À…0ýÿÿƒ7‰D$‹ƒq‹‰$ègkéýÿÿ‹A‰ $ÿPékÿÿÿ‹ƒè‰…Àtr‹M‰q‹E܉$è(l‰Â…Àtq‹ƒè‰…Àt[ƒ7‰D$‹ƒq‹‰$è k‹ƒÏi‹‰ƒËiǃÇibÇEäÇEàéúüÿÿè k…ÀuÌë°‹G‰<$ÿP냋B‰$ÿPëšèéj…Àu«‹MÜ‹ƒè‰…À„‚‹M‹A9A Œ·‹Q;Bž‹R(@‹‰A‹³gj‰t$‹ƒ¿i‰$è¨j‰Eà…À„>‹U‹B‰$è*k‰Æ…À„©‹M‹A ‰$èk‰Eä…À„l‹U‹B‰$èùj‰Ç…À„TÇ$èaj‰EÜ…À„Á‹M܉q ‹U‹Bƒ‹B‰A‹Eä‰A‰y‰L$‹Uà‰$èµj‰Æ…À„f‹Mà‹ƒè‰…Àu ‹A‰ $ÿP‹UÜ‹ƒè‰…Àu ‹B‰$ÿP‰4$èÁi‰Eä…Àti‹ƒè‰…Àu ‹F‰4$ÿP‹Mä‰ $èYj‰Ç…À„ʉ$èj‰Æè}i…ÀtX‹ƒÏi‹‰ƒËiǃÇih1öÇEÜÇEàéûÿÿ‹ƒÏi‹‰ƒËiǃÇihÇEÜÇEàéýúÿÿ‹ƒè‰…Àu ‹G‰<$ÿP‹E‰p ‹Uä‰$è¿i‰Eà…Àt3‹Mà‰ $è…i‰Æèãh…ÀtJ‹ƒÏi‹‰ƒËiǃÇihéÆúÿÿè½h…Àtf‹ƒÏi‹‰ƒËiǃÇihÇEàé™úÿÿ‹Uà‹ƒè‰…Àu ‹B‰$ÿP‹M‰q‹Eä‰$è0i‰Â…Àt3‹ƒè‰…Àu ‹B‰$ÿPƒ7‰D$‹ƒq‹‰$è hé{ÿÿÿè/h…À…nÿÿÿ‹U䋃艅Àu ‹Uä‹B‰$ÿP‹M‹A‰$è®h‰EÜ…À„K‹U‹B ‰$è•h‰Æ…À„‹M‹A‰$è}h‰Ç…À„ÅÇ$èåg‰Eà…À„Š‹UÜ‹Eà‰P ‹M‹Aƒ‹A‹Uà‰B‰r‰z‰T$‹ƒOi‰$è3h‰Æ…Àt4‹Mà‹ƒè‰…À…¥ùÿÿ‹Uà‹B‰$ÿPé”ùÿÿ‹UÜ‹B‰$ÿPémüÿÿ‹ƒÏi‹‰ƒËiǃÇilé@ùÿÿ‹ƒÏi‹‰ƒËiǃÇilÇEäéÈøÿÿ‹ƒÏi‹‰ƒËiǃÇilÇEäÇEàé°øÿÿ‹ƒÏi‹‰ƒËiǃÇilÇEäÇEà锸ÿÿ‹ƒÏi‹‰ƒËiǃÇiléÂøÿÿ‹ƒÏi‹‰ƒËiǃÇiiÇEäéSøÿÿ‹ƒÏi‹‰ƒËiǃÇiiéøÿÿ‰t$‹ƒMq‹‰$èŒf‹ƒÏi‹‰ƒËiǃÇiiéPøÿÿ1É1Ò‹ƒUq‹èRþÿ‹ƒÏi‹‰ƒËiǃÇiké"øÿÿ‹ƒÏi‹‰ƒËiǃÇiiÇEÜé¤÷ÿÿ‹ƒÏi‹‰ƒËiǃÇiiéÈ÷ÿÿU‰åWVSƒì\è?‹EÇD$‰$ÿ˜‰E¼…À„”‰Â‹ƒÓ_‰B‹³g‰r ƒÇEà‹ƒ'd‰EÜ‹ƒ+d‰EØE؉D$E܉D$Eà‰D$Eä‰D$ƒëQ‰D$ ƒsý‰D$‹E‰D$‹U ‰$è„e…À„‹E¼ƒ‹Eàƒ‰uÀƒ‹»'_‹uà…ÿ„Ô‹F9Çt‰|$‰$èf…À„W‹uàƒ‹U¼‹B ‹ƒê‰…Ò„%‹Eà‹U¼‰B ‹Eà‹@0‹@<ƒ‹UÀ‹ƒè‰…À„ЋEà‹@0‹@<‰EÀ‹Eä‹U¼‰B‹EØ…Àˆb‹EÜ‹U¼‰B‹E؉B‹Eä‰B ‹uÜ;uØv<ÅÇEÌëÇẼƃÇ;uØî‹Eà‰úP(‹Eä9â;B}Ö‹ƒó`‰D$‹UÀ‹B‰$èd‰EÔ…À„²‹Eà‹@(‹D8‰$è€d‰EÌ…À„•Ç$èçc‰EÐ…À„~‹ỦP ‰D$‹EÔ‰$èSd‰EÈ…À„Þ‹UÔ‹ƒè‰…À„_‹UЋƒè‰…À„?‹Eȉ$èˆc‰EÄ…ÀˆÞ‹UÈ‹ƒè‰…À„3‹EÄ…À…ê‹E¼ƒ@éüþÿÿ1ö‹UÀ‹ƒè‰…Àt]‹U¼‹ƒè‰…ÀtD‹Eà‹ƒê‰…Òt(…öy‹U¼‹ƒè‰…À„ùÇE¼‹E¼ƒÄ\[^_]ËEà‹P‰$ÿRëÊ‹B‰$ÿP뱋B‰$ÿP똋B‰$ÿP‹Eà‹@0‹@<‰EÀ‹Eä‹U¼‰B‹EØ…À‰'þÿÿé„‹U¼‹B ‹P‰$ÿR‹Eà‹U¼‰B ‹Eà‹@0‹@<ƒ‹UÀ‹ƒè‰…À…Ìýÿÿëš‹Eà‰úP(‹B Eä+‹U¼‰B ÇEÌéþÿÿ‹B‰$ÿPé³þÿÿ‹B‰$ÿPé“þÿÿ‹B‰$ÿPé¿þÿÿ‹³S`‰t$‹ƒ«_‰$èþa‰EÈ…À„‹Eä‰$èƒb‰EÌ…À„)‹E܉$èmb‰Æ…À„´‹E܉$èXb‰EÐ…À„ÉÇ$è¿a‰EÔ…À„ó‹ỦP ‹Eàƒ‹Eà‹UÔ‰B‰r‹EЉB‰T$‹Uȉ$èb‰EÌ…À„6‹UÈ‹ƒè‰…À„ú‹UÔ‹ƒè‰…À„ö‹Ẻ$è%a‰Æ…À„#‹UÌ‹ƒè‰…À„݉4$è¿a‰EÐ…À„™‰$è„a‰Çèâ`…À„‹ƒ»_‹‰ƒ·_ǃ³_zÇEÔ…öt‹ƒè‰…À„i‹MÐ…Ét‹UЋƒè‰…À„á‹UÔ…Òtf‹UÔ‹ƒè‰…ÀuX‹B‰$ÿPëM‹F‹@ ‰D$‹G ‰D$ ƒ_å‰D$ƒî‰D$‹ƒYg‹‰$è0`‹ƒ»_‹‰ƒ·_ǃ³_rƒ{ýèÿþÿ¾ÿÿÿÿéãüÿÿƒóí‰D$‹ƒMg‹‰$èé_ë·‹B‰$ÿPÇE¼éùüÿÿ‰t$‹ƒ9g‹‰$è`‹ƒ»_‹‰ƒ·_ǃ³_{댋B‰$ÿPéÿÿÿ‹ƒ»_‹‰ƒ·_ǃ³_{1öÇEÐÇEÔ‹UÈ‹ƒè‰…Àt\‹}Ì…ÿ„¤þÿÿ‹UÌ‹ƒè‰…À…’þÿÿ‹B‰$ÿPé„þÿÿ‹F‰4$ÿPé‰þÿÿ‹ƒ»_‹‰ƒ·_ǃ³_1öÇEÐ뤋UÈ‹B‰$ÿPë–‹ƒ»_‹‰ƒ·_ǃ³_{ÇEÐÇEÔé]ÿÿÿ‹ƒ»_‹‰ƒ·_ǃ³_{ÇEÔé9ÿÿÿ‹ƒ»_‹‰ƒ·_ǃ³_éìýÿÿ‹ƒ»_‹‰ƒ·_ǃ³_{éÿþÿÿ‹ƒ»_‹‰ƒ·_ǃ³_ÇEÌ1öÇEÐÇEÔéËþÿÿ‹B‰$ÿPéøüÿÿ‹B‰$ÿPéüüÿÿ‹B‰$ÿPéýÿÿ‹ƒ»_‹‰ƒ·_ǃ³_{1öÇEÐé{þÿÿ‹ƒ»_‹‰ƒ·_ǃ³_zÇEÔÇEÐéiþÿÿ‹UЋƒè‰…À„ý‰}܉4$èn^‰EÈ…À„õ‹Eȉ$è0^‰ÇèŽ]…Àt^‹ƒ»_‹‰ƒ·_ǃ³_zÇEÌÇEÐÇEÔéàýÿÿèS]…À…qüÿÿƒ#ý‰D$‹ƒ g‹‰$è]éRüÿÿ‹UÈ‹ƒè‰…À„«‰}؉4$èÒ]‰Â…Àtt‹ƒè‰…Àt^ƒ#ý‰D$‹ƒ g‹‰$è·\‹ƒ»_‹‰ƒ·_ǃ³_zÇEÐÇEÔéþûÿÿ‹B‰$ÿPéõþÿÿè¦\…Àu¾ë¢‹B‰$ÿPë—è\…Àu¨‹ƒè‰…À…øÿÿ‹F‰4$ÿPé øÿÿ‹B‰$ÿPéGÿÿÿU‰åWVSƒì|èõûÇEà‹ƒyZ‰EäUE ÇD$ Mà‰L$ÇD$Ç$‹µHèÙþÿ…ÀˆEä‰D$ƒµH‰D$ ƒ=ä‰D$‹E‰D$‹E ‰$èW\…À„¦‹Eƒ‹E䃋³Ó]ƒ‹ƒW‰D$‹U‰$èÁ[‰E°…À„œÇ$èÃ[‰E´…À„Cè]\‰EÐ…À„Ž‰Â‹Eä‰D$‹ƒáW‰D$‰$èÎ[…Àˆk‹Eà‰D$‹UЉ$èr\…ÀˆQ‹UЉT$‹E´‰D$‹U°‰$è¶[‰E¸…À„-‹U°‹ƒè‰…À„Ÿ‹U´‹ƒè‰…À„‹UЋƒè‰…À„_‹ƒè‰…À„B‹ƒ…W‰D$‹E‰$èÔZ‰E°…À„õÇ$èÖZ‰E´…À„}‹E¸ƒ‹U´‰B ‹Eà‰D$‰T$‹E°‰$è [‰Ç…À„›‹U°‹ƒè‰…À„ß‹U´‹ƒè‰…À„¿‹“Ó]‹ƒè‰…À„ÆÇ$è}Z‰E¼…À„”‹“Ó]‹ƒè‰…À„(‰<$è Z‰E°…À„•‹ƒÓ]‰E¤‰E ‰E¨‹U°‰$è£Z‰E´…À„‡‰$èÒY‰EÐ…À„â ‹U´‹ƒè‰…À„Ø‹EЉ$èhZ‰EÈ…À„7‹U ‹ƒè‰…À„¾‹EЉ$è@Z‰EÌ…À„W‹U¤‹ƒè‰…À„¤‹EЉ$èZ‰EÄ…À„}‹U¨‹ƒè‰…À„›‹EЉ$èðY‰Â…À…– èY…À…² ‹UЋƒè‰…À„V‹ƒ W‰D$‹E¼‰$èY‰E´…À„C ‹³ÅX‰t$‹ƒaV‰$èàX‰EÀ…À„H‰Â‹ƒÍV‰D$‰$èÁX‰EÐ…À„ƒ‹UÀ‹ƒè‰…À„WÇ$è±X‰EÀ…À„Z‹Eƒ‹UÀ‰B ‹Ẽ‰B‹Uȃ‹EÀ‰P‹Uă‰P‰D$‹EЉ$èùX‰EÔ…À„\ ‹UЋƒè‰…À„‹UÀ‹ƒè‰…À„æÇ$è2X‰EÐ…À„¦ ‹Eȃ‹UЉB ‹Ẽ‰B‹EÔ‰BÇ$èX‰EÀ…À„©‹UЉP ‰D$‹E´‰$èlX‰Æ…À„D‹U´‹ƒè‰…À„¤‹UÀ‹ƒè‰…À„„‹ƒè‰…À„g‹EĉE¨‹ỦU¤‹EȉE ‹U°‰$èX‰E´…À…yýÿÿèIW…À„, ‹ƒqV‹‰ƒmVǃiVa‹E¸‰Eœ‹u¼ÇEÐÇEÀÇEÔéM‹ƒqV‹‰ƒmVǃiV^‰÷‰uœ‰ð‰E¤‰E ‰E¨ƒeôè»þÿÇE¬‹Uà…Òt‹ƒè‰…À„]‹Uœ‹ƒè‰…À„,‹ƒè‰…À„‹ƒè‰…À„ò‹U ‹ƒè‰…À„Ò‹U¤‹ƒè‰…À„²‹U¨‹ƒè‰…À„’‹U‹ƒè‰…À„r‹E䋃ꉅ҄O‹U …Òt‹ƒè‰…À„¬‹U…Òt‹ƒè‰…Àu ‹E‹P‰$ÿR‹E¬ƒÄ|[^_]˃qV‹‰ƒmVǃiV^ÇEÀÇEÔ‰÷‰uœ‰u ‰u¨‰u¤‹U°‹ƒè‰…À„¬‹E´…Àt‹U´‹ƒè‰…À„À‹EÐ…Àt‹UЋƒè‰…À„‹‹EÀ…Àt‹UÀ‹ƒè‰…À„€‹EÔ…À„sþÿÿ‹UÔ‹ƒè‰…À…aþÿÿ‹B‰$ÿPéSþÿÿ‹U …Òt‹ƒè‰…À„Ø‹U…Òt‹ƒè‰…À„Ó‹Uà…Òt‹ƒè‰…À„”ÇE¬‹E¬ƒÄ|[^_]ËEä‹P‰$ÿRé þÿÿ‹B‰$ÿPé€þÿÿ‹B‰$ÿPé`þÿÿ‹B‰$ÿPé@þÿÿ‹B‰$ÿPé þÿÿ‹F‰4$ÿPéþÿÿ‹G‰<$ÿPéãýÿÿ‹B‰$ÿPéÆýÿÿ‹E ‹P‰$ÿRéCþÿÿ‹Eà‹P‰$ÿRé’ýÿÿ‹ƒqV‹‰ƒmVǃiV^ÇEÐÇEÀÇEÔ‰÷‰uœ‰u ‰u¨‰u¤‹U°‹ƒè‰…À…Tþÿÿ‹U°‹B‰$ÿPéCþÿÿ‹B‰$ÿPégþÿÿ‹B‰$ÿPérþÿÿ‹B‰$ÿPé2þÿÿ‹ƒqV‹‰ƒmVǃiV_‹U¸‰Uœ‹³Ó]‰ð‰÷é¬üÿÿ‹F‰4$ÿPé°øÿÿ‹B‰$ÿP铸ÿÿ‹B‰$ÿPésøÿÿ‹B‰$ÿPéSøÿÿ‹Eà‹P‰$ÿRÇE¬éKýÿÿ‹E ‹P‰$ÿRéþÿÿ‹E‹P‰$ÿRéþÿÿ‹ƒqV‹‰ƒmVǃiV_‹E¸‰EœÇEÐÇEÀÇEÔ‹³Ó]‰÷‰u¤‰u ‰u¨éýÿÿ‹B‰$ÿPéùÿÿ‹B‰$ÿPé4ùÿÿ‹B‰$ÿPéNùÿÿ‹UЋB‰$ÿPé™ùÿÿ‹B‰$ÿPéWùÿÿ‹B‰$ÿPé3øÿÿ‹B‰$ÿPéøÿÿ‹B‰$ÿPé,øÿÿ‹ƒqV‹‰ƒmVǃiVa‹u¼‹U¸‰Uœ‹ƒÓ]éRûÿÿ‹B‰$ÿPé›ùÿÿ‹B‰$ÿPé úÿÿ‹B‰$ÿPéìùÿÿ‹F‰4$ÿPé‹úÿÿ‹B‰$ÿPénúÿÿ‹B‰$ÿPéNúÿÿ‹B‰$ÿPéÊ÷ÿÿ‹ƒqV‹‰ƒmVǃiV_‹U¸‰UœÇEÐÇEÀÇEÔ‹³Ó]‰÷‰u¤‰u ‰u¨éÕûÿÿ‹ƒqV‹‰ƒmVǃiV`‹E¸‰Eœ‹³Ó]‰ðé|úÿÿè^Q…À„?‹ƒqV‹‰ƒmVǃiVa‹U¸‰Uœ‹u¼ÇE´ÇEÀÇEÔébûÿÿèQ…À„‹ƒqV‹‰ƒmVǃiVa‹U¸‰Uœ‹u¼‹EȉE ÇE´ÇEÀÇEÔéûÿÿèÈP…À„‹ƒqV‹‰ƒmVǃiVa‹U¸‰Uœ‹u¼‹EȉE ‹ỦU¤ÇE´ÇEÀÇEÔéÀúÿÿ‰t$‹ƒï]‹‰$èºP‹ƒqV‹‰ƒmVǃiVb‹U¸‰Uœ‹u¼‹EȉE ‹ỦU¤‹EĉE¨ÇEÐÇEÔéfúÿÿ‹ƒqV‹‰ƒmVǃiVb‹U¸‰Uœ‹u¼‹EȉE ‹ỦU¤‹EĉE¨ÇEÔé'úÿÿ‹ƒqV‹‰ƒmVǃiVa‹E¸‰Eœ‹u¼ÇEÀÇEÔéóùÿÿƒÙó‰D$‹ƒ¿]‹‰$èeOéÍþÿÿ‹ƒè‰…À„–ƒÙó‰D$‹ƒ¿]‹‰$è7O‹ƒqV‹‰ƒmVǃiVa‹U¸‰Uœ‹u¼‹EȉE ‹ỦU¤‹EĉE¨ÇE´ÇEÀÇEÔé^ùÿÿƒÙó‰D$‹ƒ¿]‹‰$èÐNé¢ýÿÿƒÙó‰D$‹ƒ¿]‹‰$è±NéËýÿÿ‹ƒqV‹‰ƒmVǃiVb‹U¸‰Uœ‹u¼‹EȉE ‹ỦU¤‹EĉE¨éèøÿÿ‹ƒqV‹‰ƒmVǃiVb‹U¸‰Uœ‹u¼‹EȉE ‹ỦU¤‹EĉE¨ÇEÐÇEÀÇEÔ雸ÿÿ‹ƒqV‹‰ƒmVǃiVb‹U¸‰Uœ‹u¼‹EȉE ‹ỦU¤‹EĉE¨ÇEÀé\øÿÿ‹U°‹ƒè‰…Àu ‹B‰$ÿP‹E¼ƒ‹U¸‰Uœ‰E¬‰Æé÷ÿÿ‹B‰$ÿPé\þÿÿU‰åWVSƒì\èníÇEäUE ÇD$ Mä‰L$ÇD$Ç$‹ÎGè[þÿ…Àˆ5ƒÎG‰D$ ƒÊ‰D$‹E‰D$‹E ‰$èàM…À„Å‹Eƒ‹»LOƒÇ$è•M‰E¼…À„ó‹ƒè‰…À„U‹ƒÎH‰D$‹U‰$è*M‰EÔ…À„óÇ$è,M‰Æ…À„I‹Eä‰D$‰t$‹EÔ‰$èpM‰EÐ…À„Y‹UÔ‹ƒè‰…À„9‹ƒè‰…À„‹EЉ$è­L‰EÔ…À„?‹UЋƒè‰…À„R‰}´‰}°‹UÔ‰$è=M‰Æ…À„‰$èmL‰EÐ…À„‡‹ƒè‰…À„†‹EЉ$èM‰EÌ…À„ ‹U°‹ƒè‰…À„l‹EЉ$èÞL‰EÈ…À„:‹U´‹ƒè‰…À„æ‹EЉ$è¶L‰EÄ…À„K‹ƒè‰…À„Ï‹UЉ$è‘L‰Â…À…è¿K…À…¬‹UЋƒè‰…À„©‹ƒ†H‰D$‹E¼‰$è¤K‰Æ…À„Ç$è§K‰EÐ…À„F‹Uȃ‰P ‹Eă‹UЉBÇ$è{K‰EÀ…À„î‹UЉP ‰D$‰4$èêK‰Ç…À„k‹ƒè‰…À„8‹UÀ‹ƒè‰…À„B‹ƒè‰…À„%‹}Ä‹UȉU´‹ẺE°‹UÔ‰$è K‰Æ…À…cþÿÿèÎJ…À„K‹ƒêG‹‰ƒæGǃâGhÇEÐÇEÀé‹U …Òt‹ƒè‰…À„ž‹U…Òt‹ƒè‰…À„w‹Uä…Òt‹ƒè‰…À„ÇE¸‹E¸ƒÄ\[^_]˃êG‹‰ƒæGǃâGg‰þ‹»LO‰}´‰}°ƒæèþþÿÇE¸‹Uä…Òt‹ƒè‰…À„‹ƒè‰…À„Ä‹U°‹ƒè‰…À„¤‹U´‹ƒè‰…Àt`‹ƒè‰…Àti‹U‹ƒè‰…Àtr‹U …Òt‹ƒè‰…À„´‹U…Ò„>ÿÿÿ‹ƒè‰…À…/ÿÿÿ‹E‹P‰$ÿR‹E¸ƒÄ\[^_]ËB‰$ÿP‹ƒè‰…Àu—‹G‰<$ÿP‹U‹ƒè‰…ÀuŽ‹B‰$ÿP냋B‰$ÿPéNÿÿÿ‹F‰4$ÿPé.ÿÿÿ‹ƒêG‹‰ƒæGǃâGh‹u¼éËþÿÿ‹Eä‹P‰$ÿRéîþÿÿ‹E ‹P‰$ÿRé;ÿÿÿ‹G‰<$ÿPéûÿÿ‹F‰4$ÿPélüÿÿ‹B‰$ÿPé†üÿÿ‹ƒêG‹‰ƒæGǃâGhÇEÐÇEÀ‰}´‰}°‹UÔ‹ƒè‰…À„¸…öt‹ƒè‰…À„¶‹MÐ…Ét‹UЋƒè‰…Àt[‹UÀ…Òt‹UÀ‹ƒè‰…Àt‹u¼éþÿÿ‹B‰$ÿP‹u¼é÷ýÿÿ‹B‰$ÿPé üÿÿ‹G‰<$ÿPé#üÿÿ‹UЋB‰$ÿPéFüÿÿ‹B‰$ÿPëš‹F‰4$ÿPéºüÿÿ‹G‰<$ÿPéÍüÿÿ‹B‰$ÿPé°üÿÿ‹UÔ‹B‰$ÿPé7ÿÿÿ‹F‰4$ÿPé<ÿÿÿ‹F‰4$ÿPéÖúÿÿ‹B‰$ÿPé¹úÿÿ‹ƒêG‹‰ƒæGǃâGhÇEÀ‰}´‰}°éÑþÿÿ‹Eä‹P‰$ÿRÇE¸éçüÿÿ‹B‰$ÿPé úÿÿè&G…À„l‹ƒêG‹‰ƒæGǃâGh1öÇEÀéxþÿÿ‹E‹P‰$ÿRéxüÿÿ‹E ‹P‰$ÿRéQüÿÿèÑF…À„6‹ƒêG‹‰ƒæGǃâGh‹ỦU°1öÇEÀéþÿÿè˜F…À„‹ƒêG‹‰ƒæGǃâGh‹ỦU°‹EȉE´1öÇEÀéÞýÿÿ‹ƒêG‹‰ƒæGǃâGhÇEÀ‰}´‰}°éàýÿÿ‹ƒè‰…À„œƒRå‰D$‹ƒ8O‹‰$èÞE‹ƒêG‹‰ƒæGǃâGh‹ẺE°‹UȉU´‹}Ä1öÇEÀéVýÿÿ‹ƒêG‹‰ƒæGǃâGhÇEÀé2ýÿÿƒRå‰D$‹ƒ8O‹‰$èkEéuþÿÿƒRå‰D$‹ƒ8O‹‰$èLEé«þÿÿƒRå‰D$‹ƒ8O‹‰$è-EéÅþÿÿ‹ƒêG‹‰ƒæGǃâGi‹ẺE°‹UȉU´‹}Äé©üÿÿ‹ƒêG‹‰ƒæGǃâGi‹ẺE°‹UȉU´‹}ÄÇEÀévüÿÿ‹ƒêG‹‰ƒæGǃâGi‹ẺE°‹UȉU´‹}ÄÇEÐÇEÀé<üÿÿ‹ƒêG‹‰ƒæGǃâGi‹ẺE°‹UȉU´‹}ÄÇEÐé üÿÿ‹B‰$ÿPéVþÿÿ‹UÔ‹ƒè‰…Àt‹E¼ƒ‰E¸‰ÆéNúÿÿ‹B‰$ÿPëåU‰åWVSƒì|èæãÇEà‹ƒnB‰EäUE ÇD$ Mà‰L$ÇD$Ç$‹®0èÊöýÿ…Àˆ:Eä‰D$ƒ®0‰D$ ƒ.̉D$‹E‰D$‹E ‰$èHD…À„ËEƒ‹E䃋»ÄEƒ‹ƒr?‰D$‹U‰$è²C‰E´…À„wÇ$è´C‰Æ…À„?èOD‰EÀ…À„¶‰Â‹Eä‰D$‹ƒÒ?‰D$‰$èÀC…Àˆ“‹Eà‰D$‹UÀ‰$èdD…Àˆy‹UÀ‰T$‰t$‹E´‰$è«C‰E¼…À„%‹U´‹ƒè‰…À„‹ƒè‰…À„p‹UÀ‹ƒè‰…À„P‹ƒè‰…À„3‹ƒv?‰D$‹E‰$èÌB‰E´…À„åÇ$èÎB‰Æ…À„j‹E¼ƒ‰F ‹Eà‰D$‰t$‹U´‰$è C‰E¸…À„@‹U´‹ƒè‰…À„‹ƒè‰…À„‹³ÄE‹ƒè‰…À„ëÇ$è{B‰EÄ…À„,‹ƒè‰…À„‹E¸‰$è B‰E´…À„ˉu¬‰u¨‰u°‹U´‰$èªB‰Æ…À„z‰$èÚA‰EÀ…À„P‹ƒè‰…À„î‹EÀ‰$èsB‰EÐ…À„Þ‹U¨‹ƒè‰…À„Ô‹EÀ‰$èKB‰EÔ…À„ø‹U¬‹ƒè‰…À„º‹EÀ‰$è#B‰EÌ…À„‹U°‹ƒè‰…À„ ‹EÀ‰$èûA‰Â…À…?è)A…À…`‹UÀ‹ƒè‰…À„z‹ƒþ>‰D$‹Eĉ$èA‰Æ…À„©Ç$èA‰EÈ…À„a‹UÔƒ‰P ‰D$‰4$è}A‰Ç…À„ý‹ƒè‰…À„5‹UÈ‹ƒè‰…À„‹ƒè‰…À„"‹ẺE°‹UÔ‰U¬‹EЉE¨‹U´‰$è0A‰Æ…À…†þÿÿè^@…À„B‹ƒb>‹‰ƒ^>ǃZ>t‹E¼‰E ‹U¸‰U¤‹}ÄÇEÀÇEÈé•‹ƒb>‹‰ƒ^>ǃZ>q‰}¤‰} ‰ø‰E°‰E¬‰E¨ƒžÜèÐøýÿ1ö‹Uà…Òt‹ƒè‰…À„p‹U ‹ƒè‰…À„P‹U¤‹ƒè‰…À„Ž‹ƒè‰…À„—‹U¨‹ƒè‰…À„ ‹U¬‹ƒè‰…À„©‹U°‹ƒè‰…À„²‹U‹ƒè‰…À„»‹E䋃ꉅ҄ċU …Òt‹ƒè‰…À„Þ‹U…Òt‹ƒè‰…Àu ‹E‹P‰$ÿR‰ðƒÄ|[^_]ËU …Òt‹ƒè‰…À„±‹U…Òt‹ƒè‰…À„Š‹Uà…Òt‹ƒè‰…À„a1ö‰ðƒÄ|[^_]˃b>‹‰ƒ^>ǃZ>qÇEȉ}¤‰ø‰} ‰}¨‰E°‰E¬‹U´‹ƒè‰…À„€…öt‹ƒè‰…À„Œ‹EÀ…Àt‹UÀ‹ƒè‰…À„e‹uÈ…ö„Kþÿÿ‹UÈ‹ƒè‰…À…9þÿÿ‹B‰$ÿPé+þÿÿ‹B‰$ÿP‹ƒè‰…À…iþÿÿ‹G‰<$ÿP‹U¨‹ƒè‰…À…`þÿÿ‹B‰$ÿP‹U¬‹ƒè‰…À…Wþÿÿ‹B‰$ÿP‹U°‹ƒè‰…À…Nþÿÿ‹B‰$ÿP‹U‹ƒè‰…À…Eþÿÿ‹B‰$ÿP‹E䋃ꉅ҅<þÿÿ‹Eä‹P‰$ÿRé+þÿÿ‹B‰$ÿPé¢ýÿÿ‹Eà‹P‰$ÿRéýÿÿ‹E ‹P‰$ÿRéþÿÿ‹ƒb>‹‰ƒ^>ǃZ>qÇEÀÇEȉ}¤‰ú‰} ‰}¨‰U°‰U¬‹U´‹ƒè‰…À…€þÿÿ‹U´‹B‰$ÿPéoþÿÿ‹B‰$ÿPéþÿÿ‹F‰4$ÿPéfþÿÿ‹ƒb>‹‰ƒ^>ǃZ>r‹U¼‰U ‹»ÄE‰ø‰}¤éžüÿÿ‹G‰<$ÿPé¿ùÿÿ‹B‰$ÿPé¢ùÿÿ‹F‰4$ÿPé‚ùÿÿ‹B‰$ÿPéeùÿÿ‹Eà‹P‰$ÿR1öé@ýÿÿ‹E‹P‰$ÿRéeýÿÿ‹E ‹P‰$ÿRé>ýÿÿ‹ƒb>‹‰ƒ^>ǃZ>r‹E¼‰E ÇEÀÇEÈ‹»ÄE‰}¤‰}¬‰}¨‰}°écýÿÿ‹ƒb>‹‰ƒ^>ǃZ>qé®þÿÿ‹F‰4$ÿPéúÿÿ‹B‰$ÿPéúÿÿ‹B‰$ÿPé8úÿÿ‹B‰$ÿPéRúÿÿ‹UÀ‹B‰$ÿPéuúÿÿ‹B‰$ÿPéÝúÿÿ‹F‰4$ÿPé½úÿÿ‹G‰<$ÿPéÐúÿÿ‹B‰$ÿPéñøÿÿ‹F‰4$ÿPéùÿÿ‹F‰4$ÿPéäøÿÿ‹ƒb>‹‰ƒ^>ǃZ>t‹}Ä‹E¸‰E¤‹U¼‰U ‰ðéûÿÿ‹F‰4$ÿPéãøÿÿ‹ƒb>‹‰ƒ^>ǃZ>s‹E¸‰E¤‹U¼‰U ‰÷‰ðéËúÿÿèÂ:…À„¿‹ƒb>‹‰ƒ^>ǃZ>t‹U¼‰U ‹E¸‰E¤‹}Ä1öÇEÈéþûÿÿè€:…À„œ‹ƒb>‹‰ƒ^>ǃZ>t‹U¼‰U ‹E¸‰E¤‹}Ä‹UЉU¨1öÇEÈé¶ûÿÿè8:…À„ý‹ƒb>‹‰ƒ^>ǃZ>t‹U¼‰U ‹E¸‰E¤‹}Ä‹UЉU¨‹EÔ‰E¬1öÇEÈéhûÿÿ‹ƒè‰…Àu ‹B‰$ÿPƒÊÛ‰D$‹ƒ°E‹‰$è”9‹ƒb>‹‰ƒ^>ǃZ>t‹U¼‰U ‹E¸‰E¤‹}Ä‹UЉU¨‹EÔ‰E¬‹ỦU°1öÇEÈéóúÿÿ‹ƒb>‹‰ƒ^>ǃZ>t‹E¼‰E ‹U¸‰U¤‹}ÄÇEÈéÀúÿÿ‹ƒb>‹‰ƒ^>ǃZ>u‹E¼‰E ‹U¸‰U¤‹}Ä‹EЉE¨‹UÔ‰U¬‹ẺE°ÇEÀÇEÈétúÿÿƒÊÛ‰D$‹ƒ°E‹‰$è´8é"þÿÿƒÊÛ‰D$‹ƒ°E‹‰$è•8éEþÿÿ‹ƒb>‹‰ƒ^>ǃZ>u‹E¼‰E ‹U¸‰U¤‹}Ä‹EЉE¨‹UÔ‰U¬‹ẺE°ÇEÀéñùÿÿ‹ƒb>‹‰ƒ^>ǃZ>u‹U¼‰U ‹E¸‰E¤‹}Ä‹UЉU¨‹EÔ‰E¬‹ỦU°ÇEÀé¬ùÿÿƒÊÛ‰D$‹ƒ°E‹‰$èì7éäýÿÿ‹U´‹ƒè‰…Àt‹Eă‹U¼‰U ‹E¸‰E¤‹uĉ÷éøÿÿ‹B‰$ÿPëÙU‰åWVSƒìlès×ÇEäÇEàÇEÜE܉D$Eà‰D$Eä‰D$ƒC$‰D$ ƒSЉD$‹E‰D$‹E ‰$èù7…À„:‹Eƒ‹E䃋Eàƒ‹E܃‹³Q9‹B‰1À9uÜ”À‰EØ…À„ÄB‰‰u¬‰÷‰u´‰u°‰u¸‹ƒè‰…À„ˆ‹U¬‹ƒè‰…À„ü‹U°‹ƒè‰…À„‹U´‹ƒè‰…À„‹U¸‹ƒè‰…À„‹U‹ƒè‰…À„ ‹E䋃ꉅ҄‘‹Eà‹ƒê‰…Ò„n‹EÜ‹ƒê‰…Òu ‹EÜ‹P‰$ÿR‰ðƒÄl[^_]ÃÇ$èÁ6‰E¼…À„艅À„Ê‹E܉$èQ6‰EÔ…À„aÇEÀ‰u°‰u¬‰u¸‰u´‹UÔ‰$èæ6‰Æ…À„Z‰$è6‰Ç…À„­‹ƒè‰…À„“‰<$è³6‰EÐ…À„·‹U¬‹ƒè‰…À„|‰<$èŽ6‰EÌ…À„H‹U°‹ƒè‰…À„e‰<$èi6‰EÈ…À„U‹U´‹ƒè‰…À„N‰<$èD6‰EÄ…À„h‹U¸‹ƒè‰…À„7‰<$è6‰Â…À…yèM5…À…•‹ƒè‰…À„H‹ƒQ99Eä•À¶À‰EØ…À…ý‹EØ…À…ˆ‹ƒQ99Eà•À¶À‰EØ…À…—‹EØ…À„E‹EЉE¬‹ỦU°‹EȉE´‹UĉU¸‹UÔ‰$èŒ5‰Æ…À…¦þÿÿèº4…À„’‹ƒï1‹‰ƒë1ǃç1÷1ÿ‹UÔ‹ƒè‰…À„…öt‹ƒè‰…À„…ÿt‹ƒè‰…À„Ú‹EÀ…Àt‹UÀ‹ƒè‰…À„©‹}¼é†1ö‰ðƒÄl[^_]ËEà‹P‰$ÿRéýÿÿ‹Eä‹P‰$ÿRé^ýÿÿ‹B‰$ÿP‹U°‹ƒè‰…À…ûüÿÿ‹B‰$ÿP‹U´‹ƒè‰…À…òüÿÿ‹B‰$ÿP‹U¸‹ƒè‰…À…éüÿÿ‹B‰$ÿP‹U‹ƒè‰…À…àüÿÿ‹B‰$ÿPéÒüÿÿ‹G‰<$ÿPéjüÿÿ‹UЉU¬‹ẺE°‹UȉU´‹EĉE¸ÇEÀé7ýÿÿ‹F‰4$ÿPé_ýÿÿ‹B‰$ÿPévýÿÿ‹B‰$ÿPéýÿÿ‹B‰$ÿPé¤ýÿÿ‹B‰$ÿPé»ýÿÿE؉D$‹ẺD$‹Eä‰$èÄ3…Àˆ0‹EØ÷ÐÁè‰EØéÒýÿÿ‹G‰<$ÿPéªýÿÿ‹ƒï1‹‰ƒë1ǃç1÷‹}¼‰u°‰u¬‰u¸‰u´ƒWÐè–ëýÿ1öéyûÿÿ‹ƒQ99Eä•À¶À‰EØ…À…½‹EØ…À…6‹UЉU¬‹EȉE´‹ƒQ99Eà•À¶À‰EØ…À…Œ‹EØ…À…O‹ẺE°‹UĉU¸‹ƒ‹2‰D$‹U¼‰$èD2‰Æ…À„‘Ç$èG2‰Ç…À„Ó‹E¬ƒ‰G ‹U°ƒ‰W‹E´ƒ‰G‹U¸ƒ‰WÇ$è 2‰EÀ…À„˜‰x ‰D$‰4$è2‰Ç…À„‹ƒè‰…À„‹UÀ‹ƒè‰…À„õ‹ƒè‰…À…þÿÿ‹G‰<$ÿPÇEÀéIûÿÿ‹ƒï1‹‰ƒë1ǃç1ö‰u¬‰÷‰u´‰u°‰u¸é“þÿÿ‹Eä‰D$‹Uȉ$è/2‰Æ…À„‹EЉD$‰4$è€1‰Ç…À„µ‹ƒè‰…À„Ä‹UÈ‹ƒè‰…À„¤‹E䃋UЋƒè‰…À„~‹Eä‰E¬‰}´éZþÿÿE؉D$‹EЉD$‹Eä‰$èu1…Àˆ€1Àƒ}ØŸÀ‰EØéþÿÿ‹B‰$ÿP‹}¼éÔýÿÿ‹F‰4$ÿPé(úÿÿ‹UÔ‹B‰$ÿPéèûÿÿ‹F‰4$ÿPéíûÿÿE؉D$‹UЉT$‹Eà‰$è1…Àˆ×1Àƒ}ØžÀ‰EØé7ûÿÿè)0…À„닃ï1‹‰ƒë1ǃç1÷1öéjûÿÿ‹Eà‰D$‹Eĉ$èå0‰Æ…À„*‹ỦT$‰$è60‰Ç…À„苃艅À„P‹UÄ‹ƒè‰…À„0‹Eàƒ‹UÌ‹ƒè‰…À„ ‹Eà‰E°‰}¸éAýÿÿ‹G‰<$ÿPéûÿÿès/…À„T‹ƒï1‹‰ƒë1ǃç1÷‹EЉE¬1öé®úÿÿèA/…À„A‹ƒï1‹‰ƒë1ǃç1÷‹EЉE¬‹ỦU°1öévúÿÿè /…À„ˆ‹ƒï1‹‰ƒë1ǃç1÷‹EЉE¬‹ỦU°‹EȉE´1öé8úÿÿE؉D$‹ỦT$‹Eà‰$èu/…ÀˆÁmØéJüÿÿ‹B‰$ÿPéýüÿÿ‹F‰4$ÿPéÝüÿÿ‹B‰$ÿPéèþÿÿ‹B‰$ÿPéÂþÿÿ‹F‰4$ÿPé¢þÿÿ‹B‰$ÿPétýÿÿ‹B‰$ÿPéNýÿÿ‹F‰4$ÿPé.ýÿÿƒWωD$‹ƒ=9‹‰$èï-éöýÿÿƒWωD$‹ƒ=9‹‰$èÐ-éþÿÿƒWωD$‹ƒ=9‹‰$è±-é þÿÿ‹ƒè‰…À„TƒWωD$‹ƒ=9‹‰$èƒ-‹ƒï1‹‰ƒë1ǃç1÷‹EЉE¬‹ỦU°‹EȉE´‹UĉU¸1öéáøÿÿƒWωD$‹ƒ=9‹‰$è2-éYþÿÿ‹ƒï1‹‰ƒë1ǃç1÷饸ÿÿ‹ƒï1‹‰ƒë1ǃç1éˆøÿÿ‹UÔ‹ƒè‰…Àu ‹B‰$ÿP‹E¼‰$è.ƒøÿ„sƒèžÀ¶À‰EØ…À„P‹ƒQ9ƒ‹}¼‰Æé õÿÿ‹ƒï1‹‰ƒë1ǃç1ø‹UЉU¬‹ẺE°‹UȉU´‹EĉE¸1ö1ÿéý÷ÿÿ‹ƒï1‹‰ƒë1ǃç11ÿéÞ÷ÿÿ‹B‰$ÿPéžþÿÿ‹ƒï1‹‰ƒë1ǃç1ø‹EЉE¬‹ỦU°‹EȉE´‹UĉU¸1ö1ÿé—÷ÿÿ‹ƒï1‹‰ƒë1ǃç1úé\ÿÿÿ‹ƒï1‹‰ƒë1ǃç1ý‹ẺE°‹UĉU¸1ö1ÿéM÷ÿÿ‹ƒï1‹‰ƒë1ǃç1þ‹ẺE°‹UĉU¸é$÷ÿÿ‹ƒï1‹‰ƒë1ǃç1þ‹ỦU°‹EĉE¸1ÿéùöÿÿ‹U¼ƒ‰Ö‰×éTôÿÿ‹ƒï1‹‰ƒë1ǃç1‹}¼é©øÿÿ‹ƒï1‹‰ƒë1ǃç1û‹UЉU¬‹ẺE°‹UȉU´‹EĉE¸é•öÿÿ‹ƒï1‹‰ƒë1ǃç1û‹EЉE¬‹ỦU°‹EȉE´‹UĉU¸1ÿé^öÿÿU‰åWVSìœè‡ÊÇEÄÇEàÇEÜÇEÔÇEÐEĉD$ƒg‰D$ ƒ{´‰D$‹E‰D$‹E ‰$è +…Àu1ö‰ðÄœ[^_]ËEƒ‹Eă‹“e,‰Uƒ ‹ƒ'(‰D$‹U‹B ‰$èG+‰Eà…À„Ç$èh*‰Â‰EÜ…À„é‹Eà‰B ‹ƒû&ƒ‹“û&‹E܉PÇEà‹E܉D$‹ƒi,‰$è°*‰Eà…À„§‹EÜ‹ƒê‰…Ò„NÇEÜ‹U‹ƒè‰…À„'‹Eà‰E”ÇEà‰$è±)‰E´…À„Ћƒe,‰Eœ‰E˜‰E¤‰E ‰E¬‰E¨‰E°‹“,‰UŒE؉Eˆ‹U°‰U„éó‹Eœ‰$èü)‰EØèY)…À…²‹EØ‹U‰B,‹E„‰E°Ç$èc)‰Æ…À„ª‹Eƒ‰F ‹U¬ƒ‰V‹E°ƒ‰F‹ƒ·&ƒ‹ƒ·&‰F‹U¤ƒ‰V‰t$‹ƒ{$‰$è)‰EÔ…À„W‹ƒè‰…À„` ‹U‹ƒè‰…À„@ ‹EÔ‰EÇEÔÇ$èÌ(‰Eà…À„˜‹U¨ƒ‹Eà‰P ‹Eà‰D$‰<$è2)‰EÐ…À„r‹Eà‹ƒê‰…Ò„ ÇEà‹EЉ$èå(‰ÆèC(…À…?‹EЋƒê‰…Ò„Þ ÇEЋE‰p‹ƒ“%‰D$‹U‰$è(‰EÜ…À„Ç$è(‰Æ…À„G‹Eƒ‰F ‹U°ƒ‰V‰t$‹E܉$è~(‰EÔ…À„‹EÜ‹ƒê‰…Ò„ ÇEÜ‹ƒè‰…À„i ‹EÔ‹ƒê‰…Ò„F ÇEÔ‹E´‰$è1(‰EÐ…À„Œ‹U˜‹ƒè‰…À„‹EЉE˜ÇEЋƒ‡'‰D$‹U˜‰$èC'‰EÜ…À„2ÇD$‰$èÍ'‰Eà…À„‹EÜ‹ƒê‰…Ò„ÆÇEÜ‹ƒo'‰D$‹Eà‰$èï&‰EÔ…À„Þ‹Eà‹ƒê‰…Ò„žÇEàÇ$èØ&‰EÐ…À„®‹ƒ+(ƒ‹“+(‹EЉP ‹EЉD$‹EÔ‰$è2'‰EÜ…À„|‹EÔ‹ƒê‰…Ò„MÇEÔ‹EЋƒê‰…Ò„YÇEЋE܉$è6&‰Eà…À„4‹EÜ‹ƒê‰…Ò„;ÇEÜ‹Eà‰$èÅ&‰Æ…À„G‰uÔ…ö„û ‹Uœ‹ƒè‰…À„V‹EÔ‰EœÇEÔ‹Eà‰$è†&‰Æ…À„_‰uÐ…ö„¼ ‹U ‹ƒè‰…À„n‹EЉE ÇEЋEà‰$èG&‰Æ…À„w‰uÜ…ö„} ‹U¤‹ƒè‰…À„†‹E܉E¤ÇEÜ‹Eà‰$è&‰Æ…À„‰uÔ…ö„> ‹U¨‹ƒè‰…À„ž‹EÔ‰E¨ÇEÔ‹Eà‰$èÉ%‰Â…À…á è÷$…À…ý ‹Eà‹ƒê‰…Ò„kÇEàÇ$è÷$‰EÐ…À„‹Uœƒ‹EЉP ‹}Œ‹EЉD$‰<$èZ%‰EÜ…À„Ø ‹EЋƒê‰…Ò„#ÇEЋUœ‹ƒè‰…À„/‹E܉EœÇEÜÇ$è$‰EÔ…À„j ‹U¤ƒ‹EÔ‰P ‹EÔ‰D$‰<$èå$‰Eà…À„D ‹EÔ‹ƒê‰…Ò„áÇEÔ‹U¤‹ƒè‰…À„í‹Eà‰E¤ÇEà‹U‹B‰$èß$ƒøÿ„˜ ‰$èy$‰EÐ…À„… ‹Uˆ‰T$‰D$‹Eœ‰$èg$…Àˆg 1Àƒ}Ø•À‰EØ‹EЋƒê‰…Ò„ˆÇEЋMØ…É…Æ Ç$è’#‰Eà…À„? ‹Uœƒ‹Eà‰P ‹Eà‰D$‹ƒy,‰$èò#‰EÐ…À„ ‹Eà‹ƒê‰…Ò„2ÇEà‹EЉD$‹U‹B ‰$èõ#‰EÜ…À„Ú ‹EЋƒê‰…Ò„ ÇEЋU¬‹ƒè‰…À„‹E܉E¬ÇEÜ‹U„ƒ‹U°‹ƒè‰…À„‹Eˆ‰D$‹ƒK%‰D$‹U ‰$èG#…Àˆy 1Àƒ}Ø”À‰EØ…À…ùÿÿ‹U¤‰$èŠ"‰E؃øŒ’ „F‹U„‰U°éùÿÿ‹ƒ%‹‰ƒÿ$ǃû$‹UÜ…Òt‹ƒè‰…À„ÇÇEÜ‹Uà…Òt‹ƒè‰…À„™ÇEà‹ƒ±,‹‰$è"‰EØ…À…í1ö‹“e,‰U˜‰U”‰U ‰Uœ‰U¨‰U¤‰U°‰U¬‹Uà…Òt‹ƒè‰…À„e‹UÜ…Òt‹ƒè‰…À„‹UÔ…Òt‹ƒè‰…À„i‹UÐ…Òt‹ƒè‰…À„B…öt‹ƒè‰…À„!ƒ»Ãè*Úýÿ1ö‹U‹ƒè‰…À„ã‹U”‹ƒè‰…À„ËU˜‹ƒè‰…À„£‹Uœ‹ƒè‰…À„ƒ‹U ‹ƒè‰…À„c‹U¤‹ƒè‰…À„C‹U¨‹ƒè‰…À„#‹U¬‹ƒè‰…À„‹U°‹ƒè‰…À„ã‹U‹ƒè‰…À„ËEÄ‹ƒê‰…Ò…ëõÿÿ‹EÄ‹P‰$ÿR‰ðÄœ[^_]ËEà‹P‰$ÿRéVþÿÿ‹EÜ‹P‰$ÿRé(þÿÿ‹B‰$ÿPéàøÿÿ‹EÜ‹P‰$ÿRé)ùÿÿ‹Eà‹P‰$ÿRéQùÿÿ‹EÔ‹P‰$ÿRÇEÔ‹EЋƒê‰…Ò…§ùÿÿ‹EЋP‰$ÿRé–ùÿÿ‹EÜ‹P‰$ÿRÇEÜ‹Eà‰$è~ ‰Æ…À…¹ùÿÿ謅À…¬ùÿÿƒk‰D$‹ƒQ,‹‰$è]éùÿÿ‹B‰$ÿP‹EÔ‰EœÇEÔ‹Eà‰$è' ‰Æ…À…¡ùÿÿèU…À…”ùÿÿƒk‰D$‹ƒQ,‹‰$èéuùÿÿ‹B‰$ÿP‹EЉE ÇEЋEà‰$èЉƅÀ…‰ùÿÿèþ…À…|ùÿÿƒk‰D$‹ƒQ,‹‰$è¯é]ùÿÿ‹B‰$ÿP‹E܉E¤ÇEÜ‹Eà‰$èy‰Æ…À…qùÿÿè§…À…dùÿÿƒk‰D$‹ƒQ,‹‰$èXéEùÿÿ‹B‰$ÿPéTùÿÿ‹Eà‹P‰$ÿRé„ùÿÿ‹EЋP‰$ÿRÇEЋUœ‹ƒè‰…À…Ñùÿÿ‹B‰$ÿPéÃùÿÿ‹EÔ‹P‰$ÿRÇEÔ‹U¤‹ƒè‰…À…úÿÿ‹B‰$ÿPéúÿÿ‹EЋP‰$ÿRégúÿÿ‹Eà‹P‰$ÿRé½úÿÿ‹EЋP‰$ÿRÇEЋU¬‹ƒè‰…À…êúÿÿ‹B‰$ÿP‹E܉E¬ÇEÜ‹U„ƒ‹U°‹ƒè‰…À…áúÿÿ‹B‰$ÿPéÓúÿÿ‹B‰$ÿPé²ôÿÿ‹F‰4$ÿPé’ôÿÿ‹Eà‹P‰$ÿRéïôÿÿ‹EЋP‰$ÿRéõÿÿ‹EÔ‹P‰$ÿRé©õÿÿ‹F‰4$ÿPé‰õÿÿ‹EÜ‹P‰$ÿRébõÿÿ‹E ‰D$‹Eĉ$è‰EÔ…À„©‹U„‹ƒè‰…À„¥‹EÔ‰E°ÇEÔé‡óÿÿ‹B‰$ÿPé/üÿÿ‹B‰$ÿPéüÿÿ‹B‰$ÿPéïûÿÿ‹B‰$ÿPéÏûÿÿ‹B‰$ÿPé¯ûÿÿ‹B‰$ÿPéûÿÿ‹B‰$ÿPéoûÿÿ‹B‰$ÿPéOûÿÿ‹B‰$ÿPé/ûÿÿ‹B‰$ÿPéûÿÿ‹Eà‹P‰$ÿRéŠúÿÿ‹F‰4$ÿPéÑúÿÿ‹EЋP‰$ÿRé­úÿÿ‹EÔ‹P‰$ÿRé†úÿÿ‹EÜ‹P‰$ÿRé_úÿÿƒ›ÃèÈÔýÿMÔUàEÜè$Òýÿ…Àˆ÷‹ƒS%‰D$‹U‹B ‰$觉EÐ…À„ÐÇ$èȉƅÀ„:‹EЉF ‹ƒû&ƒ‹ƒû&‰FÇEЉt$‹ƒi,‰$è‰EÐ…À„a‹ƒè‰…À„D‹“e,‹ƒè‰…À„!‹UЉU”ÇEЋEÜ‹ƒê‰…Ò„àÇEÜ‹Eà‹ƒê‰…Ò„¶ÇEà‹EÔ‹ƒê‰…Ò„¿ÇEÔ‹E”éñÿÿ‹ƒ%‹‰ƒÿ$ǃû$1ö‹“e,‰Uœ‰U˜‰U¤‰U ‰U¬‰U¨‰U°‹Uà…Òt‹ƒè‰…À„ZÇEà‹UÐ…Òt‹ƒè‰…À„ÿÇEЋUÜ…Òt‹ƒè‰…À„ÑÇEÜ…öt‹ƒè‰…À„ø‹UÔ…Òt‹ƒè‰…À„ÑÇEÔ‹U´…Òt‹U´‹ƒè‰…À„£Eä‰D$EȉD$Ẻ$è)‹»û$¾‹ƒÏ%‰D$‹E”‰$è׉Eà…ÀtbÇD$‰$èe‰EÐ…ÀtK‹Eà‹ƒê‰…Ò„ßÇEà‹EЋƒê‰…Ò„×ÇEЃþ„Ø‹ƒe,ƒ‰Æéøÿÿ‹ƒ%‹‰ƒÿ$ǃû$0ƒþt1öé~÷ÿÿ‹B‰$ÿPéMüÿÿ‹UÌ…Òt‹ƒè‰…À„­‹UÈ…Òt‹ƒè‰…À„¨‹Uä…Òt¸‹ƒè‰…Àu­‹Eä‹P‰$ÿR1öé÷ÿÿ‹ƒ%‹‰ƒÿ$ǃû$1ö‹ƒe,‰E˜‰E”‰E ‰Eœ‰E¨‰E¤‰E°‰E¬éâöÿÿ‹B‰$ÿPéËîÿÿ‹EÜ‹P‰$ÿRé¡îÿÿ‹EÜ‹P‰$ÿRéþÿÿ‹EЋP‰$ÿRéðýÿÿ‹B‰$ÿPéOþÿÿ‹EÔ‹P‰$ÿRéþÿÿ‹F‰4$ÿPéúýÿÿ‹Eà‹P‰$ÿRé•ýÿÿ‹ƒè‰…À„’ƒk‰D$‹ƒQ,‹‰$èÅ‹ƒ%‹‰ƒÿ$ǃû$1öé7ýÿÿ‹ƒ%‹‰ƒÿ$ǃû$1öéÞõÿÿ‹Eà‹P‰$ÿRéþÿÿ‹EЋP‰$ÿRéþÿÿ‹Eä‰D$‹EȉD$‹Ẻ$艻û$ÇEÌÇEÈÇEä1öéŸõÿÿ‹ƒ%‹‰ƒÿ$ǃû$édõÿÿ‹ƒ%‹‰ƒÿ$ǃû$ 1öéüÿÿ‹ƒ%‹‰ƒÿ$ǃû$"1öé`üÿÿ‹ƒ%‹‰ƒÿ$ǃû$-1öéAüÿÿ‹ƒ%‹‰ƒÿ$ǃû$1öé"üÿÿ‹ƒ%‹‰ƒÿ$ǃû$1öéüÿÿ‹ƒ%‹‰ƒÿ$ǃû$.éæûÿÿ‹ƒ%‹‰ƒÿ$ǃû$,éÉûÿÿ‹EÌ‹P‰$ÿRéBýÿÿ‹EÈ‹P‰$ÿRéGýÿÿ‹Eà‹P‰$ÿRé9ûÿÿ‹EÜ‹P‰$ÿRéûÿÿ‹EÔ‹P‰$ÿRé0ûÿÿ‹B‰$ÿPéÑúÿÿ‹F‰4$ÿPé®úÿÿ‹ƒ%‹‰ƒÿ$ǃû$éýÿÿèÒ…À„^‹ƒ%‹‰ƒÿ$ǃû$1öéûÿÿÇ$è̉EÜ…Àtq‹ƒ/(ƒ‹“/(‹E܉P ‹E܉D$‹ƒ±,‹‰$è%‰EÔ…Àt>‹EÜ‹ƒê‰…Ò„óÇEÜ‹EÔ1É1Òè‰Æýÿ‹EÔ‹ƒê‰…Ò„½ÇEÔ‹ƒ%‹‰ƒÿ$ǃû$!1öélúÿÿ‹ƒ%‹‰ƒÿ$ǃû$$1ö‹E„‰E°éGúÿÿ‹ƒ%‹‰ƒÿ$ǃû$.1öé(úÿÿ‹ƒ%‹‰ƒÿ$ǃû$&1ö‹E„‰E°éúÿÿ‹ƒ%‹‰ƒÿ$ǃû$%1ö‹U„‰U°éÞùÿÿ‹B‰$ÿPé`üÿÿ‹U´‹ƒè‰…Àt1öéúÿÿ‹U´‹B‰$ÿP1öélúÿÿ‹ƒ%‹‰ƒÿ$ǃû$(‹Uà…Òt‹ƒè‰…Àu ‹Eà‹P‰$ÿRÇEà‹UÐ…Òt‹ƒè‰…Àu ‹EЋP‰$ÿRÇEЋUÜ…Òt‹ƒè‰…Àu ‹EÜ‹P‰$ÿRÇEÜ‹UÔ…Òt‹ƒè‰…Àu ‹EÔ‹P‰$ÿRÇEÔ‹“a,‹‰$諉EØ…Àu21ö‹“e,‰U°éÕøÿÿ‹EÔ‹P‰$ÿRé2þÿÿ‹EÜ‹P‰$ÿRéüýÿÿƒ›Ãè,ÌýÿMÜUÐEàèˆÉýÿ…ÀˆË‹E ‰D$‹ƒ3(‰$èú‰EÔ…À„ƒÇ$è/‰Æ…À„ã‹EÔ‰F ÇEÔ‰t$‹“a,‹‰$è‰EÔ…À„‘‹ƒè‰…Àu ‹F‰4$ÿP‹EÔ1É1ÒèõÃýÿ‹EÔ‹ƒê‰…Òu ‹EÔ‹P‰$ÿRÇEÔ‹ƒ%‹‰ƒÿ$ǃû$*1ö‹ƒe,‰E°éÇ÷ÿÿ‹ƒ%‹‰ƒÿ$ǃû$)1ö‹“e,‰U°éŸ÷ÿÿ‹ƒ%‹‰ƒÿ$ǃû$*‹ƒe,‰E°éy÷ÿÿ‹ƒ%‹‰ƒÿ$ǃû$*‹“e,‰U°éS÷ÿÿU‰åWVSƒì\胱‹}ÇEØÇEàÇEäƒç ‰D$ ƒ/މD$‹E‰D$‹E ‰$è…Àu 1ö‰ðƒÄ\[^_]˳aƒ1Ò‹ƒã è)Éýÿ‰EØ…À„㋃艅À„Æ‹U؉U°ÇEØ‹ƒ3‰D$‹G ‰$è3‰EØ…À„aÇ$èT‰Â‰Eà…À„H‹E؉B ‹ƒÿ ƒ‹“ÿ ‹Eà‰PÇEØ‹Eà‰D$‹ƒe‰$蜉EØ…À„‹Eà‹ƒê‰…Ò„xÇEà‹ƒè‰…À„T‹E؉E´ÇEØ‹ƒS ‰D$‹U°‰$袉Eà…À„ûÇ$褉EØ…À„b‹E´ƒ‹EØ‹U´‰P ‹E؉D$‹Eà‰$è‰Eä…À„F‹Eà‹ƒê‰…Ò„_ ÇEà‹EØ‹ƒê‰…Ò„5 ÇEØ‹³a‹ƒè‰…À„ ‹Uä‰U¸ÇE䋃? ‰D$‰$èî‰Eà…À„eÇD$‰$èx‰EØ…À„ ‹Eà‹ƒê‰…Ò„äÇEà‹E؉$蕉Eä…À„‹EØ‹ƒê‰…Ò„ÆÇE؉uÀ‰u¼‹Eä‰$è‰Eà…À„T‰$èM‰EØ…À„N‹Eà‹ƒê‰…Ò„±ÇEà‹E؉$è܉ƅÀ„+‰uà…ö„‹U¼‹ƒè‰…À„‰‹Eà‰E¼ÇEà‹E؉$è‰Æ…À„‰uà…ö„Ö‹UÀ‹ƒè‰…À„X‹Eà‰EÀÇEà‹E؉$è^‰Â…À…W茅À…•‹EØ‹ƒê‰…Ò„%ÇEØu܉t$‹ƒ3 ‰D$‹U¼‰$è …Àˆð1Àƒ}Ü”À‰EÜ…À„^‹EÀ‰$èÉEÜè …À…‹E܉G8‹Eä‰$èʉEà…À…¬þÿÿè÷ …À„A‹ƒÿ ‹‰ƒû ǃ÷ ;éù‹ƒÿ ‹‰ƒû ǃ÷ 6‹Uà…Òt‹ƒè‰…À„³ÇEà‹UØ…Òt‹ƒè‰…À„…ÇEØ‹ƒ­‹‰$è“ ‰EÜ…À…Ý‹ƒa‰E¸‰E´‰EÀ‰E¼‹UØ…Òt‹ƒè‰…À„î‹Uà…Òt‹ƒè‰…À„é‹Uä…Òt‹ƒè‰…À„±ƒ÷ªèîÅýÿ1ö‹U°‹ƒè‰…À„J‹U´‹ƒè‰…À„*‹U¸‹ƒè‰…À„ ‹U¼‹ƒè‰…À„ê‹UÀ‹ƒè‰…À„Ê‹ƒè‰…À…þúÿÿ‹G‰<$ÿP‰ðƒÄ\[^_]Ã۪èeÅýÿMäUØEàèÁÂýÿ…Àˆ\‹³aƒ‹EØ‹ƒê‰…Ò„AÇEØ‹Eà‹ƒê‰…Ò„ÇEà‹E䋃ꉅ҄íÇEä‰u¸‰u´‰uÀ‰u¼éþþÿÿ‹EØ‹P‰$ÿRéjþÿÿ‹Eà‹P‰$ÿRé<þÿÿ‹B‰$ÿPé(ÿÿÿ‹B‰$ÿPéÿÿÿ‹B‰$ÿPéèþÿÿ‹B‰$ÿPéÈþÿÿ‹B‰$ÿPé¨þÿÿ‹F‰4$ÿPé,úÿÿ‹ƒÿ ‹‰ƒû ǃ÷ 4‰u´‰u°‰u¼‰u¸‰uÀé þÿÿ‹Eä‹P‰$ÿRé>þÿÿ‹EØ‹P‰$ÿRéþÿÿ‹Eà‹P‰$ÿRéþÿÿ‹Eä‹P‰$ÿRéÿÿÿ‹Eà‹P‰$ÿRéØþÿÿ‹EØ‹P‰$ÿRé®þÿÿ‹ƒÿ ‹‰ƒû ǃ÷ :‰u¼‰u¸‰uÀ‹Uà…Òt‹ƒè‰…À„†ÇEà‹UØ…Òt‹ƒè‰…À„zÇEØ‹Uä…Òt‹ƒè‰…À„nÇEäẺD$EЉD$EÔ‰$è¯ ‹“÷ ‰Uľ‹ƒË ‰D$‹E´‰$èZ ‰Eà…À„ÿÇD$‰$èä ‰EØ…À„ä‹Eà‹ƒê‰…Ò„“ÇEà‹EØ‹ƒê‰…Ò„iÇE؃þ„ž‹ƒaƒ‰ÆéÑüÿÿ‰t$‹ƒÓ ‰D$‹U¼‰$èz …ÀˆÁ1Àƒ}Ü”À‰EÜ…À„Ü‹EÀ‰$è0 ‰EÜè …À…º‹E܉G<éúÿÿ‹Eà‹P‰$ÿRé>úÿÿ‹B‰$ÿPéiúÿÿ‹B‰$ÿPéšúÿÿ‹EØ‹P‰$ÿRéÊúÿÿ‹ƒÿ ‹‰ƒû ǃ÷ Cƒþ…Èûÿÿ‹UÔ…Òt‹ƒè‰…À„Œ‹UÐ…Òt‹ƒè‰…À„‡‹UÌ…Ò„‘ûÿÿ‹ƒè‰…À…‚ûÿÿ‹EÌ‹P‰$ÿRéqûÿÿ‹UÀ‰T$‹E¼‰D$‰<$èS ƒÀ…?ùÿÿ‹ƒÿ ‹‰ƒû ǃ÷ Aé¯ýÿÿ‹ƒÿ ‹‰ƒû ǃ÷ :‹ƒa‰E¼‰E¸‰EÀéƒýÿÿ‹F‰4$ÿPéž÷ÿÿ‹Eà‹P‰$ÿRéw÷ÿÿ‹Eà‹P‰$ÿRéiýÿÿ‹EØ‹P‰$ÿRéuýÿÿ‹Eä‹P‰$ÿRéýÿÿ‹ƒÿ ‹‰ƒû ǃ÷ :‰u¼‰u¸‰uÀé ýÿÿèß…À…Èøÿÿƒg©‰D$‹ƒM‹‰$è驸ÿÿè³…À…Ûøÿÿƒg©‰D$‹ƒM‹‰$èdé¼øÿÿ‹EØ‹P‰$ÿRé†ýÿÿ‹Eà‹P‰$ÿRé\ýÿÿ‹ƒÿ ‹‰ƒû ǃ÷ ;‰uÀ‰u¼énüÿÿ‹ẺD$‹EЉD$‹EÔ‰$è΋Uĉ“÷ ÇEÔÇEÐÇEÌé¸ùÿÿ‹ƒÿ ‹‰ƒû ǃ÷ 7é‰ùÿÿ‹F‰4$ÿPéçöÿÿ‹EØ‹P‰$ÿRéºöÿÿ‹Eà‹P‰$ÿRéöÿÿ‹Eà‹P‰$ÿRé ÷ÿÿ‹EØ‹P‰$ÿRé)÷ÿÿ‹ƒÿ ‹‰ƒû ǃ÷ ;‰uÀ‰u¼é ûÿÿ‹EÔ‹P‰$ÿRécýÿÿ‹EЋP‰$ÿRéhýÿÿ‹ƒÿ ‹‰ƒû ǃ÷ <éaûÿÿ‹ƒè‰…ÀtYƒg©‰D$‹ƒM‹‰$èèé!øÿÿ‹ƒÿ ‹‰ƒû ǃ÷ =éûÿÿ‹ƒÿ ‹‰ƒû ǃ÷ >éýúÿÿ‹B‰$ÿP뜋ƒÿ ‹‰ƒû ǃ÷ ?éÕúÿÿ‹E䋃ꉅÒtÇEä1öé7ûÿÿ‹Eä‹P‰$ÿRëäU‰åWVSìœè¥‹}‹u…ö„ ÇEäÇEàÇE܃‹E ƒƒ‹G4…À„‹ƒ‰D$‹U ‰$è8‰Eä…Àt‰$è°‰E€è …À„V‹ƒ‘ÿ‹‰ƒÿǃ‰ÿwÇEœ‹Uä…Òt‹ƒè‰…À„x‹Uà…Òt‹ƒè‰…À„„‹UÜ…Òt‹ƒè‰…À„]‹Eœ…Àt‹Uœ‹ƒè‰…À„%ƒÍžèh½ýÿÇE”ÿÿÿÿ‹ƒè‰…À„ö‹U ‹ƒè‰…À„Ö‹ƒè‰…Àu ‹F‰4$ÿP‹E”Äœ[^_]ËG<‹@@…À…Ç$èI‰Eœ…À„c‹ƒƒ‹ƒ‹Uœ‰B ‰T$‹ƒß‹‰$衉EÜ…À„/‹Uœ‹ƒè‰…À„K‹EÜ1É1Òèµýÿ‹EÜ‹ƒê‰…Ò„ÇEÜ‹ƒ‘ÿ‹‰ƒÿǃ‰ÿ…ÇEœéœþÿÿ‹B‰$ÿPéÿÿÿ‹G‰<$ÿPéüþÿÿ‹B‰$ÿPéÍþÿÿ‹Eä‹P‰$ÿRéwþÿÿ‹EÜ‹P‰$ÿRé’þÿÿ‹Eà‹P‰$ÿRékþÿÿ‹ƒ‰D$‹E ‰$è$‰Eà…À„3‹ƒ ‰D$‹U ‰$è‰Eä…À„Ç$è‰Â‰EÜ…À„ú‹Eà‰B ‹Uä‹E܉PÇEàÇEä‰t$‹E܉$蕉Eà…À„ËEÜ‹ƒê‰…Ò„±ÇEÜ‹ƒè‰…À„‹uàÇEà‹ƒ-‰D$‹G@‰$èb‰Eä…À„ÑÇ$èd‰EÜ…À„ºƒ‹E܉p ‹E܉D$‹Eä‰$èʉEà…À„”‹E䋃ꉅ҄íÇEä‹EÜ‹ƒê‰…Ò„ÃÇEÜ‹Eà‹ƒê‰…Ò„™ÇEàÇE”é6ýÿÿ‹E䋃ꉅ҄¬ÇE䋃 ‰D$‹E ‰$蕉Eä…À„qüÿÿ‰$è ‰E„èf…À…Yüÿÿ‹E䋃ꉅ҄VÇEä‹U€‰UÄ‹E„‰Eȉ4$è6‰Eä…Àt4‰$èå‰E …À„ä‰Â‰Uà…Òt‰$衉Eˆèþ…À„0‹ƒ‘ÿ‹‰ƒÿǃ‰ÿxÇEœéìûÿÿ‹ƒ‘ÿ‹‰ƒÿǃ‰ÿÇEœéÈûÿÿ‹ƒ‘ÿ‹‰ƒÿǃ‰ÿ…é«ûÿÿ‹EÜ‹P‰$ÿRéÓüÿÿ‹B‰$ÿPé§üÿÿ‹ƒ‘ÿ‹‰ƒÿǃ‰ÿ‹Uä…Òt‹ƒè‰…À„§ÇEä‹UÜ…Òt‹ƒè‰…À„›ÇEÜ‹Uà…Òt‹ƒè‰…À„ÇEà‹ƒ­ÿ‰E¬‰D$‹ƒ…ÿ‰$èüÿ‰E°…À„ø‰Eä…À„‰$èíÿ‰E˜‹E䋃ꉅ҄KÇEä‹E˜…À„üÿÿƒ­ž耸ýÿMäUàEÜèܵýÿ…ÀˆÁÇ$èÆÿ‰E´…À„ƒ‹U´‹B ‰0‹G@‹ƒê‰…Ò„æ‹E´‰G@‹EÜ‹ƒê‰…Ò„½ÇEÜ‹Eà‹ƒê‰…Ò„“ÇEà‹E䋃ꉅ҄iÇEäÇE”éxúÿÿ‹Eä‹P‰$ÿRéCýÿÿ‹F‰4$ÿPéeüÿÿ‹EÜ‹P‰$ÿRé>üÿÿ‹ƒ‘ÿ‹‰ƒÿǃ‰ÿ‚ÇEœé·ùÿÿ‹Eä‹P‰$ÿRéHþÿÿ‹EÜ‹P‰$ÿRéTþÿÿ‹Eà‹P‰$ÿRé`þÿÿ‹Eä‹P‰$ÿRé¤þÿÿ‹G‹@ ‰D$ƒ}’‰D$‹ƒ ‹‰$è+þÇE”ÿÿÿÿéåùÿÿ‹Eà‹P‰$ÿRéVüÿÿ‹EÜ‹P‰$ÿRé,üÿÿ‹Eä‹P‰$ÿRéüÿÿ‹Eä‹P‰$ÿRé™üÿÿ‹U¬‰T$‹ƒ‹‰$è#þ‹E°ééýÿÿ‹Eà‹ƒê‰…Ò„’ÇEà‹Uˆ‰UÌ‹Eä‰$è_þ‰E¤…À„€‹E¤‰Eà…À„üÿÿ‹U¤‰$èþ‰EŒèpý…À…rüÿÿ‹Eà‹ƒê‰…Ò„(ÇEà‹EŒ‰EЋEä‰$èþ‰E¨…À„Ù‹U¨‰Uà…Ò„/üÿÿ‹E¨‰$èµý‰Eèý…À…üÿÿ‹Eà‹ƒê‰…Òu ‹Eà‹P‰$ÿRÇEà‹U‰UÔ‹Eä‰$è›ý‰Â…À„ ‹ƒè‰…Àu ‹B‰$ÿPƒùœ‰D$‹ƒß‹‰$èsüé¥ûÿÿ‹Eä‹P‰$ÿRé†ýÿÿ‹Eà‹P‰$ÿRé\ýÿÿ‹EÜ‹P‰$ÿRé2ýÿÿ‹G@‹P‰$ÿRé ýÿÿ‹ƒ‘ÿ‹‰ƒÿǃ‰ÿƒÇEœéM÷ÿÿè.ü…ÀtE‹U é ûÿÿ‹Eà‹P‰$ÿRé]þÿÿè ü…À…sþÿÿƒùœ‰D$‹ƒß‹‰$è½ûéTþÿÿƒùœ‰D$‹ƒß‹‰$èžû‹U é®úÿÿè¾û…À…Àúÿÿ‹E䋃ꉅÒu ‹Eä‹P‰$ÿRÇEäÇEØÿÿÿÿ‹W‹G4‰D$‹G‰D$ ÇD$EĉD$‰<$ÿGÇE”éáöÿÿèUû…À…þÿÿƒùœ‰D$‹ƒß‹‰$èûéûýÿÿ‹Eà‹P‰$ÿRéÇýÿÿU‰åWVSƒìL豚‹u‹Eƒƒ‹»üƒ‰uÄ9þ„…‹U ’‹E‹M‹A0+F;B~k‹F ‰B‹M‹A4‰B‹F‰B ƒA4‹FB‰F‹Eă‰uÈ‹ƒè‰…À„°‹U‹ƒè‰…À„¹‹ƒè‰…Àu ‹F‰4$ÿP‹EȃÄL[^_]˃½ö‰D$‹E‰$èiú‰EÌ…À„Ç$èkú‰EÐ…À„qƒ‰x èÿú‰EÔ…À„ŠÇ$èÀú‰EØ…À„Þ‰D$‹ƒiö‰D$‹UÔ‰$è[ú…Àˆ½‹MØ‹ƒè‰…À„Ž‹EÔ‰D$‹UЉT$‹M̉ $èKú‰EØ…À„‡‹UÌ‹ƒè‰…À„Ÿ‹MЋƒè‰…À„‹UÔ‹ƒè‰…À„_‹‹¥ô‰MÜ…É„b9}Ø„r‹UØ‹B9EÜ„c‹M܉L$‰$è†ú…À…L‹UÜ‹B ‰D$ ‹MØ‹A‹@ ‰D$ƒµŒ‰D$‹ƒËü‹‰$èþø‹ƒ-õ‹‰ƒ)õǃ%õ4é“‹G‰<$ÿP‹U‹ƒè‰…À…Gþÿÿ‹B‰$ÿPé9þÿÿ‹ƒ-õ‹‰ƒ)õǃ%õ4ÇEÔÇEØ‹UÌ‹ƒè‰…À„Œ‹UÐ…Òt‹MЋƒè‰…À„ЋEÔ…Àt‹UÔ‹ƒè‰…À„÷‹EØ…Àt‹MØ‹ƒè‰…À„Ѓ•”è±ýÿÇEÈé~ýÿÿ‹ƒ-õ‹‰ƒ)õǃ%õ4‹UÌ‹ƒè‰…À…tÿÿÿ‹UÌ‹B‰$ÿPécÿÿÿ‹ƒè‰…À„‹‹uØ‹F ‹V4‹M‰‹F ‹UÇ‚‹Mƒy<„Å‹U ’‹M‰uÄéÌüÿÿ‹A‰ $ÿPé"ÿÿÿ‹ƒ-õ‹‰ƒ)õǃ%õ4ÇEØéÓþÿÿ‹A‰ $ÿPé"ÿÿÿ‹B‰$ÿPéûþÿÿ‹F‰4$ÿPégÿÿÿ‹A‰ $ÿPédýÿÿ‹ƒ-õ‹‰ƒ)õǃ%õ4éÛþÿÿ‹B‰$ÿPé“ýÿÿ‹A‰ $ÿPésýÿÿ‹B‰$ÿPéSýÿÿ‹ƒ}÷‰D$‹A‰$èïö‰EÌ…À„\‰Á‹V ƒê‹@‹@4…À„Ó‹@ …À„ȉT$‰ $è÷‰EЋMÐ…É„ö‹UÌ‹ƒè‰…À„,‹‹¥ô‰Mä…É„“‹EÐ;ƒüt‹@9Eät‹Mä‰L$‰$è•÷…À„ ‹ƒè‰…À„ð‹}ЋW ‹G4‹M‰‘‹G ‹UÇ‚‹M ‰‹M‹E؉EÄé1ûÿÿƒeƒ‰D$‹ƒ¿ü‹‰$èâõéßüÿÿ‰$èŽö‰Eà…Àt2‰D$‹Ủ$èÒö‰EЋMà‹ƒè‰…À…ÿÿÿ‹A‰ $ÿPéÿÿÿÇEЋƒ-õ‹‰ƒ)õǃ%õ8ÇEÔÇEØéØüÿÿ‹ƒ-õ‹‰ƒ)õǃ%õ8éýÿÿ‹B‰$ÿPéÆþÿÿ‹G‰<$ÿPéÿÿÿ‹Uä‹B ‰D$ ‹MЋA‹@ ‰D$ƒµŒ‰D$‹ƒËü‹‰$èõ‹ƒ-õ‹‰ƒ)õǃ%õ8ÇEØÇEÔé\üÿÿƒeƒ‰D$‹ƒ¿ü‹‰$è»ôë¹U‰åWVSƒìLèW”‹U‹Eƒ‹x1À…ÒŸÀ‰E¼Áê‰UÀÇEÄ1À9}ÄœÀ‰Eä…Àtm‹UÄú‰ÐÁè4Ñþv Å‹E‹P,‹E 9D œÀ¶À‰Eä…Àu%‹E ;DœÀ¶À‰Eä…Àua‹U¼‰Uä…Òu^‹Eä…Àt;ƒÆ‰uÄ1À9}ÄœÀ‰Eä…Àu“¾ÿÿÿÿ‹U‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄL[^_]ËEÀ‰Eä…À…‹Eä…Àtʉ÷éBÿÿÿ‹ƒñ‰EЉD$‹ƒÇî‰$èÍó‰EÈ…À„҉‹@‹@4…À„è‹H …Ʉ݉t$‰$èúó‰EÌ‹UÌ…Ò„a‹UÈ‹ƒè‰…À„ö‹ƒcñ‰D$‹Ẻ$èfó‰EÈ…À„¯‹UÌ‹ƒè‰…À„ÒÇ$èØó‰EÌ…À„Eä‰D$‹ẺD$‹Uȉ$èÃó…ÀˆåÁmä‹UÈ‹ƒè‰…À„’‹UÌ‹ƒè‰…À…£þÿÿ‹B‰$ÿPé•þÿÿ‹»ñ‰|$‹ƒÇî‰$èÃò‰EÈ…À„L‰Â‹@‹@4…À„M‹@ …À„B‰t$‰$èðò‰EÌ‹EÌ…À„½‹UÈ‹ƒè‰…À„W‹ƒcñ‰D$‹Ẻ$è\ò‰EÈ…À„¿‹UÌ‹ƒè‰…À„3Ç$èÎò‰EÌ…À„bEä‰D$‹ẺD$‹Uȉ$è¹ò…ÀˆA‹Eä÷ÐÁè‰Eä‹UÈ‹ƒè‰…À„ì‹UÌ‹ƒè‰…À…âýÿÿ‹B‰$ÿPéÔýÿÿ‰4$è]ò‰EÔ…À„„‰D$‹Uȉ$èò‰EÌ‹UÔ‹ƒè‰…À…ûýÿÿ‹B‰$ÿPéíýÿÿ‹B‰$ÿPéüýÿÿ‹B‰$ÿPé þÿÿ‹B‰$ÿPé`þÿÿ‰4$èîñ‰Ç…À„|‰D$‹Eȉ$è/ò‰EÌ‹ƒè‰…À…šþÿÿ‹G‰<$ÿPéŒþÿÿ‹B‰$ÿPé›þÿÿ‹B‰$ÿPé¿þÿÿ‹B‰$ÿPéÿÿÿ‹EЉD$‹ƒQö‹‰$èñ‹ƒÓƒÏîǃËî©E؉D$E܉D$Eà‰$èÚðƒkމ$èNñ‰Æ‹E؉D$‹E܉D$‹Eà‰$è ñ…öt@‰4$èšñ1öéGüÿÿ‰|$‹ƒQö‹‰$è™ð‹ƒÓƒÏîǃËî«ézÿÿÿ‹³5öë¸ÇEÌ‹ƒÓƒÏîǃËî©‹UÈ‹ƒè‰…Àt+‹EÌ…À„:ÿÿÿ‹UÌ‹ƒè‰…À…(ÿÿÿ‹B‰$ÿPéÿÿÿ‹UÈ‹B‰$ÿPëÇÇEÌ‹ƒÓƒÏîǃËî«똋ƒÓƒÏîǃËî©ë—‹ƒÓƒÏîǃËî«ézÿÿÿU‰åWVSììèòŽÇEÔÇEÐÇEÌÇEÈÇEÄÇEÀÇE¼ÇE¸ÇE´ÇE°‹ƒBî‰EàEà‰D$EÔ‰D$ƒÚÛ‰D$ ƒ&v‰D$‹E‰D$‹E ‰$èEï…À„‹EÔƒ‹Eàƒ‹³ÐðƒÆ…°öÿÿ9uà„¥ 1Ò‹ƒ2êèB¦ýÿ‰EÐ…À„ä ‹³Ðð‹ƒè‰…À„Ø‹EЉ…TîÿÿÇEÐ1Ò‹ƒRëè¦ýÿ‰EÐ…À„ዃ艅À„- ‹EЉ…XîÿÿÇEÐ1Ò‹ƒöëèÎ¥ýÿ‰EÐ…À„! ‹ƒè‰…À„ ‹EЉ…\îÿÿÇEЋƒ*ë‰D$‹•Tîÿÿ‰$èñí‰EÐ…À„¿‹ƒ í‰D$‹EÔ‰$è²î‰EÌ…À„eÇ$èÓí‰Â‰EÈ…À„†‹ẺB ‹ƒb냋“bë‹EȉPÇEÌ‹EȉD$‹EЉ$èî‰EÌ…À„ ‹EЋƒê‰…Ò„? ÇEЋEÈ‹ƒê‰…Ò„E ÇEÈ‹“Ðð‹ƒè‰…À„ ‹Ẻ…`îÿÿÇẺ$èÿ퉅 îÿÿƒÀ„ ‹»ë‰|$‹ƒ^é‰$èèì‰Æ…À„¿ ‰uÐ…ö„æ ‹ƒ‚ë‰D$‰4$èÁì‰EÈ…À„ ‹EЋƒê‰…Ò„- ÇEÐÇ$èªì‰EÌ…À„™ ‹EÔƒ‹UÔ‹ẺP ‹ẺD$‹Eȉ$è í‰EÐ…À„´ ‹EÈ‹ƒê‰…Ò„B ÇEÈ‹EÌ‹ƒê‰…Ò„H ÇEÌ‹³Ðð‹ƒè‰…À„ ‹EЉ…dîÿÿÇEЋƒVë‰D$‹•dîÿÿ‰$èëë‰EÈ…À„­‹ƒè‰…À„6 ‹Eȉ…hîÿÿÇEȉ$è©ì‰Æƒøÿ…H ‹ƒn鋉ƒjéǃfé‹UÌ…Òt‹ƒè‰…À„ÇEÌ‹UÐ…Òt‹ƒè‰…À„uÇEЋUÈ…Òt‹ƒè‰…À„6ÇEÈ‹»Šé‰|$‹ƒbé‰$è'ë‰Æ…À„‰uÌ…ö„< ‰4$èë‰Æ‹EÌ‹ƒê‰…Ò„òÇEÌ…ö…°‹“Ðð‰•pîÿÿ‰•lîÿÿ‰•xîÿÿ‰•tîÿÿ‰•€îÿÿéf1ö‰ðÄì[^_]ËF‰4$ÿP‹EЉ…TîÿÿÇEÐ1Ò‹ƒRëè$¢ýÿ‰EÐ…À…üÿÿ‹ƒn鋉ƒjéǃfé ‰µ\îÿÿ‰ò‰µXîÿÿ‰µdîÿÿ‰•`îÿÿ‰•lîÿÿ‰•hîÿÿ‰•tîÿÿ‰•pîÿÿ‰•¤îÿÿ‰•xîÿÿ‰•„îÿÿ‰•€îÿÿ‰•Œîÿÿ‰•ˆîÿÿ‰•”îÿÿ‰•îÿÿ‰•œîÿÿ‰•˜îÿÿ‹UÐ…Òt‹ƒè‰…À„:‹UÌ…Òt‹ƒè‰…À„5‹UÈ…Òt‹ƒè‰…À„0‹UÄ…Òt‹ƒè‰…À„+‹UÀ…Òt‹ƒè‰…À„&‹U¼…Òt‹ƒè‰…À„!‹U¸…Òt‹ƒè‰…À„‹U´…Òt‹ƒè‰…À„‹U°…Òt‹ƒè‰…À„ƒ>‰èû¡ýÿ1ö‹•Tîÿÿ‹ƒè‰…À„Û‹•Xîÿÿ‹ƒè‰…À„¸‹•\îÿÿ‹ƒè‰…À„•‹•`îÿÿ‹ƒè‰…À„r‹•dîÿÿ‹ƒè‰…À„O‹•hîÿÿ‹ƒè‰…À„,‹•lîÿÿ‹ƒè‰…À„ ‹•pîÿÿ‹ƒè‰…À„æ‹•tîÿÿ‹ƒè‰…À„Ë•xîÿÿ‹ƒè‰…À„ ‹•¤îÿÿ‹ƒè‰…À„}‹•€îÿÿ‹ƒè‰…À„Z‹•„îÿÿ‹ƒè‰…À„7‹•ˆîÿÿ‹ƒè‰…À„‹•Œîÿÿ‹ƒè‰…À„ñ‹•îÿÿ‹ƒè‰…À„΋•”îÿÿ‹ƒè‰…À„«‹•˜îÿÿ‹ƒè‰…À„ˆ‹•œîÿÿ‹ƒè‰…Àtl‹EÔ‹ƒê‰…ÒtP‹Eà‹ƒê‰…Ò…¾üÿÿ‹Eà‹P‰$ÿR‰ðÄì[^_]˃n鋉ƒjéǃfé ‰µdîÿÿ‰òéêüÿÿ‹EÔ‹P‰$ÿR뢋B‰$ÿP뉋B‰$ÿPéjÿÿÿ‹B‰$ÿPéGÿÿÿ‹B‰$ÿPé$ÿÿÿ‹B‰$ÿPéÿÿÿ‹B‰$ÿPéÞþÿÿ‹B‰$ÿPé»þÿÿ‹B‰$ÿPé˜þÿÿ‹B‰$ÿPéuþÿÿ‹B‰$ÿPéRþÿÿ‹B‰$ÿPé/þÿÿ‹B‰$ÿPé þÿÿ‹B‰$ÿPééýÿÿ‹B‰$ÿPéÆýÿÿ‹B‰$ÿPé£ýÿÿ‹B‰$ÿPé€ýÿÿ‹B‰$ÿPé]ýÿÿ‹B‰$ÿPé:ýÿÿ‹B‰$ÿPéýÿÿ‹ƒn鋉ƒjéǃfé ‰µdîÿÿ‰ð‰µ`îÿÿ‰µlîÿÿ‰µhîÿÿ‰µtîÿÿ‰µpîÿÿ‰µ¤îÿÿ‰µxîÿÿ‰µ„îÿÿ‰µ€îÿÿ‰…Œîÿÿ‰…ˆîÿÿ‰…”îÿÿ‰…îÿÿ‰…œîÿÿ‰…˜îÿÿé°ûÿÿ‹EЋP‰$ÿRéµûÿÿ‹EÌ‹P‰$ÿRéºûÿÿ‹EÈ‹P‰$ÿRé¿ûÿÿ‹EÄ‹P‰$ÿRéÄûÿÿ‹EÀ‹P‰$ÿRéÉûÿÿ‹E¼‹P‰$ÿRéÎûÿÿ‹E¸‹P‰$ÿRéÓûÿÿ‹E´‹P‰$ÿRéØûÿÿ‹E°‹P‰$ÿRéÝûÿÿ‹ƒí‰D$‹EÔ‰$èÛå‰EÐ…À„A‹Eà‹ƒê‰…Ò„‹EЉEàÇEÐ1Ò‹ƒ2êè^œýÿ‰EÐ…À…öÿÿ‹ƒn鋉ƒjéǃfé ‹“Ðð‰•Xîÿÿ‰•Tîÿÿ‰•`îÿÿ‰•\îÿÿ‰•hîÿÿ‰•dîÿÿ‰•pîÿÿ‰•lîÿÿ‰•xîÿÿ‰•tîÿÿ‰•€îÿÿ‰•¤îÿÿ‰•ˆîÿÿ‰•„îÿÿ‰•îÿÿ‰•Œîÿÿ‰•˜îÿÿ‰•”îÿÿ‰•œîÿÿé+úÿÿ‹F‰4$ÿPéÅõÿÿ‹F‰4$ÿPéîõÿÿ‹ƒn鋉ƒjéǃfé ‰µ`îÿÿ‰òéZÿÿÿ‹ƒn鋉ƒjéǃfé‹“Ððé=ÿÿÿ‹Eà‹P‰$ÿRéÑþÿÿ‹ƒn鋉ƒjéǃfé ‰µXîÿÿ‰ð‰µTîÿÿ‰µ`îÿÿ‰µ\îÿÿ‰µhîÿÿ‰µdîÿÿ‰…pîÿÿ‰…lîÿÿ‰…xîÿÿ‰…tîÿÿ‰…€îÿÿ‰…¤îÿÿ‰…ˆîÿÿ‰…„îÿÿ‰…îÿÿ‰…Œîÿÿ‰…˜îÿÿ‰…”îÿÿ‰…œîÿÿé%ùÿÿ‹EЋP‰$ÿRé°õÿÿ‹B‰$ÿPé×õÿÿ‹EÈ‹P‰$ÿRéªõÿÿ‹ƒn鋉ƒjéǃf鋃Ðð‰…hîÿÿ‰…dîÿÿ‰…pîÿÿ‰…lîÿÿ‰…xîÿÿ‰…tîÿÿéNÿÿÿ‹ƒn鋉ƒjéǃfé‹“Ðð‰•hîÿÿ‰•dîÿÿé–÷ÿÿ‹EЋP‰$ÿRéÂõÿÿƒØÙ‰D$•°þÿÿ‰•8îÿÿ‰$èâ‰÷‹ƒ¢ì‰D$‹EÔ‰$èã‰E´…À„™Ç$è3â‰Â‰E¸…À„‹E´‰B ‹ƒn냋“në‹E¸‰PÇE´‹E¸‰D$‹ƒÔð‰$è{â‰E°…À„>‹E¸‹ƒê‰…Ò„ØÇE¸‹³Ðð‹ƒè‰…À„®‹U°‰•lîÿÿÇE°‹ƒÂê‰D$‹…Xîÿÿ‰$èuá‰EÄ…À„¦Ç$èwá‰EÀ…À„‹•lîÿÿƒ‹EÀ‰P ‹EÀ‰D$‹Eĉ$è×á‰E¼…À„c‹EÄ‹ƒê‰…Òu ‹EÄ‹P‰$ÿRÇEÄ‹EÀ‹ƒê‰…Òu ‹EÀ‹P‰$ÿRÇEÀ‹ƒè‰…Àu ‹F‰4$ÿP‹E¼‰…pîÿÿÇE¼‹ƒ:ê‰D$‹•lîÿÿ‰$è©à‰EÐ…À„«ÇD$‰$è3á‰EÈ…À„‹EЋƒê‰…Òu ‹EЋP‰$ÿRÇEЋEÈ‹ƒê‰…Òu ‹EÈ‹P‰$ÿRÇEÈ‹ƒjê‰D$‹•pîÿÿ‰$è)à‰EÄ…À„ÐÇ$ÿÿÿÿè­à‰EÀ…À„¡Ç$èà‰E¼…À„¢‹ƒ¢êƒ‹“¢ê‹E¼‰P ‹UÀ‹E¼‰PÇEÀ‹E¼‰D$‹Eĉ$è^à‰EÐ…À„H‹EÄ‹ƒê‰…Òu ‹EÄ‹P‰$ÿRÇEÄ‹E¼‹ƒê‰…Òu ‹E¼‹P‰$ÿRÇE¼‹EЉ$èè߉…@îÿÿèBß…À„1 ‹ƒn鋉ƒjéǃfé&‹ƒÐð‰…xîÿÿ‰…tîÿÿéÇûÿÿ‰|$‹ƒìð‹‰$èLßé(òÿÿ‹EÈ‹P‰$ÿRé­òÿÿ‹F‰4$ÿPéÔòÿÿ‹EÌ‹P‰$ÿRé§òÿÿ‹ƒn鋉ƒjéǃf鋃Ðð‰…pîÿÿ‰…lîÿÿ‰…xîÿÿ‰…tîÿÿéCûÿÿ‹F‰4$ÿPé¼òÿÿ‹ƒn鋉ƒjéǃfé!‹ƒÐð‰…pîÿÿ‰…lîÿÿ‹UÌ…Òt‹ƒè‰…À„ÇEÌ‹U´…Òt‹ƒè‰…À„ÇE´‹U¸…Òt‹ƒè‰…À„rÇE¸‹U°…Òt‹ƒè‰…À„fÇE°‹UÄ…Òt‹ƒè‰…À„ZÇEÄ‹UÀ…Òt‹ƒè‰…À„NÇEÀ‹U¼…Òt‹ƒè‰…À„BÇE¼‹UÐ…Òt‹ƒè‰…À„6ÇEЋUÈ…Òt‹ƒè‰…À„LÇEÈ‹ƒñ‹‰$è]Ý…Àum‹ƒÐð‰…xîÿÿ‰…tîÿÿéÛùÿÿ‹ƒn鋉ƒjéǃf鉵hîÿÿézñÿÿ‹EÈ‹P‰$ÿRé¹ñÿÿ‹EÌ‹P‰$ÿRénñÿÿ‹EЋP‰$ÿRézñÿÿƒ>‰覕ýÿM¸U´EÌè“ýÿ…Àˆìèz݉E°…À„Ö‹•pîÿÿ‹ƒè‰…À„‹E°‰…pîÿÿÇE°‹EÌ‹ƒê‰…Ò„ÎÇEÌ‹E´‹ƒê‰…Ò„åÇE´‹E¸‹ƒê‰…Ò„»ÇE¸éöûÿÿƒ>‰è•ýÿMÌUÈEÐè\’ýÿ…Àˆ@ýÿÿèÔ܉EÄ…À„£‹•hîÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹Eĉ…hîÿÿÇEÄ‹ƒòé‰D$‹•dîÿÿ‰$èÄÛ‰EÄ…À„‰$è«Ü‰Æ…À„ ‹EÄ‹ƒê‰…Òu ‹EÄ‹P‰$ÿRÇEĉt$…°þÿÿ‰…8îÿÿ‰$è¥Û‹EЋƒê‰…Òu ‹EЋP‰$ÿRÇEЋEÈ‹ƒê‰…Òu ‹EÈ‹P‰$ÿRÇEÈ‹EÌ‹ƒê‰…Òu ‹EÌ‹P‰$ÿRÇEÌ1ÿé¾øÿÿ‹EÌ‹P‰$ÿRéýïÿÿ‹ƒn鋉ƒjéǃfé!‹“Ðð‰•pîÿÿ‰•lîÿÿéaüÿÿ‹ƒn鋉ƒjéǃfé"‰µpîÿÿé>üÿÿ‹E¸‹P‰$ÿRé}üÿÿ‹E°‹P‰$ÿRé‰üÿÿ‹EÄ‹P‰$ÿRé•üÿÿ‹EÀ‹P‰$ÿRé¡üÿÿ‹E¼‹P‰$ÿRé­üÿÿ‹EЋP‰$ÿRé¹üÿÿ‹EÌ‹P‰$ÿRéÝûÿÿ‹E´‹P‰$ÿRééûÿÿ‹EÈ‹P‰$ÿRé£üÿÿ‰|$‹ƒìð‹‰$è5ÚéÒîÿÿ‹F‰4$ÿPéDøÿÿ‹E¸‹P‰$ÿRéøÿÿ‹ƒn鋉ƒjéǃfé$‹“Ðð‰•xîÿÿ‰•tîÿÿ‰•€îÿÿéCõÿÿ‹ƒn鋉ƒjéǃfé‹UÄ…Òt‹ƒè‰…Àu ‹EÄ‹P‰$ÿRÇEÄ‹»Šé‰|$‹ƒbé‰$èFىƅÀ„+‰uÄ…ö„ñ‰4$è8ىƋEÄ‹ƒê‰…Òu ‹EÄ‹P‰$ÿRÇEÄ…ö…Í‹ƒÐðéƒõÿÿ‹ƒn鋉ƒjéǃfé#ésúÿÿ‹ƒn鋉ƒjéǃfé%‹ƒÐð‰…xîÿÿ‰…tîÿÿéOõÿÿ‹EÌ‹P‰$ÿRé!üÿÿ‹B‰$ÿPéñûÿÿ‹E¸‹P‰$ÿRé4üÿÿ‹E´‹P‰$ÿRé üÿÿ‹ƒn鋉ƒjéǃfé&‹“Ðð‰•xîÿÿ‰•tîÿÿ‰•€îÿÿéÙóÿÿƒ>‰èúýÿM¼UÀEÄèVŽýÿ…Àˆ7*ƒµÙ‰D$•°þÿÿ‰•8îÿÿ‰$è)Ø‹»Æê‰|$‹ƒ^é‰$èÚ׉ƅÀu‰|$‹ƒìð‹‰$èØ‰u¸…ö„¿)‹ƒ’ê‰D$‰4$è£×‰E´…À„Ü)‹E¸‹ƒê‰…Òu ‹E¸‹P‰$ÿRÇE¸Ç$è„׉E¸…À„j)‹ƒíƒ‹“í‹E¸‰P ‹E¸‰D$‹E´‰$èÞ׉E°…À„r)‹E´‹ƒê‰…Òu ‹E´‹P‰$ÿRÇE´‹E¸‹ƒê‰…Òu ‹E¸‹P‰$ÿRÇE¸‹E°‹ƒê‰…Òu ‹E°‹P‰$ÿRÇE°‹EÄ‹ƒê‰…Òu ‹EÄ‹P‰$ÿRÇEÄ‹EÀ‹ƒê‰…Òu ‹EÀ‹P‰$ÿRÇEÀ‹E¼‹ƒê‰…Òu ‹E¼‹P‰$ÿRÇE¼éõúÿÿ‹ƒn鋉ƒjéǃfé‹“Ððé_ëÿÿ‹ƒn鋉ƒjéǃfé‹“Ððé<ëÿÿ‹EЋƒê‰…Òu ‹EЋP‰$ÿRÇEЋƒjê‰D$‹•pîÿÿ‰$èäÕ‰EÈ…À„ÌÇ$ÿÿÿÿèhÖ‰E°…À„—'Ç$èÏÕ‰EÌ…À„ž‹ƒB냋“Bë‹ẺP ‹U°‹ẺPÇE°‹ẺD$‹Eȉ$èÖ‰E´…À„>'‹EÈ‹ƒê‰…Òu ‹EÈ‹P‰$ÿRÇEÈ‹EÌ‹ƒê‰…Òu ‹EÌ‹P‰$ÿRÇEÌ‹E´‰$è£Õ‰…DîÿÿèýÔ…Àt/‹ƒn鋉ƒjéǃfé'‹ƒÐð‰…xîÿÿ‰…tîÿÿé†ñÿÿ‹E´‹ƒê‰…Òu ‹E´‹P‰$ÿRÇE´‹Eà‰$è¬Õ‰Â…À„H&ƒwÒ‰D$‰$è-Ô‰…Pîÿÿ1Ò‹ƒÖìèŒýÿ‰E¸…À„û%‹³Ðð‹ƒè‰…Àu ‹F‰4$ÿP‹U¸‰•tîÿÿÇE¸‹ƒFë‰D$‰$è<ԉ‰EÀ…À„{%‹ƒê‰D$‰$èÔ‰EÄ…À„9%‹EÀ‹ƒê‰…Òu ‹EÀ‹P‰$ÿRÇEÀÇ$èþÓ‰E¼…À„&%‹EÔƒ‹UÔ‹E¼‰P ‹E¼‰D$‹Eĉ$è^Ô‰EÐ…À„Õ$‹EÄ‹ƒê‰…Òu ‹EÄ‹P‰$ÿRÇEÄ‹E¼‹ƒê‰…Òu ‹E¼‹P‰$ÿRÇE¼‹ƒè‰…Àu ‹F‰4$ÿP‹EЉ…xîÿÿÇEЉ$è:Ô…À„:$‰D$…°îÿÿ‰…<îÿÿ‰$èWÓ‹…Pîÿÿ…À„ #‹•8îÿÿ‰T$‰|$‹…Dîÿÿ‰D$‹•@îÿÿ‰T$‹… îÿÿ‰D$ ‹•<îÿÿ‰T$ƒÚ‰D$‹…Pîÿÿ‰$èyÒ…ÀˆÞ!‹“(ñ‰•¤îÿÿƒ‹³Ðð‹ƒè‰…Àu ‹F‰4$ÿP‹ƒ®ê‰D$‹…hîÿÿ‰$è{Ò‰EÄ…À„ŸÇD$‰$èÓ‰E¼…À„„‹EÄ‹ƒê‰…Òu ‹EÄ‹P‰$ÿRÇEÄ‹E¼‰$èÒ‰EÐ…À„M‹E¼‹ƒê‰…Òu ‹E¼‹P‰$ÿRÇE¼‰µ€îÿÿ‹EЉ$è›Ò‰E°…À„ÿ ‰$èÊщEÈ…À„²‹E°‹ƒê‰…Òu ‹E°‹P‰$ÿRÇE°‹Eȉ$èQ҉ƅÀ„Š ‰uÌ…ö„q‹•€îÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹Ẻ…€îÿÿÇEÌ‹Eȉ$è҉ƅÀ„d‰u´…ö„'‹•pîÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹E´‰…pîÿÿÇE´‹Eȉ$è½Ñ‰Â…À…ºèëÐ…À…Û‹EÈ‹ƒê‰…Òu ‹EÈ‹P‰$ÿRÇEÈ‹•€îÿÿ‰$èÂÑ…À„‰D$‹…<îÿÿ‰$èåЋƒòé‰D$‹•pîÿÿ‰$è–ЉE¸…À„Y‰$è}щƅÀ„G‹E¸‹ƒê‰…Òu ‹E¸‹P‰$ÿRÇE¸‰t$‹…8îÿÿ‰$è}Ћ•8îÿÿ‰T$ ‹…<îÿÿ‰D$ƒÚ‰D$‹•Pîÿÿ‰$èÏÏ…À‰þÿÿ‹Eà‰D$‹ƒí‰$èÊЉEÀ…À„ŽÇ$èÿω‰EÌ…Àty‹EÀ‰B ÇEÀ‹ẺD$‹ƒñ‹‰$è^ЉE´…ÀtN‹EÌ‹ƒê‰…Òu ‹EÌ‹P‰$ÿRÇEÌ‹E´1É1Ò躀ýÿ‹E´‹ƒê‰…Òu ‹E´‹P‰$ÿRÇE´‹ƒn鋉ƒjéǃféC‹ƒÐð‰…„îÿÿU°‰•4îÿÿ鋃n鋉ƒjéǃfé6‹UÀ…Òt‹ƒè‰…Àu ‹EÀ‹P‰$ÿRÇEÀ‹UÄ…Òt‹ƒè‰…Àu ‹EÄ‹P‰$ÿRÇEÄ‹U¼…Òt‹ƒè‰…Àu ‹E¼‹P‰$ÿRÇE¼‹U°…Òt‹ƒè‰…Àu ‹E°‹P‰$ÿRÇE°‹UÌ…Òt‹ƒè‰…Àu ‹EÌ‹P‰$ÿRÇEÌ‹U´…Òt‹ƒè‰…Àu ‹E´‹P‰$ÿRÇE´‹UÈ…Òt‹ƒè‰…Àu ‹EÈ‹P‰$ÿRÇEÈ‹U¸…Òt‹ƒè‰…Àu ‹E¸‹P‰$ÿRÇE¸‹»Šé‰|$‹ƒbé‰$èÚ͉ƅÀu‰|$‹ƒìð‹‰$èΉuÀ…ö„)‰4$è¼Í‰Æ‹EÀ‹ƒê‰…Òu ‹EÀ‹P‰$ÿRÇEÀ…ö„ƒ>‰èK†ýÿU°‰•4îÿÿ‰ÑU¼EÄ蟃ýÿ…ÀˆÿƒØÙ‰D$‹…8îÿÿ‰$èxÍ‹•¤îÿÿ‰$èG̓øŒ·…€‹…¤îÿÿ‰…|îÿÿ‹EÄ‹ƒê‰…Òu ‹EÄ‹P‰$ÿRÇEÄ‹E¼‹ƒê‰…Òu ‹E¼‹P‰$ÿRÇE¼‹E°‹ƒê‰…Òu ‹E°‹P‰$ÿRÇE°‹…|îÿÿ‰…¤îÿÿé^üÿÿ‹“$ñ‰•|îÿÿƒ‹•¤îÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹»Æê‰|$‹ƒ^é‰$èc̉ƅÀu‰|$‹ƒìð‹‰$èŠÌ‰uÌ…ö„닃’ê‰D$‰4$è,̉E´…À„΋EÌ‹ƒê‰…Òu ‹EÌ‹P‰$ÿRÇEÌÇ$è ̉EÈ…À„–‹ƒíƒ‹“í‹EȉP ‹EȉD$‹E´‰$èg̉E¸…Àth‹E´‹ƒê‰…Òu ‹E´‹P‰$ÿRÇE´‹EÈ‹ƒê‰…Òu ‹EÈ‹P‰$ÿRÇEÈ‹E¸‹ƒê‰…Òu ‹E¸‹P‰$ÿRÇE¸é;þÿÿ‹ƒn鋉ƒjéǃfé;‹•|îÿÿ‰•¤îÿÿ‹ƒÐð‰…„îÿÿ‹UÌ…Òt‹ƒè‰…Àu ‹EÌ‹P‰$ÿRÇEÌ‹U°…Òt‹ƒè‰…Àu ‹E°‹P‰$ÿRÇE°‹U´…Òt‹ƒè‰…Àu ‹E´‹P‰$ÿRÇE´‹U¼…Òt‹ƒè‰…Àu ‹E¼‹P‰$ÿRÇE¼‹UÀ…Òt‹ƒè‰…Àu ‹EÀ‹P‰$ÿRÇEÀ‹UÄ…Òt‹ƒè‰…Àu ‹EÄ‹P‰$ÿRÇEÄ‹UÐ…Òt‹ƒè‰…Àu ‹EЋP‰$ÿRÇEЋUÈ…Òt‹ƒè‰…Àu ‹EÈ‹P‰$ÿRÇEÈ‹U¸…Òt‹ƒè‰…Àu ‹E¸‹P‰$ÿRÇE¸ƒ>‰蟂ýÿM´EÌ‹•4îÿÿèøýÿ…Àˆ‹•Pîÿÿ‰$èÉ‹M´‹U°‹EÌèËzýÿ‹ƒn鋉ƒjéǃféR‹ƒÐðé¢ãÿÿ‹ƒn鋉ƒjéǃfé9‹ƒÐð‰…„îÿÿé'þÿÿ‹ƒè‰…Àu ‹B‰$ÿPƒÖ†‰D$‹ƒ¼ð‹‰$èÛÈ‹ƒn鋉ƒjéǃfé3‹“Ðð‰•„îÿÿE°‰…4îÿÿéÇýÿÿèÑÈ…À…÷ÿÿƒÖ†‰D$‹ƒ¼ð‹‰$è‚Èép÷ÿÿ‹ƒn鋉ƒjéǃfé4‹“Ðð‰•„îÿÿE°‰…4îÿÿéiýÿÿ‹ƒn鋉ƒjéǃfé7‹“Ðð‰•„îÿÿE°‰…4îÿÿé7ýÿÿ‹ƒn鋉ƒjéǃfé7‹“Ðð‰•„îÿÿéýÿÿ‹ƒn鋉ƒjéǃféP‹ƒÐðé=âÿÿèõÇ…À…iöÿÿƒÖ†‰D$‹ƒ¼ð‹‰$è¦ÇéJöÿÿèÉÇ…À…¹þÿÿ‹EЋƒê‰…Òu ‹EЋP‰$ÿRÇEЋƒ²ê‰D$‹…`îÿÿ‰$èœÇ‰EÈ…À„ŽÇD$‰$è&ȉE¸…À„s‹EÈ‹ƒê‰…Òu ‹EÈ‹P‰$ÿRÇEÈ‹E¸‰$è;ljEÄ…À„<‹E¸‹ƒê‰…Òu ‹E¸‹P‰$ÿRÇE¸‹“Ðð‰•„îÿÿ‹Eĉ$è¶Ç‰E¼…À„•‰$è寉E°…À„A‹E¼‹ƒê‰…Òu ‹E¼‹P‰$ÿRÇE¼‹E°‰$èlljƅÀ„W‰uÀ…ö„&‹•€îÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹EÀ‰…€îÿÿÇEÀ‹E°‰$è"ljƅÀ„Ö‰uÌ…ö„¶‹•„îÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹Ẻ…„îÿÿÇEÌ‹E°‰$èØÆ‰Â…À…IèÆ…À…j‹E°‹ƒê‰…Òu ‹E°‹P‰$ÿRÇE°‹…€îÿÿ‰$èÝÆ…À„î‰D$‹•<îÿÿ‰$èÆ‹•„îÿÿ‹B‹@4…À„…‹@ …À„zÇD$‰$èùʼnlj}´…ÿ„͉<$è Æ‰…HîÿÿèfÅ…À…v‹E´‹ƒê‰…Òu ‹E´‹P‰$ÿRÇE´‹•„îÿÿ‹B‹@4…À„ú‹x …ÿ„ïÇD$‰$èʼnlj}Ð…ÿ„¬‰<$è”ʼn…LîÿÿèîÄ…À…d‹EЋƒê‰…Òu ‹EЋP‰$ÿRÇEЋ•„îÿÿ‹B‹@4…À„ì‹p …ö„áÇD$‰$è ʼnlj}È…ÿ„x‰<$èʼnÆèzÄ…À…;‹EÈ‹ƒê‰…Òu ‹EÈ‹P‰$ÿRÇEȉt$‹•Lîÿÿ‰T$‹…Hîÿÿ‰D$ ‹•<îÿÿ‰T$ƒîÙ‰D$‹…Pîÿÿ‰$èàÃ…À‰ýÿÿ‹Eà‰D$‹ƒí‰$èÛĉE¸…À„Ç$èĉ‰E¼…Àt}‹E¸‰B ÇE¸‹E¼‰D$‹ƒñ‹‰$èoĉEÀ…À„À‹E¼‹ƒê‰…Òu ‹E¼‹P‰$ÿRÇE¼‹EÀ1É1ÒèÇtýÿ‹EÀ‹ƒê‰…Òu ‹EÀ‹P‰$ÿRÇEÀ‹ƒn鋉ƒjéǃféKE°‰…4îÿÿé(øÿÿ‹ƒn鋉ƒjéǃféHE°‰…4îÿÿéøÿÿ‹ƒn鋉ƒjéǃféHU°‰•4îÿÿéÜ÷ÿÿ‹ƒn鋉ƒjéǃféKU°‰•4îÿÿé¶÷ÿÿÇ$èhÉƅÀtW‰D$‹…„îÿÿ‰$èªÃ‰Ç‹ƒè‰…À…üýÿÿ‹F‰4$ÿPéîýÿÿ‹ƒn鋉ƒjéǃféGE°‰…4îÿÿéM÷ÿÿ1ÿéÁýÿÿ‹ƒn鋉ƒjéǃféGU°‰•4îÿÿé ÷ÿÿÇ$èÒ‰ƅÀ„“‰D$‹…„îÿÿ‰$èÉNjƒè‰…À…êüÿÿ‹F‰4$ÿPéÜüÿÿ‹ƒn鋉ƒjéǃféFE°‰…4îÿÿé³öÿÿ‹ƒè‰…Àu ‹B‰$ÿPƒÖ†‰D$‹ƒ¼ð‹‰$ègÁ‹ƒn鋉ƒjéǃféDU°‰•4îÿÿé_öÿÿ‹ƒn鋉ƒjéǃféDE°‰…4îÿÿé9öÿÿèCÁ…À…œúÿÿƒÖ†‰D$‹ƒ¼ð‹‰$èôÀé}úÿÿÇ$è¿Á‰Æ…ÀtW‰D$‹…„îÿÿ‰$è‰Njƒè‰…À…cûÿÿ‹F‰4$ÿPéUûÿÿ‹ƒn鋉ƒjéǃféEE°‰…4îÿÿé¤õÿÿ1ÿé(ûÿÿ‹ƒn鋉ƒjéǃféFU°‰•4îÿÿéwõÿÿ1ÿésûÿÿèzÀ…À…úÿÿƒÖ†‰D$‹ƒ¼ð‹‰$è+ÀéþùÿÿèNÀ…À…Øþÿÿ‹EÄ‹ƒê‰…Òu ‹EÄ‹P‰$ÿRÇEÄ‹ƒ’ì‰D$‹EÔ‰$èÁ‰EÌ…À„ Ç$è&À‰Â‰E°…À„v ‹ẺB ‹ƒf냋“fë‹E°‰PÇEÌ‹E°‰D$‹ƒÔð‰$ènÀ‰E´…À„4 ‹E°‹ƒê‰…Òu ‹E°‹P‰$ÿRÇE°‹•lîÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹E´‰…lîÿÿÇE´‹•lîÿÿ‰$èV¿‰E¼…À„‰ ‹ƒÐð‰…Œîÿÿ‰…ˆîÿÿ‰…”îÿÿ‰…îÿÿ‰…œîÿÿ‰…˜îÿÿ‹E¼‰$èÔ¿‰EÀ…À„G ‹•ˆîÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹EÀ‰…ˆîÿÿÇEÀ‹ƒòë‰D$‹•ˆîÿÿ‰$èØ¾‰EÄ…À„ÝÇD$‰$èb¿‰EÐ…À„‹EÄ‹ƒê‰…Òu ‹EÄ‹P‰$ÿRÇEÄ‹ƒÚë‰D$‹EЉ$è|¾‰EÈ…À„‹EЋƒê‰…Òu ‹EЋP‰$ÿRÇEÐÇ$è]¾‰E¸…À„I‹ƒ–샋“–ì‹E¸‰P ‹E¸‰D$‹Eȉ$è·¾‰EÌ…À„‹EÈ‹ƒê‰…Òu ‹EÈ‹P‰$ÿRÇEÈ‹E¸‹ƒê‰…Òu ‹E¸‹P‰$ÿRÇE¸‹Ẻ$諽‰E°…À„¿‹EÌ‹ƒê‰…Òu ‹EÌ‹P‰$ÿRÇEÌ‹E°‰$è2¾‰Æ…À„T‰u´…ö„~‹•€îÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹E´‰…€îÿÿÇE´‹E°‰$è轉ƅÀ„†‰uÀ…ö„4‹•Œîÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹EÀ‰…ŒîÿÿÇEÀ‹E°‰$èž½‰Æ…À„”‰uÄ…ö„ê‹•îÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹Eĉ…îÿÿÇEÄ‹E°‰$èT½‰Æ…À„‰uÐ…ö„ ‹•”îÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹EЉ…”îÿÿÇEЋE°‰$è ½‰Â…À…3è8¼…À…T‹E°‹ƒê‰…Òu ‹E°‹P‰$ÿRÇE°‹•ˆîÿÿ‰$è½…À„Ò‰D$‹…<îÿÿ‰$è2¼‹•<îÿÿ‰T$ƒÝÙ‰D$‹…Pîÿÿ‰$莻…ÀˆË‹•€îÿÿ‰T$‹EÔ‰$載E´…À„Ž‹•˜îÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹E´‰…˜îÿÿÇE´‹•€îÿÿ‰T$‹…xîÿÿ‰$èP¼‰EÀ…À„;‹•œîÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹EÀ‰…œîÿÿÇEÀ‹•˜îÿÿ‰$è&¼‰Æ…À„â‹…œîÿÿ‰$è¼…À„Ì‹•Pîÿÿ‰T$ ½°öÿÿ‰|$‰D$‰4$è›*ýÿ…À„´ûÿÿ‰<$軉EÄ…À„ŽÇ$èÞº‰Â‰EÐ…Àty‹EĉB ÇEÄ‹EЉD$‹ƒñ‹‰$è=»‰E°…ÀtN‹EЋƒê‰…Òu ‹EЋP‰$ÿRÇEЋE°1É1Òè™kýÿ‹E°‹ƒê‰…Òu ‹E°‹P‰$ÿRÇE°‹ƒn鋉ƒjéǃfé\닃n鋉ƒjéǃféZ‹UÈ…Òt‹ƒè‰…Àu ‹EÈ‹P‰$ÿRÇEÈ‹U¸…Òt‹ƒè‰…Àu ‹E¸‹P‰$ÿRÇE¸‹UÌ…Òt‹ƒè‰…Àu ‹EÌ‹P‰$ÿRÇEÌ‹U´…Òt‹ƒè‰…Àu ‹E´‹P‰$ÿRÇE´‹UÀ…Òt‹ƒè‰…Àu ‹EÀ‹P‰$ÿRÇEÀ‹UÄ…Òt‹ƒè‰…Àu ‹EÄ‹P‰$ÿRÇEÄ‹UÐ…Òt‹ƒè‰…Àu ‹EЋP‰$ÿRÇEЋU°…Òt‹ƒè‰…Àu ‹E°‹P‰$ÿRÇE°‹U¼…Òt‹ƒè‰…Àu ‹E¼‹P‰$ÿRÇE¼Eä‰D$E؉D$E܉$èݸ‹³fé¿‹…Pîÿÿ‰$èo¸‹ƒ:ê‰D$‹•lîÿÿ‰$èz¸‰EÈ…ÀtrÇD$‰$蹉E¸…Àt[‹EÈ‹ƒê‰…Òu ‹EÈ‹P‰$ÿRÇEÈ‹E¸‹ƒê‰…Òu ‹E¸‹P‰$ÿRÇE¸ƒÿ„˜‹ƒÐðƒ‰ÆéÜÎÿÿ‹ƒn鋉ƒjéǃfé_ƒÿ…èÍÿÿ‹UÜ…Òt‹ƒè‰…Àu ‹EÜ‹P‰$ÿR‹UØ…Òt‹ƒè‰…Àu ‹EØ‹P‰$ÿR‹Uä…Ò„¡Íÿÿ‹ƒè‰…À…’Íÿÿ‹Eä‹P‰$ÿRéÍÿÿ‹Eä‰D$‹E؉D$‹E܉$èì·‰³féÇEÜÇEØÇEäéHÍÿÿ‹ƒn鋉ƒjéǃfé[éýÿÿ‹ƒn鋉ƒjéǃféYéõüÿÿ‹Eà‰D$‹ƒí‰$è¾·‰EÈ…À„ŽÇ$èó¶‰Â‰E¸…Àty‹EȉB ÇEÈ‹E¸‰D$‹ƒñ‹‰$èR·‰EÌ…ÀtN‹E¸‹ƒê‰…Òu ‹E¸‹P‰$ÿRÇE¸‹EÌ1É1Òè®gýÿ‹EÌ‹ƒê‰…Òu ‹EÌ‹P‰$ÿRÇEÌ‹ƒn鋉ƒjéǃféXé*üÿÿ‹ƒn鋉ƒjéǃféVé üÿÿ‹ƒè‰…Àu ‹B‰$ÿPƒÖ†‰D$‹ƒ¼ð‹‰$诵‹ƒn鋉ƒjéǃféUéÂûÿÿ躵…À„Í‹ƒn鋉ƒjéǃféTé˜ûÿÿèµ…À…møÿÿƒÖ†‰D$‹ƒ¼ð‹‰$èAµéNøÿÿèdµ…À…ÕøÿÿƒÖ†‰D$‹ƒ¼ð‹‰$èµé¶øÿÿè8µ…À…_øÿÿƒÖ†‰D$‹ƒ¼ð‹‰$èé´é@øÿÿè µ…À…Ÿ÷ÿÿƒÖ†‰D$‹ƒ¼ð‹‰$è½´é€÷ÿÿ‹E¼‹ƒê‰…Òu ‹E¼‹P‰$ÿRÇE¼1ÿé1üÿÿ‹ƒn鋉ƒjéǃféT‹“Ðð‰•Œîÿÿ‰•ˆîÿÿ‰•”îÿÿ‰•îÿÿ‰•œîÿÿ‰•˜îÿÿéyúÿÿ‹ƒn鋉ƒjéǃféM‹UÐ…Òt‹ƒè‰…Àu ‹EЋP‰$ÿRÇEЋUÈ…Òt‹ƒè‰…Àu ‹EÈ‹P‰$ÿRÇEÈ‹U¸…Òt‹ƒè‰…Àu ‹E¸‹P‰$ÿRÇE¸‹U¼…Òt‹ƒè‰…Àu ‹E¼‹P‰$ÿRÇE¼‹UÀ…Òt‹ƒè‰…Àu ‹EÀ‹P‰$ÿRÇEÀ‹UÄ…Òt‹ƒè‰…Àu ‹EÄ‹P‰$ÿRÇEÄ‹UÌ…Òt‹ƒè‰…Àu ‹EÌ‹P‰$ÿRÇEÌ‹U°…Òt‹ƒè‰…Àu ‹E°‹P‰$ÿRÇE°‹U´…Òt‹ƒè‰…Àu ‹E´‹P‰$ÿRÇE´‹ƒñ‹‰$è$³…ÀurU°‰•4îÿÿéàçÿÿ‹ƒn鋉ƒjéǃféD‹“Ðð‰•„îÿÿE°‰…4îÿÿé®çÿÿ‹ƒn鋉ƒjéǃfé3‰µ„îÿÿ‰µ€îÿÿE°‰…4îÿÿé|çÿÿƒ>‰èhkýÿM¸UÈEÐèÄhýÿ…Àˆz‹ƒ¾é‰D$‹EÔ‰$èJ³‰E¼…À„4Ç$èk²‰Â‰EÀ…À„õ‹E¼‰B ‹ƒf냋“fë‹EÀ‰PÇE¼‹EÀ‰D$‹ƒÔð‰$è³²‰EÄ…À„Ù‹EÀ‹ƒê‰…Òu ‹EÀ‹P‰$ÿRÇEÀ‹•lîÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹Eĉ…lîÿÿÇEÄ‹EЋƒê‰…Òu ‹EЋP‰$ÿRÇEЋEÈ‹ƒê‰…Òu ‹EÈ‹P‰$ÿRÇEÈ‹E¸‹ƒê‰…Òu ‹E¸‹P‰$ÿRÇE¸éÝñÿÿ‹ƒn鋉ƒjéǃféOE°‰…4îÿÿéæÿÿ‹ƒn鋉ƒjéǃféOU°‰•4îÿÿéáåÿÿ‹ƒn鋉ƒjéǃféNE°‰…4îÿÿé»åÿÿ‹Eà‰D$‹ƒí‰$è–±‰E´…À„ŽÇ$è˰‰Â‰E¸…Àty‹E´‰B ÇE´‹E¸‰D$‹ƒñ‹‰$è*±‰EÀ…ÀtN‹E¸‹ƒê‰…Òu ‹E¸‹P‰$ÿRÇE¸‹EÀ1É1Òè†aýÿ‹EÀ‹ƒê‰…Òu ‹EÀ‹P‰$ÿRÇEÀ‹ƒn鋉ƒjéǃfé1‹“Ðð‰•€îÿÿ‰•¤îÿÿ‰•„îÿÿE°‰…4îÿÿéÏäÿÿ‹Eà‰D$‹ƒÆì‰$誰‰E°…À„±Ç$è߯‰Â‰EÈ…Àty‹E°‰B ÇE°‹EȉD$‹ƒñ‹‰$è>°‰EÌ…Àtq‹EÈ‹ƒê‰…Òu ‹EÈ‹P‰$ÿRÇEÈ‹EÌ1É1Òèš`ýÿ‹EÌ‹ƒê‰…Òu ‹EÌ‹P‰$ÿRÇEÌ‹ƒn鋉ƒjéǃfé-‹ƒÐðéÉËÿÿ‹ƒn鋉ƒjéǃfé-‹“Ððé Êÿÿ‹ƒn鋉ƒjéǃfé+‰µ€îÿÿ‰òéÊÿÿ‹ƒn鋉ƒjéǃfé*‰µ¤îÿÿ‰òé†Äÿÿ‹ƒn鋉ƒjéǃfé*‰µ¤îÿÿ‰ð‰µxîÿÿ‰µ„îÿÿ‰µ€îÿÿé¬Èÿÿ‹ƒn鋉ƒjéǃfé)éÑÿÿ‹ƒn鋉ƒjéǃfé(‹“Ðð‰•xîÿÿ‰•tîÿÿ‰•€îÿÿéÓÉÿÿ‹ƒn鋉ƒjéǃfé'‹“Ðð‰•xîÿÿ‰•tîÿÿ‰•€îÿÿéžÉÿÿ‹ƒn鋉ƒjéǃfééÏÿÿ‹ƒn鋉ƒjéǃfééþÎÿÿ‹ƒn鋉ƒjéǃféé¸Âÿÿ‰|$‹ƒìð‹‰$èÌ­éJÔÿÿU‰åWVSƒì|èMÇEäEä‰D$ƒú™‰D$ ƒú6‰D$‹E‰D$‹E ‰$設…À„-‹Eƒ‹E䃋“䮉U¨ƒ‹»§‹uä…ÿ„U;u¨t‹F9Çt‰|$‰$è,®…À„>‹M‹A ‹@0‹@<ƒ‹u¨‹ƒè‰…À„Ï‹M‹A ‹@0‹@<‰E¨è­‰E°…À„`‹³ä®‹ƒè‰…À„F‹E‹P ƒÂ‹Eä;P „O‹M‹A‰Eà‹y9øŽ¢Áà‰EÀ‰u¬ëƒÇƒEÀ;}à‹u‹F ‹uÀp(‹U‹BƒÀ;FuÖ‹Uä‹J‹F‰D$‹F‰D$‰$ÿ…Àt¹‹ƒŠ¨‰D$‹M¨‹A‰$謉EÄ…À„<‹u‹F ‹@(‹UÀ‹D‰$耬‰E¸…À„Ç$è竉ƅÀ„r ‹M¸‰H ‰D$‹Eĉ$èT¬‰EÌ…À„o ‹UÄ‹ƒè‰…À„‹ƒè‰…À„ò‹M¬‹ƒè‰…À„Ò‹u‹F ‹UÀP(‹B F+‰$èð«‰EÄ…À„c ‰D$‹ẺD$‹U°‰$èa«…Àˆ ‹MÄ‹ƒè‰…À„¥‹ủu¬é¨þÿÿ1ö‰ðƒÄ|[^_]ËU¨‹B‰$ÿP‹M‹A ‹@0‹@<‰E¨è¦«‰E°…À…%þÿÿ逋³ä®‰u¬‹E°ƒ‰Æ‰Ç‹U¨‹ƒè‰…À„‹ƒè‰…À„¦‹M¬‹ƒè‰…À„¯‹U‹ƒè‰…À„¸‹E䋃ꉅ҅\ÿÿÿ‹Eä‹P‰$ÿR‰ðƒÄ|[^_]˃‚§‹‰ƒ~§ǃz§Î‹³ä®‰u¬‰÷ƒzGèùbýÿ1ö‹U¨‹ƒè‰…À…cÿÿÿ‹B‰$ÿP‹ƒè‰…À…Zÿÿÿ‹G‰<$ÿP‹M¬‹ƒè‰…À…Qÿÿÿ‹A‰ $ÿP‹U‹ƒè‰…À…Hÿÿÿ‹B‰$ÿPé:ÿÿÿ‹F‹@ ‰D$‹G ‰D$ ƒrG‰D$ƒÎ5‰D$‹ƒ ¯‹‰$èb©‹ƒ‚§‹‰ƒ~§ǃz§É‹ƒä®‰E¬‰Çé(ÿÿÿ‹F‰4$ÿP‹E‹P ƒÂ‹Eä;P …±üÿÿ‹U‹R‰UÔ‹M‹I‰MÐ9ÊŽSþÿÿIÁà‰E¼‰M¤‰u¬é‹ƒŠ¨‰D$‹U¨‹B‰$èô¨‰Æ…À„x‹M‹A ‹@(‹U¼‹D‰$èm©‰EÄ…À„1Ç$èÔ¨‰E¸…À„ý‰Á‹EĉA ‰L$‰4$èA©‰E´…À„º‹ƒè‰…À„x‹U¸‹ƒè‰…À„X‹M¬‹ƒè‰…À„8‹u‹F ‹U¼P(‹B F+‰$èݨ‰Æ…À„;‰D$‹E´‰D$‹U°‰$èO¨…Àˆì‹ƒè‰…À„9‹u´‰u¬ƒE¤ƒE¼‹UÔ9U¤„'ýÿÿ‹u‹N ‹A(‹VƒÂ‹u¼90žÀ¶À‰Eà…Àt‹A(;T0œÀ¶À‰Eà‹Mà…É…¨þÿÿ‰$èG¨‰E¸…À„S‹ƒž¨‰D$‹U‰$茧‰EÄ…À„‰Á‹@‹@4…À„ú‹@ …À„ï‹u¤‰t$‰ $è¶§‰Æ…ö„-‹MÄ‹ƒè‰…À„‹ƒj¨‰D$‰4$è)§‰EÄ…À„…‹ƒè‰…À„Eà‰D$‹uĉt$‹E¸‰$è §…ÀˆÎ1Àƒ}à”À‰Eà‹U¸‹ƒè‰…À„ð‹MÄ‹ƒè‰…À„ЋEà…À„®þÿÿ‹Mä‹u‹F ‹U¼P(‹q‹B‰D$‹B‰D$‰ $ÿ‰Eà…À„~þÿÿ‹ƒŠ¨‰D$‹U¨‹B‰$èk¦‰Æ…À„\‹M‹A ‹@(‹U¼‹D‰$è䦉E¸…À„Ç$èK¦‰EÄ…À„á‰Á‹E¸‰A ‰L$‰4$踦‰EÈ…À„ž‹ƒè‰…À„Ë‹UÄ‹ƒè‰…À„«‹M¬‹ƒè‰…À„‹‹u‹F ‹U¼P(‹B F+‰$èT¦‰Æ…À„î‰D$‹EȉD$‹U°‰$èÆ¥…Àˆö‹ƒè‰…À„$‹uȉu¬érýÿÿ‹E¤‰$覉DžÀ„B‰D$‹Uĉ$èH¦‰Æ‹ƒè‰…À…íýÿÿ‹G‰<$ÿPéßýÿÿ‹A‰ $ÿPéëýÿÿ‹A‰ $ÿPéºüÿÿ‹B‰$ÿPéšüÿÿ‹F‰4$ÿPézüÿÿ‹F‰4$ÿPéßýÿÿ‹A‰ $ÿPé"þÿÿ‹B‰$ÿPéþÿÿ‹F‰4$ÿP‹E´‰E¬é¹üÿÿƒº5‰D$‹ƒ¯‹‰$膤éûÿÿ‹A‰ $ÿPé ùÿÿ‹F‰4$ÿPéùÿÿ‹B‰$ÿPéãøÿÿ‹UÄ‹B‰$ÿP‹M̉M¬é÷÷ÿÿ‹F‰4$ÿP‹EȉE¬éEüÿÿ‹A‰ $ÿPégþÿÿ‹B‰$ÿPéGþÿÿ‹F‰4$ÿPé'þÿÿ‹ƒ‚§‹‰ƒ~§ǃz§Õ‹MÄ‹ƒè‰…Àt.‹E¸…Àt‹u¸‹ƒè‰…Àt‹}°é­ùÿÿ‹F‰4$ÿP‹}°éœùÿÿ‹A‰ $ÿPëÇ‹ƒ‚§‹‰ƒ~§ǃz§ßÇE¸‹EÄ…Àu“럋ƒ‚§‹‰ƒ~§ǃz§Õ‹ƒè‰…ÀuÔ‹F‰4$ÿPëÉ‹ƒ‚§‹‰ƒ~§ǃz§ÕéTÿÿÿ‹ƒ‚§‹‰ƒ~§ǃz§Õ‹}°éþøÿÿ‹ƒ‚§‹‰ƒ~§ǃz§Ô‹M´‰M¬ÇEÄÇE¸é|ÿÿÿ‹ƒ‚§‹‰ƒ~§ǃz§Ô‹}°‹E´‰E¬é§øÿÿ‹ƒ‚§‹‰ƒ~§ǃz§ÓÇEÄé2ÿÿÿ‹ƒ‚§‹‰ƒ~§ǃz§Óéÿÿÿ‹ƒ‚§‹‰ƒ~§ǃz§ÓÇE¸éñþÿÿ‹ƒ‚§‹‰ƒ~§ǃz§Ó‹}°é"øÿÿ‹ƒ‚§‹‰ƒ~§ǃz§ßé-þÿÿ‹ƒ‚§‹‰ƒ~§ǃz§ßÇE¸éþÿÿ‹ƒ‚§‹‰ƒ~§ǃz§à‹ỦU¬ÇE¸éßýÿÿ‹ƒ‚§‹‰ƒ~§ǃz§à‹}°‹M̉M¬é‘÷ÿÿ‹ƒ‚§‹‰ƒ~§ǃz§Ù‹}°‹UȉU¬ék÷ÿÿ‹ƒ‚§‹‰ƒ~§ǃz§Ù‹MȉM¬ÇEÄÇE¸ééýÿÿ‹ƒ‚§‹‰ƒ~§ǃz§ØÇE¸éÅýÿÿ‹ƒ‚§‹‰ƒ~§ǃz§Øé¨ýÿÿ‹ƒ‚§‹‰ƒ~§ǃz§ØÇEÄé„ýÿÿ‹ƒ‚§‹‰ƒ~§ǃz§Ø‹}°éµöÿÿU‰åWVSƒì\èe@ÇEäÇEÜÇE؃͚‰D$ ƒ‰D$‹E‰D$‹E ‰$è¡…Àu 1ö‰ðƒÄ\[^_]ËEƒ‹³C¢ƒè;¡‰Eä…À„ô‹ƒè‰…À„°‹Mä‰M¼ÇEä衉Eä…À„q ‹ƒè‰…À„«‹Uä‰UÀÇEä‹M‹A ‹@‰EÌ‹A‰EÔ9EÌíÇE¸ÿÿÿÿ‹E¸÷ÐÁè‰Eà…Àtp‹M¸‰ $è„ ‰Æ‰EÜ…À„· ‹M‹QƒÂ‹MÀ‹A‹@4…À„È ‹x …ÿ„½ ‰t$‰T$‰ $蠉ƅöˆ0 ‹EÜ‹ƒê‰…Ò„‘ ÇEÜèB ‰Eä…À„º ‹³C¢‹ƒè‰…À„F ‹Eä‰EÄÇEä‹UÀ‰$è8Ÿ‰EØ…À„ú‰uÈéÇÇE܉4$èÀŸ‰Eä…À„1 ‹M‹A‰$è§Ÿ‰EÜ…À„ Ç$蟉DžÀ„! ‹Eä‰G ‹U‹B ƒ‹B ‰G‹E܉GÇEäÇE܉|$‹ƒaš‰$èUŸ‰Eä…À„Û ‹ƒè‰…À„Ô‹MÈ‹ƒè‰…À„´‹Eä‰EÈÇEä‹»5‰|$‹ƒÑš‰$è_ž‰Æ…À„µ‰uÜ…ö„ ‹ƒ›‰D$‰4$è8ž‰Ç…À„ì‹EÜ‹ƒê‰…Ò„hÇEÜÇ$è"ž‰Eä…À„¼‹Uƒ‰P ‹Mȃ‹Eä‰H‹Eä‰D$‰<$螉EÜ…À„‹ƒè‰…À„R‹E䋃ꉅ҄/ÇEä‹E܉D$‹EȉD$‹Uĉ$è»…ÀˆÙ‹EÜ‹ƒê‰…Ò„ÇEÜ‹E؉$螉EÜ…À„E ‰$èÖ‰Æè4…À…²‹EÜ‹ƒê‰…Ò…úýÿÿ‹EÜ‹P‰$ÿRééýÿÿ‰Â@Áà‰EЉU´ÇE¸ÿÿÿÿ‰u°‰Ðë‹E´‰E¸ƒE´ƒEЋUÌ9U´„äüÿÿ‹E´‹M;AÀ¶À‰Eà…À…*‹Eà…À…¿üÿÿ‹M‹Q ‹B(‹MЋ‹M;AžÀ¶À‰Eà…Àt‹B(‹MЋDƒè‹M9AœÀ¶À‰Eà‹Eà…À…xÿÿÿ‹B(‹MЋDƒè‹M9A”À¶À‰Eà…À…ä‹B(‹MЋT‹M¼‹A‹@4…À„L‹@ …À„A‰T$‰ $肜‰Æ‰uä…ö„Ç‹U‹B ‹@(‹MЋD ‰$虜‰Â‰EÜ…À„¢Eà‰D$‰T$‹Eä‰$è…œ…Àˆ„1Àƒ}à”À‰Eà‹E䋃ꉅ҄&ÇEä‹EÜ‹ƒê‰…Ò„ÇEÜ‹Eà…À„þÿÿ‹E´‰$蜉ƉEä…À„‹U‹B ‹@(‹MЋ‹MÀ‹A‹@4…À„‹@ …À„õ‰t$‰T$‰ $è ›‰Æ…öˆ¾‹E䋃ꉅ҄<ÇEä‹U‹B ‹@(‹MЋD‰D$‹E¼‰$èúš…À‰òýÿÿ‹ƒáš‹‰ƒÝšǃٚõ陋A‰ $ÿPé>üÿÿ‹G‰<$ÿPéüÿÿ‹EÜ‹P‰$ÿRé‡üÿÿ‹U¼‰$舛ƒøÿ„Á…À”À¶À‰Eàé²ýÿÿ‹Eä‹P‰$ÿRéÀüÿÿ‹G‰<$ÿPé üÿÿ‹EÜ‹P‰$ÿRéÛüÿÿ‹ƒáš‹‰ƒÝšǃٚó‹UÜ…Òt‹ƒè‰…À„ŠÇEÜ‹Uä…Òt‹ƒè‰…À„\ÇE䋃?¢‹‰$èü™‰Eà…À„?ƒ;è«RýÿMØUäEÜèPýÿ…Àˆ1‹EÜ‹ƒê‰…Ò„½ÇEÜ‹E䋃ꉅ҄“ÇEä‹EØ‹ƒê‰…Ò„œÇEØévüÿÿ‹B(‹UЋD‰$èú™‰Æ‰Eä…À„‹M‹A ‹@(‹MЋT‹M¼‹A‹@4…À„«‹@ …À„ ‰t$‰T$‰ $虉ƅöˆ§‹E䋃ꉅ҄ïÇEäéóûÿÿ‰$虉DžÀ„¼‰D$‹E¼‰$虉Ƌƒè‰…À…›üÿÿ‹G‰<$ÿPéüÿÿ‹F‰4$ÿPéBøÿÿ‰|$‹ƒ_¢‹‰$è͘é2úÿÿ‹F‰4$ÿPéGøÿÿ‹ƒáš‹‰ƒÝšǃٚç1ÿ‰uÀ‰u¼‰uȉuÄ‹Uä…Òt‹ƒè‰…À„‹UÜ…Òt‹ƒè‰…À„‹UØ…Òt‹ƒè‰…À„Í…ÿt‹ƒè‰…À„˃;èÇPýÿ1ö‹U¼‹ƒè‰…ÀtO‹MÀ‹ƒè‰…ÀtX‹UÄ‹ƒè‰…Àta‹MÈ‹ƒè‰…Àtj‹U‹ƒè‰…À…÷ÿÿ‹B‰$ÿP‰ðƒÄ\[^_]ËB‰$ÿP‹MÀ‹ƒè‰…Àu¨‹A‰ $ÿP‹UÄ‹ƒè‰…ÀuŸ‹B‰$ÿP‹MÈ‹ƒè‰…Àu–‹A‰ $ÿPë‹‹EØ‹P‰$ÿRé"ÿÿÿ‹G‰<$ÿPé'ÿÿÿ‹Eä‹P‰$ÿRé×þÿÿ‹EÜ‹P‰$ÿRéÜþÿÿ‹Eä‹P‰$ÿRé\ýÿÿ‹EÜ‹P‰$ÿRé2ýÿÿ‹EØ‹P‰$ÿRéSýÿÿ‹ƒáš‹‰ƒÝšǃٚè1ÿ‰uĉuÀ‰uÈéUþÿÿ‹Eä‹P‰$ÿRé“üÿÿ‹EÜ‹P‰$ÿRéeüÿÿ‰$藉DžÀ„‰t$‰D$‹E¼‰$莖‰Æ‹ƒè‰…À…<ýÿÿ‹G‰<$ÿPé.ýÿÿ‹ƒáš‹‰ƒÝšǃٚû1ÿ‰uÈéÍýÿÿ1öéøùÿÿ‹F‰4$ÿPé¬öÿÿ‹Eä‹P‰$ÿRéýÿÿ‰$薉DžÀt‰t$‰D$‹EÀ‰$薉Ƌƒè‰…À…#öÿÿ‹G‰<$ÿPéöÿÿ‹ƒáš‹‰ƒÝšǃٚú1ÿ‹‹C¢‰MȉMÄé<ýÿÿ‹Eä‹P‰$ÿRéÉùÿÿ‹EÜ‹P‰$ÿRéÑùÿÿ‹ƒáš‹‰ƒÝšǃٚù1ÿ‹“C¢‰UȉUÄéïüÿÿ‹ƒáš‹‰ƒÝšǃٚýéÒüÿÿ‹ƒáš‹‰ƒÝšǃٚù1ÿ‹ƒC¢‰EȉEÄé§üÿÿ‹EÜ‹P‰$ÿRé^õÿÿ‹ƒáš‹‰ƒÝšǃٚü1ÿéwüÿÿ‹ƒáš‹‰ƒÝšǃٚüéZüÿÿ‹ƒáš‹‰ƒÝšǃٚý1ÿé;üÿÿ‹ƒáš‹‰ƒÝšǃٚû1ÿéüÿÿ‹ƒáš‹‰ƒÝšǃٚôéúÿÿ‰$è唉DžÀtÕ‰t$‰D$‹EÀ‰$è^”‰Æ‹ƒè‰…À…ëøÿÿ‹G‰<$ÿPéÝøÿÿèù“…À…wÿÿÿ‹EØ‹ƒê‰…Ò„áÇEØ‹Mă‰Îéîûÿÿ‹Eä‹P‰$ÿRé³øÿÿ‹ƒáš‹‰ƒÝšǃٚê1ÿ‹ƒC¢‰EȉEÄéPûÿÿ1ÿ‹ƒC¢‰EȉEÄé=ûÿÿ‹ƒáš‹‰ƒÝšǃٚö1ÿ‹‹C¢‰MȉMÄéûÿÿ‹ƒáš‹‰ƒÝšǃٚð1ÿ‹U°‰UȉUÄéêúÿÿ‹ƒáš‹‰ƒÝšǃٚð1ÿ‹“C¢‰UȉUÄé¿úÿÿ‹EØ‹P‰$ÿRéÿÿÿU‰åWVSì è~2‹EÇD$‰$ÿ˜‰…Hÿÿÿ…À„k‰Â‹ƒ‰B‹‹\”‰hÿÿÿ‰J0ƒ‰J4ƒ‰J8ƒ‰J<ƒÇE°ÇEÌÇEÈÇEÄÇEÀÇE¼ÇE¸ÇE´ÇE䋃ö‰EØ‹ƒú‰EÔ‹ƒþ‰EÐEЉD$$EÔ‰D$ E؉D$E܉D$Eà‰D$E°‰D$ƒz‰D$ ƒ^-‰D$‹E‰D$‹U ‰$èY’…À„u‹Hÿÿÿƒ‹E°ƒ‹EЃ‹…hÿÿÿ‰E¤ƒ‹»rŒ‹u°…ÿ„ë ‹F9Çt‰|$‰$èÙ’…À„Š‹u°‹U¤9UЄ9ƒ‹•Hÿÿÿ‹B0‹ƒê‰…Ò„·‹E°‹•Hÿÿÿ‰B0‹E°‹@<ƒ‹B4‹ƒê‰…Ò„É‹E°‹@<‹•Hÿÿÿ‰B4‹Eà‰B ‹E܉B‹EÔ‰B$‹EЃ‹B8‹ƒê‰…Ò„§‹EЋ•Hÿÿÿ‰B8‹ƒÖ‰D$‹E°‹@<‰$èò‰EÌ…À„Ç$èô‰EÈ…À„[‹EЃ‹UЋEȉP ‹EȉD$‹Ẻ$èT‘‰EÄ…À„”‹EÌ‹ƒê‰…Ò„ò ÇEÌ‹EÈ‹ƒê‰…Ò„È ÇEÈ‹Eĉ$èX‰EÌ…Àty‹EÄ‹ƒê‰…Ò„" ÇEÄ‹Ẻ$èë‰Æ…À„í‰uÈ…ö„²‰4$覉Æè…À„¾‹ƒúŒ‹‰ƒöŒǃòŒÏ‹U¤‰•lÿÿÿ‰•pÿÿÿë'‹ƒúŒ‹‰ƒöŒǃòŒÏ‹M¤‰lÿÿÿ‰pÿÿÿ‹UÈ…Òt‹ƒè‰…À„aÇEÈ‹UÄ…Òt‹ƒè‰…À„fÇEÄ‹UÌ…Òt‹ƒè‰…À„8ÇEÌ‹»‰|$‹ƒîŒ‰$èQ‰Æ…À„ ‰uÈ…ö„ ‰4$èC‰Æ‹EÈ‹ƒê‰…Ò„? ÇEÈ…ö…n‹“\”‰•xÿÿÿ‰•tÿÿÿ‰•|ÿÿÿ‹UÌ…Òt‹ƒè‰…À„]‹UÈ…Òt‹ƒè‰…À„6‹UÄ…Òt‹ƒè‰…À„‹UÀ…Òt‹ƒè‰…À„è‹U¼…Òt‹ƒè‰…À„Á‹U¸…Òt‹ƒè‰…À„š‹U´…Òt‹ƒè‰…À„s‹Uä…Òt‹ƒè‰…À„Lƒ‚-èGýÿ¾ÿÿÿÿ‹hÿÿÿ‹ƒè‰…À„W‹•lÿÿÿ‹ƒè‰…À„4‹M¤‹ƒè‰…À„‹•pÿÿÿ‹ƒè‰…À„ñ‹tÿÿÿ‹ƒè‰…À„΋•xÿÿÿ‹ƒè‰…À„«‹|ÿÿÿ‹ƒè‰…À„ˆ‹•Hÿÿÿ‹ƒè‰…Àtl‹E°‹ƒê‰…ÒtP‹EЋƒê‰…Òt4…öy‹Hÿÿÿ‹ƒè‰…À„ Ç…Hÿÿÿ‹…HÿÿÿÄ [^_]ËEЋP‰$ÿR뾋E°‹P‰$ÿR뢋B‰$ÿP뉋A‰ $ÿPéjÿÿÿ‹B‰$ÿPéGÿÿÿ‹A‰ $ÿPé$ÿÿÿ‹B‰$ÿPéÿÿÿ‹A‰ $ÿPéÞþÿÿ‹B‰$ÿPé¾þÿÿ‹A‰ $ÿPé›þÿÿ‹Hÿÿÿ‹A0‹P‰$ÿR‹E°‹•Hÿÿÿ‰B0‹E°‹@<ƒ‹B4‹ƒê‰…Ò…7ûÿÿ‹Hÿÿÿ‹A4‹P‰$ÿRé ûÿÿ‹Hÿÿÿ‹A8‹P‰$ÿRéBûÿÿ‹F$ƒ‹EЋƒê‰…Ò„%‹u°‹F$‰EÐé¡úÿÿ‹ƒúŒ‹‰ƒöŒǃòŒÔ‹ƒ\”‰…xÿÿÿ‰…tÿÿÿ‰…|ÿÿÿéýÿÿ‹Eä‹P‰$ÿRé£ýÿÿ‹E´‹P‰$ÿRé|ýÿÿ‹E¸‹P‰$ÿRéUýÿÿ‹E¼‹P‰$ÿRé.ýÿÿ‹EÀ‹P‰$ÿRéýÿÿ‹EÄ‹P‰$ÿRéàüÿÿ‹EÈ‹P‰$ÿRé¹üÿÿ‹EÌ‹P‰$ÿRé’üÿÿ‹ƒúŒ‹‰ƒöŒǃòŒÏ‹E¤‰…lÿÿÿ‰…pÿÿÿé‰ûÿÿ‹EÈ‹P‰$ÿRéŽûÿÿ‹EÌ‹P‰$ÿRé·ûÿÿ‹EÄ‹P‰$ÿRé‰ûÿÿ‹F‹@ ‰D$‹G ‰D$ ƒZ$‰D$ƒF‰D$‹ƒ˜”‹‰$èÊ‹ƒúŒ‹‰ƒöŒǃòŒ¾‹M¤‰lÿÿÿ‰tÿÿÿ‰pÿÿÿ‰|ÿÿÿ‰xÿÿÿéªûÿÿƒf-èlCýÿMÈUÌEÄèÈ@ýÿ…Àˆû‹EÄ‹ƒê‰…Ò„–ÇEÄ‹EÌ‹ƒê‰…Ò„lÇEÌ‹EÈ‹ƒê‰…Ò„BÇEÈ‹}Ø…ÿˆ§ ‹EØ‹Hÿÿÿ‰A‹ƒ\”ƒ‹E¤‰Eœ‰Â‹ƒè‰…À„ö‹uà…öˆh ‹E°‹@<ƒx<„‹EàEÔ‰$èrЉE¼…À„=‹EÜEÔ‰$èYЉE¸…À„< Ç$èÀ‰‰Â‰E´…À„³ ‹E¼‰B ‹U¸‹E´‰PÇE¼ÇE¸è;Š‰Â‰Eä…À„Ü‹E°‰D$‹ƒ¦Ž‰D$‰$謉…ÀˆÓ‹Eä‰D$‹E´‰D$‹ƒbŒ‰$諉‰EÌ…À„< ‹E´‹ƒê‰…Ò„8 ÇE´‹E䋃ꉅ҄ ÇEä‹•lÿÿÿ‹ƒè‰…À„ä ‹M̉lÿÿÿÇEÌ‹A‰ $ÿP‰…XÿÿÿƒÀ„ì ‹Xÿÿÿ…ÉŽ+Ç…Pÿÿÿ1ÿ‰ú‹…lÿÿÿP‹+EÔ‰‰ú‹lÿÿÿQ‹B+EÔ‰B‹…lÿÿÿ‹H‹r‹EÜ9Æ~!B)ð‰B‹lÿÿÿ‹Q‹E܉D:‹…lÿÿÿ‹H‹ ‹Eà9Á}B )ȉB ‹lÿÿÿ‹Q‹Eà‰:ƒ…PÿÿÿƒÇ‹…Pÿÿÿ9…Xÿÿÿ…dÿÿÿ‹E°‹P…Ò…l ‹@<‹P,‹x‹G‹@4…À„! ‹@ …À„ ‰T$‰<$è!ˆ‰Ç‰}È…ÿ„ñ ‹³rŒ…ö„;»\”t‹G9Æt‰t$‰$轈…À„ ‹hÿÿÿ‹ƒè‰…À„à ‹MȉhÿÿÿÇEÈ‹½Xÿÿÿ…ÿŽÕÇE ÇE”‹ƒ\”‰…Dÿÿÿ‹•lÿÿÿ‹J‹E”‹T‹…hÿÿÿ;P „¥‹E°‹@<‹x‹G‹@4…À„† ‹p …ö„{ ‰T$‰<$èI‡‰Ç‰}Ä…ÿ„À%‹³rŒ…ö„c%;»\”t‹G9ðt‰t$‰$è凅À„ã&‹•hÿÿÿ‹ƒè‰…À„‘‹MĉhÿÿÿÇEÄ‹I…É„”%‹•lÿÿÿ‹J‹…Dÿÿÿ9E¤„r‹U”Ê‹E¤‹H‹…hÿÿÿ‰D$‹…Dÿÿÿ‰D$ ‹B‰D$‹B ‰D$‹U¤‰$ÿƒøþ„Œ)‹U¤‹B‰$ÿPƒÀ„Ó&‹U¤‹R‰•Lÿÿÿ…ÒŽj‹M¤‹I‰MÇ…Tÿÿÿ‰Êër‹…lÿÿÿ‹@‰…4ÿÿÿ‰T$‰L$‰t$ ‹•dÿÿÿ‰T$‹`ÿÿÿ‰L$‹…lÿÿÿ‰$‹•4ÿÿÿÿR‹hÿÿÿ‹A ;„V ƒ…TÿÿÿƒE‹…Tÿÿÿ9…Lÿÿÿ„ä‹U‹M”‹…lÿÿÿH‹q ‹:9þ‰ðNlj…\ÿÿÿ‹Q‹E‹@9ÂMЋ‹\ÿÿÿÁ)ñ‰`ÿÿÿ)ð‰…dÿÿÿ‹M‹A ‹\ÿÿÿÁ)ùÂ)ú‹}ƒÇ‹E‹p;uØ…ÿÿÿ9`ÿÿÿ…ÿÿÿ‹E°‹@<ƒx<…Aÿÿÿéûþÿÿ‹EÈ‹P‰$ÿRé°õÿÿƒ2‰D$‹ƒŒ”‹‰$蘄éÐùÿÿ‹EÈ‹P‰$ÿRé'ôÿÿ‹EÌ‹P‰$ÿRéýóÿÿ‹ƒúŒ‹‰ƒöŒǃòŒâ‹E¤‰…xÿÿÿ‰…tÿÿÿ‰…|ÿÿÿédõÿÿ‹A‰ $ÿPÇ…Hÿÿÿéìöÿÿ‰|$‹ƒx”‹‰$èr„éåôÿÿ‹EÄ‹P‰$ÿRéÍóÿÿ‹EЋP‰$ÿRéÊ÷ÿÿ‹B‰$ÿPéüùÿÿ‹EÈ‹P‰$ÿRé­ùÿÿ‹EÌ‹P‰$ÿRéƒùÿÿ‹EÄ‹P‰$ÿRéYùÿÿ‹Eà‰$èY„‰EÄ…À„š‹E܉$èC„‰EÌ…À„èÇ$誃‰Â‰EÈ…À„‹EĉB ‹UÌ‹EȉPÇEÄÇEÌè%„‰EÄ…À„>‹Eà‰$è烉EÌ…À„Œ‹E܉$èу‰EÀ…À„¹‹E°‹@ ƒè‰$赃‰E¼…À„ö‹EàEÔ‰$蜃‰E¸…À„» ‹EÜEÔ‰$胃‰E´…À„ŒÇ$èꂉ‰Eä…À„>‹ẺB ‹UÀ‹Eä‰P‹U¼‹Eä‰P‹U¸‹Eä‰P‹U´‹Eä‰PÇEÌÇEÀÇE¼ÇE¸ÇE´Ç$è„‚‰Â‰EÌ…À„Ò‹Eä‰B ÇEä‹ẺD$‹ƒöމD$‹Eĉ$è‚…ÀˆZ ‹EÌ‹ƒê‰…Ò„7 ÇEÌ‹EĉD$‹EȉD$‹ƒbŒ‰$èu‚‰EÀ…À„g ‹EÈ‹ƒê‰…Ò„æÇEÈ‹EÄ‹ƒê‰…Ò„¼ÇEÄ‹•lÿÿÿ‹ƒè‰…À„’‹MÀ‰lÿÿÿÇEÀÇ…Xÿÿÿé‰ùÿÿ‹ƒúŒ‹‰ƒöŒǃòŒÔ‹“\”‰•xÿÿÿ‰•tÿÿÿ‰•|ÿÿÿéYòÿÿ‹EÈ‹ƒê‰…Ò„½ÇEȉuØ‹Ẻ$èډƅÀ„ý‰uÄ…ö„/ñÿÿ‹“\”‹ƒè‰…À„Á‹Eĉ…pÿÿÿÇEÄ‹Ẻ$蕉…À„*‹ƒè‰…À„›ƒb*‰D$‹ƒH”‹‰$èr€‹ƒúŒ‹‰ƒöŒǃòŒÏ‹U¤‰•lÿÿÿéÍðÿÿ÷]Ôéöÿÿ‹E°‹@ ‰EØéNöÿÿ‹ƒúŒ‹‰ƒöŒǃòŒâ‹U¤‰•xÿÿÿ‰•tÿÿÿ‰•|ÿÿÿéLñÿÿè,€…À…ðÿÿƒb*‰D$‹ƒH”‹‰$èÝéçïÿÿ‹ƒúŒ‹‰ƒöŒǃòŒÞ‹M¤‰xÿÿÿ‰tÿÿÿ‰|ÿÿÿéîðÿÿ‹ƒúŒ‹‰ƒöŒǃòŒâ‹M¤‰xÿÿÿ‰tÿÿÿ‰|ÿÿÿé¼ðÿÿ‹ƒúŒ‹‰ƒöŒǃòŒÞ‹E¤‰…xÿÿÿ‰…tÿÿÿ‰…|ÿÿÿéŠðÿÿ‹EÈ‹P‰$ÿRé2þÿÿ‹ƒúŒ‹‰ƒöŒǃòŒÞ‹U¤‰•xÿÿÿ‰•tÿÿÿ‰•|ÿÿÿéGðÿÿ‹B‰$ÿPé1þÿÿ‹B‰$ÿPéWþÿÿè …À…öýÿÿƒb*‰D$‹ƒH”‹‰$è¼~é×ýÿÿ‹B‰$ÿPéöÿÿ‹Eä‹P‰$ÿRéáõÿÿ‹E´‹P‰$ÿRé·õÿÿ‹ƒúŒ‹‰ƒöŒǃòŒã‹ƒ\”‰…xÿÿÿ‰…tÿÿÿ‰…|ÿÿÿéšïÿÿƒE ƒE”‹U 9•Xÿÿÿ…E÷ÿÿ‹lÿÿÿ‹Q…ÒŽY‹M¤‹A‹•lÿÿÿ‰T$‰ $ÿP ‹ƒnމD$‹M¤‰ $è@~‰E´…À„‡ÇD$‰$èÊ~‰Eä…À„¢ ‹E´‹ƒê‰…Ò„ ÇE´‹Eä‰$è}~‰ÆèÛ}…À„ ‹ƒúŒ‹‰ƒöŒǃòŒ‹‹\”‰xÿÿÿ‰tÿÿÿ‰|ÿÿÿé¹îÿÿè™}…À…òüÿÿ‹EÌ‹ƒê‰…Òu ‹EÌ‹P‰$ÿRÇEÌ‹EØ‹Hÿÿÿ‰A‹Eà‰$è~‰EÈ…À„ ‹E܉$èò}‰EÄ…À„š Ç$èY}‰Â‰EÌ…À„š‹EȉB ‹UÄ‹ẺPÇEÈÇEÄèÔ}‰Â‰EÈ…À„Á ‹pÿÿÿ‰L$‹ƒöމD$‰$èB}…Àˆ ‹EȉD$‹ẺD$‹ƒbŒ‰$èA}‰EÄ…À„ ‹EÌ‹ƒê‰…Òu ‹EÌ‹P‰$ÿRÇEÌ‹EÈ‹ƒê‰…Òu ‹EÈ‹P‰$ÿRÇEÈ‹M¤‹ƒè‰…Àu ‹A‰ $ÿP‹Eĉ…lÿÿÿÇEÄ‹Eà‰$èà|‰EÌ…À„T‹E܉$èÊ|‰EÈ…À„>Ç$è1|‰Â‰EÄ…À„%‹ẺB ‹UÈ‹EĉPÇEÌÇEÈ‹EĉD$‹ƒbŒ‰$è~|‰EÌ…À„è‹EÄ‹ƒê‰…Òu ‹EÄ‹P‰$ÿRÇEÄ‹U¤‹ƒè‰…Àu ‹B‰$ÿP‹M̉M¤ÇEÌéýÿÿ‹Eà‰$è|‰E¸…À„u‹E܉$èþ{‰E´…À„~Ç$èe{‰Â‰Eä…À„X‹E¸‰B ‹U´‹Eä‰PÇE¸ÇE´‹Eä‰D$‹ƒbŒ‰$è²{‰EÌ…À„ ‹E䋃ꉅÒu ‹Eä‹P‰$ÿRÇEä‹Mœ‹ƒè‰…Àu ‹A‰ $ÿP‹ẺE¤ÇEÌé<üÿÿ‰$èK{‰Æ…À„ñ‰D$‰<$è{‰Ç‹ƒè‰…À…Éòÿÿ‹F‰4$ÿPé»òÿÿ‰$è{‰Æ…À„P‰D$‰<$èR{‰Ç‹ƒè‰…À…dóÿÿ‹F‰4$ÿPéVóÿÿ‹ƒ¬”‹‰$è)z‹ƒúŒ‹‰ƒöŒǃòŒ‹“\”‰•xÿÿÿ‰•tÿÿÿ‰•|ÿÿÿéëÿÿ‹ƒúŒ‹‰ƒöŒǃòŒó‹“\”‰•xÿÿÿ‰•tÿÿÿ‰•|ÿÿÿéËêÿÿ‹ƒúŒ‹‰ƒöŒǃòŒõ‹“\”‰•xÿÿÿ‰•tÿÿÿ‰•|ÿÿÿé–êÿÿ‹•hÿÿÿ‹B‰$ÿPé òÿÿ‹»šŽ‰|$‹ƒêŒ‰$ècy‰Æ…À„q ‰uÈ…ö„1 ‹ƒ.‰D$‰4$èýÿ…Àxh‹E¸‹ƒê‰…Òu ‹E¸‹P‰$ÿRÇE¸‹E´‹ƒê‰…Òu ‹E´‹P‰$ÿRÇE´‹E䋃ꉅÒu ‹Eä‹P‰$ÿRÇEäéãúÿÿ‹ƒúŒ‹‰ƒöŒǃòŒ5é~Øÿÿ‹»šŽ‰|$‹ƒêŒ‰$è_g‰Æ…Àu‰|$‹ƒx”‹‰$è†g‰uÀ…ö„q‹ƒZ‰D$‰4$è(g‰E¼…À„T‹EÀ‹ƒê‰…Òu ‹EÀ‹P‰$ÿRÇEÀÇD$‹E¼‰$èŽg‰E¸…À„‹E¼‹ƒê‰…Òu ‹E¼‹P‰$ÿRÇE¼‹Hÿÿÿ‹A<‹ƒê‰…Òu ‹A<‹P‰$ÿR‹E¸‹•Hÿÿÿ‰B<ÇE¸Ç$è—f‰EÌ…À„‹xÿÿÿƒ‹ẺH ‹•Hÿÿÿ‹B<ƒ‹Hÿÿÿ‹Q<‹ẺP‹ẺD$‹…tÿÿÿ‰$èÙf‰Eä…ÀtG‹EÌ‹ƒê‰…Òu ‹EÌ‹P‰$ÿRÇEÌ‹E䋃ꉅÒu ‹Eä‹P‰$ÿRÇEäéƒúÿÿ‹ƒúŒ‹‰ƒöŒǃòŒ=éÐÖÿÿ‹ƒúŒ‹‰ƒöŒǃòŒ<é³Öÿÿ‹ƒúŒ‹‰ƒöŒǃòŒ;é–Öÿÿ‹ƒúŒ‹‰ƒöŒǃòŒ3‰µ|ÿÿÿéüÿÿ‰µ|ÿÿÿé°øÿÿ‹ƒúŒ‹‰ƒöŒǃòŒ0‰µ|ÿÿÿ‰µxÿÿÿé?Öÿÿ‹ƒ\”‰…|ÿÿÿ‰…xÿÿÿ1öéæÖÿÿ‹ƒúŒ‹‰ƒöŒǃòŒ,‹UÄ…Òt‹ƒè‰…Àu ‹EÄ‹P‰$ÿRÇEÄ‹UÀ…Òt‹ƒè‰…Àu ‹EÀ‹P‰$ÿRÇEÀ‹U¼…Òt‹ƒè‰…Àu ‹E¼‹P‰$ÿRÇE¼‹U¸…Òt‹ƒè‰…Àu ‹E¸‹P‰$ÿRÇE¸‹U´…Òt‹ƒè‰…Àu ‹E´‹P‰$ÿRÇE´‹Uä…Òt‹ƒè‰…Àu ‹Eä‹P‰$ÿRÇEä‹UÈ…Òt‹ƒè‰…Àu ‹EÈ‹P‰$ÿRÇEÈ‹UÌ…Òt‹ƒè‰…Àu ‹EÌ‹P‰$ÿRÇEÌ‹»‰|$‹ƒîŒ‰$èÇc‰Æ…Àu‰|$‹ƒx”‹‰$èîc‰uÄ…ötP‰4$è­c‰Æ‹EÄ‹ƒê‰…Òu ‹EÄ‹P‰$ÿRÇEÄ…ö…‡‹ƒ\”‰…xÿÿÿ‰…tÿÿÿ‰…|ÿÿÿé]Ôÿÿ‹ƒúŒ‹‰ƒöŒǃòŒ-‹‹\”‰xÿÿÿ‰tÿÿÿ‰|ÿÿÿé(Ôÿÿ‹ƒúŒ‹‰ƒöŒǃòŒ)‹ƒ\”‰…xÿÿÿ‰…tÿÿÿ‰…|ÿÿÿéóÓÿÿƒf-èµýÿM¸U¼EÀèýÿ…Àˆ‚‹EÀ‹ƒê‰…Òu ‹EÀ‹P‰$ÿRÇEÀ‹E¼‹ƒê‰…Òu ‹E¼‹P‰$ÿRÇE¼‹E¸‹ƒê‰…Òu ‹E¸‹P‰$ÿRÇE¸‹‹\”‰xÿÿÿ‰tÿÿÿ‰|ÿÿÿ1öéÔÿÿ‹ƒúŒ‹‰ƒöŒǃòŒ-‹“\”‰•xÿÿÿ‰•tÿÿÿ‰•|ÿÿÿéÓÿÿ‹B‰$ÿPé`àÿÿ‹EÄ‹P‰$ÿRé3àÿÿ‹EÈ‹P‰$ÿRé àÿÿ‹EÌ‹P‰$ÿRé¸ßÿÿ‹ƒúŒ‹‰ƒöŒǃòŒÞ‹“\”‰•xÿÿÿ‰•tÿÿÿ‰•|ÿÿÿé¥Òÿÿ‹ƒúŒ‹‰ƒöŒǃòŒü‹M¤‰xÿÿÿ‰tÿÿÿ‰|ÿÿÿésÒÿÿƒ2‰D$‹ƒŒ”‹‰$è4a‹ƒúŒ‹‰ƒöŒǃòŒø‹‹\”‰xÿÿÿ‰tÿÿÿ‰|ÿÿÿé$Òÿÿ‹ƒúŒ‹‰ƒöŒǃòŒø‹“\”‰•xÿÿÿ‰•tÿÿÿ‰•|ÿÿÿéïÑÿÿÇ$èõ`‰EÀ…À„¶‹ƒÖƒ‹“Ö‹EÀ‰P ‹EÀ‰D$‹ƒH”‹‰$èJa‰E¼…ÀtN‹EÀ‹ƒê‰…Òu ‹EÀ‹P‰$ÿRÇEÀ‹E¼1É1Òè¦ýÿ‹E¼‹ƒê‰…Òu ‹E¼‹P‰$ÿRÇE¼‹ƒúŒ‹‰ƒöŒǃòŒú‹ƒ\”‰…xÿÿÿ‰…tÿÿÿ‰…|ÿÿÿé"Ñÿÿ‹ƒúŒ‹‰ƒöŒǃòŒú‹‹\”‰xÿÿÿ‰tÿÿÿ‰|ÿÿÿéíÐÿÿ‹ƒúŒ‹‰ƒöŒǃòŒÒé Ðÿÿ‹F ‰D$ ‹G‹@ ‰D$ƒ‚$‰D$‹ƒ˜”‹‰$è€_éGþÿÿ‹ƒúŒ‹‰ƒöŒǃòŒÑ‹M¤‰lÿÿÿé³Ïÿÿ‹ƒúŒ‹‰ƒöŒǃòŒ)‹“\”‰•xÿÿÿ‰•tÿÿÿ‰•|ÿÿÿéEÐÿÿ‹ƒúŒ‹‰ƒöŒǃòŒ‹ƒ\”‰…xÿÿÿ‰…tÿÿÿ‰…|ÿÿÿéÐÿÿ‹E¼‹P‰$ÿRéæÿÿ‹EÀ‹P‰$ÿRéKæÿÿ‰|$‹ƒx”‹‰$è_éµíÿÿ1ÿÇE˜ÇEŒéõ‹Hÿÿÿ‹A,‹UŒ‹D‰$è<_‰EÈ…À„JÇ$è£^‰Â‰EÄ…À„ü‹EȉB ÇEÈ‹EĉD$‹Ẻ$è_‰EÀ…À„µ‹EÌ‹ƒê‰…Òu ‹EÌ‹P‰$ÿRÇEÌ‹EÄ‹ƒê‰…Òu ‹EÄ‹P‰$ÿRÇEÄ‹EÀ‰$è^‰Æ…Àˆ°‹EÀ‹ƒê‰…Òu ‹EÀ‹P‰$ÿRÇEÀƒþƒU˜ƒÇƒEŒ9}„„ëÿÿ‹ƒ2މD$‹E°‹@<‹@‰$è©]‰EÌ…À…åþÿÿ‹ƒúŒ‹‰ƒöŒǃòŒ#é¦ìÿÿ‹ƒúŒ‹‰ƒöŒǃòŒ#‹“\”‰•xÿÿÿ‰•tÿÿÿ‰•|ÿÿÿéSÎÿÿ‹ƒúŒ‹‰ƒöŒǃòŒ#é¼ùÿÿ‹Eä‹P‰$ÿRéÙéÿÿ‹E¼‹ƒê‰…Òu ‹E¼‹P‰$ÿRÇE¼‰÷é%îÿÿ‰|$‹ƒx”‹‰$è#]éíæÿÿ‹E¸‹P‰$ÿRé¶çÿÿ‹ƒúŒ‹‰ƒöŒǃòŒü‹U¤‰•xÿÿÿ‰•tÿÿÿ‰•|ÿÿÿé¡Íÿÿ‹ƒúŒ‹‰ƒöŒǃòŒÿ‹Dÿÿÿ‰xÿÿÿ‰tÿÿÿ‰|ÿÿÿélÍÿÿ‹E¼‹P‰$ÿRéçÿÿ‹EÀ‹P‰$ÿRéïæÿÿ‹ƒúŒ‹‰ƒöŒǃòŒ‹‹\”‰xÿÿÿ‰tÿÿÿ‰|ÿÿÿéÍÿÿ‹EÄ‹P‰$ÿRéGæÿÿU‰åWVSìèzûÇEÀÇE¸ÇE´ÇE°ÇE¬ÇE¤ÇE ÇEœÇE䋃 Z‰E˜‹ƒZ‰Eà‹ƒZ‰EÜ‹ƒZ‰EØ‹ƒZ‰EÔ‹ƒZ‰EЋƒ"Z‰EÌ‹ƒ&Z‰EÈ‹ƒ*Z‰EÄUE ÇD$ MÀ‰L$ÇD$Ç$ ‹žHèÞ ýÿ…Àˆ] EĉD$0EȉD$,ẺD$(EЉD$$EÔ‰D$ E؉D$E܉D$Eà‰D$E˜‰D$ƒžH‰D$ ƒþö‰D$‹E‰D$‹E ‰$è$[…À„©‹Eƒ‹E؃‹EÔƒ‹EЃ‹Ẽ‹Eȃ‹Eă‹³X]ƒ ‹U‹B0‹@<ƒ‹ƒè‰…À„Ø‹M‹A0‹@<‰E”‹EЉ$ègZ‰E¼ƒøŒá…ˆ‹³X]1À9uÔ•À‰E¼…À…P‰µPÿÿÿ‰µLÿÿÿ‰µTÿÿÿèÔZ‰E¬…À„0M‹³X]‹ƒè‰…À„j‹M¬‰XÿÿÿÇE¬‹U‹B‰E¼…À€‹ƒX]‰…\ÿÿÿ‹ƒ:W‰D$‹•Xÿÿÿ‰$è¬Y‰E¬…À„%@ÇD$‰$è6Z‰E´…À„¡T‹E¬‹ƒê‰…Ò„­SÇE¬‹E´‰$èSY‰…lÿÿÿ…À„+V‹E´‹ƒê‰…Ò„ôSÇE´‹‹X]‰dÿÿÿ‰`ÿÿÿ‰hÿÿÿ‹…lÿÿÿ‰$èÄY‰Eœ…À„‰$èóX‰E¸…À„'l‹Eœ‹ƒê‰…Ò„‘;ÇEœ‹E¸‰$è‚Y‰Æ…À„ŒS‰u°…ö„uo‰4$è=Y‰E¨èšX…À…-l‹E°‹ƒê‰…Ò„Q;ÇE°‹}¨‹E¸‰$è.Y‰Æ…À„dS‰u¤…ö„%i‹•`ÿÿÿ‹ƒè‰…À„#;‹M¤‰`ÿÿÿÇE¤‹E¸‰$èéX‰Â…À…ˆhèX…À…¤h‹E¸‹ƒê‰…Ò„í:ÇE¸‹ƒX]9EÄ•À¶À‰E¼…À„J‹ƒþV‰D$‹U”‹B‰$èØW‰E …À„kh‰<$è`X‰E¬…À„$kÇ$èÇW‰Â‰E´…À„îj‹E¬‰B ÇE¬‹E´‰D$‹E ‰$è'X‰Eœ…À„vp‹E ‹ƒê‰…Ò„ÁMÇE ‹E´‹ƒê‰…Ò„—MÇE´Ç$èRW‰E°…À„vi‹`ÿÿÿƒ‹E°‰H ‹Uœ‹E°‰PÇEœèÍW‰Â‰E¤…À„i‹E‰D$‹ƒzW‰D$‰$è>W…ÀˆAi‹E˜‰$èlW‰E¸…À„¼i‰D$‹ƒZW‰D$‹E¤‰$èW…Àˆ~i‹E¸‹ƒê‰…Ò„DMÇE¸‹Eà‰$èW‰E¬…À„2i‰D$‹ƒ^W‰D$‹E¤‰$è·V…Àˆmj‹E¬‹ƒê‰…Ò„MÇE¬‹E܉$èÌV‰E …À„m‰D$‹ƒvW‰D$‹E¤‰$ègV…ÀˆRm‹E ‹ƒê‰…Ò„¼LÇE ‹E؉D$‹ƒæV‰D$‹E¤‰$è*V…Àˆˆm‹EȉD$‹ƒfW‰D$‹E¤‰$èV…Àˆžm‹EÀ‰D$‹E¤‰$èªV…Àˆgm‹E¤‰D$‹E°‰D$‹Eĉ$èîU‰E´…À„ai‹E°‹ƒê‰…Ò„”LÇE°‹E¤‹ƒê‰…Ò„jLÇE¤‹E´‹ƒê‰…Ò„@LÇE´‹…lÿÿÿ‰$è¼U‰Eœ…À…øûÿÿèéT…À„„r‹ƒöU‹‰ƒòUǃîU éÞè–U‰E¸…À„gH‹ƒè‰…À„@ ‹U¸‰•LÿÿÿÇE¸‹EÔ‰$èT‰E¸…À„M‰µTÿÿÿ‰µPÿÿÿ‰µÿÿÿëpÇD$‰$èÎT‰Æ‰u°…ö„¹Q‹E´‰D$‰t$‹…Lÿÿÿ‰$èvT…ÀˆãQ‹E°‹ƒê‰…Ò„ ÇE°‹E´‹ƒê‰…Ò„éÇE´‹E¸‰$è³T‰E´…À„—O‹Pÿÿÿ‹ƒè‰…À„y‹E´‰…PÿÿÿÇE´‹ƒúV‰D$‹U”‹B‰$è¼S‰E´…À„§OÇ$è¾S‰E°…À„ÛO‹Pÿÿÿƒ‹E°‰H ‹E°‰D$‹E´‰$èT‰E¬…À„úO‹E´‹ƒê‰…Ò„ÇE´‹E°‹ƒê‰…Ò„ôÇE°‹•Tÿÿÿ‹ƒè‰…À„Ê‹M¬‰TÿÿÿÇE¬ÇD$ÿÿÿÇD$‰ $è!T‰E´…À„P‹•Tÿÿÿ‹B‹@4…Àt ‹@ …À…ZþÿÿÇ$èhS‰Ç…À„^ ‰D$‹Tÿÿÿ‰ $è¦S‰Æ‹ƒè‰…À…3þÿÿ‹G‰<$ÿPé%þÿÿ‹F‰4$ÿP‹M‹A0‹@<‰E”‹EЉ$è†R‰E¼ƒøøÿÿ‹ƒöU‹‰ƒòUǃîUïÇ…lÿÿÿ‰µPÿÿÿ‰µLÿÿÿ‰µXÿÿÿ‰µTÿÿÿ‰µ`ÿÿÿ‰µ\ÿÿÿ‰µhÿÿÿ‰µdÿÿÿé‹U …Òt‹ƒè‰…Àu ‹E ‹P‰$ÿR‹U…Òt‹ƒè‰…Àu ‹E‹P‰$ÿR‹UÀ…Ò…yC1ö‰ðÄ[^_]ÃÇE˜'ÇEà'ÇEÜöÿÿÿÇ$PÃè3R‰E¸…À„oK‹EÌ‹ƒê‰…Ò„«G‹E¸‰EÌÇE¸‹³X]1À9uÔ•À‰E¼…À…}üÿÿé(÷ÿÿÇ…,ÿÿÿ‰µ\ÿÿÿÇE‰µÿÿÿéÇE´‹E¸‹ƒê‰…Ò„¾ÇE¸‹E¬‰$èQ‰E¨…ÀˆÈZ‹E¬‹ƒê‰…Ò„ÛÇE¬‹}¨…ÿ…¦‹M‹Q(‹EЋ‰Dÿÿÿ‹H‰Hÿÿÿ‹H ‰<ÿÿÿ‹@‰…@ÿÿÿ‹µÿÿÿ1À9uÔ•À‰E¨…À„’‹E‹T‹Lÿÿÿ‹A‹@4…À„Û2‹p …ö„Ð2‰T$‰ $èºP‰Æ‰u°…öt\‰4$è;P‰E´…ÀtM‹E°‹ƒê‰…Ò„JÇE°‹E´‰$èÎP‰Æ…À„.W‰u¸…öt‰4$èP‰E¨èêO…À„kU‹ƒöU‹‰ƒòUǃîU‹U°…Òt‹ƒè‰…À„ñCÇE°‹U¸…Òt‹ƒè‰…À„ÃCÇE¸‹U¬…Òt‹ƒè‰…À„•CÇE¬‹U´…Òt‹ƒè‰…À„gCÇE´‹ƒT]‹‰$èiO‰E¨…À„Á\ƒ ÷èýÿM¬U¸E°ètýÿ…Àˆa\ƒ…,ÿÿÿƒE‹,ÿÿÿ;M¼Põÿÿ‹ƒ.W‰D$‹U”‹B‰$èüN‰E´…À„½Y‹M‹A(‹U‹D‰$èwO‰E°…À„^YÇ$èÞN‰Â‰E¸…À„Y‹E°‰B ÇE°‹E¸‰D$‹E´‰$è>O‰E¬…À„X‹E´‹ƒê‰…Ò…Nýÿÿ‹E´‹P‰$ÿRÇE´‹E¸‹ƒê‰…Ò…Býÿÿ‹E¸‹P‰$ÿRé1ýÿÿ‹ƒöU‹‰ƒòUǃîUöÇ…lÿÿÿ‰µTÿÿÿ‰µPÿÿÿ‰µ\ÿÿÿ‰µXÿÿÿ‰µdÿÿÿ‰µ`ÿÿÿ‰µhÿÿÿ‹U¸…Òt‹ƒè‰…À„¹‹U´…Òt‹ƒè‰…À„´‹U°…Òt‹ƒè‰…À„¯‹U¬…Òt‹ƒè‰…À„ª‹U¤…Òt‹ƒè‰…À„¥‹U …Òt‹ƒè‰…À„ ‹…lÿÿÿ…Àt‹•lÿÿÿ‹ƒè‰…À„’‹Uœ…Òt‹ƒè‰…À„Š‹Uä…Òt‹ƒè‰…À„Þƒ.÷èôýÿ1ö‹UÀ…Òt‹ƒè‰…À„Ì‹M”‹ƒè‰…À„í‹•Lÿÿÿ‹ƒè‰…À„Ê‹Pÿÿÿ‹ƒè‰…À„§‹•Tÿÿÿ‹ƒè‰…À„„‹Xÿÿÿ‹ƒè‰…À„a‹•\ÿÿÿ‹ƒè‰…À„>‹`ÿÿÿ‹ƒè‰…À„‹•dÿÿÿ‹ƒè‰…À„ø‹hÿÿÿ‹ƒè‰…À„Õ‹U‹ƒè‰…À„µ‹EØ‹ƒê‰…Ò„’‹EÔ‹ƒê‰…Ò„o‹EЋƒê‰…Ò„L‹EÌ‹ƒê‰…Ò„)‹EÈ‹ƒê‰…Ò„è‹EÄ‹ƒê‰…Ò„ô‹U …Òt‹ƒè‰…À„\‹U…Ò„éùÿÿ‹ƒè‰…À…Úùÿÿ‹E‹P‰$ÿR‰ðÄ[^_]ËF‰4$ÿPéˆñÿÿ‹F‰4$ÿPé²öÿÿ‹A‰ $ÿPéy÷ÿÿ‹B‰$ÿPé(øÿÿ‹E°‹P‰$ÿRéû÷ÿÿ‹E´‹P‰$ÿRéÑ÷ÿÿ‹E´‹P‰$ÿRé÷ÿÿ‹E°‹P‰$ÿRéÜöÿÿ‹E¬‹P‰$ÿRéúÿÿ‹EÈ‹P‰$ÿR‹EÄ‹ƒê‰…Ò… ÿÿÿ‹EÄ‹P‰$ÿRéûþÿÿ‹EÌ‹P‰$ÿRéÆþÿÿ‹EЋP‰$ÿRé£þÿÿ‹EÔ‹P‰$ÿRé€þÿÿ‹EØ‹P‰$ÿRé]þÿÿ‹B‰$ÿPé=þÿÿ‹A‰ $ÿPéþÿÿ‹B‰$ÿPéúýÿÿ‹A‰ $ÿPé×ýÿÿ‹B‰$ÿPé´ýÿÿ‹A‰ $ÿPé‘ýÿÿ‹B‰$ÿPénýÿÿ‹A‰ $ÿPéKýÿÿ‹B‰$ÿPé(ýÿÿ‹A‰ $ÿPéýÿÿ1À9uØ•À‰E¨…À…í1‹M‹T ‹Xÿÿÿ‹A‹@4…À„º,‹@ …À„¯,‰T$‰ $èJ‰Æ‰u°…ö„l0‹ƒ’V‰D$‰4$è—I‰E¸…À„y‹E°‹ƒê‰…Ò„èCÇE°‹•Dÿÿÿ‰$èJ‰E¬…À„G‹Hÿÿÿ‰ $èçI‰E´…À„.‹…<ÿÿÿ‰$èÎI‰E°…À„‹•@ÿÿÿ‰$èµI‰E¤…À„üÇ$è?I‰E …À„å‹P ‹E¬‰‹E ‹P ‹E´‰B‹E ‹P ‹E°‰B‹E ‹P ‹E¤‰B ‹ƒX]ƒ‹U ‹R ‰BÇE¬ÇE´ÇE°ÇE¤Ç$è«H‰Â‰E¬…Àtv‹E ‰B ÇE ‹E¬‰D$‹E¸‰$èI‰E´…ÀtP‹E¸‹ƒê‰…Ò„mSÇE¸‹E¬‹ƒê‰…Ò„CSÇE¬‹E´‹ƒê‰…Ò„LSÇE´éåøÿÿ‹ƒöU‹‰ƒòUǃîU‹U°…Òt‹ƒè‰…À„>ÇE°‹U¤…Òt‹ƒè‰…À„Ö=ÇE¤‹U …Òt‹ƒè‰…À„¨=ÇE ‹U¸…Òt‹ƒè‰…À„z=ÇE¸‹U¬…Òt‹ƒè‰…À„L=ÇE¬‹U´…Òt‹ƒè‰…À„=ÇE´‹ƒT]‹‰$èLG‰E¨…À„ÓUƒ ÷èûÿüÿM U¤E°èWýüÿ…ÀˆsU‹Dÿÿÿ‰ $èžG‰E¸…À„U‹…Hÿÿÿ‰$è…G‰E¬…À„ÃT‹•<ÿÿÿ‰$èlG‰E´…À„1V‹@ÿÿÿ‰ $èSG‰…lÿÿÿ…À„àUÇ$èÚF‰Eœ…À„”U‹P ‹E¸‰‹Eœ‹P ‹E¬‰B‹Eœ‹P ‹E´‰B‹Eœ‹@ ‹•lÿÿÿ‰P ‹³X]ƒ‹Eœ‹@ ‰pÇE¸ÇE¬ÇE´Ç$èmF‰E¸…À„îT‹P ‹Eœ‰ÇEœ‹}¸‹M‹A(‹M‹T‹Xÿÿÿ‹A‹@4…À„#)‹@ …À„)‰|$‰T$‰ $èAF‰Ç…ÿˆfQ‹E¸‹ƒê‰…Ò„b2ÇE¸‹E°‹ƒê‰…Ò„k2ÇE°‹E¤‹ƒê‰…Ò„A2ÇE¤‹E ‹ƒê‰…Ò„2ÇE é7öÿÿ1öéñðÿÿ‹E ‹P‰$ÿRé“ùÿÿ‹Eä‹P‰$ÿRéøÿÿ‹EÀ‹P‰$ÿRé#øÿÿ‹E¸‹P‰$ÿRé6÷ÿÿ‹E´‹P‰$ÿRé;÷ÿÿ‹E°‹P‰$ÿRé@÷ÿÿ‹E¬‹P‰$ÿRéE÷ÿÿ‹E¤‹P‰$ÿRéJ÷ÿÿ‹E ‹P‰$ÿRéO÷ÿÿ‹B‰$ÿPé`÷ÿÿ‹Eœ‹P‰$ÿRée÷ÿÿ‹•`ÿÿÿ‰$èˆE‰…pÿÿÿƒÀ„ \ƒ½pÿÿÿ޽:Ç…0ÿÿÿÇ…4ÿÿÿM¼‰ ÿÿÿ‹•`ÿÿÿ‹B‹@4…À„“‹@ …À„ˆ‹0ÿÿÿ‰L$‰$èD‰Æ‰uœ…ö„œO‹F‹@4…À„¤‹@ …À„™ÇD$‰4$èWD‰Æ‰u¸…ö„P‹Eœ‹ƒê‰…Ò„ ÇEœ‹`ÿÿÿ‹A‹@4…À„‹@ …À„…‹…4ÿÿÿ‰D$‰ $èD‰Æ‰u¬…ö„P‹F‹@4…À„¡‹x …ÿ„–ÇD$‰4$èÊC‰Æ‰u …ö„ÆO‹E¬‹ƒê‰…Ò„ÇE¬‹E ‰D$‹E¸‰$è~C‰E°…À„sO‹E¸‹ƒê‰…Ò„jÇE¸‹E ‹ƒê‰…Ò„vÇE ‹E°‰$èrC‰E¨èÏB…À… O‹E°‹ƒê‰…Ò„SÇE°‹E¨‰…8ÿÿÿ‹•`ÿÿÿ‹B‹@4…À„‹H …É„ö‹0ÿÿÿ‰L$‰$èçB‰Æ‰u¤…ö„ŒN‹F‹@4…À„‹@ …À„ÇD$‰4$è±B‰Æ‰u´…ö„9N‹E¤‹ƒê‰…Ò„ÎÇE¤‹`ÿÿÿ‹A‹@4…À„þ‹@ …À„ó‹…4ÿÿÿ‰D$‰ $èZB‰Æ‰uœ…ö„ÅM‹F‹@4…À„‹@ …À„ÇD$‰4$è$B‰Æ‰u¬…ö„ÎN‹Eœ‹ƒê‰…Ò„RÇEœ‹E¬‰D$‹E´‰$èØA‰E¸…À„{N‹E´‹ƒê‰…Ò„>ÇE´‹E¬‹ƒê‰…Ò„ÇE¬‹E¸‰$èÌA‰E¼è)A…À…N‹E¸‹ƒê‰…Ò„ÇE¸‹u¼‹Eȉ$è"A‰E¼ƒøŒÁM”À¶À‰E¨…Àt8‹…8ÿÿÿ;E˜ŸÀ¶À‰E¨…Àu"1À;uàŸÀ‰E¨…Àu1À;uÜœÀ‰E¨…À„h.‹E¨…À„dƒ…4ÿÿÿ‹•4ÿÿÿ1À9•0ÿÿÿŸÀ‰E¼…À„€‹`ÿÿÿ‹A‹@4…À„ %‹@ …À„%‹…0ÿÿÿ‰D$‰ $è½@‰Æ‰uœ…ö„FQ‹F‹@4…À„“$‹@ …À„ˆ$ÇD$‰4$è‡@‰Æ‰u´…ö„JQ‹Eœ‹ƒê‰…Ò„-ÇEœ‹•`ÿÿÿ‹B‹@4…À„õ#‹@ …À„ê#‹4ÿÿÿ‰L$‰$è0@‰Æ‰u¬…ö„ÖP‹M´‰tÿÿÿ‹F‹@4…À„Ð$‹x …ÿ„Å$‰L$ÇD$‰4$è÷?‰Æ…öˆfX‹E¬‹ƒê‰…Ò„Œ,ÇE¬‹E´‹ƒê‰…Ò„b,ÇE´‹•`ÿÿÿ‹B‹@4…À„$‹H …É„ $‹0ÿÿÿ‰L$‰$è€?‰Æ‰u …ö„ÙW‹F‹@4…À„þ$‹@ …À„ó$ÇD$‰4$èJ?‰Æ‰u¸…ö„†W‹E ‹ƒê‰…Ò„,ÇE ‹`ÿÿÿ‹A‹@4…À„`$‹@ …À„U$‹…4ÿÿÿ‰D$‰ $èó>‰Æ‰u¤…ö„W‹E¸‰…xÿÿÿ‹F‹@4…À„©$‹@ …À„ž$‹•xÿÿÿ‰T$ÇD$‰4$è´>‰Æ…öˆÛT‹E¤‹ƒê‰…Ò„ž+ÇE¤‹E¸‹ƒê‰…Ò„- ÇE¸‹•0ÿÿÿ1À9•4ÿÿÿœÀ‰E¼…À„t‹`ÿÿÿ‹A‹@4…À„¯‹@ …À„¤‰T$‰ $è'>‰Æ‰u …ö„ÙM‹F‹@4…À„Æ‹@ …À„»ÇD$‰4$èñ=‰Æ‰uä…ö„†M‹E ‹ƒê‰…Ò„ØÇE ‹`ÿÿÿ‹A‹@4…À„²‹@ …À„§‹…4ÿÿÿ‰D$‰ $èš=‰Æ‰uœ…ö„M‹Eä‰Eˆ‹F‹@4…À„½‹x …ÿ„²‹Uˆ‰T$ÇD$‰4$èa=‰Æ…öˆ¤J‹Eœ‹ƒê‰…Ò„RÇEœ‹E䋃ꉅ҄^ÇEä‹•`ÿÿÿ‹B‹@4…À„“‹H …É„ˆ‹0ÿÿÿ‰L$‰$èê<‰Æ‰u¬…ö„¹L‹F‹@4…À„¤‹P …Ò„™ÇD$‰4$è´<‰Æ‰u´…ö„L‹E¬‹ƒê‰…Ò„éÇE¬‹`ÿÿÿ‹A‹@4…À„‹@ …À„…‹…4ÿÿÿ‰D$‰ $è]<‰Æ‰u°…ö„›K‹E´‰EŒ‹F‹@4…À„›‹@ …À„‹UŒ‰T$ÇD$‰4$è$<‰Æ…öˆJI‹E°‹ƒê‰…Ò„‰ÇE°‹E´‹ƒê‰…Ò„_ÇE´ƒ…0ÿÿÿ‹…0ÿÿÿ9…pÿÿÿ…÷ÿÿ‹…4ÿÿÿƒÀÇD$ÿÿÿ‰D$‹•`ÿÿÿ‰$è˜;…ÀˆoS‹`ÿÿÿ‰ $è;‰E¸…À„RR‰$èÉ;‰E¤…À„(‹•hÿÿÿ‹ƒè‰…À„ž‹M¤‰hÿÿÿÇE¤‹A‹@4…À„9‹@ …À„.ÇD$‰ $è ;‰Æ‰u …ö„ô‰4$èœ;‰Æƒøÿ„á‹E ‹ƒê‰…Ò„° ÇE 1Àƒþ”À‰E¨…Àt?‹•hÿÿÿ‹B‹@4…À„ä‹@ …À„Ù‹ƒX]‰D$ÇD$‰$è©:‰Ç…ÿx‹E¸éÿÿÿ‹ƒöU‹‰ƒòUǃîUF‹Uä…Òt‹ƒè‰…À„ü ÇEä‹Uœ…Òt‹ƒè‰…À„ð ÇEœ‹U¬…Òt‹ƒè‰…À„~ ÇE¬‹U´…Òt‹ƒè‰…À„r ÇE´‹U°…Òt‹ƒè‰…À„f ÇE°‹U¤…Òt‹ƒè‰…À„Z ÇE¤‹U …Òt‹ƒè‰…À„ù ÇE ‹ƒ”]‹‰$èN9‰E¼…À„:ëÿÿƒ ÷èýñüÿM¬UœEäèYïüÿ…Àˆ]3‹E䋃ꉅ҄“ ÇEä‹Eœ‹ƒê‰…Ò„i ÇEœ‹E¬‹ƒê‰…Ò„? ÇE¬‹E¸éžýÿÿ‹ƒöU‹‰ƒòUǃîUEé‰þÿÿÇ$è29‰Ç…À„§ ‰D$‹…hÿÿÿ‰$èp9‰Æ‹ƒè‰…À…«ýÿÿ‹G‰<$ÿPéýÿÿ‹B‰$ÿPéTýÿÿ‹•`ÿÿÿ‹B‹@4…À„@‹@ …À„5‹4ÿÿÿ‰L$‰$è|8‰Æ‰u°…ö„ ‹F‹@4…À„&‹@ …À„ÇD$‰4$èF8‰Æ‰uœ…ö„Ê ‹E°‹ƒê‰…Ò„¨ÇE°‹uœ‹F‹@4…À„Ø‹@ …À„ÍÇD$ÿÿÿÿ‰4$èô7‰Æ‰u´…ö„x ‹Eœ‹ƒê‰…Ò„]$ÇEœ‹dÿÿÿ‹ƒè‰…À„3$‹E´‰…dÿÿÿÇE´‰Â‹@‹@4…À„ú‹x …ÿ„ïÇD$‰$è~7‰Æ‰uä…ö„ØK‹•`ÿÿÿ‹B‹@4…À„u‹p …ö„j‹0ÿÿÿ‰L$‰$è@7‰Æ‰u°…ö„}K‹F‹@4…À„4‹H …É„)ÇD$‰4$è 7‰Æ‰u¤…ö„*K‹E°‹ƒê‰…Ò„·#ÇE°M¨‰$ÿÿÿ‰L$‹E¤‰D$‹Eä‰$è7…ÀˆÍJ1Àƒ}¨”À‰E¨‹E䋃ꉅ҄ž#ÇEä‹E¤‹ƒê‰…Ò„t#ÇE¤‹U¨…Ò„+‹•dÿÿÿ‹B‹@4…À„É-‹@ …À„¾-ÇD$‰$èE6‰Æ‰u´…ö„âK‹•`ÿÿÿ‹B‹@4…À„Ô-‹@ …À„É-‹0ÿÿÿ‰L$‰$è6‰Æ‰uœ…ö„‡K‹F‹@4…À„å-‹@ …À„Ú-ÇD$‰4$èÑ5‰Æ‰u¬…ö„×P‹Eœ‹ƒê‰…Ò„ô/ÇEœ‹$ÿÿÿ‰L$‹E¬‰D$‹E´‰$èÚ5…ÀˆO1Àƒ}¨”À‰E¨‹E´‹ƒê‰…Ò„š/ÇE´‹E¬‹ƒê‰…Ò„p/ÇE¬‹E¨…À„õ‹•dÿÿÿ‹B‹@4…À„‰3‹@ …À„~3ÇD$‰$è5‰Æ‰u …ö„öT‹•`ÿÿÿ‹B‹@4…À„3‹@ …À„ù2‹0ÿÿÿ‰L$‰$èÑ4‰Æ‰u¸…ö„NW‹F‹@4…À„‹2‹x …ÿ„€2ÇD$‰4$è›4‰Æ‰u°…ö„ûV‹E¸‹ƒê‰…Ò„=9ÇE¸‹dÿÿÿ‹A‹@4…À„ï1‹p …ö„ä1ÇD$‰ $èF4‰Æ‰uä…ö„V‹•`ÿÿÿ‹B‹@4…À„á3‹H …É„Ö3‹0ÿÿÿ‰L$‰$è4‰Æ‰u¤…ö„ºU‹F‹@4…À„'3‹@ …À„3ÇD$‰4$èÒ3‰Æ‰uœ…ö„‰V‹E¤‹ƒê‰…Ò„¸8ÇE¤Ç$èZ3‰Â‰E´…À„ÆU‹E ‰B ‹U°‹E´‰P‹Uä‹E´‰P‹Uœ‹E´‰PÇE ÇE°ÇEäÇEœ‹`ÿÿÿ‹A‹@4…À„32‹@ …À„(2‹…4ÿÿÿ‰D$‰ $è%3‰Æ‰u¬…ö„ìV‹F‹@4…À„…2‹@ …À„z2ÇD$‰4$èï2‰Æ‰u¸…ö„‰U‹E¬‹ƒê‰…Ò„Ä7ÇE¬‹E´‰…|ÿÿÿ‹u¸‹F‹@4…À„U1‹@ …À„J1‹•|ÿÿÿ‰T$ÇD$ÿÿÿÿ‰4$è”2‰Æ…öˆWS‹E¸‹ƒê‰…Ò„Q7ÇE¸‹E´‹ƒê‰…Ò„'7ÇE´éÛóÿÿ‹•`ÿÿÿ‹B‹@4…À„˜‹@ …À„‹4ÿÿÿ‰L$‰$è2‰Æ‰u¤…ö„„B‹F‹@4…À„©‹@ …À„žÇD$‰4$èâ1‰Æ‰u …ö„’J‹E¤‹ƒê‰…Ò„Ñ'ÇE¤‹ƒ’V‰D$‹E ‰$èH1‰E°…À„°J‹E ‹ƒê‰…Ò„©'ÇE ‹`ÿÿÿ‹A‹@4…À„\‹x …ÿ„Q‹…0ÿÿÿ‰D$‰ $èR1‰Æ‰uä…ö„°JÇD$ÇD$‰4$èð1‰Eœ…À„pJ‹E䋃ꉅ҄@'ÇEäÇ$è·0‰Â‰E¬…À„!J‹Eœ‰B ÇEœ‹E¬‰D$‹ƒ„]‰$è1‰E´…À„C‹E¬‹ƒê‰…Ò„ò&ÇE¬Ç$èX0‰Â‰E¸…À„ˆI‹E´‰B ÇE´‹E¸‰D$‹E°‰$è¸0‰E¤…À„AI‹E°‹ƒê‰…Ò„'ÇE°‹E¸‹ƒê‰…Ò„Ù&ÇE¸‹E¤‹ƒê‰…Ò„¯&ÇE¤é©ñÿÿ‹…0ÿÿÿ‰$èE0‰Ç…À„L‰D$‹•`ÿÿÿ‰$èƒ0‰Æ‹ƒè‰…À…Qëÿÿ‹G‰<$ÿPéCëÿÿÇ$èþ/‰Ç…À„‰D$‰4$èB0‰Æ‹ƒè‰…À…Fëÿÿ‹G‰<$ÿPé8ëÿÿ‹•4ÿÿÿ‰$è»/‰Ç…À„á‰D$‹`ÿÿÿ‰ $èù/‰Æ‹ƒè‰…À…Tëÿÿ‹G‰<$ÿPéFëÿÿÇ$èt/‰Ç…À„¡‰D$‰4$è¸/‰Æ‹ƒè‰…À…Iëÿÿ‹G‰<$ÿPé;ëÿÿ‹…0ÿÿÿ‰$è1/‰Ç…À„‡‰D$‹•`ÿÿÿ‰$èo/‰Æ‹ƒè‰…À…ãëÿÿ‹G‰<$ÿPéÕëÿÿÇ$èê.‰Ç…À„G‰D$‰4$è./‰Æ‹ƒè‰…À…Øëÿÿ‹G‰<$ÿPéÊëÿÿ‹•4ÿÿÿ‰$è§.‰Ç…À„ ‰D$‹`ÿÿÿ‰ $èå.‰Æ‹ƒè‰…À…æëÿÿ‹G‰<$ÿPéØëÿÿÇ$è`.‰Ç…À„ˉD$‰4$è¤.‰Æ‹ƒè‰…À…Ûëÿÿ‹G‰<$ÿPéÍëÿÿ‹E¬‹P‰$ÿRé°ôÿÿ‹Eœ‹P‰$ÿRé†ôÿÿ‹Eä‹P‰$ÿRé\ôÿÿ‹E ‹P‰$ÿRéöóÿÿ‹E¬‹P‰$ÿRéqóÿÿ‹E´‹P‰$ÿRé}óÿÿ‹E°‹P‰$ÿRé‰óÿÿ‹E¤‹P‰$ÿRé•óÿÿ‹Eä‹P‰$ÿRéóòÿÿ‹Eœ‹P‰$ÿRéÿòÿÿ1öé òÿÿ‹E ‹P‰$ÿRé?òÿÿ‹Eœ‹P‰$ÿRéäèÿÿ‹E¬‹P‰$ÿRé`éÿÿ‹E¸‹P‰$ÿRÇE¸‹E ‹ƒê‰…Ò…Šéÿÿ‹E ‹P‰$ÿRéyéÿÿ‹E°‹P‰$ÿRéœéÿÿ‹E¤‹P‰$ÿRé!êÿÿ‹Eœ‹P‰$ÿRéêÿÿ‹E¬‹P‰$ÿRéÛêÿÿ‹E´‹P‰$ÿRé±êÿÿ‹E¸‹P‰$ÿRéíêÿÿ‹ƒöU‹‰ƒòUǃîU4‹U¬…Òt‹ƒè‰…À„3#ÇE¬‹U …Òt‹ƒè‰…À„|#ÇE ‹U¸…Òt‹ƒè‰…À„N#ÇE¸‹U¤…Òt‹ƒè‰…À„ #ÇE¤‹U°…Òt‹ƒè‰…À„ò"ÇE°‹Uœ…Òt‹ƒè‰…À„Ä"ÇEœ‹U´…Òt‹ƒè‰…À„–"ÇE´‹ƒ”]‹‰$è,+‰E¨…À„Ýÿÿƒ ÷èÛãüÿM¸U E¬è7áüÿ…ÀˆC?‹•`ÿÿÿ‹B‹@4…À„X‹p …ö„M‹4ÿÿÿ‰L$‰$è+‰Æ‰u¤…ö„è>‹F‹@4…À„ß‹H …É„ÔÇD$‰4$èé*‰Æ‰u°…ö„ F‹E¤‹ƒê‰…Ò„ÏÇE¤‹`ÿÿÿ‹A‹@4…À„A‹P …Ò„6‹…0ÿÿÿ‰D$‰ $è’*‰Æ‰uœ…ö„>‹F‹@4…À„Ü‹@ …À„ÑÇD$‰4$è\*‰Æ‰u´…ö„±=‹Eœ‹ƒê‰…Ò„uÇEœ‹… ÿÿÿ‰D$‹E´‰D$‹E°‰$èe*…ÀˆÆ<1Àƒ}¼”À‰E¼‹E°‹ƒê‰…Ò„ÇE°‹E´‹ƒê‰…Ò„ñÇE´‹E¼…À„¹‹•`ÿÿÿ‹B‹@4…À„¾‹@ …À„³‹4ÿÿÿ‰L$‰$è˜)‰Æ‰u¤…ö„œJ‹F‹@4…À„"‹@ …À„"ÇD$‰4$èb)‰Æ‰uœ…ö„NK‹E¤‹ƒê‰…Ò„>$ÇE¤‹`ÿÿÿ‹A‹@4…À„Q"‹@ …À„F"‹…0ÿÿÿ‰D$‰ $è )‰Æ‰u°…ö„,J‹F‹@4…À„Ñ!‹@ …À„Æ!ÇD$‰4$èÕ(‰Æ‰u´…ö„¼I‹E°‹ƒê‰…Ò„ä#ÇE°‹… ÿÿÿ‰D$‹E´‰D$‹Eœ‰$èÞ(…Àˆ¡J1Àƒ}¼”À‰E¼‹Eœ‹ƒê‰…Ò„Š#ÇEœ‹E´‹ƒê‰…Ò„`#ÇE´‹}¼…ÿ„2‹•`ÿÿÿ‹B‹@4…À„p*‹p …ö„e*‹4ÿÿÿ‰L$‰$è(‰Æ‰u¤…ö„E‹F‹@4…À„÷)‹H …É„ì)ÇD$‰4$èÛ'‰Æ‰u°…ö„ÄD‹E¤‹ƒê‰…Ò„.ÇE¤‹`ÿÿÿ‹A‹@4…À„Y)‹P …Ò„N)‹…0ÿÿÿ‰D$‰ $è„'‰Æ‰uœ…ö„üH‹F‹@4…À„à(‹@ …À„Õ(ÇD$‰4$èN'‰Æ‰u´…ö„ÉD‹Eœ‹ƒê‰…Ò„g-ÇEœ‹•`ÿÿÿ‹B‹@4…À„B(‹@ …À„7(‹4ÿÿÿ‰L$‰$è÷&‰Æ‰u¤…ö„lC‹F‹@4…À„ñ)‹@ …À„æ)ÇD$‰4$èÁ&‰Æ‰uœ…ö„VH‹E¤‹ƒê‰…Ò„ -ÇE¤‹`ÿÿÿ‹A‹@4…À„S)‹@ …À„H)‹…0ÿÿÿ‰D$‰ $èj&‰Æ‰u¤…ö„ÅG‹F‹@4…À„Ú(‹@ …À„Ï(ÇD$‰4$è4&‰Æ‰uä…ö„rG‹E¤‹ƒê‰…Ò„o,ÇE¤Ç$è¼%‰Â‰E¤…À„ÎB‹E°‰B ‹U´‹E¤‰P‹Uœ‹E¤‰P‹Uä‹E¤‰PÇE°ÇE´ÇEœÇEäÇ$è‰%‰E°…À„]B‹@ ‹U¤‰ÇE¤‹•`ÿÿÿ‹B‹@4…À„)‹@ …À„)‹4ÿÿÿ‰L$‰$èa%‰Æ‰u´…ö„óA‹M°‰M€‹F‹@4…À„–(‹x …ÿ„‹(‰L$ÇD$‰4$è+%‰Æ…öˆ±H‹E´‹ƒê‰…Ò„’+ÇE´‹E°‹ƒê‰…Ò„h+ÇE°énÇ$è%‰Æ…À„9êÿÿ‹ƒX]‰D$‰t$‹hÿÿÿ‰ $è|$‰Ç‹ƒè‰…À…êÿÿ‹F‰4$ÿPéòéÿÿ‹…0ÿÿÿ‰$è½$‰Ç…À„‰D$‹•`ÿÿÿ‰$èû$‰Æ‹ƒè‰…À…/æÿÿ‹G‰<$ÿPé!æÿÿÇ$èv$‰Ç…À„M‰D$‰4$èº$‰Æ‹ƒè‰…À…$æÿÿ‹G‰<$ÿPéæÿÿ‹•4ÿÿÿ‰$è3$‰Ç…À„‰D$‹`ÿÿÿ‰ $èq$‰Æ‹ƒè‰…À…2æÿÿ‹G‰<$ÿPé$æÿÿÇ$èì#‰Ç…À„ý0‹Mˆ‰L$‰D$‰4$èa#‰Æ‹ƒè‰…À…-æÿÿ‹G‰<$ÿPéæÿÿ‹…0ÿÿÿ‰$è¢#‰Ç…À„‡‰D$‹•`ÿÿÿ‰$èà#‰Æ‹ƒè‰…À…Qæÿÿ‹G‰<$ÿPéCæÿÿÇ$è[#‰Ç…À„N‰D$‰4$èŸ#‰Æ‹ƒè‰…À…Fæÿÿ‹G‰<$ÿPé8æÿÿ‹•4ÿÿÿ‰$è#‰Ç…À„‰D$‹`ÿÿÿ‰ $èV#‰Æ‹ƒè‰…À…Tæÿÿ‹G‰<$ÿPéFæÿÿÇ$èÑ"‰Ç…À„Å/‹MŒ‰L$‰D$‰4$èF"‰Æ‹ƒè‰…À…Oæÿÿ‹G‰<$ÿPéAæÿÿ‹…4ÿÿÿ‰$è‡"‰Ç…À„‰D$‹•`ÿÿÿ‰$èÅ"‰Æ‹ƒè‰…À…¤éÿÿ‹G‰<$ÿPé–éÿÿ‹•`ÿÿÿ‹B‹@4…À„Þ‹H …ɄӋ4ÿÿÿ‰L$‰$èß!‰Æ‰uœ…ö„6ÇD$ÇD$‰4$è}"‰Eä…À„P6‹Eœ‹ƒê‰…Ò„×ÇEœÇ$èD!‰Â‰E¤…À„6‹Eä‰B ÇEä‹‹„]‰(ÿÿÿ‹E¤‰D$‰ $è›!‰E°…À„<9‹E¤‹ƒê‰…Ò„”ÇE¤‹•`ÿÿÿ‹B‹@4…À„H‹@ …À„=‹0ÿÿÿ‰L$‰$è!‰Æ‰u´…ö„7ÇD$ÇD$‰4$èž!‰Eœ…À„—6‹E´‹ƒê‰…Ò„ ÇE´Ç$èe ‰Â‰Eä…À„Ÿ6‹Eœ‰B ÇEœ‹Eä‰D$‹(ÿÿÿ‰ $è ‰E¤…À„U6‹E䋃ꉅ҄ÌÇEäÇ$è) ‰E´…À„P8‹P ‹E°‰‹E´‹P ‹E¤‰BÇE°ÇE¤‹•`ÿÿÿ‹B‹@4…À„Ç‹@ …À„¼‹4ÿÿÿ‰L$‰$èî‰Æ‰uœ…ö„&3‹M´‰M„‹F‹@4…À„A‹@ …À„6‰L$ÇD$‰4$踉ƅöˆ6‹Eœ‹ƒê‰…Ò„!ÇEœ‹E´‹ƒê‰…Ò„÷ÇE´‹E¬‹ƒê‰…Ò„ºÇE¬‹E ‹ƒê‰…Ò„ÇE é´àÿÿÇ$èk‰Ç…À„ˆ‰D$‰4$诉Ƌƒè‰…À…Äæÿÿ‹G‰<$ÿPé¶æÿÿ‹E ‹P‰$ÿRéáÿÿ‹Eœ‹P‰$ÿRÇEœ‹E䋃ꉅ҅¢áÿÿ‹Eä‹P‰$ÿRé‘áÿÿ1öé!Úÿÿ‹E¬‹P‰$ÿRéâÿÿ1öé?Úÿÿ1öéÚÿÿ1öé¾Úÿÿ‹E´‹P‰$ÿRéâÿÿ‹E°‹P‰$ÿRéfâÿÿ1öéxÛÿÿ1öé§Ûÿÿ1öé÷Ûÿÿ1öé&Üÿÿ‹E¸‹P‰$ÿRéÂßÿÿÇ$ÿÿÿÿèg‰Ç…À„C‰D$‰4$諉Ƌƒè‰…À…æÿÿ‹G‰<$ÿPéæÿÿ‰$è*‰Ç…À„ì‰D$‹…Lÿÿÿ‰$èh‰Æ‹ƒè‰…À… Íÿÿ‹G‰<$ÿPéûÌÿÿ‹Eœ‹P‰$ÿRé^Äÿÿ‹E°‹P‰$ÿRéžÄÿÿ‹B‰$ÿPéÏÄÿÿ‹E¸‹P‰$ÿRéÅÿÿ‰$覉DžÀ„#‰D$‹…Xÿÿÿ‰$è䉯‹ƒè‰…À…*Óÿÿ‹G‰<$ÿPéÓÿÿ‰$èc‰Æ…À„V(‰|$‰D$‹…Xÿÿÿ‰$èՉNjƒè‰…À…ÁÖÿÿ‹F‰4$ÿPé³Öÿÿ‹…0ÿÿÿ‰$è‰Ç…À„¯ ‰D$‹•`ÿÿÿ‰$èT‰Æ‹ƒè‰…À…oåÿÿ‹G‰<$ÿPéaåÿÿÇ$èωDžÀ„a ‰D$‹dÿÿÿ‰ $è ‰Æ‹ƒè‰…À…êäÿÿ‹G‰<$ÿPéÜäÿÿ‹…4ÿÿÿ‰$膉DžÀ„ ‰D$‹•`ÿÿÿ‰$èĉƋƒè‰…À…ïÛÿÿ‹G‰<$ÿPéáÛÿÿÇ$è?‰Ç…À„ß ‰D$‰4$胉Ƌƒè‰…À…WÛÿÿ‹G‰<$ÿPéIÛÿÿ‹•0ÿÿÿ‰$èü‰Ç…À„€ ‰D$‹`ÿÿÿ‰ $è:‰Æ‹ƒè‰…À…ØÚÿÿ‹G‰<$ÿPéÊÚÿÿ‹…0ÿÿÿ‰$賉DžÀ„h ‰D$‹•`ÿÿÿ‰$èñ‰Æ‹ƒè‰…À…ÌÛÿÿ‹G‰<$ÿPé¾ÛÿÿÇ$èl‰Ç…À„©3‹…tÿÿÿ‰D$‰|$‰4$èމƋƒè‰…À…Ûÿÿ‹G‰<$ÿPéÛÿÿÇ$è!‰Ç…À„Ï ‰D$‰4$èe‰Æ‹ƒè‰…À…¶ãÿÿ‹G‰<$ÿPé¨ãÿÿ‹•4ÿÿÿ‰$èމDžÀ„š ‰D$‹`ÿÿÿ‰ $è‰Æ‹ƒè‰…À…„Ûÿÿ‹G‰<$ÿPévÛÿÿÇ$藉DžÀ„> ‰D$‰4$èۉƋƒè‰…À…ìÚÿÿ‹G‰<$ÿPéÞÚÿÿÇ$èV‰Ç…À„K0‹xÿÿÿ‰L$‰D$‰4$èȉƋƒè‰…À…AÛÿÿ‹G‰<$ÿPé3Ûÿÿ‹ƒöU‹‰ƒòUǃîU Ç…lÿÿÿ‹‹X]‰dÿÿÿ‰`ÿÿÿ‰hÿÿÿéCËÿÿ‹ƒöU‹‰ƒòUǃîUé%Ñÿÿ‹E°‹P‰$ÿRéGáÿÿ‹•0ÿÿÿ‰$蜉DžÀ„Ø ‰D$‹`ÿÿÿ‰ $èډƋƒè‰…À…£îÿÿ‹G‰<$ÿPé•îÿÿÇ$èU‰Ç…À„Š ‰D$‰4$虉Ƌƒè‰…À… îÿÿ‹G‰<$ÿPéýíÿÿ‹…4ÿÿÿ‰$è‰Ç…À„@ ‰D$‹•`ÿÿÿ‰$èP‰Æ‹ƒè‰…À…Œíÿÿ‹G‰<$ÿPé~íÿÿÇ$èˉDžÀ„ ‰D$‰4$è‰Æ‹ƒè‰…À…îÿÿ‹G‰<$ÿPéîÿÿ‹M‹A‹@ÿÿÿ‰L$‹<ÿÿÿ‰L$ ‹M‹T ‰T$‹U”‰T$‹M‰ $ÿP‰E´…À„B/‹•\ÿÿÿ‹ƒè‰…À„ª ‹M´‰\ÿÿÿÇE´‰L$‹E؉$è|‰E°…À„Ÿ ‹•\ÿÿÿ‹ƒè‰…À„­‹M°‰\ÿÿÿÇE°‹…Dÿÿÿ‰$èä‰E°…À„/.‹ƒjX‰D$‹…\ÿÿÿ‰$è&‰E¸…À„T2‰D$‹E°‰$èí‰E¬…À„2‹E°‹ƒê‰…Ò„vÇE°‹E¸‹ƒê‰…Ò„LÇE¸‹•<ÿÿÿ‰$è\‰E´…À„¡2‰D$‹E¬‰$èò‰E°…À„H2‹E¬‹ƒê‰…Ò„ïÇE¬‹E´‹ƒê‰…Ò„ÅÇE´‹E°‰$èæ‰E¨èC…À…ñ2‹E°‹ƒê‰…Ò„ÕÇE°‹M¨‰Dÿÿÿ‹…Hÿÿÿ‰$躉E¸…À„w2‹ƒrX‰D$‹•\ÿÿÿ‰$èü‰E¬…À„2‰D$‹E¸‰$èÉE´…À„Û/‹E¸‹ƒê‰…Ò„nÇE¸‹E¬‹ƒê‰…Ò„fÇE¬‹@ÿÿÿ‰ $è2‰E°…À„Ï/‰D$‹E´‰$èȉE¸…À„ô/‹E´‹ƒê‰…Ò„+ÇE´‹E°‹ƒê‰…Ò„4ÇE°‹E¸‰$載E¨è…À…q&‹E¸‹ƒê‰…Ò„ïÇE¸‹E¨‰…Hÿÿÿ‹ƒjX‰D$‹•\ÿÿÿ‰$èë‰E¬…À„¡/‰$è_‰E¨è¼…À…S&‹E¬‹ƒê‰…Ò„´ÇE¬‹M¨‰<ÿÿÿ‹ƒrX‰D$‹…\ÿÿÿ‰$莉E´…À„Œ&‰$è‰E¨è_…À…5&‹E´‹ƒê‰…Ò„hÇE´‹U¨‰•@ÿÿÿ‹M‹Q(éVÊÿÿ‹…4ÿÿÿ‰$èˉDžÀ„‰D$‹•`ÿÿÿ‰$è ‰Æ‹ƒè‰…À…Lâÿÿ‹G‰<$ÿPé>âÿÿÇ$脉DžÀ„ΉD$‰4$èȉƋƒè‰…À…Aâÿÿ‹G‰<$ÿPé3âÿÿ‹•0ÿÿÿ‰$èA‰Ç…À„™‰D$‹`ÿÿÿ‰ $è‰Æ‹ƒè‰…À…ˆâÿÿ‹G‰<$ÿPézâÿÿ‹E ‹P‰$ÿRééÍÿÿ‹E¸‹P‰$ÿRéÍÿÿ‹E¤‹P‰$ÿRé®Íÿÿ‹E°‹P‰$ÿRé„Íÿÿ‹A‰ $ÿPé¿Ûÿÿ‹Eœ‹P‰$ÿRé’Ûÿÿ‹Eœ‹P‰$ÿRéîÒÿÿ‹E´‹P‰$ÿRéÓÿÿ‹E¬‹P‰$ÿRécÓÿÿ‹E°‹P‰$ÿRé8Üÿÿ‹E ‹P‰$ÿRéçÓÿÿ‹E¤‹P‰$ÿRé{Üÿÿ‹Eä‹P‰$ÿRéQÜÿÿ‹E¤‹P‰$ÿRéQÔÿÿèg…À…:3‹E¸‹ƒê‰…Ò„sÇE¸é2¹ÿÿ‹•`ÿÿÿ‹B‹@4…À„p‹@ …À„e‹0ÿÿÿ‰L$‰$胉Ɖu …ö„-6‹F‹@4…À„®‹@ …À„£ÇD$‰4$èM‰Æ‰u°…ö„‹2‹E ‹ƒê‰…Ò„ÇE ‹`ÿÿÿ‹A‹@4…À„š‹@ …À„‹…4ÿÿÿ‰D$‰ $èö‰Æ‰u¤…ö„2‹F‹@4…À„à‹x …ÿ„ÕÇD$‰4$èÀ‰Æ‰uœ…ö„”4‹E¤‹ƒê‰…Ò„ºÇE¤‹Eœ‰D$‹E°‰$èt‰E´…À„Ý4‹E°‹ƒê‰…Ò„sÇE°‹Eœ‹ƒê‰…Ò„IÇEœE¨‰…$ÿÿÿ‰D$‹ẺD$‹E´‰$èw…Àˆg41Àƒ}¨ŸÀ‰E¨‹E´‹ƒê‰…Ò„ìÇE´‹u¨…ö…ãÏÿÿ‹•`ÿÿÿ‹B‹@4…À„Æ‹H …É„»‹0ÿÿÿ‰L$‰$èÉƉu¬…ö„p1‹F‹@4…À„‹P …Ò„ ÇD$‰4$è‰Æ‰u¸…ö„Ð2‹E¬‹ƒê‰…Ò„oÇE¬‹`ÿÿÿ‹A‹@4…À„‹@ …À„ù‹…4ÿÿÿ‰D$‰ $è6‰Æ‰u …ö„O3‹F‹@4…À„J‹@ …À„?ÇD$‰4$è‰Æ‰u¤…ö„ü2‹E ‹ƒê‰…Ò„sÇE ‹E¤‰D$‹E¸‰$è´‰E°…À„:3‹E¸‹ƒê‰…Ò„,ÇE¸‹E¤‹ƒê‰…Ò„ÇE¤‹…$ÿÿÿ‰D$‹ẺD$‹E°‰$躅Àˆx/1Àƒ}¨ŸÀ‰E¨‹E°‹ƒê‰…Ò„pÇE°é!Îÿÿ1öé#Åÿÿ1öétÎÿÿ1öéúÎÿÿ1öé¥×ÿÿ1öéÜ×ÿÿ1öéŽÎÿÿ1öéÄÏÿÿ1öéý×ÿÿ1öé€Ïÿÿ1öéÐÿÿ‹…4ÿÿÿ‰$è%‰Ç…À„’‰D$‹•`ÿÿÿ‰$èc‰Æ‹ƒè‰…À…&åÿÿ‹G‰<$ÿPéåÿÿ‹ƒè‰…À…x¼ÿÿ‹EÀ‹P‰$ÿR1öég¼ÿÿ1öéhãÿÿ1öé—ãÿÿ1öéçãÿÿ1öéäÿÿ1öé‰Üÿÿ1öéLÜÿÿ1öé Ýÿÿ‹B‰$ÿPéHöÿÿ‹E¸‹P‰$ÿRé|ûÿÿ‹ƒöU‹‰ƒòUǃîU‹U¸…Òt‹ƒè‰…À„]ÇE¸‹U¬…Òt‹ƒè‰…À„QÇE¬‹U´…Òt‹ƒè‰…À„ÇE´‹U°…Òt‹ƒè‰…À„õÇE°‹ƒT]‹‰$èP ‰E¨…À„.ƒ ÷èÿÅüÿM´U¬E¸è[Ãüÿ…À‰ç½ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‹“X]‰•dÿÿÿ‰•`ÿÿÿ‰•hÿÿÿéܾÿÿ‹ƒöU‹‰ƒòUǃîUùÇ…lÿÿÿ‹“X]‰•\ÿÿÿ‰•Xÿÿÿ‰•dÿÿÿ‰•`ÿÿÿ‰•hÿÿÿ鑾ÿÿ1öé¾Îÿÿ1öéíÎÿÿ1öé=Ïÿÿ1öéæÏÿÿ1öélÐÿÿ1öéÐÿÿ‹ƒöU‹‰ƒòUǃîUõÇ…lÿÿÿ‰µPÿÿÿ‰µLÿÿÿ‰µXÿÿÿ‰µTÿÿÿ‰µ`ÿÿÿ‰µ\ÿÿÿ‰µhÿÿÿ‰µdÿÿÿé¾ÿÿ‹E´‹P‰$ÿR鈼ÿÿ‹E¬‹P‰$ÿRéZ¼ÿÿ‹E¸‹P‰$ÿRé,¼ÿÿ‹E°‹P‰$ÿRéþ»ÿÿ1öé¤Óÿÿ‹…4ÿÿÿ‰$èL ‰Ç…À„& ‰D$‹•`ÿÿÿ‰$èŠ ‰Æ‹ƒè‰…À…êÿÿ‹G‰<$ÿPéøéÿÿ‹…0ÿÿÿ‰$è ‰Ç…À„Ö ‰D$‹•`ÿÿÿ‰$èA ‰Æ‹ƒè‰…À…œêÿÿ‹G‰<$ÿPéŽêÿÿÇ$è¼ ‰Ç…À„ë!‹E„‰D$‰|$‰4$è1 ‰Æ‹ƒè‰…À…¦ëÿÿ‹G‰<$ÿPé˜ëÿÿ‹…4ÿÿÿ‰$èr ‰Ç…À„S ‰D$‹•`ÿÿÿ‰$è° ‰Æ‹ƒè‰…À…ëÿÿ‹G‰<$ÿPéëÿÿ‹E¤‹P‰$ÿRé àÿÿ‹E´‹P‰$ÿRéþàÿÿ‹E°‹P‰$ÿRéÔàÿÿ‹Eœ‹P‰$ÿRézàÿÿ‹E ‹P‰$ÿRé_ëÿÿ‹E¬‹P‰$ÿRé5ëÿÿ‹E´‹P‰$ÿRéÑÂÿÿ‹E¬‹P‰$ÿRé£Âÿÿ‹E¸‹P‰$ÿRéuÂÿÿ‹E ‹P‰$ÿRéGÂÿÿ‹E¤‹P‰$ÿRéÂÿÿ‹E°‹P‰$ÿRéëÁÿÿ‹EÌ‹P‰$ÿRéD¸ÿÿ¸éXÎÿÿ‹E´‹P‰$ÿRéX²ÿÿ‹E ‹P‰$ÿRé.²ÿÿ‹E¤‹P‰$ÿRéØÿÿ‹E ‹P‰$ÿRéFØÿÿ‹Eä‹P‰$ÿR靨ÿÿ‹E¬‹P‰$ÿRéýØÿÿ‹E¸‹P‰$ÿR髲ÿÿ1öéRÑÿÿ‹E ‹P‰$ÿRé3³ÿÿ‹E¬‹P‰$ÿRéÒ²ÿÿ‹E¤‹P‰$ÿRé@Ùÿÿ‹E¸‹P‰$ÿRéÙÿÿ‹E°‹P‰$ÿRéìØÿÿ‹E´‹P‰$ÿR鯳ÿÿ‹E¤‹P‰$ÿRé…³ÿÿ‹E°‹P‰$ÿRé[³ÿÿ‹E¬‹P‰$ÿRé¼Üÿÿ‹E´‹P‰$ÿRéYÝÿÿ‹Eœ‹P‰$ÿRé+Ýÿÿ‹E°‹P‰$ÿRéýÜÿÿ‹E¤‹P‰$ÿRéÏÜÿÿ‹E¸‹P‰$ÿRé¡Üÿÿ‹E ‹P‰$ÿRésÜÿÿÇ$èljDžÀ„O‰D$‹dÿÿÿ‰ $è ‰Æ‹ƒè‰…À…Òÿÿ‹G‰<$ÿPé Òÿÿ‹…0ÿÿÿ‰$è~‰Ç…À„i‰D$‹•`ÿÿÿ‰$載Ƌƒè‰…À…Òÿÿ‹G‰<$ÿPéÒÿÿÇ$è7‰Ç…À„‰D$‰4$è{‰Æ‹ƒè‰…À…Òÿÿ‹G‰<$ÿPé÷Ñÿÿ‹Eœ‹P‰$ÿRéæÿÿ‹E´‹P‰$ÿRéææÿÿ‹E¤‹P‰$ÿRé[æÿÿ‹Eä‹P‰$ÿRé#çÿÿ‹E´‹P‰$ÿRéøçÿÿ‹Eœ‹P‰$ÿRéÎçÿÿÇ$è‰Ç…À„ö ‰D$‰4$èԉƋƒè‰…À…ÍÝÿÿ‹G‰<$ÿPé¿ÝÿÿÇ$èO‰Ç…À„§ ‰D$‰4$蓉Ƌƒè‰…À…Þÿÿ‹G‰<$ÿPé Þÿÿ1öéåÎÿÿ‹•0ÿÿÿ‰$è‰Ç…À„d ‰D$‹`ÿÿÿ‰ $èC‰Æ‹ƒè‰…À…“Ýÿÿ‹G‰<$ÿPé…Ýÿÿ‹E°‹P‰$ÿRéíµÿÿ‹ƒöU‹‰ƒòUǃîUóÇ…lÿÿÿ‰µPÿÿÿ‰µLÿÿÿ‰µXÿÿÿ‰µTÿÿÿ‰µ`ÿÿÿ‰µ\ÿÿÿ‰µhÿÿÿ‰µdÿÿÿéÍ·ÿÿ‹E¬‹P‰$ÿRéB¬ÿÿ‹ƒöU‹‰ƒòUǃîUG韷ÿÿ1öé9µÿÿ‹E°‹P‰$ÿRé¼ÿÿ‹E¬‹P‰$ÿRéÐÿÿ‹E´‹P‰$ÿRéUÐÿÿ‹Eœ‹P‰$ÿRéûÏÿÿ‹E´‹P‰$ÿRéû«ÿÿè$…À…g¬ÿÿƒ^ó‰D$‹ƒD]‹‰$èÕéH¬ÿÿèø…À…¬ÿÿƒ^ó‰D$‹ƒD]‹‰$è©ép¬ÿÿ‹ƒöU‹‰ƒòUǃîU Ç…lÿÿÿ‹ƒX]‰…dÿÿÿ‰…`ÿÿÿ‰…hÿÿÿ鬶ÿÿ‹E¤‹P‰$ÿRé±Ûÿÿ‹E´‹P‰$ÿRéÜÿÿ‹Eœ‹P‰$ÿRéeÜÿÿ‹E°‹P‰$ÿRé ÜÿÿèI…À„§ ‹ƒöU‹‰ƒòUǃîUöÇ…lÿÿÿ‹•ÿÿÿ‰•\ÿÿÿ‰•Xÿÿÿ‰•dÿÿÿ‰•`ÿÿÿ‰•hÿÿÿé¶ÿÿ‹ƒöU‹‰ƒòUǃîU÷Ç…lÿÿÿ‹ƒX]‰…\ÿÿÿ‰…Xÿÿÿ‰…dÿÿÿ‰…`ÿÿÿ‰…hÿÿÿéŵÿÿ‹ƒöU‹‰ƒòUǃîU÷Ç…lÿÿÿ‹“X]‰•\ÿÿÿ‰•Xÿÿÿ‰•dÿÿÿ‰•`ÿÿÿ‰•hÿÿÿézµÿÿ‹ƒöU‹‰ƒòUǃîU÷Ç…lÿÿÿ‹‹X]‰\ÿÿÿ‰Xÿÿÿ‰dÿÿÿ‰`ÿÿÿ‰hÿÿÿé/µÿÿ‹ƒöU‹‰ƒòUǃîU ‹“X]‰•dÿÿÿ‰•`ÿÿÿ‰•hÿÿÿéú´ÿÿ‹ƒöU‹‰ƒòUǃîUøÇ…lÿÿÿ‹ƒX]‰…\ÿÿÿ‰…Xÿÿÿ‰…dÿÿÿ‰…`ÿÿÿ‰…hÿÿÿ鯴ÿÿ‹ƒöU‹‰ƒòUǃîUøÇ…lÿÿÿ‹“X]‰•\ÿÿÿ‰•Xÿÿÿ‰•dÿÿÿ‰•`ÿÿÿ‰•hÿÿÿéd´ÿÿ‹ƒöU‹‰ƒòUǃîUøÇ…lÿÿÿ‹‹X]‰\ÿÿÿ‰Xÿÿÿ‰dÿÿÿ‰`ÿÿÿ‰hÿÿÿé´ÿÿÇ$袉DžÀ„n ‰D$‹…dÿÿÿ‰$èà‰Æ‹ƒè‰…À…õÍÿÿ‹G‰<$ÿPéçÍÿÿÇ$è[‰Ç…À„. ‰D$‰4$蟉Ƌƒè‰…À…_Íÿÿ‹G‰<$ÿPéQÍÿÿ‹…0ÿÿÿ‰$è‰Ç…À„ò ‰D$‹•`ÿÿÿ‰$èV‰Æ‹ƒè‰…À…àÌÿÿ‹G‰<$ÿPéÒÌÿÿÇ$èщDžÀ„… ‰D$‹dÿÿÿ‰ $è‰Æ‹ƒè‰…À…[Ìÿÿ‹G‰<$ÿPéMÌÿÿÇ$ÿÿÿÿ芉DžÀ„"‹|ÿÿÿ‰L$‰D$‰4$èü‰Æ‹ƒè‰…À…•Îÿÿ‹G‰<$ÿPé‡Îÿÿ‹•4ÿÿÿ‰$è=‰Ç…À„K ‰D$‹`ÿÿÿ‰ $è{‰Æ‹ƒè‰…À…±Íÿÿ‹G‰<$ÿPé£ÍÿÿÇ$èö‰Ç…À„ý‰D$‰4$è:‰Æ‹ƒè‰…À…ÃÌÿÿ‹G‰<$ÿPéµÌÿÿÇ$赉DžÀ„ʉD$‰4$èù‰Æ‹ƒè‰…À…eÍÿÿ‹G‰<$ÿPéWÍÿÿ‹…0ÿÿÿ‰$èr‰Ç…À„d‰D$‹•`ÿÿÿ‰$谉Ƌƒè‰…À…Ìÿÿ‹G‰<$ÿPéõËÿÿÇ$è+‰Ç…À„$‰D$‰4$èo‰Æ‹ƒè‰…À… îÿÿ‹G‰<$ÿPéüíÿÿÇ$èêÿ‰Ç…À„ ‰D$‰4$è.‰Æ‹ƒè‰…À…<íÿÿ‹G‰<$ÿPé.íÿÿ‹•4ÿÿÿ‰$è§ÿ‰Ç…À„§‰D$‹`ÿÿÿ‰ $èåÿ‰Æ‹ƒè‰…À…Jíÿÿ‹G‰<$ÿPé<íÿÿ‹…0ÿÿÿ‰$è^ÿ‰Ç…À„z‰D$‹•`ÿÿÿ‰$èœÿ‰Æ‹ƒè‰…À…tìÿÿ‹G‰<$ÿPéfìÿÿ1öéâÝÿÿ1öéüÜÿÿ1öéæÞÿÿ‹…4ÿÿÿ‰$èÿ‰Ç…À„d‰D$‹•`ÿÿÿ‰$è>ÿ‰Æ‹ƒè‰…À…¢×ÿÿ‹G‰<$ÿPé”×ÿÿÇ$è¹þ‰Ç…À„+‰D$‰4$èýþ‰Æ‹ƒè‰…À… ×ÿÿ‹G‰<$ÿPéüÖÿÿ‹•0ÿÿÿ‰$èvþ‰Ç…À„ö‰D$‹`ÿÿÿ‰ $è´þ‰Æ‹ƒè‰…À…‹Öÿÿ‹G‰<$ÿPé}ÖÿÿÇ$è/þ‰Ç…À„¶‰D$‰4$èsþ‰Æ‹ƒè‰…À…óÕÿÿ‹G‰<$ÿPéåÕÿÿ‹…4ÿÿÿ‰$èìý‰Ç…À„e‰D$‹•`ÿÿÿ‰$è*þ‰Æ‹ƒè‰…À…tÕÿÿ‹G‰<$ÿPéfÕÿÿÇ$è¥ý‰Ç…À„:‰D$‰4$èéý‰Æ‹ƒè‰…À…×ÿÿ‹G‰<$ÿPé×ÿÿ‹•0ÿÿÿ‰$èbý‰Ç…À„͉D$‹`ÿÿÿ‰ $è ý‰Æ‹ƒè‰…À…‘Öÿÿ‹G‰<$ÿPéƒÖÿÿÇ$èý‰Ç…À„x‰D$‰4$è_ý‰Æ‹ƒè‰…À…ùÕÿÿ‹G‰<$ÿPéëÕÿÿÇ$èÚü‰Ç…À„. ‹E€‰D$‰|$‰4$èOü‰Æ‹ƒè‰…À…Q×ÿÿ‹G‰<$ÿPéC×ÿÿ‹…4ÿÿÿ‰$èü‰Ç…À„‰D$‹•`ÿÿÿ‰$èÎü‰Æ‹ƒè‰…À…ÈÖÿÿ‹G‰<$ÿPéºÖÿÿ‹B‰$ÿPéEäÿÿ‹E´‹P‰$ÿRé*åÿÿ‹E¬‹P‰$ÿRéåÿÿ‹E¸‹P‰$ÿRé£äÿÿ‹E°‹P‰$ÿRéyäÿÿ‹E°‹P‰$ÿRéåÿÿ‹E¸‹P‰$ÿRéåÿÿ‹E¬‹P‰$ÿRé‰åÿÿ‹E´‹P‰$ÿRéÄåÿÿ‹E¸‹P‰$ÿRéæÿÿ‹E°‹P‰$ÿRé»åÿÿ‹E¬‹P‰$ÿRé;æÿÿ‹E´‹P‰$ÿR釿ÿÿ‹E¸‹P‰$ÿR鲯ÿÿ‹E´‹P‰$ÿRéÈÈÿÿ‹E¸‹P‰$ÿRéžÈÿÿ‹E¬‹P‰$ÿRé+Èÿÿ‹E¤‹P‰$ÿRé7Çÿÿ‹E¸‹ƒê‰…Ò„ºÇE¸‹}¨‹E´‰$èû‰Æ…À„˜‰u¬…ö„Yªÿÿ‰4$èÎú‰E¨è+ú…À…Aªÿÿ‹E¬‹ƒê‰…Ò„øÇE¬‹u¨‹E´‰$è¿ú‰Â…À„@‹ƒè‰…Àu ‹B‰$ÿPƒ^ó‰D$‹ƒD]‹‰$è—ùéÝ©ÿÿ1öéèÃÿÿ‹E ‹P‰$ÿRéìçÿÿ‹E´‹P‰$ÿRééÿÿ‹Eœ‹P‰$ÿRé¦èÿÿ‹E°‹P‰$ÿRé|èÿÿ‹E¤‹P‰$ÿRé5èÿÿ1öéÄÿÿ1öéÃÃÿÿ‹Eœ‹P‰$ÿRéˆÒÿÿ‹E¤‹P‰$ÿRéêÑÿÿ‹E¤‹P‰$ÿRé€Óÿÿ‹E¤‹P‰$ÿRéâÒÿÿ‹E°‹P‰$ÿRé‡Ôÿÿ‹E´‹P‰$ÿRé]Ôÿÿ1öéˆÐÿÿ1öéKÐÿÿ1öéíÏÿÿ1öé°ÏÿÿèÎø…À…Ũÿÿƒ^ó‰D$‹ƒD]‹‰$èø馨ÿÿ‹…0ÿÿÿ‰$èHù‰Ç…À„‰D$‹•`ÿÿÿ‰$è†ù‰Æ‹ƒè‰…À…èÿÿ‹G‰<$ÿPéèÿÿÇ$èù‰Ç…À„̉D$‰4$èEù‰Æ‹ƒè‰…À… èÿÿ‹G‰<$ÿPé’èÿÿÇ$èÀø‰Ç…À„™‰D$‰4$èù‰Æ‹ƒè‰…À…Òçÿÿ‹G‰<$ÿPéÄçÿÿ‹•4ÿÿÿ‰$è}ø‰Ç…À„]‰D$‹`ÿÿÿ‰ $è»ø‰Æ‹ƒè‰…À…àçÿÿ‹G‰<$ÿPéÒçÿÿ1öéòÂÿÿ‹E¬‹P‰$ÿRé€çÿÿ1öé£Ãÿÿ1öéGÃÿÿ1öé Ãÿÿ‹E°‹P‰$ÿRéèÿÿ1öé»Ãÿÿ1öéüåÿÿ1öé¿åÿÿ1öéÜÃÿÿ1öé‚Äÿÿ1öé±Äÿÿ1öéåÿÿ1öéEåÿÿ‹E¤‹P‰$ÿRéíçÿÿ‹E¸‹P‰$ÿRéÃçÿÿ‹E ‹P‰$ÿRé|çÿÿ1öé—Ðÿÿ1öéZÐÿÿ1öéàÐÿÿ1öéõÏÿÿ1öé+Ïÿÿ1öé±Ïÿÿ1öéSÏÿÿ1öéÆÑÿÿ1öéìÐÿÿ‹E¸‹P‰$ÿRé5üÿÿ‹E¸‹ƒê‰…Ò„ÇE¸ézœÿÿ1öéêæÿÿ1öé æÿÿ1öéOæÿÿ1öéŸæÿÿ‹E´‹P‰$ÿRéîèÿÿ‹E°‹P‰$ÿRéúèÿÿ‹E¸‹P‰$ÿRé’èÿÿ‹E¬‹P‰$ÿRéžèÿÿ‹ƒöU‹‰ƒòUǃîUûÇ…lÿÿÿ‹“X]‰•dÿÿÿ‰•`ÿÿÿ‰•hÿÿÿé÷§ÿÿ‹ƒöU‹‰ƒòUǃîUûÇ…lÿÿÿ‹ƒX]‰…dÿÿÿ‰…`ÿÿÿ‰…hÿÿÿ鸧ÿÿ‹ƒöU‹‰ƒòUǃîUûÇ…lÿÿÿ‹‹X]‰dÿÿÿ‰`ÿÿÿ‰hÿÿÿéy§ÿÿ‹ƒöU‹‰ƒòUǃîUûÇ…lÿÿÿ‹“X]‰•dÿÿÿ‰•`ÿÿÿ‰•hÿÿÿé:§ÿÿ‹ƒöU‹‰ƒòUǃîUûÇ…lÿÿÿ‹ƒX]‰…dÿÿÿ‰…`ÿÿÿ‰…hÿÿÿéû¦ÿÿ‹E¬‹P‰$ÿR鬬ÿÿ‹E¸‹P‰$ÿR邬ÿÿ‹E´‹P‰$ÿR飬ÿÿè©ô…À…[úÿÿƒ^ó‰D$‹ƒD]‹‰$èZôé<úÿÿ‹E¸‹P‰$ÿRééýÿÿ‹ƒöU‹‰ƒòUǃîU(én¦ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‹“X]‰•dÿÿÿ‰•`ÿÿÿ‰•hÿÿÿé/¦ÿÿ‹ƒöU‹‰ƒòUǃîU)é¦ÿÿ‹ƒöU‹‰ƒòUǃîU)éõ¥ÿÿ‹ƒöU‹‰ƒòUǃîU)騥ÿÿ‹ƒöU‹‰ƒòUǃîU(黥ÿÿ‹ƒöU‹‰ƒòUǃîU(鞥ÿÿ‹ƒöU‹‰ƒòUǃîU(é¥ÿÿ‹ƒöU‹‰ƒòUǃîU(éd¥ÿÿ‹ƒöU‹‰ƒòUǃîU(éG¥ÿÿ‹ƒöU‹‰ƒòUǃîU*é*¥ÿÿ‹ƒöU‹‰ƒòUǃîU)é ¥ÿÿ‹ƒöU‹‰ƒòUǃîU)éð¤ÿÿ‹ƒöU‹‰ƒòUǃîU)éÓ¤ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‹“X]‰•dÿÿÿ‰•`ÿÿÿ‰•hÿÿÿ锤ÿÿÇ…lÿÿÿ‹ƒX]‰…dÿÿÿ‰…`ÿÿÿ‰…hÿÿÿém¤ÿÿ‹ƒöU‹‰ƒòUǃîUAéP¤ÿÿ‹ƒöU‹‰ƒòUǃîU@é3¤ÿÿ‹E¬‹P‰$ÿRé÷÷ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‹“X]‰•dÿÿÿ‰•`ÿÿÿ‰•hÿÿÿéã£ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‹ƒX]‰…dÿÿÿ‰…`ÿÿÿ‰…hÿÿÿ餣ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‹‹X]‰dÿÿÿ‰`ÿÿÿ‰hÿÿÿée£ÿÿÇ…lÿÿÿ‹“X]‰•dÿÿÿ‰•`ÿÿÿ‰•hÿÿÿé>£ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‰µdÿÿÿ‰µ`ÿÿÿ‰µhÿÿÿé£ÿÿ‹ƒöU‹‰ƒòUǃîU‹“X]‰•dÿÿÿ‰•`ÿÿÿ‰•hÿÿÿéТÿÿ‹ƒöU‹‰ƒòUǃîU‹ƒX]‰…dÿÿÿ‰…`ÿÿÿ‰…hÿÿÿ離ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‹‹X]‰dÿÿÿ‰`ÿÿÿ‰hÿÿÿé\¢ÿÿ‹ƒöU‹‰ƒòUǃîUAé?¢ÿÿ‹ƒöU‹‰ƒòUǃîUAé"¢ÿÿ‹ƒöU‹‰ƒòUǃîU@é¢ÿÿ‹ƒöU‹‰ƒòUǃîU@éè¡ÿÿ‹ƒöU‹‰ƒòUǃîU@éË¡ÿÿ‹ƒöU‹‰ƒòUǃîUA鮡ÿÿ‹ƒè‰…À„¤ƒ^ó‰D$‹ƒD]‹‰$è>öU‹‰ƒòUǃîU éh¡ÿÿ‹ƒöU‹‰ƒòUǃîU"éK¡ÿÿ‹ƒöU‹‰ƒòUǃîU é.¡ÿÿ‹ƒöU‹‰ƒòUǃîU>é¡ÿÿ‹ƒöU‹‰ƒòUǃîU0éô ÿÿ‹ƒöU‹‰ƒòUǃîU0é× ÿÿ‹ƒöU‹‰ƒòUǃîU0麠ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‹‹X]‰dÿÿÿ‰`ÿÿÿ‰hÿÿÿé{ ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‹“X]‰•dÿÿÿ‰•`ÿÿÿ‰•hÿÿÿé< ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‹ƒX]‰…dÿÿÿ‰…`ÿÿÿ‰…hÿÿÿéýŸÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‹‹X]‰dÿÿÿ‰`ÿÿÿ‰hÿÿÿ龟ÿÿ‹ƒöU‹‰ƒòUǃîU"顟ÿÿ‹ƒöU‹‰ƒòUǃîU"鄟ÿÿ‹ƒöU‹‰ƒòUǃîU"égŸÿÿ‹ƒöU‹‰ƒòUǃîU>éJŸÿÿ‹ƒöU‹‰ƒòUǃîU#é-Ÿÿÿ‹ƒöU‹‰ƒòUǃîU"éŸÿÿ‹ƒöU‹‰ƒòUǃîU"éóžÿÿ‹ƒöU‹‰ƒòUǃîU6éÖžÿÿ‹ƒöU‹‰ƒòUǃîU 鹞ÿÿ‹ƒöU‹‰ƒòUǃîU"霞ÿÿ‹ƒöU‹‰ƒòUǃîU"éžÿÿ‹ƒöU‹‰ƒòUǃîU ébžÿÿ‹ƒöU‹‰ƒòUǃîU9éEžÿÿ‹ƒöU‹‰ƒòUǃîU6é(žÿÿ‹ƒöU‹‰ƒòUǃîU6é žÿÿ‹ƒöU‹‰ƒòUǃîU"éîÿÿ‹ƒöU‹‰ƒòUǃîU"éÑÿÿ‹ƒöU‹‰ƒòUǃîU6é´ÿÿ‹ƒöU‹‰ƒòUǃîU5é—ÿÿ‹ƒöU‹‰ƒòUǃîU;ézÿÿ‹ƒöU‹‰ƒòUǃîU;é]ÿÿ‹ƒöU‹‰ƒòUǃîU;é@ÿÿ‹ƒöU‹‰ƒòUǃîU;é#ÿÿ‹ƒöU‹‰ƒòUǃîU9éÿÿ‹ƒöU‹‰ƒòUǃîU9ééœÿÿ‹ƒöU‹‰ƒòUǃîU9éÌœÿÿè­ê…À…Úÿÿ‹E´‹ƒê‰…Òu ‹E´‹P‰$ÿRÇE´1À9µDÿÿÿÀ‰E¨…Àu1À9½HÿÿÿžÀ‰E¨‹E¨…À…?›ÿÿ9½Dÿÿÿ}½<ÿÿÿ‹Dÿÿÿ)<ÿÿÿ‰½Dÿÿÿ1À9µHÿÿÿŸÀ‰E¨…À„” µ@ÿÿÿ‹…Hÿÿÿ)…@ÿÿÿ‰µHÿÿÿ‹M‹Q(é, ÿÿ‹ƒöU‹‰ƒòUǃîU;éý›ÿÿ‹ƒöU‹‰ƒòUǃîU;éà›ÿÿ‹ƒöU‹‰ƒòUǃîU9éÛÿÿ‹ƒöU‹‰ƒòUǃîU9馛ÿÿ‹ƒöU‹‰ƒòUǃîU9鉛ÿÿ‹ƒöU‹‰ƒòUǃîU9él›ÿÿ‹ƒöU‹‰ƒòUǃîU1éO›ÿÿ‹ƒöU‹‰ƒòUǃîU é2›ÿÿ‹ƒöU‹‰ƒòUǃîU9é›ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‹‹X]‰dÿÿÿ‰`ÿÿÿ‰hÿÿÿéÖšÿÿ‹ƒöU‹‰ƒòUǃîUC鹚ÿÿ‹ƒöU‹‰ƒòUǃîU"霚ÿÿ‹ƒöU‹‰ƒòUǃîU#éšÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‰µdÿÿÿ‰µ`ÿÿÿ‰µhÿÿÿéFšÿÿ‹ƒöU‹‰ƒòUǃîU"é)šÿÿ‹ƒöU‹‰ƒòUǃîU"é šÿÿ‹ƒöU‹‰ƒòUǃîU"éï™ÿÿ‹ƒöU‹‰ƒòUǃîU'éÒ™ÿÿ‹ƒöU‹‰ƒòUǃîUBéµ™ÿÿ‹ƒöU‹‰ƒòUǃîU9阙ÿÿ‹ƒöU‹‰ƒòUǃîU9é{™ÿÿ‹ƒöU‹‰ƒòUǃîU1é^™ÿÿ‹ƒöU‹‰ƒòUǃîU1éA™ÿÿ‹ƒöU‹‰ƒòUǃîU1é$™ÿÿ‹ƒöU‹‰ƒòUǃîU0é™ÿÿ‹ƒöU‹‰ƒòUǃîU"éê˜ÿÿ‹ƒöU‹‰ƒòUǃîU>é͘ÿÿ‹ƒöU‹‰ƒòUǃîU>é°˜ÿÿ‹ƒöU‹‰ƒòUǃîU>铘ÿÿ‹ƒöU‹‰ƒòUǃîU>év˜ÿÿ‹ƒöU‹‰ƒòUǃîU>éY˜ÿÿ‹ƒöU‹‰ƒòUǃîU>é<˜ÿÿ‹ƒöU‹‰ƒòUǃîU>é˜ÿÿ‹ƒöU‹‰ƒòUǃîU;é˜ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‹‹X]‰dÿÿÿ‰`ÿÿÿ‰hÿÿÿé×ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‹ƒX]‰…dÿÿÿ‰…`ÿÿÿ‰…hÿÿÿé„—ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‹“X]‰•dÿÿÿ‰•`ÿÿÿ‰•hÿÿÿéE—ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‹ƒX]‰…dÿÿÿ‰…`ÿÿÿ‰…hÿÿÿé—ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‰µdÿÿÿ‰µ`ÿÿÿ‰µhÿÿÿéÍ–ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‰µdÿÿÿ‰µ`ÿÿÿ‰µhÿÿÿé”–ÿÿ‹ƒöU‹‰ƒòUǃîU;éw–ÿÿ‹ƒöU‹‰ƒòUǃîU6éZ–ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‹“X]‰•dÿÿÿ‰•`ÿÿÿ‰•hÿÿÿé–ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‰µdÿÿÿ‰µ`ÿÿÿ‰µhÿÿÿéâ•ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‹“X]‰•dÿÿÿ‰•`ÿÿÿ‰•hÿÿÿ飕ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‹ƒX]‰…dÿÿÿ‰…`ÿÿÿ‰…hÿÿÿéd•ÿÿ‹ƒöU‹‰ƒòUǃîUÇ…lÿÿÿ‹‹X]‰dÿÿÿ‰`ÿÿÿ‰hÿÿÿé%•ÿÿ‹ƒöU‹‰ƒòUǃîU7é•ÿÿ‹ƒöU‹‰ƒòUǃîU7éë”ÿÿ‹ƒöU‹‰ƒòUǃîU7éΔÿÿ‹ƒöU‹‰ƒòUǃîU7é±”ÿÿ‹ƒöU‹‰ƒòUǃîU7é””ÿÿ‹ƒöU‹‰ƒòUǃîU7éw”ÿÿ‹•lÿÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹ƒ¾W‰D$‹EÀ‰$è‚ã‰E¨ƒøŒ„}‹E¨…Àu-‹Xÿÿÿƒ‰Îéû”ÿÿ‹ƒöU‹‰ƒòUǃîU7é”ÿÿ‹ƒâV‰D$‹M‰ $èçá‰E´…À„Ç$èéá‰E°…À„Ä‹…Xÿÿÿƒ‹E°‹•Xÿÿÿ‰P ‹EÀ‰D$‹E°‰D$‹E´‰$èâ‰E¤…Àth‹E´‹ƒê‰…Òu ‹E´‹P‰$ÿRÇE´‹E°‹ƒê‰…Òu ‹E°‹P‰$ÿRÇE°‹E¤‹ƒê‰…Òu ‹E¤‹P‰$ÿRÇE¤éÿþÿÿ‹ƒöU‹‰ƒòUǃîULÇ…lÿÿÿé“ÿÿ‹ƒöU‹‰ƒòUǃîULÇ…lÿÿÿéà’ÿÿ‹ƒöU‹‰ƒòUǃîULÇ…lÿÿÿé¹’ÿÿ‹ƒÂW‰D$‹EÀ‰$èÞá‰E¨ƒøŒ¾…\þÿÿ‹ƒnW‰D$‹EÀ‰$è·á‰E¨ƒø|t…9þÿÿ‹ƒVW‰D$‹EÀ‰$è”á‰E¨…À‰þÿÿ‹ƒöU‹‰ƒòUǃîUKÇ…lÿÿÿé(’ÿÿ‹ƒöU‹‰ƒòUǃîUJÇ…lÿÿÿé’ÿÿ‹ƒöU‹‰ƒòUǃîUKÇ…lÿÿÿéÚ‘ÿÿ‹ƒöU‹‰ƒòUǃîUJÇ…lÿÿÿ鳑ÿÿ‹ƒöU‹‰ƒòUǃîU<é–‘ÿÿ‹ƒöU‹‰ƒòUǃîU-éy‘ÿÿ‹ƒöU‹‰ƒòUǃîU,é\‘ÿÿ‹ƒöU‹‰ƒòUǃîU,é?‘ÿÿ‹ƒöU‹‰ƒòUǃîUCé"‘ÿÿÇ…lÿÿÿ‹ƒX]‰…dÿÿÿ‰…`ÿÿÿ‰…hÿÿÿéûÿÿ‹B‰$ÿPéNïÿÿ‹ƒöU‹‰ƒòUǃîU-éÐÿÿ‹ƒöU‹‰ƒòUǃîU<é³ÿÿ‹ƒöU‹‰ƒòUǃîU6é–ÿÿ‹ƒöU‹‰ƒòUǃîU6éyÿÿ‹ƒöU‹‰ƒòUǃîU6é\ÿÿ‹ƒöU‹‰ƒòUǃîU7é?ÿÿ‹ƒöU‹‰ƒòUǃîU7é"ÿÿ‹ƒöU‹‰ƒòUǃîU7éÿÿ‹ƒöU‹‰ƒòUǃîU7éèÿÿ‹ƒöU‹‰ƒòUǃîU<éËÿÿ‹ƒöU‹‰ƒòUǃîU<é®ÿÿ‹ƒöU‹‰ƒòUǃîU6é‘ÿÿ‹ƒöU‹‰ƒòUǃîU6étÿÿ‹ƒöU‹‰ƒòUǃîU<éWÿÿ‹ƒöU‹‰ƒòUǃîU-é:ÿÿ‹ƒöU‹‰ƒòUǃîU<éÿÿ‹ƒöU‹‰ƒòUǃîU<éÿÿ‹ƒöU‹‰ƒòUǃîU<éãŽÿÿ‹ƒöU‹‰ƒòUǃîU<éÆŽÿÿ‹ƒöU‹‰ƒòUǃîU,驎ÿÿ‹E‹P(é°’ÿÿ‹ƒöU‹‰ƒòUǃîU-éŽÿÿ‹ƒöU‹‰ƒòUǃîU-édŽÿÿ‹ƒöU‹‰ƒòUǃîU,éGŽÿÿ‹ƒöU‹‰ƒòUǃîU,é*Žÿÿ‹ƒöU‹‰ƒòUǃîU-é Žÿÿ‹ƒöU‹‰ƒòUǃîU7éðÿÿ‹ƒöU‹‰ƒòUǃîU,éÓÿÿ‹ƒöU‹‰ƒòUǃîU<é¶ÿÿU‰åWVSì¬è-{ÇEØÇEàÇEЋƒáÙ‰EÜ‹ƒåÙ‰E䋃éÙ‰EÔUE ÇD$ MЉL$ÇD$Ç$‹yÈèñüÿ…Àˆ EÔ‰D$ Eä‰D$E܉D$Eà‰D$E؉D$ƒyȉD$ ƒEw‰D$‹E‰D$‹E ‰$èSÛ…À„q‹Eƒ‹E؃‹Eàƒ‹E܃‹E䃋EÔƒ‹“ ݃1À9Uä•À‰EÌ…À„ë‹uà‹F‹@4…À„d‹@ …À„YÇD$‰4$èÚÚ‰EŒ‹EŒ…À„\‹uà‹F‹@4…À„Æ‹x …ÿ„»ÇD$‰4$è Ú‰E‹u…ö„J‹E‰D$‹UŒ‰$èlډDžÀ„€ ‹UŒ‹ƒè‰…À„L ‹U‹ƒè‰…À„, ẺD$‹Eä‰D$‰<$è‡Ú…Àˆ[ ÁmÌ‹ƒè‰…À„ ‹“ Ý‹MÌ…É…‘1À9UÔ•À‰EÌ…À„ó‹uà‹F‹@4…À„9 ‹P …Ò„. ÇD$‰4$èÑÙ‰EŒ‹EŒ…À„t ‹uà‹F‹@4…À„Ћ@ …À„ÅÇD$‰4$è—Ù‰E‹E…À„ ‹E‰D$‹UŒ‰$ècىDžÀ„ ‹UŒ‹ƒè‰…À„Î ‹U‹ƒè‰…À„® ẺD$‹EÔ‰D$‰<$è~Ù…ÀˆÝ 1Àƒ}ÌŸÀ‰EÌ‹ƒè‰…À„‘ ‹“ Ý‹EÌ…À…€‰U€9UÜ•À¶À‰EÌ…À…H‹Eàƒ‹}à‰Ö‰U„‰Uˆëc‹U …Òt‹ƒè‰…Àu ‹E ‹P‰$ÿR‹U…Òt‹ƒè‰…Àu ‹E‹P‰$ÿR‹UÐ…Ò…Š1ÿ‰øÄ¬[^_]É։U„‰×‰Uˆ‹UÐ…Òt‹ƒè‰…À„º‹U„‹ƒè‰…À„G‹ƒè‰…À„*‹Uˆ‹ƒè‰…À„ ‹U‹ƒè‰…À„ê‹EØ‹ƒê‰…Ò„Ç‹Eà‹ƒê‰…Ò„¤‹EÜ‹ƒê‰…Ò„‹E䋃ꉅÒte‹EÔ‹ƒê‰…ÒtI‹U …Òt‹ƒè‰…À„ü‹U…Ò„ÿÿÿ‹ƒè‰…À… ÿÿÿ‹E‹P‰$ÿR‰øÄ¬[^_]ËEÔ‹P‰$ÿRë©‹Eä‹P‰$ÿRë‹EÜ‹P‰$ÿRénÿÿÿ‹Eà‹P‰$ÿRéKÿÿÿ‹EØ‹P‰$ÿRé(ÿÿÿ‹B‰$ÿPéÿÿÿ‹B‰$ÿPéèþÿÿ‹F‰4$ÿPéÈþÿÿ‹B‰$ÿPé«þÿÿÇ$è%׉DžÀ„‰D$‰4$èi׉E‹ƒè‰…À…$üÿÿ‹G‰<$ÿPéüÿÿ‹E ‹P‰$ÿRéóþÿÿ‹EЋP‰$ÿRé5þÿÿÇ$èÁ։DžÀ„ ‰D$‰4$è׉EŒ‹ƒè‰…À…†ûÿÿ‹G‰<$ÿPéxûÿÿÇE‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕQ1ÿÇE”ÇE˜ÇEœ‹³ ݉u„‹UŒ‹ƒè‰…À„´‹E…Àt‹U‹ƒè‰…À„!‹ƒ ݉Eˆ…ÿt‹ƒè‰…À„›‹E”…Àt‹U”‹ƒè‰…À„‹E˜…Àt‹U˜‹ƒè‰…À„…‹Eœ…Àt‹Uœ‹ƒè‰…ÀtIƒMwèìüÿ1ÿéþüÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕQ‹³ ݉u„‰uˆëÈ‹UŒ‹B‰$ÿPé;ÿÿÿ‹B‰$ÿP묋G‰<$ÿPéWÿÿÿ‹B‰$ÿPébÿÿÿ‹B‰$ÿPémÿÿÿ‹ƒè‰…À…güÿÿ‹EЋP‰$ÿR1ÿéVüÿÿÇ$èՉDžÀ„W‰D$‰4$èVÕ‰E‹ƒè‰…À…ûÿÿ‹G‰<$ÿPé ûÿÿ‹³ý׉t$‹ƒ™Õ‰$è)Ô‰EŒ…À„҉‹ƒÖ‰D$‰$è Ô‰E…À„Ï‹UŒ‹ƒè‰…À„`‹³ý׉t$‹ƒ™Õ‰$èÕӉDžÀ„L‹ƒÁ׉D$‰<$è¹Ó‰EŒ…À„C‹ƒè‰…À„ä‹uà‹F‹@4…À„¼‹@ …À„±ÇD$‰4$èÒӉDžÿ„¾‹uà‹F‹@4…À„Ê‹@ …À„¿ÇD$‰4$èœÓ‰E”‹u”…ö„@Ç$è<Ó‰E˜…À„‹E؃‹EØ‹U˜‰B ‰z‹E”‰B‰T$‹UŒ‰$è–ӉDžÀ„©‹UŒ‹ƒè‰…À„ð‹U˜‹ƒè‰…À„1‹³ý׉t$‹ƒ™Õ‰$è«Ò‰E”…À„‹ƒ1Ö‰D$‹E”‰$è‹Ò‰EŒ…À„‹U”‹ƒè‰…À„"‹Eà‰E¨‰Â‹@‹@4…À„‹H …É„vÇD$‰$èœÒ‰E˜‹E˜…À„,‹Uà‰U¬‹B‹@4…À„€‹@ …À„uÇD$‰$è_Ò‰E”‹E”…À„*Ç$èÿщEœ…À„‹U‹B8ƒ‹B8‹Uœ‰B ‹E˜‰B‹E”‰B‰T$‹UŒ‰$èSÒ‰E˜…À„o‹UŒ‹ƒè‰…Àu ‹B‰$ÿP‹Uœ‹ƒè‰…Àu ‹B‰$ÿP‹Eà‰E°‰Â‹@‹@4…À„™‹@ …À„ŽÇD$‰$è£Ñ‰E”‹E”…À„SÇ$èCщEŒ…À„‹Uƒ‹EŒ‰P ‰x‹U˜‰P‹U”‰P‰D$‹E‰$èšÑ‰EÄ…À„e‹U‹ƒè‰…À„€‹UŒ‹ƒè‰…À„`‹³ Ý‹ƒè‰…À„+ ‹ƒÖ‰D$‹Eĉ$èœÐ‰Ç…À„æ Ç$èŸÐ‰E˜…À„› è9щE”…À„^ ‹E܉D$‹ƒu׉D$‹E”‰$è©Ð…Àˆ: ‹Eä‰D$‹ƒ!׉D$‹E”‰$è…Ð…Àˆ ‹EЉD$‹E”‰$è)Ñ…Àˆü ‹E”‰D$‹U˜‰T$‰<$èpЉE¼…À„® ‹ƒè‰…Àu ‹G‰<$ÿP‹U˜‹ƒè‰…Àu ‹B‰$ÿP‹U”‹ƒè‰…Àu ‹B‰$ÿP‹» Ý‹ƒè‰…Àu ‹G‰<$ÿP1À9}¼”À‰EÌ…À„/ƒ‹EĉE„‹u¼‰}ˆéR÷ÿÿ‹U‹B‰$ÿPéÎùÿÿÇ$èãωDžÀtR‰D$‰4$è+ЉEŒ‹ƒè‰…À…µõÿÿ‹G‰<$ÿPé§õÿÿÇE‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕS1ÿé!ùÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕS‹³ ݉u„‰uˆé¤ùÿÿ‹B‰$ÿPéÆôÿÿ‹B‰$ÿPé¦ôÿÿ‹G‰<$ÿP‹“ ÝéÛôÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕQ髸ÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕQÇE”ÇE˜ÇEœ‹³ ݉u„‰uˆé¿øÿÿ‹B‰$ÿPéDõÿÿ‹B‰$ÿPé$õÿÿ‹G‰<$ÿP‹“ Ýéaõÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕSé øÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕSépÿÿÿÇ$èaΉE …À„‰D$‰4$è¤Î‰Ç‹U ‹ƒè‰…À…*úÿÿ‹B‰$ÿPéúÿÿ‹B‰$ÿPé’ùÿÿ‰t$‹ƒ'Ý‹‰$è¬Í‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕVÇE”ÇE˜‹³ ݉u„ÇEœé˜÷ÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕV1ÿÇE”ÇE˜ÇEœ‹u€‰u„éE÷ÿÿÇE”‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕVÇE˜ÇEœ‹³ ݉u„é ÷ÿÿ‹G‰<$ÿPéùÿÿ1ÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕVé¿öÿÿÇ$è͉E¤…Àt…‰D$‰4$èd͉E”‹U¤‹ƒè‰…À… ùÿÿ‹B‰$ÿPéùÿÿ‰t$‹ƒ'Ý‹‰$èyÌ‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕV‹u€‰u„‰uˆéïöÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕVÇEœ‹³ ݉u„é4öÿÿ‹B‰$ÿPéùÿÿÇ$èf̉ƅÀ„·‰D$‹E¨‰$è§Ì‰E˜‹ƒè‰…À…fùÿÿ‹F‰4$ÿPéXùÿÿ‹B‰$ÿPéÁøÿÿ‰t$‹ƒ'Ý‹‰$è±Ë‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕWÇE˜éþÿÿ‹B‰$ÿPéÐøÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕVÇE”ÇEœ‹³ ݉u„éYõÿÿÇE˜‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕWÇE”ÇEœ‹³ ݉u„éõÿÿÇE”‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕWÇEœ‹³ ݉u„éêôÿÿÇ$è*ˉƅÀtº‰D$‹E¬‰$èoˉE”‹ƒè‰…À…køÿÿ‹F‰4$ÿPé]øÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕW‹³ ݉u„éƒôÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕWÇE”‹³ ݉u„éVôÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕVé¥üÿÿÇE”‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕWéüÿÿÇ$èUʉƅÀtʉD$‹E°‰$èšÊ‰E”‹ƒè‰…À…Røÿÿ‹F‰4$ÿPéDøÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕV1ÿé—óÿÿ‹B‰$ÿPé’øÿÿ‹B‰$ÿPérøÿÿ‹ƒqÖ‰D$‹U‰$è5ɉEŒ…À„Ç‹U¼‹B‹@4…À„u‹@ …À„jÇD$‰$è]ɉEœ‹}œ…ÿ„‹U¼‹B‹@4…À„·‹p …ö„¬ÇD$‰$è#ɉDžÿ„W‹Eà‰E´‰Â‹@‹@4…À„þ‹H …É„óÇD$‰$èèȉE˜‹E˜…À„¡Ç$èˆÈ‰E”…À„V‹Eœ‹U”‰B ‰z‹E˜‰B‰T$‹UŒ‰$èèȉEÀ…À„í‹UŒ‹ƒè‰…Àu ‹B‰$ÿP‹U”‹ƒè‰…Àu ‹B‰$ÿP‹“ Ý‹ƒè‰…Àu ‹B‰$ÿPÇ$èýljEœ…À„b‹E¼ƒ‹Uœ‰B ‰T$‹ƒg݉$è`ȉDžÀ„‹Uœ‹ƒè‰…Àu ‹B‰$ÿPÇ$èÊljE˜…À„¦‹EÀƒ‹U˜‹B ‹UÀ‰‹E˜‰D$‰<$èDȉE¸…ÀtE‹ƒè‰…Àu ‹G‰<$ÿP‹U˜‹ƒè‰…Àu ‹U˜‹B‰$ÿP‹EĉE„‹u¼‹UÀ‰Uˆ‹}¸éïÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡Õ]‹UĉU„‹u¼‹EÀ‰EˆÇE”ÇEœé`ñÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡Õ]‹EĉE„‹u¼‹UÀ‰UˆÇE”ÇEœé&ñÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡Õ]‹EĉE„‹u¼‹UÀ‰Uˆé?ñÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡Õ]‹EĉE„‹u¼‹UÀ‰Uˆé(ñÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡Õ\‹EĉE„‹u¼ÇE1ÿÇE˜ÇEœé]ðÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡Õ\‹EĉE„‹u¼ÇEé0ðÿÿÇE˜‹ƒ©Õ‹‰ƒ¥Õǃ¡Õ\‹UĉU„‹u¼ÇEÇE”éõïÿÿÇ$è5ƉƅÀt³‰D$‹E´‰$èzƉE˜‹ƒè‰…À…íüÿÿ‹F‰4$ÿPéßüÿÿ1ÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡Õ\‹UĉU„‹u¼ÇEÇE”ÇE˜éwïÿÿÇ$è·Å‰Æ…Àt±‰D$‹E¼‰$èüʼnNjƒè‰…À…4üÿÿ‹F‰4$ÿPé&üÿÿÇEœ‹ƒ©Õ‹‰ƒ¥Õǃ¡Õ\‹UĉU„‹u¼ÇE1ÿÇE”ÇE˜éóîÿÿÇ$è3ʼnƅÀtª‰D$‹E¼‰$èxʼnEœ‹ƒè‰…À…vûÿÿ‹F‰4$ÿPéhûÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡Õ\‹EĉE„‹u¼‰}ˆéïÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕX‹EĉE„ÇEœ‰uˆéîÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕX‹UĉU„ÇEœ‰uˆécîÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕX‹EĉE„ÇE”ÇEœ‰uˆé/îÿÿ‹ƒ©Õ‹‰ƒ¥Õǃ¡ÕX‹UĉU„‰uˆécîÿÿ‹F‰4$ÿPéÇòÿÿU‰åWVSƒì|èøbÇEØÇEäÇEÔÇEÐÇEÌ‹ƒ¸Á‰Eà‹ƒ¼Á‰EÜUE ÇD$ Mä‰L$ÇD$Ç$‹\°è·uüÿ…Àˆ8E܉D$Eà‰D$E؉D$ƒ\°‰D$ ƒd_‰D$‹E‰D$‹E ‰$è'Ã…À„³‹Eƒ‹E؃‹Eàƒ‹E܃‹“ÖĉU¤ƒ1Ò‹ƒÀè%züÿ‰E¼…À„`‹U¤‹ƒè‰…À„¢ ‰Ð9EÜ„× ‹U‹B0‹@<ƒ‹U¤‹ƒè‰…À„˜ ‹U‹B0‹@<‰E¤‹Eàƒ‹»ÖÄ‹ƒè‰…À„c ‹Eà‰E¨‹ƒ´¾‰D$‹E؉$è‰EÄ…À„«ÇD$‰$èŒÂ‰EÔ…À„Ø ‹UÄ‹ƒè‰…À„C‹EÔ‰$è°Á‰EÄ…À„ý ‹EÔ‹ƒê‰…Ò„)ÇEÔ‰}°‰}¬‰}¸‰}´‹Eĉ$è3‰EÔ…À„ ‰$èbÁ‰EÐ…À„N ‹EÔ‹ƒê‰…Ò„¡ÇEÔ‹EЉ$èñÁ‰Æ…À„܉uÔ…ö„ ‹U¬‹ƒè‰…À„y‹EÔ‰E¬ÇEÔ‹EЉ$è²Á‰Æ…À„ɉuÔ…ö„Ö ‹U°‹ƒè‰…À„H‹EÔ‰E°ÇEÔ‹EЉ$èsÁ‰Â…À…y è¡À…À…• ‹EЋƒê‰…Ò„ÇEЋU¬‰$èÁ‰ÆènÀ…À…Ó ‹U‹BÇD$ÇD$ ‰t$‹U¤‰T$‹U‰$ÿP‰EÔ…À„ž ‹U´‹ƒè‰…À„¾‹EÔ‰E´ÇEÔ‹U¨;“ÖÄt[‹ƒ¬½‰D$‹E¼‰$èÀ‰EÐ…À„q ‰D$‹U¨‰$è2À‰Æƒøÿ„W ‹EЋƒê‰…Ò„¨ÇEÐ…ö„X‹E°‰$è¥À‰EÀƒÀ„s ‹EÀ…ÀŽ_ÇEœÇE él‹Eœ‰D$‰$èÛ¿‰Æ‰uÐ…ö„ÑÇ$è|¿‰EÔ…À„º‹U´ƒ‹EÔ‰P ‹UЋEÔ‰PÇEÐèú¿‰Â‰EÌ…À„Œ‹Eà‰D$‹ƒ@¿‰D$‰$èk¿…Àˆk‹Eä‰D$‹Ẻ$èÀ…ÀˆQ‹ẺD$‹EÔ‰D$‹E܉$èS¿‰EÐ…À„-‹EÔ‹ƒê‰…Ò„^ÇEÔ‹EÌ‹ƒê‰…Ò„4ÇEÌ‹U¸‹ƒè‰…À„ ‹EЉE¸ÇEÐ;ƒÖÄtC‹U°‹B‹@4…À„‹@ …À„’‹E¸‰D$‹U ‰T$‹E°‰$覾‰Ç…ÿˆÕƒE ƒEœ‹EÀ9Eœ„Õ‹U°‹B‹@4…Àt ‹@ …À…|þÿÿ‹Uœ‰$è—¾‰Ç…À„8‰D$‹E°‰$èØ¾‰Æ‹ƒè‰…À…Xþÿÿ‹G‰<$ÿPéJþÿÿ‹U ‰$èT¾‰Æ…À„Q‹E¸‰D$‰t$‹U°‰$èÆ½‰Ç‹ƒè‰…À…Mÿÿÿ‹F‰4$ÿPé?ÿÿÿ‹B‰$ÿPéåþÿÿ‹EÌ‹P‰$ÿRé»þÿÿ‹EÔ‹P‰$ÿRé‘þÿÿ‹E …À…Ø‹U¬‰T$‹E؉$èY¾…À‰–ûÿÿ‹ƒt½‹‰ƒp½ǃl½é‚‹U …Òt‹ƒè‰…À„°‹U…Òt‹ƒè‰…À„«‹Uä…Òt‹ƒè‰…À„ë1ÿ‰øƒÄ|[^_]Ã1öé9ýÿÿ‹EÔ‹P‰$ÿRéNûÿÿ‹B‰$ÿPéyûÿÿ‹B‰$ÿPéªûÿÿ‹EЋP‰$ÿRéÚûÿÿ‹B‰$ÿPé4üÿÿ‹E 9EÀŽÌúÿÿÇD$ÿÿÿ‰D$‹U°‰$虼…À‰­úÿÿ‹ƒt½‹‰ƒp½ǃl½é™‹ƒt½‹‰ƒp½ǃl½j‹u¤‰u¨‰u¬‰u°‰u´‰u¸‹UÔ…Òt‹ƒè‰…À„‹UÐ…Òt‹ƒè‰…À„©‹UÌ…Òt‹ƒè‰…À„¤ƒ”_è|tüÿ1ÿ‹Uä…Òt‹ƒè‰…À„’‹U¤‹ƒè‰…À„$‹ƒè‰…À„‹U¨‹ƒè‰…À„ç‹U¬‹ƒè‰…À„Ç‹U°‹ƒè‰…À„§‹U´‹ƒè‰…À„‡‹U¸‹ƒè‰…À„g‹U‹ƒè‰…À„í‹EØ‹ƒê‰…Ò„ö‹Eà‹ƒê‰…Ò„‹EÜ‹ƒê‰…Ò„‹U …Òt‹ƒè‰…À„Ê‹U…Ò„èýÿÿ‹ƒè‰…À…Ùýÿÿ‹E‹P‰$ÿR‰øƒÄ|[^_]ËB‰$ÿP靸ÿÿ‹EÔ‹P‰$ÿR鯸ÿÿ‹E´‰D$‹U¨‰$èK»‰EÔ…À„+‹Eà‹ƒê‰…Ò„q‹EÔ‰EàÇEÔégúÿÿ‹EЋP‰$ÿRéGúÿÿ‹B‰$ÿP‹EØ‹ƒê‰…Ò… ÿÿÿ‹EØ‹P‰$ÿR‹Eà‹ƒê‰…Ò…þþÿÿ‹Eà‹P‰$ÿR‹EÜ‹ƒê‰…Ò…òþÿÿ‹EÜ‹P‰$ÿRéáþÿÿ‹B‰$ÿPé‹þÿÿ‹B‰$ÿPékþÿÿ‹B‰$ÿPéKþÿÿ‹B‰$ÿPé+þÿÿ‹B‰$ÿPé þÿÿ‹F‰4$ÿPéëýÿÿ‹B‰$ÿPéÎýÿÿ‹ƒt½‹‰ƒp½ǃl½o‹u¼‰}°‰}¬‰}¸‰}´é+ýÿÿ‹EЋP‰$ÿRéFýÿÿ‹EÌ‹P‰$ÿRéKýÿÿ‹Eä‹P‰$ÿRé]ýÿÿ‹E ‹P‰$ÿRé%þÿÿ‹EÔ‹P‰$ÿRéìüÿÿ‹B‰$ÿP‹E¤éOöÿÿ‹G‰<$ÿPéöÿÿ‹B‰$ÿPéZöÿÿ‹ƒt½‹‰ƒp½ǃl½y‹UÄ‹ƒè‰…Àt‹u¼é{üÿÿ‹UÄ‹B‰$ÿP‹u¼égüÿÿèC¸…À…÷ÿÿƒÜZ‰D$‹ƒÂÄ‹‰$èô·éøöÿÿ踅À…*÷ÿÿƒÜZ‰D$‹ƒÂÄ‹‰$èÈ·é ÷ÿÿ‹ƒt½‹‰ƒp½ǃl½o‰}°‰}¬‰}¸‰}´éUÿÿÿ‹Eä‹P‰$ÿR1ÿéûÿÿ‹Eà‹P‰$ÿRé~ýÿÿ‹ƒt½‹‰ƒp½ǃl½o‹u¼‰}°‰}¬‰}¸‰}´é–ûÿÿ‹ƒH¾‰D$‹U‰$èv·‰Æ…À„“‹EÜ‹ƒê‰…Òt‰uÜéôôÿÿ‹EÜ‹P‰$ÿR‰uÜéàôÿÿ‹E ‹P‰$ÿRé?úÿÿ‹E‹P‰$ÿRéDúÿÿ‹ƒt½‹‰ƒp½ǃl½s‹UÐ…Òt‹ƒè‰…À„÷ÇEЋUÔ…Òt‹ƒè‰…À„ëÇEÔ‹ƒÒÄ‹‰$èͶ…À„0þÿÿƒl_èoüÿMÌUÔEÐèÛlüÿ…ÀˆŠ‹U¬‰T$‹E؉$请…À‰ìôÿÿ‹ƒt½‹‰ƒp½ǃl½uéØýÿÿ‹ƒt½‹‰ƒp½ǃl½|é»ýÿÿ‹ƒè‰…À„ƒÜZ‰D$‹ƒÂÄ‹‰$è×µ‹ƒt½‹‰ƒp½ǃl½oéuýÿÿ‹EЋP‰$ÿRéøþÿÿ‹EÔ‹P‰$ÿRéÿÿÿ‹ƒt½‹‰ƒp½ǃl½l‹u¼‹E¤‰E¬‰E¨‰E´‰E°‰E¸é²ùÿÿ‹ƒt½‹‰ƒp½ǃl½péýÿÿ‹ƒt½‹‰ƒp½ǃl½qéçüÿÿèTµ…À…Hÿÿÿ‹UÄ‹ƒè‰…Àu ‹B‰$ÿP‹ƒÖă‹u¼‰Çéùÿÿ‹ƒt½‹‰ƒp½ǃl½xé“üÿÿ‹B‰$ÿPéÙþÿÿ‹ƒt½‹‰ƒp½ǃl½téhüÿÿU‰åWVSì,èkTÇE´ÇEÈÇEÀÇE¼ÇE¸‹ƒ3³‰Eà‹ƒ7³‰EÜ‹ƒ;³‰EØ‹ƒ?³‰EÔ‹ƒC³‰EЋƒG³‰EÌUE ÇD$ MȉL$ÇD$Ç$‹ï¡ègüÿ…ÀˆAẺD$(EЉD$$EÔ‰D$ E؉D$E܉D$Eà‰D$E´‰D$ƒï¡‰D$ ƒwQ‰D$‹E‰D$‹E ‰$èZ´…À„›‹Eƒ‹E´ƒ‹Eàƒ‹E܃‹E؃‹EÔƒ‹EЃ‹Ẽ‹³I¶ƒ‹U‹B0‹@<ƒ‹ƒè‰…À„‹U‹B0‹@<‰E 1À9uØ”À‰EÄ…À…Ç$諳‰Ç…À„P‹³I¶‹ƒè‰…À„Ê1Ò‹ƒC°èÞjüÿ‰E”…À„Ó‹ƒè‰…À„â‹E؉$賉E˜…À„ý‰½(ÿÿÿ‰÷‰µ0ÿÿÿ‰µ4ÿÿÿ‰µ8ÿÿÿ‰µTÿÿÿ‰µ<ÿÿÿ‰µ@ÿÿÿ‰µDÿÿÿ‰µHÿÿÿ‰µLÿÿÿ‰µPÿÿÿ‰µxÿÿÿ‹U˜‰$èm³‰E€…À„³4‹•0ÿÿÿ‹ƒè‰…À„Å Ç$èβ‰E„…À„¾T‹ƒè‰…À„‘ ‹E€‰$è^²‰Eˆ…À„èTÇ… ÿÿÿ‹Uˆ‰$èü²‰EÀ…À„ž‹•4ÿÿÿ‹ƒè‰…À„ô‹EÀ‰…4ÿÿÿÇEÀ‹ƒ¶‰D$‹•4ÿÿÿ‰$èK²‰Eăøÿ„Ò…À„ô‹…4ÿÿÿ‰$èj²‰EÄèDZ…À…n ‹}Ä‹U‹BÇD$ÇD$ ‰|$‹U ‰T$‹U‰$ÿP‰EÀ…À„‹•4ÿÿÿ‹ƒè‰…À„[‹EÀ‰…4ÿÿÿÇEÀ‹u´‹F‹@4…À„á ‹@ …À„Ö ‰|$‰4$è­±‰Æ‰u¼…ö„¡‹•8ÿÿÿ‹ƒè‰…À„#‹E¼‰…8ÿÿÿÇE¼‹“¶‰•Xÿÿÿƒ‹•Tÿÿÿ‹ƒè‰…À„Û ‹…8ÿÿÿ‰$èÛ°‰E¸…À„‹•Xÿÿÿ‰•Tÿÿÿé­ÇD$‰$豉ƉuÀ…ö„;‹• ÿÿÿ‰$è>±‰…lÿÿÿ…À„jÇ$袰‰…\ÿÿÿ…À„‘‰Â‹EÀ‰B ‹…Xÿÿÿƒ‰B‹…lÿÿÿ‰B‹•4ÿÿÿƒ‹…\ÿÿÿ‰P‹•Tÿÿÿƒ‰P‹…<ÿÿÿƒ‹•\ÿÿÿ‰B ÇEÀÇ$è4°‰EÀ…À„]‹•\ÿÿÿ‰P ‹EÀ‰D$‹E¼‰$èš°‰Æ…À„y‹E¼‹ƒê‰…Ò„‚ ÇE¼‹EÀ‹ƒê‰…Ò„X ÇEÀ‹ƒè‰…À„4 ‹ƒƒ¯‰D$‹E„‰$蕯‰…\ÿÿÿ…À„`‹•<ÿÿÿ‹B‹@4…À„¨‹@ …À„ÇD$‰$è·¯‰Æ‰u¼…ö„e‹• ÿÿÿ‰$èØ¯‰EÀ…À„Ç$è?¯‰…lÿÿÿ…À„ë‰Â‹E¼‰B ‹³¡¶ƒ‰r‹EÀ‰B‹…4ÿÿÿƒ‰B‹•Tÿÿÿƒ‹…lÿÿÿ‰P‹•<ÿÿÿƒ‰P ÇE¼ÇEÀÇ$èÓ®‰E¼…À„K‹•lÿÿÿ‰P ‹E¼‰D$‹…\ÿÿÿ‰$è6¯‰EÀ…À„‹•\ÿÿÿ‹ƒè‰…À„[‹E¼‹ƒê‰…Ò„8ÇE¼‹EÀ‹ƒê‰…Ò„ÇEÀƒ‹•Tÿÿÿ‹ƒè‰…À„ትTÿÿÿ‹E¸‰$èÅ®‰EÀ…À„ ‹•<ÿÿÿ‹ƒè‰…À„r‹EÀ‰…<ÿÿÿÇEÀ‹ƒƒ¯‰D$‹U„‰$èÑ­‰E¼…À„ ‹•<ÿÿÿ‹B‹@4…Àt ‹@ …À…ÝüÿÿÇ$è:®‰Ç…À„‰D$‹…<ÿÿÿ‰$èx®‰Æ‹ƒè‰…À…¶üÿÿ‹G‰<$ÿPé¨üÿÿÇ$è”­‰Ç…À„S ‹E´ƒ‹W ‹E´‰‹EØ‹ƒê‰…Ò„3‰}ØÇ$è[­‰Ç…À…°ùÿÿ‹ƒç®‹‰ƒã®ǃ߮¥‹“I¶‰•xÿÿÿ‰•Pÿÿÿ‰•Lÿÿÿ‰•Hÿÿÿ‰•Dÿÿÿ‰•@ÿÿÿ‰•<ÿÿÿ‰•Tÿÿÿ‰•8ÿÿÿ‰•4ÿÿÿ‰×‰½0ÿÿÿ‰½,ÿÿÿ‰½(ÿÿÿÇEÇEŒÇ…\ÿÿÿÇ…lÿÿÿ饋F‰4$ÿP‹U‹B0‹@<‰E 1À9uØ”À‰EÄ…À„Ýøÿÿéïþÿÿ‹U …Òt‹ƒè‰…Àu ‹E ‹P‰$ÿR‹U…Òt‹ƒè‰…Àu ‹E‹P‰$ÿR‹UÈ…Ò…œ 1ö‰ðÄ,[^_]˃築D$‹U ‹B‰$è嫉EÀ…À„ÀÇ$è竉E¼…À„Š‹…4ÿÿÿƒ‹E¼‹•4ÿÿÿ‰P ‹E¼‰D$‹EÀ‰$èA¬‰E¸…À„ ‹EÀ‹ƒê‰…Ò„æ ÇEÀ‹E¼‹ƒê‰…Ò„¼ ÇE¼‹E¸‰$èÛ«‰EÄè8«…À…u‹E¸‹ƒê‰…Ò„ª ÇE¸‹}Ä‹ƒÃ°‰D$‹…4ÿÿÿ‰$諉EÀ…À…jùÿÿ‹ƒç®‹‰ƒã®ǃ߮°‹U€‰•0ÿÿÿ‹}„Ç…lÿÿÿÇ…\ÿÿÿÇEŒÇE‹U˜‹ƒè‰…À„’ ‹Eˆ…Àt‹Uˆ‹ƒè‰…À„Š ‹U”‰•,ÿÿÿé«‹F‰4$ÿP1Ò‹ƒC°è büÿ‰E”…À…-÷ÿÿ‹ƒç®‹‰ƒã®ǃ߮¦‰½(ÿÿÿ‰µxÿÿÿ‰µPÿÿÿ‰µLÿÿÿ‰µHÿÿÿ‰µDÿÿÿ‰µ@ÿÿÿ‰µ<ÿÿÿ‰µTÿÿÿ‰µ8ÿÿÿ‰µ4ÿÿÿ‰÷‰µ0ÿÿÿ‰µ,ÿÿÿÇEÇEŒÇ…\ÿÿÿÇ…lÿÿÿ‹UÀ…Òt‹ƒè‰…À„3‹U¼…Òt‹ƒè‰…À„.‹U¸…Òt‹ƒè‰…À„)‹…lÿÿÿ…Àt‹•lÿÿÿ‹ƒè‰…À„‹µ\ÿÿÿ…öt‹•\ÿÿÿ‹ƒè‰…À„ ‹MŒ…Ét‹UŒ‹ƒè‰…À„ÿ‹U…Òt‹U‹ƒè‰…À„ôƒ§Qèòaüÿ1ö‹UÈ…Òt‹ƒè‰…À„ß‹U ‹ƒè‰…À„C‹•(ÿÿÿ‹ƒè‰…À„ ‹•,ÿÿÿ‹ƒè‰…À„ý‹•0ÿÿÿ‹ƒè‰…À„Ú‹ƒè‰…À„½‹•4ÿÿÿ‹ƒè‰…À„š‹•8ÿÿÿ‹ƒè‰…À„w‹•Tÿÿÿ‹ƒè‰…À„T‹•<ÿÿÿ‹ƒè‰…À„1‹•@ÿÿÿ‹ƒè‰…À„‹•Dÿÿÿ‹ƒè‰…À„ë‹•Hÿÿÿ‹ƒè‰…À„È‹•Lÿÿÿ‹ƒè‰…À„¥‹•Pÿÿÿ‹ƒè‰…À„‚‹•xÿÿÿ‹ƒè‰…À„_‹U‹ƒè‰…À„?‹E´‹ƒê‰…Ò„‹Eà‹ƒê‰…Ò„ù‹EÜ‹ƒê‰…Ò„Ö‹EØ‹ƒê‰…Ò„³‹EÔ‹ƒê‰…Ò„‹EЋƒê‰…Ò„m‹EÌ‹ƒê‰…Ò„J‹U …Òt‹ƒè‰…À„‹‹U…Ò„ûÿÿ‹ƒè‰…À… ûÿÿ‹E‹P‰$ÿR‰ðÄ,[^_]ËEØ‹P‰$ÿR‰}Øé¼ùÿÿ‹G‰<$ÿPéaôÿÿ‹B‰$ÿPé-ôÿÿÇ$èZ§‰Ç…À„´‰D$‹…<ÿÿÿ‰$蘧‰Æ‹ƒè‰…À…<÷ÿÿ‹G‰<$ÿPé.÷ÿÿ‹B‰$ÿP逸ÿÿ‹F‰4$ÿPé¾öÿÿ‹EÀ‹P‰$ÿRé—öÿÿ‹E¼‹P‰$ÿRémöÿÿ‹B‰$ÿPéøÿÿ‹EÀ‹P‰$ÿRéá÷ÿÿ‹E¼‹P‰$ÿRé·÷ÿÿ‹B‰$ÿPé—÷ÿÿ1öéEõÿÿ1öé¤öÿÿ‹EÌ‹P‰$ÿRé¥þÿÿ‹EЋP‰$ÿRé‚þÿÿ‹EÔ‹P‰$ÿRé_þÿÿ‹EØ‹P‰$ÿRé<þÿÿ‹EÜ‹P‰$ÿRéþÿÿ‹Eà‹P‰$ÿRéöýÿÿ‹E´‹P‰$ÿRéÓýÿÿ‹B‰$ÿPé³ýÿÿ‹B‰$ÿPé“ýÿÿ‹B‰$ÿPépýÿÿ‹B‰$ÿPéMýÿÿ‹B‰$ÿPé*ýÿÿ‹B‰$ÿPéýÿÿ‹B‰$ÿPéäüÿÿ‹B‰$ÿPéÁüÿÿ‹B‰$ÿPéžüÿÿ‹B‰$ÿPé{üÿÿ‹B‰$ÿPéXüÿÿ‹G‰<$ÿPé5üÿÿ‹B‰$ÿPéüÿÿ‹B‰$ÿPéõûÿÿ‹B‰$ÿPéÒûÿÿ‹B‰$ÿPé¯ûÿÿ‹E ‹P‰$ÿRédýÿÿ‹EÀ‹P‰$ÿRé¼úÿÿ‹E¼‹P‰$ÿRéÁúÿÿ‹E¸‹P‰$ÿRéÆúÿÿ‹B‰$ÿPé×úÿÿ‹B‰$ÿPéèúÿÿ‹B‰$ÿPéóúÿÿ‹B‰$ÿPéþúÿÿ‹EÈ‹P‰$ÿRéûÿÿ‹ƒç®‹‰ƒã®ǃ߮§‹U”‰•,ÿÿÿ‰½(ÿÿÿ‰µxÿÿÿ‰µPÿÿÿ‰µLÿÿÿ‰µHÿÿÿ‰µDÿÿÿ‰µ@ÿÿÿ‰µ<ÿÿÿ‰µTÿÿÿ‰µ8ÿÿÿ‰µ4ÿÿÿ‰÷‰µ0ÿÿÿÇEÇEŒÇ…\ÿÿÿÇ…lÿÿÿé©ùÿÿ‰<$褉DžÀ„û‰D$‰4$è[¤‰Æ‹ƒè‰…À… òÿÿ‹G‰<$ÿPéûñÿÿ‹F‰4$ÿPéðÿÿ‹B‰$ÿPéþðÿÿ‹B‰$ÿPé—ñÿÿ‹•Tÿÿÿ‹B‰$ÿPéòÿÿ‹B‰$ÿPéÏñÿÿ‹ƒç®‹‰ƒã®ǃ߮¤‰µxÿÿÿ‰µPÿÿÿ‰µLÿÿÿ‰µHÿÿÿ‰µDÿÿÿ‰µ@ÿÿÿ‰µ<ÿÿÿ‰µTÿÿÿ‰µ8ÿÿÿ‰µ4ÿÿÿ‰÷éçõÿÿ‹ƒç®‹‰ƒã®ǃ߮²‹U¸…Òt‹ƒè‰…À„$ÇE¸‹UÀ…Òt‹ƒè‰…À„)ÇEÀ‹U¼…Òt‹ƒè‰…À„ûÇE¼‹ƒE¶‹‰$è0¢‰EÄ…À„¶ƒƒQèßZüÿM¼UÀE¸è;Xüÿ…À‰ïÿÿ‹ƒç®‹‰ƒã®ǃ߮³‹E€‰…0ÿÿÿ‹}„Ç…lÿÿÿÇ…\ÿÿÿÇEŒÇEéëöÿÿ‹E¼‹P‰$ÿRé3öÿÿ‹EÀ‹P‰$ÿRé öÿÿ‹E¸‹P‰$ÿRéEöÿÿ1öé$ðÿÿ‹ƒè‰…À…Uõÿÿ‹EÈ‹P‰$ÿR1öéDõÿÿ‹E¸‹P‰$ÿRéËþÿÿ‹E¼‹P‰$ÿRéôþÿÿ‹EÀ‹P‰$ÿRéÆþÿÿ‹U˜‹B‰$ÿPé]öÿÿ‹B‰$ÿP‹E”‰…,ÿÿÿé÷ÿÿèÚ …À…ä‹E¸‹ƒê‰…Ò„ÇE¸ƒ… ÿÿÿéiîÿÿ‹ƒç®‹‰ƒã®ǃ߮·‹E€‰…0ÿÿÿ‹}„Ç…lÿÿÿÇ…\ÿÿÿÇEŒÇEé·õÿÿ‹ƒç®‹‰ƒã®ǃ߮·‹U€‰•0ÿÿÿ‹}„Ç…lÿÿÿÇ…\ÿÿÿÇEŒÇEélõÿÿ‹ƒç®‹‰ƒã®ǃ߮·‹E€‰…0ÿÿÿ‹}„Ç…\ÿÿÿÇEŒÇEé+õÿÿ‹ƒç®‹‰ƒã®ǃ߮·‹U€‰•0ÿÿÿ‹}„ÇEŒÇEéôôÿÿ‹ƒç®‹‰ƒã®ǃ߮·‹E€‰…0ÿÿÿ‹}„Ç…lÿÿÿÇEŒÇEé³ôÿÿ‹ƒç®‹‰ƒã®ǃ߮·‹U€‰•0ÿÿÿ‹}„Ç…lÿÿÿÇ…\ÿÿÿÇEŒÇEéhôÿÿ‹ƒç®‹‰ƒã®ǃ߮¸‹E€‰…0ÿÿÿ‹}„Ç…lÿÿÿÇEŒÇEé'ôÿÿ‹ƒç®‹‰ƒã®ǃ߮¸‹U€‰•0ÿÿÿ‹}„Ç…lÿÿÿÇEŒÇEéæóÿÿ‹ƒç®‹‰ƒã®ǃ߮¸‹E€‰…0ÿÿÿ‹}„Ç…lÿÿÿÇEŒÇEé¥óÿÿ‹ƒç®‹‰ƒã®ǃ߮¸‹E€‰…0ÿÿÿ‹}„ÇEŒÇEénóÿÿ‹ƒç®‹‰ƒã®ǃ߮¸‹U€‰•0ÿÿÿ‹}„ÇEŒÇEé7óÿÿ‹ƒç®‹‰ƒã®ǃ߮¸‹U€‰•0ÿÿÿ‹}„Ç…lÿÿÿÇEŒÇEéöòÿÿ‹E¸‹P‰$ÿRéÐüÿÿè‹…À…Ô‹Uˆ‹ƒè‰…À„X‹ƒC±‰D$‹E„‰$èp‰…lÿÿÿ…À„WÇD$‰$è÷‰Æ…À„‹•lÿÿÿ‹ƒè‰…À„a ‹ƒè‰…À„D ‹³I¶1À9uÌ•À‰EÄ…À„ÑÇ$è‰E¼…À„žH‹E„ƒ‹E¼‹U„‰P ‹E€ƒ‹E¼‹U€‰P蔉‰EÀ…À„H‹Eà‰D$‹ƒK±‰D$‰$è…Àˆ©G‹E‰D$‹ƒk°‰D$‹EÀ‰$èᜅÀˆ3G‹EÔ‰D$‹ƒc°‰D$‹EÀ‰$轜…Àˆ½F‹EЉD$‹ƒ·°‰D$‹EÀ‰$虜…ÀˆGF‹E܉D$‹ƒ°‰D$‹EÀ‰$èuœ…ÀˆÑE‹EȉD$‹EÀ‰$è…ÀˆeE‹EÀ‰D$‹E¼‰D$‹Ẻ$è]œ‰E¸…À„ƒ‹E¼‹ƒê‰…Òu ‹E¼‹P‰$ÿRÇE¼‹EÀ‹ƒê‰…Òu ‹EÀ‹P‰$ÿRÇEÀ‹E¸‰D$‹•(ÿÿÿ‰$è_œ‰Æ…À„ЋE¸‹ƒê‰…Òu ‹E¸‹P‰$ÿRÇE¸‹•(ÿÿÿ‹ƒè‰…À„‰µ(ÿÿÿ‹}„‹E€‰…0ÿÿÿé^èÿÿ‹ƒç®‹‰ƒã®ǃ߮«‹E€‰…0ÿÿÿ‹}„Ç…lÿÿÿÇ…\ÿÿÿÇEŒÇEéðÿÿ‹ƒç®‹‰ƒã®ǃ߮¶‹E€‰…0ÿÿÿ‹}„‹•Xÿÿÿ‰•TÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéÆïÿÿ‹ƒç®‹‰ƒã®ǃ߮­‹E€‰…0ÿÿÿ‹}„Ç…lÿÿÿÇ…\ÿÿÿÇEŒÇEé{ïÿÿ‹ƒ¯‰D$‹E”‰$è%š‰…lÿÿÿ…À„ô>ÇD$‰$謚‰…hÿÿÿ…À„.=‹•lÿÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹•@ÿÿÿ‹ƒè‰…Àu ‹B‰$ÿPƒ‹•Dÿÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹E„‰$莙‰E¼…À„c<‰µDÿÿÿ‹E¼‰$è0š‰EÀ…À„º=‹•Hÿÿÿ‹ƒè‰…À„s ‹EÀ‰…HÿÿÿÇEÀÇD$ÇD$‰$è[š‰E¸…À„ª>‰$虉Eˆ…À„@>‹E¸‹ƒê‰…Ò„` ÇE¸‹Uˆ‰$覙‰…lÿÿÿ…À„£‹…lÿÿÿ‰$èb™‰EÄ还…À…Â<‹•lÿÿÿ‹ƒè‰…À„ÿ ‹Eĉ… ÿÿÿ‹Uˆ‰$èQ™‰…dÿÿÿ…À„<‹•Lÿÿÿ‹ƒè‰…À„º ‹Eˆ‰$è#™‰Æ…À„u:‰uÀ…ö„:‰4$èÞ˜‰EÄè;˜…À…Œ9‹EÀ‹ƒê‰…Ò„_ ÇEÀ‹Uˆ‰$èÒ˜‰Æ…À„\J‰u¸…ö„îI‹•4ÿÿÿ‹ƒè‰…À„ ‹E¸‰…4ÿÿÿÇE¸‹Uˆ‰$蘉…tÿÿÿ…À„8‹•Tÿÿÿ‹ƒè‰…À„1‹Eˆ‰$è_˜‰Â…À…sHè—…À…”H‹Uˆ‹ƒè‰…À„ì‹…dÿÿÿ‰$è—‰EăøŒ×H„‹•Hÿÿÿ‹B‹@4…À„׋@ …À„ÌÇD$‰$è——‰…\ÿÿÿ‹½\ÿÿÿ…ÿ„¶‹•\ÿÿÿ‰T$‹…4ÿÿÿ‰D$‹•hÿÿÿ‰$è/—…ÀˆJ‹•\ÿÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹…hÿÿÿ‰$è—ƒøÿ„£ó*Àó…$ÿÿÿóZÈò $è‹—‰…\ÿÿÿ…À„Eĉ…ÿÿÿ‰D$‹EÔ‰D$‹•\ÿÿÿ‰$è)—…ÀˆyÁmÄ‹•\ÿÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹EÄ…À„Ç ‹³I¶1À9µDÿÿÿ•À‰Eä…À…š 1À9µDÿÿÿ•À‰Eä‰$è·–‰…\ÿÿÿ…À„¤‰$è–‰EăøŒ$„I‹•\ÿÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹Eà‰…\ÿÿÿƒ‰$èÚ•‰EäƒøŒN>„ ‹•\ÿÿÿ‹ƒè‰…À„%>‹E܉…\ÿÿÿƒ‰$蟕‰EăøŒ™=„΋•\ÿÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹…tÿÿÿƒ‰$èb•‰EäƒøŒê<„Ó<‹•tÿÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹… ÿÿÿ‰$试‰…lÿÿÿ…À„1<‹•ÿÿÿ‰T$‰D$‹…Dÿÿÿ‰$蔕…Àˆ¡;ÁmÄ‹•lÿÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹Eĉ$èT•‰…\ÿÿÿ…À„«=‹•\ÿÿÿ‰$è±”‰Eä…Àˆ–‹•\ÿÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹Eä…À…< ‹•dÿÿÿ‰•Lÿÿÿ‹…tÿÿÿ‰…TÿÿÿéÄúÿÿ‹•Hÿÿÿ‹B‹@4…À„x‹p …ö„mÇD$‰$耔‰Ç‰}À…ÿ„ú‰<$èý“‰E¸…À„q‹EÀ‹ƒê‰…Òu ‹EÀ‹P‰$ÿRÇEÀ‹E¸‰$è„”‰…lÿÿÿ…À„|‹•lÿÿÿ‰$è@”‰EÄè“…À…ò‹•lÿÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹Eĉ…ÿÿÿ‹E¸‰$è*”‰Eˆ…À„)X‹Uˆ‰$è쓉EÄèI“…À…ŸW‹Uˆ‹ƒè‰…À„W‹Eĉ…ÿÿÿ‹E¸‰$èÞ“‰…\ÿÿÿ…À„ÎV‹•\ÿÿÿ‰$èš“‰EÄè÷’…À…DV‹•\ÿÿÿ‹ƒè‰…À„!V‹Eĉ…ÿÿÿ‹E¸‰$艓‰Æ…À„×U‰uÀ…ö„VU‰4$èD“‰EÄè¡’…À…ÈT‹EÀ‹ƒê‰…Ò„¥TÇEÀ‹UĉUœ‹E¸‰$è2“‰Æ…À„êS‹•Pÿÿÿ‹ƒè‰…À„ÇS‹E¸‰$蓉…À…Sè6’…À…)S‹E¸‹ƒê‰…Ò„\RÇE¸‹…Dÿÿÿ;ƒI¶•À¶À‰EÄ…À…R‹MÄ…É…„‰µPÿÿÿ‹…4ÿÿÿ‰D$‹•hÿÿÿ‰$è“…À‰ûúÿÿ‹ƒç®‹‰ƒã®ǃ߮Ò‹E€‰…0ÿÿÿ‹}„‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇE馿ÿÿ‹ƒç®‹‰ƒã®ǃ߮¬‹U€‰•0ÿÿÿ‹}„Ç…lÿÿÿÇ…\ÿÿÿÇEŒÇEé[æÿÿ‹ƒç®‹‰ƒã®ǃ߮¯‹U€‰•0ÿÿÿ‹}„Ç…lÿÿÿÇ…\ÿÿÿÇEŒÇEéæÿÿ‹ƒç®‹‰ƒã®ǃ߮¯‹E€‰…0ÿÿÿ‹}„Ç…lÿÿÿÇ…\ÿÿÿÇEŒÇEéÅåÿÿ‹ƒç®‹‰ƒã®ǃ߮¯‹U€‰•0ÿÿÿ‹}„Ç…lÿÿÿÇ…\ÿÿÿÇEŒÇEézåÿÿ‹ƒç®‹‰ƒã®ǃ߮¯‹E€‰…0ÿÿÿ‹}„Ç…lÿÿÿÇ…\ÿÿÿÇEŒÇEé/åÿÿ‹B‰$ÿPéöÿÿ‹F‰4$ÿPé®òÿÿ‹B‰$ÿPé‘òÿÿÇ$èS‰Æ…À„ý‰D$‹…Hÿÿÿ‰$葉Njƒè‰…À…lûÿÿ‹F‰4$ÿPé^ûÿÿ‹•ÿÿÿ‰$è ‰Eˆ…À„úNEä‰D$‹Eˆ‰D$‹•Dÿÿÿ‰$èò…ÀˆaN1Àƒ}äŸÀ‰Eä‹Uˆ‹ƒè‰…À„5N‹Uä…Ò…!H‰µPÿÿÿ‹ƒƒ¯‰D$‹•(ÿÿÿ‰$èùމ…lÿÿÿ…À„‰G‹»;±‰|$‹ƒ×®‰$èÓŽ‰Æ…À„NG‰u¸…ö„×F‹ƒo¯‰D$‰4$謎‰Eˆ…À„UF‹E¸‹ƒê‰…Ò„2FÇE¸‹…ÿÿÿ‰$艅\ÿÿÿ…À„´E‹•ÿÿÿ‰$èùމEÀ…À„@EÇ$è`މE¸…À„ÎD‹U‹B8ƒ‹E‹P8‹E¸‰P ‹E¸‹•\ÿÿÿ‰P‹UÀ‹E¸‰PÇEÀ‹E¸‰D$‹Eˆ‰$螎‰…\ÿÿÿ…À„"D‹Uˆ‹ƒè‰…À„D‹E¸‹ƒê‰…Ò„ßCÇE¸‹»;±‰|$‹ƒ×®‰$訉ƅÀ„C‰uÀ…ö„0C‹ƒÿ°‰D$‰4$è‰Eˆ…À„¸B‹EÀ‹ƒê‰…Ò„•BÇEÀ‹…ÿÿÿ‰$èê‰E¸…À„B‹Uœ‰$èÔ‰EÀ…À„©AÇ$è;‰EŒ…À„>A‹…4ÿÿÿƒ‹UŒ‰B ‹E¸‰B‹EÀ‰BÇE¸ÇEÀ‰T$‹Eˆ‰$脉E¸…À„§@‹Uˆ‹ƒè‰…À„‡@‹UŒ‹ƒè‰…À„g@Ç$轌‰EÀ…À„î?‹•\ÿÿÿ‰P ‹E¸‹UÀ‰B‹…Pÿÿÿƒ‹EÀ‹•Pÿÿÿ‰PÇE¸Ç$èxŒ‰Eˆ…À„D?‹EÀ‹Uˆ‰B ÇEÀ‰T$‹…lÿÿÿ‰$è׌‰Æ…À„³>‹•lÿÿÿ‹ƒè‰…À„>‹Uˆ‹ƒè‰…À„p>‹ƒè‰…À…÷ùÿÿ‹F‰4$ÿPééùÿÿ‹B‰$ÿPéÝóÿÿ‹EÀ‹P‰$ÿRéóÿÿ‹B‰$ÿPé8óÿÿ‹B‰$ÿPéóòÿÿ‹E¸‹P‰$ÿRéòÿÿ‹Eà‰$è¡‹‰EăøŒ[1„‹ƒƒ¯‰D$‹•(ÿÿÿ‰$èc‹‰EÀ…À„<:‹³;±‰t$‹ƒ×®‰$è@‹‰…lÿÿÿ…À„–9‹ƒo¯‰D$‹…lÿÿÿ‰$苉Eˆ…À„9‹•lÿÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹…ÿÿÿ‰$è‚‹‰EŒ…À„s8Ç$è銉…\ÿÿÿ…À„û7‹U‹B8ƒ‹B8‹•\ÿÿÿ‰B ‹…Dÿÿÿƒ‰B‹EŒ‰B‰T$‹Uˆ‰$è1‹‰E¸…À„U7‹Uˆ‹ƒè‰…Àu ‹B‰$ÿP‹•\ÿÿÿ‹ƒè‰…Àu ‹B‰$ÿPÇ$è]Љ…lÿÿÿ…À„ž6‹E¸‹•lÿÿÿ‰B ÇE¸‰T$‹EÀ‰$蹊‰Æ…À„6‹EÀ‹ƒê‰…Òu ‹EÀ‹P‰$ÿRÇEÀ‹•lÿÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹ƒè‰…Àu ‹F‰4$ÿP‹³I¶ƒ‹•Dÿÿÿ‹ƒè‰…Àu‹•Dÿÿÿ‹B‰$ÿP‰µDÿÿÿéUóÿÿ‹E€‰$èlŠƒøÿ„·ó*Àó$ÿÿÿó^ÈóZÁò$è1Š‰Â‰E¸…À„Ÿ9‹…ÿÿÿ‰D$‹EЉD$‰$èÙ‰…Àˆ9ÁmÄ‹E¸‹ƒê‰…Ò„á8ÇE¸‹EÄ…À…±òÿÿ‹³I¶1À9µDÿÿÿ”À‰EÄ…À„±òÿÿ‹… ÿÿÿ‰$èp‰‰E¸…À„$8‹•Dÿÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹E¸‰…DÿÿÿÇE¸éiòÿÿ‹Uˆ‹B‰$ÿPéñÿÿ‹B‰$ÿPéÁðÿÿÇ$è ‰‰Æ…À„î‰D$‹…Hÿÿÿ‰$èI‰‰…\ÿÿÿ‹ƒè‰…À… ñÿÿ‹F‰4$ÿPéÿðÿÿ‹ƒƒ¯‰D$‹…(ÿÿÿ‰$舉EÀ…À„+Q‹³;±‰t$‹ƒ×®‰$èö‡‰EŒ…À„…P‹ƒo¯‰D$‹UŒ‰$èÖ‡‰E…À„ýO‹UŒ‹ƒè‰…À„ÝO‹… ÿÿÿ‰$èFˆ‰Eˆ…À„\OÇ$è­‡‰E¸…À„ÝN‹U‹B8ƒ‹E‹P8‹E¸‰P ‹•Dÿÿÿƒ‹E¸‰P‹E¸‹Uˆ‰P‹E¸‰D$‹E‰$è…lÿÿÿ…À„+N‹U‹ƒè‰…À„ N‹E¸‹ƒê‰…Ò„èMÇE¸Ç$臉…\ÿÿÿ…À„eM‹•lÿÿÿ‰P ‰D$‹EÀ‰$脇‰Æ…À„×L‹EÀ‹ƒê‰…Ò„´LÇEÀ‹•\ÿÿÿ‹ƒè‰…À„ŠL‹ƒè‰…À„mL‹… ÿÿÿ‰$è%‡‰Æ…À„ßK‹•Dÿÿÿ‹ƒè‰…À„¶K‰µDÿÿÿéóñÿÿ‹E€‰…0ÿÿÿ‹}„Ç…lÿÿÿÇ…\ÿÿÿÇEŒÇEénÛÿÿ‹B‰$ÿPéšèÿÿ‹B‰$ÿP‰µ(ÿÿÿéÓêÿÿ‹ƒç®‹‰ƒã®ǃ߮»‹E€‰…0ÿÿÿ‹}„ÇEˆÇ…\ÿÿÿÇEŒÇEéÛÿÿ‹ƒç®‹‰ƒã®ǃ߮ª‹U€‰•0ÿÿÿ‹}„Ç…lÿÿÿÇ…\ÿÿÿÇEŒÇEé¹ÚÿÿÇ…\ÿÿÿ‹ƒç®‹‰ƒã®ǃ߮Ç‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…lÿÿÿÇEŒÇEéCÚÿÿ‹ƒç®‹‰ƒã®ǃ߮¶‹E€‰…0ÿÿÿ‹}„Ç…lÿÿÿÇ…\ÿÿÿÇEŒÇEéøÙÿÿ‹ƒç®‹‰ƒã®ǃ߮É‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…\ÿÿÿÇEŒÇEéŒÙÿÿè2„…ÀuƒOL‰D$‹ƒ5¶‹‰$è烋ƒç®‹‰ƒã®ǃ߮É‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…\ÿÿÿÇEŒÇEéýØÿÿ‹ƒç®‹‰ƒã®ǃ߮Õ‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇE釨ÿÿè-ƒ…ÀuƒOL‰D$‹ƒ5¶‹‰$èâ‚‹ƒç®‹‰ƒã®ǃ߮Å‹E€‰…0ÿÿÿ‹}„‹•hÿÿÿ‰•@ÿÿÿÇ…\ÿÿÿÇEŒÇEéØÿÿ‹ƒç®‹‰ƒã®ǃ߮ì‹E€‰…0ÿÿÿ‹}„‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇEˆÇ…lÿÿÿÇEŒÇEé«×ÿÿ‹ƒç®‹‰ƒã®ǃ߮ì‹E€‰…0ÿÿÿ‹}„‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇEˆÇ…lÿÿÿÇEŒÇEé?×ÿÿ‹ƒç®‹‰ƒã®ǃ߮Õ‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…lÿÿÿÇEŒÇEéÓÖÿÿ‹ƒç®‹‰ƒã®ǃ߮Õ‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…lÿÿÿÇEŒÇEégÖÿÿ‹ƒç®‹‰ƒã®ǃ߮Ô‹E€‰…0ÿÿÿ‹}„‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéñÕÿÿ‹ƒç®‹‰ƒã®ǃ߮Ç‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…lÿÿÿÇEŒÇEé…Õÿÿ‹ƒç®‹‰ƒã®ǃ߮»‹U€‰•0ÿÿÿ‹}„ÇEˆÇ…\ÿÿÿÇEŒÇEé=Õÿÿ‹ƒç®‹‰ƒã®ǃ߮ì‹E€‰…0ÿÿÿ‹}„‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇEˆÇ…lÿÿÿÇEŒÇEéÑÔÿÿ‹ƒç®‹‰ƒã®ǃ߮É‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEé[Ôÿÿ‹ƒç®‹‰ƒã®ǃ߮É‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéåÓÿÿ‹ƒç®‹‰ƒã®ǃ߮½‹U€‰•0ÿÿÿ‹}„ÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEé“Óÿÿ‹ƒç®‹‰ƒã®ǃ߮½‹E€‰…0ÿÿÿ‹}„ÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéAÓÿÿèç}…ÀtM‹ƒç®‹‰ƒã®ǃ߮§ÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéòÒÿÿ1ÿé‹éÿÿ‹U˜‹ƒè‰…Àu ‹B‰$ÿP‹…(ÿÿÿƒ‹U”‰•,ÿÿÿ‰Æé^Ôÿÿ‹…hÿÿÿ‰$è]}‰Eˆ…À„±‹Eˆ‰$è~‰…`ÿÿÿ…À„k‹•4ÿÿÿ‹ƒè‰…À„H‹…`ÿÿÿ‰D$‹•hÿÿÿ‰$è~‰E¸…À„ª‰$èù|‰EÀ…À„‹E¸‹ƒê‰…Ò„ùÇE¸‹EÀ‰$èˆ}‰…lÿÿÿ…À„E‹•lÿÿÿ‰$èD}‰Eäè¡|…À…¶‹•lÿÿÿ‹ƒè‰…À„“‹}ä‹EÀ‰$è9}‰EŒ…À„ã‹UŒ‰$èû|‰EÄèX|…À…T‹UŒ‹ƒè‰…À„4‹Eĉ…ÿÿÿ‹EÀ‰$èí|‰…\ÿÿÿ…À„~‹…\ÿÿÿ‰$è©|‰Eäè|…À…ï‹•\ÿÿÿ‹ƒè‰…À„Ì‹Eä‰E¤‹EÀ‰$è›|‰Æ…À„…‰u¸…ö„ÿ‰4$èV|‰EÄè³{…À…‹E¸‹ƒê‰…Ò„lÇE¸‹Uĉ•ÿÿÿ‹EÀ‰$èA|‰…pÿÿÿ…À„¥‹•Pÿÿÿ‹ƒè‰…À„‚‹EÀ‰$è|‰Â…À…¸èA{…À…Ù‹EÀ‹ƒê‰…Ò„ˆÇEÀ‹ƒ¶‰…|ÿÿÿƒ‹•xÿÿÿ‹ƒè‰…À„O‰<$è£{‰EŒ…À„kEä‰D$‹EŒ‰D$‹•Dÿÿÿ‰$è‹{…Àˆ»1Àƒ}äŸÀ‰Eä‹UŒ‹ƒè‰…À„‹Eä…À…‹µ|ÿÿÿ‹…ÿÿÿ9…ÿÿÿœÀ¶À‰EÄ…À…¯ ‰µxÿÿÿ‹…xÿÿÿ‰$èz‰EäƒøŒ … ‹•pÿÿÿ‰•Pÿÿÿ‹ƒƒ¯‰D$‹…(ÿÿÿ‰$èCz‰EÀ…À„h ‹³;±‰t$‹ƒ×®‰$è z‰…\ÿÿÿ…À„½‹ƒo¯‰D$‹•\ÿÿÿ‰$èúy‰EŒ…À„0‹•\ÿÿÿ‹ƒè‰…Àu ‹B‰$ÿP‰<$èhz‰E¸…À„‹…ÿÿÿ‰$èOz‰…lÿÿÿ…À„ Ç$è³y‰…\ÿÿÿ…À„‹U‹B8ƒ‹B8‹•\ÿÿÿ‰B ‹E¸‰B‹…lÿÿÿ‰BÇE¸‰T$‹UŒ‰$è÷y‰E¸…À„à‹UŒ‹ƒè‰…Àu ‹B‰$ÿP‹•\ÿÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹³;±‰t$‹ƒ×®‰$èþx‰…lÿÿÿ…À„‹ƒÿ°‰D$‹…lÿÿÿ‰$èØx‰EŒ…À„w‹•lÿÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹E¤‰$èCy‰…\ÿÿÿ…À„Ú‹•ÿÿÿ‰$è'y‰…lÿÿÿ…À„^Ç$è‹x‰E…À„î‹…`ÿÿÿƒ‹U‰B ‹…\ÿÿÿ‰B‹…lÿÿÿ‰B‰T$‹UŒ‰$èÜx‰…\ÿÿÿ…À„M‹UŒ‹ƒè‰…Àu ‹B‰$ÿP‹U‹ƒè‰…Àu ‹B‰$ÿPÇ$èx‰…lÿÿÿ…À„ž‹E¸‹•lÿÿÿ‰B ‹…\ÿÿÿ‰B‹•Pÿÿÿƒ‹…lÿÿÿ‰PÇE¸Ç$èÀw‰EŒ…À„ï‹•lÿÿÿ‰P ‰D$‹EÀ‰$è)x‰Æ…Àt]‹EÀ‹ƒê‰…Òu ‹EÀ‹P‰$ÿRÇEÀ‹UŒ‹ƒè‰…Àu ‹B‰$ÿP‹ƒè‰…Àu ‹F‰4$ÿP‹•`ÿÿÿ‰•4ÿÿÿéÀùÿÿ‹ƒç®‹‰ƒã®ǃ߮æ‹U€‰•0ÿÿÿ‹}„‹…`ÿÿÿ‰…4ÿÿÿ‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEéîËÿÿ‹ƒç®‹‰ƒã®ǃ߮æ‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…\ÿÿÿÇEé„Ëÿÿ‹ƒç®‹‰ƒã®ǃ߮æ‹U€‰•0ÿÿÿ‹}„‹…`ÿÿÿ‰…4ÿÿÿ‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇEŒÇEéËÿÿ‹ƒç®‹‰ƒã®ǃ߮ç‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…lÿÿÿéºÊÿÿ‹ƒç®‹‰ƒã®ǃ߮ç‹U€‰•0ÿÿÿ‹}„‹…`ÿÿÿ‰…4ÿÿÿ‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿéaÊÿÿ‹ƒç®‹‰ƒã®ǃ߮è‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEéÊÿÿ‹ƒç®‹‰ƒã®ǃ߮ç‹U€‰•0ÿÿÿ‹}„‹…`ÿÿÿ‰…4ÿÿÿ‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇ…lÿÿÿÇEé—Éÿÿ‹ƒç®‹‰ƒã®ǃ߮ç‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…\ÿÿÿÇEé-Éÿÿ‰t$‹ƒe¶‹‰$èt‹ƒç®‹‰ƒã®ǃ߮ç‹U€‰•0ÿÿÿ‹}„‹…`ÿÿÿ‰…4ÿÿÿ‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇ…\ÿÿÿÇEŒÇEé¨Èÿÿ‹ƒç®‹‰ƒã®ǃ߮æ‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…lÿÿÿÇEé>Èÿÿ‹ƒç®‹‰ƒã®ǃ߮æ‹U€‰•0ÿÿÿ‹}„‹…`ÿÿÿ‰…4ÿÿÿ‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇEéÞÇÿÿ‹ƒç®‹‰ƒã®ǃ߮æ‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…\ÿÿÿÇEétÇÿÿ‹ƒç®‹‰ƒã®ǃ߮æ‹U€‰•0ÿÿÿ‹}„‹…`ÿÿÿ‰…4ÿÿÿ‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEéÇÿÿ‹ƒç®‹‰ƒã®ǃ߮æ‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…lÿÿÿÇEé–Æÿÿ‰t$‹ƒe¶‹‰$è‚q‹ƒç®‹‰ƒã®ǃ߮æ‹U€‰•0ÿÿÿ‹}„‹…`ÿÿÿ‰…4ÿÿÿ‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇ…lÿÿÿÇEŒÇEéÆÿÿ‹ƒç®‹‰ƒã®ǃ߮æ‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEé–Åÿÿ‹ƒ¯¯‰D$‹E‰$è@p‰EŒ…À„P‹•ÿÿÿ‰$èÂp‰…\ÿÿÿ…À„¾Ç$è&p‰E¸…À„1‹…Dÿÿÿƒ‹E¸‹•Dÿÿÿ‰P ‹E¸‹•\ÿÿÿ‰P‹…pÿÿÿƒ‹E¸‹•pÿÿÿ‰P‹E¸‰D$‹EŒ‰$è_p‰Æ…Àtc‹UŒ‹ƒè‰…Àu ‹B‰$ÿP‹E¸‹ƒê‰…Òu ‹E¸‹P‰$ÿRÇE¸‹•pÿÿÿ‹ƒè‰…Àu‹•pÿÿÿ‹B‰$ÿP‰µPÿÿÿéöôÿÿ‹ƒç®‹‰ƒã®ǃ߮å‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…Lÿÿÿ‹•pÿÿÿ‰•PÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEéÄÿÿ‹ƒç®‹‰ƒã®ǃ߮å‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…Lÿÿÿ‹•pÿÿÿ‰•PÿÿÿÇ…lÿÿÿÇEéœÃÿÿ‹ƒç®‹‰ƒã®ǃ߮å‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…Lÿÿÿ‹•pÿÿÿ‰•PÿÿÿÇ…lÿÿÿÇEé&Ãÿÿ‹ƒç®‹‰ƒã®ǃ߮å‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…Lÿÿÿ‹•pÿÿÿ‰•PÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEé¦Âÿÿ‹ƒç®‹‰ƒã®ǃ߮ä‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…Lÿÿÿ‹•pÿÿÿ‰•PÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéÂÿÿ‹•ÿÿÿ•ÿÿÿ‹…ÿÿÿ)…ÿÿÿ‹“¡¶‰•xÿÿÿƒ‹ƒè‰…À…!òÿÿ‹F‰4$ÿPéòÿÿ‹E¤‰$è*m‰…\ÿÿÿ…À„Ì‹•Dÿÿÿ‰T$‰$èPm‰E¸…À„ç‹•\ÿÿÿ‹ƒè‰…Àu ‹B‰$ÿP‰<$èÝl‰…lÿÿÿ…À„.‰D$‹E¸‰$èpl‰EÀ…À„&‹E¸‹ƒê‰…Òu ‹E¸‹P‰$ÿRÇE¸‹•lÿÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹EÀ‰$è[l‰EÄè¸k…Àut‹EÀ‹ƒê‰…Òu ‹EÀ‹P‰$ÿRÇEÀ‹EĉE¤‹•Dÿÿÿ‰$èl‰Eäèwk…À…‹}䋳¡¶ƒ‹•|ÿÿÿ‹ƒè‰…À…¸ðÿÿ‹B‰$ÿPéªðÿÿ‹ƒç®‹‰ƒã®ǃ߮Þ‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…Lÿÿÿ‹•pÿÿÿ‰•Pÿÿÿ‹…|ÿÿÿ‰…xÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéÀÿÿ‹B‰$ÿPé£ïÿÿ‹EÀ‹P‰$ÿRégïÿÿ‹ƒè‰…Àu ‹B‰$ÿPƒOL‰D$‹ƒ5¶‹‰$è3j‹ƒç®‹‰ƒã®ǃ߮Û‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…Lÿÿÿ‹•pÿÿÿ‰•PÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEé.¿ÿÿ‹B‰$ÿPépîÿÿèÆi…ÀuƒOL‰D$‹ƒ5¶‹‰$è{i‹ƒç®‹‰ƒã®ǃ߮Û‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇE邾ÿÿ‹E¸‹P‰$ÿRéƒíÿÿ‹ƒç®‹‰ƒã®ǃ߮Û‹U€‰•0ÿÿÿ‹}„‹…`ÿÿÿ‰…4ÿÿÿ‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéö½ÿÿ‹ƒç®‹‰ƒã®ǃ߮Þ‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…Lÿÿÿ‹•pÿÿÿ‰•Pÿÿÿ‹…|ÿÿÿ‰…xÿÿÿÇ…lÿÿÿÇEŒÇEém½ÿÿ‹B‰$ÿPécíÿÿ‹ƒç®‹‰ƒã®ǃ߮Ý‹U€‰•0ÿÿÿ‹}„‹…`ÿÿÿ‰…4ÿÿÿ‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•Lÿÿÿ‹…pÿÿÿ‰…Pÿÿÿ‹•|ÿÿÿ‰•xÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEéÓ¼ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ý‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…Lÿÿÿ‹•pÿÿÿ‰•Pÿÿÿ‹…|ÿÿÿ‰…xÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEéG¼ÿÿ‹ƒç®‹‰ƒã®ǃ߮Þ‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…Lÿÿÿ‹•pÿÿÿ‰•Pÿÿÿ‹…|ÿÿÿ‰…xÿÿÿÇ…\ÿÿÿÇEŒÇEé¾»ÿÿ‹ƒç®‹‰ƒã®ǃ߮Þ‹U€‰•0ÿÿÿ‹}„‹…`ÿÿÿ‰…4ÿÿÿ‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•Lÿÿÿ‹…pÿÿÿ‰…Pÿÿÿ‹•|ÿÿÿ‰•xÿÿÿÇ…lÿÿÿÇEŒÇEé5»ÿÿ‹ƒç®‹‰ƒã®ǃ߮Þ‹U€‰•0ÿÿÿ‹}„‹…`ÿÿÿ‰…4ÿÿÿ‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•Lÿÿÿ‹…pÿÿÿ‰…Pÿÿÿ‹•|ÿÿÿ‰•xÿÿÿÇ…\ÿÿÿÇEŒÇE鬺ÿÿ‹ƒç®‹‰ƒã®ǃ߮ß‹U€‰•0ÿÿÿ‹}„‹…`ÿÿÿ‰…4ÿÿÿ‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•Lÿÿÿ‹…pÿÿÿ‰…Pÿÿÿ‹•|ÿÿÿ‰•xÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéºÿÿ‹ƒç®‹‰ƒã®ǃ߮Û‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéž¹ÿÿèDd…À…nèÿÿƒOL‰D$‹ƒ5¶‹‰$èõcéOèÿÿ‹B‰$ÿPé&èÿÿ‹ƒç®‹‰ƒã®ǃ߮Û‹U€‰•0ÿÿÿ‹}„‹…`ÿÿÿ‰…4ÿÿÿ‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇ…lÿÿÿÇEŒÇEéó¸ÿÿè™c…ÀuƒOL‰D$‹ƒ5¶‹‰$èNc‹ƒç®‹‰ƒã®ǃ߮Û‹U€‰•0ÿÿÿ‹}„‹…`ÿÿÿ‰…4ÿÿÿ‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇ…lÿÿÿÇEŒÇEé_¸ÿÿ‹B‰$ÿP龿ÿÿ‹ƒç®‹‰ƒã®ǃ߮Û‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEéÝ·ÿÿèƒb…ÀuƒOL‰D$‹ƒ5¶‹‰$è8b‹ƒç®‹‰ƒã®ǃ߮Û‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEéF·ÿÿ‹B‰$ÿPé_åÿÿ‹ƒç®‹‰ƒã®ǃ߮Û‹U€‰•0ÿÿÿ‹}„‹…`ÿÿÿ‰…4ÿÿÿ‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇ…\ÿÿÿÇEŒÇEéǶÿÿèma…ÀuƒOL‰D$‹ƒ5¶‹‰$è"a‹ƒç®‹‰ƒã®ǃ߮Û‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…\ÿÿÿÇEŒÇEé3¶ÿÿ‹E¸‹P‰$ÿRéöãÿÿ‹ƒç®‹‰ƒã®ǃ߮Û‹E€‰…0ÿÿÿ‹}„‹•`ÿÿÿ‰•4ÿÿÿ‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEé§µÿÿ‹ƒç®‹‰ƒã®ǃ߮Û‹U€‰•0ÿÿÿ‹}„‹…`ÿÿÿ‰…4ÿÿÿ‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEé,µÿÿ‹B‰$ÿPéªâÿÿèÄ_…À… ‹Uˆ‹ƒè‰…À…Öÿÿ‹B‰$ÿPéõÕÿÿ‹ƒç®‹‰ƒã®ǃ߮Ú‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEé‚´ÿÿè(_…ÀuƒOL‰D$‹ƒ5¶‹‰$èÝ^‹ƒç®‹‰ƒã®ǃ߮Å‹E€‰…0ÿÿÿ‹}„‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéü³ÿÿ‹ƒç®‹‰ƒã®ǃ߮Å‹U€‰•0ÿÿÿ‹}„‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇE陳ÿÿ‹ƒç®‹‰ƒã®ǃ߮Å‹E€‰…0ÿÿÿ‹}„‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEé6³ÿÿèÜ]…À…~ÅÿÿƒOL‰D$‹ƒ5¶‹‰$è]é_Åÿÿ‹ƒç®‹‰ƒã®ǃ߮¨‹U€‰•0ÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇE黲ÿÿ‹ƒç®‹‰ƒã®ǃ߮ª‹E€‰…0ÿÿÿ‹}„Ç…lÿÿÿÇ…\ÿÿÿÇEŒÇEép²ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ä‹U€‰•0ÿÿÿ‹}„‹…hÿÿÿ‰…@ÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇE‰µDÿÿÿé ²ÿÿ‹ƒç®‹‰ƒã®ǃ߮‹U€‰•0ÿÿÿ‹}„ÇEˆÇ…\ÿÿÿÇEŒÇEéıÿÿèj\…ÀuƒOL‰D$‹ƒ5¶‹‰$è\‹ƒç®‹‰ƒã®ǃ߮Å‹E€‰…0ÿÿÿ‹}„‹•hÿÿÿ‰•@ÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéJ±ÿÿ‹ƒç®‹‰ƒã®ǃ߮Å‹E€‰…0ÿÿÿ‹}„‹•hÿÿÿ‰•@ÿÿÿÇ…\ÿÿÿÇEŒÇEéý°ÿÿè£[…Àu2‹E¼‹ƒê‰…Òu ‹E¼‹P‰$ÿRÇE¼‹…hÿÿÿ‰…@ÿÿÿéIÀÿÿ‹ƒç®‹‰ƒã®ǃ߮Ä‹U€‰•0ÿÿÿ‹}„‹…hÿÿÿ‰…@ÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéd°ÿÿ‹ƒç®‹‰ƒã®ǃ߮‹E€‰…0ÿÿÿ‹}„ÇEˆÇ…\ÿÿÿÇEŒÇEé°ÿÿ‹ƒç®‹‰ƒã®ǃ߮Å‹E€‰…0ÿÿÿ‹}„‹•hÿÿÿ‰•@ÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéůÿÿ‹ƒç®‹‰ƒã®ǃ߮Å‹E€‰…0ÿÿÿ‹}„‹•hÿÿÿ‰•@ÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEég¯ÿÿ‹ƒç®‹‰ƒã®ǃ߮׋U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéñ®ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ú‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEé‚®ÿÿ‹ƒç®‹‰ƒã®ǃ߮í‹E€‰…0ÿÿÿ‹}„‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇEˆÇ…\ÿÿÿÇEŒÇEé®ÿÿ‹ƒç®‹‰ƒã®ǃ߮í‹E€‰…0ÿÿÿ‹}„‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇEˆÇ…\ÿÿÿÇEŒÇE骭ÿÿ‹…tÿÿÿ‰…\ÿÿÿé­Ãÿÿ‹ƒç®‹‰ƒã®ǃ߮í‹…tÿÿÿ‰…\ÿÿÿ‹U€‰•0ÿÿÿ‹}„‰…Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇEˆÇ…lÿÿÿÇEŒÇEé'­ÿÿ‹ƒç®‹‰ƒã®ǃ߮ì‹E€‰…0ÿÿÿ‹}„‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇEˆÇ…lÿÿÿÇEŒÇE黬ÿÿ‹B‰$ÿPéÍÁÿÿ‹ƒç®‹‰ƒã®ǃ߮ì‹E€‰…0ÿÿÿ‹}„‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇEˆÇ…lÿÿÿÇEŒÇEéA¬ÿÿ‹ƒç®‹‰ƒã®ǃ߮í‹E€‰…0ÿÿÿ‹}„‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇEˆÇ…lÿÿÿÇEŒÇEéÕ«ÿÿ‹ƒç®‹‰ƒã®ǃ߮½‹U€‰•0ÿÿÿ‹}„ÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇE郫ÿÿ‹ƒç®‹‰ƒã®ǃ߮½‹E€‰…0ÿÿÿ‹}„ÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEé1«ÿÿ‹ƒç®‹‰ƒã®ǃ߮½‹U€‰•0ÿÿÿ‹}„ÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéߪÿÿ‹ƒç®‹‰ƒã®ǃ߮½‹E€‰…0ÿÿÿ‹}„ÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéªÿÿ‹ƒç®‹‰ƒã®ǃ߮½‹U€‰•0ÿÿÿ‹}„ÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEé;ªÿÿ‹ƒç®‹‰ƒã®ǃ߮½‹E€‰…0ÿÿÿ‹}„ÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéé©ÿÿ‹ƒç®‹‰ƒã®ǃ߮½‹U€‰•0ÿÿÿ‹}„ÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEé—©ÿÿ‹ƒç®‹‰ƒã®ǃ߮½‹E€‰…0ÿÿÿ‹}„ÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéE©ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ø‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…\ÿÿÿÇEŒÇEéÙ¨ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ø‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…\ÿÿÿÇEŒÇEém¨ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ø‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…lÿÿÿÇEŒÇEé¨ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ø‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…lÿÿÿÇE骧ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ø‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEéB§ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ø‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…\ÿÿÿÇEŒÇEéݦÿÿ‰t$‹ƒe¶‹‰$èÉQ‹ƒç®‹‰ƒã®ǃ߮Ø‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…\ÿÿÿÇEŒÇEé]¦ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ø‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéç¥ÿÿ‹ƒç®‹‰ƒã®ǃ߮ë‹E€‰…0ÿÿÿ‹}„‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéq¥ÿÿ‹E¸‹P‰$ÿRéÇÿÿ‹ƒç®‹‰ƒã®ǃ߮Õ‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéê¤ÿÿ‹ƒç®‹‰ƒã®ǃ߮Õ‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEét¤ÿÿ‹ƒè‰…Àu ‹B‰$ÿPƒOL‰D$‹ƒ5¶‹‰$èÄN‹ƒç®‹‰ƒã®ǃ߮Å‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEé×£ÿÿ‹ƒç®‹‰ƒã®ǃ߮Æ‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéa£ÿÿ‹ƒç®‹‰ƒã®ǃ߮Å‹E€‰…0ÿÿÿ‹}„‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéþ¢ÿÿè¤M…À…—µÿÿƒOL‰D$‹ƒ5¶‹‰$èUMéxµÿÿ‹B‰$ÿPé‚Áÿÿ‹B‰$ÿPébÁÿÿ‹ƒç®‹‰ƒã®ǃ߮Ï‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…\ÿÿÿÇEŒÇEéQ¢ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ï‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…\ÿÿÿÇEŒÇEéì¡ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ï‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇEŒÇE銡ÿÿ‹B‰$ÿPé‹¿ÿÿ‹B‰$ÿPék¿ÿÿ‹ƒç®‹‰ƒã®ǃ߮ЋU€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEé¡ÿÿ‹ƒç®‹‰ƒã®ǃ߮ЋU€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇE鯠ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ñ‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEŒÇEék ÿÿ‹ƒç®‹‰ƒã®ǃ߮ЋU€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEŒÇEé ÿÿ‹EÀ‹P‰$ÿRéZ½ÿÿ‹ƒç®‹‰ƒã®ǃ߮ЋU€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEŒÇE餟ÿÿ‹ƒç®‹‰ƒã®ǃ߮ЋU€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇEŒÇEéBŸÿÿ‰|$‹ƒe¶‹‰$è.JéJ¼ÿÿ‹E¸‹P‰$ÿRé¼ÿÿ‹B‰$ÿPéð»ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ï‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEŒÇE鯞ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ï‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEŒÇEéTžÿÿ‹ƒç®‹‰ƒã®ǃ߮Ï‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEŒÇEéùÿÿ‹ƒç®‹‰ƒã®ǃ߮Ï‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEŒÇEéžÿÿ‹E¸‹P‰$ÿRé½¹ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ï‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…\ÿÿÿÇEŒÇEé(ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ï‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…\ÿÿÿÇEŒÇE鼜ÿÿ‰|$‹ƒe¶‹‰$è¨G陸ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ï‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…\ÿÿÿÇEŒÇEé7œÿÿ‹…ÿÿÿ‰$èƒG‰…\ÿÿÿ…À„{‹•Dÿÿÿ‰T$‰$è©G‰EÀ…À„ì‹•\ÿÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹…ÿÿÿ‰$è0G‰…lÿÿÿ…À„D‰D$‹EÀ‰$èÃF‰E¸…À„¸‹EÀ‹ƒê‰…Òu ‹EÀ‹P‰$ÿRÇEÀ‹•lÿÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹E¸‰$è®F‰EÄè F…À…æ‹E¸‹ƒê‰…Òu ‹E¸‹P‰$ÿRÇE¸‹Eĉ…ÿÿÿ‹•Dÿÿÿ‰$èfF‰EäèÃE…À…"‹E䉅ÿÿÿ‹ƒ¯¯‰D$‹U‰$è±E‰Eˆ…À„„Ç$è³E‰…\ÿÿÿ…À„ÿ‹…Dÿÿÿƒ‹•\ÿÿÿ‰B ‹ƒI¶ƒ‰Bƒ‰r‰T$‹Eˆ‰$èþE‰EÀ…ÀtZ‹Uˆ‹ƒè‰…Àu ‹B‰$ÿP‹•\ÿÿÿ‹ƒè‰…Àu ‹B‰$ÿP‹ƒè‰…Àu ‹F‰4$ÿP‹EÀ‰…PÿÿÿÇEÀéçµÿÿ‹ƒç®‹‰ƒã®ǃ߮΋U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…Lÿÿÿ‰µPÿÿÿÇ…lÿÿÿÇEŒÇEéΙÿÿ‹ƒç®‹‰ƒã®ǃ߮΋U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…Lÿÿÿ‰µPÿÿÿÇ…lÿÿÿÇEŒÇEéc™ÿÿ‹ƒç®‹‰ƒã®ǃ߮΋U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…Lÿÿÿ‰µPÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéî˜ÿÿ‹ƒç®‹‰ƒã®ǃ߮Í‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…Lÿÿÿ‰µPÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEér˜ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ì‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…Lÿÿÿ‰µPÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéö—ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ì‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…Lÿÿÿ‰µPÿÿÿÇEˆÇ…\ÿÿÿÇEŒÇEé„—ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ì‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…Lÿÿÿ‰µPÿÿÿÇEˆÇ…\ÿÿÿÇEŒÇEé—ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ì‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…Lÿÿÿ‰µPÿÿÿÇEˆÇ…lÿÿÿÇEŒÇEé –ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ì‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…Lÿÿÿ‰µPÿÿÿÇEˆÇ…lÿÿÿÇEŒÇEé.–ÿÿ‹B‰$ÿPé½±ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ë‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…Lÿÿÿ‰µPÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEé«•ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ë‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…Lÿÿÿ‰µPÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEé6•ÿÿ‹Eà‰$èþ?‰Eäƒø|”À¶À‰EÄéÈ­ÿÿ‹E¸‹P‰$ÿRé“­ÿÿ‹ƒç®‹‰ƒã®ǃ߮Ê‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…Lÿÿÿ‰µPÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇE鈔ÿÿ‹ƒè‰…Àu ‹B‰$ÿPƒOL‰D$‹ƒ5¶‹‰$èØ>‹ƒç®‹‰ƒã®ǃ߮É‹E€‰…0ÿÿÿ‹}„‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•Lÿÿÿ‰µPÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéÞ“ÿÿ‹B‰$ÿPé+¬ÿÿèv>…ÀuƒOL‰D$‹ƒ5¶‹‰$è+>‹ƒç®‹‰ƒã®ǃ߮É‹E€‰…0ÿÿÿ‹}„‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEé7“ÿÿ‹EÀ‹P‰$ÿRéJ«ÿÿ‹ƒç®‹‰ƒã®ǃ߮É‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEé°’ÿÿ‹ƒç®‹‰ƒã®ǃ߮É‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEé:’ÿÿèà<…À…ªÿÿƒOL‰D$‹ƒ5¶‹‰$è‘<éý©ÿÿ‹B‰$ÿPéÑ©ÿÿ‹ƒç®‹‰ƒã®ǃ߮É‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…lÿÿÿÇEŒÇE锑ÿÿè:<…ÀuƒOL‰D$‹ƒ5¶‹‰$èï;‹ƒç®‹‰ƒã®ǃ߮É‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇEˆÇ…lÿÿÿÇEŒÇEé‘ÿÿ‹B‰$ÿPés¨ÿÿ‹ƒç®‹‰ƒã®ǃ߮É‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéˆÿÿè.;…ÀuƒOL‰D$‹ƒ5¶‹‰$èã:‹ƒç®‹‰ƒã®ǃ߮É‹U€‰•0ÿÿÿ‹}„‹…tÿÿÿ‰…Tÿÿÿ‹•hÿÿÿ‰•@ÿÿÿ‹…dÿÿÿ‰…LÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEéöÿÿ‹B‰$ÿP‰µDÿÿÿé4¦ÿÿ‹ƒç®‹‰ƒã®ǃ߮ï‹E€‰…0ÿÿÿ‹}„‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇEélÿÿ‹F‰4$ÿPé…³ÿÿ‹B‰$ÿPéh³ÿÿ‹EÀ‹P‰$ÿRé;³ÿÿ‹ƒç®‹‰ƒã®ǃ߮î‹E€‰…0ÿÿÿ‹}„‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇEˆÇ…lÿÿÿÇEŒÇEéÓŽÿÿ‹ƒç®‹‰ƒã®ǃ߮î‹E€‰…0ÿÿÿ‹}„‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇEˆÇEŒÇEéqŽÿÿ‹E¸‹P‰$ÿRé²ÿÿ‹B‰$ÿPéç±ÿÿ‹ƒç®‹‰ƒã®ǃ߮î‹E€‰…0ÿÿÿ‹}„‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇEˆÇ…\ÿÿÿÇEŒéíÿÿ‹ƒç®‹‰ƒã®ǃ߮î‹E€‰…0ÿÿÿ‹}„‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒé…ÿÿ‹ƒç®‹‰ƒã®ǃ߮î‹E€‰…0ÿÿÿ‹}„‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇ…lÿÿÿÇ…\ÿÿÿÇEŒéÿÿ‹B‰$ÿPé°ÿÿ‹ƒç®‹‰ƒã®ǃ߮î‹E€‰…0ÿÿÿ‹}„‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿé§Œÿÿ‰t$‹ƒe¶‹‰$è“7‹ƒç®‹‰ƒã®ǃ߮î‹E€‰…0ÿÿÿ‹}„‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEé$Œÿÿ‹ƒç®‹‰ƒã®ǃ߮î‹E€‰…0ÿÿÿ‹}„‹•tÿÿÿ‰•Tÿÿÿ‹…hÿÿÿ‰…@ÿÿÿ‹•dÿÿÿ‰•LÿÿÿÇEˆÇ…lÿÿÿÇ…\ÿÿÿÇEŒÇE鮋ÿÿU‰åWVSƒìlèíÕÇEà‹ƒÑ4‰EäUE ÇD$ Mà‰L$ÇD$Ç$‹‘#èÑèûÿ…ÀˆCEä‰D$ƒ‘#‰D$ ƒ5¾‰D$‹E‰D$‹E ‰$èO6…À„Ç‹Eƒ‹E䃋“Ë7‰U¼‰U¸ƒ‹M‹A0‹P…Ò…d‹@<ƒ‹U¼‹ƒè‰…À„Š‹M‹A0‹@<‰E¸Ç$èÃ5‰Æ…À„ú‹U¼‹ƒè‰…À„t‹M‹I‰MÔ…ÉŽS‰uÀÇE´‹U¼‰UÄÇEÐé…‰T$‰4$è‘5‰EÈ‹MÈ…É„ò‹³á/…ö„5‹UÈ;“Ë7t‹B9Æt‰t$‰$è)6…À„c‹M¼‹ƒè‰…À„±‹EȉE¼‹P…Ò…ýƒE´ƒEЋM´9MÔ„c‹M‹A,‹MЋT‹E¸‹p‹F‹@4…Àt ‹x …ÿ…Sÿÿÿ‰$è$5‰Ç…À„M‰D$‰4$èh5‰EÈ‹ƒè‰…À…2ÿÿÿ‹G‰<$ÿPé$ÿÿÿ‹ƒÕ2‰D$‰ $èA4‰Æ…À„nÇ$èD4‰EÈ…À„‰Á‹Eà‰D$‰L$‰4$èˆ4‰Ç…À„ó‹ƒè‰…À„Ó‹UÈ‹ƒè‰…À„°‰þ‹M¼‰MĉMÀé5‹U‹B,‹MЋD ‰$èV4‰EÌ…À„Ñ‹U‹B,‹MЋD‰$è64‰Æ…À„xÇ$èž3‰EÈ…À„~‹E¼ƒ‹UȉB ‹M̉J‰r‰T$‹ƒÕ/‰$èø3‰Ç…À„ ‹UÈ‹ƒè‰…À„Ù‹MÄ‹ƒè‰…À„¹‹ƒÕ2‰D$‰<$è3‰Æ…À„¬Ç$è3‰EÈ…À„7‹Eà‰D$‹EȉD$‰4$èY3‰EÌ…À„=‹ƒè‰…À„€‹UÈ‹ƒè‰…À„`‹M̉L$‹EÀ‰$è3‰Æ…À„ ‹UÌ‹ƒè‰…À„_‹MÀ‹ƒè‰…À„<‰uÀ‰}ăE´ƒEЋM´9MÔ…ýÿÿ‹EÀ‰$è;3ƒøÿ„Y…ÀŽn‹UÀƒ‰Öé’‹M¼‹A‰ $ÿPé>ýÿÿ‹U …Òt‹ƒè‰…Àu ‹E ‹P‰$ÿR‹U…Òt‹ƒè‰…Àu ‹E‹P‰$ÿR‹Uà…Ò…ƒ1ö‰ðƒÄl[^_]˃i0‹‰ƒe0ǃa0 ‹E¼‰EĉEÀƒeÓèqêûÿ1ö‹Uà…Òt‹ƒè‰…À„÷‹M¸‹ƒè‰…À„׋U¼‹ƒè‰…À„·‹MÀ‹ƒè‰…À„—‹UÄ‹ƒè‰…Àt{‹M‹ƒè‰…Àtb‹E䋃ꉅÒtF‹U …Òt‹ƒè‰…À„’‹U…Ò„1ÿÿÿ‹ƒè‰…À…"ÿÿÿ‹E‹P‰$ÿR‰ðƒÄl[^_]ËEä‹P‰$ÿR묋A‰ $ÿPë“‹B‰$ÿPéwÿÿÿ‹A‰ $ÿPé[ÿÿÿ‹B‰$ÿPé;ÿÿÿ‹A‰ $ÿPéÿÿÿ‹Eà‹P‰$ÿRéøþÿÿ‹E ‹P‰$ÿRé]ÿÿÿ‹A‰ $ÿPé9ýÿÿ‹B‰$ÿPéýÿÿ‹B‰$ÿPé’ýÿÿ‹F‰4$ÿPérýÿÿ‹UÀ‹B‰$ÿPé³ýÿÿ‹B‰$ÿPé“ýÿÿ‹B‰$ÿPéhúÿÿ‰uÀ‹E¼‰Eĉðé¤ýÿÿ‹B‰$ÿPé~úÿÿ‹ƒi0‹‰ƒe0ǃa0)ÇEÈÇEÌ‹EÈ…Àt‹MÈ‹ƒè‰…ÀtQ‹EÌ…À„ûýÿÿ‹UÌ‹ƒè‰…À…éýÿÿ‹B‰$ÿPéÛýÿÿ‹ƒi0‹‰ƒe0ǃa0"‹E¼‰EĉEÀéµýÿÿ‹A‰ $ÿP뤋ƒè‰…À…nýÿÿ‹Eà‹P‰$ÿR1öé]ýÿÿ‹UÈ‹B‰$ÿPé?ûÿÿ‹F‰4$ÿPéûÿÿ‹ƒi0‹‰ƒe0ǃa0 ÇEÌ‹U¼‰UĉUÀ‹ƒè‰…À…ÿÿÿ‹F‰4$ÿPé ÿÿÿÇ$èÙ.‰EÈ…À„ ‹ƒU3ƒ‹ƒU3‹MȉA ‰L$‹ƒ·7‹‰$è1/‰Æ…À„Ø‹UÈ‹ƒè‰…À„1É1Ò‰ðèšßûÿ‹ƒè‰…À„‹ƒi0‹‰ƒe0ǃa0+ÇEÈéhþÿÿ‹ƒi0‹‰ƒe0ǃa0$ÇEÈéDþÿÿ‹ƒi0‹‰ƒe0ǃa0 ÇEÌ‹E¼‰EĉEÀéøþÿÿƒ¡¾‰D$‹ƒû7‹‰$è©-‹ƒi0‹‰ƒe0ǃa0$éàýÿÿ‹ƒi0‹‰ƒe0ǃa0+éÃýÿÿ‹F ‰D$ ‹UÈ‹B‹@ ‰D$ƒñljD$‹ƒ8‹‰$èA-ë–‹ƒi0‹‰ƒe0ǃa0(‰}Äé•ûÿÿ‹ƒi0‹‰ƒe0ǃa0&ÇEÌé]ýÿÿ‹ƒi0‹‰ƒe0ǃa0'éNýÿÿ‹ƒi0‹‰ƒe0ǃa0&éöýÿÿ‹ƒi0‹‰ƒe0ǃa0&ÇEÈéñüÿÿ‹ƒi0‹‰ƒe0ǃa0(‰}ÄÇEÌé«ýÿÿ‹ƒi0‹‰ƒe0ǃa0(‰}Äé‹ýÿÿ‹ƒi0‹‰ƒe0ǃa0(‰}Äé¦üÿÿ‹B‰$ÿPéÖýÿÿ‹F‰4$ÿPéâýÿÿU‰åWVSìüˆèµËÇEäÇEàÇEÐÇEÌÇEÄEà‰D$Eä‰D$ƒa‰D$ ƒQɉD$‹E‰D$‹E ‰$è4,…À„û‹Eƒ‹E䃋Eàƒ‹““-‰•¤wýÿƒ‹M‹Q,‹q‹F‹@4…À„†‹H …É„{‰T$‰4$èØ+‰Æ‰uÐ…ö„6‹»©%…ÿ„Ã;³“-t‹F9Çt‰|$‰$èt,…À„·‹•¤wýÿ‰•œwýÿ‹ƒè‰…À„‹MЉ`wýÿÇEЋEÇ@<•¨÷ÿÿ‰•DwýÿÇD$ÇD$‰$èð+ÇEÔ‹M‹A‰$è½+‰…twýÿƒøÿ…‹ƒ1&‹‰ƒ-&ǃ)&΋…¤wýÿ‰…dwýÿÇ…xwýÿÇ…|wýÿÇ…€wýÿ‰…lwýÿ‰…hwýÿ‰…pwýÿ‹UÐ…Òt‹ƒè‰…À„Ï‹½xwýÿ…ÿt‹xwýÿ‹ƒè‰…À„¢‹UÌ…Òt‹ƒè‰…À„Ø‹UÄ…Òt‹ƒè‰…À„±‹µ|wýÿ…öt‹•|wýÿ‹ƒè‰…À„„‹€wýÿ…Ét‹€wýÿ‹ƒè‰…À„WƒuÉè”âûÿ1ö‹•`wýÿ‹ƒè‰…À„‹dwýÿ‹ƒè‰…À„x‹•hwýÿ‹ƒè‰…À„‹lwýÿ‹ƒè‰…À„Š‹•pwýÿ‹ƒè‰…À„“‹M‹ƒè‰…À„œ‹E䋃ꉅ҄‹Eà‹ƒê‰…Òu ‹Eà‹P‰$ÿR‰ðÄüˆ[^_]É$è)‰Ç…À„m‰D$‰4$èá)‰Æ‹ƒè‰…À…dýÿÿ‹G‰<$ÿPéVýÿÿ1ö‰ðÄüˆ[^_]ÃÇD$‰$è†(‰…Pwýÿ‹ƒu(‰D$‹M‹A‰$è(‰Â‰EÐ…À„‰‹ƒu'‰D$‰$èq(‰…xwýÿ…À„r‹EЋƒê‰…Ò„ÕÇEÐÇD$‹xwýÿ‰ $èÙ(‰EÐ…À„˜‹•xwýÿ‹ƒè‰…À„‹EЉ$èú'‰…xwýÿ…À„“‹EЋƒê‰…Ò„GÇEЋ½Pwýÿ‹ƒ“-‰…lwýÿ‰…hwýÿéIÇEЋẺ$èb(‰Æ…À„¶‰uÐ…ö„\‹hwýÿ‹ƒè‰…À„¸‹EЉ…hwýÿÇEЋẺ$è(‰Æ…À„‰uÐ…ö„‹lwýÿ‹ƒè‰…À„‹EЉ…lwýÿÇEЋẺ$èØ'‰Â…À…´è'…À…ЋEÌ‹ƒê‰…Ò„KÇEÌ‹hwýÿ‰ $èå'…À„é‰$èä'‰‹ƒ'‰D$‹•lwýÿ‰$èÁ&‰EÐ…À„w‰$è5'‰EÈè’&…À…_‹EЋƒê‰…Ò„èÇEЋEȉGƒÇ‹•xwýÿ‰$è'‰EÐ…À„ÿ‰$èL&‰EÌ…À„‹EЋƒê‰…Ò…yþÿÿ‹EЋP‰$ÿRéhþÿÿ‹Eä‹P‰$ÿRéëüÿÿ‹A‰ $ÿP‹•hwýÿ‹ƒè‰…À…üÿÿ‹B‰$ÿP‹lwýÿ‹ƒè‰…À…vüÿÿ‹A‰ $ÿP‹•pwýÿ‹ƒè‰…À…müÿÿ‹B‰$ÿP‹M‹ƒè‰…À…düÿÿ‹A‰ $ÿPéVüÿÿ‹B‰$ÿPéâûÿÿ1öé úÿÿ‹G ‰D$ ‹F‹@ ‰D$ƒ¹½‰D$‹ƒÏ-‹‰$è;%‹ƒ1&‹‰ƒ-&ǃ)&É‹¤wýÿ‰dwýÿ‰`wýÿÇ…xwýÿÇ…|wýÿÇ…€wýÿ‰lwýÿ‰hwýÿ‰pwýÿéúÿÿ‹ƒ1&‹‰ƒ-&ǃ)&Ñ‹…¤wýÿ‰…dwýÿé7úÿÿ‹A‰ $ÿPé:ýÿÿ‹A‰ $ÿPéqýÿÿ‹EÌ‹P‰$ÿRé¤ýÿÿ‹EЋP‰$ÿRéþÿÿ‹A‰ $ÿPéPúÿÿ‹EЋP‰$ÿRé úÿÿ‹A‰ $ÿPé›úÿÿ‹B‰$ÿPénúÿÿ‹EÄ‹P‰$ÿRé>úÿÿ‹EÌ‹P‰$ÿRéúÿÿ‹ƒ1&‹‰ƒ-&ǃ)&É‹…¤wýÿ‰…dwýÿ‰…`wýÿémùÿÿ‹•¤wýÿ‹B‰$ÿPéÓøÿÿèÚ#…À…=üÿÿƒ™Ã‰D$‹ƒ-‹‰$è‹#éüÿÿè®#…À…Vüÿÿƒ™Ã‰D$‹ƒ-‹‰$è_#é7üÿÿƒi´‰D$‹ƒÃ-‹‰$èc#é#þÿÿ‹EЋP‰$ÿRéûÿÿ‹ƒè‰…À„žƒ™Ã‰D$‹ƒ-‹‰$è#‹ƒ1&‹‰ƒ-&ǃ)&Ñ‹•¤wýÿ‰•dwýÿÇ…|wýÿÇ…€wýÿ‰•pwýÿ镸ÿÿ‹B‰$ÿPéÝúÿÿ‹ƒ1&‹‰ƒ-&ǃ)&Ñ‹•¤wýÿ‰•dwýÿÇ…|wýÿÇ…€wýÿ‰•lwýÿ‰•hwýÿ‰•pwýÿé8øÿÿ‹EЋP‰$ÿRé¨úÿÿ‹ƒ1&‹‰ƒ-&ǃ)&Ñ‹…¤wýÿ‰…dwýÿéØ÷ÿÿ‹ƒ1&‹‰ƒ-&ǃ)&Ñ‹¤wýÿ‰dwýÿéýÿÿ‹ƒ1&‹‰ƒ-&ǃ)&Ô‹UÌ…Òt‹ƒè‰…À„1ÇEÌ‹UÐ…Òt‹ƒè‰…À„%ÇEЋ³Ç-‹‰$èì!‰EÈ…À„¨þÿÿƒUÉè›ÚûÿMÄUÐEÌè÷×ûÿ…Àˆ‹ƒ'‰D$‹…lwýÿ‰$è™!‰…|wýÿ…À„ Ç$è˜!‰…€wýÿ…À„U ‹…hwýÿƒ‹•€wýÿ‰B ‹|wýÿ‰J‰T$‹ƒ)‰$è"‰…|wýÿ…À„x ‹•€wýÿ‹ƒè‰…À„U Ç$è.!‰…€wýÿ…À„ ‹•|wýÿ‹…€wýÿ‰P ‰D$‹‰$è!‰Æ…À„ ‹•€wýÿ‹ƒè‰…Àu ‹B‰$ÿP1É1Ò‰ðèðÑûÿ‹ƒè‰…Àu ‹F‰4$ÿP‹ƒ1&‹‰ƒ-&ǃ)&Ö‹¤wýÿ‰dwýÿÇ…|wýÿÇ…€wýÿ‰pwýÿéúõÿÿèK …À„Ä‹ƒ1&‹‰ƒ-&ǃ)&Ñ뮋ƒ1&‹‰ƒ-&ǃ)&Ñ‹…¤wýÿ‰…dwýÿÇ…|wýÿÇ…€wýÿ‰…pwýÿéõÿÿ‹ƒ1&‹‰ƒ-&ǃ)&Ò뻋EÌ‹P‰$ÿRé¾ýÿÿ‹EЋP‰$ÿRéÊýÿÿ‹B‰$ÿPéTüÿÿ‹ƒ1&‹‰ƒ-&ǃ)&Õéÿÿÿ‹•xwýÿ‹ƒè‰…À„â ‹ƒÓ-‰D$ ÇD$‹twýÿ‰L$‹…Pwýÿ‰$è'‹ƒ“-ƒ‹•œwýÿ‹ƒè‰…À„Œ ÇEÀÿÿÿÿƒuò‰D$M؉Hwýÿ‰ $èK‹Eä‰$èú‰…€wýÿ…À„ ‹•¤wýÿ‰•pwýÿ‰•dwýÿ¨÷þÿ‰8wýÿ…¨wýÿ‰…4wýÿ‹•€wýÿ‰$èr‰…Œwýÿ…À„G‹pwýÿ‹ƒè‰…À„1 ‹»‰'‰|$‹ƒ!&‰$舉ƅÀ„› ‰uÌ…ö„«‹ƒU'‰D$‰4$èa‰EÐ…À„Q‹EÌ‹ƒê‰…Ò„ãÇEÌ‹…Œwýÿ‰D$‹ƒ…)‰$è‰EÄ…À„m Ç$è'‰…xwýÿ…À„»‰Â‹EĉB ÇEĉT$‹EЉ$臉ƅÀ„`‹EЋƒê‰…Ò„ºÇEЋxwýÿ‹ƒè‰…À„‹ƒè‰…À„s‹…Œwýÿ‰$臉…À„Tƒhò‰D$‰$艅\wýÿ…À”À¶À‰EÈ…À…ø‹\wýÿ‰L$ÇD$ÿ‹…8wýÿ‰$èÊ…À”À¶À‰EÈ…À„Õ‹UÈ…Ò…ê ‹•\wýÿ‰T$ÇD$ÿ‹8wýÿ‰ $茉…Xwýÿ1Àƒ½Xwýÿ•À‰EÈ…À„O‹EÔ‰EÈ…À„d‹EÈ…Àu81Àƒ}Ô”À‰EÈ…ÀtÄ‹…\wýÿ‰D$ÇD$ÿ‹•8wýÿ‰$è*‰…XwýÿëœEÔ‰D$$‹Dwýÿ‰L$ ÇD$‹…\wýÿ‰D$E܉D$‹•`wýÿ‹B‰D$‹twýÿ‰L$ ‹…Pwýÿ‰D$ÇD$‹•4wýÿ‰$èæ‹‰…TwýÿÁè‰EÈ…À…m 1Àƒ½Twýÿ”À‰EÈ…À…ÿÿÿ‹U‹B0‹`wýÿ+A;EÜžÀ¶À‰EÈ…À„¬‹EÈ…À…•‹…Twýÿ…ÀŽ<Ç…wýÿ‹““-‰•ÇEÔÇD$‹ ÿýÿ‰ $艉EÔ…À„‹• ÿýÿ‹ƒè‰…À„‹EÔ‰$èªÿ‰… ÿýÿ…À„ö‹EÔ‹ƒê‰…Ò„¶ÇEÔ‹½Üþýÿ‹…ðþýÿ‰…øþýÿ‰…ôþýÿéNÇEÔ‹…ÿýÿ‰$è‰Æ…À„;‰uÔ…ö„'‹•ôþýÿ‹ƒè‰…À„ˆ‹MÔ‰ôþýÿÇEÔ‹…ÿýÿ‰$èÇÿ‰Æ…À„‰uÔ…ö„>‹•øþýÿ‹ƒè‰…À„N‹MÔ‰øþýÿÇEÔ‹…ÿýÿ‰$èÿ‰Â…À…yè­þ…À…•‹ÿýÿ‹ƒè‰…À„‹…ôþýÿ‰$èÿ…À„æ‰$èÿ‰‹ƒ[þ‰D$‹•øþýÿ‰$èlþ‰EÔ…À„݉$èàþ‰EÐè=þ…À…ì‹EÔ‹ƒê‰…Ò„¹ÇEÔ‹EЉGƒÇ‹• ÿýÿ‰$èÈþ‰EÔ…À„°‰$è÷ý‰…ÿýÿ…À„ò‹EÔ‹ƒê‰…Ò…qþÿÿ‹EÔ‹P‰$ÿRé`þÿÿ‹ƒ ý‹‰ƒýǃýRÇ… ÿýÿé~ûÿÿ‹B‰$ÿPéjþÿÿ‹B‰$ÿPé¤þÿÿ‹ÿýÿ‹A‰ $ÿPéÚþÿÿ‹EÔ‹P‰$ÿRé6ÿÿÿ‹B‰$ÿP‹ôþýÿ‹ƒè‰…À…/üÿÿ‹A‰ $ÿP‹•øþýÿ‹ƒè‰…À…&üÿÿ‹B‰$ÿP‹ƒè‰…À…üÿÿ‹G‰<$ÿP‹üþýÿ‹ƒè‰…À…üÿÿ‹A‰ $ÿP‹•ÿýÿ‹ƒè‰…À… üÿÿ‹B‰$ÿP‹ÿýÿ‹ƒè‰…À…üÿÿ‹A‰ $ÿP‹U‹ƒè‰…À…ùûÿÿ‹B‰$ÿP‹E䋃ꉅ҅ðûÿÿ‹Eä‹P‰$ÿRéßûÿÿ‹A‰ $ÿPéûÿÿ‹EÈ‹P‰$ÿRéãúÿÿ‹EÌ‹P‰$ÿRé¼úÿÿ‹EÔ‹P‰$ÿRéWúÿÿ‹B‰$ÿPé‡úÿÿ‹A‰ $ÿPéZúÿÿèü…À…¸üÿÿƒsš‰D$‹ƒY‹‰$è³ûé™üÿÿèÖû…À…Ôüÿÿƒsš‰D$‹ƒY‹‰$è‡ûéµüÿÿ‹EÔ‹P‰$ÿRé±ûÿÿ‹B‰$ÿPéàûÿÿ‹ƒ ý‹‰ƒýǃýRÇ…ÿýÿÇ…ÿýÿ‹•ðþýÿ‰•øþýÿ‰•ôþýÿ‰•üþýÿ‰×‰•ÿýÿ‰•ÿýÿéWùÿÿ‹ƒè‰…À„ƒsš‰D$‹ƒY‹‰$èãú‹ƒ ý‹‰ƒýǃýRÇ…ÿýÿ‹“m‰•üþýÿ‰×‰•ÿýÿ‰•ÿýÿéíøÿÿ‹EÔ‹P‰$ÿRé9ûÿÿ‹ƒ ý‹‰ƒýǃýRé…øÿÿ‹ƒ ý‹‰ƒýǃýRÇ…ÿýÿÇ…ÿýÿ‹ðþýÿ‰øþýÿ‰ôþýÿ‰üþýÿ‰Ï‰ÿýÿ‰ÿýÿéhøÿÿèEú…À„)‹ƒ ý‹‰ƒýǃýRÇ…ÿýÿÇ…ÿýÿ‹‹m‰üþýÿ‰Ï‰ÿýÿ‰ÿýÿéøÿÿ‹ƒ ý‹‰ƒýǃýRÇ…ÿýÿ‹ƒm‰…üþýÿ‰Ç‰…ÿýÿ‰…ÿýÿéÏ÷ÿÿ‹ƒ ý‹‰ƒýǃýRéyÿÿÿ‹ƒ ý‹‰ƒýǃýSÇ…ÿýÿë–‹ƒ ý‹‰ƒýǃýTÇ…ÿýÿéQþÿÿ‹ƒ ý‹‰ƒýǃýTÇ…ÿýÿéÿÿÿ‹B‰$ÿPéêýÿÿ‹ ÿýÿ‹ƒè‰…À„ ‹ƒ­‰D$ ÇD$‹…ÿýÿ‰D$‹•Üþýÿ‰$è¼ø‹³mƒ‹ðþýÿ‹ƒè‰…À„³ ÇEÄÿÿÿÿƒGɉD$E؉$èæø1Ò‹ƒ‹ÿè=°ûÿ‰…ÿýÿ…À„à‹ƒè‰…À„1Ò‹ƒsè°ûÿ‰EÔ…À„X‹ƒè‰…Àu ‹F‰4$ÿP‹EÔ‰…üþýÿÇEÔ‹Eä‰$è/ø‰… ÿýÿ…À„Ø ‰µÿýÿ‰µÿýÿMЉÔþýÿ…pÿÿÿ‰…Ðþýÿ•0ÿÿÿ‰•Ìþýÿ‹ ÿýÿ‰ $è¤ø‰… ÿýÿ…À„‹•ÿýÿ‹ƒè‰…À„‹»cþ‰|$‹ƒûü‰$èº÷‰Æ…À„‰uÔ…ö„“‹ƒ/þ‰D$‰4$è“÷‰…ÿýÿ…À„Ü‹EÔ‹ƒê‰…Ò„-ÇEÔ‹ ÿýÿ‰L$‹ƒw‰$è5ø‰EÔ…À„mÇ$èV÷‰Â‰EÌ…À„‹EÔ‰B ÇEÔ‹ẺD$‹…ÿýÿ‰$è³÷‰EÔ…À„Z‹•ÿýÿ‹ƒè‰…À„š ‹EÌ‹ƒê‰…Ò„w ÇEÌ‹EÔ‹ƒê‰…Ò„Ž ÇEÔÇD$ÿÿÿÇD$øÿÿÿ‹ ÿýÿ‰ $èÀ÷‰Æ…À„$‹…Ôþýÿ‰D$‹ƒ{‰D$‰4$è"÷…Àˆ1Àƒ}ДÀ‰EЋƒè‰…Àu ‹F‰4$ÿP‹EÐ…À„ ‹ƒwÿ‰D$‹•ÿýÿ‰$è-ö‰EÌ…À„-‹ƒãþ‰D$‹üþýÿ‰ $è ö‰Â‰EÔ…À„‹ƒ«ý‰D$‰$èëõ‰Æ…À„¯‹EÔ‹ƒê‰…Ò„"ÇEÔÇ$èÕõ‰EÔ…À„‹… ÿýÿƒ‹EÔ‹• ÿýÿ‰P ‹EÔ‰D$‰4$è2ö‰EÈ…À„P‹ƒè‰…À„¸‹EÔ‹ƒê‰…Ò„•ÇEÔÇD$øÿÿÿÇD$‹Eȉ$èaö‰Æ…À„‹EÈ‹ƒê‰…Ò„* ÇEÈÇ$è)õ‰EÔ…À„Ó‰p ‹ƒƒ‹“‹EÔ‰P‹EÔ‰D$‹Ẻ$è€õ‰EÈ…À„Û‹EÌ‹ƒê‰…Ò„´ ÇEÌ‹EÔ‹ƒê‰…Ò„Š ÇEÔÇD$ÿÿÿÇD$þÿÿÿ‹Eȉ$è¥õ‰Æ…À„G‹EÈ‹ƒê‰…Ò„; ÇEÈ‹ÿýÿ‹ƒè‰…À„È ‰µÿýÿ‹ƒm9Eà”À¶À‰EÐ…À„3‹U‹R8‰•èþýÿ‹•ÿýÿ‹B‹@4…À„Z ‹x …ÿ„O ÇD$‰$èOô‰…ÿýÿ‹µÿýÿ…ö„F‹•ÿýÿ‰$èÈô‰Æ…À„‹ÿýÿ‹ƒè‰…Àu ‹A‰ $ÿP‰t$‹…Ðþýÿ‰$èÏó‹•ÿýÿ‹B‹@4…À„ˆ‹H …É„}ÇD$‰$èÈó‰…ÿýÿ‹…ÿýÿ…À„‹•ÿýÿ‰$èAô‰Æ…À„‹ÿýÿ‹ƒè‰…Àu ‹A‰ $ÿP‰t$‹…Ìþýÿ‰$èHó‹• ÿýÿ‰$èýó‰Â…À„ƒBɉD$‰$è~ò‰…ìþýÿ…À”À¶À‰EÐ…À…Æ‹‹Å‰ÿýÿ…0ÿýÿ‰…Øþýÿ‰Ê‰$èÀò‰EЃøŒ1 „v ‹Ìþýÿ‰L$‹…Ðþýÿ‰D$E܉D$ÇD$‹•ìþýÿ‰T$ ‹ÿýÿ‰L$‹…Üþýÿ‰D$‹•Øþýÿ‰$èsg‰…äþýÿÁè‰EÐ…À…O 1Àƒ½äþýÿ”À‰EÐ…À…ü‹M܉‹•Üþýÿ‹D‚…ÀžÀ¶À‰EÐ…À…K‹…äþýÿ…ÀŽÉÇ…àþýÿ½8ÿýÿëB‹UÜ’‹Gø‹Üþýÿ+D‘ ‰Gø‹UÜ’‹Gü+D‘ ‰Güƒ…àþýÿƒÇ‹àþýÿ9äþýÿ„u‹‰‹•Üþýÿ4‚1Àƒ~žÀ‰EÐ…À…Í‹F‰‹…èþýÿ‰EÐ…À„‹GÁè‰EÐ…À„‹F ‹W)‰U°‹W)‰U´‹EÜ€‹•Üþýÿ‹D‚‰E¸‹Gø‰E¼‹Gü‰EÀ‹vƒî‹ðþýÿ‹Q‹„µ0¿ÿÿ‰D$ÇD$ ÇD$E°‰D$‰ $ÿƒ„µ0ÿÿ‹GøÁè‰EÐ…À…ôþÿÿ‹EÜ€‹•Üþýÿ‹D‚ Gø‹EÜ€‹D‚ Güéõþÿÿ‹E‹P…0ÿÿ‰D$…0¿ÿÿ‰D$‹…ðþýÿ‰D$ ‹…Üþýÿ‰D$‰L$‹M‰ $ÿR‰EÌ…À„ ‹•ðþýÿ‹ƒè‰…À„‘‹M̉ðþýÿÇEÌéÃþÿÿ‹F ‰ÂW‰U°G‰E´éçþÿÿ‹EÜ€‹•Üþýÿ‹t‚ƒî‹ðþýÿ‹Q‹„µ0¿ÿÿ‰D$ÇD$ ‹…äþýÿ‰D$‹Øþýÿ‰L$‹…ðþýÿ‰$ÿ‹•äþýÿ”µ0ÿÿ‹•ÿýÿé ýÿÿ‹B‰$ÿPéaÿÿÿ‹E‹P…0ÿÿ‰D$…0¿ÿÿ‰D$‹…ðþýÿ‰D$ ‹…Üþýÿ‰D$‰L$‹M‰ $ÿR‰EÔ…À„¦ ‹•ðþýÿ‹ƒè‰…ÀtX‹MÔ‰ðþýÿÇEÔéIýÿÿ‹ƒ ý‹‰ƒýǃý‹‹½ÿýÿ‹ ÿýÿ‰ÿýÿÇ…ÿýÿÇ…ÿýÿé íÿÿ‹B‰$ÿPë‹ÿýÿ‹A‹@4…À„*‹@ …À„ÇD$‰ $è(ÿýÿ‹…ÿýÿ…À„‹ÿýÿ‹A‹@4…À„œ‹@ …À„‘ÇD$‰ $èåÿýÿ‹…ÿýÿ…À„k‹M‹A8‰$èÿî‰EÔ…À„×Ç$èfî‰EÌ…À„‘‹•ÿýÿ‰P ‹EÌ‹ÿýÿ‰H‹UÔ‹ẺPÇEÔ‹ẺD$‹Eà‰$è°î‰EÈ…À„2‹EÌ‹ƒê‰…Ò„ÇEÌ‹Eȉ$ècî‰EÐèÀí…À…} ‹EÈ‹ƒê‰…Ò„ÝÇEÈ‹EЉ…èþýÿé†ùÿÿÇD$ÿÿÿÇD$üÿÿÿ‹ ÿýÿ‰ $è©î‰Â‰EÌ…À„"‹…Ôþýÿ‰D$‹ƒƒ‰D$‰$èî…Àˆþ1Àƒ}ДÀ‰EЋEÌ‹ƒê‰…Ò„ÏÇEÌ‹EÐ…À„áøÿÿ‹ƒwÿ‰D$‹•ÿýÿ‰$èí‰EÔ…À„ ‹ƒãþ‰D$‹üþýÿ‰ $èëì‰Â‰EÈ…À„Ü‹ƒ«ý‰D$‰$èÌì‰Æ…À„£‹EÈ‹ƒê‰…Ò„ ÇEÈÇ$è¶ì‰EÌ…À„s‹… ÿýÿƒ‹EÌ‹• ÿýÿ‰P ‹ẺD$‰4$èí‰EÈ…À„D‹ƒè‰…À„# ‹EÌ‹ƒê‰…Ò„ ÇEÌÇD$üÿÿÿÇD$‹Eȉ$èBí‰Æ…À„÷‹EÈ‹ƒê‰…Ò„±ÇEÈÇ$è ì‰EÌ…À„ljp ‹ƒƒ‹“‹ẺP‹ẺD$‹EÔ‰$èaì‰EÈ…À„¯‹EÔ‹ƒê‰…Ò„ìÇEÔ‹EÌ‹ƒê‰…Ò„ÂÇEÌÇD$ÿÿÿÇD$þÿÿÿ‹Eȉ$è†ì‰Æ…À„;‹EÈ‹ƒê‰…Ò„ƒÇEÈ‹ÿýÿ‹ƒè‰…À…áöÿÿ‹A‰ $ÿP‰µÿýÿéÓöÿÿ‹A‰ $ÿPé?òÿÿ‹A‰ $ÿPééñÿÿÇ$è‹ë‰Æ…À„¤‰D$‹ÿýÿ‰ $èÉ뉅ÿýÿ‹ƒè‰…À…\÷ÿÿ‹F‰4$ÿPéN÷ÿÿÇ$è@ë‰Æ…À„‰D$‹ÿýÿ‰ $è~뉅ÿýÿ‹ƒè‰…À…Šöÿÿ‹F‰4$ÿPé|öÿÿ‹F‰4$ÿPéÓñÿÿ‹ƒ ý‹‰ƒýǃý]‹½ÿýÿÇ…ÿýÿÇ…ÿýÿ‰µÿýÿ‰µÿýÿéèÿÿ‹ƒ ý‹‰ƒýǃý\‹½ÿýÿÇ… ÿýÿÇ…ÿýÿÇ…ÿýÿ‰µÿýÿ‰µüþýÿ‰µÿýÿéÌçÿÿ‹B‰$ÿPéâñÿÿ‹ƒ ý‹‰ƒýǃý[Ç… ÿýÿÇ…ÿýÿÇ…ÿýÿ‰µüþýÿ‰÷‰µÿýÿ‰µÿýÿéoçÿÿ‹EÌ‹P‰$ÿRéxòÿÿ‹B‰$ÿPéXòÿÿ‹EÔ‹P‰$ÿRéÂñÿÿ‹EÔ‹P‰$ÿRéaòÿÿ‹ìþýÿ‰ $èóè‹… ÿýÿ‰…ÿýÿéñÿÿÇ$è”鉯…À„è ‰D$‹…ÿýÿ‰$èÒ鉅ÿýÿ‹ƒè‰…À…Húÿÿ‹F‰4$ÿPé:úÿÿÇ$èI鉯…À„ ‰D$‹…ÿýÿ‰$è‡é‰…ÿýÿ‹ƒè‰…À…ºùÿÿ‹F‰4$ÿPé¬ùÿÿ‹ƒ ý‹‰ƒýǃýr‹½ÿýÿ‹• ÿýÿ‰•ÿýÿÇ…ÿýÿÇ…ÿýÿé6æÿÿ‹EÈ‹P‰$ÿRé´óÿÿ‹EÔ‹P‰$ÿRéeóÿÿ‹EÌ‹P‰$ÿRé;óÿÿ‹EÈ‹P‰$ÿRéÅòÿÿ‹M‹A‹•Üþýÿ‰T$‹ÿýÿ‰L$‹U‰$ÿ‹M‹Q…0ÿÿ‰D$‰ $ÿRÇ$è½ç‰…ÿýÿ…À„˜ ‹ƒ‹ƒ‹ƒ‹‹•ÿýÿ‰B ‰T$‹ƒY‹‰$èè‰Æ…À„) ‹ÿýÿ‹ƒè‰…À„ 1É1Ò‰ðèu˜ûÿ‹ƒè‰…À„Þ ‹ƒ ý‹‰ƒýǃýw‹½ÿýÿ‹… ÿýÿ‰…ÿýÿÇ…ÿýÿÇ…ÿýÿéøäÿÿ‹EÌ‹P‰$ÿRéïøÿÿ‹EÈ‹P‰$ÿRéùÿÿ‹EÔ‹P‰$ÿRéZñÿÿ‹F‰4$ÿPé:ñÿÿ‹EÔ‹P‰$ÿRéÍðÿÿ‰|$‹ƒ‰‹‰$èÉæéÓîÿÿ‹•ÿýÿ‹B‰$ÿP‰µÿýÿé$òÿÿ‹EÌ‹P‰$ÿRé ùÿÿ‹ƒ ý‹‰ƒýǃýb1ö‹UÔ…Òt‹ƒè‰…Àu ‹EÔ‹P‰$ÿRÇEÔ‹UÌ…Òt‹ƒè‰…Àu ‹EÌ‹P‰$ÿRÇEÌ‹UÈ…Òt‹ƒè‰…Àu ‹EÈ‹P‰$ÿRÇEÈ…öt‹ƒè‰…Àu ‹F‰4$ÿPƒs è€žûÿMÈUÌEÔèÜ›ûÿ…ÀˆZ‹… ÿýÿ‰D$‹ƒ‡‰$èK扅ÿýÿ…À„ûÇ$è}剅ÿýÿ…À„²‹•ÿýÿ‰P ‰D$‹ƒ¹‹‰$èÞ副…ÀtV‹ÿýÿ‹ƒè‰…Àu ‹A‰ $ÿP1É1Ò‰ðèC–ûÿ‹ƒè‰…Àu ‹F‰4$ÿP‹ƒ ý‹‰ƒýǃýeéÄýÿÿ‹ƒ ý‹‰ƒýǃýe‹½ÿýÿ‹ ÿýÿ‰ÿýÿÇ…ÿýÿé®âÿÿ‹ƒ ý‹‰ƒýǃýe‹½ÿýÿ‹• ÿýÿ‰•ÿýÿéâÿÿ‹ƒ ý‹‰ƒýǃýe‹½ÿýÿ‹… ÿýÿ‰…ÿýÿÇ…ÿýÿéFâÿÿ‹ƒ ý‹‰ƒýǃýdéñôÿÿ‹ƒ ý‹‰ƒýǃýcéÄýÿÿ‹ƒ ý‹‰ƒýǃýc1öé¥ýÿÿ‹ƒ ý‹‰ƒýǃýmé­üÿÿ‹ƒ ý‹‰ƒýǃý|éRûÿÿ‹ƒ ý‹‰ƒýǃý^‹½ÿýÿ‹• ÿýÿ‰•ÿýÿÇ…ÿýÿézáÿÿ‹ƒ ý‹‰ƒýǃý`éýÿÿ‹EÈ‹P‰$ÿRé>÷ÿÿ‹EÌ‹P‰$ÿRéïöÿÿ‹F‰4$ÿPéÏöÿÿ‹EÈ‹P‰$ÿRéböÿÿ‹ƒ ý‹‰ƒýǃý^éÜûÿÿ‹ƒ ý‹‰ƒýǃýa1öé˜üÿÿè½â…ÀtT‹ƒ ý‹‰ƒýǃý]‹½ÿýÿÇ…ÿýÿÇ…ÿýÿé àÿÿ‹ƒ ý‹‰ƒýǃýké`ûÿÿ‹• ÿýÿ‹ƒè‰…Àu ‹B‰$ÿP‹…ÿýÿ…À~<‹½ÜþýÿÇ…$ÿýÿ1ÀƒŸÀ‰EÐ…À…Žƒ…$ÿýÿƒÇ‹…$ÿýÿ9…ÿýÿuÔ‹U‹B‹Üþýÿ‰L$‹•ÿýÿ‰T$‹M‰ $ÿ‹E‹P…0ÿÿ‰D$‹M‰ $ÿR‹ƒ¯ý‰D$‹E‰$èÉቅÿýÿ…À„}ÇD$‰$èPâ‰EÔ…À„b‹•ÿýÿ‹ƒè‰…Àu ‹B‰$ÿP‹EÔ‹ƒê‰…Òu ‹EÔ‹P‰$ÿRÇEÔ‹ƒmƒ‹½ÿýÿ‰Æéàÿÿ‹ƒ ý‹‰ƒýǃýjéúÿÿ‹ƒ ý‹‰ƒýǃýaé×úÿÿ‹ƒ ý‹‰ƒýǃý^‹½ÿýÿ‹… ÿýÿ‰…ÿýÿÇ…ÿýÿéæÞÿÿ‹ƒ ý‹‰ƒýǃý^‹½ÿýÿ‹ ÿýÿ‰ÿýÿÇ…ÿýÿé­Þÿÿ‹ƒ7ÿ‰D$‹M‹A‰$è‹à‰EÈ…À„‹‰$è*ቅÿýÿ…À„²‹G‰$èøà‰…ÿýÿ…À„l‹G ‰$èßà‰EÔ…À„V‹G‰$èÉà‰EÌ…À„Ç$è0à‰… ÿýÿ…À„Ö‹•ÿýÿ‰P ‹ÿýÿ‰H‹EÔ‹• ÿýÿ‰B‹ẺBÇEÔÇẺT$‹Eȉ$èmà‰Æ…ÀtX‹EÈ‹ƒê‰…Òu ‹EÈ‹P‰$ÿRÇEÈ‹ ÿýÿ‹ƒè‰…Àu ‹A‰ $ÿP‹ƒè‰…À…Gýÿÿ‹F‰4$ÿPé9ýÿÿ‹ƒ ý‹‰ƒýǃý³‹½ÿýÿÇ…ÿýÿÇ…ÿýÿé=Ýÿÿ‹ƒ ý‹‰ƒýǃý³‹½ÿýÿéÝÿÿ‹ƒ ý‹‰ƒýǃý´‹½ÿýÿÇ… ÿýÿéíÜÿÿ‹ƒ ý‹‰ƒýǃý³‹½ÿýÿÇ… ÿýÿéÀÜÿÿ‹ƒ ý‹‰ƒýǃý³‹½ÿýÿÇ… ÿýÿÇ…ÿýÿé‰Üÿÿ‹ƒ ý‹‰ƒýǃý³‹½ÿýÿÇ… ÿýÿÇ…ÿýÿÇ…ÿýÿéHÜÿÿ‹ƒ ý‹‰ƒýǃý·‹½ÿýÿÇ… ÿýÿÇ…ÿýÿéÜÿÿ‹ƒ ý‹‰ƒýǃýj‹½ÿýÿ‹• ÿýÿ‰•ÿýÿÇ…ÿýÿéØÛÿÿ‹ƒ ý‹‰ƒýǃýjéƒîÿÿ‹ƒ ý‹‰ƒýǃýj‹½ÿýÿ‹• ÿýÿ‰•ÿýÿéŒÛÿÿ‹ƒ ý‹‰ƒýǃýj‹½ÿýÿ‹… ÿýÿ‰…ÿýÿé]Ûÿÿ‹F‰4$ÿPéöÿÿ‹A‰ $ÿPéìõÿÿ‹ƒ ý‹‰ƒýǃýw‹½ÿýÿ‹… ÿýÿ‰…ÿýÿÇ…ÿýÿéÛÿÿ‹ƒ ý‹‰ƒýǃýw‹½ÿýÿ‹ ÿýÿ‰ÿýÿÇ…ÿýÿéÏÚÿÿ‹EÈ‹P‰$ÿRélñÿÿ‹ƒ ý‹‰ƒýǃýk‹½ÿýÿ‹• ÿýÿ‰•ÿýÿÇ…ÿýÿé…Úÿÿ‹ƒ ý‹‰ƒýǃýl‹½ÿýÿ‹ ÿýÿ‰ÿýÿÇ…ÿýÿéLÚÿÿ‹ƒ ý‹‰ƒýǃýlé õÿÿ‹ƒ ý‹‰ƒýǃýjé±óÿÿ‹M‹A‹•Üþýÿ‰T$‹ÿýÿ‰L$‹U‰$ÿ‹M‹Q…0ÿÿ‰D$‰ $ÿR‹… ÿýÿ‰D$‹ƒc‰$è…܉EÔ…À„’Ç$èºÛ‰Â‰EÌ…À„³‹EÔ‰B ÇEÔ‹ẺD$‹ƒ¹‹‰$è܉EÈ…Àtk‹EÌ‹ƒê‰…Òu ‹EÌ‹P‰$ÿRÇEÌ‹EÈ1É1ÒèqŒûÿ‹EÈ‹ƒê‰…Òu ‹EÈ‹P‰$ÿRÇEÈ‹ƒ ý‹‰ƒýǃýqé§òÿÿ‹ƒ ý‹‰ƒýǃýqéÈóÿÿ‹ƒ ý‹‰ƒýǃýqé–ëÿÿ‹EÌ‹P‰$ÿRé-ïÿÿ‹EÔ‹P‰$ÿRéïÿÿU‰åWVSƒìlè"zÇEäÇEàÇEÜÇEØ‹Eƒ‹U ƒ‹ƒÜƒ‹³òÖ‰t$‹ƒŽÔ‰$èKډDžÀ„( ‹ƒÕ‰D$‰<$è/Ú‰Eä…À„©‹ƒè‰…À„‹Eä‰D$‹U ‰$èIډƃøÿ„™‹E䋃ꉅ҄ÏÇEä…ö…‹ƒ׉D$‹E ‰$èÂÙ‰EÔ…À„u ‹“Ü‹ƒè‰…À„Ì‹E‹@ …À„‹³>Ö‰t$‹ƒŽÔ‰$è|ىDžÀ„ç ‹ƒ¾Ô‰D$‰<$è`Ù‰EÜ…À„: ‹ƒè‰…À„ ‹U‹r$‹F‹@4…À„w‹@ …À„lÇD$‰4$èvÙ‰E¼‹}¼…ÿ„¤‹ƒ׉D$‹E ‰$èô؉EØ…À„ ‹ƒ׉D$‹U ‰$èÔØ‰Eà…À„dÇ$ÿÿÿÿèXÙ‰Eä…À„MÇ$èAىDžÀ„7Ç$è+Ù‰EÀ…À„Ç$è’Ø‰EÄ…À„Z‹U¼‰P ‹EØ‹UĉB‹Eà‰B‹Eä‰B‰z‹EÀ‰B ‹»Üƒ‰z$ÇEØÇEàÇEä‰T$‹E܉$è¿Ø‰Æ…À„Ý‹EÜ‹ƒê‰…Ò„©ÇEÜ‹UÄ‹ƒè‰…À„¡‹EÔ‰E°‰}¨‰ú‰}¤‰}´‰}¬‰}¸éb‹U ‰T$‹U‹B‰$è©Ø‰Ç…À„·‰$è“׉Eä…À„ ‹ƒè‰…À„Ï‹Eä‰$è,؉EÈ…À„\‹³Ü‹ƒè‰…À„²‹Eä‰$è؉EÌ…À„ ‹ƒè‰…À„›‹Eä‰$èÜ׉EÐ…À„@ ‹ƒè‰…À„΋Eä‰$è·×‰Â…À„û ‹ƒè‰…À„¸ƒr‰D$‹ƒìÛ‹‰$è”Ö‹ƒžÔ‹‰ƒšÔǃ–Ô†‹EȉE¤‹ỦU¨‹EЉE¬ÇE¼ÇEÀÇEÄ‹“܉U´‰U°‰U¸ëk‹G‰<$ÿP‹Eä‰D$‹U ‰$è°Ö‰Æƒøÿ…güÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô…ÇE¼ÇEÀÇEÄ‹ƒÜ‰E¨‰E¤‰E°‰E¬‰E¸‰E´‹Uä…Òt‹ƒè‰…À„‹u¼…öt‹U¼‹ƒè‰…À„…‹Uà…Òt‹ƒè‰…À„}‹UÜ…Òt‹ƒè‰…À„x‹UØ…Òt‹ƒè‰…À„s‹MÀ…Ét‹UÀ‹ƒè‰…À„k‹UÄ…Òt‹UÄ‹ƒè‰…À„òƒFxè@Žûÿ1ö‹U¤‹ƒè‰…À„Å‹U¨‹ƒè‰…À„¥‹U¬‹ƒè‰…À„…‹U°‹ƒè‰…Àtl‹U´‹ƒè‰…ÀtS‹U¸‹ƒè‰…Àt:‹U‹ƒè‰…Àt!‹U ‹ƒè‰…Àu ‹B‰$ÿP‰ðƒÄl[^_]ËB‰$ÿPëÔ‹B‰$ÿP뻋B‰$ÿP뢋B‰$ÿP뉋B‰$ÿPémÿÿÿ‹B‰$ÿPéMÿÿÿ‹B‰$ÿPé-ÿÿÿ‹B‰$ÿPéÿÿÿ‹Eä‹P‰$ÿRébþÿÿ‹B‰$ÿPémþÿÿ‹Eà‹P‰$ÿRérþÿÿ‹EÜ‹P‰$ÿRéwþÿÿ‹EØ‹P‰$ÿRé|þÿÿ‹B‰$ÿPé‡þÿÿ‹Eä‹P‰$ÿRÇEä…ö„%úÿÿé.üÿÿ‹»>Ö‰|$‹ƒŽÔ‰$èßӉƅÀ„ˆ‰uØ…ö„‹ƒ׉D$‰4$è¸Ó‰Eà…À„å‹EØ‹ƒê‰…Ò„ÇEØÇ$è¡Ó‰Eä…À„µ‹U‹B$ƒ‹E‹P$‹Eä‰P ‹U ƒ‹Eä‰P‹Eä‰D$‹Eà‰$èïӉƅÀ„x‹Eà‹ƒê‰…Ò„ ÇEà‹E䋃ꉅ҄ÞÇE䋻܋ƒè‰…À„´‰4$èáÓƒøÿ„ÓƒèŽ Ç$èìÒ‰EÀ…À„Ћƒæ×ƒ‹ƒæ×‹UÀ‰B ‰T$‹ƒìÛ‹‰$èDÓ‰EÜ…À„œ‹UÀ‹ƒè‰…À„` ‹EÜ1É1Ò諃ûÿ‹EÜ‹ƒê‰…Ò„1 ÇEÜ‹ƒžÔ‹‰ƒšÔǃ–Ô—‹EÔ‰E°‰u´ÇE¼ÇEÀÇEĉ}¨‰}¤‰}¸‰}¬éüûÿÿèýÑ…Àuƒr‰D$‹ƒìÛ‹‰$è²Ñ‹ƒžÔ‹‰ƒšÔǃ–Ô†éûÿÿ‹B‰$ÿPé&øÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô•‹EÔ‰E°ÇE¼ÇEÀÇEÄ‹“܉U¨‰U¤‰U´‰U¬‰U¸éaûÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô…ÇE¼ÇEÀÇEÄ‹ƒÜ‰E¨‰E¤‰E°‰E¬‰E¸‰E´‹ƒè‰…À… ûÿÿ‹G‰<$ÿPéÿúÿÿ‰t$‹ƒÜ‹‰$èFÑ‹ƒžÔ‹‰ƒšÔǃ–Ô…ÇE¼ÇEÀÇEÄ‹“܉U¨‰U¤‰U°‰U¬‰U¸‰U´é¡úÿÿÇ$èJщDžÀt=‰D$‰4$è’щE¼‹ƒè‰…À…w÷ÿÿ‹G‰<$ÿPéi÷ÿÿ‹EØ‹P‰$ÿRéÑüÿÿÇE¼‹ƒžÔ‹‰ƒšÔǃ–Ô“‹EÔ‰E°éŸþÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô‹UØ…Òt‹ƒè‰…À„«ÇEØ‹Uà…Òt‹ƒè‰…À„ŸÇEà‹Uä…Òt‹ƒè‰…À„“ÇEä‹UÜ…Òt‹ƒè‰…À„CÇEÜ‹»ºÔ‰|$‹ƒ’Ô‰$èžÏ‰Æ…À„`‰$è›Ï‰Ç‹ƒè‰…À„ó…ÿ„,ùÿÿƒºqè<ˆûÿMäUàEØè˜…ûÿ…Àˆ2Ç$è_ωEÜ…Àti‹ƒâ׃‹“â׋E܉P ‹E܉D$‹ƒüÛ‹‰$è¸Ï‰Æ…À„‡‹EÜ‹ƒê‰…Ò„7ÇEÜ1É1Ò‰ðè€ûÿ‹ƒè‰…À„'‹ƒžÔ‹‰ƒšÔǃ–Ô‘érøÿÿ‹G‰<$ÿPé#÷ÿÿ‹F‰4$ÿPé@÷ÿÿ‹F‰4$ÿPéW÷ÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô†ÇE¼ÇEÀÇEÄ‹“܉U¨‰U¤‰U°‰U¬‰U¸‰U´éýÿÿ‹F‰4$ÿPé$÷ÿÿ‹B‰$ÿPé:÷ÿÿ‹G‰<$ÿPéÕôÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô“‹UÔ‰U°ÇE¼ÇEÀÇEÄ‹ƒÜ‰E¨‰E¤‰E´‰E¬‰E¸é˜üÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô“‹UÔ‰U°ÇEÀÇEÄ‹ƒÜ‰E¨‰E¤‰E´‰E¬‰E¸én÷ÿÿ‹F‰4$ÿPéÿýÿÿ‹EÜ‹P‰$ÿRé¬ýÿÿ‹EØ‹P‰$ÿRéDýÿÿ‹Eà‹P‰$ÿRéPýÿÿ‹Eä‹P‰$ÿRé\ýÿÿèÍ…À„ˆ‹ƒžÔ‹‰ƒšÔǃ–Ô†‹UȉU¤ÇE¼ÇEÀÇEĉu¬‰u¨‰u´‰u°‰u¸éÈöÿÿèÉÌ…À„p‹ƒžÔ‹‰ƒšÔǃ–Ô†‹UȉU¤‹ẺE¨ÇE¼ÇEÀÇEĉu°‰u¬‰u¸‰u´éqöÿÿ‰t$‹ƒÜ‹‰$è¸Ì‹ƒžÔ‹‰ƒšÔǃ–Ô“‹UÔ‰U°ÇE¼éþÿÿ‰|$‹ƒÜ‹‰$èzÌé_øÿÿ‰|$‹ƒÜ‹‰$èaÌ‹ƒžÔ‹‰ƒšÔǃ–ÔéûÿÿèêË…À…!õÿÿ‹E䋃ꉅ҄ÿÇEä‹E‹@ …À„‰‹³>Ö‰t$‹ƒŽÔ‰$è·Ë‰Ç…À„3 ‹ƒ¾Ô‰D$‰<$è›Ë‰Eä…À„q ‹ƒè‰…À„á ‹ƒ׉D$‹U ‰$èlˉDžÀ„¥ ‹ƒ׉D$‹E ‰$èMˉE¼…À„.Ç$èÑˉEà…À„Ç$è8ˉEÜ…À„‹Ũ‹E܉P ‹E܉x‹EÜ‹U¼‰P‹Eȃ‹EÜ‹UȉP‹EЃ‹EÜ‹UЉP‹Uà‹E܉P ‹E ƒ‹EÜ‹U ‰P$ÇEà‹E܉D$‹Eä‰$èOˉƅÀ„ã‹E䋃ꉅ҄ ÇEä‹EÜ‹ƒê‰…Ò„ ÇEÜ‹EȉE¤‹ỦU¨‹EЉE¬‹“܉U´‰U°‰U¸‹U¤éÞôÿÿ‹G‰<$ÿPé>÷ÿÿ‹Eä‹P‰$ÿRé÷ÿÿ‹Eà‹P‰$ÿRéçöÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô–é³÷ÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô—‹EÔ‰E°‰u´ÇE¼ÇEÄé÷ÿÿ‰4$è­É‰EÄ…À„½‰$èXʉE¼…À„ʉ$è‡É‰EØ…À„ý‹U¼‹ƒè‰…À„†‹E؉$èʉDžÀ„{‰}à…ÿ„ÿ‹“Ü‹ƒè‰…À„Ü‹Eà‰E¨ÇEà‹E؉$èÛɉDžÀ„d‰}ä…ÿ„µ‹“Ü‹ƒè‰…Àu ‹B‰$ÿP‹Uä‰U¸ÇEä‹E؉$è”ɉ…À„I‹ƒè‰…À„'ƒr‰D$‹ƒìÛ‹‰$èqÈ‹ƒžÔ‹‰ƒšÔǃ–Ô˜‹EÔ‰E°‰u´ÇE¼ÇEÀ‹“܉U¬‰U¤éXòÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô“‹EÔ‰E°ÇEÄ‹“܉U¨‰U¤‰U´‰U¬‰U¸éýöÿÿ‹EÜ‹P‰$ÿRé¾õÿÿ‹B‰$ÿPé’õÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô“‹EÔ‰E°ë§‹ƒžÔ‹‰ƒšÔǃ–Ô˜‹EÔ‰E°‰u´ÇE¼ÇEÀé™õÿÿ‹EÜ‹P‰$ÿR鏸ÿÿ‹F‰4$ÿPéËøÿÿƒr‰D$‹ƒìÛ‹‰$èFÇéYúÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô‘éxöÿÿƒr‰D$‹ƒìÛ‹‰$è Çéqúÿÿ‹ƒ׉D$‹E ‰$è1ljƅÀ„_‹ƒ׉D$‹U ‰$èljEà…À„pÇ$èljEä…À„Y‹Ẽ‹Eä‹ỦP ‹Eä‰p‹Uà‹Eä‰P‹Eȃ‹Eä‹UȉP‹EЃ‹Eä‹UЉP‹E ƒ‹Eä‹U ‰P ÇEà‹Eä‰D$‹ƒ Ô‰$è.ljEÜ…À„¶‹E䋃ꉅÒu ‹Eä‹P‰$ÿRÇEä‹uÜéàûÿÿ‹EÜ‹P‰$ÿRéFîÿÿ‹UÄ‹B‰$ÿPéNîÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô“‹UÔ‰U°ÇE¼ÇEÀ‰}¨‰}¤‰}´‰}¬‰}¸éÙïÿÿ‹B‰$ÿPélüÿÿ‹Eä‹P‰$ÿRéðùÿÿè»Å…À„Ö‹ƒžÔ‹‰ƒšÔǃ–Ô˜‹UÔ‰U°‰u´ÇEÀ‰}¨‰}¤‰}¸‰}¬étïÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô˜‹EÔ‰E°‰u´éœýÿÿ‹B‰$ÿPéüÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô˜‹EÔ‰E°‰u´ÇE¼ÇEÀ‹“܉U¨‰U¤‰U¸‰U¬éúîÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ôˆ‹UȉU¤‹ẺE¨‹UЉU¬ÇEÀÇEÄ‹ƒÜ‰E´‰E°‰E¸é’óÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô‹‹Uà…Òt‹ƒè‰…Àu ‹Eà‹P‰$ÿRÇEà‹Uä…Òt‹ƒè‰…Àu ‹Eä‹P‰$ÿRÇEä‹UÜ…Òt‹ƒè‰…Àu ‹EÜ‹P‰$ÿRÇEÜ‹³>Ö‰t$‹ƒŽÔ‰$è)ĉDžÀ„‹ƒÒÔ‰D$‰<$è ĉƅÀ„¿‹ƒè‰…Àu ‹G‰<$ÿP‰4$èöÉNjƒè‰…Àu ‹F‰4$ÿP…ÿ„ íÿÿƒºqè’|ûÿMÜUäEàèîyûÿ…ÀˆG‹³>Ö‰t$‹ƒŽÔ‰$èÉDžÀ„¥‹ƒÎÔ‰D$‰<$ètÉE¼…À„Y‹ƒè‰…À„<Ç$ègÉDžÀ„÷‹E ƒ‰G ‰|$‹U¼‰$èÑÉEØ…À„‹U¼‹ƒè‰…Àu ‹B‰$ÿP‹ƒè‰…Àu ‹G‰<$ÿP‹uØÇEØ‹E䋃ꉅÒu ‹Eä‹P‰$ÿRÇEä‹Eà‹ƒê‰…Òu ‹Eà‹P‰$ÿRÇEàéøÿÿ‹B‰$ÿPéËùÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô‹‹ƒè‰…À…Àýÿÿ‹F‰4$ÿPé²ýÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô˜‹UÔ‰U°‰u´ÇE¼ÇEÀ‹ƒÜ‰E¬‰E¤‰E¸éìÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ôˆ‹UȉU¤‹ẺE¨‹UЉU¬ÇE¼éÿüÿÿèÐÁ…À…xøÿÿƒr‰D$‹ƒìÛ‹‰$èÁéYøÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ôˆéãêÿÿ‹G‰<$ÿPéöÿÿ‰t$‹ƒÜ‹‰$è¿Á‹ƒžÔ‹‰ƒšÔǃ–ÔŒé¤êÿÿ‹ƒžÔ‹‰ƒšÔǃ–ÔŒé‡êÿÿ‹ƒžÔ‹‰ƒšÔǃ–ÔŒ‹EȉE¤‹ỦU¨‹EЉE¬ÇE¼ÇEÀÇEÄ‹“܉U´‰U°‰U¸é»ïÿÿ‹UÄ‹ƒè‰…À„bƒ‹EÔ‰E°‰u´‰}¨‰ú‰}¤‰}¸‰}¬‰þéWëÿÿè¥À…À…÷ÿÿƒr‰D$‹ƒìÛ‹‰$èVÀép÷ÿÿèyÀ…À…Ó÷ÿÿ‹EØ‹ƒê‰…Òu ‹EØ‹P‰$ÿRÇEØ‹ƒ׉D$‹E¸‰$èOÀ‰Ç…À„k‹ƒ׉D$‹U¸‰$è0À‰EÀ…À„Ç$è2À‰EÜ…À„û‹E¨ƒ‹EÜ‹U¨‰P ‹E܉x‹EÜ‹UÀ‰P‹E܉D$‹ƒ Ô‰$è€À‰Ç…À„7‹EÜ‹ƒê‰…Òu ‹EÜ‹P‰$ÿRÇEÜ‹UÄ‹ƒè‰…Àu ‹UÄ‹B‰$ÿP‹EÔ‰E°‰u´‰þ‹“܉U¬‰U¤éêÿÿ‰t$‹ƒÜ‹‰$è§¿‹ƒžÔ‹‰ƒšÔǃ–Ôˆ‹UȉU¤‹ẺE¨‹UЉU¬ÇE¼ÇEÀÇEÄ‹ƒÜ‰E´‰E°‰E¸éùèÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô™‹EÔ‰E°‰u´ÇE¼‹“܉U¬‰U¤é¤íÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô™‹UÔ‰U°‰u´ÇE¼ÇEÀ‹ƒÜ‰E¬‰E¤é€èÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô™éãõÿÿ‹B‰$ÿPéýÿÿ‹Eä‹P‰$ÿRéÐóÿÿ‹EÜ‹P‰$ÿRéØóÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô‹EȉE¤‹ỦU¨‹EЉE¬ézçÿÿ‹G‰<$ÿPé¶úÿÿ‹ƒžÔ‹‰ƒšÔǃ–Ô‹EȉE¤‹ỦU¨‹EЉE¬éÎüÿÿ‰t$‹ƒÜ‹‰$辋ƒžÔ‹‰ƒšÔǃ–ÔéóæÿÿU‰åWVSƒì|è0]‹EÇD$‰$ÿ˜‰E´…À„.‰Â‹ƒ¸·‰B‹ƒ¿‰E°‰B,ƒ‰B0ƒ‹ƒ»‰EÜ‹ƒ”»‰EØ‹ƒ˜»‰EÔ‹ƒœ»‰EÐEЉD$$EÔ‰D$ E؉D$E܉D$Eà‰D$Eä‰D$ƒôª‰D$ ƒ€[‰D$‹U‰T$‹E ‰$èS½…À„€‹U´ƒ‹E܃‹E؃‹EЃ‹E°ƒ‹»·‹uÜ…ÿ„e;u°t‹F9Çt‰|$‰$èѽ…À„u‹»$·‹uØ…ÿ„S;³¿t‹F9Çt‰|$‰$è½…À„¶è¾ûÿ…À„ƒ‹U´‰B‹E´‹P‹E؉D$‹E܉D$ ‹Eà‰D$‹Eä‰D$‹E´‰$ÿƒøþ„Û‹EЋ³¿9ðt‰$èù¼ƒøÿ„;EÔß‹EÔ‰$è¬ûÿ…À„Æ‹U´‰B‹EÔ‰B(‹EЋ³¿9ð„Ÿ‰$è°»‰E¼…À„¸ÇE¸ÇEÀéýÇD$‰$èð»‰Ç…ÿ„ ‰<$載Æèd»…À…õ‹ƒè‰…À„¸‹U´‹B‹UÀ‰4‹UÄ‹B‹@4…À„}‹H …É„rÇD$‰$舻‰Ç…ÿ„I‰<$èž»‰Æèüº…À…2‹ƒè‰…À„^‹U´‹B‹UÀ‰t‹UÄ‹B‹@4…À„X‹@ …À„MÇD$‰$軉Džÿ„W‰<$è5»‰Æè“º…À…@‹ƒè‰…À„‹U´‹B‹UÀ‰t‹UÄ‹B‹@4…À„3‹@ …À„(ÇD$‰$趺‰Ç…ÿ„ ‰<$è̺‰Æè*º…À…ó‹ƒè‰…À„¨‹U´‹B‹UÀ‰t ‹UÄ‹B‹@4…À„‹@ …À„ÇD$‰$èMº‰Ç…ÿ„À‰<$ècº‰ÆèÁ¹…À…©‹ƒè‰…À„M‹U´‹B‹UÀ‰tƒE¸ƒÂ‰UÀ‹uÄ‹E¼‰$èHº‰EÄ…À„‡‹ƒè‰…À„È‹UÄ‹B‹@4…Àt ‹p …ö…ÆýÿÿÇ$èö¹‰Æ…À„Ô‰D$‹Eĉ$è7º‰Ç‹ƒè‰…À…¢ýÿÿ‹F‰4$ÿPé”ýÿÿ‹F‹@ ‰D$‹G ‰D$ ƒÜE‰D$ƒøE‰D$‹ƒJ¿‹‰$èи‹ƒ¬·‹‰ƒ¨·Çƒ¤·§‹“¿‰Uăˆ[è–qûÿ¾ÿÿÿÿ‹UÄ‹ƒè‰…À„É‹U´‹ƒè‰…À„©‹EÜ‹ƒê‰…Ò„†‹EØ‹ƒê‰…Òtj‹EЋƒê‰…ÒtN…öy‹U´‹ƒè‰…À„yÇE´‹E´ƒÄ|[^_]˃¬·‹‰ƒ¨·Çƒ¤·¬‹“¿‰UÄéPÿÿÿ‹EЋP‰$ÿR뤋EØ‹P‰$ÿR눋EÜ‹P‰$ÿRéiÿÿÿ‹B‰$ÿPéIÿÿÿ‹B‰$ÿPé)ÿÿÿ‹ƒ¬·‹‰ƒ¨·Çƒ¤·«‹ƒ¿‰EÄéáþÿÿ‹F‹@ ‰D$‹G ‰D$ ƒ O‰D$ƒøE‰D$‹ƒJ¿‹‰$è[·‹ƒ¬·‹‰ƒ¨·Çƒ¤·¨‹“¿‰UÄé†þÿÿƒäE‰D$‹ƒ>¿‹‰$è·éFþÿÿƒäE‰D$‹ƒ>¿‹‰$èü¶ëŸ‹EЉ$èý·ƒøÿ„ ‰EÔéûÿÿ‹ƒ¬·‹‰ƒ¨·Çƒ¤·³‰uÄéþÿÿ‹B‰$ÿPÇE´éyþÿÿÇ$èV·‰Æ…À„Ù‰D$‹Eĉ$è—·‰Ç‹ƒè‰…À…jûÿÿ‹F‰4$ÿPé\ûÿÿÇ$跉ƅÀ„ ‰D$‹Eĉ$èS·‰Ç‹ƒè‰…À…ûÿÿ‹F‰4$ÿPéûÿÿÇ$èζ‰Æ…À„ä‰D$‹Eĉ$跉Njƒè‰…À…´ûÿÿ‹F‰4$ÿPé¦ûÿÿÇ$芶‰Æ…À„¿‰D$‹Eĉ$è˶‰Ç‹ƒè‰…À…Ùûÿÿ‹F‰4$ÿPéËûÿÿ‹F‰4$ÿPé*üÿÿ‹G‰<$ÿPé:úÿÿ‹G‰<$ÿPé”úÿÿ‹G‰<$ÿPéïúÿÿ‹G‰<$ÿPéJûÿÿ‹G‰<$ÿPé¥ûÿÿ‹ƒ¬·‹‰ƒ¨·Çƒ¤·­‰uÄévüÿÿ‹U¼‹ƒè‰…À„Y‹U¸‹E´‰P‰uÄ1öéaüÿÿ‹ƒ¬·‹‰ƒ¨·Çƒ¤·¯‹ƒ¿‰EÄé+üÿÿ‹ƒ¬·‹‰ƒ¨·Çƒ¤·®‰uÄé üÿÿ1ÿ‹ƒ¬·‹‰ƒ¨·Çƒ¤·µ‹U¼‹ƒè‰…Àt%…ÿ„Ûûÿÿ‹ƒè‰…À…Ìûÿÿ‹G‰<$ÿPé¾ûÿÿ‹U¼‹B‰$ÿPëÍ1ÿ‹ƒ¬·‹‰ƒ¨·Çƒ¤·´ë£1ÿ‹ƒ¬·‹‰ƒ¨·Çƒ¤·¶ë‡1ÿ‹ƒ¬·‹‰ƒ¨·Çƒ¤··éhÿÿÿ1ÿ‹ƒ¬·‹‰ƒ¨·Çƒ¤·¸éIÿÿÿèî³…À„·þÿÿ‹ƒ¬·‹‰ƒ¨·Çƒ¤·³‰uÄ1ÿéÿÿÿ‹B‰$ÿPé™þÿÿU‰åWVSìœèGSÇE°ÇEàÇEÜÇEÈÇEÄÇEÀÇE¼ÇE¸ÇE´‹ƒ7²‰EØ‹ƒ;²‰EÔ‹ƒ?²‰EÐEЉD$$EÔ‰D$ E؉D$E܉D$Eà‰D$E°‰D$ƒ'¡‰D$ ƒ×Q‰D$‹E‰D$‹E ‰$ès³…À„²‹Eƒ‹E°ƒ‹Eàƒ‹E܃‹E؃‹EÔƒ‹EЃ‹ƒ%µƒ‹»7­‹u°…ÿ„ÿ‹F9Çt‰|$‰$èá³…À„ ‹u°ƒ‹U‹B<‹ƒê‰…Ò„ñ‹E°‹U‰B<‹Eàƒ‹B8‹ƒê‰…Ò„¼‹Eà‹U‰B8‹EÔ‰$èß²‰EÌè<²…À„‹ƒÃ­‹‰ƒ¿­Çƒ»­ÇEœÇE ÇE¤‹³%µ‰u‰u˜‰u”‹UÈ…Òt‹ƒè‰…À„¶‹UÄ…Òt‹ƒè‰…À„‹UÀ…Òt‹ƒè‰…À„ø‹U¼…Òt‹ƒè‰…À„Ñ‹U¸…Òt‹ƒè‰…À„ª‹U´…Òt‹ƒè‰…À„ƒ‹Eœ…Àt‹Uœ‹ƒè‰…À„\‹E …Àt‹U ‹ƒè‰…À„5‹}¤…ÿt‹U¤‹ƒè‰…À„ƒßQèjûÿ¿ÿÿÿÿ‹U‹ƒè‰…À„Í‹ƒè‰…À„É‹U”‹ƒè‰…À„Ò‹U˜‹ƒè‰…À„Û‹U‹ƒè‰…À„ä‹E°‹ƒê‰…Ò„í‹Eà‹ƒê‰…Ò„ù‹EÜ‹ƒê‰…Ò„‹EØ‹ƒê‰…Ò„‹EÔ‹ƒê‰…Ò„‹EЋƒê‰…Òu ‹EЋP‰$ÿR‰øÄœ[^_]ÿÿÿÿÿ‰øÄœ[^_]ËF‰4$ÿP‹U”‹ƒè‰…À….ÿÿÿ‹B‰$ÿP‹U˜‹ƒè‰…À…%ÿÿÿ‹B‰$ÿP‹U‹ƒè‰…À…ÿÿÿ‹B‰$ÿP‹E°‹ƒê‰…Ò…ÿÿÿ‹E°‹P‰$ÿR‹Eà‹ƒê‰…Ò…ÿÿÿ‹Eà‹P‰$ÿR‹EÜ‹ƒê‰…Ò…ûþÿÿ‹EÜ‹P‰$ÿR‹EØ‹ƒê‰…Ò…ïþÿÿ‹EØ‹P‰$ÿR‹EÔ‹ƒê‰…Ò…ãþÿÿ‹EÔ‹P‰$ÿRéÒþÿÿ‹B‰$ÿPé%þÿÿ‹EÈ‹P‰$ÿRé9ýÿÿ‹B‰$ÿPéäýÿÿ‹B‰$ÿPé½ýÿÿ‹B‰$ÿPé–ýÿÿ‹E´‹P‰$ÿRélýÿÿ‹E¸‹P‰$ÿRéEýÿÿ‹E¼‹P‰$ÿRéýÿÿ‹EÀ‹P‰$ÿRé÷üÿÿ‹EÄ‹P‰$ÿRéÐüÿÿ‹U‹B8‹P‰$ÿRé0üÿÿ‹U‹B<‹P‰$ÿRéûûÿÿ‹F‹@ ‰D$‹G ‰D$ ƒÓQ‰D$ƒ<‰D$‹ƒaµ‹‰$è5®‹ƒÃ­‹‰ƒ¿­Çƒ»­éüÿÿ‹EÌ‹U‰BÇB‹E܃‹B$‹ƒê‰…Ò„†‹EÜ‹U‰B$‹³%µ1À9uЕÀ‰EÌ…Àt[‹EЉ$èl®‰EÌèÉ­…Àt;‹ƒÃ­‹‰ƒ¿­Çƒ»­ ÇEœÇE ÇE¤‰u‰u˜‰u”é’ûÿÿ‹EÌ‹U‰B1Ò‹ƒW°è#eûÿ‰EÈ…À„Ø‹³%µ‹ƒè‰…À„,‹UȉUÇEÈ‹ƒ/®‰D$‰$èI­‰EÈ…À„ʉD$‹E܉$èu­‰ẼÀ„0‹EÈ‹ƒê‰…Ò„VÇEÈ‹UÌ…Ò„Ñ‹E܃‹U‹B(‹ƒê‰…Ò„!‹EÜ‹U‰B(‰uŒ‰ðƒ‹U‹B0‹ƒê‰…Ò„ç‹UŒ‹E‰P0ƒ‹U‹B,‹ƒê‰…Ò„²‹UŒ‹E‰P,}ä‰|$‹ƒ·¯‰D$‹E؉$è"­…ÀˆÁ1Àƒ}ä”À‰Eä…À„²Ç$èi¬‰EÀ…À„ì‹Eàƒ‹Uà‹EÀ‰P ‹E؃‹UØ‹EÀ‰P‹EÀ‰D$‹ƒ3­‰$è·¬‰Ç…À„¡‹EÀ‹ƒê‰…Ò„~ÇEÀ‹U‹B,‹ƒê‰…Ò„N‹E‰x,‹UŒ‰U˜‰U”1ÿé—úÿÿƒû;‰D$‹ƒUµ‹‰$茫éRýÿÿ‹ƒÃ­‹‰ƒ¿­Çƒ»­ éXùÿÿ‹U‹B$‹P‰$ÿRéfýÿÿ‹ƒÃ­‹‰ƒ¿­Çƒ»­ÇEœÇE ÇE¤‰u”‰u˜é0ùÿÿ‹F‰4$ÿPéÆýÿÿ1À9uÜ•À‰EÌ…À„ô‹ƒŸ¯‰D$‹E܉$諉EÈ…À„R‹EÜ‹ƒê‰…Ò„Ë‹UȉUÜÇEÈ‹ƒ›¯‰D$‰$èʪ‰Â‰EÈ…À„I‹ƒO¯‰D$‰$諪‰EÄ…À„,‹EÈ‹ƒê‰…Ò„fÇEÈÇ$蔪‰Â‰EÈ…À„ú‹EĉB ÇEÄ‹EȉD$‹ƒ9µ‰$èñª‰EÄ…À„Í‹EÈ‹ƒê‰…Ò„|ÇEÈ‹U‹B(‹ƒê‰…Ò„q‹EÄ‹U‰B(ÇEÄ‹³%µ‰uŒ‰ðéýÿÿ‹ƒÃ­‹‰ƒ¿­Çƒ»­ÇEœÇE ÇE¤‰u”‰u˜é¯÷ÿÿ‹EÈ‹P‰$ÿRé™üÿÿẺD$‹ƒ/¯‰D$‹E؉$è8ª…Àˆ¹1Àƒ}Ì”À‰EÌ…À„ÔÇD$‹ƒ'­‰$誉DžÀ„e‹U‹B0‹ƒê‰…Ò„—‹E‰x0‹UŒ‰U˜‰U”1ÿéú÷ÿÿ‹UÇB‹EÔ‰$è&©‰ẼøŒ@”À¶À‰Eä…À…E‰uŒ‰ðéüÿÿ‹U‹B,‹P‰$ÿRé:üÿÿ‹U‹B0‹P‰$ÿRéüÿÿ‹U‹B(‹P‰$ÿRéËûÿÿ‹ƒÃ­‹‰ƒ¿­Çƒ»­%ÇEœÇE ÇE¤‹EŒ‰E˜‰E”éhöÿÿ‹ƒÃ­‹‰ƒ¿­Çƒ»­‹UÈ…Òt‹ƒè‰…À„üÇEÈ‹UÄ…Òt‹ƒè‰…À„ðÇEÄ‹»ß­‰|$‹ƒ·­‰$è ¨‰Æ…À„r‰uÈ…ö„è‰4$èü§‰EÌ‹EÈ‹ƒê‰…Ò„!ÇEÈ‹EÌ…À…¯ÇEœÇE ÇE¤‹“%µ‰U”‰Ö‰U˜é’õÿÿ‰|$‹ƒ[°‰D$‹E؉$è/¨…Àˆs1Àƒ}ä”À‰Eä…À…׋UŒ‰U˜‰U”1ÿé,öÿÿ‹ƒÃ­‹‰ƒ¿­Çƒ»­&ÇEœÇE ÇE¤‹UŒ‰U˜‰U”éõÿÿ‹EÜ‹P‰$ÿRé$üÿÿ‹ƒÃ­‹‰ƒ¿­Çƒ»­ÇEœÇE ÇE¤‹ƒ%µ‰E”‰Æ‰E˜éÁôÿÿ‹ƒÃ­‹‰ƒ¿­Çƒ»­'éþÿÿ‹UÇB‹E°‹@$‰$舧ƒøÿ„¿…ÀŸÀ¶À‰EÌ…À„‹E°‹x$‹G‹@4…À„?‹@ …À„4ÇD$ÿÿÿÿ‰<$謦‰Eœ‹Eœ…À„–‹»%µ‹ƒè‰…À„㋃s¯‰D$‹Eœ‰$覉E …À„‹ƒ¯‰D$‹Eœ‰$èõ¥‰E¤…À„B‹E¤‰D$‹U ‰$蹦‰E¸…À„Ñ ‹U ‹ƒè‰…À„M ‹U¤‹ƒè‰…À„- ‹U‹B ‹ƒê‰…Ò„ ‹E¸‹U‰B ÇE¸‹uœ‹ƒ_®‰D$‹E°‹@$‰$èi¥‰E´…À„Ç$èk¥‰EÄ…À„;‹Uƒ‰P ‹EĉD$‹E´‰$èÑ¥‰EÈ…À„S‹E´‹ƒê‰…Ò„@ ÇE´‹EÄ‹ƒê‰…Ò„I ÇEÄ‹EÈ‹ƒê‰…Ò„ ÇEÈ‹“%µ‰UŒ‰Ðéð÷ÿÿ‹ƒÃ­‹‰ƒ¿­Çƒ»­éMùÿÿ‹ƒÃ­‹‰ƒ¿­Çƒ»­é0ùÿÿ‹U‹B,‹P‰$ÿRéžøÿÿ‹EÀ‹P‰$ÿRéqøÿÿ‹ƒÃ­‹‰ƒ¿­Çƒ»­&é³ûÿÿ‹EÈ‹P‰$ÿRéóûÿÿ‹EÄ‹P‰$ÿRéÿûÿÿ‹EÈ‹P‰$ÿRé‰ùÿÿƒCIèà\ûÿMÀUÈEÄè‹MÔ…É„ñüÿÿ‹UÔ‹ƒè‰…À…ßüÿÿ‹B‰$ÿPéÑüÿÿ‹Eà‹P‰$ÿR1ÿéHýÿÿ‹UÌ‹B‰$ÿPë´‹ƒØ”‹‰ƒÔ”ǃДK‰þé‘üÿÿ‹E ‹P‰$ÿRé*ýÿÿ‹E‹P‰$ÿRé/ýÿÿ‹ƒØ”‹‰ƒÔ”ǃДG‰þéPüÿÿÇEÔ‹ƒØ”‹‰ƒÔ”ǃДL‰þé ÿÿÿÇEÔ‹ƒØ”‹‰ƒÔ”ǃДM‰þéúþÿÿÇEÔ‹ƒØ”‹‰ƒÔ”ǃДN‰þéÔþÿÿÇEÔ‹ƒØ”‹‰ƒÔ”ǃДO‰þé®þÿÿÇEÔ‹ƒØ”‹‰ƒÔ”ǃДP‰þéˆþÿÿèE’…Àt$‹ƒØ”‹‰ƒÔ”ǃДKÇEÔé[þÿÿ‹UÌ‹ƒè‰…Àu ‹B‰$ÿP‹ƒ—‰D$‹E‰$è’‰EÔ…ÀtqÇ$è ’‰EÌ…Àt{‹Eà‰D$‹ỦT$‹EÔ‰$èO’‰Ç…À„€‹UÔ‹ƒè‰…À„™‹UÌ‹ƒè‰…Àt}‹ƒè‰…ÀtJ‹ƒ:œƒ‰ÇéÎúÿÿ‹ƒØ”‹‰ƒÔ”ǃДSé¤úÿÿ‹ƒØ”‹‰ƒÔ”ǃДSé–ýÿÿ‹G‰<$ÿPë«‹ƒØ”‹‰ƒÔ”ǃДSéUýÿÿ‹B‰$ÿPéuÿÿÿ‹B‰$ÿPéYÿÿÿU‰å‹E ‹‰E ‹E‹‰E]é´‘U‰å‹E ‹‰E ‹E‹‰E]雑U‰åWVƒì ‹}…ÿ¾ÿÿÿÿ‰ðƒÄ ^_]ÃÇEôë‰÷9}ô}â‹Uôú‰ÐÁè4Ñþ¶‹U‰T$‹U ‹‚‰$èG‘ƒøt»}˃ƉuôëÅU‰å‹U‹E ‰‹E‰B‹E‰B‹E‰B ‹E‰BÇBÿÿÿÿ¸]ÃU‰åWVSìüèÆ/‹E,…Àt ‹E,Ç•Œÿÿ‰•hÿþÿÇ…pÿþÿÿÿÿÿÇ…tÿþÿÇ…xÿþÿÇ…€ÿþÿ‰Ð‹u ‰t$ÇD$ÿ‰$èm…À„-ü¹ÿÿÿÿ1À‹½hÿþÿò®÷уé‰|ÿþÿ‹…xÿþÿ…À„—€½Œÿÿs„¶…Œÿÿ/‰D$‹•hÿþÿ‰$范è„Xýÿÿ‹µhÿþÿ‰t$ƒþ.‰D$‹ƒ”‘°‰$èTŒé,ýÿÿ‰µlÿþÿ‰òéŒýÿÿ¶•ÿÿö€…ø‹ƒ’‹D4Áèƒà…À„Èüÿÿ…Œÿþÿ‰D$ E܉D$uÔ‰µ`ÿþÿ‰t$Eà‰D$Eä‰D$EŒ‰…dÿþÿ‰D$ ẺD$ƒ®.‰D$‹•hÿþÿ‰$轋ƒø…>ÿÿÿ‹E…À‘Ç…pÿþÿÿÿÿÿ‹µdÿþÿ‰t$ƒÊ.‰D$‹ƒ”‘°‰$è}‹¹üƒú.‰Æ‹½`ÿþÿó¦¸t ¶Fÿ¶Oÿ)È…Àu ‹Eä+E܉EäÇ…€ÿþÿéüÿÿÇD$@‰$èÄŒ…À•À¶Àéûþÿÿ‹}Ç…„ÿþÿë‰÷9½„ÿþÿRÿÿÿ‹…„ÿþÿ‰ÐÁè4Ñþ¶‹•dÿþÿ‰T$‹U‹‚‰$èÛ‹ƒøt&}½ƒÆ‰µ„ÿþÿë´‹E,…À„Züÿÿ‹u,ÇéLüÿÿ…öx ‰µpÿþÿéÿÿÿ‰µpÿþÿééþÿÿU‰åWVSìÜ…èU*…Èzÿÿ‰…zÿÿ‹U ƒê‰•¼zÿÿÇ…¤zÿÿÇ…¬zÿÿÇ…°zÿÿMȉŒzÿÿµÈþÿÿ‰µˆzÿÿ½ÿÿÿ‰½„zÿÿEˆ‰…€zÿÿ•Hÿÿÿ‰•|zÿÿ‹M‰L$ÇD$ÿ‹µzÿÿ‰4$èЉ…À„Ù¶•ÈzÿÿúÿwÌ‹ƒ—ŒöD5t¿EЉD$(‹½Œzÿÿ‰|$$Eä‰D$ E܉D$‹…ˆzÿÿ‰D$Eà‰D$E؉D$‹•„zÿÿ‰T$ EÔ‰D$ƒÑ)‰D$‰4$èp‰ƒø …\ÿÿÿ‹M ‰L$‹µ€zÿÿ‰4$èÙ‰‹}$‰|$‹…|zÿÿ‰$èĉü¹ÿÿÿÿ‰÷1Àò®÷ÑfÇD1ÿ.¹ÿÿÿÿ‹½|zÿÿò®÷Ñ‹•|zÿÿfÇDÿ.‹„zÿÿ‰L$‰4$芋µˆzÿÿ‰t$‹½|zÿÿ‰<$èwŠ‹E…Àõ¾ÿÿÿÿ‹}‰7‹E…ÀÄ‹½¼zÿÿÇ…”zÿÿÿÿÿÿ‹‰½¨zÿÿ‹Eà+EØEä+E܃À‰… zÿÿ‹½¬zÿÿ…ÿ„!9…¤zÿÿŒù‹}‹…Éx‹•”zÿÿ…҉䋅|zÿÿ‰D$ ‹•€zÿÿ‰T$ƒ*‰D$‹ƒ#Œ°‰$è7ˆ‹M‰L$ÇD$ÿ‹µzÿÿ‰4$è÷‡…À…'þÿÿ1ö‹…¬zÿÿ‰$舋•°zÿÿ‰$è ˆ‰ðÄÜ…[^_]Ë}Ç…´zÿÿë‰÷9½´zÿÿîþÿÿ‹…´zÿÿ‰ÐÁè4Ñþ¶‹•€zÿÿ‰T$‹M ‹‰$襈ƒø„¼þÿÿ}¹ƒÆ‰µ´zÿÿë°‹½¬zÿÿ‰<$葇‹…°zÿÿ‰$胇‹µ zÿÿ…öŽkÇD$‹• zÿÿ‰$èi‡‰…¬zÿÿ…À„)ÇD$‹ zÿÿ‰ $èE‡‰…°zÿÿ…À„©‹µ zÿÿ‰µ¤zÿÿé„þÿÿ‹E‰…ÀzÿÿÇ…¸zÿÿ‰Â뉵Àzÿÿ9µ¸zÿÿþÿÿ‹•Àzÿÿ•¸zÿÿ‰ÐÁè4Ñþ¶‹U <‚‹|zÿÿ‰L$‹‰$è°‡ƒøt}´ƒÆ‰µ¸zÿÿ‹µÀzÿÿ멉µ”zÿÿéÍýÿÿ¹ü³‰)‰µtzÿÿ‹½Œzÿÿó¦¸t ¶Fÿ¶Oÿ)È…Àu‹MÜ)¨zÿÿ÷•¨zÿÿ‹µ¨zÿÿ‰u܃mعü»Q*‰þ‹½Œzÿÿó¦¸t ¶Fÿ¶Oÿ)È…Àuƒm܃mØ‹µ zÿÿƒî‹M‰L$‰t$‹½¬zÿÿ‰<$èÁ……À„Êýÿÿ‹E‰D$‰t$‹•°zÿÿ‰$è ……À„©ýÿÿ¶„Ò„žýÿÿ‹°zÿÿ¶„À„ýÿÿ‹µ¬zÿÿ‰µÄzÿÿ1ÿ1öÇ…˜zÿÿÿÿÿÿÇ…œzÿÿÿÿÿÿ€ú-„µ<-„­‹…˜zÿÿ…Ày‹E؉…˜zÿÿ‹U܉•œzÿÿ‹…Äzÿÿ€8-tƒEØ€9-tƒE܃Nj•¬zÿÿú‰•Äzÿÿ¶„Òt‹°zÿÿù¶„Àu”‹…˜zÿÿ…Àˆñüÿÿ‹M܃é‹U؃êv‹}Ç‹½˜zÿÿ‰8‰P‹•”zÿÿ‰P‹½œzÿÿ‰x ‰HÇ@ÿÿÿÿƒÆé­üÿÿ‹…˜zÿÿ…Àx9v‹U‹•˜zÿÿ‰‹U؉P‹•”zÿÿ‰P‹•œzÿÿ‰P ‹U܉PÇ@ÿÿÿÿƒÆÇ…˜zÿÿÿÿÿÿéÿÿÿ‹… zÿÿ‰D$ƒ*‰D$ÇD$ ›ƒù)‰D$ƒ9‰D$µÈúÿÿ‰4$脉t$‹ƒŒ‹‰$è#„¾ÿÿÿÿéüÿÿ‹½ zÿÿ‰|$ƒñ)‰D$ÇD$ šë¢‹• zÿÿ‰T$ƒñ)‰D$ÇD$ šƒù)‰D$ƒ‰D$µÈúÿÿ‰4$蚃‰t$‹ƒŒ‹‰$詃¾ÿÿÿÿé¡ûÿÿimpygr/intervaldb.c%s, line %d: *** invalid memory request: %s[%d]. %s, line %d: memory request failed: %s[%d]. %d %d %d %d %dWARNING: number of records read %d does not match allocation %d itsub_mapsub_pack%s.sizerunable to open file %s%d %d %d %d %dii%s.indexrbidb_file%s.subheadsubheader%s.idbSIZE %s %d %d %d %d %d I %d %d S %d %d M %d %d %d %d %d %d error or EOF reading file %sSIZE %s %d %d %d %d %d%s%s.sizew%d %d %d %d %d %s%s.indexwbI %d %d%s%s.subheadS %d %d%s%s.idbM %d %d %d %d %d %derror writing file %s! out of disk space?it->imunable to malloc %d subheadersunable to open file %s for writingimsubit2pygr.cnestedlist.NLMSASliceIteratorgenerate letters (nodes) in this LPO slicepygr.cnestedlist.NLMSANodeinterface to a node in NLMSA storage of LPO alignmentedgesidiposnlmsaSlicegetSeqPosgetEdgeSeqsnodeEdgespygr.cnestedlist.NLMSASliceLettersgraph interface to letter graph within this regionitemsiteritemspygr.cnestedlist.NLMSASlicelettersstartstopnlmsaSequencenlmsaseqkeysmatchIntervalsfindSeqEndsgenerateSeqEndsgroupByIntervalsconservationFilterfilterIvalConservationgroupBySequencesclip_interval_listsplitregionsrawIvalspygr.cnestedlist.NLMSAtoplevel interface to NLMSA storage of an LPO alignmentpathstemseqsseqlistseqDictcurrentUnionlpoListmaxLPOcoordmaxleninlmsais_bidirectionalpairwiseModein_memory_mode_persistent_id_ignoreShadowAttr__doc___saveLocalBuildinverseDBclose__reduce____getstate____setstate__read_indexesread_attrsaddToSeqlistnewSequencenextIDinitLPOinit_pairwise_modeaddAnnotationadd_aligned_intervalsreadMAFfilesreadAxtNetbuildFilessave_seq_dictbuildseqIntervalpygr.cnestedlist.IntervalFileDBIteratormergeSeqpygr.cnestedlist.NLMSASequencesequence interface to NLMSA storage of an LPO alignmentlengthnbuildis_lpois_unionoffsetnamefilestemnlmsaLettersbuildListforceLoadbuildInMemorypygr.cnestedlist.IntervalFileDBopenfind_overlapfind_overlap_listcheck_nonemptypygr.cnestedlist.IntervalDBIteratorpygr.cnestedlist.IntervalDBsave_tuplesrunBuildMethodbuildFromUnsortedFilewrite_binariesadvanceStartStopdump_textfiletextfile_to_binariescnestedlist.pyxraise: arg 3 must be a traceback or Noneinstance exception may not have a separate valueraise: exception must be an old-style class or instancefunction takes at most %d positional arguments (%d given)required keyword argument '%s' is missing__import__OOOOdivO|Opygr.cnestedlist.IntervalDB.write_binariespygr.cnestedlist.IntervalDB.check_nonemptyendpygr.cnestedlist.IntervalDB.find_overlap_listpygr.cnestedlist.IntervalDB.find_overlapfilenamenOipygr.cnestedlist.IntervalDB.buildFromUnsortedFilebuildInPlace|Opygr.cnestedlist.IntervalDB.runBuildMethodnsize|OOpygr.cnestedlist.IntervalDB.__cinit__dbiiOMissing type objectArgument '%s' has incorrect type (expected %s, got %s)pygr.cnestedlist.IntervalDBIterator.__cinit__pygr.cnestedlist.IntervalDBIterator.__next__pygr.cnestedlist.IntervalFileDB.check_nonemptypygr.cnestedlist.IntervalFileDB.find_overlap_listpygr.cnestedlist.IntervalFileDB.find_overlapOpygr.cnestedlist.IntervalFileDB.openmodepygr.cnestedlist.IntervalFileDB.__cinit__pygr.cnestedlist.__iadd__pygr.cnestedlist.NLMSASequence.__iadd__pygr.cnestedlist.NLMSASequence.__len__pygr.cnestedlist.buildInMemorypygr.cnestedlist.NLMSASequence.buildInMemorypygr.cnestedlist.NLMSASequence.buildFilespygr.cnestedlist.NLMSASequence.closepygr.cnestedlist.NLMSASequence.forceLoadpygr.cnestedlist.IntervalFileDBIterator.mergeSeqpygr.cnestedlist.IntervalFileDBIterator.__next__pygr.cnestedlist.NLMSA.__iadd__pygr.cnestedlist.NLMSA.__invert__apygr.cnestedlist.NLMSA.addAnnotationpygr.cnestedlist.NLMSA.nextIDpygr.cnestedlist.NLMSA.newSequencestatepygr.cnestedlist.NLMSA.__setstate__pygr.cnestedlist.NLMSA.__getstate__pygr.cnestedlist.NLMSA.__reduce__pygr.cnestedlist.NLMSA.__iter__pygr.cnestedlist.NLMSASlice.__setitem__Subscript deletion not supported by %spygr.cnestedlist.NLMSASlice.rawIvalsminAlignedpygr.cnestedlist.NLMSASlice.splitpygr.cnestedlist.NLMSASlice.generateSeqEndspygr.cnestedlist.NLMSASlice.findSeqEndspygr.cnestedlist.NLMSASlice.iteritemspygr.cnestedlist.NLMSASlice.letters.__get__pygr.cnestedlist.NLMSASlice.__iter__pygr.cnestedlist.NLMSASliceLetters.iteritemspygr.cnestedlist.NLMSASliceLetters.itemspygr.cnestedlist.NLMSASliceLetters.__iter__pygr.cnestedlist.NLMSANode.__getitem__pygr.cnestedlist.NLMSANode.__iter__pygr.cnestedlist.IntervalFileDBIterator.loadAllpygr.cnestedlist.IntervalFileDBIterator.nextBlockpygr.cnestedlist.IntervalFileDBIterator.restartpygr.cnestedlist.IntervalDBIterator.cnextpygr.cnestedlist.NLMSASequence.saveIntervalpygr.cnestedlist.IntervalFileDBIterator.cnextpygr.cnestedlist.IntervalFileDBIterator.extendpygr.cnestedlist.IntervalFileDBIterator.copyistartistopiOiipygr.cnestedlist.advanceStartStoppygr.cnestedlist.NLMSASliceIterator.__cinit__pygr.cnestedlist.NLMSASliceLetters.__cinit__nodepygr.cnestedlist.NLMSASliceLetters.__getitem__nspygr.cnestedlist.NLMSA.addToSeqlistCannot convert %s to %spygr.cnestedlist.NLMSA.save_nbuildpygr.cnestedlist.NLMSA.closepygr.cnestedlist.NLMSA.initLPOpygr.cnestedlist.get_seq_intervalpygr.cnestedlist.NLMSASlice.get_seq_intervalprefixDictbuildpathO|OOOpygr.cnestedlist.textfile_to_binariescnestedlist__builtin____builtins__IntervalDB__pyx_vtable__IntervalDBIteratorIntervalFileDBNLMSASequenceIntervalFileDBIteratorNLMSANLMSASliceNLMSASliceLettersNLMSANodeNLMSASliceIteratorpygr.cnestedlistpygr.cnestedlist.NLMSANode.__cmp__pygr.cnestedlist.NLMSANode.edges.__get__pygr.cnestedlist.getSeqPospygr.cnestedlist.NLMSANode.getSeqPospygr.cnestedlist.NLMSASlice.__cmp__pygr.cnestedlist.NLMSASlice.__repr__pygr.cnestedlist.NLMSASlice.__hash__pygr.cnestedlist.NLMSASlice.matchIntervalspygr.cnestedlist.NLMSASlice.__getitem__mafFilesaxtFilesmaxOpenFilesnPadmaxinttrypathbidirectionalbidirectionalRuleuse_virtual_lpoalignedIvals|OOOOOOOOOOOOOOOOOpygr.cnestedlist.__init__pygr.cnestedlist.NLMSA.__init__pygr.cnestedlist.NLMSA.init_pairwise_modepygr.cnestedlist.NLMSA.edgespygr.cnestedlist.NLMSA.add_aligned_intervalssaveSeqDictpygr.cnestedlist.NLMSA.buildFilespygr.cnestedlist.NLMSA.save_seq_dictpygr.cnestedlist.buildpygr.cnestedlist.NLMSA.buildiseqiiipygr.cnestedlist.NLMSA.seqIntervalpygr.cnestedlist.NLMSA.__setitem__pygr.cnestedlist.__getitem__pygr.cnestedlist.NLMSASequence.__getitem__unpack sequence of wrong sizepygr.cnestedlist.NLMSASliceIterator.__next__iO|iipygr.cnestedlist.NLMSANode.__cinit__mergeAllpygr.cnestedlist.NLMSASlice.edgespygr.cnestedlist.NLMSASlice.itemspygr.cnestedlist.NLMSASlice.keyslOOOpygr.cnestedlist.NLMSASlice.clip_interval_listpygr.cnestedlist.read_indexespygr.cnestedlist.NLMSA.read_indexespygr.cnestedlist.read_attrspygr.cnestedlist.NLMSA.read_attrspygr.cnestedlist.__setitem__pygr.cnestedlist.NLMSASequence.__setitem__pygr.cnestedlist.NLMSA.add_seqidmap_to_unionpygr.cnestedlist.NLMSASlice.findSeqBoundsoutfilenamepygr.cnestedlist.dump_textfileotherpygr.cnestedlist.NLMSANode.getEdgeSeqspygr.cnestedlist.nodeEdgespygr.cnestedlist.NLMSANode.nodeEdgesOii|iiOpygr.cnestedlist.__cinit__pygr.cnestedlist.NLMSASlice.__cinit__maxgapmaxinsertmininsertfilterSeqsfilterListmergeMostmaxsizeivalMethod|iiiOOOOOOpygr.cnestedlist.groupByIntervalspygr.cnestedlist.NLMSASlice.groupByIntervalsmpIdentityMinminAlignSizemaxAlignSizeOO|OOOpygr.cnestedlist.NLMSASlice.conservationFilterseqIntervalsfilterFunO|OOpygr.cnestedlist.filterIvalConservationpygr.cnestedlist.NLMSASlice.filterIvalConservationsourceOnlyindelCutseqGroupspMinAlignedseqMethodO|OOOOOOpygr.cnestedlist.groupBySequencespygr.cnestedlist.NLMSASlice.groupBySequencesdummyArgpygr.cnestedlist.NLMSASlice.regionsOOpygr.cnestedlist.readMAFfilespygr.cnestedlist.NLMSA.readMAFfilespygr.cnestedlist.readAxtNetpygr.cnestedlist.NLMSA.readAxtNetpygr.cnestedlist.NLMSA.__getitem__nbufferii|OOiOpygr.cnestedlist.IntervalFileDBIterator.__cinit__nlOOO|OOOpygr.cnestedlist.NLMSASequence.__init__pygr.cnestedlist.IntervalDB.save_tuples%2s %63s %d %d %2s %d %s *** WARNING: Unknown sequence %s ignored... - *** WARNING: Incorrectly formated alignment line ignored: %s %s%d %63s %d %d %63s %d %d %2s %dsrc_seqpygr/apps/maf2nclist.cdest_seq *** WARNING: Unknown sequence %s, %s ignored... +‹$Ãÿÿÿd/è` ¢`¢@¢0¢ûEˆ/6a]abK›@ ¢² ´/$Î_ ¦`£`SPS8£ûEÐ/`C`W€R R Q¯J0VªÈQget this node's edges as list of tuples (ival1, ival2, edge)0 00 (0C°(S40èèR@0‰ÀRget all outgoing edges from this nodereturn dict of sequences that traverse edge from self -> otherreturn seqpos for this seq at this nodeˆKˆK‰`L0 ´^ ¤ UüTø£ûEp0_)_7 T`T"0¤0ÐT¬0¡list of tuples (node,{target_node:edge})€$o_¸0@Ó[¡·@ºà¤fäe¢¼¸¤ûE]]eÿ W€V VmÔ0ŒþHVinterface to individual LPO letters in this intervalÜ0 ä00ì00ü04180ùS e¤0€bhe¬0‚û1le1j¾Xd 1F÷ d,1‰ðøc<1qTØ^P1¾Ôd1öì|1€ûlY1{xK̯Ù>KU^À1XV`m mmx¥ûEØ1X,Y—Ø€hgõÍ‘U2 2$2,242D2$L2(X20`24h28|2<Œ2@œ2D¬2HÀ2LÈ2PØ2Tä2x+ëlì2—Õø2Ó3.Ñ3d…¨l(3kžhl43&&4lD3QÆlP3jÅØkX3Û.¸k`3õtk0øt3¥Á4k„3«ükœ36„èj¬3\­¼j¸3ÿxjÄ3­"HjÔ3É$jÜ3r0Ðiget specified interval in the target sequencebuild nestedlist databases from saved mappings and initialize for usesave seqDict to a worldbase-aware pickle filebuild nestedlist databases on-disk, and .seqDict index if desiredread alignment from a set of axtnet filesread alignment from a set of MAF filesadd alignedIvals to this alignmentsave alignment of sequence interval --> an annotation objectturn on use of virtual LPO mapping (i.e. no actual LPO is present!)create LPOs for this alignmentget a unique nlmsaID and advance countercreate a new nestedlist index for sequence seqadd an NLMSASequence to our seqlist, and set its idread pickled attribute dictionary from file and apply to selfopen all nestedlist indexes in this LPO database for immediate useclose our shelve index filesÌÕ'5t[zÀÔ¾è34îS¦À¥˜¥ˆ¥ûEÚT"U›J ¼Àn¾ò4‘¹ànmerge intervals into single interval per sequence orientation4DlO@rràq˜¦ûE<4BQRàpào¤üÿN0 t4|4„4Œ4˜4 1$ 4(¨48´4<Ä4@Ð4<¸¨qä2ªµhq¸3?«0qÜ4Ê¥build nested list from saved unsorted alignment datafree memory and close files associated with this sequence indexforce database to be initialized, if not already openI¥¾;ÖªI¥S™œì4 qN §à¦¸¦¨¦û sÆ™ 5¸˜5Y–$5hŽ85ä2ÁJH5(`?M@¨¨اȧûEûM%NÑHyЏ§Xˆl5¦L@©©è¨بû€u›ˆ5’xv”53€Dv¤5Îyv5ow$5£o85ùm¼5Mkä2÷Hload unsorted binary data, and build nested listbuild either in-place or using older build methodbuild in-memory NLMSA from list of alignment tuplesrbrwb###mafa ”ªØ™˜ªÊ™œª¹™ ª¯™ ¤ª›™¨ª™ ¬ª€™°ªv™ ´ªk™ ¸ª^™ ¼ªP™Àª=™Ī(™Ȫ™ ̪ ™Ъÿ˜Ôªó˜ تå˜ܪݘàªʘ䪿˜ 誵˜ 쪨˜ 𪟘 ôª–˜ øª‹˜ üª|˜«n˜«g˜«Z˜ «D˜«3˜«,˜«#˜ «˜ «˜ $«ü—(«î—,«ä— 0«Ô—4«Å—8«Á—<«·— @«¤—D«ž—H«š—L«‡—P«v—T«n—X«i—\«c—`«_—d«H—h«=— l«3— p«—t«—x«—|«— €«—„«ø– ˆ«ç–Œ«Ö–«Ó–”«Ж˜«Ç– œ«– «º–¤«°– ¨««–¬«š–°«“–´«Š– ¸«„–¼«z– À«u–Ä«p–È«i–Ì«d–Ы]–Ô«U–Ø«H– Ü«A–à«7– ä«0–è«'– ì«– ð«– ô«– ø«ü• ü«ó• ¬ñ•¬ì•¬à• ¬Ù•¬Ë•¬À• ¬´• ¬ª• ¬£•$¬ •(¬™•,¬• 0¬‹•4¬• 8¬s• <¬p•@¬d• D¬W• H¬K• L¬>• P¬9•T¬-• X¬$• \¬•`¬• d¬þ”h¬ù”l¬¯vp¬ö”t¬í” x¬¬v|¬â” €¬Õ” „¬Ê” ˆ¬½” Œ¬¯”¬¡””¬š”˜¬‹”œ¬‚”  ¬s”¤¬k”¨¬]”¬¬Q” °¬M”´¬C” ¸¬;”¼¬/” À¬#” Ĭ”Ȭ”̬ ” Ь” Ô¬ý“جô“ ܬé“ à¬Þ“ 䬨“è¬Æ“ì¬À“𬵓 ô¬°“ø¬©“ü¬£“­Ÿ“­–“ ­‰“ ­ƒ“­“­|“­±v­r“ ­l“$­]“(­V“,­?“0­“#4­ “8­î’<­Ì’"@­½’D­„’9H­n’L­H’&P­(’T­’$X­Ü‘%\­`‘z`­<‘!d­‘(h­‘l­ép­Ùt­¾x­Œ2|­ƒ€­d„­Kˆ­-Œ­ü1­È3”­¶˜­”"œ­…  ­ƒ¤­k¨­D'¬­8 °­(´­Ž¸­Ì:¼­”7À­h,Ä­HÈ­ÈŒ€Ì­¯ŒЭ˜ŒÔ­xŒ Ø­PŒ'Ü­Œ6à­Œä­÷‹è­î‹ ì­ì‹ð­ç‹ô­”‹Sø­h‹*ü­Z‹ ®I‹®6‹®ô‰B ®Ô‰®̉®Á‰ ®Œˆ5®pˆ ®à†$®Ɇ(®±†,® †0®Ÿ†4®t†+8®l†<®è…„@®Ð…D®´…H®°…...Saving NLMSA binary index: bad format in file %sYou must supply sequence database(s) for the following prefixes, by passing them in the prefixDict optional dictionary argument: %s.idDictYou must provide a seqDict for this NLMSA!bad format in %serror or EOF reading %serror writing file %sWarning: Because one or more of the sequence databases in the seqDict have no worldbase ID, there is no host-independent way to save it to a textfile for transfer to another machine. Therefore, when loading this textfile on the destination machine, you will have to provide a dictionary for these sequence database(s) as the prefixDict argument to textfile_to_binaries() on the destination machine.error writing to file %sWarning: Because your seqDict has no worldbase ID, there is no host-independent way to save it to a textfile for transfer to another machine. Therefore, when loading this textfile on the destination machine, you will have to provide the seqDict argument to textfile_to_binaries() on the destination machine..seqIDdict.txtthis mapping is not invertibleNote: the NLMSA.seqDict was not saved to a file. This is not necessary if you intend to save the NLMSA to worldbase. But if you wish to open this NLMSA independently of worldbase, you should call NLMSA.save_seq_dict() to save the seqDict info to a file, or in the future pass the saveSeqDict=True option to NLMSA.build().Index files saved.empty alignment!%d %s %d %d axtNet block too long! Increase max size%s is not correct axtNet file name. Correct name is (chrid.)source.target.net.axt..axt..net.axtProcessing axtnet file: os.pathNon-alignment text lines ignored: prefix %s, count %dMAF block too long! Increase max size%s: not a MAF file? Bad format.unable to open file %sProcessing MAF file: Sequence too long for 32 bit int: %s, %d Something is probably wrong with creation / reading of this sequence. Check the input!you cannot iterate over NLMSAsSorry! Query interval spans multiple LPOs!key must be a sequence interval or python slice objectUsage only nlmsa[s1]+=s2 allowed. nlmsa[s1]=s2 forbidden! Because you are aligning a pair of sequence intervals, the pairwiseMode=True option is automatically being applied. To avoid this message in the future, pass the pairwiseMode=True option to the NLMSA constructor. See the NLMSA documentation for more details. this alignment is already using an LPO!.attrDictunable to find sequence %s in seqDict!corrupted NLMSAIndex??? .NLMSAindexcan't pickle NLMSA.in_memory_modeunknown mode %smaxLPOcoord and pairwiseMode options incompatible!key must be a sequence interval of this sequencewrite_padded_binary failed???not opened in write modeunable to open in write mode: .buildNLMSASequence: seq must have name or id attributehey! write some code here!seq not in nodeseq not in this alignmentout of boundsno LPO in nlmsaSlice.seqBounds? Debug!seq not aligned in this intervalthis NLMSA is read-only! Currently, you cannot add new alignment intervals to an NLMSA after calling its build() method.sequence mapped to non-LPO target??this interval is not aligned!empty IntervalFileDB, not searchable!src is None! Debug!!Iterator has no database! Please provide a db argument.out of memoryempty IntervalDB, not searchable!IntervalMap file corrupted?unable to open unable to allocate IntervalMap[%d]could not open file %sxmlrpcwrite_binarieswriteworldbasewarnwtypestarget_starttargetDBsysstripstringstopstartswithstartsplitLPOintervalssplitsourcePathsourceOnlysourceDBsortsetrlimitsequenceseqlistseqdbseqIntervalseqInfoDictseqDictseqBoundsseqsave_tuplessave_seq_dictsaveSeqrunBuildMethodresourcereopenReadOnlyremoverelativeSliceread_seq_dictread_indexesread_attrsreadMAFfilesreadAxtNetrawIvalsrUpygrprune_self_mappingsprefixDictpicklepathstempathForwardpathpairwiseModepMinAlignedpIdentityMinpAlignedMinosorientationopen_shelveopenonDemandoffsetnsnonamenodeEdgesnlmsa_utilsnlmsaSlicenlmsaSequencenextIDnewSequencenamenmsaSlicemininsertminAlignedminAlignSizemergeSeqmergeAllmemorymaxinsertmaxgapmaxAlignSizemappingloggerloadlengthkeysjoiniteritemsitemsis_unionis_lpois_bidirectionaliposinverseDBinitLPOinfoindelCutimidgroupBySequencesgroupByIntervalsgetSeqIDgetSeqgetIDcoordsgetIDgetgenerate_nlmsa_edgesforceLoadfilterSeqsfilterIvalConservationendedgesdumpdoSliceconservedSegmentconservationFiltercmpcloseclip_interval_listclassutilchrcheck_nonemptycache_referencecacheHintbuildInMemorybuildFromUnsortedFilebuildFilesbuildbasenameappendadvanceStartStopadd_aligned_intervalsaddToSeqlistaddAllabsoluteSlice_persistent_id_cache_max__init____iadd____getstate____class__StringTypeSeqPrefixUnionDictSeqPathSeqCacheOwnerSeq2SeqEdgeRLIMIT_NOFILEPrefixUnionDictNLMSAindexNLMSA_UNION_InternalNLMSA_LPO_InternalNLMSASequenceNLMSASeqDictLetterEdgeFloatTypeEmptySliceErrorEmptySliceEmptyAlignmentErrorDictQueueClassicUnpicklerBuildMSASliceAttributeErrorÌ5là5ùÀtšð5å9@šconvert pathstem.txt textfile to NLMSA binary filesdump NLMSA binary files to a text fileSEQID %s %d %d %dPREFIXUNION %s %sunknownPATHSTEM %s %d %d %d %d %sNoneNLMSASequence %sSEQID %s %d %d %d PREFIXUNION %s %s PATHSTEM %s %d %d %d %d %s 6¨4,7Ü0Œ7Ü0Œ7ì7ø748ì7t8Ü0Œ7¨8Ü0Œ7Ü0Œ7¨4¨4:8<1Œ4¨<´=100A A00ØA1ì7,2ÐBÜB112:,2`ElExEX2ˆEE˜E E|2°EÄEL2Ø2ÔEÔE°F@GA A00A A`H`HÜ0Œ7ØH,22 DM D \@Dk@Dz$-Nµ.µDVµDX¾DZÆD^ÈDbÍD^ÏDbÔD\ÖD^ÞDbâ{$Vµ“ U¢ U ±@UÀ@UÏ$/Nä.äDäD‘ìD’õD”D• D–D—D˜D‘ D›*Ð$äê Žó Ž ý Ž @@!@Ž*Àä+à.,$JN...D5.D7BD;\D7i-$5.G 4P@6Z@4cÀ.d€7èûÿÿrÀisà¹t€7èûÿÿ‚À¹ƒà „à …$ÜN . D@ DCDDDF#DD&DE+DF9DGKDDNDKSDO]DDfDKh†$@   ?­ ? ¸ ? ?Ë@AÔ€AðÿÿÿÜÀ Ýà‡Þ$}N‡.‡DU‡DXDY•D[DYŸDZ£D[¯D\¸DY»Da¿DYÅDaÇß$U‡÷ T T  T T#@V,€=€Z€ˆ@V‘@TœÀ‡àÍž$FNÍ.ÍDtÍDvÞDzøDvŸ$tÍ¿€Ð€ð€“€¤€vèûÿÿ²À³àW´$ŠNW.WD}WD_DfDƒ·µ$}WÓ |Þ@~ê@~úÀWûàÄü$mNÄ.ÄD‡ÄDˆÌD‰ÕD‹Üý$‡Ä †(@†3$Nà.àDâàDåëDæøDé$Dë-Dì^Dî4$âàF áS á ` ák áx á„€ãôÿÿÿ@ä€X²@á¿@áÊÀàËà‰Ì$©N‰.‰Dô‰DöšDù¡Dû§DüØDüD÷ Í$ô‰á òî ò  ó @õ€(€E€sÀ‰t€÷èûÿÿ‚À/ƒà†„€÷èûÿÿ’À†“à×”àו$NN×.×D×D èD ïD òD ûDþD D>–$ײ Ä  Рޠð ý@ @€I@[@g@u@‡À׈àG‰$pNG.GDœGDžRDŸsD {D¡D¢ƒD¦D¢”D£–D¢¸D¦ÅŠ$œG¥ ›¯ › ¸ ›Ã ›Ð@Ù@å@›ðÀGñàÌò$…NÌ.ÌD«ÌD¯ÝD° D±5D²@D³HD´RDµ[D±aD¸|D¹‡DºD»™D¼¢D¸¨D¿³DÀ¿DÁÆD¿ÒDÂÝDÄüDÅ DÉD¯%D°‘ó$«Ì  © ©  ©* ª< ªJ@¬S@¬\ÀÌ]€°èûÿÿkÀ,là5m€¯èûÿÿ{À%|à{}€¯èûÿÿ‹À{Œà‘€°èûÿÿ›À‘œàìàìž$ Nì.ìDÍìDÏôDêDÏ DÓ DÚEDÜNDàZDçƒDχDꌟ$Íì¹ ÌÃ Ì Ì Ì× Ìä@Îí@Îö€ÎôÿÿÿÀìà–$ªN–.–D4–D<ªD=ÏD>éDCñDD,DF4DG`DHgDI†DJšDO¢DPÃDSËDTíDUøDVDW7D]?D^aD_jD`mDarDiuDj€DkŒDl’Dm˜Dn®Do²Dp¾DqÍDrÐDsïDt D€DT#D]6D|‚D~D€²DXÃD~ÎD€ØDFéDSJD]dDYŸDKÍDLØD]DF!Du|DvƒDwœ$4– 20 2 @ 3X€5äÿÿÿ`€q€‚€ €o€Ê€ç€5àÿÿÿò€5Üÿÿÿü€5Øÿÿÿ €5Ôÿÿÿ€6Ôóÿÿ@81€9ÄóÿÿA@:N€n@3†À–‡€]Ôûÿÿ•À6–à‚—€FÔûÿÿ¥Àé¦àJ§€SÔûÿÿµÀJ¶àd·€]ÔûÿÿÅÀdÆàŸÇ€]ÔûÿÿÕÀÖà!×€FÔûÿÿåÀ!æà|çà¹è$#N¹.¹D…¹D†ÃD‡ÊD‰ÒDŠÙDŒáD÷DŽ D é$…¹ „@„%$dN . D— DŸ. D S D¡m D£u D¥³ D¦» D§Æ D¨Î D¬Û D°!D±'!D²F!D³`!Dµh!D¶‚!D¸§!DµÒ!D»Ú!D¾â!D¿í!DÀ "DÁ&"DÃ."DÄH"DÆm"DȘ"Dæ"DÊ®"DͶ"DÎÄ"DÏã"DÐý"DÑ#DÓ$#DÕE#DÒˆ#DÚ“#Dé#DÞ¨#Dç³#Dé¸#DâÃ#DãÊ#D§Ü#Dæç#Dçî#DßH$DãX$&$— < •M • ^ –n –{@˜„€˜äÿÿÿŒ€˜àÿÿÿ—€˜Üÿÿÿ¡€˜Øÿÿÿ®€˜Ôÿÿÿ¸€˜¤÷ÿÿÀ™¬÷ÿÿÏ€š¬ÿÿÿØ€›Ìÿÿÿ“Äÿÿÿó@ À  àl$ $ONl$.l$Dîl$Dö}$Dø¤$D?ô$DDû$DG%D@ %DûL%Dü{%Dý•%Dÿ%DÚ%Dâ%Dí%Dñ%Dõ%D &D )&D M&D U&Db&D‡&D¼&D í&Dù&D'D'D;'DY'Da'Dn'D “'D"Â'D$í'Dó'D&ÿ'D) (D*6(D+P(D-X(D+`(D.s(D0˜(D4æ(D- )D7 )D;@)D<K)DCt)DD) $îl$  í.  í @  íP @ïY €ïäÿÿÿa €ïàÿÿÿl €ïÜÿÿÿv €ïØÿÿÿƒ €ïÔÿÿÿ @ï™ €ð¬ïÿÿ¥ €ð¬oÿÿ± €ð¬÷ÿÿÁ €ñ¬ÿÿÿÊ €òÄÿÿÿÔ €óÌÿÿÿå @ôò €!Àl$!à¨)!$<N¨).¨)Dg¨)Dj³)Dm·)Dp¼)DkÃ)DCà)DDæ)DFî)DDñ)DEö)DF*DG*DD*DK*Dl>*DmF*!$g¨)3! e@! e K! eW! ea! fs! f!@hŠ!@e–!À¨)—!€kôÿÿÿŸ!€kìÿÿÿ¨!Àà)©!€Aäÿÿÿ±!Àà)²!à>*³!à>*´!àQ*µ!$©NQ*.Q*DQ*Db*D!m*D#*D ’*D *D  *D «*D®*DÓ*D#÷*D'ÿ*D++D6;+D9I+D:Q+Dåx+Dæ…+DëÎ+Dìÿ+D:#,D;,,D<5,D=A,DFJ,DCb,DDk,DFw,DD},DE…,DF–,DG®,DD±,DK¹,DFÜ,DJá,D!î,Dé-DK-DD!-D,%-D---D/9-D1C-D2L-DX^-DYc-D[k-DYm-DZq-D[}-D\Œ-DX‘-DY—-D[£-DY¥-DZ­-D[¹-D\Å-DYÊ-D6Õ-D7ã-DYh.D@o.DA‹.DB”.DC›.D7§.¶!$Q*Í! Ø!  å! ð! ü! " "  $" $2" (I" ,U" 0`" 4m"@z"€‹"€Äûÿÿ˜"€Èûÿÿ©"ÀQ*ª"€#Ìûÿÿ¶"@#Ä"€#ÐûÿÿÕ"À’*Ö"@ã"@ñ"À’*ò"à÷*ó"à÷*ô"€:Øûÿÿÿ"€:Üûÿÿ #€:àûÿÿ#Àx+#@ä%#Àx+&#à#,'#à#,(#€Fäûÿÿ0#€F´ûÿÿ9#Àb,:#@AC#€A¤ûÿÿK#Àb,L#àÜ,M#àÜ,N#€:ØûÿÿY#€:Üûÿÿe#€:àûÿÿq#À-r#@ä#À-€#à-#à-‚#€FäûÿÿŠ#€F´ûÿÿ“#À-”#@A#€A¤ûÿÿ¥#À-¦#à%-§#à%-¨#€2Ôûÿÿ²#À^-³#@V¼#À^-½#à‘-¾#à‘-¿#@VÈ#À‘-É#àÊ-Ê#€2ÔûÿÿÔ#ÀÊ-Õ#@VÞ#ÀÊ-ß#àÕ-à#àÕ-á#€7èûÿÿï#À.ð#àh.ñ#@Vú#Àh.û#ào.ü#€7èûÿÿ $À§. $à/ $à/ $$¯N/$ ž./Dð/D÷/DýH/Dþm/Dÿ‘/D™/D¸/DÖ/DžÞ/DŸü/D 0D¥ 0D 0D!0D/0D=0D\0Dz0DÏ‚0D—0DÏÄ0D!Î0DÚ0D ý0D!1DÏ1DÓ?1DÚp1DÜ‚1DàŠ1Dç¹1DÏÀ1D¡Í1D¢Ô1D£Þ1D¢2D"2D$2D%<2D&V2D'^2D.‚2D 2D¨2Dž¹2DŸã2D ï2D¡ó2D¢ú2D3D 3D 03D 93D ?3Da3Du3Dž3DϬ3DÓ¸3DÚã3DÜé3Dàõ3Dç!4DÏ(4D*24D+j4D.t4D4D¢”4D£ž4D¢Æ4DúÚ4Dì4$$ð/7$ îA$ î J$ îV$ îa$ ïs$ ï$ ï ’$€ñ¤÷ÿÿš$€ñ¨÷ÿÿ¥$€ñ¬÷ÿÿ¯$€òà÷ÿÿ»$€ó°÷ÿÿÇ$€ó´÷ÿÿÝ$€ôàÿÿÿë$(õ žû$À/ü$@%@%ÀÞ/%à0%@Î%@Î%%À‚0&%à—0'%€!À÷ÿÿ0%ÀÄ01%@Î:%@ÎC%€ÎÄ÷ÿÿO%ÀÄ0P%àÎ0Q%àÎ0R%€!À÷ÿÿ[%À1\%@Îe%@În%€ÎÄ÷ÿÿz%À1{%àÍ1|%àÍ1}%@†%@’%ÀÍ1“%à2”%€¸÷ÿÿ%À¹2ž%€¼÷ÿÿ¦%@²%À¹2³%à3´%à3µ%@ξ%@ÎÇ%À¬3È%à24É%€¸÷ÿÿÒ%À”4Ó%€¼÷ÿÿÛ%@ç%À”4è%àÚ4é%àÚ4ê%à5ë%$N5.5Dg5D‘5D’+5D”15D•85D–=5D—@5D˜H5D‘M5DqX5Dt|5D5D’5D‡›5D‰Ä5DŠÎ5D‹Ú5Dá5D6D˜96D™E6D›O6DœU6DŸX6D g6D|6D…6Dg”6Duª6Dx·6Dtº6DË6DÐ6D‚Ù6Dƒá6D‡7Du^7Do7D¥€7D¦œ7D§Ÿ7D¤¢7Dª¦7D­´7D®Ë7D¯Î7D°Ñ7D­Ó7DµÝ7D¶ö7D·ÿ7Dµ"8D½:8DÁ^8DÂj8DÃq8DÄŒ8DΕ8DÏ™8DÃ¥8Dgº8DÄÃ8DÇÐ8DÊÙ8DËî8DÌõ8DÓ9DÚ79DB9D“L9D”_9D•a9D‡i9ì%$g5& e& e !& f-& f>&@hG&€W&@hg&@ht&@h€&€iÔûÿÿ‘&@f¢&À5£&@¬&@·&À5¸&àX5¹&€ƒèûÿÿÇ&À7È&à7É&€‡èûÿÿ×&À7Ø&à^7Ù&€‡èûÿÿç&Ài9è&àÊ9é&€‡èûÿÿ÷&ÀÊ9ø&àå9ù&àå9ú&$äNå9.å9Dàå9D‘ö9D’:D”:D•:D–!:D—$:D˜,:D‘1:Dë<:Dí`:Dïw:Dðz:Dñ–:Döœ:D÷Ÿ:Dù¦:Dð®:Dñ¾:DôÌ:DðÏ:DþÔ:Dÿâ:D;D;D!;D ;;DA;DàL;DU;DX;D ^;Dd;D o;D™;DÛ;DÞ;D <D"<D*<D.<D;<D^<Db<Dh<Dw<D‚<D†<D(ª<D)²<D+Þ<D1é<Dú<D!=D#J=D"L=D$Z=D%h=Dðr=Dñy=Dôƒ=D‹=D.ç=D1õ=Dÿ>D)g>D¼>û&$àå9' Þ' Þ (' ß4' ßE'@áN'@á\'€áÜûÿÿg'€áàûÿÿt'€ãäûÿÿ…'Àå9†'@'@š'Àö9›'à<:œ'€ÿèûÿÿª'À;«'à;¬'€ÿèûÿÿº'ÀL;»'àU;¼'€èûÿÿÊ'ÀË;Ë'àÛ;Ì'€)èûÿÿÚ'ÀÔ<Û'àÞ<Ü'€èûÿÿê'À‹=ë'àç=ì'€ÿèûÿÿú'À>û'àg>ü'€)èûÿÿ (Àg> (à¼> (€èûÿÿ(À¼>(à?(à?($.N?.?D¢?D¥$?D¦/?D¬2?D³G?D´R?DCX?DDa?DFq?DD}?DE…?DFš?DG¯?DD¼?DKÆ?Dµõ?D¸@DÆ.@DÄ7@DÇ;@DËF@D‘H@D’W@D”i@D•p@D–u@D—x@D˜€@D‘…@DÏ“@DО@DÔ¥@D¹°@Dºá@D»ê@D¼ö@D½û@DkADC,ADD;ADFOADD[ADEcADFxADGADD›ADK£ADÃÊADÄÙADDâADKîADlöAD½BD¾BD¿BDÀBD®-BD¯2BDLBDKÁBD¦ÒBD¾ C($¢?4( @(  M( X( žb( žk( Ÿ}( Ÿ ‹(  $–(  (¢( ¡,´( ¡0Æ(@£Ñ(@£Ý(€¤Ìûÿÿè(€ù(@¤)@¤ )€¤Ðûÿÿ)@¡,)@¡>)À??)€¦èûÿÿM)À/?N)à2?O)€A´ûÿÿW)€AÄûÿÿ_)ÀX?`)àõ?a)@j)@u)ÀH@v)à“@w)€h´ûÿÿ)ÀA€)€kÜûÿÿˆ)€kàûÿÿ‘)À,A’)€AÄûÿÿš)À,A›)àÊAœ)àÊA)àÊAž)€h´ûÿÿ¦)ÀâA§)€kÜûÿÿ¯)€kàûÿÿ¸)ÀâA¹)€AÄûÿÿÁ)ÀâAÂ)àöAÃ)àöAÄ)àBÅ)€~äûÿÿÐ)ÀLBÑ)àÁBÒ)€A´ûÿÿÚ)€AÄûÿÿâ)ÀÁBã)àÒBä)€¦èûÿÿò)ÀðBó)à Cô)€¾èûÿÿ*À C*àJC*€¾èûÿÿ*ÀoC*àŽC*àŽC*${NŽC.ŽCDTŽCDWŸCDXªCD^³CDfÈCDlôCDtDDxDDzDDm&DDo_DDpDDqˆDDr DDs¥DDt¶DDw&ED3ED„=ED…TED‰_ED‘iED’xED”ŠED•‘ED––ED—™ED˜¡ED‘¦ED´EDŽ¿ED’ÌEDs×ED} FD~FD`%FDa*FD~DFD€IFDå[FDæfFDéŸFDë©FDìÚFD€GDGDX+GDælGDgˆGDsøGD]H*$TŽC1* M=* M J* MU* N`* Nk* O}* O ‹* P$¢* Q(®* Q,¹* Q0Æ* R4Ñ* R8Ý* S<ï* S@+€UÈûÿÿ +@U+€VÌûÿÿ+€VÐûÿÿ*+€VÔûÿÿ9+€VØûÿÿB+ÀŽCC+€XèûÿÿQ+ÀªCR+à³CS+@\+@g+ÀiEh+à´Ei+€€Üûÿÿt+€€àûÿÿ€+À[F+@äŽ+À[F+àG+àG‘+€XèûÿÿŸ+ÀMG +àlG¡+€€Üûÿÿ¬+€€àûÿÿ¸+ÀlG¹+@äÆ+ÀlGÇ+àˆGÈ+àˆGÉ+€sèûÿÿ×+ÀøGØ+à]HÙ+@~å+À]Hæ+àÑHç+àÑHè+$CNÑHé+ ú+dÑHN€üOû+dÑH,dÑH/,f0,<?,€M,è`†, ¢­,`¢Ö,@¢þ,0¢%-6a_-]a–-bKÑ-›@ . ¢B.² w.Î_§. ¦×.`£õ.`S/PS4/8£R/`ƒ/C`±/Wâ/€R0 R<0 Qi0¯J•0VªÉ0ÈQÕ0C°1(S;1èo1èR¥1‰×1ÀR 2ˆK;2o2‰`œ2´^Ô2 ¤ú2 U"3üTI3ø£o3_¨3)_Þ374 TM4`T‚4"¶4í4ÐT&5¡a5€$ž5o_Ó5Ó[6¡·66@ºi6ई6f©6äeÉ6¢¼ü6¸¤7]M7]|7eÿ¯7 WÝ7€V 8 V98mf8Œþž8HVª8ùSÚ8 e 9€b<9hen9‚û¢9lÑ9e:j¾;:Xdv:F÷¬: dä:‰ð;øcZ;qT•;Ø^Ò;¾Ô<öìP<€û‹<lYÈ<{x=\Û?> Xt>>K¦>ÌÜ>¯Ù?U^A?Vm?`m‡? m£?m¾?x¥Ø?X@,Y/@—Ø\@€h…@g®@õÍÛ@‘UAx+-AëlYA—ÕˆAÓ¹A.ÑêAd…B¨lNBkž}Bhl®B&&ßB4lCQÆBCltCjÅŸCØkÌCÛ.øC¸k&Dõ]Dtk–DøÀD¥ÁòD4k&E«ü`EkœE6„ÍEèjF\­/F¼j`FÿFxjÀF­"òFHj&GÉ$PGj|Gr0¬GÐiÞGÌÕH'5@Ht[iHzÀ˜HÔ¾ÅHîSI¦-IÀ¥ZI˜¥†Iˆ¥±IÚTïI"U*J›JiJ ¼¨JÀnâJ¾òK‘¹ZKàn›KlOÏK@rñKrLàq8L˜¦ZLBQLRÁLàpòLào#M¤üYMÿN‰M<¸ÀM¨qùMªµ,NhqaN?«™N0qÓNÊ¥OI¥CO¾;|OÖª¶OSçO™œPqNRP §uPচP¸¦¾P¨¦áP sQÆ™DQ¸˜wQY–²QhŽòQ/RÁJcR?MœR@¨ÃR¨ìRاSȧ;SûMuS%N¬SÑHçSyŠ"T¸§XTXˆT¦L¾T@©ÝT©þTè¨Uب=U€ukU›˜U’ÎUxvV3€?VDvzVÎyºVvüVow3W£ooWùm¨WMkáW÷HXØ©EX¬vOX¯vYXÜ©…X੽Xä©éXè©Y±v%Yì©LYð©{Y´v‡Y¶v“Y¼vŸYô©ÒYø©ýYü©1ZÀvCZ”ª[ZØ™fZ˜ª}ZÊ™‰Zœª£Z¹™¯Z ªÂZ¯™ÍZ¤ªêZ›™öZ¨ª [™[¬ª/[€™:[°ªM[v™X[´ªl[k™w[¸ª[^™™[¼ª°[P™¼[ÀªØ[=™ä[Ī\(™\Ȫ"\™.\̪G\ ™S\Ъj\ÿ˜v\Ôª‹\ó˜–\ت­\嘸\ܪÉ\ݘÕ\àªñ\ʘý\äª]¿˜]èª/]µ˜;]ìªQ]¨˜]]ðªo]Ÿ˜{]ôª]–˜™]øª­]‹˜¸]üªÐ]|˜Ü]«ó]n˜þ]«^g˜^«0^Z˜<^ «[^D˜g^«^3˜Œ^«œ^,˜§^«¹^#˜Å^«Ô^˜à^ «ô^˜_$«_ü—+_(«B_î—N_,«a_ä—l_0«…_Ô—_4«¨_Å—²_8«¿_Á—Ë_<«Þ_·—ê_@«`¤—`D« `ž—*`H«7`š—B`L«^`‡—i`P«ƒ`v—Ž`T«Ÿ`n—ª`X«¸`i—Ä`\«Ó`c—Þ``«ë`_—ö`d«aH—!ah«5a=—@al«Sa3—^ap«|a—ˆat«•a—¡ax«°a—»a|«Ða—Ûa€«ëa—öa„«bø–bˆ«-bç–8bŒ«RbÖ–]b«ibÓ–tb”«€bЖ‹b˜«bÇ–¨bœ«¶b–Âb «Óbº–ßb¤«òb°–þb¨« c«–c¬«1cš–=c°«Mc“–Xc´«jcŠ–vc¸«…c„–c¼«£cz–®cÀ«¼cu–ÈcÄ«Öcp–ácÈ«ñci–ýcÌ« dd–dЫ'd]–3dÔ«DdU–OdØ«edH–pdÜ«€dA–‹d૞d7–©d䫹d0–Ådè«×d'–âdì«ôd–ÿdð«e– eô«4e–?eø«Reü•]eü«oeó•ze¬…eñ•‘e¬Ÿe앪e¬¿eà•Ëe ¬ÛeÙ•çe¬þeË• f¬fÀ•(f¬=f´•Hf¬[fª•ff ¬vf£•‚f$¬Žf •™f(¬©f™•µf,¬Çf•Óf0¬áf‹•ìf4¬g• g8¬"gs•-g<¬9gp•Eg@¬Zgd•egD¬{gW•†gH¬›gK•¦gL¬¼g>•ÈgP¬Ög9•ágT¬ög-•hX¬h$•h\¬/h•;h`¬Oh•[hd¬xhþ”„hh¬’hù”žhl¬©hp¬µhö”Áht¬Óhí”Þhx¬êh|¬þhâ” i€¬ iÕ”,i„¬@iÊ”Liˆ¬bi½”niŒ¬…i¯”‘i¬¨i¡”³i”¬Ãiš”Ïi˜¬çi‹”óiœ¬j‚”j ¬)js”3j¤¬Djk”Pj¨¬gj]”sj¬¬ˆjQ””j°¬¡jM”­j´¬ÀjC”Ëj¸¬Üj;”èj¼¬ýj/” kÀ¬k#”)kĬ8k”DkȬUk”ak̬sk ”~kЬ‘k”kÔ¬«ký“¶kجÈkô“Ôkܬèké“ókà¬lÞ“lä¬!lØ“,lè¬GlÆ“Slì¬blÀ“mlð¬lµ“lô¬›l°“¦lø¬¶l©“Âlü¬Ñl£“Ýl­êlŸ“öl­m–“m­*m‰“5m ­Dmƒ“Om­Zm“fm­tm|“€m­Œm­Ÿmr“«m ­ºml“Æm$­Þm]“êm(­úmV“n,­n?“n0­&n“0n4­;n “En8­Pnî’Zn<­fnÌ’qn@­}n½’ˆnD­”n„’ŸnH­«nn’¶nL­ÂnH’ÍnP­Ùn(’änT­ðn’ûnX­oÜ‘o\­o`‘)o`­5o<‘@od­Lo‘Woh­co‘nol­zoé…op­‘oÙœot­¨o¾³ox­¿oŒÊo|­×oƒão€­ðodüo„­ pKpˆ­"p-.pŒ­;püGp­TpÈ`p”­mp¶yp˜­†p”’pœ­Ÿp…«p ­¸pƒÄp¤­ÑpkÝp¨­êpDöp¬­q8q°­q(q´­5qŽAq¸­NqÌZq¼­gq”sqÀ­€qhŒqÄ­™qH¥qÈ­²qÈŒ¾qÌ­Ëq¯Œ×qЭäq˜ŒðqÔ­ýqxŒ rØ­rPŒ"rÜ­/rŒ;rà­HrŒTrä­ar÷‹mrè­zrrì­“r싟rð­¬r狸rô­År”‹Ñrø­Þrh‹êrü­÷rZ‹s®sI‹s®)s6‹5s®Bsô‰Ns ®[sÔ‰gs®ts̉€s®sÁ‰™s®¦sŒˆ²s®¿spˆËs ®Øsà†äs$®ñsɆýs(® t±†t,®#t †/t0® ÒJD? üJDB ÿJDC KDD KDJ KDL KDM KDO +KDM 3Kô$: ÁJ.ž : Bž : Tž : fž@; už&= ªž€«ž@: ¿ž@: Ñž@: ãžÀÁJäžà>Kåž$}N>K.>KD >KDHKDJKDMKDZKæž$ >K Ÿ  4Ÿ@EŸ€ _Ÿ@ sŸÀ>KtŸàbKuŸ$$NbK.bKDÒ bKDÛ lKDÝ €KvŸ$Ò bK·Ÿ Ò ËŸ@Ò ߟ$&NˆK.ˆKDß!ˆKDá!’KDâ!”KDç!—KDé!¤KàŸ$ß!ˆK  ß!, @à!= @ß!Q ÀˆKR à¬KS $$N¬KT ¬K.¬KD†#¬KD‹#·KDŽ#ÁKD#ÇKD#ÎKD‘#æKD“#íKD•#òKDŸ#úKD#LD§#LD¨#LDª#LDš#$L‡ $†#¬KÀ  †#Ö  †# ê  †#þ @‡#¡€"¡€ ¢€¢€1¢€…¢€ ¤€¤€0¤€C¤€V¤€g¤€Þ¤€{¦€´¨€Ç¨€Ú¨€í¨€©€©€"©€|©€ª€!ª€4ª€Gª€Zª€kª€|ª€ª€ ª@ˆ#¯ª€‰#ôÿÿÿ½ª@†#ÓªÀ¬KÔªà3LÕª$‡N3LÖª3L.3LDª23LD¬2MLD¯2SLD´2ZLD¶2eLD·2sLD¶2zLD·2ƒLD¶2‰LD¯2‹LD°2LD¯2™L«$ª23L@« ª2V« ª2 k« ª2…«@«2–«€©«€Ã«€.¬€ª2ôÿÿÿC¬€ª2ðÿÿÿW¬€ª2ìÿÿÿp¬À3Lq¬à¦Lr¬$sN¦L.¦LDä@¦LDç@°LDŠÉLDÌLDŽÏLDÓLD•ÛLD–ÞLD—âLDœêLDê@õLDë@MDì@ MDî@"MDï@.MDœ4Ms¬$ä@¦Lª¬ ä@³¬@ä@¼¬€æ@ôÿÿÿȬ€æ@ðÿÿÿÓ¬€æ@ìÿÿÿݬÀ°LÞ¬à"M߬€æ@ôÿÿÿ묀æ@ðÿÿÿö¬€æ@ìÿÿÿ­À4M­à?M­$™N?M.?MD‚A?MD†AIMDæbMDçeMDépMD‰A{MDŠAŒMD‹AMDA¨MDŽA½MDAÉMDAÏMDŽAÞMDAêMDéðM­$‚A?MB­ ‚AK­€{®€Ž®€±®€ ¯€¯€-¯@‚A6¯€…AôÿÿÿB¯€…AðÿÿÿM¯€…AìÿÿÿW¯ÀIMX¯à¨MY¯€…Aôÿÿÿe¯€…Aðÿÿÿp¯€…Aìÿÿÿz¯ÀðM{¯àûM|¯$¼NûM.ûMD‘AûMD”AND•AND˜AND•A!ND˜A#N}¯$‘AûM½¯ ‘AƯ ‘A ѯ ‘AÛ¯@’A䯀÷¯€°€#°@‘A,°ÀûM-°à%N.°$*N%N.%NDšA%NDA4NDžA:NDŸAIND¡AXNDŸA`ND¡AiN/°$šA%Nl° šAu°@šA~°$LNqN.qND'BqND*B{NDT ”NDU ›NDV žNDW ¢ND\ ¬ND-BµND.BÆND/BÉND1BâND2BîND\ ôN°$'BqNº° 'Bð@'B̰€)Bôÿÿÿذ€)Bðÿÿÿã°€)Bìÿÿÿí°À{Nî°àâNï°€)Bôÿÿÿû°€)Bðÿÿÿ±€)Bìÿÿÿ±ÀôN±àÿN±$ŽNÿN.ÿNDµBÿND·BOD¸B!ODºB%O±€ªD»B.OD¼B:OD½B@OD¾BFOD¿BLODÀBRODÁBXODÂB^ODÄBdOD±$µBÿNz± µB…± µB ޱ µB—±€ª±€Æ±@·Bϱ@µBÚ±ÀÿNÛ±àlOܱ$mNlO.lODÆBlODÊBvODi&ODj&–ODk&™ODl&ODq&§ODÍB´ODÎBÅODÏBÈODÑBáODÒB÷ODÓB PDÔB#PDÕB9PDÖBOPD×BePDØB{PDÙBPDÚB™PDØBŸPDÙB«PDÚB·PDq&½PDÑBËPDÓBÜPDÒBíPD×BþPDÖBQDÕB QDÔB1Qݱ$ÆBlO² ÆB ²@ÆB)²€ÉBôÿÿÿ5²€ÉBðÿÿÿ@²€ÉBìÿÿÿJ²ÀvOK²àáOL²€ÉBôÿÿÿX²€ÉBðÿÿÿc²€ÉBìÿÿÿm²À½Pn²àËPo²$ÖNBQ.BQDÜBBQDßBPQDàBWQDâBiQDãBpQDåB~QDæB…QDèB“QDéBšQDëB¨QDìB¯QDîB½QDïBÄQDñBÒQDòBÙQDôBçQDõBîQDøBüQDõBRp²$ÜBBQ«² ÜB´² ÜB ¿² ÜBɲ@ÝBÒ²@ÜBÛ²@ÜBå²ÀBQæ²àRç²$ÅNR.RDúBRDýBRDþBRDÿB'RDC:RDC=RDCCRDCVRDCYRDC_RDCrRDCuRDC{RD CŽRD C‘RD C—RD CªRD C­RDC³RDCÂRDCÅRDCËRDCÚRDCÝRDCãRDCòRDCüRDCSDCSDC SD C1SDCESDCYSDCmSDÿBSè²$úBR ³ úB)³@üB2³@úB;³ÀR<³àS=³$ˆNS.SDCSDCšSDC«SDC½SDCÈSDCÑSDCÚSDCãSDCåS>³$CSu³ C~³ C ‰³@C’³@C›³@C¤³@C¯³ÀS°³àîS±³$_NîS.îSDÇCîSDËCøSD TD TD TD "TD &TD .TDÎC=TDÏCNTDÐCQTDÒCjTDÓC|TDÔCŽTDÕCšTDÓC TDÔC¬TDÕC¸TD ¾TDÒCÌT²³$ÇCîSõ³ ÇCþ³@ÇC´€ÊCôÿÿÿ´€ÊCðÿÿÿ´€ÊCìÿÿÿ(´ÀøS)´àjT*´€ÊCôÿÿÿ6´€ÊCðÿÿÿA´€ÊCìÿÿÿK´À¾TL´àÌTM´$ìNÚT.ÚTD×CÚTDÚCèTDÛCïTDÝCýTDÞCUDáCUDÞCUDáCUN´$×CÚT’´ ×C›´ ×C ¦´ ×C°´@ØC¹´@×C´@×CÌ´ÀÚTÍ´à"Uδ$HN"U."UDãC"UDæC3UDçC6UDèCBUDéCQUDêCTUDëCZUDíCiUDëCsUDíC|UDèC†UÏ´$ãC"Uµ ãCµ@ãC"µ$oN‘U.‘UDlD‘UDnD UDoD³UDqD·U#µˆªDrDÀUDsDÌUDtDÒUDuDØUDvDÞUDwDäUDxDêUDyDðUDzDöUD{DüUD|DVD}DVDDVLµ$lD‘Uzµ lD…µ lD ޵ lD—µ@nD µ@lD«µÀ‘U¬µàV­µ$…NV.VDDVDƒD VD„D6VD…DLVD†DbVD‡DxVDˆDŽVD‰D¤VDŠDºVD‹DÐVDŒDæVDDøVDŽD WDDWDD(WDD-WDŽD/WDD;WDDGWDDLWDDNWDŒD\WD‹DjWDŠD{WD‰DŒWDˆDWD‡D®WD†D¿WD…DÐWD„DáWDƒDòW®µ$DVൠDéµ@Dòµ$íNX.XD’DXD•DXD–DXD˜D*XD™D1XD›DCXDœDJXDžD\XDŸDcXD¡DuXD¢D|XD¤DŽXD¥D•XD§D£XD¨DªXDªD¸XD«D¿XD­DÍXD®DÔXD°DâXD±DéXD³D÷XD´DþXD¶D YD·DYDºD!YD·D(Yóµ$’DX&¶ ’D/¶ ’D :¶ ’DD¶@“DM¶@’DV¶@’D`¶ÀXa¶à,Yb¶$)N,Y.,YD¼D,YD¿D=YDÀD@YDÁDLYDÂD_YDÃDbYDÄDhYDÅD{YDÆD~YDÇD„YDÈD—YDÉDšYDÊD YDËD³YDÌD¶YDÍD¼YDÎDÏYDÏDÒYDÐDØYDÑDëYDÒDîYDÓDôYDÔDZDÕD ZDÖDZD×D#ZDØD&ZDÙD,ZDÚD?ZDÛDBZDÜDHZDÝDWZDÞDZZDßD`ZDàDoZDáDrZDâDxZDäD‡ZDâD‘ZDäDšZDßD¤ZDÜDµZDÙDÆZDÖDÚZDÓDîZDÐD[DÍD[DÊD*[DÇD>[DÄDR[DÁDf[c¶$¼D,Y“¶ ¼Dœ¶@¾D¥¶@¼D®¶À,Y¯¶àt[°¶$HNt[.t[DåDt[DçD[DèD[DéD¢[DëD­[DéD¶[DëD¿[DçDÈ[DëDÊ[±¶$åDt[à¶ åDé¶ åD ô¶@æDý¶@çD·@åD·@åD·Àt[·àÓ[·$_NÓ[.Ó[D­EÓ[D±EÝ[Dsö[Dvù[Dwü[Dz\D}\Dƒ\D„\D‡\DŠ\D%\D´E4\DµEE\D¶EH\D¸Ea\D¹Es\DºE‰\D»E›\D¼E­\D½E¹\D»E¿\D¼EË\D½E×\DÝ\D¸Eë\DºEü\D¹E ]·$­EÓ[T· ­E]·@­Ef·€°Eôÿÿÿr·€°Eðÿÿÿ}·€°Eìÿÿÿ‡·ÀÝ[ˆ·àa\‰·€°Eôÿÿÿ•·€°Eðÿÿÿ ·€°Eìÿÿÿª·ÀÝ\«·àë\¬·$HN].]D¿E]DÂE)]DÃE0]DÅE>]DÆEE]DÈES]DÉEZ]DËEh]DÌEo]DÏE}]DÌE„]DÏE†]­·$¿E]å· ¿Eî· ¿E ù· ¿E¸@ÀE ¸@¿E¸@¿E¸À] ¸à]!¸$rN].]DÑE]DÔEž]DÕE¡]DÖE­]D×EÀ]DØEÃ]DÙEÉ]DÚEØ]DÛEÛ]DÜEá]DÝEð]DÞEó]DßEù]DáE^DßE^DáE^DÜE%^DÙE6^DÖEG^"¸$ÑE]W¸ ÑE`¸@ÑEi¸$ÈNU^.U^DâEU^DäE`^DåEq^DæEƒ^DèEŽ^DæE—^DèE ^DäE©^DèE«^j¸$âEU^ž¸ âE§¸ âE ²¸@ãE»¸@äEĸ@âE͸@âEظÀU^Ù¸à´^Ú¸$_N´^.´^DžF´^D F¾^D¡FÐ^D¢FÜ^D¡Fá^D Fã^D¡Fï^D¢Fû^D¡F_Û¸$žF´^¹ žF"¹€¢¹@žF«¹$NN_._D¤F_D§F_D¨F_D«F#_D¨F%_D«F'_¬¹$¤F_ë¹ ¤Fô¹ ¤F ÿ¹ ¤F º@¥Fº@¤FºÀ_ºà)_º$'N)_.)_D­F)_D°F8_D±F;_D²FG_D´FV_D²F^_D´Fg_º$­F)_Zº ­Fcº@­Flº$FNo_.o_DµFo_D·Fz_D¸F‹_D¹F_D»F¨_D¹F±_D»Fº_D·FÃ_D»FÅ_mº$µFo_¨º µF±º µF ¼º@¶Fź@·Fκ@µF׺@µFâºÀo_ãºàÎ_äº$_NÎ_.Î_DMGÎ_DOGØ_DPGê_DQGö_DPGû_DOGý_DPG `DQG`DPG`åº$MGÎ_» MG$»@MG-»$NN`.`DSG`DVG"`DWG,`DZG=`DWG?`DZGA`.»$SG`e» SGn» SG y» SGƒ»@TGŒ»@SG•»À`–»àC`—»$'NC`.C`D\GC`D_GR`D`GU`DaGa`DcGp`DaGx`DcG`˜»$\GC`Ì» \GÕ»@\GÞ»$FN‰`.‰`DdG‰`DfG”`DgG¥`DhG·`DjGÂ`DhGË`DjGÔ`DfGÝ`DjGß`ß»$dG‰`¼ dG¼ dG &¼@eG/¼@fG8¼@dGA¼@dGL¼À‰`M¼àè`N¼$_Nè`.è`DHè`DHò`D HaD HaD HaDHaD H#aD H/aD H4aO¼$Hè`޼ H—¼€P½@HY½$NN6a.6aD H6aDHJÌÿÿÿ»¾ ?Jʾ @J Ù¾ AJè¾ BJø¾@DJ¿€DJØÿÿÿ ¿€DJÜÿÿÿ¿@FJ$¿€1¿€B¿€S¿@?Jb¿Àcc¿à¬fd¿$N¬fe¿¬f.¬fDÍJ¬fDÎJ¼fDÏJÃfDÐJÙfDÑJïfDÓJüfDÔJgDÕJ gDÖJgD×J#gDØJ5gDÙJGgDÚJLgDÛJTgDâJ^gDØJegD×JsgDÖJgDÞJgDßJ gDàJ´gDâJÂgDàJÉgDßJìgDÞJügy¿$ÍJ¬f“¿@ÍJ¡¿ ÍJôÿÿÿ°¿ ÍJðÿÿÿ¼¿@ÎJÌ¿€ß¿€þ¿€€$€7€J€]€{€ŸÂ€ ŀŀƀ&Æ€GÆ€eÆ€xÆ€–Æ€²Æ€7È€‚ÈÀ¬fƒÈà h„È$]N h…È h. hDÿJ hDKh“ÈlªDK6hD K>hDKPhœÈhªDK`hDKhhDKphDKxhDK¢hDK·hDKÂhDKàhDKêhDKóhDKþhDKiDK iDKiD KiD K(i¥È$ÿJ h¹È ÿJØÿÿÿÅÈ@ÿJÖÈ@KèÈ€KÜÿÿÿùÈ@KÉ@KÉ€Kàÿÿÿ+É€Käÿÿÿ6ÉÀ h7ÉàBi8É$9NBi9ÉBi.BiDCKBiDLKRiMÉtªDMKciDNKkiDOKuiDPK}iDQKŽiDRK–iDSK¤iDTK¬iDUK½iDVKÅi]ÉpªDfK jDgK$jDmKJjDnKPjDoKYjDwKcjDqKzjDrKˆjDsK›jDtKªjDuK¿jDvKÔjDwKòjDtKújDqKkDsKkDuK!kDrK,kDUK:kkÉ$CKBi…É@CK•É€DKÔÿÿÿ¦É@EK¹É€FKØÿÿÿÊÉ@GKÝÉ€HKÜÿÿÿðÉ€IKàÿÿÿÊ€JKäÿÿÿÊ€$Ê€CÊÀBiDÊàMkEÊ$ NMkFÊ@›.MkDTMkDU^kD^ek[ÊX®D_nkD…¨kD`²kDaµkDb»kDeÁkeÊxªD~ókDlD‚ lDƒlD…3lD=lD‚FlDfblDgulDk¤lDl¬lDm»lDnÑlDp×lDqölDrmDsmDt#mDf@mDy]mDmmmD|…mDs¨mDq¶mDpÄmD}ÜmnÊ$TMk­Ê TÁÊ T ÓÊ TåÊ€UäÿÿÿüÊ€VàÿÿÿË@W%Ë@X4Ë@ZCË€[ÐÿÿÿQË@\`Ë&]@›xË€–Ë@TªË@T¼Ë@TÎËÀMkÏËàùmÐË$¬NùmÑ˪.ùmD"ùmD) nD*4nD+7nD-@nD.GnDNSnDO^nDQinDOsnDQ|nDN†nDOnD)œnDQžnD6¨nD7±nD8ÀnD;ÉnD<ÛnD=ánD>änD?ÿnD@ oDAoDB$oDKuoDIoæË$"ùm%Ì "9Ì " KÌ "]Ì€#àÿÿÿoÌ@$~Ì@&Ì€'äÿÿÿ›Ì&(ª³Ì€ÑÌ@"åÌ@"÷Ì@" ÍÀùm Íà£o Í$ªN£o ÍL›.£oD·£oDË´oDîoDÌûoDÍpDÐ pDÑ)pDÒCpDÓRpDÖapD×tpDÝwpDÞ‘pDä¦pDå©pDè±pDëqD.qD=qDëLqDìiqDíqDîªqDïÉqDðèqDñrDò%rDó;rDô>rDõGrDöPrD÷YrDýbrDþxrD{rD—rDµrDÍrDÖêrDësDsD!sD,sDGsDÓTsDÒbsDÐpsDsDјsDîsDýsD"tDAtD`tD{tD–tD»tDÞÉtD×tDâtDítDûtD uDÝuDì;uDSuDíduDë~uDî·uDïþuDð;vDñnvDò—vDýÀvDÝvDè.wDKwD Yw!Í$·£ocÍ ·wÍ · ‰Í ·›Í€¸äÿÿÿ¯Í€¹àÿÿÿÁÍ€º°ŸÿÿÑÍ€»ÜÿÿÿäÍ€¼Øÿÿÿ÷Í€¾ØŸÿÿ΀¿´ŸÿÿÎ@À-Î@Á<Î@ÂK΀øŸÿÿ[Î@ÄjÎ@Åy΀ƼŸÿÿ‡Î€ÇÀŸÿÿ•΀ÈÄŸÿÿ£Î@ɲÎ&ÊL›Ê΀èÎ@·úÎ@· ÏÀ£o ÏàowÏ$ÌNowÏX›.owDˆowD}wD´·wD‘ÁwD”ÇwD•æwD–xD—xDšxD›/xDœExD[xDž^xDŸdxD jxD£mxD¤‰xDšŸxD¯·xD²ÄxD´ßxD–éxD—÷xD”yDœyD¬7yD­ByD•myD¬ŽyD£™yD®±y$Ï$ˆowaÏ ˆuÏ ˆ ‡Ï ˆ™Ï€‰äÿÿÿ­Ï€Šàÿÿÿ¿Ï@‹ÎÏ@ŒÝÏ@ìÏ@ŽûÏ&X›Ѐ1Ð@ˆCÐ@ˆUÐÀowVÐàÎyWÐ$_NÎyXÐd›.ÎyD ÎyD ÜyD ãyDêyD!zD ]zD!czD$izD%ˆzD&¢zD'±zD*ÀzD+ÕzD/ézD>ñzDT{DW({D[0{D\<{D]O{D^X{D_d{D`‚{Da”{DbŸ{Dc®{D$È{D|à{Dí{D€|D|D‚'|Dƒ=|D…[|De|D{|D‘|Dƒ§|D…©|D³|D€Ä|DÒ|D‚ã|D*ô|D'}D&}D%-}DyL}Dz[}D0†}D1¡}D2¸}D4»}D5Ù}D6ë}D7ö}D8~D`"~Db0~D>~DiS~DlY~Do\~Dp|~Dq’~Dr²~DsÄ~DtÓ~Dvâ~Dò~DD>Dy1Do?D_\DpyD1–D7³D5ÁDtÏDsÝDrëD4ùDq€mÐ$ Îy³Ð  ÇР  ÙР ëЀ äÿÿÿÑ€ àÿÿÿÑ€ Üÿÿÿ'Ñ@>Ñ€ÐÿÿÿNÑ@]Ñ@lÑ@{Ñ@ŠÑ@›Ñ@ªÑ&d›ÂÑ€àÑÀÎyáÑà3€âÑ$eN3€ãÑp›.3€Dæ3€DíD€øÑT®DîM€D€€DDð€Dñ“€Dò§€Dó©€DùÑ€DýÔ€D߀Dê€DDøDLDñWDoDóÒ$æ3€AÒ æUÒ æ gÒ æyÒ€çäÿÿÿ”Ò@è£Ò@é²Ò@êÃÒ@ëÔÒ&ìp›ìÒ€ Ó@æÓ@æ0Ó@æBÓÀ3€CÓà›DÓ$hN›EÓx›.›DÛ@›DÜ@¬DÝ@¿DðÓDûÚZÓL®DüãdÓP®DýìDþ‚DÿW‚Dm‚Dƒ‚Dß@™‚Dâ@ª‚D´‚D·‚D½‚DÂD Ì‚DNƒDQƒDR0ƒDSBƒDTQƒDUcƒDVuƒDW“ƒDÞ@±ƒDâ@¹ƒDÿÃDσDëƒDß@„DU„DT)„DS:„DRH„Dß@V„D f„Dl„D„D „D¬„D¾„DPÅ„DÕ„Dõ„D …D…D*…D2…DL…D!O…D$Z…D%f…D&n…D'‹…D(¢…D)Å…D*×…D+é…D†D†DK>†DLP†D„†D4¤†D5ĆD:Ó†D;æ†D<ì†D=ò†D>‡D?"‡D@-‡DA<‡DKY‡DLj‡Dx‡D5˜‡D4¦‡D&ƇD@æ‡D>ô‡D=ˆD*ˆD)-ˆD(;ˆnÓ$Û@›¡Ó Û@¬Ó Û@ µÓ Û@¾Ó@Ü@ÇÓ@Û@ÒÓÀ›ÓÓ€Þ@äÿÿÿäÓ€Þ@àÿÿÿõÓÀÓöÓ€îÜÿÿÿ Ô€ïØÿÿÿ!Ô€ðÔÿÿÿ6Ô€ñ¸ÿÿÿLÔ€ò¼ÿÿÿ^Ô@ómÔ€ôÐÿÿÿ{Ô@öŠÔ@÷›Ô€øÀÿÿÿ©Ô@ù¸ÔÀÓ¹Ôà™‚ºÔà™‚»Ô€Þ@äÿÿÿÌÔ€Þ@àÿÿÿÝÔÀ´‚ÞÔ€îÜÿÿÿõÔ€ïØÿÿÿ Õ€ðÔÿÿÿÕ€ñ¸ÿÿÿ4Õ€ò¼ÿÿÿFÕ@óUÕ€ôÐÿÿÿcÕ@örÕ@÷ƒÕ€øÀÿÿÿ‘Õ@ù ÕÀ´‚¡Õృ¢Õృ£Õ€Þ@äÿÿÿ´Õ€Þ@àÿÿÿÅÕÀÃÆÕ€îÜÿÿÿÝÕ€ïØÿÿÿñÕ€ðÔÿÿÿÖ€ñ¸ÿÿÿÖ€ò¼ÿÿÿ.Ö@ó=Ö€ôÐÿÿÿKÖ@öZÖ@÷kÖ€øÀÿÿÿyÖ@ùˆÖÀÉÖà„ŠÖà„‹Ö€Þ@äÿÿÿœÖ€Þ@àÿÿÿ­ÖÀ„®Ö€îÜÿÿÿÅÖ€ïØÿÿÿÙÖ€ðÔÿÿÿîÖ€ñ¸ÿÿÿ×€ò¼ÿÿÿ×@ó%×€ôÐÿÿÿ3×@öB×@÷S×€øÀÿÿÿa×@ùp×À„q×àV„r×àV„s×€Þ@äÿÿÿ„×€Þ@àÿÿÿ•×Àf„–×€îÜÿÿÿ­×€ïØÿÿÿÁ×€ðÔÿÿÿÖ×€ñ¸ÿÿÿì×€ò¼ÿÿÿþ×@ó Ø€ôÐÿÿÿØ@ö*Ø@÷;Ø€øÀÿÿÿIØ@ùXØÀf„YØàXˆZØàXˆ[ØàXˆ\Ø$½NXˆ]Ø„›.XˆDuAXˆDwAiˆDxA|ˆDzA„ˆrØ|ªD{AˆD7œˆD;£ˆD<æˆD=éˆD>ïˆDåIûˆDéI‰DA‰DB+‰DE.‰DH1‰DK:‰DNC‰DOI‰DP^‰DXi‰DYt‰D|A‚‰D}A†‰D€A—‰DY¡‰DX¯‰DëIº‰D>ò‰DU ŠDOŠDA3ŠDæIMŠD}AiЍØ$uAXˆãØ uAîØ uA ÷Ø uAÙ@wA Ù@uAÙÀXˆÙ€5äÿÿÿ)Ù€6àÿÿÿ;Ù€7ÜÿÿÿNÙ@8]Ù@9nÙÀœˆoÙ@>}Ù€>Ôÿÿÿ‡ÙÀûˆˆÙà‰‰Ùà‚‰ŠÙ€5äÿÿÿžÙ€6àÿÿÿ°Ù€7ÜÿÿÿÃÙ@8ÒÙ@9ãÙÀ¡‰äÙ@>òÙ€>ÔÿÿÿüÙÀº‰ýÙàò‰þÙ@> Ú€>ÔÿÿÿÚÀMŠÚàiŠÚàiŠÚàyŠÚ$!NyŠ.yŠD§yŠD±‡ŠD´ŠD¸˜ŠD¹ ŠDº¿ŠD»ЊD¼æŠD½üŠD¾‹D¿%‹DÀ+‹DÁ.‹DÂ4‹DÃ:‹DºD‹D×l‹DØ~‹DÙ‘‹DÚª‹DÛËDÝÖ‹Dàã‹Dâú‹D¹ŒD¼ŒDÙ=ŒD×KŒD»\ŒDØ‚ŒDÛŒDÚžŒD½¬ŒDÏÉŒDÐÚŒD¾÷ŒÚ$§yŠ\Ú §pÚ@¨Ú@©Ú€«ÜÿÿÿžÚ@¬­Ú€­àÿÿÿ»Ú€®äÿÿÿÉÚ@¯ØÚ@°çÚÀyŠèÚàéÚ$›NêÚ ª.D D %D OD RD- YD5 dD7 oD5 yD7 ‚D ŒD7 ŽD! ˜D" ªD# ³D$ ¼D% ×D& âD' îD( ŽD2 ŽD% /ŽD$ :ŽD0 RŽÿÚ$ BÛ  VÛ  hÛ  zÛ@ ‰Û@ ˜Û€ äÿÿÿ¦Û& ª¾Û€ÜÛ@ ðÛ@ Ü@ ÜÀÜàhŽÜ$TNhŽÜ”›.hŽD¬ hŽDÀ yŽD ³ŽDÁ ÀŽD ƎDÅ ÏŽDÆ îŽDÇ DÈ DË &DÌ 9DÒ <DÓ VDÙ kDÚ nDÝ vDà óD÷ Dø %Dà 4Dá QDâ wDã ’Dä ±Då ÐDæ ïDç ‘Dè #‘Dé &‘Dê /‘Dë 8‘Dì A‘Dò J‘Dó `‘Dõ c‘Dö ‘D÷ ‘Dø µ‘DË Ò‘Dà ê‘D ö‘D ’D ’D /’DÈ <’DÇ J’DÅ X’D u’DÆ €’D Ö’D å’D “D )“D H“D c“D ~“D £“DÓ ±“D ¿“D Ê“D Õ“D ã“D ñ“DÒ ”Dá #”D ;”Dâ L”Dà f”Dã Ÿ”Dä æ”Då #•Dæ V•Dç •Dò ¨•Dõ Å•DÝ –Dý 3–D A–,Ü$¬ hŽrÜ ¬ †Ü ¬ ˜Ü ¬ ªÜ€­ äÿÿÿ¾Ü€® àÿÿÿÐÜ€¯ °ŸÿÿàÜ€° ÜÿÿÿóÜ€± ØÿÿÿÝ€³ ØŸÿÿÝ€´ ´Ÿÿÿ-Ý@µ <Ý@¶ KÝ@· ZÝ€¸ ¸ŸÿÿjÝ@¹ yÝ@º ˆÝ€» ¼Ÿÿÿ–Ý€¼ ÀŸÿÿ¤Ý€½ ÄŸÿÿ²Ý@¾ ÁÝ&¿ ”›ÙÝ€÷Ý@¬ Þ@¬ ÞÀhŽÞàY–Þ$ñNY–Þ ›.Y–D} Y–D… g–D© ¡–D† «–D‰ ±–DŠ Ð–D‹ ê–DŒ ù–D —D —D‘ /—D’ E—D“ H—D” N—D• T—D˜ W—D™ s—D ‰—D¤ ¡—D§ ®—D© É—D‹ Ó—DŒ á—D‰ ï—D‘ ˜D¡ !˜D¢ ,˜DŠ W˜D¡ x˜D˜ ƒ˜D£ ›˜3Þ$} Y–tÞ } ˆÞ } šÞ } ¬Þ€~ äÿÿÿÀÞ€ àÿÿÿÒÞ@€ áÞ@ ðÞ@‚ ÿÞ@ƒ ß&„  ›&߀Dß@} Vß@} hßÀY–ißธjß$_N¸˜k߬›.¸˜DL ¸˜DM ̘DV Ó˜Dz ™DW ™DX ™D[ ™D\ -™D] K™Do N™Dw Y™Dx d™Dz ~™D[ ‹™Dt £™Dw °™€ß$L ¸˜¹ß L Íß L ßß L ñ߀M äÿÿÿà€N äûÿÿ à@O /à@P >à€`à@Q qà&U ¬›‰à€§à@L »à@L Íà@L ßàÀ¸˜àààÆ™áà$NÆ™âà´›.Æ™DBÆ™DB×™D Bê™D$ ò™÷àl®D% û™áp®D& šD' <šD( ?šD) EšD* KšD+ ]šD/ ešDD pšDE ršDF }šDG ‹šD!B™šD%BšD"B§šD%B¸šDG šD!BΚDF ÔšDG àšDE ðšDF ùšD, ›D- -›D/ 9›D0 D›D1 \›D2 s›D3 y›D4 ‚›D5 •›D6 ¤›D7 ¶›D0 Ø›DB ð›D1 œD? œD@ (œD, HœD6 bœD5 pœD? ~œD"B‰œ á$BÆ™Cá BNá B Wá B`á@Biá@BtáÀÆ™uဠäÿÿÿŒá€ àÿÿÿŸá@ ®á€ Üÿÿÿ¼á@ Ëá€! ÐÿÿÿÙá€" ÔÿÿÿçáÀò™èáà™šéဠäÿÿÿ†àÿÿÿâ@ "†Üÿÿÿ0â@ ?â€! ÐÿÿÿMâ€" Ôÿÿÿ[âÀš\âàΚ]†äÿÿÿt†àÿÿÿ‡â@ –†Üÿÿÿ¤â@ ³â€! ÐÿÿÿÁâ€" ÔÿÿÿÏâÀÔšÐâà‰œÑâà™œÒâ$ÓN™œ.™œD)™œD)§œD)®œD)µœD)¼œD)œD)ÈœD%)ÑœD&)ñœD')üœD()ÿœD+)D¢)D£)D¤)$D¥)2D§)ID¤)SD£)^D¢)iD&)tD%)‚D1)šD4)¡D5)±D6)¹D7)ÄD8)ÚD9)óD:) žDA)%žDB)EžDC)WžDD)]žDG)džDH)užDI){žDM)‡žDN)’žDO)¯žDP)ÆžDQ)ÏžDR)ÒžDS)ïžDT)ŸDU)!ŸDV)0ŸDW)3ŸD])@ŸD^)]ŸD_)vŸD`)ŸDa)‚ŸDb)’ŸDc)©ŸDd)ÊŸDe)ÜŸDf)ÿŸDg) Dh)1 Di)J Dn)Y Do)v Dp) Dq)“ Dr)œ Ds)¹ Dt)Ú Du)û Dx)¡D:),¡D9)=¡D8)N¡DA)_¡D›)~¡Dœ)¡D)¢¡Dž)´¡DŸ)É¡D)á¡Dž)ï¡D›)ú¡Dœ)¢D–)¢D7)"¢DB)F¢DG)T¢De)x¢D€)œ¢D)¼¢D‚)Õ¢Dƒ)î¢D„)£D…) £D†)£D‡)£Dˆ)#£D‰)*£DŠ)1£D‹)J£DŒ)\£D)u£D)Ž£D‘)¢£D”)¨£DŠ)º£DO)Ý£Dc)¤DT)$¤DS)5¤DU)F¤Dr)T¤DR)z¤Dd) ¤Di)®¤Df)¼¤Dh)ͤDg)Þ¤D)ï¤D)¥DŒ)*¥D‹);¥Óâ$)™œã )#ã ) 6ã@)Gã@)Yã@)hã€)äÿÿÿvã@)…ã€)àÿÿÿ“ã€)Üÿÿÿ¡ã@)²ã€)ÔÿÿÿÀãÀ™œÁãàI¥Âã$°NI¥.I¥Dõ(I¥Dù(Z¥Dú(a¥Dû(d¥D)l¥D )}¥D)¥Dü(™¥D)ž¥D )¶¥Ãã$õ(I¥ä õ(ä@ö(%ä@ø(6ä@õ(JäÀI¥KäàÊ¥Lä$NÊ¥Mäª.Ê¥Dl'Ê¥Dm'Ø¥Dq'ߥDs'æ¥Dt'í¥Dw'ô¥Dx'+¦D~'Y¦D'_¦D'h¦D‚'¦Dƒ'’¦D„'¡¦D…'§¦DŠ'®¦D‹'ЦDŒ'ç¦D'ð¦DŽ'ü¦D'§D',§D‘'E§D”'^§D•'a§D–'v§D™'‚§D'§DŸ'§§D¢'ħD£'Ô§D¬'ܧD¸'ç§D¹'ý§Dº'¨D»')¨D¼'<¨D¿'I¨DÀ'_¨DÁ'q¨DÂ'ƒ¨DÃ'™¨DÅ'·¨Dy'Á¨Dz'רD{'í¨DÃ'©DÅ'©DŽ'©Dƒ',©DÁ':©DÀ'H©DÂ'V©D¿'g©D»'x©Dº'†©D¹'—©D¸'¨©D¤'¹©D¥'Ä©D¦'Ú©D©'ð©Dª'ªD«'ªDŸ'=ªD«'NªDª'\ªD©'jªD{'xªD¥'‹ªDz'³ªDy'ĪD•'ÕªD‘'éªD'úªD' «D¦'«cä$l'Ê¥¤ä l'¸ä l' Êä l'Üä€m'äÿÿÿñä€n'Ôÿÿÿå@o'å@p'!å€q'àÿÿÿ/å@r'>å€s'ÜÿÿÿLå€t'ØÿÿÿZå@u'iå&v'ª借åÀÊ¥ åà?«¡å$uN?«¢åª.?«DÞ&?«Dß&M«Dé&T«Dê&‹«Dð&¹«Dñ&¿«Dó&È«Dö&ΫD÷&Ô«D'Ü«D'ä«D 'î«D '¬D' ¬D'A¬D'S¬D'Y¬D'g¬D'†¬D'ž¬D'µ¬D'»¬D'Á¬D 'ĬD!'á¬D"'ð¬D#'­D)'­D*'0­D+'G­D,'P­D-'Y­D.'o­D/'~­D0'­D3'Ÿ­D4'¾­D5'Ø­D6'ç­D9'ö­D:'®D?'#®D@'B®DA'Y®DB'_®DC'e®DD'{®DE'Š®DF'œ®DI'«®DJ'Á®DK'Ê®DL'ЮDM'ì®DN'û®DO'¯DS'¯Dë&?¯Dì&]¯Dí&{¯Dg'†¯Di'ˆ¯D '’¯D^'³¯Da'À¯Db'Ö¯Dc'è¯Dd'ú¯De' °Df'°Dg'0°Di'V°D'`°De'‰°Dd'”°Dc'¢°Db'°°Da'¾°Df'ϰD 'à°Dø&î°Dù&±Dú& ±Dû&±Dü&0±Dý&?±Dþ&J±Dÿ&Y±D'±D'±D'¶±D['á±D\'ì±D]'û±D['&²D\'1²D '<²Dí&e²Dþ&‡²Dü&•²D#'£²D"'±²D!'¿²D-'ͲD)'ù²D*'%³D3'S³Dû&³D0'¬³D/'º³D.'ȳD6'Ö³D5'ä³D?'ò³D:'´D4')´D9'\´D@'ˆ´DI'³´DF'Ü´DE'ê´DD'ø´DC'µDN'/µDM'CµDL'QµDS'µ¸å$Þ&?«öå Þ& æ Þ& æ Þ&.æ€ß&äÿÿÿCæ€à&¼ÿÿÿVæ€á&Àÿÿÿmæ€â&Äÿÿÿ~æ@ã&æ€å&Èÿÿÿ›æ€æ&Ìÿÿÿ©æ@ç&¸æ&è&ªÐæ€îæÀ?«ïæàªµðæ$k Nªµñæª.ªµD–&ªµDœ&¸µD&æµD &ìµD¡&ïµD¤&üµD¥&¶D¦&2¶D§&A¶Dª&P¶D«&V¶D¬&k¶D²&t¶D³&z¶D¶&„¶D·& ¶D¸&º¶D¹&ɶD¼&ضD½&Þ¶D¾&ó¶DÄ&ü¶DÅ&·DÈ&·DË&·DÐ&·DØ&#·DÚ&:·Dœ&D·DÚ&F·D¶&P·DÕ&h·D§&w·D¦&…·D«&“·D¤&§·D¥&Á·DÓ&Ù·D½&ò·D¹&¸D¸&¸D·&"¸ç$–&ªµ@ç –&Tç –& fç –&xç@—&‡ç@™&–ç@š&¥ç&›&ª½ç€Ûç@–&íç@–&ÿçÀªµèà<¸è$’N<¸èª.<¸Dv&<¸D{&M¸D’&y¸D|&ƒ¸D}&†¸D~&œ¸D&¢¸D€&¨¸D&±¸D‚&º¸Dƒ&׸D„&â¸D…&ð¸Dˆ&ö¸D&¹D’&¹D„&#¹Dƒ&1¹D}&<¹D&T¹D‚&c¹D‹&{¹è$v&<¸Uè v&iè v& {è v&è@w&œè@x&«è€y&äÿÿÿ¹è&z&ªÑè€ïè@v&é@v&é@v&'éÀ<¸(éà‘¹)é$UN‘¹*é ª.‘¹DL ‘¹DV Ÿ¹DW ͹DZ Ó¹D[ Ö¹De Þ¹Dn ºDo ºD{ 6ºD :ºD† CºD KºDo UºDp eºDq qºDr vºDs „ºD’ ºD“ “ºD– ˜ºD™ ›ºDo ¯ºD¡ źD¢ ʺD¨ »D« »D· »D¹ ,»Do 6»D¡ B»D¨ G»D« M»D´ q»D€ €»DV ¹»D¹ »»Dw Å»D\ Ø»?é$L ‘¹„é L ˜é L ªé L ¼é€M ØÿÿÿÌé@N Ýé€O Üÿÿÿíé@P ÿé@Q ê€R àÿÿÿê@S +ê&U ªCê€aê@L sê@L …êÀ‘¹†êà ¼‡ê$xN ¼. ¼DÊ ¼DÔ ¼D× ¼DÛ 1¼DÜ 9¼DÝ _¼DÞ {¼Dß ˜¼Dà µ¼Dá ѼDâ å¼Dã ë¼Dä î¼Då ô¼Dæ ú¼DÝ ½Dú ,½Dû >½Dü Q½Dý j½Dþ ƒ½D –½D £½D º½DÜ Ä½Dß Þ½Dü ý½Dú ¾DÞ ¾Dû B¾Dþ P¾Dý ^¾Dà l¾Dò ‰¾Dó š¾Dá ·¾ˆê$Ê ¼Íê Ê áê@Ë òê@Ì ë€Î Üÿÿÿë@Ï ë€Ð àÿÿÿ,ë€Ñ äÿÿÿ:ë@Ò Ië@Ó XëÀ ¼YëàÔ¾Zë$ËNÔ¾.Ô¾D$2Ô¾D)2â¾D*2è¾D-2î¾D.2¿D/2&¿D02,¿D12/¿D22B¿D32Q¿D42`¿D72r¿DD2¿DE2Š¿DG2¡¿D.2«¿D>2ÿD?2οDA2Ý¿DD2ï¿D22ÀD32 ÀD42$ÀD>2DÀD?2RÀD-2]À[ë$$2Ô¾Žë $2¢ë $2 µë@%2Äë@&2Óë@'2âë€(2äÿÿÿðëÀÔ¾ñëàzÀòë$¦NzÀ.zÀD:zÀD:‹ÀD:’ÀD:•ÀD:ÀD: ÀD8:¥ÀD::·ÀD:ÁÀD:ÈÀD%:ÑÀD&:ãÀD':ìÀD(:õÀD):ÁD*:ÁD+:'ÁD,:5ÁD5:MÁD+:aÁD):lÁD(:wÁD3:Áóë$:zÀ(ì :<ì@:Kì@:Zì€:äÿÿÿhì@:|ìÀzÀ}ìà¥Á~ì$+N¥ÁìÀ›.¥ÁDK2¥ÁDL2³ÁDS2ºÁD2íÁDT2÷ÁDU2ýÁDV2ÂDY2 ÂDZ2,ÂD_2;ÂD`2ZÂDa2pÂDb2vÂDc2yÂDd2ÂDe2ŸÂDf2®ÂDi2ÀÂDj2ÜÂDk2øÂDl2ÃDm2ÃDn2#ÃDo2)ÃDp2@ÃDq2OÃDr2^ÃDt2pÃD`2€ÃDw2˜ÃDx2§ÃDy2¼ÃDz2ÒÃD}2ßÃD~2êÃD2øÃD2ÄD~2 ÄD}2+ÄD_26ÄDZ2VÄDY2dÄDy2ÄDo2’ÄDk2¯ÄDi2½ÄDw2ÝÄDx2ëÄDd2ùÄDf2ÅDe2ÅDj2#ÅDr2@ÅDq2NÅDp2\Å•ì$K2¥ÁÍì K2áì K2 óì K2í€L2äÿÿÿí@M2)í@N28í€O2ÌÿÿÿFí@P2Uí@Q2dí&R2À›|퀚í@K2¬í@K2¾íÀ¥Á¿íàjÅÀí$ÅNjÅÁí$ª.jÅD’/jÅD—/xÅD³/¤ÅD˜/®ÅD™/´ÅDœ/½ÅD/ÑÅD¢/ÜÅD¥/ãÅD°/èÅD±/óÅD³/ ÆD°/ÆD/ÆDœ/*ÆD­/BÆ×í$’/jÅî ’/î ’/ .î ’/@î@“/Wî@”/fî@•/uî&–/$ªî@’/½î@’/ÏîÀjÅÐîàQÆÑî$çNQÆÒîÈ›.QÆDî.QÆDû._Æèî@¯Dü.hÆóîD¯Dý.qÆDŽ/«ÆDþ.µÆDÿ.»ÆD/ÁÆD/ÇÆD/ÐÆD/ÓÆD/õÆD /ÇD /ÇD/0ÇD/OÇD/cÇD/iÇD/xÇD/{ÇD/~ÇD/’ÇD/˜ÇD/§ÇD/¼ÇD/×ÇD/ãÇD/õÇD/0ÈDƒ/TÈD†/aÈD‡/sÈDˆ/…ÈD‰/—ÈDŠ/©ÈD‹/»ÈDŒ/ÍÈDŽ/ëÈD /õÈD /ÉD/ÉD /$ÉD!/3ÉD5/AÉD6/XÉD7/^ÉD8/dÉD9/€ÉD:/’ÉD;/¯ÉDÎD$/OÎD/{ÎDI/‰ÎDJ/’ÎDK/¡ÎD[/¯ÎD9/ÒÎDP/àÎD*/ÏD,ÖD?,1ÖD@,PÖDA,oÖDB,ŠÖDC,™ÖDD,¯ÖDE,²ÖDH,¸ÖDI,ÌÖDJ,ÒÖD?,ßÖDT,×DU,×DV,%×DW,8×DX,T×D[,a×D\,l×D^,‡×D[,‘×D>,œ×D9,¹×D8,Ç×DT,ä×DV,õ×D@,ØDW,'ØDH,8ØDU,^ØDC,lØDB,‰Øîò$+,—Õ#ó +,7ó +, Ió +,[ó@,,tó@-,ƒó€.,Üÿÿÿ‘ó@/, ó@0,¯ó€1,àÿÿÿ½ó&2,,ªÕó€óó@+,ô@+,ôÀ—Õôà—Øô$N—Ø.—ØDÓ1—ØD×1¥ØDØ1«ØDÙ1½ØDÚ1ÆØDÛ1ÏØDÜ1íØDÝ1øØDÞ1ÙDß1ÙDæ1&ÙDé11ÙDë1HÙDÞ1RÙDÜ1]ÙDÝ1fÙDÞ1qÙDÛ1~ÙDä1–Ùô$Ó1—ØMô Ó1aô@Õ1pô@Ö1ôÀ—Ø€ôà¯Ùô$N¯Ù.¯ÙDêE¯ÙDëE½ÙDòÈÙDóÎÙDôÔÙDõÚÙDöìÙD÷õÙDøþÙDùÚDú+ÚDû6ÚDüEÚD]ÚDhÚDvÚD„ÚDóE’ÚDŸÚDóE¨ÚDµÚD¾ÚDû×ÚDøåÚDýÚDïEÛDóEAÛDùNÛ‚ô$êE¯Ù¿ô êEÈô êE Ñô êEÚô@ðéô@ñøôÀÈÙùôà’Úúô@ð õ@ñõÀŸÚõà¨Úõ@ð)õ@ñ8õÀµÚ9õàÛ:õ@ðIõ@ñXõÀNÛYõà\ÛZõ$­N\Û[õ0ª.\ÛD \ÛD" jÛD^ –ÛD#  ÛD$ ¦ÛD' ¯ÛD( ÆÛD- ÕÛD. ÞÛDJ âÛD[ ìÛD\ ÷ÛD^ ÜD[ ÜD. #ÜDE 3ÜDF BÜD. QÜD/ aÜD0 ÜD1 ŸÜD2 ¾ÜD3 ÞÜD4 þÜD5 ÝD6 5ÝD7 8ÝD8 ;ÝD9 AÝD: GÝD@ MÝDA cÝDC iÝDD ‚ÝDE ÝDF µÝD( ÒÝD' àÝDX øÝDC ÞDQ >ÞDR PÞDS cÞDT vÞDU ÞDV §ÞDW ¼ÞDU çÞDQ õÞDR ßDV ßDT ßDS -ßD0 ;ßD/ vßD2 –ßD3 ÈßD4 óßD5 àD@ 4àqõ$ \Ûªõ  ¾õ  Ðõ  âõ€ Äÿÿÿòõ@ ö@ ö€ Èÿÿÿ ö€ Ìÿÿÿ.ö@ =ö@ Lö€ ÐÿÿÿZö€ Ôÿÿÿhö€ Øÿÿÿvö€ Üÿÿÿ„ö&! 0ªœö€ºö@ Ìö@ ÞöÀ\Ûßöàhààö$ NhàáöÜ›.hàD„hàD†vàD•}à÷öÜ®D–†àD—½àDòàDžøàD£þàD¦áD§&áD¨?áD©]áDªláD«~áD°áD³´áD¶ÕáD·ôáD¸ âD¹âDºâD»'âD¼KâD½eâD¾†âD¿•âDÀ§âDÁ¹âDÆÎâDÇåâDÌôâDÖ#ãD×CãDØ[ãDÙyãDÚ…ãDÛ—ãDܦãDݱãDÞÑãDßêãDàäDáäDâ#äDä5äDò@äDó_äDôäDõ˜äDö±äD÷ÈäDøÑäDùÚäDúÝäDûãäDüéäDýïäDþøäDåDåD/åD AåD aåD xåD {åDåD›åD­åD¿åDÌÑåDÎèåDÏöåDÓþåD¦æD<æD%HæD(UæD)kæD*}æD+ŒæD,žæD-°æD.ÂæD/ÔæD0ææD1üæD3çD˜$çD™:çDšPçD1fçD3hçD°rçDª˜çD«¦çD©´çD§ÂçDèD èD!*èD"CèD#\èD$uèD/ èD.±èD-¿èD,ÍèD+ÛèD*éèD)÷èD0éD(éD 'éD5éD#CéD!QéD"_éD·méDšµéD³ÈéD™îéD˜ÿéD¶êD½6êDÛêDÚêD›êD©êD·êDÅêDäêD»òêDå;ëDæZëDçqëDèwëDé}ëDê”ëDëŸëDì­ëDâÍëDáÛëDêéëDëôëDÁÿëDÀ ìD¿ìD¾)ìDÌ7ìDÇcìDÆqìDКìDÛìDÖïìDØíD×]íD‡íD´íDöìíD îD RîDõîDôÆîDóïDòMïDß~ïDÞ¡ïDÝÄïDæîïDå ðD<ðDSðDélð÷$„hà8÷ „L÷ „ ^÷ „p÷€…äÿÿÿ‰÷€†àÿÿÿž÷€‡¤ÿÿÿ¹÷@ˆÎ÷€‰¨ÿÿÿÞ÷€Š¬ÿÿÿñ÷€‹°ÿÿÿø@Œø@&ø€Ž´ÿÿÿ4ø€¸ÿÿÿBø€¼ÿÿÿPø€‘Üÿÿÿ^ø€’Àÿÿÿlø€“Äÿÿÿzø&”Ü›’ø€°øÀhà±øà‰ð²ø$!N‰ð³ø4ª.‰ðDx‰ðD…—ðD†ÅðD‡ËðDŠÑðDÔðDŽàðDïðD’ûðD“ñD˜!ñD™*ñDÍ8ñDÚBñDÛTñDÜcñDÝuñDÞ‡ñDàžñDލñD±ñD’½ñD×òñDÚÿñDÛòDÜ2òDÝMòD…mòDàoòD“yòD˜‚òD™‹òD£©òD¤»òD¥ÍòD¦ÜòD™äòDœøòDóDž9óDŸPóD¡SóD¢ióD£óD¥¡óD¦ªóD­²óD®îóD³ôD´ôD¹/ôDºNôD»môD¼„ôD½‡ôD¾ôD¿ôDÀ–ôDœôDòôDŸôDÆÏôDÇÚôDÈåôD®õD´õDÈ õDÇ.õDÆ9õD¡DõDÔ\õDÕgõDÖvõDÕ¤õDÔ¯õDœºõDÚõD¤þõD­"öD¹BöD³nöDÅ”öDÂÄöD»íöDº÷Éø$x‰ð ù xù x /ù xAù€y¼ÿÿÿQù@zeù@{vù€|ÀÿÿÿŠù€}Äÿÿÿù@~¬ù€Èÿÿÿºù€€ÌÿÿÿÈù@×ù€‚Ðÿÿÿåù@ƒôù&„4ª ú€*ú@x<ú@xNúÀ‰ðOúàF÷Pú$½NF÷Qúä›.F÷D+F÷D,T÷D6[÷D7÷D8–÷D9œ÷D<¥÷D=±÷D>À÷DAÌ÷DBî÷DCøDD øDEøDF'øDG6øDHEøDI`øDMrøDN‘øDAÇøDmßøDpìøDqþøDrùDt*ùD=4ùD6BùDtDùDBNùDjfùDkuùDqšùDp¨ùDM¶ùDGÓùDIáùDFïùDjýùDO úDPúDT,úDb0úDOsúDU~úDVúDW™úDX¢úDY¼úDZÇúD[ÒúD\ÝúDbúúD[ûDY"ûDX-ûDHJûDlbûgú$+F÷£ú +·ú + Éú +Ûú€,äÿÿÿíú@-þú@/û@0!û@10û@2?û€3ÐÿÿÿMû&5ä›eû€ƒû@+•û@+§ûÀF÷¨ûà‚û©û$<N‚ûªû8ª.‚ûD‚ûDûD—ûD ÎûDüûDüD!üD7üDUüDdüDsüDˆüD¤üD!¼üD$ÉüD%ßüD&ñüD'ýD)%ýD /ýD EýD [ýD'qýD)sýD}ýD‹ýD™ýD±ýD¼ýD%áýD&ïýD$þDþDþD 4þD WþD jþD {þÀû$‚ûúû ü  ü 2ü€äÿÿÿGü@Vü@eü@tü€Ôÿÿÿ‚ü&8ªšü€¸üÀ‚û¹üàŒþºü$ NŒþ.ŒþDõEŒþDΚþDÏ þDжþDѼþDÒ¿þDÓ×þDàâþD÷EùþDÓÿDÒÿDÛ&ÿDÝ1ÿDÏ@ÿDÛZÿ»ü$õEŒþùü õEý õE ý@Ëý@Ì*ýÀšþ+ýàùþ,ý@Ë;ý@ÌJýÀÿKýàeÿLý$ÙNeÿ.eÿD®eÿD²sÿD³yÿD´˜ÿDµ²ÿD¶½ÿD·ËÿDÄÖÿDÆíÿDµ÷ÿD¶DÀ&D·<D´GD¿_DÁjD³|D¿–Mý$®eÿ†ý ®šý@¯©ý@°¸ý@±ÇýÀeÿÈýà¡Éý$<N¡Êý<ª.¡Dø ¡Dý ¯D ÛDþ åDÿ ëD D D +D =D HD _D iDÿ tD ŒD ›D ¦D ¾D ÔD ìàý$ø ¡!þ ø 5þ ø Gþ ø Yþ@ù hþ@ú wþ@û †þ&ü <ªžþ€¼þ@ø Îþ@ø àþÀ¡áþàâþ$aNãþ@ª.D° D¹ Dõ ADº LD¼ RD¿ [DÀ rDÅ DÇ —DÈ ¤DÌ ¬DÏ »DÐ ÛDÑ øDÒ DÓ %DÔ <DÕ ?DÖ EDØ KDÙ bDÛ hDÜ DÝ DÞ DÅ ¨DÞ ¯DÅ ¸DÌ ¿DÒ ÍDÝ ÛDÜ æDÅ ñDê Dî Dñ $Dò /Dó :Dõ UDñ `Dò iDÀ DØ Dê §Dë µDì ÊDí ßD¿ Dê ,Dì =Dë HDÉ VDÏ •DÐ ÂDÛ èDà Dã Dà ,ùþ$° 6ÿ ° Jÿ ° \ÿ ° nÿ@± ÿ@² “ÿ€³ Ðÿÿÿ¡ÿ€´ Ôÿÿÿ¯ÿ€µ Øÿÿÿ½ÿ@¶ Ìÿ€· ÜÿÿÿÚÿ&¸ @ªòÿ€@° "@° 4À5à76$5N7.7Dx 7D| ED} KD~ aD jD€ pD ˆDŽ •D ¬D ¶D€ ÁD‰ ÙD‹ äD} óD‰ 7$x 7w x ‹@y š@z ©@{ ¸À7¹àº$áN.D+#D/#&D0#,D1#2D2#DD3#MD4#VD5#tD6#D7#ŠD8#•D?#­DB#¸DC#ÆDE#ÝDB#çD7#òD5#ýD6#D7#D4#"D=#:»$+#õ +#  +# @-#+@.#:À;àW<$?NW.WDì!WDû!eDü!kDý!qD"tD"ƒD"’D"¡D"¸D "ÇD "ÐD<" D " D "+ D"7 D"; D"@ D"b D"„ D"› D"ž D"´ D"à D"Õ D"ç D"ö D<"þ D "" D@"1 DQ"I DR"W DS"b DU"y DR"ƒ DQ"Ž D"™ D"§ D"µ D"à D!"Ñ D$"ò D%" D&"1 D'"S D("i D)"‚ D*"™ D+"œ D,"¢ D0"¨ D1"Á D2"Ó D3"å D4"ü D6"ÿ D7" D8" D9". D"g D2"u D1"ƒ D8"‘ D7"œ D@"ª DS" DL"É DM"Ì DN"á DM"ó D"þ D" DH"0 DI"; DJ"J DK"_ DL"t DI"¢ DH"­ DJ"¸ DK"à D)"Î D"ë D"$D6"AD0"sD$"žD%"¾=$ì!Wt ì!ˆ€í!¼ÿÿÿ˜€î!Àÿÿÿ¨@ï!¼@ð!Í@ñ!Ü€ò!Äÿÿÿê€ó!Èÿÿÿø@õ!@ö!@÷!%€ø!Ìÿÿÿ3€ù!ÐÿÿÿA€ú!ÔÿÿÿOÀWPàÝQ$†NÝRÝ.ÝD§ ÝD¬ îD² ñD¸ ûD· D½ DÆ DÈ (D¸ 2Dà J$§ ÝÔ § ꀩ äÿÿÿþ@ª  @« @§ 2ÀÝ3à\4$N\5\.\D# \D) mD- tD5 D6 ‹DC “DF •DG ˜DH ¤D] %D` (Dd +Dn 2Dy :D{ LD7 VD8 [D< cD= lDg €Dh ‰DK ‘DL ”DM œDH Dv 0D- GDQ QDR cDS lDT uDU DV ›DW §DX µDW ÒDU ÝDT èDt u$# \» # Ñ # è@$ ù€ @% €& àÿÿÿ'@' 6€( äÿÿÿD@# ZÀ\[à\$ÁN].DNDS1DT4DU:DX=D[DD^JDaPDbVDchDgnDjxDk{DlƒDm†Dn˜D|žD}¤D~²D„¸D‡¾D•ÍD–ØD—æD™úD–D•DbD},Dm=DrNDsWDttDu‹Dv™Du¹DtÄDÜD’êDDs›$Nß Nõ N  N N1 NE€OÜÿÿÿS€Qàÿÿÿa€Räÿÿÿo@N…@Nš@N­@NÁÀÂà)Ã$ N)Ä).)Dk)Do:DsADvODwRDVD‚¹DˆÇD‰ÉD¡ÑD¢ÖD¤èDòDýDôIDõI.DöI>D÷IWDùI[D÷Ilü$k): kP@m_€r@n@k—À)˜€òIäÿÿÿ¦€òIàÿÿÿ´€òIÜÿÿÿÁ@óIÌÀÍàtÎàtÏ$KNtÐt.tDÇ'tDÍ'…DÑ'‹Dà'–Dá'Dâ'²Dã'´Dä'¼Då'¿Dî'ÇDá'ÊDø'ÔDü'òDý'úDþ' Dÿ'D(D(<D(KD(VD(eDôI}DõI–DöI¦D÷I¿DùIÃD(ÍD(äDì'îDí'ðDî'üD(D(D÷I DÒ'(DÓ':DÔ'CDÕ'LDÖ'jD×'yDØ'„DÙ'˜D(µD(ÍDÕ'êDÖ' $Ç'tJ Ç'` Ç' t Ç'… Ç'  Ç'·@È'È@É'×@Ë'æ@Ì'õ@Ç'Àt€òIäÿÿÿ€òIàÿÿÿ#€òIÜÿÿÿ0@óI;À}<àÍ=€òIäÿÿÿK€òIàÿÿÿY€òIÜÿÿÿf@óIqÀ rà(sàt$žNu.DÊ DÎ #DÒ *DÓ 2DÙ LDÚ NDó XDõ jDà tDÓ |DôI”DõI­DöI½D÷IÖDùIÚD÷Ië±$Ê ó Ê   Ê @Ì / @Í > @Ê T ÀU €òIäÿÿÿc €òIàÿÿÿq €òIÜÿÿÿ~ @óI‰ À”Š àó‹ àóŒ $áNó ó.óD¬óD´D· DºD¾DÁDÂDÉ9Dò>DôUDÌ_DÐzDÞ~Dá„DщDÒ›DÓ¤DÔ­DÕËDÖÚD×åDØðDôIDõI!DöI1D÷IJDùIND÷I]D×eDÕpDÔ~Dí–Ê $¬ó  ¬#  ¬ 8 @®N @¯g @°v @²… @³” @¬© Àóª €òIäÿÿÿ¸ €òIàÿÿÿÆ €òIÜÿÿÿÓ @óIÞ Àß àeà à³á $ÀN³â ³.³D÷ ³Dý ÇDþ ÊD ÍD ÙD ÜD/ áD2 äD3 çD4 ëDE DF DH &DE 0D ;D PD& XD) [D fD yD ‚D ŽD ­D ¿D ËD âDôIúDõIDöI$D÷I=DùIKD XD@ pD “D ¦D ¯D »D ÖD äD ðD þD÷ID +D 9D DD O $÷ ³^  ÷ t  ÷ ‰ @ø ¢ €û Èÿÿÿ° €ü Ìÿÿÿ¾ @÷ Ô @÷ é À³ê €òIäÿÿÿø €òIàÿÿÿ €òIÜÿÿÿ €óIÐÿÿÿ Àú àX €òIäÿÿÿ- €òIàÿÿÿ; €òIÜÿÿÿH €óIÐÿÿÿR ÀS à+T àlU $¹NlV ì›.lDa lDc zDn Do ËDp ÑDåIÚDéIâDs Dt D„ D… D† 1Dƒ 7D„ @D… ID‘ QD’ [D“ ^D‘ tD’ {D“ €D‘ …Dœ D ¡Dž ²DŸ ÂD  ÅD° ÊD² äDn îD² ðDž úDª D« !D­ 4Du CDv UDw ^Dx gDy …Dz ”D{ ŸD| ®Dœ ËDëIèDp  DæI: Dª ] D« k D{ y Dy ‡ Dx • l $a l   a ²  a Ä  a Ö €b äÿÿÿé €c àÿÿÿ €d Üÿÿÿ €e Øÿÿÿ- @f > @g M @i \ @j k @l z &m ì›’ €° @a  @a Ô ÀlÕ @p ã ÀÚä àå @p ó Àèô à õ @p À: à] ಠ$FN² œ.² DúG² DüGà DýGÖ DÿGÞ D¶ ê D¹ ñ Dº &!D» )!D¼ /!DåI;!DéIC!D¿ e!DÀ h!DÁ z!DÄ €!DÌ Ž!DÍ ™!DH§!DH«!DHµ!DHÆ!DÍ Ð!DHÜ!DÌ â!DÍ ë!DÀ û!DëI "D¼ D"DÉ \"DæIq"DH"$úG² X úGc úG l úGu@üG~@úG‰À² Š€¶ äÿÿÿ¥@· ´Àê µ€¼ ÔÿÿÿÂÀ;!Ãàe!Äà§!Å€¶ äÿÿÿà@· ïÀÐ!ðàÜ!ñ€¶ äÿÿÿ @· Àâ!€¼ Ôÿÿÿ)À "*àD"+€¼ Ôÿÿÿ8Àq"9à":à";à"<$ëN"=œ."D’F"D”F®"D•FÁ"D—FÉ"Da Ø"Dd ß"De #Df #Dg #DåI)#DéI1#Dh X#Di [#Dj i#Dr q#Ds |#D˜FŠ#DœFŽ#D™F˜#DœF©#Ds ³#D˜F¿#Dr Å#Ds Î#Di Þ#DëIï#Dg '$Do ?$DæIT$D™Fp$R$’F"Œ ’F— ’F   ’F©@”F²@’F½À"¾€a äÿÿÿÙ@b èÀØ"é€g ÔÿÿÿöÀ)#÷àX#øàŠ#ù€a äÿÿÿ@b #À³#$à¿#%€a äÿÿÿ@@b OÀÅ#P€g Ôÿÿÿ]Àï#^à'$_€g ÔÿÿÿlÀT$màp$nàp$oà€$p$ãN€$.€$D“ €$D— Ž$D˜ ”$D™ š$DåI $DéI¨$Dš Î$D› é$Dœ %D© %Dª "%D¬ 9%D© C%Dš N%D¦ f%DëIu%D™ ­%Dœ Ç%D› Õ%D¤ í%DæI &q$“ €$´ “ È “ Ü@” ë@• ú@–  À€$ @™ À $àÎ$@™ (Àu%)à­%*@™ 8À &9à&&:à&&;$¦N&&<œ.&&DÄ.&&DÅ.4&DÌ.;&R<¯DÍ.D&DÎ.€&DÏ.†&DÐ.Œ&DÑ.’&DåI›&DéI£&DÔ.Æ&DÕ.è&DÖ.'D×.'Dâ.@'Dã.O'Dæ.\'Dç.j'Dè.x'Dê.’'DÍ.œ'Dê.ž'Dç.¨'Dæ.¶'DÔ.Á'DëIÞ'DÑ.(DÖ.0(Dâ.>(DÕ.L(Dá.d(DæI(DØ. (DÙ.«(DÜ.±(DÞ.Ñ(DØ.á(DÜ.ì(]$Ä.&&” Ä.¨ Ä. º Ä.Ì€Å.äÿÿÿ߀Æ.àÿÿÿñ@Ç.@È.@É.&Ë.œ6€T@Ä.f@Ä.xÀ&&y@Ñ.‡@Ñ.’À›&“àÆ&”@Ñ.¢@Ñ.­ÀÞ'®à(¯@Ñ.½@Ñ.ÈÀ(Éà (Êà )Ë$ãN )Ì ). )D¹2 )D¾2)D¿2)DÂ2))DÄ2B)DÅ2L)DÉ2P)DåJV)DéJ^)DÊ2)DË2“)DÎ2–)DÑ2¡)DÄ2±)DÅ2»)DÆ2¿)DÛ2ä)DÜ2ö)DôI *DõI"*DöI2*D÷IK*DùIS*Dß2[*Dà2i*Dá2€*DÒ2Š*DÊ2¡*DÂ2·*Dß2Ô*DæJß*D÷Iþ*DÛ2 +DÜ2+DëJ(+D×2X+ü$¹2 )2 ¹2H ¹2 `€º2Ðÿÿÿs€»2Ôÿÿÿ@¼2À )‘@É2ŸÀV) à)¡€òIäÿÿÿ¯€òIàÿÿÿ½€òIÜÿÿÿÊ@óIÕÀ *Öà[*×@É2åÀß*æàþ*ç€òIäÿÿÿõ€òIàÿÿÿ€òIÜÿÿÿ@óIÀþ*à +@É2+À(+,àX+-àx+.$oNx+/Dª.x+Dø+x+Dÿ+†+D(,²+D,¼+D,Â+D,Î+D,ç+D,ñ+D ,ù+DåJÿ+DéJ,D ,*,D ,<,D,?,D,[,D,u,D,„,D,–,D, ,D,¨,D,Í,D ,ß,D",ò,D%,ÿ,D&, -D(,(-D ,2-D,C-D,T-D,b-D%,-D,Š-D ,§-D,µ-DæJÆ-DëJå-D,.D,#.D,A.D,W.D,b.D,m.D,}.D,š.D,¨.D,³.D,¾.E$ø+x+u ø+‰ ø+ › ø+­€ù+àÿÿÿÀ@ú+Ï€û+äÿÿÿÝ@ü+ì@ý+û&þ+Dª€1@ø+C@ø+UÀx+V@ ,dÀÿ+eà*,f@ ,tÀÆ-uà.vàÛ.w$cNÛ.xHª.Û.D·/Û.D¿/é.Dó//DÀ//DÁ/%/DÂ/./DÅ/1/DÆ/G/DÔ/i/DåJo/DéJw/DÕ/š/DÖ/¬/DÚ/¯/DÛ/µ/DÜ/Ê/Dß/Ó/Dà/ë/Dá/0Dâ/0DÆ/%0DÌ/+0DÍ/L0DÎ/U0DÑ/]0DÒ/|0DÓ/–0DÛ/³0DÕ/Ç0Dâ/Ø0Dá/æ0DÆ/ô0DÅ/1Dì/ 1Dï/-1Dð/;1Dñ/I1Dó/d1Dï/n1Dð/w1DÌ/1Dç/­1DÑ/½1DÒ/Ú1Dê/ò1DæJ2DÔ/)2Dë/A2Dß/f2Dà/ƒ2DëJ 2Ž$·/Û.À ·/Ô ·/ æ ·/ø€¸/Ðÿÿÿ €¹/Ôÿÿÿ @º//@»/>€¼/äÿÿÿL@½/[&¾/Hªs€‘@·/£@·/µÀÛ.¶@Ô/ÄÀo/Åàš/Æ@Ô/ÔÀ2Õà)2Ö@Ô/äÀ 2åàÐ2æàÐ2ç$õNÐ2èÐ2.Ð2D’Ð2D—Þ2D˜å2D™ì2D›ó2Dœù2Dÿ2D¡3D¢3D£03D¤F3D¥\3D¦r3D§‹3D¨‘3D©—3Dª3D«¤3D¬«3D­²3D®É3D¯Ø3D°ê3D±ù3D²ÿ3D¶ 4D·.4D¸D4D¹Z4Dº`4D»g4D¼4D½š4D¾©4Dƾ4DÇá4DÈ5DÉ5DÊ 5DË'5DÌC5DÍ\5DÎu5Dè„5D¸˜5Dðº5DñÐ5Dòæ5Dóü5Dô6D÷'6Dø06Dù>6DûU6D£_6Dï~6Dø›6D÷¦6Dð´6DñÅ6DòÖ6Dóç6D¢õ6DÆ7DÓ47DÔQ7DÕn7DÙ‹7DÇJ‘7DÈJ¥7DÚ­7DÛ·7DÜÂ7DÞÆ7DïÒ7D­à7DÛý7DÝ8DÞ8Dß)8DàB8Dá[8D¾y8D½8D¼›8DÕ¬8DÔ½8DÓÎ8D»ß8D°9D¯9D®9DÉJ-9DÙA9DÎe9DÍs9DÌ„9Dá•9Dà¦9Dß·9DÞÈ9#$’Ð2d ’z ’ Ž ’¦ ’» ’Ï€“Ìÿÿÿâ@”ñ@•@–€—äÿÿÿ€˜àÿÿÿ+€™Üÿÿÿ9@šHÀÐ2I@ÙUÀ‘7Và­7W@ÙcÀ-9dàA9eàå9f$Nå9gœ.å9Dy=å9Dz=ö9D¦=ý9}P¯D§=:ˆT¯D¨=:“X¯D©=:Dª=b:D«=h:D¬=n:D­=t:D½=z:DÀ=ƒ:DÁ=Ž:DÂ=–:DÈ=œ:DÉ=¥:DÏ=´:DÒ=»:DÓ=Ð:DÖ=è:D×=ó:DØ=û:DÙ=;DÚ=,;DÜ=/;DÝ=M;DÞ=\;Dß=g;Dà=v;DÈ=;DÉ=Ÿ;DÏ=·;DÒ=¾;D¾@ë;DÁ@E<DÄ@R<DÅ@g<DÆ@|<DÇ@‘<DÈ@¦<DÉ@»<DÊ@Ð<DË@å<DÌ@ú<DÍ@=DÎ@$=DÏ@9=DÐ@N=DÑ@c=DÒ@x=DÓ@=DÔ@œ=DÕ@®=DÖ@À=D×@Ò=DÙ@ì=D©=ù=DÙ@û=Dé=>Dê=9>Dù=A>Dü=H>Dÿ=O>D>V>D>z>D>Ô>D>Ü>D>û>D >?D >?D >6?D >K?D>V?D>e?DÖ@”?DÕ@¥?DÔ@¶?DÓ@Ç?DÒ@Õ?DÑ@ã?DÐ@ñ?DÏ@ÿ?DÎ@ @DÍ@@DÌ@)@DË@7@DÊ@E@DÉ@S@DÈ@a@DÇ@o@DÆ@}@DÅ@‹@DÄ@™@Dë=§@Dì=Æ@Dí=Ü@Dï=å@Dð=ADñ=ADò=ADó=1ADS>[AD >‹AD£@¥AD¤@¾AD¨@ÏAD©@ÝAD¶@âAD«@òAD¬@ BD­@BD®@BD¯@%BD>1BD>[BD>gBD>oBD>†BD >›BD!>·BD">×BD#>æBD$>þBD%>CD&>CD'>*CD)>-CD*>ICD+>^CD,>sCD1>ˆCD2>˜CD>>¶CD?>ÙCD@>áCDA>òCDm>DDn>DDs>0DDt>KDDy>ZDDz>|DD{>˜DD|>¾DD}>ÓDD~>ïDD>øDD€>ED‚> EDƒ>$ED„>3ED…>HEDŠ>]ED‹>EDŒ>›ED>ÁEDŽ>ÛED>õED>FD‘> FD“>FD”>6FD•>JFD–>dFD›>xFDœ>‹FD¡>¥FD¢>±FD«>¹FD¬>ÅFD­>ÉFD®>âFD¯> GDµ>&GD¶>>GD·>^GD¸>mGD¹>‡GDº>–GD»>ŸGD½>¨GD¾>ÔGD¿>îGDÅ>HDÆ>*HDÇ>@HDÈ>IHDÉ>LHDÊ>UHDË>XHDÌ>rHDÍ>†HDÎ>šHDß>ÄHDà>êHDá> IDâ>$IDì>8IDù>EIDú>VIDû>hIDü>|IDý>~IDÿ>’ID?ID?°ID?ÄID?ËID?ÚID?ôID ?÷ID?JD?+JD?`JD?‹JD&?“JD'?ËJD6?ÓJD7?íJDn?óJD?KDr?KDs?4KDt??KDu?GKDv?iKDw?ƒKDy?ŒKDz?ªKD{?ÄKD|?ÏKD}?ãKDì=LDV>4LDè>^LD¡@~LD¢@LD>ÎLD >MD>-MDÙ=bMD½@zMDÝ=èMDß=öMD6>ND7>NDÜ=BND¾@ZND¡@wND½@…ND>“ND @ODð=6ODï=DOD >kODO>¾ODP>áOD>úOD >PD>PD7>$PD >2PDB>kPDC>…PDD>ŽPDE>PDF>»PDG>ÐPDH>ÛPDI>êPD6>QDB>?QDm>iQD>ˆQDn>ºQDy>ÈQD#>RD)>ERDt>€RD">ŽRDm>œRD‚>éRD{>#SDs>BSD$>sSD¶>ÍSD!>ìSDS>UTDT>oTDU>xTDV>‰TDW>¨TDX>ÂTDY>äTD\>ùTD_>UD`>*UDa>DUDc>SUDd>mUDe>‡UDf>¡UDB>µUD1>ÚUD}> VD|>^VD,>lVD+>zVD*>ˆVD)>–VD{>¹VDŠ>îVDS>IWDH>lWDF>zWD…>ˆWD“>–WD„>õWDƒ>XDE>XD½>[XD_>zXD\>¥XDY>³XDX>ÁXDc>YDV>.YDŽ>QYD`>¦YD¤>ðYDc>ZD›>RZDµ>·ZD£>"[D¤>;[D¥>e[DŒ>ˆ[D ?ã[D>?T\D??w\D@?\DA?—\DB?²\DC?»\DD?Ï\DE?Ú\DF?]DG?]DH?2]DJ?;]DK?S]DL?m]DM?]DJ?²]Df?(^DG?M^Di?e^DE?Þ^Db?ö^DA?o_D)?‡_D@?à_DV?ý_DW?`DX? `DY?1`DZ?L`D[?f`D\?‚`D_?œ`Db?°`Dc?Ì`Dd?â`Df?ë`Dg?aDh?aDi?5aDj?RaDk?laDi?«aDh?ÎaDf?ebDc?æbDb?gcD[?ŠcDY?dDV?,dD®>IdD­>´dD·>eD¶>-eDû>¢eDú>#fDî>¦fDï>¿fDð>ÅfDñ>ÌfDò>ÓfDß>ßfDå>÷fD–@gDÆ>ggD×>gDØ>“gDÚ>«gDÛ>ÄgD½>ÙgD¸>DhDÅ>¯hDæ>ÌhDç>êhDè>iD6?iD?œiD? jD¤>ŒjD£>ýjD?dkD?ƒkD?kD? kD?¾kD?ØkD?ãkD ?÷kDƒ?lD?ˆlD?¥lD?ÂlDy?ßlDv?pmDu?mDƒ?ªmD„?¾mD…?ÉmD?ÝmDÇJãmDÈJûmDž?nDŸ?)nD ?CnD¡?[nD¢?unD£?~nD¤?„nD¦?ŠnD§?¦nD¨?ÀnD©?ÚnD¬?înD¯?ûnD°?&oD¿?.oDÀ?qoDÏ?yoDÐ?’oDÑ?«oDÒ?ÀoDÓ?ÚoDÔ?ãoDÕ?ìoDÙ?ïoDÚ? pDÛ?5pDÜ?OpDß?ipDà?…pDá?špDâ?´pDã?½pDæ?ÀpDç?ÙpDè?ópDê?qDë?qDì?8qDí?\qDî?pqD¬?ŠqDò?–qDó?¼qDô?ÜqDõ?öqDø? rDù?0rDú?PrDû?jrDþ?~rDÿ?‡rD@¡rD@­rD@ÎrD@ÚrD@ârD @ýrD@sD@=sD@csD@}sD@“sD@™sD@ŸsD@¨sD@±sD@ÍsD@çsD@ûsD@tD@%tD(@ItD)@dtD/@ŠtD0@µtD3@½tD4@ÙtD9@ítD:@uD;@)uD<@2uD=@AuD>@[uD?@ouD@@‰uDA@¢uDC@¼uDR@ÇuDS@óuDT@vDU@-vDZ@GvDÇJMvDÈJavD[@ivD\@‰vD]@vD^@ÉvD_@évD`@wDa@%wDb@?wDc@YwDe@\wDf@xwDg@’wDh@¬wDk@ÀwDl@èwDì?xDç??xDŸ@YxDê?ÆxDç?ùxDæ?$yDá?YyDà?îyDÅ?zDß?yzD±?‘zDÙ?{DÒ?S{DÑ?Ä{DÏ?O|DÁ?l|DÂ?|DÃ?©|DÅ?²|DÆ?Ð|DÇ?ê|DÈ?õ|DÉ? }DÅ?”}DÂ?±}DÁ?Î}D±?ë}D²?~D³?(~Dµ?1~D¶?K~D·?e~D¸?p~D¹?„~Dµ?¡~D²?¾~D±?Û~Db@ø~Dm@‡Dn@ŸDo@¹Dq@ÂDr@àDs@úDt@€Du@€Dq@¨€Dn@AD[@YDm@ÚDZ@òD`@i‚De@º‚D]@IƒD[@؃DÉJõƒDZ@ „DS@&„DR@©„DD@,…DE@K…DF@]…DH@f…DI@„…DJ@˜…DK@£…DD@·…DE@Ô…DH@#†D@@º†D=@׆D:@Z‡D9@ç‡D3@ˆD|@ˆD}@§ˆD~@½ˆD@ƈD€@ψD‚@؈Dƒ@øˆD„@ ‰D‰@&‰DŠ@L‰D‹@f‰DŒ@o‰D@x‰DŽ@”‰D@®‰D@ȉD“@܉D”@ŠD•@"ŠD–@<ŠD”@·ŠD“@>‹D@‹DŠ@Ü‹D‰@YŒD‚@vŒD}@D|@PD(@ÍD@JŽD@ÕŽD@2D@ÃD@TD#@qD@šDù?·Dø?öDó?‘Dò?¨‘D¦?Å‘D¡?â‘D ?ÿ‘Dž?z’DÉJ—’D?«’Dˆ?È’D‰?ß’DŽ?ù’D?“D?3“D‘?9“D’?E“D“?]“D”?w“D•?‘“D–?«“D’?¹“D?0”DŽ?Á”Dˆ?8•Dƒ?U•Dr?r•D(?•D)?®•D*?È•D,?Ë•D-?å•D.?ÿ•D/? –D0?–D,?;–D)?X–D(?u–Dè>’–ž$y=å9Ö y=è y= ú y= €z=äÿÿÿ#€{=àÿÿÿ9€|=ÜÿÿÿR€}=Øÿÿÿj€~=_ÿÿz€=ÔÿÿÿŠ€€=Ðÿÿÿ €=Ìÿÿÿ³€‚=ÈÿÿÿÈ€ƒ=Äÿÿÿ瀄=Àÿÿÿ€…=¼ÿÿÿ€†=_ÿÿ/€‡=¬÷ÿÿG€ˆ=¬_ÿÿ\€‰=¬ïÿÿp€Š=¬çÿÿ‰€‹=¬ßÿÿ£€Œ= _ÿÿ¾€=$_ÿÿÏ€Ž=(_ÿÿè€=,_ÿÿ€=0_ÿÿ€‘=4_ÿÿ-€’=8_ÿÿE€“=<_ÿÿZ€”=@_ÿÿj€•=D_ÿÿ~€–=H_ÿÿ”€—=L_ÿÿ¨€˜=P_ÿÿÅ€™=T_ÿÿÞ€š=X_ÿÿð@›=@œ=€=°ÿÿÿ€@€c@ž=r@Ÿ=€ =\_ÿÿ€¡=`_ÿÿ@¢=®@£=½&¥=œÕ€ó@y=@y=Àå9@™@)€š@¸ÿÿÿ>€š@´ÿÿÿT€š@¬ÿÿÿg€›@h_ÿÿ~À¥AàâA€@™@‘€š@¸ÿÿÿ¦€š@´ÿÿÿ¼€š@¬ÿÿÿÏ€›@h_ÿÿæÀòAçà1Bè€Ñ>d_ÿÿø€Ò>¬ÿÿÿ €Ò>´ÿÿÿ#€Ò>¸ÿÿÿ6@Ó>NÀÄHOàEIP€Ñ>d_ÿÿ`€Ò>¬ÿÿÿu€Ò>´ÿÿÿ‹€Ò>¸ÿÿÿž@Ó>¶À^L·à~L¸@™@É€š@¸ÿÿÿÞ€š@´ÿÿÿô€š@¬ÿÿÿ€›@h_ÿÿÀ~LàÎL @™@1€š@¸ÿÿÿF€š@´ÿÿÿ\€š@¬ÿÿÿo€›@h_ÿÿ†ÀwN‡à…Nˆ@™@™€š@¸ÿÿÿ®€š@´ÿÿÿÄ€š@¬ÿÿÿ×€›@h_ÿÿîÀOïà6Oð€Ñ>d_ÿÿ €Ò>¬ÿÿÿ €Ò>´ÿÿÿ+ €Ò>¸ÿÿÿ> @Ó>V À¦fW àgX €Ñ>d_ÿÿh €Ò>¬ÿÿÿ} €Ò>´ÿÿÿ“ €Ò>¸ÿÿÿ¦ @Ó>¾ Àg¿ àÙgÀ €Ñ>d_ÿÿÐ €Ò>¬ÿÿÿå €Ò>´ÿÿÿû €Ò>¸ÿÿÿ!@Ó>&!ÀÌh'!ài(!@?4!Àãm5!àn6!@Z@B!ÀMvC!àivD!@™@U!€š@¸ÿÿÿj!€š@´ÿÿÿ€!€š@¬ÿÿÿ“!€›@h_ÿÿª!ÀYx«!àÆx¬!@Z@¸!Àõƒ¹!à „º!@?Æ!À—’Ç!à«’È!€Ñ>d_ÿÿØ!€Ò>¬ÿÿÿí!€Ò>´ÿÿÿ"€Ò>¸ÿÿÿ"@Ó>."À’–/"ࣖ0"ࣖ1"$¾\N£–.£–D£H£–DáI±–D²H½–D³Hó–D´Hû–DµHþ–D¶H—D·H—D!K>—D'KP—D!KS—D"KY—D#Kp—D%K|—D&Kƒ—D'K‹—D!KŽ—D¹H”—DºHª—D»HΗD¼HÔ—2"\¯D½Hà—D¾Hì—D¿H˜DÀH˜D0K˜D1K2˜D3K:˜D4KS˜D;KX˜DÀHg˜DÁHo˜DÂH–˜DÃHŸ˜DÄHµ˜DÅHÙ˜DÆHߘg"`¯DÇHë˜DÈH÷˜DÉH ™DÊH™D0K"™D1K:™D3KB™D4KU™D;KZ™DÊHn™DËHv™DÌH™DÍH¦™—"€¯Ð"„ªDÎH²™DÏH¾™DÐHÊ™DÑHÖ™DÒHâ™DÓHî™DÔHú™DÕHšDÖHšD×HšDØH3šDÙHCšD0KIšD1KašD3KišD4K|šD;KšDÙH•šDÚHšDÛHÄšDÜHÍš #¤¯DÝHÙšDÞHåšDßHñš2#=µDàHýšDáH›DâH"›D0K(›D1K@›D3KH›D4K[›D;K`›DâHt›DãH|›DäH£›DåH¬›l#°¯™#ŒªDæH¸›Ç#—»DçHÄ›DèHЛDéHå›DêHõ›D0Kû›D1KœD3KœD4K.œD;K3œDêHGœDëHOœDìHvœDíHœDîH‘œDïH¡œDðHÅœDñHËœÿ#¸¯+$ªDòHלDóHãœDôHòœDõHD0KD1K D3K(D4K;D;K@DõHTDöH\D÷HƒDøHŒDùHžDúH®DûHÒDþHØDÿHïDIžDI'žDI>žDIbžDIvžD IžD I±žD IÅžDIΞDIÚžDIîžDIôžDIýžDIŸDIŸDIŸDI%ŸX$\®D I+Ÿb$`®D!I1Ÿl$d®D#I;Ÿv$h®D&IAŸD'IFŸD(ILŸD)IUŸD,IaŸ€$t®D-IkŸ‹$x®D.IuŸD/IxŸ–$|®D2I~ŸD3I‰Ÿ¡$€®D6IŸD7I”Ÿ¬$„®D:IšŸD;IœŸ·$ˆ®D>I¢ŸÂ$Œ®D?I¬ŸÍ$®D@I¶ŸØ$”®DBIÀŸã$˜®DCIÆŸDDIËŸî$œ®DEIÑŸDFIÔŸù$ ®DGIÚŸDHIîŸ%¤®DJIôŸDKI÷Ÿ%¨®DLIýŸDMIÿŸ%¬®DQI %%°®DSI  0%´®DUI ;%¸®DYI F%¼®DZI D[I" Q%À®D^I( D_I- \%Ä®D`I3 DaI8 g%È®DbI> DcIA r%Ì®DdIG DeI[ }%ЮDgIa DhI} ˆ%Ô®DjIƒ DkI† “%Ø®DnIŒ DoI  DsI¦ DtI© ž%à®DwI¯ ©%ä®DxI¹ ´%è®D{IàD|IÌ ¿%ì®D}IØ D~Iì Ê%ð®D€Iò DIõ Õ%ô®D„Iû D…I¡à%ø®D†I¡D‡I¡ë%ü®DˆI%¡D‰I'¡ö%¯D‹I-¡&¯DŒI3¡DI8¡ &¯DŽI>¡DIR¡& ¯D‘IX¡D’I[¡"&¯D“Ia¡D”Iu¡-&¯D–I{¡D—I¡8&¯D™I•¡DšI˜¡C&¯D›Iž¡DœI¡¡N& ¯DI§¡DžI»¡Y&$¯D IÁ¡DÇJÇ¡DÈJÛ¡D¡Iã¡D¢Iÿ¡D£I¢d&(¯D¥I¢D¦I!¢o&,¯D¨I'¢z&0¯DªI-¢…&4¯D¬I3¢&8¯D°I9¢D³I?¢D´ID¢DµIJ¢D¶I^¢DºId¢D»Ij¢›&H¯D¾Ip¢D¿Ir¢¦&L¯DÃIx¢DÄI~¢DÅIƒ¢DÆI‰¢DÇI’¢DØIž¢DþH¦¢D×I¾¢DØIÄ¢D×IË¢DºHТD×Iè¢DØIî¢D×Iõ¢DÁHú¢D;K£DÄH"£DËH<£DÚHY£D¡Iv£DÕIŽ£DµI«£DöHÈ£DïHå£DëH¤DãH¤DÉJ<¤D IP¤DIm¤D–IФD}I§¤DnIĤDgIá¤DdIþ¤DGI¥DI8¥DIU¥D Ir¥DI¥DI¬¥DIÉ¥DÿHæ¥DúH¦±&$£H£–È&@¤H×&@¥Hæ&@¦Hõ&@§H'@¨H'@©H"'@ªH1'@«H@'@¬HO'@­H_'@®Ho'@¯H'@°H'À£–'@¸H›'À>—œ'à”—'@ÀH©'À˜ª'@-K¸'@.KÆ'€Ù'€ÿ'€H(À˜I(àg˜J(àg˜K(@ÊHW(À"™X(@-Kf(@.Kt(À"™u(àn™v(àn™w(@ÙHƒ(ÀIš„(@-K’(@.K (ÀIš¡(à•š¢(à•š£(@âH¯(À(›°(@-K¾(@.KÌ(À(›Í(àt›Î(àt›Ï(@êHÛ(Àû›Ü(@-Kê(@.Kø(Àû›ù(àGœú(àGœû(@õH)À)@-K)@.K$)À%)àT&)àT')@ I3)ÀÇ¡4)àã¡5)@ÀHA)À£B)@-KP)@.K^)À£_)à"£`)à"£a)@ Im)À<¤n)àP¤o)à ¦p)$}N ¦. ¦DH# ¦DP#.¦DQ#4¦DR#:¦DS#U¦D~#Y¦D#^¦D‚#p¦D„#‡¦DT#‘¦DÇJ—¦DÈJ¬¦DU#´¦DÇJº¦DÈJΦDV#Ö¦DW#ì¦DX#õ¦DY#û¦D[#þ¦D\#§DÇJ&§DÈJ;§D]#C§D^#\§D_#_§Db#e§Dc#{§Dd#~§Dg#„§Dh#ž§Di#°§Dj#¿§D#ó§DR#¨Dy# ¨D|#'¨D}#<¨D~#Q¨D}#a¨D|#l¨D[#w¨Dy#¨Dz#«¨D{#¾¨Dy#ã¨D]#ñ¨DÉJ ©DT#©Dz#C©DÉJQ©DU#e©Db#’©Di#¶©Dh#Ä©DÉJÒ©D\#é©Dg# ªDk#3ªq)$H# ¦§) H#») H# Ð)@I#ß)@J#î)€K#Øÿÿÿü)@L# *@M#*€N#Üÿÿÿ(*€O#àÿÿÿ6*À ¦7*@T#C*À—¦D*à´¦E*@U#Q*Àº¦R*àÖ¦S*€\#äÿÿÿ^*À&§_*àC§`*@T#l*À ©m*à©n*@U#z*ÀQ©{*àe©|*€\#äÿÿÿ‡*ÀÒ©ˆ*à驉*àVªŠ*$6NVª.VªDlGVªDØ"dªDÛ"jªDÞ"vªDß"ªDä"ŸªDÇJ¥ªDÈJ¹ªDå"ÁªDæ"ݪDç"ìªDè"«Dé" «Dê"7«Dë"C«Dì"O«Dí"R«Dð"X«Dñ"o«Dò"~«Dó"«Dø"¥«Dú"»«Dû"É«Dÿ"Ñ«D#à«D#¬D#¬D#¬D#¬D#%¬D#(¬D #1¬D #4¬D #J¬D #M¬D#f¬D#x¬D#‡¬Dø"–¬Dç"ž¬D#ͬD#ܬD#õ¬D #­D###­D$#.­D%#<­D&#J­DnGa­D%#l­D$#w­D##‚­Dß"­D#›­Dæ"©­D#·­D#Å­D#Ó­Dø"Ü­Dé"ä­D#®D#®Dÿ"®D#+®D#9®Då"G®D#v®Dè"Œ®DÉJ¹®Dä"Í®Dø"ó®Dñ"¯Dó"!¯Dò"/¯D#=¯Dð"Z¯DÞ"‡¯Dü"°¯D #à¯D #ý¯D#°D#(°D#8°‹*$lGVªÅ* lGÎ* lG Ø*@Ð"é*@Ò"þ*€Ö"Ôÿÿÿ +€×"Øÿÿÿ+Àdª+@ä"'+À¥ª(+àÁª)+àa­*+@Ð";+@Ò"P+€Ö"Ôÿÿÿ^+€×"Øÿÿÿl+Àl­m+@ä"y+À¹®z+àÍ®{+àC°|+$íNC°}+0œ.C°DY"C°DZ"Q°D_"X°D`"_°Da"f°Dg"m°DÌ" °Dh"ª°Di"°°Dm"¶°Dn"â°Do"õ°Dp"û°Dq"±Dr"±Ds"6±Dt"O±Dm"j±Dz"‚±D{"Ÿ±D|"¼±D"Ù±D€"é±D¼"ñ±DÁ"ú±DÂ"²DÃ"&²DÄ"<²DÅ"O²DÆ"h²DÉ"u²DÊ"ƒ²DÌ"¡²DÉ"«²D"¶²D‚"Á²Dƒ"ײD„"í²D…"ö²D†"ÿ²D‡"³Dˆ"&³D‰"1³DŠ"@³DÅ"f³DÄ"t³DÃ"‚³DÂ"“³DÁ"¤³D{"µ³Dz"ƳD|"׳D‚"è³Du"´D”"'´D•"0´D–"C´D—"V´DY"^´D•"g´D–"u´D—"}´Dš"‚´D"´DÇJ–´DÈJª´Dž"²´DŸ"Ï´D "Þ´D¡"ñ´D¢"µD£"µD¤"$µD¥"-µD¦"6µD§"?µD¨"FµD©"MµDª"iµD«"{µD†"™µDs"½µDr"εDµ"ßµD¶"öµD·"ÿµD¸" ¶D¹"-¶Dº"F¶D»"R¶D¼"k¶D‰"ˆ¶D‡"–¶Du"¤¶D©"µ¶D¸"Ô¶DŸ"ú¶Dž"·D¹"%·D»"6·DÉJG·D"^·D«"‚·Dª"“·“+$Y"C°Ë+ Y"ß+ Y" ñ+ Y",€Z"äÿÿÿ,@["&,@\"7,@^"F,€_"àÿÿÿT,€`"Üÿÿÿb,€a"Øÿÿÿp,@b",@c"Ž,€d"Èÿÿÿœ,&f"0œ´,€Ò,@Y"ä,@Y"ö,ÀC°÷,€"Ìÿÿÿ-À–´-಴-€"Ìÿÿÿ-ÀG·-à^·-à¡·-$^N¡·.¡·Då¡·Dë²·D츷Dí»·DîÖ·D Ú·D ß·D ñ·D ¸Dï¸DÇJ¸DÈJ,¸Dð4¸DñQ¸Dòh¸Dóq¸Dôz¸Dö€¸D÷—¸Dø¦¸Dù¸¸D ñ¸D ¹D #¹Dí1¹D I¹DðY¹D x¹D ‡¹Dö—¹D ±¹Dø¿¹D÷͹DÉJÛ¹Dïò¹D ºDúº-$å¡·K- å_- å t-@æƒ-@ç’-@è¡-€éÜÿÿÿ¯-€êàÿÿÿ½-@åÒ-À¡·Ó-€ïäÿÿÿÞ-À¸ß-à4¸à-€ïäÿÿÿë-ÀÛ¹ì-àò¹í-à@ºî-$ŸN@º.@ºDJ@ºDONºDPTºDÇJZºDÈJnºDQvºDRŒºDS’ºDT•ºDU¬ºDV»ºDWʺDXìºDYþºDZ»D]»D^#»DX6»DfN»Dg]»Dhp»Di…»Dl’»Dn©»DQ³»DfÒ»Dhë»Dgö»DW¼DV!¼DU/¼DÉJ=¼DPQ¼D^n¼D]~¼ï-$J@º(. J<.@KK.@LZ.@Mi.€Näÿÿÿw.À@ºx.@P„.ÀZº….àvº†.@P’.À=¼“.àQ¼”.ࢼ•.$bN¢¼.¢¼D)¢¼D/°¼D0¶¼DÇJ¼¼DÈJмD1ؼD2î¼D3ô¼D4÷¼D5½D6½D7,½DA^½DBp½DE€½DG—½D1¡½D?¹½D@ĽD6Þ½D5ì½D?ú½DA¾DÉJ¾D0*¾D8G¾–.$)¢¼Ð. )ä.@*ô.€/@+/@,#/€-äÿÿÿ1/@.A/À¢¼B/@0N/À¼¼O/àؼP/@0\/À¾]/à*¾^/àj¾_/$ÈNj¾`/8œ.j¾Dj¾D-x¾D.¾D/¶¾D0¼¾D1¾D4ȾD7˾D8×¾D9æ¾D=ò¾D>ý¾D?¿D@3¿DA9¿DBB¿DCY¿DDh¿DEz¿D¾À¿D¿Ù¿DÀò¿D8ÀD9&ÀD=2ÀDPBÀDQXÀDVmÀDWvÀDµ„ÀDĉÀDŤÀDƼÀDÇ×ÀDÈòÀD.ÁDËÁD>ÁDÁ<ÁDÄIÁDÅ[ÁDÆjÁDÇ|ÁDÈŽÁDÉ ÁD˾ÁD?ÈÁD¼ûÁD½ÂD¾1ÂD¿?ÂDDMÂDC[ÂD¼iÂDBtÂDW‘ÂD_¸ÂD`ÇÂDaÝÂDcïÂDeöÂDiÃD«ÃDW%ÃDX9ÃDY\ÃDZ|ÃD[’ÃD]˜ÃD^²ÃD_ÒÃDaàÃDlîÃDmÄDn-ÄDoMÄDpmÄDq„ÄDr‡ÄDsÄDw“ÄDx­ÄDy¿ÄDzÑÄDãÄD€õÄDˆýÄDQ!ÅDF/ÅDPYÅD„ÅD‚¤ÅDƒÄÅD„åÅD…ñÅD†ÆDz#ÆDy1ÆDx?ÆD‹MÆDÇJSÆDÈJhÆDŒpÆDÆDŽ¢ÆDÀÆDàÆD‘÷ÆD’ÇD“ ÇD” ÇD—ÇD˜,ÇD™>ÇDšPÇDŸbÇD ~ÇD¡•ÇD¢›ÇD£¡ÇD¤§ÇD¥ªÇD¦ÁÇD¨ÇÇD©ÞÇDªíÇD«ÿÇD…,ÈDš:ÈD™HÈD˜VÈDdÈD«rÈDªÈD©ÈDÉJ«ÈD‹¿ÈD`âÈD]ÿÈDZÉD¼4ÉDY@ÉDXaÉDp~ÉDw›ÉDo¿ÉDlÜÉDŽùÉDƒÊD‚FÊDpÊDŒ“ÊD—½ÊDàÊD ËD¨;ËD¥yËD °ËDŸîËv/$j¾µ/ É/  Û/ í/€äÿÿÿÿ/€ ÿÿÿ0€¤ÿÿÿ'0@;0@ L0€!¨ÿÿÿ`0€"¬ÿÿÿt0@#ƒ0€$°ÿÿÿ‘0@% 0€&´ÿÿÿ®0€'¸ÿÿÿ¼0€)àÿÿÿÊ0€*¼ÿÿÿØ0€+Àÿÿÿæ0&,8œþ0€1@.1@@1Àj¾A1@‹M1ÀSÆN1àpÆO1@‹[1À«È\1à¿È]1àÌ^1$­ NÌ.ÌDÉÌDÎ%ÌDÏ+ÌDÐ1ÌDÇJ7ÌDÈJKÌDÑSÌDÒoÌDÓ~ÌDÔÌDÕ–ÌDÖ™ÌDןÌDØ¢ÌDÙ¹ÌDÚÈÌDèÚÌDéèÌDëÿÌDÓ ÍDã!ÍDå,ÍDè9ÍDÑRÍDâjÍDãuÍDÒÍDÚÍDâ«ÍDÙ¶ÍDÉJÄÍDÐØÍ_1$ÉÌ›1 É¯1 É À1@ÊÏ1@ËÞ1@Ìí1€Íäÿÿÿû1ÀÌü1@Ð2À7Ì 2àSÌ 2@Ð2ÀÄÍ2àØÍ2àõÍ2$ÞNõÍ2@œ.õÍDª)õÍD¼)ÎDÀ) ÎDÂ)ÎDÃ)ÎDÆ)"ÎDÇ)+ÎDÈ)4ÎDÉ)=ÎDÊ)FÎDË)OÎDÌ)XÎDÍ)aÎDÎ)jÎDÏ)sÎDÐ)|ÎDÑ)…ÎDÒ)ŽÎDÓ)—ÎDÔ) ÎDÕ)©ÎDÖ)²ÎD×)»ÎDØ)òÎDÞ)—ÏDß)ÏDà)£ÏDá)©ÏDâ)¯ÏDã)µÏDä)»ÏDå)ÁÏDæ)ÇÏDç)ÍÏDè)ÓÏDé)ÙÏDê)ßÏDë)åÏDì)ëÏDí)ñÏDî)÷ÏDï)ýÏDñ)ÐD÷) ÐDø)$ÐDù)3ÐDú)9ÐDý)@ÐDþ)]ÐDÿ)|ÐD*“ÐD*ªÐD*°ÐD*¹ÐD*ÂÐD*ÉÐD*àÐD*ãÐD *ìÐD *óÐD * ÑD *$ÑD *=ÑD *ZÑD*tÑD*‘ÑD*®ÑD*ËÑD*ÞÑD*éÑD*ÿÑD*ÒD*1ÒD"*JÒD#*`ÒD$*uÒD(*{ÒDÇJÒDÈJ•ÒD(*ÒD)*¨ÒD**ÅÒD+*ÞÒD,*õÒD-*ûÒD.*þÒD/*ÓD0* ÓD1*ÓD2*ÓD3*?ÓD4*XÓD5*qÓD6*†ÓD:*ŒÓD;*©ÓD<*¾ÓD=*ÇÓD@*ÎÓDA*ÔÓDB*æÓDE*ïÓDF*õÓDG*ÔDJ*ÔDK*!ÔDN*)ÔDO*IÔDP*[ÔDQ*aÔDT*hÔDU*sÔDV*{ÔDW*’ÔDX*«ÔDY*ÄÔDZ*ÖÔD2*àÔDÕ+ÕDÖ+ÕD×+4ÕDØ+JÕDÙ+`ÕDÜ+pÕDÝ+†ÕDÞ+˜ÕDß+§ÕDà+¹ÕDá+ËÕDâ+ÝÕDã+ïÕDä+ÖDå+ÖDæ+%ÖDç+7ÖDè+IÖDé+[ÖDê+mÖDë+ÖDì+‘ÖDí+£ÖDî+µÖDï+ÇÖDð+ÙÖDñ+ëÖDò+×Dô+×D*,×DÙ)I×DÚ)g×DÛ)…×Dò+×Dô+•×Dà+¢×Dá+®×Dâ+Ì×Dã+ê×Dä+ØDå+&ØDæ+DØDç+bØDè+€ØDé+žØDê+¼ØDë+ÚØDì+øØDí+ÙDî+4ÙDï+RÙDð+pÙDß+“ÙDÞ+¡ÙDÝ+¯ÙDø)½ÙD**ËÙDÕ+ÜÙD×+íÙDÖ+þÙDñ+ ÚDÜ+ÚDØ+.ÚD*?ÚD*HÚD*SÚD*“ÚD*¤ÚD*µÚD*ÆÚD*×ÚD*èÚD#*ùÚD÷) ÛD"*/ÛDd*\ÛD *žÛD *¯ÛDÛ)ÀÛDN*åÛDY* ÜDZ*ÜDÉJÜD3*8ÜD5*IÜD4*]ÜDF*nÜDA*‚ÜD;*–ÜD:*ªÜDO*ÔÜDe*åÜDh*îÜDW*/ÝDX*SÝDi*dÝDl*mÝDm*ÝDn*£ÝDo*ÄÝDp*äÝDq*íÝDt*ôÝDu*úÝDv*ÞDy* ÞD|*'ÞD~*>ÞD‡*JÞDˆ*UÞD‰*YÞDŠ*_ÞD‹*qÞD‘*wÞD’*ÞD“*—ÞD¢*¡ÞD£*²ÞD¦*ºÞD§*ÀÞD¨*ÕÞD«*ÞÞD¬*êÞDº*òÞDÆ*üÞDÇ* ßDÈ*,ßDË*4ßDÌ*OßDÍ*WßDÇJ]ßDÈJqßDÉJußDÍ*‰ßDÎ*”ßDÏ*±ßDÐ*ÒßDÑ*éßDÒ*ïßDÓ*øßDÔ*þßDÕ*àDÖ*#àD×*DàDØ*eàDÙ*…àDà*‹àDá*«àDâ*ÂàDã*ËàDä*×àDå*ôàDæ*áDç*6áDê*WáDë*wáDì*•áDí*¬áDn*ÚáDl*þáD–*(âD—*:âD˜*>âD¾*MâD¿*aâDÀ*âD¾*ŒâDœ*²âD|*÷âDë*ãDä*>ãDÕ*hãDð*’ãDñ*³ãDò*¿ãDõ*ÇãDø*ÑãDû*ØãDü*éãD+ñãD+üãD*+äD++äDD+äDE+=äDF+XäDG+yäDJ+šäDK+ºäDL+ÑäDM+áäDN+øäDO+åDP+:åDQ+^åDR+åDS+–åDT+·åDY+ÞåDZ+êåDÛ+îåDP+õåD]+æD^+2æD_+IæD`+OæDa+XæDb+ræDc+“æDd+ªæDg+ËæDh+çæD»+þæD¼+çDh+GçDa+kçD]+ˆçDJ+¬çDE+ÐçD.+ôçD/+ èD4+èD5+<èD6+SèD7+eèD8+‰èD9+¬èD:+ÍèD;+îèD<+éD=+/éD8+:éD.+^éD+„éD+¤éD+¾éD+ßéD+óéD+êD+*êD+0êD+9êD +?êD!+HêD"+aêD#+‚êD$+£êD!+ÑêD+÷êDÿ*ëD+=ëD+XëD+yëD+šëD+ºëD+ÑëD+×ëD +àëD +æëD +ïëD +ìD +ìD+@ìD +nìD+ìDp+³ìDq+ÔìDr+àìDu+èìDv+üìDy+íDz+íD+/íD€+LíD+cíD‚+uíDƒ+™íD„+¼íD…+ÝíD†+þíD‡+îDˆ+?îD+GîD’+QîD•+XîD–+uîD—+îD˜+±îD›+ÒîDœ+òîD+ ïDž+ïDŸ+0ïD +QïD¡+rïD¢+–ïD£+·ïD¤+ÎïD¥+ïïD¨+ðD«+ðD¬+,ðD¯+4ðD°+TðD±+kðD²+qðD³+zðD´+”ðDµ+µðD¶+ÌðD¹+íðDº+ ñD³+HñD¯+eñD¡+‰ñD›+¦ñD–+ÊñDy+îñDƒ+òDÂ+8òDÃ+YòDÄ+eòDp+vòDÅ+ òDÆ+ÀòDÇ+×òDÉ+ÝòDÊ+ûòDË+óDÌ+(óDÍ+IóDÆ+sóDÂ+–óDð*ÀóDÆ*êóD­*ôD®*+ôD¯*4ôD°*@ôD±*^ôD²*ôD³*‹ôD´*¬ôD§*ÒôDŠ*æôD*÷ô02$ª)õÍc2 ª)w2 ª) ‰2 ª)›2€«)ÿÿÿ²2€¬)àÿÿÿÅ2€­)ÜÿÿÿÛ2€®)Øÿÿÿò2€¯)Ôÿÿÿ 3€°)Ðÿÿÿ$3€±)Ìÿÿÿ93€²)ÈÿÿÿL3€³)Äÿÿÿa3€´)Àÿÿÿw3€µ)¼ÿÿÿ“3€¶)¸ÿÿÿ®3€·)´ÿÿÿÎ3€¸)°ÿÿÿì3€¹)¬ÿÿÿ4€º)¨ÿÿÿ4€»)¤ÿÿÿ94€¼) ÿÿÿN4€½)€ÿÿÿe4@¾)z4@¿)‰4€À)œÿÿÿ—4@Á)¦4€Â)˜ÿÿÿ´4€Ã)”ÿÿÿÂ4€Ä)äÿÿÿÐ4&Å)@œè4€5ÀõÍ5@(*5ÀÒ5@ÆJ#5ÀÒ$5àÒ%5àÒ&5@(*25ÀÜ35@ÆJA5ÀÜB5à8ÜC5à8ÜD5@Í*P5À]ßQ5@ÆJ_5À]ß`5à‰ßa5à‰ßb5àõc5$'Nõd5Lª.õD÷/õDþ/õDÿ/AõD0GõD0MõD0UõD0^õDÇJdõDÈJxõD0€õD0õD0¬õD0ÂõD0ËõD0ÔõD0íõD0ÿõD0öD0öD!0'öD*02öD,0MöD0WöD0iöD0röD0{öD0™öD 0¨öD 0³öD 0ÂöD'0ÚöDþ/ìöD,0îöD0øöD$0÷D%0÷D0?÷D0Y÷D0g÷D 0u÷D0ƒ÷D0‘÷D0Ÿ÷D$0­÷D0»÷DÉJß÷D0ó÷z5$÷/õ·5 ÷/Ë5 ÷/ Ý5 ÷/ï5@ø/þ5@ú/ 6@û/6@ü/+6&ý/LªC6€a6@÷/s6@÷/…6Àõ†6@0’6Àdõ“6à€õ”6@0 6Àß÷¡6àó÷¢6àø£6$ Nø¤6Pª.øDî1øDï1øDð1%øD÷1,øDø1bøDÿ1øD2–øDÇJœøDÈJ°øD2¸øD2ÔøD2ãøD2ùøD2ÿøD2ùD2ùD2/ùD 2>ùD 2PùD 2pùD 2ùD2‘ùD2§ùD2½ùD2ÏùD2åùD!2úDù1 úDú1#úDû19úDü1OúD2eúD!2gúD2qúD2úD2ŸúD2½úD2ÖúD2ïúD2ûD2ûD2,ûD2KûD2WûD2hûD2yûD2ŠûD2˜ûD2¦ûD2²ûD2ÀûD2ÎûDÉJÜûD2ðûDü1 üD 2 üD2.üDû1<üDú1MüDù1^üD 2oüD 2€üD 2Žüº6$î1øê6 î1þ6 î1 7 î1"7€ï1äÿÿÿ57€ð1àÿÿÿJ7@ñ1Y7@ò1h7@ó1w7€ô1Ðÿÿÿ…7€õ1Ôÿÿÿ“7&ö1Pª«7€É7ÀøÊ7@2Ö7Àœø×7à¸øØ7@2ä7ÀÜûå7àðûæ7à«üç7$›N«üè7ˆœ.«üD…2«üD†2¹üDŒ2ÀüD¨2óüD2ýüDŽ2ýD2 ýDÇJýDÈJ#ýD2+ýD‘2GýD’2VýD“2lýD”2rýD•2uýD–2{ýD—2ýD˜2”ýD™2£ýDš2²ýDœ2ÄýD¥2ÏýD¦2ÝýD¨2ûýD2þDŸ2þD 2,þD¢2;þD¥2HþD’2dþD‘2~þD 2ŒþDš2—þD™2¥þD˜2³þDÉJÁþD2ÕþDŸ2òþþ7$…2«ü>8 …2R8 …2 d8 …2v8€†2äÿÿÿ‘8@‡2 8@ˆ2¯8@‰2¾8€Š2ÔÿÿÿÌ8&‹2ˆœä8€9@…29@…2&9À«ü'9@239Àý49à+ý59@2A9ÀÁþB9àÕþC9àÿD9$UNÿE9œ.ÿD”7ÿD–7ÿD¥7ÿD¦7!ÿD§7XÿD­7ÿD®7“ÿD¯7™ÿD³7¥ÿD¶7¨ÿD·7ÊÿD¸7äÿD¹7óÿD¼7D½7DÂ7-DÃ7PDÄ7fDÅ7lDÆ7uDÈ7~DÉ7¡DÊ7°DÐ7ÅDÒ7äDÓ7ñD×7ùDåJÿDéJDØ7*DÙ7?DÝ7EDÞ7aDß7zDà7—Dá7¦Dâ7¸Dã7ÕDä7äDé7ùDê7D8 D8D8D8;D8VD8mD 8ˆD 8¡D 8¤D 8­D 8¶D8¼D8¿D8ÛD8íD8D8D8 D82D285D38DDÐ7SD¶7aD¼7‚Dÿ8§D9ÀD9ÓD9ìD9ùD9D9$D99D 9ND 9cD 9xD 9ŠD 9œD9²D9ÐD¨7ÝD©7óDª7 D9D9!D8.DÂ7<D½7‡D8•D8µD 8ÐD!8çD"8D#8D$8D%8(D&8.D'84D+8:D,8VD-8eD.8|D08D18˜D28¦D38ÁD18ÞD28çDØ7ìDá7Dà7Dë7Dì7<Dí7WDî7mDï7‰Dð7 Dñ7£Dò7¬Dó7¸Dô7»Dø7ÁDù7ÝDú7ïDû7Dý7Dþ7!Dÿ73Dä7PDã7^D 9lD 9}D 9‹D 9™D9§D9µD9ÃD 9ÑD9âD9óD8 D,8 D9 Dÿ8+ Dù79 Dþ7G D¹7U D¸7c D·7q Dü8® Dþ8Í D¼7ø DÃ7 Dý8Y Dª7y D©7Œ D¨7 DÐ7® DF8Ì DG8å DK8ó DL8 DM8- DN8? DX8N De8W Df8m Dg8Ž Dh8š Di8© Dj8´ DÇJº DÈJÏ Dk8× Dl8÷ Dm8 Dn8 Do8( Dp81 Dq8J Dr8\ Ds8k Dt8v Du8… D{8 DK8Í DQ8å Dý8î Dü8 DÊ7> DÉ7L DÈ7Z DN8œ DM8ª DZ8¸ D[8Ñ D\8Ú D]8á D^8è Dý8DR8?DS8UDT8kDe8–D{8ÜD|8ôD8 D‚8!D‡80Dˆ8SD‰8jDŠ8pD‹8yD8…DŽ8¢D8´D•8ÆD–8æD—8üD˜8 D™8%Dš8ID›8`Dœ8xD8™Dž8¨DŸ8ËD 8ÚD¡8ìD¢8D£8D¤8 D¦8D§8+D¨8=D©8OD½8eD¾8…D¿8ŸDÀ8±DÊ8ÀD×8ÊDÇJÐDÈJäDØ8ìDÙ8 DÚ8DÛ8/DÜ88DÝ8DDÞ8]Dß8tDà8‹Dã8ŸDä8¶Då8¼Dæ8ÜDç8ùDô8üDõ8Dù8$Dh8ODf8]DÝ7£DE8»DæJæD×7D@8/DA8>DB8MDC8bDD8wDC8¢DB8­DA8¸D@8ÃDÔ7ÑDß7ûDÞ7&Dâ7SDS8…DR8–D8§Dú7ÔDëJDm88D|8€Dl8ŽD‡8œD‚8ÝD{8ëDk8D08ID-8vD+8£D"8×D!8ýD 8#D8PD8„D8ªD8ÐD8ýD 8#D8ID8vDˆ8£D8äDì7)Dë7ODý7uDî7©Dø7ÖDï7üDt8"Dr80Dq8>D–8LD´8kDµ8mD¶8†D·8ŸD¸8²D¹8ËD½8ÝDÃ8õD²8ÿDÉJ(Dj8<D78}Dp8¥D8ÝDŽ8ëD8ùDµ8AD¶8OD·8]D—8kD²8ŒD³8 DÌ8ËDÍ8äDÎ8êDÏ8ñDÐ8øDÀ8/D¿8=DÄ8KDÅ8aDÆ8wD™8¢D›8ÁDÚ8åDï8ýDÙ8DØ8+Dí8CDì8jDÇJpDÈJ„Dí8ŒDî8©Dï8¸Dð8ÏDñ8ØDò8äDó8ýDô8 DÉJ D×80 Dì8H Dï8x Dî8• Dí8£ DÉJÀ Dì8Ô Dò8ñ D©8)!D¨87!D§8E!D¦8S!D¡8p!D´8ˆ!D 8§!DŸ8µ!DÝ8Ã!Dã8à!Dæ8ý!Då8<"DÄ8Y"DÅ8j"D8{"Dž8‰"[9$”7ÿ9 ”7¤9 ”7 ¶9 ”7È9€•7Ðÿÿÿâ9€–7äÿÿÿ÷9€—7lÿÿÿ :€˜7pÿÿÿ:€™7tÿÿÿ3:€š7xÿÿÿH:€›7|ÿÿÿZ:@œ7i:@7x:€ž7€ÿÿÿ†:@Ÿ7•:@ 7¤:€¡7àÿÿÿ²:€¢7„ÿÿÿÀ:€£7ˆÿÿÿÎ:&¤7œæ:€;Àÿ;@×7;Àÿ;à*;@:8&;€;8Üÿÿÿ;;€;8ÔÿÿÿQ;€;8Øÿÿÿd;€<8Œÿÿÿ{;ÀÌ |;àW };@j8‰;Àº Š;à× ‹;@:8œ;€;8Üÿÿÿ±;€;8ÔÿÿÿÇ;€;8ØÿÿÿÚ;€<8Œÿÿÿñ;ÀÍ ò;àî ó;@:8<€;8Üÿÿÿ<€;8Ôÿÿÿ/<€;8ØÿÿÿB<€<8ŒÿÿÿY<Àœ Z<à[<@:8l<€;8Üÿÿÿ<€;8Ôÿÿÿ—<€;8Øÿÿÿª<€<8ŒÿÿÿÁ<À?Â<à–Ã<€¬8ÿÿÿÓ<€­8Øÿÿÿè<€­8Ôÿÿÿþ<€­8Üÿÿÿ=@®8)=Àe*=àÊ+=@×87=ÀÐ8=àì9=@:8J=€;8Üÿÿÿ_=€;8Ôÿÿÿu=€;8Øÿÿÿˆ=€<8ŒÿÿÿŸ=À» =àæ¡=@×7¯=Àæ°=à±=@:8Â=€;8Üÿÿÿ×=€;8Ôÿÿÿí=€;8Øÿÿÿ>€<8Œÿÿÿ>À/>àÑ>@:8*>€;8Üÿÿÿ?>€;8ÔÿÿÿU>€;8Øÿÿÿh>€<8Œÿÿÿ>À…€>à§>@×7>À>à8‘>€¬8ÿÿÿ¡>€­8Øÿÿÿ¶>€­8ÔÿÿÿÌ>€­8Üÿÿÿß>@®8÷>Àkø>à(ù>@j8?À(?à<?€¬8ÿÿÿ?€­8Øÿÿÿ,?€­8ÔÿÿÿB?€­8ÜÿÿÿU?@®8m?ÀAn?àko?€¬8ÿÿÿ?€­8Øÿÿÿ”?€­8Ôÿÿÿª?€­8Üÿÿÿ½?@®8Õ?ÀŒÖ?à¢×?@ì8ã?Àpä?àŒå?@×8ñ?À ò?à0 ó?@ì8ÿ?ÀÀ @àÔ @€¬8ÿÿÿ@€­8Øÿÿÿ&@€­8Ôÿÿÿ<@€­8ÜÿÿÿO@@®8g@Àˆ!h@à§!i@€¬8ÿÿÿy@€­8ØÿÿÿŽ@€­8Ôÿÿÿ¤@€­8Üÿÿÿ·@@®8Ï@ÀY"Ð@à{"Ñ@à­"Ò@$­#N­"Ó@Tª.­"D9­"D9»"D49ç"D9ñ"D9÷"DÇJý"DÈJ#D9#D95#D9D#D 9Z#D!9c#D"9i#D#9o#D$9u#D%9ˆ#D&9—#D'9¦#D)9¸#D29Ã#D49Þ#D9è#D,9$D-9$D/9$D9-$D9G$D-9U$D'9`$D&9n$D%9|$DÉJŠ$D9ž$D,9»$é@$9­"!A 95A 9 GA 9YA@9hA@9wA@9†A€9äÿÿÿ”A&9Tª¬A€ÊA@9ÜA@9îAÀ­"ïA@9ûAÀý"üAà#ýA@9 BÀŠ$ Bàž$ BàÉ$ B$NÉ$ BXª.É$D89É$D99×$D>9Þ$D?9å$D@9ì$DC9ó$DD9*%DJ9X%DL9^%DO9g%DP9u%D_9}%Dv9§%Dw9°%Dz9¸%D{9Ï%D|9ä%D}9ç%D€9î%Dˆ9&D‰9&DŠ9&D‹9<&DŒ9U&D9v&DŽ9&D9¨&D9Â&D‘9Ô&D’9ã&D“9æ&D‚9í&Dƒ9û&D‡9'DQ9#'DR96'DS9?'DT9K'DU9i'DV9‚'DW9Ž'DX9§'D¾9Ë'D¿9á'DÀ9÷'DÁ9 (DÂ9&(DÅ93(DÆ9I(DÇ9X(DÈ9j(DÉ9|(DÊ9’(DÌ9°(DE9º(DF9Ø(DG9ö(DÊ9)DÌ9)DÈ9 )DÇ9)DÆ9))D¯97)D°9W)D±9p)D²9‘)D³9£)D´9¼)D¹9à)D»9ê)DŽ9ô)D9*D‘9*D9$*DÉ92*DÅ9C*DÁ9T*DÀ9b*D¿9s*D¾9„*D_9•*Dc9­*Dd9Ê*Dg9ç*DÇJí*DÈJ+Dg9 +Dh9+Di9+Dj98+D¼9C+DW9Z+DU9k+D¯9|+Dg9¤+DG9Ó+Dc9õ+Dd9,D±9,D€9?,D{9f,D‹9t,D9˜,Dz9µ,D„9ä,D´9-D³9&-D²97-Dk9E-Dl9P-Dm9f-Dn9{-Do9-Di9ª-DÉJ»-Do9Ô-Dn9â-Dm9ð-D•9.D˜9.D™9/.Dš9F.D›9R.Dœ9k.Dl9}.D™9¬.D•9Ð.D9á.DÇJç.DÈJü.Dž9/DŸ9$/D 9;/D¡9R/D¢9[/D£9g/D¤9€/D¥9¡/D¦9Â/D§9Î/D¨9ï/D›90Dž9$0DÉJA0D9U0#B$89É$SB 89gB 89 yB 89‹B€99äÿÿÿ B@:9¶B€;9ÀÿÿÿÇB@<9ÖB€=9àÿÿÿäB€>9ÜÿÿÿòB€?9ØÿÿÿC€@9ÔÿÿÿC€A9ÄÿÿÿC&B9Xª4C€RCÀÉ$SC@g9_CÀí*`C@ÆJnCÀí*oCà +pCà +qC@g9}CÀ»-~C@ÆJŒCÀ»-CàÔ-ŽCàÔ-C@9›CÀç.œCà/C@9©CÀA0ªCàU0«Càr0¬C$© Nr0­C˜œ.r0DÐ9r0DÛ9€0D :Á0DÜ9Ë0DÝ9Ñ0Dà9Ú0Dá9ü0Dâ91Dã9(1Då9+1Dæ9B1Dç9Q1Dè9c1Dí9x1DÇJ~1DÈJ’1Dî9š1Dï9·1Dð9Æ1Dñ9Û1Dò9ð1Dó92Dô9 2Dõ92Dö92Dù92Dú922Dû9D2Dá9c2D:‹2D:š2D:´2D:Í2D:æ2D :ö2D :3D :3Dà9&3D :I3D:T3Dâ9i3D:3D:3D:«3Dð9¹3Dè9ã3Dç9ñ3Dæ9ÿ3Då9 4Dï954Dî9C4Dñ9h4Dò9‹4DÉJ®4Dí9Â4Dû9å4Dú9ö4Dù95ÃC$Ð9r0ùC Ð9 D Ð9 D Ð91D€Ñ9äÿÿÿDD€Ò9àÿÿÿYD€Ó9ÜÿÿÿmD€Ô9ÈÿÿÿD@Õ9ŽD@Ö9D€×9Ìÿÿÿ«D€Ø9Ðÿÿÿ¹D€Ù9ÔÿÿÿÇD&Ú9˜œßD€ýD@Ð9E@Ð9!EÀr0"E@í9.EÀ~1/Eàš10E@í9Eà'5?E$µN'5.'5DíD'5DîD55D50@5D60F5D70L5D:0R5DÇJX5DÈJl5D;0t5D<05D=0Ÿ5D>0º5D?0É5D@0Ô5DA0ó5DB06DC06DN06DO0:6DP0N6DQ0T6DR0c6DS0„6DT0Œ6DU0«6DV0Ê6DW0è6DX0ô6DY07DZ07Dc07De027Df0E7Dg0T7Dƒ0[7Dr0b7Ds0t7Dt0}7Du0†7Dv0¤7Dw0³7Dx0¾7Dy0Ò7D0ê7D„0ú7D…08D†08DöD-8D…078D„0B8D<0M8D=0V8D0‹8D€0š8D>0¿8D?0È8DD0Ø8DE0÷8DF09DG0!9DI009Dƒ0;9D0B9DB0P9D;0^9D€0v9DÉJŠ9D:0ž9DD0»9Dc0Ø9Dv0õ9DG0:DO0:DE0.:DQ0M:DòD[:Df0Œ:De0š:D~0²:D[0¿:D]0Ü:D[0ù:D\0;D]0/;D^0F;D_0R;D`0f;DY0ƒ;DX0‘;Du0Ÿ;D~0·;@E$íD'5xE íDE íD ŠE íD“E@00¢E@10±E@20ÀE€30äÿÿÿÎE@40ÝEÀ@5ÞE@:0êEÀX5ëEàt5ìEà-8íE@00üE@10 F@20F€30äÿÿÿ(F@407FÀ788F@:0DFÀŠ9EFàž9FFà[:GF@00VF@10eF@20tF€30äÿÿÿ‚F@40‘FÀŒ:’Fà¾;“F$—N¾;.¾;D¦(¾;D¨(Ì;Dª(Ó;D«(Ú;D¬(á;D­(ç;D±(í;D²( <D³(<D´((<DÝ(0<DÞ(C<Dß(L<Dà(X<Dá(v<Dâ(<Dã(›<Dä(´<Dé(Ì<Dê(â<Dë(ô<Dì(=Dï(=Dð(!=Dò(8=Dï(B=D³(M=Dë(^=Dê(l=Dé(}=Dá(Ž=Dâ(¡=Dã(­=Dµ(Ð=D¶(ð=D·(>D¸(#>D¹()>Dº(,>D»(5>D¼(>>D½(E>D¾(L>D¿(h>DÀ(>DÁ(„>D¾(>DÉ(¨>DÊ(Å>DË(â>DÎ(ÿ>DÇJ?DÈJ?DÎ(!?DÏ(,?DÐ(6?DÑ(K?DÒ(S?DÓ(^?DÔ(p?DÕ(‰?DÖ(¢?DÐ(À?DÓ(Ñ?D±(î?DË( @DÊ(@DÉ(-@DÉJ>@D¿(W@DÖ(h@DÕ(y@DÔ(Š@”F$¦(¾;ÓF ¦(çF ¦( øF@§(G€¨(äÿÿÿG@©($G€ª(àÿÿÿ2G€«(Üÿÿÿ@GÀ¾;AG@Î(MGÀ?NG@ÆJ\GÀ?]Gà!?^Gà!?_G@Î(kGÀ>@lG@ÆJzGÀ>@{GàW@|GàW@}Gà›@~G$ÝN›@.›@Dà ›@Dè ©@Dë ¯@Dî ³@DÇJ¹@DÈJÍ@Dï Õ@Dð í@Dñ ADò ADó 8ADô ;ADõ DADö JAD÷ PADû VADü lADý {ADþ ADÿ  AD±J¯AD!ÅADð ýADR!#BDS!2BDT!EBDU!^BDV!wBDW!BDZ!BD\!´BDï ¾BDR!ëBDS!CDT!CDU!$CDV!2CDò @CDñ ]CDÉJCDî •CDü ²CDý ÀCDÿ ÎCDû ÜCDþ DD!2DD!DDD±JJDD!_DD²JŸDD¬J¬DD!ËDD!ÙDD!äDDºJêDD»JûDD¬JED! ED²JKED!VED»JaED¿JlED !uED !‡ED !ED!–ED!™ED!¢ED!®EDÇJ´EDÈJÉED!ÑED!éED!FD!FD!1FD!7FD!@FD!FFD!LFD"!OFD#!hFD$!FD%!–FD&!¥FD±J¹FD(!ÎFD%!GD)!9GD*!MGD±JSGD,!eGD²J˜GD/!¡GD-!ÅGD.!ÜGDºJâGD»JóGD¬JHD¿J&HD0!3HD=!MHD>!fHD?!~HD@!–HDA!­HDB!¶HDC!¿HDD!ÈHDE!ËHDI!ÎHDJ!æHD ! IDI!ID@!7ID?![ID>!†ID=!±ID"!ÎID!òIDÉJJD!#JD4!@JD5!QJD!nJD!’JG$à ›@ÀG à ÔG@á ãG@â òG@ã H€ä ÜÿÿÿH@å H€æ àÿÿÿ,HÀ›@-H@î 9HÀ¹@:HàÕ@;H@î GHÀCHHà•CIH@¹JUHÀêDVHà EWH@¹JcHÀaEdHàuEeH@!qHÀ´ErHàÑEsH@¹JHÀâG€Hà3HH@!HÀJŽHà#JHà¯JH$ N¯J‘H¨œ.¯JD@G¯JDBGÀJDCGÔJDEGÞJDFGçJDa!óJDn!úJDo!KDp! KDq!VKDr!\KDs!bKDt!hKDåIqKDéIyKDw!—KDx!šKDy!¯KD|!¸KD}!ÄKD~!ÖKD!âKD…!ëKD§!öKDª!ÿKD­!LD°! LDÅ!*LD°!1LD±!@LD²!KLDµ!OLD¶!TLD·!wLD¸!”LD¹!«LD»!±LD¼!ËLD½!ÝLD¾!ïLD¿!MDÀ!MDÅ!"MD×!.MDØ!0MDÙ!>MDÚ!LMDGGZMDHG^MDKGwMDÚ!‚MDÙ!MDØ!›MD}!¦MD~!¯MD!»MD…!ÄMDx!ÔMDy!ãMD|!ìMD}!øMDÁ! ND½!.ND¼!J€c!ØÿÿÿRJ@d!cJ€e!ÀÿÿÿvJ@f!…J€g!Äÿÿÿ“J€h!Èÿÿÿ¡J€i!Ìÿÿÿ¯J@j!¾J€k!ÐÿÿÿÌJ€l!ÔÿÿÿÚJÀ‚MÛJ@†!çJÀ^NèJà{NéJ@t!÷JÀëOøJà PùJ@t!KÀMPKàiP KàiP K€`!äÿÿÿK€a!àÿÿÿ8K€b!ÜÿÿÿMK€c!ØÿÿÿaK@d!rK€e!Àÿÿÿ…K@f!”K€g!Äÿÿÿ¢K€h!Èÿÿÿ°K€i!Ìÿÿÿ¾K@j!ÍK€k!ÐÿÿÿÛK€l!ÔÿÿÿéKÀ~PêK@†!öKÀ~P÷Kà’PøK@¹JLÀCSLàvSL@¹JLÀºSLàÎSLàùSLàùSL$J NùSL¼œ.ùSDÿùSDTDTDTDNTDƒTD‰TDTD!˜TD"¸TD#ÏTD$áTD%UD&UD'@UD(RUD)dUD*vUD/…UD0¥UD1¼UD2ÂUD3ÈUD4èUD5úUD6 VD;!VD<8VDAMVDCoVDD}VDH…VDI˜VD±JªVDKÀVD±JÒVDOèVD±JúVDSWDºJ"WD¿J7WDWDWDXVWDYvWDÇJ|WDÈJ‘WDZ›WD[¸WD\ÊWD]áWD^çWD_íWD`óWDaöWDbüWDcXDdXDe XDf%XDg7XDhIXDi`XDjfXDklXDlrXDmuXDo{XDp’XDr˜XDs±XDtÃXDuÕXDAäXDCöXDDYDE YD!TYDRsYD†|YD‰ŽYDФYD‹¶YDŒÅYDÔYDŽæYDøYD ZD‘ZD’.ZD“DZD•bZD&mZD¡ZD‚³ZDƒÌZD„åZD…þZD)[D?[DU[D“k[D•r[D‘}[DŽ[Dœ[DŽª[D¸[DŒÆ[D‹Ô[DŠâ[D’ð[D‰\D"\DM\Dƒp\D„~\D‚Œ\D/š\D*Ç\D)Õ\D(ã\D'ñ\Dÿ\D]D(]D09]DI‚]DK]DOž]DW¬]DS½]D5Ë]D4Ù]D6ç]DAõ]D[!^Dg/^Df=^DuK^DtY^Dsg^D<u^D3ƒ^D;Ì^D²J÷^DJ_D²J?_DNL_D²J_DRš_DÉJá_Drõ_Do;`DHz`D¬J®`D»JÍ`D¬JÜ`DVö`D¬JCaDeaDX¹aDhbDwEbDz\bD»Jrb-L$ÿùScL ÿwL ÿ ‰L ÿ›L€äÿÿÿ²L€àÿÿÿÇL€œÿÿÿâL@÷L@M€ ÿÿÿM€¤ÿÿÿ0M€¨ÿÿÿMM€¬ÿÿÿ[M€ °ÿÿÿiM€ ´ÿÿÿwM@ †M€ ¸ÿÿÿ”M@ £M&¼œ»M€ÙMÀùSÚM@¹JæMÀ"WçMàDWèM@YôMÀ|WõMà›WöM@YNÀá_Nàõ_N@¹JNÀÍ`Nàö`N@¹JNÀrbNà€b Nà€b!N$‡N€b"N\ª.€bD™€bDšŽbD¥•bD¦ÌbD¬úbD°cD³ cD´ cD¹/cDºOcD»ecD¼†cD½˜cD¾§cD¿½cDÁÕcDÂâcDÆêcDÇýcD±J dDÉ"dD±J4dDÍJdD±J\dDÑrdDºJdD¿J–dDÕ£dDÖµdD×ÔdDØëdDÙñdDÚôdDÛúdDÜeDÝeDßeDà3eDáBeDâTeD¿ceDÁreDÂeDÇeD§¿eD¨ÕeD©ëeDüfDþfD³fDÐ-fDò9fDõKfDöafD÷pfDø‚fDùfDú›fDû©fDü¿fDþåfDøðfDùùfDú gD÷&gDö4gD¹BgDõbgDûsgD´„gDÇ’gDÉ gDº®gDîÚgDïìgDðÿgDñhDÍBhDÑPhDÕ^hDðohDàzhDâˆhDá–hDî¤hDïµhD½ÃhD¼ÑhD»ßhD© iD¿!iD²J/iDÈ]lDD’lDE˜lDKžlDN§lDOÇlDPÝlDQïlDRmDS*mDTKmDU]mDVlmDW~mD\mD]­mD^ÃmD_ÉmD`ÌmDaímDbÿmDcnDh#nDi:nDnInDphnDqunDu}nDvnD±JŸnDxµnD±JÇnD|ÝnD±JïnD€oDºJoD¿J,oD„9oD…KoD†joD‡oDˆ‡oD‰ŠoDŠ oD‹¯oDŒÁoDnÐoDpâoDqïoDr÷oDN>pD^pDœgpDŸtpD ŠpD¡œpD¢®pD£½pD¤ÏpD¥ápD¦ópD§qD¨qD©-qD«KqD?UqD@kqDAqD©—qD«™qDR£qD˜ÓqD™åqDšøqD›rD¡{D I{D [{Dc{Dé†{Dê“{Dë›{DoÂ{DpÔ{Dqç{Drú{DË|D€|D}'|D|8|DwI|DxR|Dym|Dzˆ|D{£|DvÃ|DçÑ|Dïõ|Dñ}Dõ}Dù}Dý-}D;}D\}Dl}Dçz}Ds¡}D³}DÅ}DÍ}D/ä}D0ö}D4þ}DG~DH4~DIJ~DJP~DKS~DLY~DM\~DNb~DOe~DPk~DQn~DR…~DTˆ~DUž~DV­~DW¿~Dáã~DD *D!CD"RD'dD(jD)|DŠD«Dr¼DâÍDoÛDpìD úD €D²J,€Dð9€D7X€D8t€D9€D:œ€D?®€D@´€DAÆ€DqÔ€D²Jâ€Dôï€D²JDø!D²JLDüYD1ŠD2«DV´DUÂD@ÐD:ÞD9ìD(úD"‚D!‚D¬J$‚D»J‚D¬J‚Dª‚D¬Já‚DîƒDTƒDZ:ƒD]QƒD^eƒD_qƒD`yƒDŒƒD¤ƒDGŃD»JäƒD òƒD+„D1H„D8u„D7ž„DfÉ„D]Ø„D ø„D-…šQ$º{xÝQ ºñQ º R ºR€»äÿÿÿ)R€¼àÿÿÿ;R€½ÜÿÿÿKR@¾aR€¿¬ÿÿÿxR€À°ÿÿÿR€Á´ÿÿÿ¥R€Â¸ÿÿÿ»R@ÃÊR€ÄØÿÿÿØR€Å¼ÿÿÿæR@ÆõR@ÇS€ÈÀÿÿÿS@É#S&ÊÌœ;S€YS@ºkS@º}SÀ{x~S@¹JŠSÀöz‹Sà{ŒS@¹J˜SÀ‚™SંšS@¹J¦SÀ䃧Sàòƒ¨Sàd…©S$é Nd…ªSÜœ.d…D¶,d…D·,u…DÂ,|…DÃ,ƒ…DÅ,Š…DÆ,‘…DÌ,˜…D.Ë…DÍ,Ø…DÎ,Þ…DÏ,ä…D×,í…DÛ,ð…DÜ,†DÝ,,†DÞ,2†Dß,;†Dà,G†Dá,N†Dâ,n†Dã,‡†Dä,™†Då,Ÿ†D-¦†Dn-î†Do- ‡Dœ-‡D-.‡Dž-4‡DŸ-7‡D -=‡D¡-@‡D¢-F‡D£-I‡D¤-R‡D¥-[‡D¦-a‡D§-d‡D¨-‡D©-‡Dª-¢‡D«-¨‡D®-¯‡D¯-ƇD°-̇D±-Ò‡D²-ì‡D³-ˆD´-ˆDµ-8ˆD¸->ˆD¹-^ˆDº-tˆD»-zˆD¼-}ˆD½-ƒˆD¾-†ˆD¿- ˆDÀ-¹ˆDÁ-ȈD-áˆD -ïˆD -÷ˆD- ‰D-‰D-‰D-6‰D-Q‰D-j‰D-ЉD-£‰D-º‰D-ÉD-ωD-ì‰D-ŠD-ŠD-4ŠD±JMŠD-bŠD -mŠD!-ŠD"-…ŠD±JŒŠD#-¡ŠD$-¬ŠD%-¾ŠD&-ÄŠD±JËŠD'-àŠD(-ëŠD)-ýŠD*-‹D±J ‹D+-‹D,-*‹D--<‹D.-B‹DºJI‹D¿J^‹D0-k‹D3-„‹D4-›‹D5-¡‹D6-§‹D7-Ä‹D8-Ý‹D9-ï‹D:-õ‹D=-ü‹D>-ŒD?-ŒD@-ŒDA-9ŒDB-RŒDC-dŒDD-jŒDG-qŒDH-ˆŒDI-›ŒDJ-¹ŒDK-ÅŒDL-ÞŒDZ-éŒD[-D\-D]- D^-,D_-ED`-eDa-~Db-Dc-–Df-Dg-£Dk-µDl-ÙDm-åDr-íDt-ŽD- ŽDÛ,ŽDé,-ŽDê,JŽDí,gŽDî,zŽDñ-‚ŽDò,„ŽDó-¢ŽDô-¸ŽDõ-ÎŽDö-äŽD÷-úŽDù- Dü-Dý-,Dþ->Dÿ-PD.bD.tD.†D.˜D.ªD.¼D.ÎD.ìDê,ùDé, D -D-)D-:D-KD-^D-D±J”D²J©D¬J¶D -ÕD!-ÞD"-äD±JëD²J‘D¬J ‘D$-,‘D%-5‘D&-;‘D±JB‘D²JW‘D¬Jd‘D(-ƒ‘D)-Œ‘D*-’‘D±J™‘D²J®‘D¬J»‘D,-Ú‘D0-è‘D7-ù‘D8- ’DA-,’DB-?’DK-_’D^-p’D`-’Da-”’Db-¯’Dc-µ’Df-¼’Dg-Â’D©-â’D¨-ð’D²-þ’D´-“DÁ- “DÀ-1“D¿-?“Dv-P“Dw-m“Dx-“Dy-…“D.‘“D.Ÿ“D.­“D.»“D.É“D.דDÿ-å“Dþ-ó“Dý-”Dü-”Dó-”D÷-.”Dö-<”Dõ-M”Dô-^”Dï,o”Dð,z”Dñ,”Dò,³”Dó,É”Dô,Ï”Dõ,Ø”Dö,á”D÷,è”Dø,•Dù,•Dú,)•Dû,/•Dü,6•Dý,O•Dþ,h•D-‰•DÌ-¾•DÍ-Û•DÎ-ø•DÏ-–DÐ-(–DÑ-E–DÒ-^–DÓ-w–D×-‚–DØ-ž–DÙ-µ–DÚ-ΖDä-ç–Dð-ð–D×-—DÝ-—Dò-—Dw-$—DÞ-2—Dß-H—Dà-^—Dñ,ƒ—D÷,—Dã,À—Dâ,ΗDÎ-ß—DÍ-ð—DÑ-˜DÐ-˜DÏ- ˜DÌ-.˜D»J?˜D¬JN˜D+-h˜Dð,‡˜DÙ-¦˜DÚ-·˜Dæ-ȘDç-á˜Dè-ç˜Dé-î˜Dê-õ˜Dò,™DI- ™D_-?™D³-^™D@-}™D6-œ™D¾-»™D§-Ø™DÞ-õ™Dß-šDý,šDü,(šDþ,9šDù,JšDø,XšD÷,fšD -ƒšDM-¯šDN-šDO-ËšDP-ךDQ-õšDR-›DS-›DP-3›Dk-R›D¸-w›Dr-–›Dn-»›D»Jà›DÃ-î›Dv-œD}-.œD~-SœD-xœD€-œDƒ-œD„-ÕœDÃ-ÙœDS-éœDQ-úœD…- D†-D‡-,Dˆ-LD‰-bDŠ-hD‹-oDŒ-ŽD-¢DŽ-®D‡-ÏD†-÷D‹-žDˆ-EžÀS$¶,d…÷S ¶, T ¶, T ¶,/T€·,ÄÿÿÿET€¸,ÿÿÿXT€¹,”ÿÿÿlT€º,˜ÿÿÿT€»,œÿÿÿT€¼, ÿÿÿ£T€½,¤ÿÿÿºT€¾,¨ÿÿÿÏT€¿,¬ÿÿÿæT€À,°ÿÿÿøT@Á,U€Â,àÿÿÿU€Ã,Üÿÿÿ#U€Ä,Øÿÿÿ1U€Å,Ôÿÿÿ?U€Æ,ÐÿÿÿMU@Ç,\U@È,mU@Ê,|U&Ë,Üœ”U€²U@¶,ÄU@¶,ÖUÀd…×U@°JãUÀMŠäUàbŠåU@°JñUÀŒŠòUࡊóU@°JÿUÀËŠVààŠV@°J VÀ ‹Và‹V@¹JVÀI‹Vàk‹V@°J)VÀ”*VàÕ+V@°J7VÀë8Và,‘9V@°JEVÀB‘FVàƒ‘GV@°JSVÀ™‘TVàÚ‘UV@Æ-fV€Ç-Ìÿÿÿ{V€Ç-Èÿÿÿ‘V€Ç-äÿÿÿ¤V@È-¼VÀ¾•½Vàð–¾V@Æ-ÏV€Ç-ÌÿÿÿäV€Ç-ÈÿÿÿúV€Ç-äÿÿÿ W@È-%WÀ—&Wà—'W@Æ-8W€Ç-ÌÿÿÿMW€Ç-ÈÿÿÿcW€Ç-äÿÿÿvW@È-ŽWÀ2—Wàƒ—W@Æ-¡W€Ç-Ìÿÿÿ¶W€Ç-ÈÿÿÿÌW€Ç-äÿÿÿßW@È-÷WÀß—øWà?˜ùW@¹JXÀ?˜Xàh˜X@Æ-X€Ç-Ìÿÿÿ-X€Ç-ÈÿÿÿCX€Ç-äÿÿÿVX@È-nXÀ¦˜oXà™pX@Æ-X€Ç-Ìÿÿÿ–X€Ç-Èÿÿÿ¬X€Ç-äÿÿÿ¿X@È-×XÀõ™ØXàšÙX@¹JåXÀà›æXàî›çXàkžèX$NkžéX`ª.kžD .kžD.|žD.ƒžD.ŠžD.‘žDÀ.½žD.ÇžD.ÊžD".ÓžD#.ëžD$.úžD%.ŸD).ŸD*.'ŸD+.@ŸD,.FŸD-.OŸD..[ŸD/.bŸD0.‚ŸD1.›ŸD2.ªŸD3.°ŸDP.·ŸDQ.ןDR.îŸDS.ôŸDT.ýŸDU. DV.3 DW.L DX.a DY.g D\.n D].‹ D^.¦ D_.¿ D`.Õ Db.ô Dc.¡Dg. ¡Dh.¡D±J6¡Di.K¡Dj.V¡Dk.h¡Dl.n¡D±Ju¡Dm.Š¡Dn.•¡Do.§¡Dp.­¡DºJ´¡D¿JÉ¡Dr.Ö¡Ds.ï¡Dt.¢Du.¢Dv.'¢Dw.B¢Db.H¢Dc.V¢Dd.^¢Dq.k¢D).ˆ¢D7. ¢D8.½¢D;.Ú¢D<.í¢D±.õ¢D³.£D´.£Dµ.3£D¶.I£D¹.V£Dº.h£D».z£D¼.Œ£D½.ž£D¾.°£DÀ.È£D=.Ò£D>.Ý£D?.ó£D@.ü£DA.¤DB..¤D8.X¤D7.i¤D½.z¤D¼.ˆ¤D».–¤Dº.¤¤D¹.²¤D#.À¤D".ΤDµ.ú¤D³. ¥D´.¥DB.-¥DA.>¥D@.O¥DT.`¥D.¥D.ž¥D‘.»¥D’.Ø¥D“.ñ¥D—.ÿ¥D˜.¦D™.:¦Dš.S¦D¤.l¦D°.u¦Dz.…¦D{.¦¦D|.²¦D}.º¦D~.Õ¦Dh.à¦Dj.ñ¦Dn.ÿ¦Dr. §D—.§D.6§Dž.?§DŸ.U§D .k§D‚.–§DP.Ò§D1.þ§D0. ¨D.¨D..¨D‘.?¨DQ.P¨D²Jv¨D¬Jƒ¨D²J¢¨D¬J¯¨Dš.ΨD™.ߨD_.ð¨D¦.©D§.,©D¨.5©D©.<©Dª.C©D>.O©DW.l©DV.z©DU.‹©D^.œ©D`.­©D].¾©Dž.á©DŸ.ò©Ds.ªD»J ªD¬J+ªDv.JªDz.gªD»J„ªD}.ªD†.¬ªÿX$ .kž4Y  .HY  . ZY  .lY€ .°ÿÿÿY€.´ÿÿÿ•Y€.¸ÿÿÿ¥Y€.¼ÿÿÿµY€.ÀÿÿÿÅY@.ÔY€.ØÿÿÿâY€.àÿÿÿðY€.ÜÿÿÿþY€.äÿÿÿ Z@.Z&.`ª3Z€QZ@ .eZ@ .wZ@ .‰ZÀkžŠZ@°J–ZÀ6¡—ZàK¡˜Z@°J¤ZÀu¡¥ZàŠ¡¦Z@¹J²ZÀ´¡³ZàÖ¡´Z@‰.ÅZ€Š.ÔÿÿÿÚZ€Š.ÐÿÿÿðZ€Š.Ìÿÿÿ[€‹.Äÿÿÿ[À¥[àu¦[@‰.-[€Š.ÔÿÿÿB[€Š.ÐÿÿÿX[€Š.Ìÿÿÿk[€‹.Äÿÿÿ‚[À§ƒ[à–§„[@‰.•[€Š.Ôÿÿÿª[€Š.ÐÿÿÿÀ[€Š.ÌÿÿÿÓ[€‹.Äÿÿÿê[À¨ë[àP¨ì[@°Jø[Àv¨ù[ࢨú[@°J\À¢¨\àΨ\@‰.\€Š.Ôÿÿÿ.\€Š.ÐÿÿÿD\€Š.ÌÿÿÿW\€‹.Äÿÿÿn\ÀΨo\àð¨p\@‰.\€Š.Ôÿÿÿ–\€Š.Ðÿÿÿ¬\€Š.Ìÿÿÿ¿\€‹.ÄÿÿÿÖ\À©×\àO©Ø\@‰.é\€Š.Ôÿÿÿþ\€Š.Ðÿÿÿ]€Š.Ìÿÿÿ']€‹.Äÿÿÿ>]Àá©?]àª@]@¹JL]À ªM]àJªN]@¹JZ]À„ª[]àª\]àÖª]]$k NÖª.ÖªDCÖªD CíªD(õªD!(üªD"(«D$( «D%( «D&(«D*(«D-(!«D.(=«D1(U«D˜(t«D™(Š«Dš( «D›(¶«Dœ(Ï«DŸ(á«D (ð«D¡(¬D(C¬DR($¬DŠ(2¬D‹(I¬DŒ(R¬D(^¬DŽ(}¬D(¬D(›¬D‘(´¬D (جDŸ(æ¬D›(ô¬D˜(­Dš(­D™($­DU(5­DV(U­DW(u­DX(Ž­DY(”­DZ(­D[(¤­D\(«­D](Å­D^(Þ­D_(í­D`(ð­Dd(÷­De(®Df(.®Dg(1®Dh(7®Di(T®Dj(m®Dk(†®D/(«®D0(Ä®D1(ä®D2(ü®D3(¯D4(¯D7(!¯D±J0¯D8(E¯D9(L¯DD(d¯D\(ˆ¯D(¬¯D(ɯDŽ(Ú¯Dd(è¯Do(°Dp(°Dq(:°Dt(W°DÇJ`°DÈJu°Dt(}°Du(ˆ°Dv(“°Dw(¬°Dx(·°Dy(°Dz(ذD{(ï°D|(ò°D}(ú°D~( ±D€(±D(+±D‚(D±D/(i±D^(z±D](ˆ±Dy(™±Do(½±Dp(αDq(ß±Dv(ð±D$C²Dk(1²Dj(B²Di(S²D2(d²DÉJu²D:(”²D;(­²D±J³²D<(ɲD=(ײD>(ò²D?( ³D±J³D@('³DA(5³DB(P³DC(q³DºJw³D»JŒ³D¬J ³D‚(¿³D(гD€(á³D}(ò³Dz(´D²J'´D:(8´D²JI´D¬JV´D¿J—´DE(¤´DH(Å´DK(Ì´DN(ñ´D²JµD¬J µD>(,µ^]$CÖªž] C§] C °] C¹]@CÂ]@CË]@(Ü]€(Äÿÿÿó]€(”ÿÿÿ^€(˜ÿÿÿ^€(äÿÿÿ^€!(àÿÿÿ+^€"(Üÿÿÿ9^€#(œÿÿÿG^ÀõªH^à¬I^@(Z^€(Äÿÿÿq^€(”ÿÿÿ^€(˜ÿÿÿ^€(äÿÿÿ›^€!(àÿÿÿ©^€"(Üÿÿÿ·^€#(œÿÿÿÅ^À$¬Æ^€°J ÿÿÿÑ^À0¯Ò^àE¯Ó^€t(¬ÿÿÿÞ^À`°ß^€ÆJ°ÿÿÿì^À`°í^à}°î^à}°ï^à²ð^@(_€(Äÿÿÿ_€(”ÿÿÿ&_€(˜ÿÿÿ4_€(äÿÿÿB_€!(àÿÿÿP_€"(Üÿÿÿ^_€#(œÿÿÿl_À1²m_€t(¬ÿÿÿx_Àu²y_€ÆJ°ÿÿÿ†_Àu²‡_à”²ˆ_à”²‰_€°J¤ÿÿÿ”_À³²•_àɲ–_€°J¨ÿÿÿ¡_À³¢_à'³£_@¹J¯_Àw³°_࿳±_€°J ÿÿÿ¼_À'´½_à8´¾_€°J¤ÿÿÿÉ_ÀI´Ê_àu´Ë_€°J ÿÿÿÖ_Àu´×_à—´Ø_@¹Jä_À—´å_ऴæ_€°J¨ÿÿÿñ_Àµò_à,µó_à=µô_$g N=µ.=µD5=µD5NµD 5TµD!5WµD$5`µD%5cµD&5kµD(5wµD\5…µD_5‹µDb5”µDe5šµDh5žµDk5§µDy5°µDz5¿µD{5ѵD}5åµD+5ðµD,5¶D-5'¶D.5*¶D/5-¶D05=¶D15T¶D25u¶D35‡¶D45«¶D55½¶D65϶D75á¶DåJê¶DéJò¶DëJ!·D75R·Dy5o·Dz5x·D,5˜·Dr5¾·Ds5зDt5é·Du5¸Dv5¸D352¸Dr5J¸D85m¸D95|¸D=5¸D@5‹¸DD5˜¸Ds5¹¸D/5ǸDu5ë¸Dt5ù¸D85¹D25¹D+5#¹D65@¹D55N¹D45\¹DG5j¹DH5Œ¹DŸJ’¹D J«¹DH5º¹DI5ŹDJ5×¹DåJà¹DéJè¹DK5ºDL5!ºDP5$ºDS50ºDæJTºD¢JsºD£J~ºD¥J‚ºD¦J”ºD£J´ºDH5»ºDG5æºDI5»DK5»DëJ»DJ5P»DæJ{»õ_$5=µ7` 5M` 5 ^` 5x` 5Œ` 5©` 5Á`@5Ù`€ì`€5Èÿÿÿü`€5Ìÿÿÿ a€5Ðÿÿÿa€5Ôÿÿÿ&a€5Øÿÿÿ4a@5HaÀ=µIa€75ÜÿÿÿVaÀê¶WaàR·Xa@H5caÀ’¹daູea€J5äÿÿÿraÀà¹saàºta€75ÜÿÿÿaÀTº‚aàsºƒa@H5ŽaÀsºa€¢Jàÿÿÿ—aÀsº˜a໺™a໺ša€J5äÿÿÿ§aÀ»¨aàP»©a€J5äÿÿÿ¶aÀ{»·aà—»¸aà—»¹a$ZN—».—»DÍ—»DÕ¨»DÛ®»Dð±»D»»DßÈ»DàÓ»Dã×»Dææ»Dç¼Dë ¼Dì¼Dð¼Dñ$¼Dý(¼Dþ/¼Dß5¼Dà@¼D%I¼D'`¼Dj¼Dp¼Dx¼D¼Dò†¼DÇJ¼DÈJ¤¼DŸJ¬¼D JǼDóÖ¼Dôá¼Dõó¼Dö½D÷%½Dø<½Dù]½Dúa½Dûs½D“½DÇJ™½DÈJ®½DŸJ¶½D JѽDà½Dë½Dý½D¾D/¾D F¾D g¾D r¾D „¾D¢J¤¾D£J¯¾D¥J·¾D¦JɾDôé¾Dö÷¾Dú¿D¢J¿D£J¿D¥J%¿D¦J7¿DT¿Db¿D p¿DÉJ~¿Dò•¿DôI­¿DõIÆ¿DöIÖ¿D÷Iï¿DùIó¿DÉJÀDÀD÷I3ÀD£J;ÀDóBÀD ZÀD!hÀD “ÀD£J¡ÀD ¨ÀDõÂÀDÜÀºa$Í—»øa Íb Í b Í3b€ÎÄÿÿÿFb@Ï[b@Ñjb€Òäÿÿÿxb€ÓÈÿÿÿ†b€ÔÌÿÿÿ”b@ͧbÀ—»¨b€òÐÿÿÿ³bÀ¼´b଼µb@ÁbÀ™½Âbà¶½Ãb€¢JÔÿÿÿËbÀ¤¾Ìbàé¾Íb@¢JÖbÀ¿×bàT¿Øb€òÐÿÿÿãbÀ~¿äbà•¿åb€òIàÿÿÿób€òIÜÿÿÿc€òIØÿÿÿc@óIcÀ­¿càÀc@'cÀÀ(càÀ)c€òIàÿÿÿ7c€òIÜÿÿÿEc€òIØÿÿÿRc@óI]cÀ3À^cà;À_c€¢JÔÿÿÿgcÀ;ÀhcàBÀic@¢JrcÀ¡Àscà¨ÀtcàùÀuc$bNùÀvcäœ.ùÀD>:ùÀD?: ÁDa:ÁDb:ÁDc:ÁDe:&ÁDg:-ÁDh:4ÁDi:;ÁDj:BÁDk:IÁDn:PÁDo:YÁDp:•ÁDq:›ÁD„:¡ÁD‡:ªÁD‹:±ÁD•:ºÁD–:ÒÁD—:çÁD˜:ðÁD›:÷ÁDœ:ÂD:ÂDž:'ÂD¡:.ÂD¢:FÂD£:UÂD¤:^ÂD§:eÂD¨:ˆÂD©:¨ÂDª:ÁÂD«:ÇÂD¬:ÐÂD­:ÜÂD®:ãÂD¯:ÃD°:ÃD±:2ÃD²:GÃD³:PÃD¶:WÃDº:nÃDÇJtÃDÈJˆÃDº:ÃD»:›ÃD¼:¸ÃD½:ÑÃD¾:èÃD¿:îÃDÀ:÷ÃDÁ:ÄDÂ:-ÄDÃ:FÄDÄ:[ÄDÅ:dÄDË:kÄDÌ:ŽÄDÍ:ÄDÎ:¦ÄDÑ:­ÄDÙ:ØÄDÚ:õÄDÛ:ÅDÞ:/ÅDÇJ5ÅDÈJIÅDÞ:QÅDß:\ÅDà:fÅDá:ÅD ;‡ÅDo:°ÅDu=²ÅD–:¿ÅD—:ÈÅD˜:ÑÅD›:ØÅD¨:ÆDS=vÆDT=ŒÆDU=¢ÆDV=¸ÆDW=ÎÆDX=äÆDY=úÆDZ=ÇD[=&ÇD\=<ÇD_=IÇD`=^ÇDa=sÇDb=ˆÇDc=ÇDd=²ÇDe=ÇÇDf=ÜÇDg=ñÇDh=ÈDi=ÈDj=0ÈDk=EÈDl=ZÈDm=oÈDn=„ÈDo=™ÈDp=®ÈDq=ÃÈDr=ÔÈDs=âÈDu=ÉD¨: ÉDr=2ÉDq=@ÉDp=KÉDo=YÉDn=gÉDm=uÉDl=ƒÉDk=‘ÉDj=ŸÉDi=­ÉDh=»ÉDg=ÉÉDf=×ÉDe=åÉDd=óÉDc=ÊDb=ÊDa=ÊD`=+ÊD_=9ÊD©:GÊD³<ÊDS=ÆÊDT=×ÊDU=èÊDV=ùÊDW= ËDX=ËDY=,ËDZ==ËD[=NËDŒ:_ËD:ËDŽ:‘ËD:—ËD•:žËD¡:æËDœ:KÌD¢:YÌD¡:gÌD¶:ŒÌD:¯ÌDŒ:ÀÌDQ=þÌD¯:QÍD±:bÍD°:pÍD½:ÍDÀ:ÈÍD¼:÷ÍDÕ:ÎD";(ÎD#;HÎD$;aÎD%;gÎD&;pÎD';|ÎD(;ƒÎD);£ÎD*;¼ÎD+;ÑÎD,;ÚÎD/;áÎD0;ÏD1;ÏD2;$ÏD3;*ÏD4;GÏD5;hÏD6;‰ÏD7;ÏD8;¦ÏD;;­ÏD<;ÐÏD=;ëÏD>; ÐD^;-ÐD_;PÐD`;gÐDa;~ÐDb;‡ÐDc;“ÐDd;œÐDe;£ÐDf;ÀÐDg;áÐDh;ÑDÉJOÑDÁ:hÑDÃ:yÑDÂ:‡ÑDã:˜ÑD;°ÑDÌ:ÓÑD";áÑDB; ÒDC;(ÒDD;EÒDE;bÒDF;ÒDG;œÒDH;¹ÒDI;ÖÒDJ;óÒDM;ÓDN; ÓD€;$ÓDË:;ÓDÛ:^ÓDÙ:oÓDÚ:€ÓDO;‘ÓDP;œÓDQ;²ÓDR;ÂÓDS;×ÓDT;àÓDU;çÓDV;ÔDW;ÔDâ:7ÔDã:BÔDé:XÔDê:hÔDë:‚ÔDì:‹ÔDð:’ÔDñ:µÔDò:ÇÔDó:èÔD;ÕD;!ÕD;BÕDà:jÕD#;{ÕD3;ªÕDD;ÍÕDE;ÞÕDF;ïÕDG;ÖDH;ÖDI;"ÖDB;3ÖDC;DÖDJ;UÖDÉJfÖD*;ÖD);ÖDP;žÖDð:ÓÖD÷:ëÖDú:×DÇJ×DÈJ*×Dú:2×Dû:=×Dü:G×Dý:h×DQ=p×D<;{×DQ;˜×DU;Ç×DR;Ø×DW;æ×DV;÷×De;ØDþ:=ØDÿ:HØD;^ØD;|ØDÇJ‚ØDÈJ–ØDÉJšØD;®ØD;¹ØD;ÖØD;÷ØD ;ÙD ;ÙD ;#ÙD ;@ÙD ;aÙD;‚ÙD;£ÙD;ÄÙD;åÙDé: ÚDú:.ÚDi;QÚDm;rÚDn;•ÚDo;¬ÚDp;ÃÚDq;ÌÚDr;ØÚDs;áÚDt;èÚDu;ÛDv;&ÛDw;GÛDx;ÛD|;±ÛD};ÆÛD€;ÞÛD;öÛD‚;ÜDƒ;ÜD†; ÜD‡;?ÜDˆ;\ÜD‰;}ÜDŠ;”ÜD‹;šÜDŒ;£ÜD;ÀÜDŽ;áÜD;ÝD;ÝD‘;ÝD”;&ÝD•;6ÝD™;NÝD«;\ÝD¬;ªÝD»;²ÝD¼;ÁÝDÀ;ÛÝDÁ;þÝDÂ;ÞDÃ;:ÞDÄ;PÞDÆ;wÞDÇ;…ÞDË;ÞDÌ; ÞD±JÁÞDÍ;ÖÞDÎ;áÞDÏ;ûÞDÐ;ßD±J ßDÑ; ßDÒ;+ßDÓ;EßDÔ;NßDºJUßD¿JjßDÖ;wßDÙ;˜ßDÚ;®ßDÞ;ÀßDß;ãßDà;õßDá;àD<(àD<*êD?<3êDºJ:êD¿JOêDA<\êDD<}êDE<“êDŸJ¥êD JÄêDH<ÖêDI<áêDJ<üêDŸJëD J<ëDNïD£JLïD¥JPïD¦JdïDD<ïD£J§ïDH<®ïD£JÔïD²JÛïD¬JèïD3<ðDi<ðDm<5ðDnñDÀòDÑ=ŽøD?=¬øD@=ÊøDF=õøDG=ùDH=ùDI=ùDJ="ùD =.ùDþDš;|D›;œDœ;±D;·Dž;¾DŸ;ÜD ;ýD¡; D¢;*Dž;MD”;pDŒ;•D‰;ºD€;ñD|;Dt;CD;xDÿ:•D ;²DÉJÏŒc$>:ùÀ½c >:Ïc >: ác >:óc€?:Ôÿÿÿ d€@:àÿÿÿ$d@G:;d€H:PîÿÿSd€I:°öÿÿkd€J:°îÿÿd€K:°þÿÿ™d€L:Tîÿÿ±d€M:XîÿÿÆd€N:\îÿÿØd€O:`îÿÿðd€P:dîÿÿe€Q:hîÿÿe€R:lîÿÿ3e€S:pîÿÿCe€T:tîÿÿTe€U:xîÿÿke€V:|îÿÿ„e€W:€îÿÿ•e€X:„îÿÿ¥e€Y:ˆîÿÿ¸e€Z:ŒîÿÿËe€[:îÿÿâe€\:”îÿÿ÷e€]:˜îÿÿ f€^:œîÿÿ!f@_:0f@`:?f€`f€a:Ðÿÿÿnf€b:Ìÿÿÿ|f€c:ÈÿÿÿŠf€d: îÿÿšf€e:Äÿÿÿ¨f@f:·f€g:ÀÿÿÿÅf€h:¼ÿÿÿÓf€i:¸ÿÿÿâf€j:´ÿÿÿñf€k:°ÿÿÿg@l:g&m:äœ(g€Fg@>:Xg@>:jgÀùÀkg@º:wgÀtÃxg@ÆJ†gÀtÇgàÈgàÉg@Þ:•gÀ5Å–g@ÆJ¤gÀ5Å¥gàQŦgàQŧg@º:³gÀOÑ´g@ÆJÂgÀOÑÃgàhÑÄgàhÑÅg@Þ:ÑgÀfÖÒg@ÆJàgÀfÖágàÖâgàÖãg@ú:ïgÀ×ðg@ÆJþgÀ×ÿgà2×hà2×h@; hÀ‚Øh@ÆJhÀ‚Øhà®Øhà®Øh@°J+hÀÁÞ,hàÖÞ-h@°J9hÀ ß:hà ß;h@¹JGhÀUßHhàwßIh@ï;UhÀ‚âVh@ÆJdhÀ‚âehà®âfhà®âgh@<shÀùãth@ÆJ‚hÀùãƒhà%ä„hà%ä…h@¹J‘hÀ$ç’hàRç“h@°JŸhÀ„ç hà°ç¡h@°J­hÀ`è®hàŒè¯h@°J»hÀ¦é¼hà»é½h@°JÉhÀðéÊhàêËh@¹J×hÀ:êØhà\êÙh@žJâhÀ¥êãhàÖêäh@žJíhÀëîhàNëïh@žJøhÀ•ëùhàÆëúh@žJiÀ•íi@¢J iÀ•íiàØíiàØíi@žJiÀþíi@¢J#iÀþí$iàî%iàî&i@žJ/iÀ+î0i@¢J9iÀ+î:iàrî;iàrîïXi@žJaiÀ>ïbi@¢JkiÀ>ïliàïmiàïni@žJwiÀ§ïxi@¢JiÀ§ï‚ià®ïƒià®ï„i@žJiÀÔïŽi@¢J—iÀÔï˜iàÛï™iàÛïši@°J¦iÀÛï§iàð¨i@°J´iÀàòµiàõò¶i@°JÂiÀ*óÃià?óÄi@°JÐiÀtóÑià‰óÒi@°JÞiÀ¾óßiàÓóài@¹JìiÀôíià*ôîi@=ÿi€=Üÿÿÿj€=Øÿÿÿ*j€=äÿÿÿ=j@ =UjÀ]öVjà]øWj@=hj€=Üÿÿÿ}j€=Øÿÿÿ“j€=äÿÿÿ¦j@ =¾jÀmø¿jà.ùÀj@¹JÌjÀPúÍjà~úÎj@°JÚjÀÅúÛjàñúÜj@°JèjÀñúéjàûêj@°JöjÀû÷jàIûøj@°JkÀIûkàuûk@ú:kÀÏk@ÆJ!kÀÏ"kàè#kàè$kàè%k$ïANè&kðœ.èD®#èD¯#öD»#ýD¼#2D½#8D¾#>DÀ#GDÁ#JDåISDéI[DÄ#{DÅ#ŠDÆ#œDÉ#«DÊ#»DÐ#ÐD$åD$îD$D$#D$1D$JD$ND$qD$”D$ªD!$°D"$ÊD#$ÜD$$ëD)$ýD*$$D+$BD»#_DG$aDÅ#kDÆ#wDÉ#†D$›D4$¤DA$®DB$ÀDC$ÏDD$áDE$óDG$DÉ#D>$>DA$KDB$fDC$~DD$™DëI¹DÁ#îDÊ#DÐ#DÑ#4DÒ#=D®#NDÚ#bDÛ#„DÜ#§DÝ#ÀDß#ÆDà#ÝDá#ìDâ#þDç#Dè#6Dé#TDÒ#iDÓ#}DÔ#›DÕ#ŸD×#¯Dì#ºDí#ÍDŸJíD J Dî# Dï#! Dð#3 Dñ#P Dò#_ Dó#€ Dô#Œ Dõ#ž Dö#° D÷#» Dù#ã Dü#ë Dý# Dþ#0 Dÿ#I D$O D$f D$u D$‡ D $™ D $¿ D $Ý D¢J÷ D£J D¥J D¦J Dï#: Dâ#H Dá#V Dà#d Dñ#r Dõ#€ Dô#Ž Dé#œ DæI° D$$Ï D#$Ý D"$ë D+$ù D $ D$$ D$2 D$@ Dò#N D<$f D=$t D<$¢ D$­ D:$Å D<$Ì Dð#Õ D;$í Dí# Dì# D=$8 Dè#@ Dç#q Dß#— DÜ#» DÛ#Ø DÚ#ü D$D!$9D*$]D)$‡D $­D $ÓD$Dþ#(Dý#EDü#i D? )D@ DA ŠDB DD –DI ŸDJ ¢DåI«DéI³DN ÑDW ÝDX àDY øD\ D] D^ Da .Dd 4Dg :Dj @Dk FDl XDr dDs ‡Dt žDu ¤Dv ­Dw ÊDx ãDy üDz  D±J' D{ < D| G Dr ‡ D­ ® D® Ë D¯ è D² !DÇJ !DÈJ!D² '!D³ 2!D´ ú'D? (DB(DE(DK1(DL9(DO=(DRE(D5T(D[p(D\s(Dn~(DŸJ‡(D J (Dn®(Do¹(DåJ¿(DéJÇ(Dpê(Dqÿ(Dr)Du)Dx7)DyG)D|V)DŸJ_)D Jx)D|†)D}‘)DåJ—)DéJŸ)D~Â)D×)D€à)D„ç)D–û)D© *D®K*D±]*D²i*D¶q*Dêˆ*DñÉ*D½Ú*DÀú*DÁ +DË+DÌ!+DÖ&+DÙ8+DÜC+DßS+DEW+Dâ]+Dãc+Dål+Déx+D´ +DæIž+Dx ½+Dw Î+Dß+D¨E,DÉJ),Dz B,DP S,DÒ d,D» r,Dº ƒ,D¹ ”,Dâ ¥,Dã »,Dä Ñ,Då ê,Dæ ð,Dç ù,Dè -Dé -Dê -Dë --Dì C-Dí _-Dî x-Dï ‘-Dð ª-Dñ °-Dò ¹-Dó Â-Dô Ë-Dõ Ô-Dö Û-D÷ â-Dø é-Dù ð-Dú ÷-Dû .Dü .Dý .Dþ A.Dÿ Z.D.Dš.D³.DÈ.DÑ.D· ç.D} /D~ 5/D±J8/D M/D€ X/D m/D‚ v/DºJ}/D»J’/D¬J¡/Dƒ »/DØ á/DÈ é/D÷/D²J)0D¬J60Dì U0D‡0Dê ¹0D} ë0Dë ü0D€ .1D»J<1D²JJ1D¬JW1Dv1D„1D•1D¦1DuÛ1Dò1D2D2D92DT2Dm2D¿J¼2D„ É2D‡ ê2DŠ ö2D‹ 3DŒ "3D ;3DŽ A3D J3D Q3D‘ X3D’ j3D“ Ž3D” µ3D• Ö3D– ÷3D— 4D˜ 4D› 4Dœ 44D J4Dž c4DŸ i4D  r4D¡ y4D¢ €4D£  4D¤ Á4D¥ Ø4D¦ Þ4D]ê4D^5D_5D`/5Da55Db>5DcE5DdL5Del5Df5Dg¤5Dhª5D¢J¶5D£JÀ5D¥JÈ5D¦JÖ5D¢Jó5D£Jý5D¥J6D¦J6Dò06Dó@6Ddu6Dnª6Dpß6D$ó6DÇJù6DÈJ 7D$7D% 7D&=7D'^7D(u7D)~7D*Š7D+§7D,À7D-Ù7D.å7D/þ7Dí 38D~h8D—|8D˜–8D™¹8DšÒ8D›Ø8Dœá8Dè8Džï8DŸ9D %9D¡L9D¢m9D£Ž9D¤¥9D¥«9D£J¹9DÀ9DëJõ9Do :D£JU:D\:DÇJb:DÈJv:D~:D‰:D¦:D¿:DÖ:Dß:Dë:D ;D !;D :;D F;D _;D^”;DæJÉ;Dÿ è;Dî <DR<D_‡<D“ ¼<Dú â<D=D0=D9=D!N=D$f=D'r=D-“=D.Ÿ=DB®=DFº=DGÜ=DFó=DM >DN0>DOU>DPz>DQŸ>DRÄ>DSé>DT?DW3?DÇJ9?DÈJM?DWU?DX`?DYj?DZ‹?D4“?D'°?Då?Dö?D’ +@D*Q@DÉJ†@D Ÿ@D˜Ñ@D+AD[AD\AD^5AD_VAD`wADhADiÃADjÝADkæADŠíADõADŽBDBD"BD”)BD˜2BD™XBDšoBD›uBDœ~BD›BDž¼BDŸÝBD ÷BD¡CD¤CD¥#CD¦?CD§XCD¨^CD©gCDªnCD«uCD¬œCDʽCDËÉCDÌÚCDÍDDÎ#DDÏv€ °ÿÿÿQv€ àÿÿÿev€ Üÿÿÿxv€ Øÿÿÿ‰v€ Ôÿÿÿžv€ Ðÿÿÿ°v€ PÿÿÿÀv€ TÿÿÿÐv€ Xÿÿÿàv€ \ÿÿÿøv@ w@! %w@" :w€# `ÿÿÿOw€$ dÿÿÿcw€& hÿÿÿzw€' lÿÿÿw@* ¥w€+ pÿÿÿ¹w€, tÿÿÿÑw€- xÿÿÿéw€. |ÿÿÿýw@/  x€0 €ÿÿÿx€1 Ìÿÿÿ(x€2 Èÿÿÿ6x€3 ÄÿÿÿDx€4 ÀÿÿÿRx€5 ¼ÿÿÿ`x€6 ¸ÿÿÿnx€7 ´ÿÿÿ|x€8 äÿÿÿŠx€9 „ÿÿÿ™x@: ©xÀ),ªx@² ¶xÀ),·x@ÆJÅxÀ),ÆxàB,ÇxàB,Èx@°JÔxÀ8/ÕxàM/Öx@¹JâxÀ}/ãxà»/äx@°JðxÀ)0ñxàU0òx@¹JþxÀ<1ÿxàJ1y@°J yÀJ1 yàv1y@¹JyÀ¼2yàÉ2y@n'y@n0yÀ¶51y@žJ:yÀ¶5;y@¢JDyÀ¶5Eyàó5Fyàó5Gyàó5Hy@|QyÀó5Ry@žJ[yÀó5\y@¢JeyÀó5fyà06gyà06hyà06iy@$uyÀù6vy@ÆJ„yÀù6…yà7†yà7‡y@n’y@n›yÀ¹9œy@žJ¥yÀ¹9¦y@¢J¯yÀ¹9°yàÀ9±yàÀ9²yàÀ9³y@oÁyÀõ9Âyà :Ãy@|ÌyÀU:Íy@žJÖyÀU:×y@¢JàyÀU:áyà\:âyà\:ãyà\:äy@ðyÀb:ñy@ÆJÿyÀb:zà~:zà~:z@ozÀÉ;zàè;z@WzÀ9?z@ÆJ-zÀ9?.zàU?/zàU?0z@$VD|XVD}hVD~}VD†VD‚VDƒ–VDŠªVD‹ÍVDŒèVDWDŽWDKWD‘\WD•dWD–wWD±JWD—¥WD˜°WD™ÈWDšáWD±JäWD›ùWDœXDXDž"XDºJ)XD¿J>XD KXD£dXD¤vXD§~XD¨¡XD©´XDªÍXD«ÓXD¬ÚXD­÷XD®YD¯)YD°@YD±IYD²OYD³XYD´_YDµqYD¶’YD·¨YD¸ÉYD¹âYDºøYD»ZD¼2ZD½HZD¾iZD¿‚ZDÀ¦ZDÁÊZDÂäZDÃ[DÄ![DÅ:[DS[D‘d[D’l[DR–[DS¦[DTµ[DU¾[DXÅ[D Jï[Dq\Dr \Ds-\DtF\DZ_\D[m\D_u\D`Š\Da“\Ddš\De½\DfÔ\DgÝ\Dhã\Di]Dj]Dk2]DlG]DmP]DpW]DŸJz]D¢J•]D£J£]D¥J«]D¦J¿]D4Ü]D5å]D8ñ]D_^D}^D›^D~¦^D€¨^D<µ^D?¼^DBÃ^DEÊ^DFá^DGó^DHù^DN_DO_Dƒ_DŒ@_DG_DŽ`_Dv_D_D—š_Dš­_D¶_D ¿_D£È_D¤Ù_D¨á_DŸJè_D J`D¨`D©`Dª+`D±JD`D«Y`D¬``D¨x`D¸`D¹­`DºÊ`D»ç`D¾aD¿aDÀaDÁ*aDƒ@aD†ZaD‡}aDˆaD‰¶aDмaD‹ÃaDŒàaDbDX(bD`tbDaŠbDb bDc¶bDdÌbDeâbDføbDgcDh-cDiCcDlPcDmfcDnxcDocDp¢cDq·cDrÌcDsácDtöcDu dDv dDw2dDxDdDyVdDzhdD{zdD|ŒdD}ždD~´dD€ÚdD}çdDSõdD_eDkeDjeDi0eDtAeDsReDceD{teD|€eDz£eDy´eDxÅeDwÖeDvçeDuõeDtfDsfDrfDq-fDp;fDoIfDnWfDmefDñsfDò~fDC†fDŸJfD J¬fDCºfDDÅfDEâfDFûfDGgDH-gDIFgDJ_gDKvgDL~gDMŠgDN–gDO¢gDP«gDQ´gDR»gDSÂgDTÉgDUÐgDVågDWëgDXògDY hDZ$hD[=hDX[hD_shD`hDa­hDbÊhDcçhDdiDg!iDh4iDiÿxD?yD@yDŸJ$yD J?yDCQyDŸJ\yD J{yDDyDŸJšyD J³yDEÅyDFÐyDGéyDHzDIzDJ5zDKNzDŸJYzD JxzDLŠzDŸJ•zD J´zDMÈzDŸJÓzD JìzDNþzDO {DP"{DQF{DRR{DSk{DU„{DŸJ{D J®{DVÀ{DŸJË{D Jê{DWþ{DŸJ |D J"|DX4|DY?|DŸJX|D Jw|DZ‰|DŸJ”|D J³|D[Ç|DŸJÒ|D Jë|D\ý|D]}D^!}D_:}D`@}DaI}DbR}Dc[}Ddb}Dei}Dfp}DŸJw}D J–}Dgª}DŸJµ}D JÎ}Dhà}Dië}Dj~DóJ~DôJ)~DjE~DkM~Dlf~DŸJ„~D J£~Dp·~DŸJÂ~D JÛ~Dqí~Drø~DsDt1DŸJJD JiDu}DvˆDw«DxÄDyÝDzãD{êD| €D}#€D~<€DB€D€I€Df€D‚€Dƒ˜€D¢J¶€D£JÆ€D¥J΀D¦Jâ€D¢Jÿ€D£J D¥JD¦J#D¢J@D£JPD¥JXD¦JlD¢J‰D£J—D¥JŸD¦J­D¢JÊD£JÚD¥JâD¦JöD¢J‚D£J!‚D¥J)‚D¦J7‚D¢JT‚D£Jd‚D¥Jl‚D¦J€‚D¢J‚D£J«‚D¥J³‚D¦JÁ‚D5Þ‚D4ï‚D3ƒD,ƒD("ƒD)3ƒD*DƒD+UƒD&fƒD'wƒD£JˆƒDƒD× ƒDÚ±ƒD܃DÝÕƒDßøƒDå „Dè„Dë+„Dê<„DíM„D9^„D‰v„DŠ“„D‹°„DŒÍ„Dê„DŽ…D$…D’A…D“T…D”\…D•g…DŸJ}…D Jœ…D–°…DŸJ»…D JÔ…D—æ…D˜ñ…DŸJ †D J)†D™=†DŸJH†D Ja†Dšs†D›~†Dœ—†D»†DždžDŸà†D ù†DŸJ‡D J#‡D¡7‡DŸJB‡D J[‡D¢m‡D£x‡DŸJ‘‡D J°‡D¤ćDŸJχD Jè‡D¥ú‡D¦ˆD§ˆD¨BˆD©NˆDªgˆD¬€ˆDŸJ‹ˆD JªˆD­¾ˆDŸJɈD JâˆD®ôˆD¯ÿˆDŸJ‰D J7‰D°K‰DŸJV‰D Jo‰D±‰D²Œ‰DŸJ¥‰D JĉD³؉DŸJã‰D Jü‰D´ŠDµŠDŸJ2ŠD JQŠD¶eŠDŸJpŠD J‰ŠD·›ŠD¸¦ŠD¹¿ŠDºØŠD»ÞŠD¼çŠD½ðŠD¾ùŠD¿‹DÀ‹DÁ‹D‹DÃ,‹DÄ4‹DŸJ;‹D JZ‹DÅn‹DÆy‹DóJ‹DôJ˜‹DÆ®‹DǶ‹DÈÏ‹DöJí‹D÷Jû‹DùJŒDúJ!ŒD¢J>ŒD£JNŒD¥JVŒD¦JjŒD¢J‡ŒD£J•ŒD¥JŒD¦J«ŒD¢JÈŒD£JØŒD¥JàŒD¦JôŒDöJD÷JDùJ'DúJ<D¢JYD£JiD¥JqD¦J…D¢J¢D£J°D¥J¸D¦JÆD¢JãD£JóD¥JûD¦JŽDöJ,ŽD÷J:ŽDùJBŽDúJWŽD¢JtŽD£J„ŽD¥JŒŽD¦J ŽDŸJ½ŽD JÜŽDÌðŽDÍûŽDÎDÏ7DÐPDÑVDÒ]DÓƒDŸJœD J»DÔÏDÕÚDÖýD×DØ/DÙ5DÚ<DÛ\DÜuDÝŒDÞ”Dß Dà§DŸJ®D JÍDááDâìDóJòDôJ ‘Dâ!‘Dã)‘DäB‘Dç[‘Dèt‘D¢J’‘D£J ‘D¥J¨‘D¦J¶‘DøÓ‘Dûä‘Dü÷‘D£J’D!’D£J2’DG’DX’D£Ji’Dé…’D¢J–’D£J¤’D¥J¬’D¦Jº’D¢J×’D£Já’D¥Jé’D¦Jý’D–“D™+“Dœ<“D J“D¢J[“D£Je“D¥Jm“D¦J“DöJž“D÷J¨“DùJ°“DúJÈ“D¢Jå“D£Jõ“D¥Jý“D¦J”D¢J.”D£J<”D¥JD”D¦JX”D¢Ju”D£J…”D¥J”D¦J¡”D¢J¾”D£JÌ”D¥JÔ”D¦Jâ”D¢Jÿ”D£J•D¥J•D¦J+•D¢JH•D£JX•D¥J`•D¦Jt•DöJ‘•D÷JŸ•DùJ§•DúJ¿•D¢JÜ•D£Jê•D¥Jò•D¦J–D¢J–D£J-–D¥J5–D¦JI–D¢Jf–D£Jt–D¥J|–D¦JŠ–DöJ§–D÷Jµ–DùJ½–DúJÕ–DŠò–DC1—D;N—D¢J_—D£Jo—D¥Jw—D¦J‹—D¢J¨—D£J¶—D¥J¾—D¦JÌ—D¢Jé—D£Jù—D¥J˜D¦J˜D¢J2˜D£J@˜D¥JH˜D¦JV˜Dõs˜Dö³˜D÷ȘDøјDüؘDýò˜Dþ™Dÿ™D™D0™DS™Dm™D†™DŸ™D¸™DÒ™Dë™D šD!šD"8šD%AšD&ZšD'}šD(—šD)°šD*ÉšD+âšD,üšD-›D..›D/I›D0b›D3k›D4Ž›D5¦›D6¿›D9È›D:ë›D;œD<œD¢J0œD£J@œD¥JHœD¦J\œD¢JyœD£J‡œD¥JœD¦JœD¢JºœD£JÊœD¥JÒœD¦JæœDD~D€%D6D>GD=UD$fD(wD'ˆDF™D-ªDJ»DIÌD0ÝDîD;ûDŸJžD J8žDúLžDŸJWžD JpžDû‚žDüžDŸJ¦žD JÅžDýÙžDŸJäžD JýžDþŸDÿŸD3ŸDPŸDiŸD‚ŸD©ŸDµŸDΟDŸJÙŸD JøŸD  DŸJ D J0 DB D M DŸJf D J… D ™ DŸJ¤ D J½ D Ï D Ú D ó D¡D)¡DB¡Df¡Dr¡D£J¡D¢JÖ¡D£Jæ¡D¥Jî¡D¦J¢D¢D£JA¢Dör¢D;€¢Dü‘¢D©¢DÆ¢Dã¢D£D £D 0£D 8£D C£D|˜£D£Jã£DR ¤D»d¤Dºu¤D¹†¤D¸—¤D£J¨¤D¢J¯¤D£J¿¤D¥JǤD¦JÛ¤D¢Jø¤D£J¥D¥J¥D¦J$¥DöJA¥D÷JO¥DùJW¥DúJl¥D¢J‰¥D£J™¥D¥J¡¥D¦Jµ¥D˜Ò¥DŸã¥Džô¥D›¦Dè¦Dç'¦Dd8¦DcI¦DbZ¦Dak¦D`|¦D_¦DFž¦DÒ¯¦D®¹¦D­ʦDrÛ¦Dtì¦Dwý¦D|§D¸§D£J0§D¾7§D»H§DƒY§D‚j§D{§DÅŒ§DħDî§D‰¿§DЧDŽá§Dò§DŒ¨D‹¨DŠ%¨D¢J6¨D£JD¨D¥JL¨D¦J`¨D¢J}¨D£J¨D¥J•¨D¦J©¨D¢JƨD£JÔ¨D¥JܨD¦Jê¨DΩDÖ©DÓ)©DÛ:©DäK©Dã\©D¢Jm©D£J{©D¥Jƒ©D¦J‘©D¢J®©D£J¼©D¥JÄ©D¦JÒ©D£Jï©D¢Jö©D£JªD¥JªD¦J"ªDª?ªDEPªDŒ§ªD2¸ªD£JÕªDEܪDSíªDRþªDO«DŽ «D²J1«D¬J>«D²J]«D¬Jj«D‹‰«D£È«DªÙ«D©ê«D¦û«D\ ¬Ddd¬De¯¬Dhú¬DE­Dpz­DqÅ­Dr®D¢J[®D£Ji®D¥Jq®D¦J…®D¢J¢®D£J°®D¥J¸®D¦JÆ®D¢Jã®D£Jó®D¥Jû®D¦J¯D¢J,¯D£J:¯D¥JB¯D¦JV¯DöJs¯D÷J¯DùJ‰¯DúJ¡¯D¢J¾¯D£JίD¥JÖ¯D¦Jê¯D¢J°D£J°D¥J°D¦J+°D¢JH°D£JV°D¥J^°D¦Jl°D¢J‰°D£J™°D¥J¡°D¦Jµ°D¢JÒ°D£Jà°D¥Jè°D¦Jö°D¢J±D£J!±D¥J)±D¦J7±D¢JT±D£Jd±D¥Jl±D¦J€±D¢J±D£J­±D¥Jµ±D¦JɱD£Jæ±D¢Jû±D£J ²D¥J²D¦J'²D¢JD²D£JR²D¥JZ²D¦Jh²D¢J…²D£J•²D¥J²D¦J±²D¢JβD£JܲD¥Jä²D¦Jò²D¢J³D£J³D¥J'³D¦J;³D¢JX³D£Jf³D¥Jn³D¦J|³D¢J™³D£J©³D¥J±³D¦JųD¢Jâ³D£Jð³D¥Jø³D¦J´DöJ#´D÷J1´DùJ9´DúJN´D¢Jk´D£J{´D¥Jƒ´D¦J—´Dý´´D´DÓ´Dä´Dõ´D!µD(µD)(µD,9µD/JµD-[µD5lµD;}µDY޵DlŸµDk°µDiÁµD]ÒµD­ãµD®üµD±JÿµD¯¶D°¶D±7¶D²P¶DºJS¶D»Jh¶D¬J|¶D£J›¶Dü¢¶D³¶DĶDÕ¶Dÿæ¶D£J÷¶D²·D¯·D¸'·Dµ8·DÈI·DÇZ·D£Jk·D²J‡·D¬J”·D¢J³·D£J÷D¥JË·D¦Jß·D¢Jü·D£J ¸D¥J¸D¦J ¸D¢J=¸D£JK¸D¥JS¸D¦Ja¸D¢J~¸D£JޏD¥J–¸D¦Jª¸D£JǸD θD£J߸Dô¸D£J¹D=¹DN¹D _¹D£Jp¹D­¯¹DvÀ¹D£JÞ¹Dú¹D ºDºD-ºDŽ>ºD‹}ºDˆ¼ºD‡ûºD†:»DZy»DYŠ»D[›»D²J¬»D¬J¹»DvØ»DÕé»D}¼DæE¼Däb¼Dã¼DÞœ¼DÛ¹¼DÙÖ¼DØó¼DÖ½Dñ-½DìJ½Dég½D焽DÁ¡½D[à½D¾Dú$¾D±A¾DlR¾Dk‘¾DjоDh¿Dz6¿Doo¿Dn¤¿DmÙ¿DÀD5ÀDùRÀD÷oÀDöŒÀDÿ©ÀD»JÆÀD¬JÕÀDŸïÀD§ ÁD›)ÁDpFÁD"cÁD%€ÁD#ÁD.ºÁD4ùÁD:8ÂD9wÂD¯¶ÂDµÓÂD´ðÂD{ ÃD¹*ÃD·GÃD¶dÃDœÃD•žÃD©»ÃD¨ØÃD˜õÃDáÄDš/ÄD™LÄDÂiÄDº†ÄD–£ÄD•ÀÄDGÝÄDEúÄDDÅDC4ÅDÏQÅDÍnÅDÌ‹ÅD¿J¨ÅD´µÅDÌÖÅDÍäÅDÎèÅDÐöÅDØÆDÛ ÆDä!ÆDå/ÆDè7ÆDMZÆDLwÆDÕ”ÆDÚ±ÆD×ÎÆDÔëÆD/ÇD—%ÇDâBÇD_ÇDžÇD½»ÇD¼ØÇDõõÇD¿.ÈDÁKÈDÀhÈDÑ…ÈD ¢ÈDÒ¿ÈDÜÜÈD.ùÈD,ÉD+3ÉD&PÉD¬mÉDqŠÉD€§ÉD}ÄÉDsáÉDxþÉDvÊDu8ÊDPUÊD'rÊD*±ÊD+ðÊD3/ËDnËD§ËDNàËD—ýËDÌDYÌD&’ÌD%ÑÌD ÍD³OÍDÅlÍD‰ÍD¹¦ÍD®ÃÍD­àÍD>ýÍDAÎDB8ÎDK>ÎDYEÎD±UÎDLrÎDM’ÎDN©ÎDO²ÎDP¾ÎDQÞÎDRÿÎDS ÏDPFÏDMmÏDL”ÏDC»ÏDDÜÏDEâÏDFÿÏDGÐDALÐDEsÐDCšÐDVÁÐDÞÐDýûÐDûÑD5ÑD RÑD»JyÑD‡ÑDj¤ÑD¥ÁÑD¡ÞÑD¤ûÑD·ÒD¶5ÒD°RÒD´oÒD[ŒÒDZ©ÒD¢ÆÒD§ãÒD^ÓDÓDX:ÓDWWÓDhtÓD\‘ÓDþ®ÓD ÖÓD óÓDÔD-ÔD JÔDÆgÔDú„ÔDg¡Ôÿz$äqT@{ äT{ ä f{ äx{€å˜ÿÿÿ{€æàÿÿÿ¥{€çÜÿÿÿ½{€èØÿÿÿÖ{€éÔÿÿÿï{€êÐÿÿÿ|€ëÌÿÿÿ|€ìÈÿÿÿ4|€íÄÿÿÿM|€îÀÿÿÿb|€ï,ÿÿÿr|€ð0ÿÿÿ‚|€ñ4ÿÿÿ’|€ò8ÿÿÿ¤|@óº|€ô<ÿÿÿÔ|€õ@ÿÿÿì|€öDÿÿÿ}€÷Hÿÿÿ}@ø+}@ùB}@úV}€ûLÿÿÿo}€üPÿÿÿ}€ýTÿÿÿ‘}€þXÿÿÿ¬}€ÿ\ÿÿÿÁ}€`ÿÿÿÑ}€dÿÿÿè}€hÿÿÿø}@~€¼ÿÿÿ~€¸ÿÿÿ#~€´ÿÿÿ1~€°ÿÿÿ?~€¬ÿÿÿM~€ ¨ÿÿÿ[~€ ¤ÿÿÿi~€  ÿÿÿw~€ lÿÿÿ…~€ œÿÿÿ”~€pÿÿÿ¥~€äÿÿÿ´~& Ì~€ê~ÀqTë~@°J÷~ÀWø~à¥Wù~@°JÀäWàùW@¹JÀ)XàKX@žJÀï[à\ @žJ)Àz]*@¢J3À•]4àÜ]5àÜ]6@¨AÀè_B@žJKÀè_Là`Mà`N@°JZÀD`[àY`\@CgÀfh@žJqÀfràºfsàºft@}}@}ˆÀgj‰@òJ’Àgj“à˜j”à˜j•@žJžÀ kŸ@¢J¨À k©àkªàk«@žJ´ÀlµàBl¶@žJ¿ÀMlÀàxlÁ@žJÊÀœlËàÏlÌ@žJÕÀÚlÖàm×@žJàÀµmáàèmâ@žJëÀómìàní@žJöÀBn÷àunø@žJ€À€n€à«n€@žJ €Àßo €àp€@žJ€Àp€àHp€@žJ"€Àlp#€àŸp$€€&tÿÿÿ,€À³p-€@òJ6€À³p7€àâp8€àâp9€@žJB€ÀqC€àOqD€@žJM€ÀZqN€à…qO€@žJX€À©qY€àÜqZ€€/xÿÿÿb€Àðqc€@òJl€Àðqm€à%rn€à%ro€@žJx€À{ry€à¨rz€@žJƒ€À³r„€àÞr…€@žJŽ€Às€à5s€€úˆÿÿÿ˜€ÀFs™€@òJ¢€ÀFs£€àxs¤€àxs¥€@žJ®€À²s¯€àås°€@žJ¹€Àðsº€àt»€@žJÄ€À?tÅ€àrtÆ€€Œÿÿÿ΀ÀƒtÏ€@òJØ€ÀƒtÙ€àµtÚ€àµtÛ€@žJä€À„uå€à¯uæ€@òJï€Àõuð€à0vñ€@žJú€ÀËwû€@¢JÀËwàxàx@žJÀ xàSx@žJÀ^xà‰x@<&À°x'@žJ0À°x1àÛx2àÛx3@žJ<À$y=àQy>@žJGÀ\yHàyI@žJRÀšySàÅyT@žJ]ÀYz^àŠz_@žJhÀ•ziàÈzj@žJsÀÓztàþzu@žJ~À{àÀ{€@žJ‰ÀË{Šàþ{‹@žJ”À |•à4|–@žJŸÀX| à‰|¡@žJªÀ”|«àÇ|¬@žJµÀÒ|¶àý|·@žJÀÀw}Áàª}Â@žJËÀµ}Ìàà}Í€j|ÿÿÿÕ@jÞÀ~ß@òJèÀ~éàE~êàE~ë@žJôÀ„~õà·~ö@žJÿÀÂ~‚àí~‚@žJ ‚ÀJ ‚à} ‚@žJ‚À¶€‚@¢J‚À¶€ ‚àÿ€!‚àÿ€"‚@žJ+‚Àÿ€,‚@¢J5‚Àÿ€6‚à@7‚à@8‚@žJA‚À@B‚@¢JK‚À@L‚à‰M‚à‰N‚@žJW‚À‰X‚@¢Ja‚À‰b‚àÊc‚àÊd‚@žJm‚ÀÊn‚@¢Jw‚ÀÊx‚à‚y‚à‚z‚@žJƒ‚À‚„‚@¢J‚À‚Ž‚àT‚‚àT‚‚@žJ™‚ÀT‚š‚@¢J£‚ÀT‚¤‚à‚¥‚à‚¦‚@žJ¯‚À‚°‚@¢J¹‚À‚º‚àÞ‚»‚àÞ‚¼‚@žJÅ‚ÀˆƒÆ‚@¢JÏ‚ÀˆƒЂàƒÑ‚àƒÒ‚@žJÛ‚À}…܂అ݂@žJæ‚À»…ç‚àæ…è‚@žJñ‚À †ò‚à=†ó‚@žJü‚ÀH†ý‚às†þ‚@žJƒÀ‡ƒà7‡ ƒ@žJƒÀB‡ƒàm‡ƒ@žJƒÀ‘‡ƒàćƒ@žJ(ƒÀχ)ƒàú‡*ƒ@žJ3ƒÀ‹ˆ4ƒà¾ˆ5ƒ@žJ>ƒÀɈ?ƒàôˆ@ƒ@žJIƒÀ‰JƒàK‰Kƒ@žJTƒÀV‰Uƒà‰Vƒ@žJ_ƒÀ¥‰`ƒà؉aƒ@žJjƒÀã‰kƒàŠlƒ@žJuƒÀ2ŠvƒàeŠwƒ@žJ€ƒÀpŠƒà›Š‚ƒ@žJ‹ƒÀ;‹Œƒàn‹ƒ€Æ€ÿÿÿ•ƒÀ‹–ƒ@òJŸƒÀ‹ ƒà®‹¡ƒà®‹¢ƒ@òJ«ƒÀ틬ƒ@öJµƒÀí‹¶ƒà>Œ·ƒà>Œ¸ƒ@žJÁƒÀ>Œƒ@¢J˃À>Œ̃à‡Œ̓à‡Œ΃@žJ׃À‡Œ؃@¢JáƒÀ‡ŒâƒàÈŒãƒàÈŒäƒ@žJíƒÀÈŒîƒ@¢J÷ƒÀÈŒøƒàùƒàúƒ€úˆÿÿÿ„À„@òJ „À „@öJ„À„àY„àY„àY„@žJ#„ÀY$„@¢J-„ÀY.„à¢/„à¢0„@žJ9„À¢:„@¢JC„À¢D„àãE„àãF„@žJO„ÀãP„@¢JY„ÀãZ„à,Ž[„à,Ž\„€Œÿÿÿd„À,Že„@òJn„À,Žo„@öJx„À,Žy„àtŽz„àtŽ{„àtŽ|„@žJ…„Àtކ„@¢J„ÀtŽ„à½Ž‘„ཎ’„@žJ›„À½Žœ„àðŽ„@žJ¦„Àœ§„àϨ„@žJ±„À®²„à᳄€â„ÿÿÿ»„Àò¼„@òJÅ„ÀòÆ„à!‘Ç„à!‘È„@žJÑ„À’‘Ò„@¢JÛ„À’‘Ü„àÓ‘Ý„àÓ‘Þ„@žJç„À’è„@¢Jñ„À’ò„à!’ó„à!’ô„@žJý„À2’þ„@¢J…À2’…à9’ …à9’ …@žJ…À9’…@¢J…À9’…à@’…à@’ …@žJ)…À@’*…@¢J3…À@’4…àG’5…àG’6…@žJ?…Ài’@…@¢JI…Ài’J…àp’K…àp’L…@žJU…Àp’V…@¢J_…Àp’`…àw’a…àw’b…@žJk…Àw’l…@¢Ju…Àw’v…à~’w…à~’x…@žJ…À~’‚…@¢J‹…À~’Œ…à…’…à…’Ž…@<—…À–’˜…@žJ¡…À–’¢…@¢J«…À–’¬…à×’­…à×’®…à×’¯…@¨º…À×’»…@žJÄ…À×’Å…@¢JÎ…À×’Ï…à“Ð…à“Ñ…à“Ò…@CÝ…À[“Þ…@žJç…À[“è…@¢Jñ…À[“ò…àž“ó…àž“ô…àž“õ…@}þ…@} †Àž“ †@òJ†Àž“†@öJ†Àž“†à哆àå“ †àå“!†@žJ*†Àå“+†@¢J4†Àå“5†à.”6†à.”7†@žJ@†À.”A†@¢JJ†À.”K†àu”L†àu”M†@žJV†Àu”W†@¢J`†Àu”a†à¾”b†à¾”c†@žJl†À¾”m†@¢Jv†À¾”w†àÿ”x†àÿ”y†@žJ‚†Àÿ”ƒ†@¢JŒ†Àÿ”†àH•ކàH•†@žJ˜†ÀH•™†@¢J¢†ÀH•£†à‘•¤†à‘•¥†€&tÿÿÿ­†À‘•®†@òJ·†À‘•¸†@öJÁ†À‘•†àÜ•ÆàÜ•ĆàÜ•ņ@žJΆÀÜ•φ@¢J؆Àܕنà–Ú†à–Û†@žJä†À–å†@¢Jî†À–ï†àf–ð†àf–ñ†@žJú†Àf–û†@¢J‡Àf–‡à§–‡à§–‡€/xÿÿÿ‡À§–‡@òJ‡À§–‡@öJ#‡À§–$‡àò–%‡àò–&‡àò–'‡@žJ0‡À_—1‡@¢J:‡À_—;‡à¨—<‡à¨—=‡@žJF‡À¨—G‡@¢JP‡À¨—Q‡àé—R‡àé—S‡@žJ\‡Àé—]‡@¢Jf‡Àé—g‡à2˜h‡à2˜i‡@žJr‡À2˜s‡@¢J|‡À2˜}‡às˜~‡às˜‡@žJˆ‡À0œ‰‡@¢J’‡À0œ“‡àyœ”‡àyœ•‡@žJž‡ÀyœŸ‡@¢J¨‡Àyœ©‡àºœª‡àºœ«‡@žJ´‡Àºœµ‡@¢J¾‡Àºœ¿‡àÀ‡àÁ‡@žJʇÀžˇàLž̇@žJÕ‡ÀWžÖ‡à‚žׇ@žJà‡À¦žá‡àÙžâ‡@žJë‡Àäžì‡àŸí‡@žJö‡ÀÙŸ÷‡à  ø‡@žJˆÀ ˆàB ˆ@žJ ˆÀf  ˆà™ ˆ@žJˆÀ¤ ˆàÏ ˆ@C$ˆÀ¡%ˆ@žJ.ˆÀ¡/ˆ@¢J8ˆÀ¡9ˆà—¡:ˆà—¡;ˆà—¡<ˆ@žJEˆÀ—¡Fˆ@¢JOˆÀ—¡Pˆàž¡Qˆàž¡Rˆ@žJ[ˆÀž¡\ˆ@¢JeˆÀž¡fˆà¥¡gˆà¥¡hˆ@žJqˆÀ¥¡rˆ@¢J{ˆÀ¥¡|ˆà¬¡}ˆà¬¡~ˆ@žJ‡ˆÀ¬¡ˆˆ@¢J‘ˆÀ¬¡’ˆà³¡“ˆà³¡”ˆ@žJˆÀ³¡žˆ@¢J§ˆÀ³¡¨ˆàº¡©ˆàº¡ªˆ@žJ³ˆÀº¡´ˆ@¢J½ˆÀº¡¾ˆàÁ¡¿ˆàÁ¡Àˆ@žJɈÀÁ¡ʈ@¢JÓˆÀÁ¡ÔˆàȡՈàȡֈ@žJ߈ÀÈ¡àˆ@¢JéˆÀÈ¡êˆàÏ¡ëˆàÏ¡ìˆ@žJõˆÀÏ¡öˆ@¢JÿˆÀÏ¡‰àÖ¡‰àÖ¡‰@žJ ‰ÀÖ¡ ‰@¢J‰ÀÖ¡‰à¢‰à¢‰@žJ!‰ÀA¢"‰@¢J+‰ÀA¢,‰àH¢-‰àH¢.‰@žJ7‰ÀH¢8‰@¢JA‰ÀH¢B‰àO¢C‰àO¢D‰@žJM‰ÀO¢N‰@¢JW‰ÀO¢X‰àV¢Y‰àV¢Z‰@žJc‰ÀV¢d‰@¢Jm‰ÀV¢n‰à]¢o‰à]¢p‰@žJy‰À]¢z‰@¢Jƒ‰À]¢„‰àd¢…‰àd¢†‰@žJ‰Àd¢‰@¢J™‰Àd¢š‰àk¢›‰àk¢œ‰@žJ¥‰Àk¢¦‰@¢J¯‰Àk¢°‰àr¢±‰àr¢²‰@žJ»‰À㣼‰@¢JʼnÀã£Ɖàê£ljàê£ȉ@žJщÀê£Ò‰@¢JÛ‰Àê£܉àñ£݉àñ£Þ‰@žJç‰Àñ£è‰@¢Jñ‰Àñ£ò‰àø£ó‰àø£ô‰@žJý‰Àø£þ‰@¢JŠÀø£Šàÿ£ Šàÿ£ Š@žJŠÀÿ£Š@¢JŠÀÿ£Šà¤Šà¤ Š@žJ)ŠÀ¤*Š@¢J3ŠÀ¤4Šà ¤5Šà ¤6Š@žJ?ŠÀ¨¤@Š@¢JIŠÀ¨¤JŠà¯¤KŠà¯¤LŠ@žJUŠÀ¯¤VŠ@¢J_ŠÀ¯¤`Šàø¤aŠàø¤bŠ@žJkŠÀø¤lŠ@¢JuŠÀø¤vŠàA¥wŠàA¥xŠ€â„ÿÿÿ€ŠÀA¥Š@òJŠŠÀA¥‹Š@öJ”ŠÀA¥•Šà‰¥–Šà‰¥—Šà‰¥˜Š@žJ¡ŠÀ‰¥¢Š@¢J«ŠÀ‰¥¬ŠàÒ¥­ŠàÒ¥®Š@žJ·ŠÀ0§¸Š@¢JÁŠÀ0§Šà7§Êà7§ÄŠ@žJÍŠÀ6¨Ί@¢J׊À6¨ØŠà}¨ÙŠà}¨ÚŠ@žJãŠÀ}¨äŠ@¢JíŠÀ}¨îŠàƨïŠàƨðŠ@žJùŠÀƨúŠ@¢J‹Àƨ‹à©‹à©‹@žJ‹Àm©‹@¢J‹Àm©‹à®©‹à®©‹@žJ%‹À®©&‹@¢J/‹À®©0‹àï©1‹àï©2‹@<;‹Àï©<‹@žJE‹Àï©F‹@¢JO‹Àï©P‹àö©Q‹àö©R‹àö©S‹@žJ\‹Àö©]‹@¢Jf‹Àö©g‹à?ªh‹à?ªi‹@¨t‹ÀÕªu‹@žJ~‹ÀÕª‹@¢Jˆ‹ÀÕª‰‹àܪŠ‹àܪ‹‹àܪŒ‹@°J˜‹À1«™‹à]«š‹@°J¦‹À]«§‹à‰«¨‹@žJ±‹À[®²‹@¢J»‹À[®¼‹à¢®½‹à¢®¾‹@žJÇ‹À¢®È‹@¢JÑ‹À¢®Ò‹àã®Ó‹àã®Ô‹@žJÝ‹Àã®Þ‹@¢Jç‹Àã®è‹à,¯é‹à,¯ê‹@žJó‹À,¯ô‹@¢Jý‹À,¯þ‹às¯ÿ‹às¯Œ€j|ÿÿÿŒ@jŒÀs¯Œ@òJŒÀs¯Œ@öJ%ŒÀs¯&Œà¾¯'Œà¾¯(Œà¾¯)Œ@žJ2ŒÀ¾¯3Œ@¢J<ŒÀ¾¯=Œà°>Œà°?Œ@žJHŒÀ°IŒ@¢JRŒÀ°SŒàH°TŒàH°UŒ@žJ^ŒÀH°_Œ@¢JhŒÀH°iŒà‰°jŒà‰°kŒ@žJtŒÀ‰°uŒ@¢J~ŒÀ‰°ŒàÒ°€ŒàÒ°Œ@žJŠŒÀÒ°‹Œ@¢J”ŒÀÒ°•Œà±–Œà±—Œ@žJ ŒÀ±¡Œ@¢JªŒÀ±«ŒàT±¬ŒàT±­Œ@žJ¶ŒÀT±·Œ@¢JÀŒÀT±ÁŒà±ÂŒà±ÃŒ@žJÌŒÀ±ÍŒ@¢JÖŒÀ±׌àæ±ØŒàæ±ÙŒ@žJâŒÀæ±ãŒ@¢JìŒÀæ±íŒàí±îŒàí±ïŒ@žJøŒÀí±ùŒ@¢JÀí±àô±àô±@žJÀô±@¢JÀô±àû±àû±@žJ$Àû±%@¢J.Àû±/àD²0àD²1@žJ:ÀD²;@¢JDÀD²Eà…²Fà…²G@žJPÀ…²Q@¢JZÀ…²[àβ\àβ]@žJfÀβg@¢JpÀβqà³rà³s@žJ|À³}@¢J†À³‡àX³ˆàX³‰@žJ’ÀX³“@¢JœÀX³à™³žà™³Ÿ@žJ¨À™³©@¢J²À™³³àâ³´àâ³µ@žJ¾À⳿@¢JÈÀâ³Éà#´Êà#´Ë€Æ€ÿÿÿÓÀ#´Ô@òJÝÀ#´Þ@öJçÀ#´èàk´éàk´êàk´ë@žJôÀk´õ@¢JþÀk´ÿà´´Žà´´Ž@°J ŽÀÿµŽà¶Ž@¹JŽÀS¶Žà›¶Ž@žJ&ŽÀ›¶'Ž@¢J0ŽÀ›¶1Žà¢¶2Žà¢¶3Ž@žJ<ŽÀ÷¶=Ž@¢JFŽÀ÷¶GŽàþ¶HŽàþ¶IŽ@žJRŽÀþ¶SŽ@¢J\ŽÀþ¶]Žà·^Žà·_Ž@žJhŽÀk·iŽ@¢JrŽÀk·sŽàr·tŽàr·uŽ@žJ~ŽÀr·Ž@¢JˆŽÀr·‰Žày·ŠŽày·‹Ž@žJ”ŽÀy·•Ž@¢JžŽÀy·ŸŽà€· Žà€·¡Ž@žJªŽÀ€·«Ž@¢J´ŽÀ€·µŽà‡·¶Žà‡··Ž@°JÃŽÀ‡·ÄŽà³·ÅŽ@žJÎŽÀ³·ÏŽ@¢JØŽÀ³·ÙŽàü·ÚŽàü·ÛŽ@žJäŽÀü·åŽ@¢JîŽÀü·ïŽà=¸ðŽà=¸ñŽ@žJúŽÀ=¸ûŽ@¢JÀ=¸à~¸à~¸@žJÀ~¸@¢JÀ~¸àǸàǸ@žJ&ÀǸ'@¢J0ÀǸ1àθ2àθ3@žJ<À߸=@¢JFÀ߸Gàæ¸Hàæ¸I@žJRÀæ¸S@¢J\Àæ¸]àí¸^àí¸_@žJhÀí¸i@¢JrÀí¸sàô¸tàô¸u@žJ~À¹@¢JˆÀ¹‰à ¹Šà ¹‹@žJ”À ¹•@¢JžÀ ¹Ÿà¹ à¹¡@žJªÀ¹«@¢J´À¹µà¹¶à¹·@žJÀÀ¹Á@¢JÊÀ¹Ëà!¹Ìà!¹Í@žJÖÀ!¹×@¢JàÀ!¹áà(¹âà(¹ã@žJìÀ(¹í@¢JöÀ(¹÷à/¹øà/¹ù@žJÀ/¹@¢J À/¹ à6¹à6¹@žJÀ6¹@¢J"À6¹#à=¹$à=¹%@žJ.Àp¹/@¢J8Àp¹9àw¹:àw¹;@žJDÀw¹E@¢JNÀw¹Oà~¹Pà~¹Q@žJZÀ~¹[@¢JdÀ~¹eà…¹fà…¹g@žJpÀ…¹q@¢JzÀ…¹{àŒ¹|àŒ¹}@žJ†ÀŒ¹‡@¢JÀŒ¹‘à“¹’à“¹“@žJœÀ“¹@¢J¦À“¹§àš¹¨àš¹©@žJ²Àš¹³@¢J¼Àš¹½à¡¹¾à¡¹¿@žJÈÀ¡¹É@¢JÒÀ¡¹ÓਹÔਹÕ@žJÞÀ¨¹ß@¢JèÀ¨¹é௹ê௹ë@žJôÀÞ¹õ@¢JþÀÞ¹ÿà幑à幑@žJ ‘Àå¹ ‘@¢J‘À幑à칑à칑@žJ ‘Àì¹!‘@¢J*‘Àì¹+‘àó¹,‘àó¹-‘@žJ6‘Àó¹7‘@¢J@‘Àó¹A‘àú¹B‘àú¹C‘@°JO‘À¬»P‘àØ»Q‘@¹J]‘ÀÆÀ^‘àïÀ_‘@¹Jk‘À¨Ål‘àµÅm‘@¹Jy‘ÀyÑz‘à‡Ñ{‘à¾Ô|‘$M€N¾Ô}‘H.¾ÔDƒ¾ÔD„ÏÔD…ÖÔD‰ÝÔD–äÔD—íÔD˜öÔD™ÿÔDš6ÕD ‡ÕD¡ÕD¢“ÕD£™ÕD¤ŸÕD¥¥ÕD¨«ÕD«´ÕD¬¿ÕD­ÇÕDŸJÊÕD JãÕD­öÕD®ÖDŸJÖD JÖD®0ÖD¯;ÖD°WÖD±iÖD²{ÖD³™ÖD´ÖD¶²ÖD¿½ÖDÀÈÖDÁÐÖDŸJÓÖD JìÖDÁÿÖD ×DŸJ ×D J&×DÂ9×DÃD×DÄ`×DÅr×DÆ„×DÇ¢×DÈ®×DÊÃ×DÓÎ×DÔÝ×DGå×DHë×D›ø×DœØD4ØDd?ØDfAØDËNØDY[ØDZqØD[ƒØD\’ØD]¤ØD^¶ØD_ÈØD`ÚØDaìØDbúØDcÙDdÙDfDÙDbQÙDa_ÙD`mÙD_~ÙD^ÙD] ÙD\®ÙD[¼ÙDZÊÙD¢JØÙD£JæÙD¥JîÙD¦JýÙDcÚDY+ÚD¢J<ÚD£JJÚD¥JRÚD¦JaÚD£J~ÚD®…ÚDP½ÚDQÏÚDRñÚDSÛDTÛDU6ÛDVKÛD­]ÛDPƒÛDU”ÛDRŸÛDS­ÛDT»ÛDÉÛD¢JëÛD£JùÛD¥JÜD¦JÜD×-ÜDÇJ3ÜDÈJHÜDØRÜDÙoÜDÚÜDÇJ‡ÜDÈJ›ÜDÛ£ÜDÜÀÜDÝÏÜDŸJÒÜD JëÜDÝýÜDÞÝDŸJÝD J!ÝDÞ4ÝDß?ÝDàVÝDá\ÝDâeÝDãhÝDænÝDç‡ÝDè™ÝDé«ÝDÇJ±ÝDÈJÆÝDêÎÝDëîÝDìÞDŸJÞD J!ÞDì4ÞDí?ÞDŸJEÞD J^ÞDíqÞDî|ÞDï“ÞDðœÞDñ¥ÞDò«ÞDõ±ÞDöËÞD÷âÞDøùÞDŸJÿÞD JßDø-ßDù8ßDúOßDûUßDü[ßDý^ßDþdßDjßD„ßD–ßD¨ßD ½ßD ÜßD óßD àD'àDKàDeàD†àDšàD±àDÈàDâàDíàDõàDQ áD¢JáD£J(áD¥J,áD¦J;áD£JXáDÂ_áDÁ~áD±§áD°µáD´ÃáD¯×áD²ôáDÆ âDÅ2âDÄ@âDÈNâDÃbâDÆâD¢JœâD£J«âD¥J³âD¦JÁâDÙáâDÉJïâDÚãDP)ãDØ>ãD£JxãDÞãDܳãD£JÁãDÝÃãD¢JàãD£JïãD¥JóãD¦JäDÉJ"äD×6äDß\äDç‰äD¢J—äD£J¥äD¥J­äD¦J¿äDèÜäDÉJêäDêþäDë"åDæ0åD£JdåDìkåD£JŸåDí¦åD¢JÓåD£JáåD¥JååD¦J÷åDîæDõ:æDùgæD£J„æDø‹æD¢J¨æD£J¶æD¥JºæD¦JÌæDéæDçDçD#$çDŸJDçD J`çD$sçDŸJ~çD JšçD%¬çD&´çDŸJºçD JÕçD&èçD'óçD( èD)èD*èD.èD/6èD0MèD1dèD6~èD7•èD8›èD9¡èD:½èD;ÔèD<ëèD=ñèD>üèD?éD@&éD>WéD;‘éD9ËéD6÷éD.#êD'`êD£JêD&”êD¢JÈêD£JÖêD¥JÚêD¦JìêD£J ëD% ëD¢JFëD£JTëD¥JXëD¦JiëD£J†ëD$ëD¢JÊëD£JØëD¥JÜëD¦JîëD# ìD4ìDaìD ŽìD ÂìDèì“‘$ƒ¾ÔÖ‘ ƒê‘ ƒ ü‘ ƒ’€„Øÿÿÿ ’€…àÿÿÿ0’€†ÜÿÿÿK’€‡äÿÿÿf’€ˆÔÿÿÿ’€‰Ðÿÿÿ–’€Š„ÿÿÿ¬’@‹½’€ŒˆÿÿÿÚ’@é’€ŽÌÿÿÿ÷’€Œÿÿÿ“€ÿÿÿ“@‘"“€’”ÿÿÿ0“€“˜ÿÿÿ>“€”œÿÿÿL“&•Hd“€‚“À¾Ôƒ“@­Œ“ÀÊÕ“àöÕŽ“@®—“ÀÖ˜“à0Ö™“@Á¢“ÀÓÖ£“àÿÖ¤“@­“À ×®“à9ׯ“@®¸“ÀØÙ¹“@¢J“ÀØÙÓàÚÄ“àÚÅ“@­ΓÀ<ÚÏ“@¢JØ“À<ÚÙ“à~ÚÚ“à~ÚÛ“@®ä“À~Úå“@¢Jî“À~Úï“à…Úð“à…Úñ“@Âú“ÀëÛû“@¢J”ÀëÛ”à-Ü”à-Ü”@×”À3Ü”àRÜ”@Ú!”À‡Ü"”à£Ü#”@Ý,”ÀÒÜ-”àýÜ.”@Þ7”ÀÝ8”à4Ý9”@éE”À±ÝF”àÎÝG”€ì¨ÿÿÿO”ÀÞP”à4ÞQ”€í¬ÿÿÿY”ÀEÞZ”àqÞ[”€ø°ÿÿÿc”ÀÿÞd”à-ße”@Án”Àáo”@¢Jx”Àáy”àXáz”àXá{”@„”ÀXá…”@¢JŽ”ÀXá”à_á”à_á‘”@Ýš”Àœâ›”€¢J ÿÿÿ£”Àœâ¤”àá⥔àá⦔@Ú²”Àïâ³”àã´”@Þ½”Àxã¾”€¢J¤ÿÿÿÆ”ÀxãÇ”àãÈ”àãÉ”@ÝÒ”ÀÁãÓ”€¢J ÿÿÿÛ”ÀÁãÜ”àÃãÝ”àÃãÞ”@Þç”Ààã蔀¢J¤ÿÿÿð”Ààãñ”à"äò”à"äó”@×ÿ”À"ä•à6ä•€ì¨ÿÿÿ •À—ä •@¢J•À—ä•àÜä•àÜä•@é"•Àêä#•àþä$•€ì¨ÿÿÿ,•Àdå-•@¢J6•Àdå7•àkå8•àkå9•€í¬ÿÿÿA•ÀŸåB•@¢JK•ÀŸåL•à¦åM•à¦åN•€í¬ÿÿÿV•ÀÓåW•@¢J`•ÀÓåa•àæb•àæc•€ø°ÿÿÿk•À„æl•@¢Ju•À„æv•à‹æw•à‹æx•€ø°ÿÿÿ€•À¨æ•@¢JŠ•À¨æ‹•àéæŒ•àéæ•€&´ÿÿÿ••Àºç–•àèç—•€&´ÿÿÿŸ•Àê •@¢J©•Àꪕà”ê«•à”ꬕ€&´ÿÿÿ´•ÀÈ굕@¢J¾•ÀÈê¿•à ëÀ•à ëÁ•@¢JÊ•À ëË•à ëÌ•@¢JÕ•ÀFëÖ•à†ëו@¢Jà•À†ëá•àëâ•@¢Jë•ÀÊëì•à ìí•àöìî•$8Nöìï•`.öìDiöìDjíDm íDzíD{íD} íD€'íD0íD‚9íDƒpíD‰³íDйíD‹¿íDŒÅíDËíD“ÔíD–×íD—ïíDîD§ îD¨îD©*îD¬6îD­<îD®QîD±WîD²wîD³’îD´¤îDµºîD·ßîD¸íîD¼õîD½ïD±J!ïD¾6ïD¿AïDÀSïDÁYïD±J`ïDÂuïDÀïDÄ’ïDŘïDºJŸïD¿J´ïDÇÁïDÊÚïDËôïDÌ)ðDÍ;ðDÎAðDÒHðDÓSðDÔsðDÕðDئðDþ®ðDÿÅðDþÐðD JãðDôðDÿðDñDñD"ñD+ñD2ñD DñD eñD ñD £ñD ¼ñDÕñDçñDíñDôñDóJüñDôJòD3òD;òDÿ?òDŸJOòD¢JgòD£JtòD¥J|òD¦JòDöJªòD÷J·òDùJ¿òDúJ×òDôòD óD óD$$óD%/óD„fóD…|óD†’óDI¨óDKªóD£J´óD½»óD¿ÌóDÃÚóDÇèóDÌùóD)ôD*ôD–OôD6yôD7ôD8¥ôD9»ôD<ÈôD=ÞôD>ðôD?ÿôD@õDA#õDB5õDCGõDDYõDEkõDF}õDGõDH¡õDI·õDKÝõD³çõDµõõDÚöDÛ#öDÜ5öDÝ;öDÕGöDDXöDEaöDFöDGöDCÀöDBÎöDAÜöD@êöD?øöD>÷D=÷D±"÷D7N÷D8_÷D<p÷DH÷D6’÷D—£÷D­´÷D¨Â÷D Ð÷D5è÷D²JøD¬JøD²J>øD¬JKøD²jøD†“øDÛ¦øD´·øDžãøDŸùD ùDŸùD $ùD„,ùD…=ùDÚNùDáfùDâƒùDå ùDæ°ùDç¸ùDèÃùDëÙùDúD»J-úD¬J<úDÆVúDásúDâ„úDž•úDËÇúDÔäúD¹ûD0ûD2%ûDþ8ûD»JUûDècû–$iöìL– i`– i r– i„–€jØÿÿÿŸ–€kàÿÿÿº–€lÜÿÿÿÒ–€mäÿÿÿç–€nœÿÿÿ÷–€o ÿÿÿ—€p¤ÿÿÿ—@q/—€r¨ÿÿÿK—€s¬ÿÿÿb—€t°ÿÿÿr—€u´ÿÿÿ„—€v¸ÿÿÿš—@w©—€x¼ÿÿÿ·—€zÔÿÿÿÅ—€{ÐÿÿÿÓ—@|â—€}Ìÿÿÿð—€~Àÿÿÿ˜&`˜€6˜Àöì7˜@°JC˜À!ïD˜à6ïE˜@°JQ˜À`ïR˜àuïS˜@¹J_˜ÀŸï`˜àÁïa˜@žJj˜Àãðk˜àôðl˜@òJu˜Àüñv˜à3òw˜@žJ€˜ÀOò˜@¢JŠ˜Àgò‹˜àªòŒ˜àªò˜@òJ–˜Àªò—˜@öJ ˜Àªò¡˜àôò¢˜àôò£˜@žJ¬˜À´ó­˜@¢J¶˜À´ó·˜à»ó¸˜à»ó¹˜@°JŘÀøƘà>øǘ@°JÓ˜À>øÔ˜àjøÕ˜@¹Já˜À-úâ˜àVúã˜@¹Jï˜ÀUûð˜àcûñ˜à€ûò˜$ŠN€ûó˜€.€ûDO€ûDP‘ûDW˜ûDtŸûDu¦ûDv­ûD~´ûD½ûD€ÆûDÏûD‚ØûDƒáûD„êûD…!üD‹€üDŒ†üDŒüDŽ’üD˜üDžüD‘¤üD’ªüD“°üD¡¶üD¤¹üD¥ÅüD¦ÔüD©àüDªëüD¶óüD· ýD¼ýD½6ýDÂEýDÄ¥ýDųýDÉ»ýDÎÐýDÏçýD×öýDÙþDÚ$þDÞ,þDßAþDàJþDãQþDäuþDç}þDè›þDëžþDÓþDèþDñþD øþDŸJûþD JÿD "ÿD -ÿD BÿD KÿD#RÿD$aÿD(vÿD J ÿD5²ÿD6½ÿD7ÙÿD8õÿD9ûÿD:D;D<D=D>"D?+D@.DA7DB@DDGDE^DGgDHƒDIœDJµDMÄDŸJçD JDNDO#DP<DQXDR^DSgDTjDUpDVyDW|DX…DYŽDZ—D[šD\¡D]¨D^¿D`ÈDaèDbýDcDf/Dg2D(GD*MD+[D/cD0xD1D4ˆDŸJ¨D¢JÃD£JÑD¥JÙD¦JíD« D¬ D­&D®.D¯@D¶CD¥îD¦÷D©DªD†D‡9DˆWD´bD¶dDôqDõ”Dö«D÷´DøÀDùÝDúöDûDü*DýCDFD¯DÁD·èD¼ñD‘“D’©D“¿D”ÕD•ôD–D—,D˜ED›RDœhDzDžDŸ¤D ¹D¡ÈD¢ÝD£òD¤D¥D¦1D§FD¨[D©pDª…D«šD¬¬D­¾D®ÐD¯âD°ôD± D² D³* D´@ D¶f D®s D¯ Dχ DÉ• D¢J£ D£J± D¥J¹ D¦JÍ D/ê DJø DI DH Dg( Dc6 DbG DaX D£Jf D²t D±… D°– D¯§ D®¸ D­É D¬Ú D«ë Dªù D© D¨ D§# D¦1 D¥? D¤M D£[ D¢i D¡w D … DŸ“ Dž¡ D¯ Dœ½ D³Ë D‘Ü D’í D“þ D” D• D–+ D—9 D›G DÂX D¢Jê D£Jô D¥Jü D¦J D½' DÞ5 DC D$Q D e D«s D Î Dæ DD D=DPDXDcDúÄDùÕDüæD£J÷DˆþD D1DBDSDdD,{DjˆDm¡D4­D5øD6CD7„DD»DGüDMGDNˆDOÉD] DPAD`xDj¹DÛÊDp×DséDt Du&Dv;DyJDz[D}cD~zD€D€‰DD‚˜DƒªD„ËD…ïD†D‡7Dˆ[D‰uDŠ™D‹ºDŒÛDúDŽDÂ0DãGD(’DëéD™4DšWD›uDœD¡©D¢¬D¦ÆD¨âD©ðD­øD® D¯D²D³@D´SD±JlD¶…D·£D¸¸D±JÁDºÚD±JïD½D¾D¿'D±J@DÁUDÂ`DÃuDÄ~D±J…DÆžDºJ³D¿JÈDÊÕDÍçDÎDŸJD J&DÏ<DÐJDÑtD[ŽD\¥D_±D`ÍDa÷DbûDcDk Dl4D@<DAJDB`DCtDDzDE”DFDG DH´DIºDJÏDKØDLÛDMïDNõDPDQDR,DS2DTLDUhDVŒDWDXªD]ÃD^ÜD_öD¦DŸJD J=D×ODØZDÙmD±JŽDÛ§DÜÅDÝßD±JèDßþDàDá+D±J4DãMDäkDå€D±J‰DæžDç©DèÁDéÚD±JàDëõDºJ D¿JDï,DòEDóZD÷bDVsDç DôTDûŸDøêDõ5 D­€ DvŽ Duœ D¢Jª D£J¸ D¥JÀ D¦JÔ Dúñ Dû !Dü.!Dý:!DþL!D$]!D%ƒ!DÇJ‰!DÈJ!D%¥!D&°!D'Í!D(æ!D)"D*"D+2"D,;"D-G"D.S"D0\"D1c"D2ƒ"D3•"D4®"DÇJ´"DÈJÈ"D4Ð"D5Û"D6ø"D7#D8*#D9@#D:W#D;`#D<f#D=l#D>r#D?y#D@€#DAš#DB¬#DC¾#DDÕ#DEÞ#DFç#DGð#DIü#DJ$DK$DL#$DM*$DNF$DO[$DPm$DŠ$D¿˜$Dº©$D··$D´Å$DoÖ$Dpí$Dqó$Dr%DÇJ%DÈJ4%Ds<%Dt_%Duy%Dv’%Dw¬%Dxµ%DyÁ%DzÊ%D{Í%D}Ó%D~í%D&D€&D8&D‚D&DƒK&D„d&D……&D†Ÿ&D-³&D.¼&Ddç&Deû&Df&'DgG'DhK'Djd'D5o'D6ƒ'D7‹'D8¤'D9¾'D:Ç'DÊÓ'DÆä'D¢Jò'D£J(D¥J(D¦J (Db=(Dc`(DÇJf(DÈJ{(Ddƒ(De£(Dfµ(DgÎ(Dhå(Diî(Djú(Dk)Dl )Dn)Do2)DpD)Dq])Drw)Dt€)Du™)Dv²)DwÇ)DzÖ)D{î)D¦*D®*DpA*DŽO*Dsc*DÛ«*D£Jö*DÏ+D,l+DÛ·+D²J#,D¬J,,DÚF,Dd²,D²J(-D¬J1-DµK-DB˜-DA.D`p.D_Ü.D[H/Dо/Dt*0D]r0DØÞ0D×T1DŒÊ1D‰2DÆn2D£J½2D…Ä2DˆÛ2DŠô2DŒ 3D3D‘&3D–;3D—^3D˜q3D±JŠ3Dš£3D›Á3DœÖ3D±JÙ3Džï3DŸ 4D 4D±J%4D¢>4D£\4D¤q4D±Jw4D¥Œ4D¦—4D§¯4D¨È4D±JÑ4Dªê4DºJÿ4D¿J5D®!5D±:5D²I5D¶^5D·q5D¸•5D¹¡5Dº³5DÕÄ5DÖÙ5Däç5Då6Dú6Dû66DÇJ<6DÈJT6Dü\6Dý6Dþ™6Dÿ¬6DÈ6Dâ6Dë6D÷6Dý6D7D 7D'7D >7D X7DÇJ^7DÈJv7D ~7D ¡7D »7DÔ7Dð7D8D8D8D8D(8DE8D\8Ds8D8D™8D¢8D«8D´8D »8D!Ò8D#Û8D$ð8D%9D&(9DŠ<9D#M9D Á9D+:D’:Dõ:DN;D ®;D <DÉJ‚<D –<D=Dq=DÿÑ=Dþ;>Dü¯>DÉJ?Dû-?Dúž?Dæ@Dç9@DèU@Dél@Dêu@Dë@Dì@Dí–@Dï¢@Dðº@DñÑ@Dòò@DïADèADçBDæ‰BDä CDÙCDܨCDÝ·CD½ÔCD¾íCD¿ DDÀ$DDÁ:DDÂTDDÃuDDÄDDŦDDÆÇDDÉÍDDÊëDDÍîDDÎ÷DDÄED²­ED®»ED»JÌED¬JàED­úEDªFD²JFD¬J˜FD©²FD§-GD¦>GD½¹GD¹BHD·PHD¶ÜHDÀhID¾ñIDÁzJDÉKD¥–KD²JLD¬JLD£=LD¢KLD²J¼LD¬JÅLD¡ßLDŸPMDž^MD²JÒMD¬JÛMDõMD›iNDšwND²JèND¬JñND™ OD˜|OD—OD–PD‘ƒPDŽ‘PD(žPDоPD²J-QD¬J6QDÅPQD¾³QD½RD²JyRD¬J†RDÎ¥RD×ôRD¦?SDš£SD²JëSD¬JôSD¹TD¶eTDª²TD‚»TDªíTD™KUD³“UD²êUDoHVD޾VDU-WDT™WDXXDQXDLˆXDIôXDGYDXnYDˆÚYD‡,ZD†~ZD…ÐZD„"[Dƒt[D‚Æ[D}\Dƒj\D€Ö\D}B]Dv§]Du^Dsm^DÉJÒ^Dræ^DqR_D7È_Dh>`DfO`DeÅ`D»J;aD¬JOaDÉiaDÍØaDÁNbD²J±bD¬J¾bDOÝbDNëbDMùbDJ^cDCÃcDB%dDA3dD@AdD9•dD8édD7DeD6ŸeD5°eD4 fDÉJmfD3†fD2—fD1¥fD*gD)[gD(¶gD'hD&"hD%‡hDÉJóhD$ iDxiD”iD±iDËiDçiDjD"jDtDàªtD߸tD²J'uD¬J0uDÞJuD{¹uDzÍuDwCvDvQvDu_vDtpvDqÜvDp>wDoOwDn]wDgÂwDf*xDe’xDd xDÉJyDcyDb‹y ™$O€ûJ™ O^™ O p™ O‚™€P´ÿÿÿ™€Qàÿÿÿ¶™€RÜÿÿÿÍ™€SØÿÿÿ噀TÔÿÿÿþ™€UÐÿÿÿš€VÌÿÿÿ0š€WÈÿÿÿEš€XÿÿÿUš€Y ÿÿÿeš€Zÿÿÿyš€[ÿÿÿ‹š€\ÿÿÿ¥š€]ÿÿÿ½š€^ ÿÿÿК@_⚀`$ÿÿÿôš€›@a#›€b(ÿÿÿ8›€c,ÿÿÿN›€d0ÿÿÿa›@ew›€f4ÿÿÿ‰›€g8ÿÿÿ›@h´›€i<ÿÿÿÇ›€j@ÿÿÿÞ›€kDÿÿÿö›€lHÿÿÿ œ€mLÿÿÿ œ€nPÿÿÿ=œ@oWœ@pfœ€qÄÿÿÿtœ@rƒœ@s’œ€tÀÿÿÿ œ€u¼ÿÿÿ®œ€v¸ÿÿÿ¼œ@wËœ@xÚœ€yäÿÿÿèœ@zøœ@{ @|&}€2€PÀ€ûQ@ ZÀûþ[@žJdÀûþeà"ÿfà"ÿg@žJpÀ ÿqà²ÿr@žJ{Àç|à}@žJ†À¨‡@¢JÀÃ‘à ’à “@žJœÀ£ @¢J¦À£ §àê ¨àê ©@žJ²Àf ³@¢J¼Àf ½àm ¾àm ¿@žJÈÀm É@¢JÒÀm Óàt Ôàt Õ@ ÞÀê ß@žJèÀê é@¢JòÀê óà' ôà' õà' ö@ ÿÀ÷ž@žJ žÀ÷ ž@¢JžÀ÷žàþžàþžàþž@°J#žÀï$žà%ž@°J1žÀ@2žàU3ž@¹J?žÀ³@žàÕAž@žJJžÀKžàOLž@°JXžÀ‰YžàžZž@¹JfžÀ gžà,hž@žJqžÀª rž@¢J{žÀª |žàñ }žàñ ~ž@%ŠžÀ‰!‹ž@ÆJ™žÀ‰!šžà¥!›žà¥!œž@4¨žÀ´"©ž@ÆJ·žÀ´"¸žàÐ"¹žàÐ"ºž@rÆžÀ%Çžà<%Èž@¢JÑžÀò'Òžà=(Óž@cßžÀf(àžàƒ(áž@¢JêžÀö*ëžà+ìž@žJõžÀ½2öž@¢JÿžÀ½2ŸàÄ2ŸàÄ2Ÿ@°JŸÀw4ŸàŒ4Ÿ@¹JŸÀÿ4Ÿà!5Ÿ@û*ŸÀ<6+Ÿà\6,Ÿ@ 8ŸÀ^79Ÿà~7:Ÿ@ FŸÀ‚<GŸà–<HŸ@ûTŸÀ?UŸà-?VŸ@¹JbŸÀÌEcŸàúEdŸ@°JpŸÀLqŸà=LrŸ@°J~ŸÀyRŸà¥R€Ÿ@rŒŸÀÒ^Ÿàæ^ŽŸ@¹JšŸÀ;a›ŸàiaœŸ@°J¨ŸÀ±b©ŸàÝbªŸ@4¶ŸÀmf·Ÿ@ÆJÅŸÀmfÆŸà†fÇŸà†fÈŸ@%ÔŸÀóhÕŸ@ÆJãŸÀóhäŸà iåŸà iæŸ@¹JòŸÀ'qóŸàUqôŸ@°J Àus à¡s @c Ày ày àz $~Nz  .zD7zD9zDGzDHzDIVzDO‹zDP‘zDQ—zDR zDT£zDW¦zDX¬zDf·zDg½zDhÏzDkÛzDlñzDq{Dr {D J0{Du?{DvJ{DåJP{DéJX{Dw~{Dx{D}–{Dr¡{Duµ{DŸJÈ{D¢JÝ{D£Jç{D¥Jï{D¦Jþ{DY|DZ7|D[P|D\m|D]||D€ž|D¾|D‚Ý|Dƒô|D„ú|D…}D†}D‰ }DŠ%}D‹7}DI}D‘e}D’|}D“}D”¬}D•¾}D–Ú}D—ì}Dr~D ~D¢,~D£4~DwA~DJR~DKp~DLŽ~DÅ™~DÇ›~DY¥~DºÆ~D½Ó~D¾é~D¿û~DÀ DÁDÂ-DÃ;DÄIDÅ_DÇ…DÃDÂDÁ¨DÀ¶D¿ÄD¾ÒD½àDÄñD‹€DŠ€D”€D“,€D—:€D–K€DgY€Drg€Dlw€D …€D¶¤€D¸«€D¹À€Dkë€D¸DLD]>D\ODZ]D·…D«¢D¬¹D­ÂD®ÎD¯ìD°þD± ‚D²‚Du<‚D[`‚DæJ‚Dv§‚D®Ä‚DëJá‚DƒD‰1ƒDUƒD‚rƒD€ƒD‘³ƒD’ÚƒD•úƒD¯„D±(„( $7z`  7t  7 †  7˜ €8äÿÿÿ¯ €9àÿÿÿÄ €:´ÿÿÿÔ €;¸ÿÿÿç €<¼ÿÿÿþ €=Àÿÿÿ¡€>Äÿÿÿ%¡@?4¡@AC¡€BÈÿÿÿQ¡€CÌÿÿÿ_¡@Ep¡&F ˆ¡€¦¡Àz§¡@u²¡@u»¡À0{¼¡à?{½¡@vË¡ÀP{Ì¡à~{Í¡@uØ¡@uá¡ÀÈ{â¡@¢Jë¡ÀÝ{ì¡à|í¡à|î¡@vü¡À‚ý¡à§‚þ¡@v ¢Àá‚ ¢àƒ¢à6„¢$5 N6„¢¨.6„Då26„Dæ2G„Dç2N„Dþ2U„D3\„D3c„D3j„D 3¦„D 3¬„D 3²„D 3¸„D3Ä„D3Ç„DŸJЄD Jé„D3÷„D3…DåJ…DéJ…D33…D3N…D3W…D3^…D3h…D 3Œ…D#3“…D5†D5†D59†D5O†D5e†D5„†D 5£†D 5°†D 5ņD5Ú†D5ï†D5‡D5‡D5+‡D5=‡D5W‡D¢Jd‡D£Jn‡D¥Jv‡D¦J„‡D3¡‡D5£‡D'3°‡D-3ƇD.3ë‡D/3 ˆD03$ˆD13EˆD23ZˆD33sˆD;3©ˆD±J°ˆD<3ňD=3ЈD>3åˆD?3îˆD±JõˆD@3 ‰DA3‰DB3*‰DC33‰DºJ:‰D¿JO‰DE3\‰DH3u‰DI3‹‰DM3•‰DN3¸‰DO3ЉDP3é‰Dr3ï‰D53ò‰D63ŠD:3 ŠD;3ŠD5AŠD 5RŠD5[ŠD5yŠD5—ŠD5µŠD 5ÕŠD£JãŠDëJêŠD3‹D23I‹D-3t‹D=3‹DA3«‹DE3¹‹DO3Ê‹D5Û‹D5é‹D5ú‹D5ŒD5ŒD5'ŒD38ŒD3gŒD²J{ŒD¬JˆŒD²J§ŒD¬J´ŒDæJÓŒD/3òŒD»JD¬JDD3,D5DD13oD.3}D33ÌD03ÝD23ŽDM3/ŽDT3GŽDU3dŽDX3ŽDY3”ŽDZ3œŽD[3§ŽD\3½ŽD]3ãŽD^3ýŽD_3D`3Db3Dc38Dd3MDe3gDg3vDh3ŽDi3¨Dj3³Dk3ÇD[3ßD73 D:31DH3IDT3ŽDU3ŸD»J°D[3¾Dw3ÛDz3ðD}3‘D~3#‘D‚38‘D…3?‘Dˆ3Z‘DŠ3‘D‹3±‘D3¹‘D”3ΑDÇJÔ‘DÈJè‘D”3ð‘D•3û‘D–3’D—31’D˜3T’D™3p’Dš3v’D›3}’Dœ3–’D3¯’Dž3Ä’D¡3Ó’D¢3ë’D¥3“D¦3“D½3“D¾3A“DÁ3I“DØ3T“DÜ3z“DÝ3‰“Dà3‘“Dá3—“Dä3Ÿ“D¨4¦“D©4²“Dª4¶“Dç3Þ“Dê3E”Dë3K”Dþ3S”Dÿ3b”D4j”D4…”D 4”D64˜”D{4Ä”D~4Ï”DŒ4×”D4ã”D’4è”D•4î”D˜4ñ”D›4•D64#•D<4?•D=4Z•D@4^•DA4y•DB4}•DD4˜•Db4£•De4¯•Dh4¸•Dk4Ä•Dn4Í•Dt4Ö•Dw4Ü•Dx4å•D„4í•D‡4ø•Dâ3–DG43–DH4S–DI4j–DJ4s–DK4v–DL4‰–DM4£–DN4Ç–DO4Ü–DP4—DQ4—DR45—DS4J—DåJ_—DéJg—DT4 —DU4µ—DV4¾—DY4Å—D\4Ò—DŸ4è—D¢4˜D4-˜D4<˜D4_˜D4z˜D4˜DåJ˜˜DéJ ˜D4ØD4ؘD4á˜D4è˜D!4™D$4 ™D4 ™D4™D4(™D*4,™D-45™D49™D 4R™D 4v™D 4‚™DR4¥™DQ4³™DP4Ä™DN4Õ™DT4ã™D\3÷™D40šD4>šD]3RšDˆ3šD~3ÄšDw3ÒšD²4àšD3ÿšD–3 ›D¿3›Dž3F›D3T›Dœ3b›Dd3s›Dc3¢›Db3°›DO4ß›DH4œDM4OœDL4xœDg3¡œDG4ÚœDëJDS4NDÉJ‹DæJ¤Dî3ÀDñ3âDô3øDõ3žDö3žD÷3$žDø3FžDù3_žDú3kžDû3„žD—3ÁžDú3þžDø3ŸD÷3 ŸDô3]ŸD 4šŸD4ÍŸDŒ3 DÄ3> DÇ3` DÊ3v DË3œ DÌ3¶ DÎ3¿ DÏ3Þ DÐ3ø DÑ3¡DÒ3%¡DÎ3b¡DË3•¡DÊ3¾¡D´4ñ¡D¸4!¢D¹49¢D·4A¢DÚ4[¢DÛ4u¢DÜ4¢DÚ4‰¢Dõ4¡¢Dø4âDû4Ü¢Dü4ü¢Dý4£Dþ48£D5Y£D•3i£D”3¦£Dº4ã£DÇJé£DÈJ¤D»4 ¤D¼4,¤D½4F¤DÇJL¤DÈJ`¤DÉJd¤D½4x¤D¾4ƒ¤D¿4Ÿ¤DÀ4¶¤DÂ4¿¤DÃ4ߤDÄ4¥DÅ4!¥DÆ4F¥DÇ4`¥DÈ4i¥DË4r¥DÌ4¥DÍ4©¥DÎ4Â¥DÏ4È¥DÐ4Ï¥DÑ4ç¥DÒ4¦DÓ4)¦DÐ4F¦DË4¦DÆ4²¦DÅ4ϦDÂ4ö¦D¿4'§D½4X§DÉJ“§D»4§§D¸4اDÝ4ê§DÞ4¨Dß4(¨Dà4>¨Dá4T¨Dâ4j¨Dã4„¨Dä4¨Då4™¨Dæ4Ÿ¨Dè4¥¨Dé4¬¨Dê4³¨Dë4º¨Dì4Ò¨Dí4ì¨Dî4©Dë4#©Dâ4J©Dá4g©Dà4Ž©DÝ4µ©Dü4æ©DæJ!ªD4;ªD4xªD4«ªDëJÞªD©3«D¬30«D¯3I«D°3l«D±3…«D²3‹«D³3’«D´3´«Dµ3Õ«D¶3á«D¯3¬D¡3?¬D³3|¬D°3¹¬D›3ö¬D˜3)­&¢$å26„]¢ å2q¢ å2 ƒ¢ å2•¢€æ2äÿÿÿ¬¢€ç2àÿÿÿÁ¢@è2Ò¢€ë2Twýÿ⢀ì2Üÿÿÿú¢€î2¨÷þÿ£€ï2Xwýÿ£€ð2Øÿÿÿ7£€ñ2\wýÿM£€ò2¨wýÿ`£€ó2¬ÿÿÿw£€ô2`wýÿŽ£€­£€Ð£€õ2dwýÿ㣀ö2¨·ÿÿÿ£€÷2¨wÿÿ¤€ø2Ôÿÿÿ5¤€X¤€y¤€ù2¨÷ÿÿ˜¤€ú2hwýÿ°¤€û2lwýÿƤ€ü2pwýÿݤ@ý2준þ2Ðÿÿÿú¤€ÿ2twýÿ ¥€,¥€3xwýÿ:¥€3ÌÿÿÿH¥@3W¥€3Èÿÿÿe¥€3Äÿÿÿs¥€3|wýÿ¥€3€wýÿ¥&3¨§¥€Å¥@å2×¥@å2é¥À6„ê¥@3õ¥@3þ¥ÀЄÿ¥@žJ¦ÀЄ ¦à÷„ ¦à÷„ ¦@3¦À…¦à3…¦@3&¦@3/¦Àd‡0¦@žJ9¦Àd‡:¦@¢JC¦Àd‡D¦à¡‡E¦à¡‡F¦à¡‡G¦@°JS¦À°ˆT¦àňU¦@°Ja¦Àõˆb¦à ‰c¦@¹Jo¦À:‰p¦à\‰q¦@3|¦@3…¦À㊆¦@žJ¦À㊦@¢J™¦À㊚¦àꊛ¦àꊜ¦àꊦ@3«¦Àꊬ¦à‹­¦@°J¹¦À{Œº¦à§Œ»¦@°JǦÀ§ŒȦàÓŒɦ@3צÀÓŒئàòŒÙ¦@¹Jå¦Àæ¦à,ç¦@¹Jó¦À°ô¦à¾õ¦@”3§ÀÔ‘§@ÆJ§ÀÔ‘§àð‘§àð‘§€S4„wýÿ §€S4ˆwýÿ*§À_—+§à —,§@4:§@4E§À˜˜F§àØG§€S4„wýÿT§€S4ˆwýÿ^§À_§àN`§@”3l§À‹m§@ÆJ{§À‹|§à¤}§à¤~§€S4„wýÿ‹§€S4ˆwýÿ•§À¤–§àÀ—§@º4£§À飤§à ¤¥§@½4±§ÀL¤²§@ÆJÀ§ÀL¤Á§àx¤§àx¤ç@º4ϧÀ“§Чà§§ѧ@4ß§@4ê§À!ªë§à;ªì§@4ú§@4¨ÀÞª¨à«¨à\­¨$&)N\­ ¨´.\­D5\­D‚5m­Dƒ5t­Dœ5{­D¡5‚­D¢5‰­D¥5­D7Ê­D¦5×­D§5Ý­D¨5ã­D©5é­D¯5õ­D²5ø­Dµ5®D|7x®D}7Ž®D~7­®D7Ì®D€7â®D7ø®D‚7¯D…7$¯D†79¯D‡7N¯Dˆ7c¯D‰7r¯DŠ7‡¯D‹7œ¯DŒ7±¯D7ïDŽ7Õ¯D7ó¯D¹5°D¿5°DÀ5;°DÁ5[°DÂ5t°DÃ5•°DÄ5ª°DÅ5ðDÍ5ù°D±J±DÎ5±DÏ5#±DÐ58±DÑ5A±D±JH±DÒ5`±DÓ5k±DÔ5€±DÕ5‰±DºJ±D¿J¨±D×5µ±DÚ5ʱDÛ5à±DÞ5ê±Dß5 ²Dà5%²Dá5>²DÇ5G²DÈ5X²DÌ5`²DÍ5v²D¿5™²DÏ5À²DÓ5βD×5ܲDà5ð²D…7³D†7 ³D‡7(³Dˆ7F³D‰7^³DŠ7|³D‹7š³DŒ7¸³D7Ó³D7ö³D€7´D7´D|7&´D~77´D}7E´D²JS´D¬J`´D²J´D¬JŒ´DÁ5«´DÃ5¼´DÀ5Ê´D»J!µD¬J0µDÖ5JµDÞ5bµDÅ5‹µDÂ5œµDÄ5¹µDÉ5¶Dß5?¶DÌ5h¶DÚ5€¶DÒ5©¶DÚ5ƶDÞ5ê¶Dß5·D»J8·Dæ5F·Dé5[·Dì5…·Dí5Ž·Dñ5£·Dô5ª·D÷5¿·Dø5Ú·Dý5é·Dþ5¸Dÿ5¸D6¸D6%¸D6k¸D6¸D 6‡¸D6œ¸DÇJ¢¸DÈJ¶¸D6¾¸D6ɸD6é¸D6¹D6%¹D6>¹D6D¹D6K¹D6k¹D6€¹D6™¹D6²¹D6Ú¹D6þ¹D 6 ºD!6ºD"6)ºD#6LºD$6qºD%6ºD&6¦ºD'6½ºD(6ƺD)6ÒºD*6ìºD+6ûºD,6»D-69»D.6R»D/6i»D06l»D16u»D36»D46ž»D56·»D66лD76õ»D86¼Dr6#¼D{6)¼D|6;¼D}6C¼DŸJO¼D Jn¼D”6„¼D•6’¼D–6ª¼D—6ļDŸJÖ¼D Jõ¼Dš6 ½D›6½Dœ61½D6K½D 6]½D¡6u½D¤6½D¥6˜½D¶6 ½D½6º½D¾6νDÁ6Ô½DÄ6)¾DÅ6/¾DØ67¾DÙ6F¾Dà6N¾Dá6i¾Dë6q¾D17‘¾D47§¾Dë6·¾Dî6Ó¾Dñ6Õ¾Dò6í¾Dü6õ¾Dÿ6ú¾D7¿D7 ¿D7¿D7¿D 7'¿D7/¿D7B¿D7H¿D!7N¿D$7T¿D'7„¿D-7Œ¿D.7•¿D:7¿D=7°¿Dó6¿Dô6ÀDõ6ÀDö6&ÀD72ÀD7=ÀDC7HÀDF7[ÀDI7–ÀDô6®ÀDâ6¼ÀDã6ÁDä6ÁDå6ÁDó6(ÁD‹6@ÁDã6kÁDŸJvÁD J•ÁD6«ÁDŸJ¹ÁD JØÁD‚6îÁDƒ6üÁD„6ÂD…6,ÂD†65ÂD‡6AÂDŠ6JÂD‹6QÂDŒ6nÂD6‡ÂDŽ6¢ÂD6»ÂD=6ÉÂD>6ôÂD?6ÃD@6$ÃDA6=ÃDB6HÃDC6kÃDD6ÃDE6¬ÃDF6ÅÃDG6ÜÃDH6åÃDI6ñÃDJ6 ÄDK6ÄDL63ÄDM6XÄDN6qÄDO6ˆÄDP6‹ÄDQ6”ÄDS6 ÄDT6½ÄDU6ÖÄDV6ïÄDW6ÅDX6-ÅDí5VÅDæ5dÅD¢JrÅD£J€ÅD¥JˆÅD¦J ÅD¢J½ÅD£JËÅD¥JÓÅD¦JëÅDø5ÆD6ÆDý5YÆD 6¬ÆD÷5ºÆD6 ÇD6ÇD6(ÇD69ÇDN7JÇD¢JiÇD£JwÇD¥JÇD¦J—ÇD¢J´ÇD£JÂÇD¥JÊÇD¦JâÇD½6ÿÇD¶6ÈD76BÈD56SÈD46dÈD-6uÈDÈ6†ÈDË6¨ÈDÎ6¾ÈDÏ6ØÈDÐ6áÈDÑ6ðÈDÒ6ÉDÓ6#ÉDÔ6.ÉDÕ6=ÉDŒ6€ÉDŽ6‘ÉD+6¢ÉD*6³ÉD%6ÁÉDÉJÒÉD86ëÉD@6ÊD>6ÊDa60ÊDb6UÊDc6zÊDd6ŸÊDh6·ÊDi6ÂÊDj6ØÊDk6þÊDl6ËDn6!ËDo6;ËDp6UËDq6`ËDr6tËDn6‘ËDk6ÊËDj6ùËDi62ÌDV6OÌDS6lÌD 6‹ÌDâ6¨ÌD6ÅÌD6þÌDM6ÍDK6,ÍDJ6=ÍDE6KÍD6\ÍD36yÍD6˜ÍD”6ØÍDP7õÍDS7ÎDT7)ÎDU75ÎDS7=ÎDn7UÎDq7wÎDt7ÎDu7³ÎDv7ÎÎDw7èÎDy7 ÏD6ÏD66<ÏD6YÏD6’ÏDV7ËÏDW7îÏDX7ÐDY7ÐDZ75ÐD[7KÐD\7eÐD]7nÐD^7wÐD_7ƒÐDb7‰ÐDc7ÐDd7—ÐDe7¬ÐDf7ÍÐDg7çÐDd7ÑD[7;ÑDZ7^ÑDY7‹ÑDW7¸ÑDV7ïÑDu70ÒD‚6gÒD‹6 ÒD„6½ÒDƒ6ìÒDÔ6ÓDÒ6)ÓDÑ67ÓDÎ6pÓDW6©ÓD•6ºÓD›6óÓDš6,ÔD6IÔD¨6fÔD«6ˆÔD®6žÔD¯6ÁÔD°6ÚÔD±6àÔD²6çÔD³6ÕD´6&ÕDµ62ÕD¶6SÕD²6pÕD¯6ÕDU6ªÕDT6»Õ¨$5\­T¨ 5h¨ 5 z¨ 5Œ¨€‚5äÿÿÿ£¨€ƒ5àÿÿÿ耄5àþýÿÓ¨@…5䨀‡5äþýÿô¨€ˆ5Üÿÿÿ©€‰5èþýÿ&©€‹5Øÿÿÿ>©€Œ5pÿÿÿY©€50ÿÿÿu©€Ž5ìþýÿ‹©€50ÿýÿž©€5°ÿÿÿµ©€‘5ðþýÿÌ©€ì©€’50¿ÿÿª€“50ÿÿª€”5ôþýÿ7ª€•5øþýÿMª@–5cª€—5üþýÿtª€˜5ÿýÿ‹ª€™5ÿýÿ›ª@š5ªª€›5ÿýÿºª€œ5ÔÿÿÿȪ€5 ÿýÿÖª@ž5åª@Ÿ5ôª€ 5Ðÿÿÿ«€¡5Ìÿÿÿ«€¢5Èÿÿÿ«€£5ÿýÿ,«&¤5´D«€b«@5t«@5†«À\­‡«@°J“«À±”«à±•«@°J¡«ÀH±¢«à`±£«@¹J¯«À±°«àµ±±«@°J½«ÀS´¾«à´¿«@°JË«À´Ì«à«´Í«@¹JÙ«À!µÚ«àJµÛ«@¹Jç«À8·è«àF·é«@6õ«À¢¸ö«@ÆJ¬À¢¸¬à¾¸¬à¾¸¬@¢J¬ÀrŬà½Å¬@¢J¬À½Å¬àƬ@¢J&¬ÀiÇ'¬à´Ç(¬@¢J1¬À´Ç2¬àÿÇ3¬@6?¬ÀÒÉ@¬@ÆJN¬ÀÒÉO¬àëÉP¬àëÉQ¬àÌÕR¬$p(NÌÕ.ÌÕD‹0ÌÕD”0ÚÕD—0áÕD˜0èÕD™0ïÕD0öÕDž0üÕD¤0ÖD§0 ÖDÇJÖDÈJ%ÖD¨0-ÖD©0JÖDª0YÖD«0vÖD¬0ÖD'1—ÖD(1·ÖDN1ÌÖDO1ÚÖDÇJàÖDÈJôÖDP1üÖDQ1×DR1(×DŸJ.×D JG×DR1Z×DS1e×DT1…×DU1¥×DV1¼×DW1Ò×DX1é×DY1ØDZ1ØD[1ØD\1ØD]1ØD^1ØD_1$ØD`1-ØDb10ØDc17ØDd1>ØDg1EØDh1^ØDi1wØD¯0¥ØD°0ÄØD±0רD±JæØD³0üØD±JÙD·0'ÙD±J6ÙD»0LÙDºJ[ÙD»JpÙD¬JÙD¾0™ÙDÇ0±ÙD©0éÙDª0òÙD¯0'ÚD½1TÚD¾1jÚD¿1ƒÚDÀ1™ÚDÁ1¯ÚDÂ1ÅÚDÃ1ÞÚDÄ1÷ÚDÇ1ÛDÈ1ÛDÉ1(ÛDÊ1:ÛDË1HÛDÌ1VÛDÍ1dÛDÎ1rÛDÐ1‰ÛDÍ1“ÛDÌ1žÛDË1©ÛDÊ1´ÛDÉ1¿ÛDÈ1ÍÛDÇ1ÛÛDÃ1éÛD½1÷ÛD¾1ÜD¿1ÜDÀ1'ÜDÁ18ÜDÂ1IÜD«0WÜD¬0jÜDr1wÜDÇJ}ÜDÈJ‘ÜDr1™ÜDs1¤ÜDt1ÁÜDu1ÚÜDv1ñÜDw1úÜDx1ÝDy1 ÝDz1ÝD{1.ÝD|1GÝD}1`ÝD‚1uÝD„1†ÝD…1ÝD†1¦ÝD‡1¯ÝDˆ1»ÝD‰1ÚÝDŠ1ìÝD‹1øÝDŒ1ÞD™1GÞD²JXÞD¬JaÞD¯0{ÞD(1˜ÞDz1¦ÞD¨0óÞD¼18ßDÉJUßD§0ißD61ßD¢J³ßD£JÁßD¥JÅßD¦JÔßDt1ñßD£JàDV1 àD'1,àD/1DàD01aàD11~àD21›àD61¸àDÇJ¾àDÈJÒàD71ÚàD81äàD91óàD:1ûàD;1áD<1áD=1/áD>18áD?1DáD@1eáDA1~áDB1‰áDC1˜áD±0µáD³0ÃáD·0ÑáD°0ßáD»0)âD»J7âDQ1EâDP1SâDS1 âD81æâD21ôâD/1ãD01ãD11'ãD²J8ãD¶0EãD²JŒãDº0™ãDÉJããDO1÷ãDÉJ!äD61NäD¿JkäD¿0xäDÃ0‘äDÄ0ŸäDÇJ¥äDÈJ¹äDÅ0ÁäDÆ0ÞäDÇ0íäDÈ0 åDÉ0,åDÊ0CåDË0ZåDÌ0`åDÍ0fåDÎ0låDÏ0uåDÐ0{åDÑ0„åDÒ0ŠåDÓ0“åDÔ0œåDÕ0¢åDØ0«åDÙ0²åDÚ0ÎåD1çåDõ0ùåD}1)æD|17æD{1HæD‚1YæDˆ1væD’1ªæD”1½æD•1ÈæD™1ÐæDš1ãæD±JõæD›1 çDœ1çD1*çDž10çD±J7çDŸ1LçD 1WçD¡1qçD¢1wçDºJ~çD»J“çD¬J¢çD£1¼çD®1ÔçDW1üçDX1!èD‹1;èD‰1LèDX1ZèD’1zèD™1¢èD@1®èDB1¿èD¬JÍèD?1ìèD¬J éDã0(éDä0GéDå0géDæ0~éDç0„éDè0éDé0“éDê0œéDë0¢éDì0«éDí0±éDî0ºéDï0ÀéDñ0ÉéDò0ÐéDó0ðéDô0êDh1êDi1*êDg1;êDš1{êD¿0‰êD–1šêD™1àêDœ1ëD›1ëDÈ0ZëDò0¦ëDü0¾ëDý0ãëDþ0ìD1-ìDÇJ3ìDÈJGìD1OìD1kìD1ìD1‰ìD1ìD1¥ìD1°ìD 1ÆìDÇJÌìDÈJàìD 1èìD 1íD 1íD 1*íD10íD13íD1MíD1díD1xíD1{íD1‚íD1£íD»JÉíDä0×íDû0ïíDŸ1 îDÅ0OîD²J…îD¬J’îDÇ0±îDÆ0ÎîDÉJÜîD1ðîD1 ïD1*ïD1[ïDµ1}ïD¹1ïD²J°ïD¬J½ïD¿JÜïD¤1éïD¥1 ðD¦1)ðD§1IðD¨1`ðD©1fðDª1oðD«1uðD®1~ðD¯1ðD²1¾ðDÉJôðDÄ0ñD§1[ñD¥1”ñD®1ÔñDµ1ññDÚ0ÿñD1òD 1!òD 1PòD1^òDÉJòD 1¡òS¬$‹0ÌÕ‰¬ ‹0¬ ‹0 ®¬€Œ0¤ÿÿÿ¿¬€0¨ÿÿÿЬ€Ž0¬ÿÿÿ嬀0°ÿÿÿõ¬€0´ÿÿÿ­€‘0¸ÿÿÿ­@’0*­@“09­€”0äÿÿÿG­@•0V­€–0¼ÿÿÿd­€—0àÿÿÿr­€˜0Üÿÿÿ€­€™0ØÿÿÿŽ­€š0Àÿÿÿœ­€›0Äÿÿÿª­@œ0¼­ÀÌÕ½­@§0É­ÀÖÊ­à-ÖË­@O1×­ÀàÖØ­àüÖÙ­@R1â­À.×ã­àZ×ä­@¹Jð­À[Ùñ­à™Ùò­@r1þ­À}Üÿ­@ÆJ ®À}Ü®à™Ü®à™Ü®@§0®ÀUß®àiß®@R1'®À³ß(®@¢J1®À³ß2®àñß3®àñß4®@R1=®Àà>®@¢JG®ÀàH®à àI®à àJ®@61V®À¾àW®àÚàX®@¹Jd®À7âe®àEâf®@O1r®Àããs®à÷ãt®@r1€®À!ä®@ÆJ®À!ä®à:ä‘®à:ä’®@61ž®À:䟮àNä ®@¹J¬®Àkä­®àxä®®@Ä0º®À¥ä»®àÁä¼®@°JÈ®ÀõæÉ®à çÊ®@°JÖ®À7ç×®àLçØ®@¹Jä®À~çå®à¼çæ®@1ò®À3ìó®àOìô®@ 1¯ÀÌì¯àèì¯@¹J¯ÀÉí¯à×í¯@°J¯À…î¯à±î¯@1*¯ÀÜî+¯àðî,¯@°J8¯À°ï9¯àÜï:¯@¹JF¯ÀÜïG¯àéïH¯@Ä0T¯ÀôðU¯àñV¯@ 1b¯Àòc¯à¡òd¯à¾òe¯$òN¾òf¯À.¾òD¹C¾òD»CÏòD¼CãòD¾CíòD¿CöòDÀCóDÚ óDÛóDÜóDÝ&óDÞ/óD߇óDàóDá“óDâ™óDãŸóDä¥óDåI®óDéI¶óDåÖóDåIßóDéIçóDè ôDéôDìôDïPôDðSôDñ]ôDônôDüzôDýŠôDôD–ôD™ôD §ôD JÍôDßôDçôDþôD õDŸJõD J5õDGõDOõDfõDuõDŸJ‚õD JžõD"°õD#¸õD$ÏõD%ÞõDŸJëõD JöD(öD)!öD*8öD+GöDŸJTöD JpöD.‚öD/ŠöD0¡öD1°öD4½öD ÊöD ØöDàöDŸJïöD¢J÷D£J÷D¥J÷D¦J.÷DëIK÷Dä€÷DC¡÷DF±÷DGÃ÷DHÕ÷DIç÷DJõ÷DÁCøDÂCøDÅC øDì+øDJQøDI_øDHmøDG~øDFŒøDèšøDëIÀøDåõøDæIùDõVùDöjùD rùDÂC’ùD¢J§ùD£JµùD¥J½ùD¦JÎùD¢JëùD£JùùD¥JúD¦JúD¢J/úD£J=úD¥JEúD¦JVúD¢JsúD£JúD¥J‰úD¦JšúD·úDÅúDÓúD$áúD*ïúD0ýúDñ ûD6+ûD9=ûDüPûDõvûD£J–ûD˜ûDA°ûDB¾ûDAãûD£JñûDóûD£J üD#üD£J)üD)+üD£JHüD/JüDgüD6–ü{¯$¹C¾òº¯ ¹Ců ¹C ί ¹Cׯ€»C´ÿÿÿ߯@¹Cê¯À¾ò므Êäÿÿÿÿ¯€Ëàÿÿÿ°€ÌÜÿÿÿ$°€ÍØÿÿÿ7°€ÎÔÿÿÿM°€ÏÐÿÿÿd°€Ð¸ÿÿÿt°@ш°@Ò—°@Ó¨°@Ô·°@ÕȰ@ÖÙ°€×¼ÿÿÿç°À óè°@äö°@ä±À®ó±àÖó±@å±@å±Àßó±à ô±@¢J'±À÷(±àK÷)±@ä7±@äB±ÀK÷C±à€÷D±àøE±€ÊäÿÿÿY±€Ëàÿÿÿk±€ÌÜÿÿÿ~±€ÍØÿÿÿ‘±€ÎÔÿÿÿ§±€ÏÐÿÿÿ¾±€Ð¸ÿÿÿα@Ñâ±@Òñ±@Ó²@Ô²@Õ"²@Ö3²€×¼ÿÿÿA²À+øB²@åP²@å[²ÀÀø\²àõø]²@äk²@äv²Àùw²à:ùx²@冲@呲À:ù’²àVù“²à’ù”²€Êäÿÿÿ¨²€Ëàÿÿÿº²€ÌÜÿÿÿͲ€ÍØÿÿÿಀÎÔÿÿÿö²€ÏÐÿÿÿ ³€Ð¸ÿÿÿ³@Ñ1³@Ò@³@ÓQ³@Ô`³@Õq³@Ö‚³€×¼ÿÿÿ³À§ù‘³@¢Jš³À§ù›³àëùœ³@¢J¥³Àëù¦³à/ú§³@¢J°³À/ú±³àsú²³@¢J»³Àsú¼³à·ú½³@¢JƳÀ–ûdzà˜ûȳ@¢JѳÀñûÒ³àóûÓ³@¢JܳÀ üݳàüÞ³@¢Jç³À)üè³à+üé³@¢Jò³ÀHüó³àJüô³à¤üõ³à¤üö³$æ N¤ü÷³Ü.¤üD%¤üD%µüD%¼üD%ÃüD%ÊüD%ÑüD %ØüD!%ßüD"%æüD#%íüD+%ôüD,%ýüD-%ýD.%ýD/%gýD0%mýD1%sýD2%yýD3%ýD4%…ýD5%‹ýD9%‘ýD:%šýDåI£ýDéI«ýD=%ÉýD>%ÌýD?%áýDB%êýDC%ðýDD%þDG% þDL&bþDM&xþDN&ŽþDO&¤þDP&ºþDQ&ÐþDR&æþDS&ÿþDT&ÿDU&1ÿDX&AÿDY&SÿDZ&bÿD[&tÿD\&†ÿD]&˜ÿD^&ªÿD_&¼ÿD`&ÎÿDa&àÿDb&òÿDd& D.%Dd&DY&+DZ&4D[&OD\&jD]&…D^&£D_&ÁD`&ßDa&ýDX& DL&.DT&?DS&MDR&[DQ&iDP&zDO&‹DN&œDM&­DC%¾D>%ÒDëIæD:%DH%8DK%ADN%HDO%NDP%`DS%iDT%zDU%~DV%ÐD\%ÙD]%ñD^%D_% Db%Dc%0Dd%KDe%dDf%oDg%uDh%ŠDü%˜Dý%›Dþ%°D&¹D&¼D&ÑD&ÚD&þD& D &D &)D &/D &8D &>D&GD&fD&D&”DæIªD\%ÉDO%æDb%úDo%D]%2Dk%@Dl%KDo%SDp%sDq%…Dr%‹Dv%’Dw%±Dx%ÎDy%çDz%D{%D|% D}%-D~%FD%[D€%dDc%{Dd%³D&ÄD&èD&ôD&üD&D&1DÄ%GDÇ%QDÈ%hDÉ%qD&ƒDý%—Dg%«D&¿D#&×Dv%úD„%D…%/Dˆ%LDÇJRDÈJfDˆ%nD‰%yDŠ%„D‹%D¦%¨D&ÐD&ñD &ýD & D&- Dp%P D%a DE&y D&¡ DÌ%¾ DÏ%È DÐ%ß DÑ%ê DÔ%ò DŸJø D J DÔ%$ DÕ%/ DÚ%D DÛ%d DÜ%„ DÝ%¡ DÞ%³ Dß%Å Dà%Ú Dá%ã Dí%í Dî% Dï%' Dð%- Dñ%0 Dò%M Dó%f Dô% DÇ%¨ Do%Å D&â D&ö D& D„%$ D…%5 Dx%F DŒ%W D%b D%x D%š D‘%· D’%Ø D“%ñ D”%÷ D•%þ D–% D—%7 D˜%L D™%U D¸%\ D¹%u Dº%Ž DŠ%· D&È D#&Ü D$&û D)& D*&D-&7D.&BDD&JD&dD&DÏ%žD}%»D~%ÌDÉJàDå%ùDæ%Dç%0Dè%9D¢JED£JSD¥JWD¦JfD)&ƒD1&›D£J¾DÔ%ÅD%éD%Dž%&D¡%KDÇJQDÈJeD¡%mD¢%xD£%ƒD¤%¤D¥%¯D¦%ºD§%ÐDÇJÖDÈJëD¨%óD©% Dª%D«%D¬%8D­%OD®%fD¯%qD°%…D¡%©DÛ%ÆDÚ%óDÕ%'D$&5D#&CD1&`D2&}D3&’D4&˜D7&ŸD8&²D9&¸D:&ÁD;&ßD<&D=& D>&-Dî%bDñ% Dß%ÞDÞ%òDÝ%D«%DÉJ+Då%DDº%aDÜ%rDò%ŸDô%°Dó%ÁD2&ÒD1&àDÉJýD§%D¦%.D¹%KD¸%\D—%mD–% ´$%¤üI´ %]´ % o´ %´€%°ÿÿÿ”´€%àÿÿÿ«´€%Üÿÿÿ½´€%Øÿÿÿд€%Ôÿÿÿç´€%Ðÿÿÿü´€%ÿÿÿµ@%'µ€%”ÿÿÿ>µ€%˜ÿÿÿSµ@%bµ€%Ìÿÿÿpµ€%Èÿÿÿ~µ€%ÄÿÿÿŒµ€ %Àÿÿÿšµ€!%¼ÿÿÿ¨µ€"%¸ÿÿÿ¶µ€#%´ÿÿÿĵ€$%œÿÿÿÒµ€%% ÿÿÿീ&%¤ÿÿÿïµ€'%äÿÿÿþµ@(%¶@)% ¶&*%Ü8¶€V¶@%h¶@%z¶À¤ü{¶@:%‰¶À£ýжàÉý‹¶@:%™¶Àæš¶à›¶@:%©¶Àªª¶àÉ«¶@ˆ%·¶ÀR¸¶@ÆJƶÀRǶànȶànɶ@Ô%Ò¶Àø Ó¶à$ Ô¶@ˆ%à¶Ààá¶@ÆJï¶Ààð¶àùñ¶àùò¶@Ô%û¶ÀEü¶@¢J·ÀE·àƒ·àƒ·@Ô%·À¾·@¢J·À¾·àÅ·àÅ·@¡%*·ÀQ+·@ÆJ9·ÀQ:·àm;·àm<·@§%H·ÀÖI·àóJ·@¡%V·À+W·@ÆJe·À+f·àDg·àDh·@§%t·Àýu·àv·à’w·$îN’x·ø.’D]’D^ D_§Dj®DkåDqDr Ds&Dv/DwODxiDy{D|ŠD}žD€¤D´D™ºD JÞD¥ñD¦üD§D¨(DŸJ4D JMD«`D¬kD­…D®—DŸJ¤D J½D±ÐD²ÛD³õD´DŸJD J-D·@D¸KD¹eDºwDŸJ„D JD½°D¾»D¿ÕDÀçDÃôD› DœD "DŸJ1D¢JFD£JTD¥J\D¦JkDvˆDØ¢DÛ¯DÜÅDÝÔDÞæDßøDàDâ,Dl6DmLDnbDàxDâzD|„D¢J£D£J±D¥J¹D¦JÈD¢JåD£JóD¥JûD¦J D¢J'D£J5D¥J=D¦JLD¢JiD£JwD¥JD¦JŽD «D§¹D­ÇD³ÕD¹ãD¿ñDÝÿDÞDÜ+DÛ9DßJDy[DxiDwwDÕ˜DÖ¦DnÑDÕäD™òDlDm"D€3D£JRD¥YD£JxD«D£JžD±¥D£JÄD·ËD£JêD½ñDDÈ=DËTDÌpD̓DΦDϸDÐÆDÒÑDËáDÌþDÐDÍ&DÏCDÎQ·$]’É· ]Ý· ] ï· ]¸€^äÿÿÿ¸€_àÿÿÿ&¸@a7¸@bF¸€cÌÿÿÿT¸@dc¸@et¸@f…¸@h”¸&iø¬¸€Ê¸À’˸@¢JÔ¸ÀFÕ¸àˆÖ¸@¢J߸À£à¸àåá¸@¢Jê¸Àåë¸à'ì¸@¢Jõ¸À'ö¸ài÷¸@¢J¹Ài¹à«¹@¢J ¹ÀR ¹àY ¹@¢J¹Àx¹à¹@¢J!¹Àž"¹à¥#¹@¢J,¹ÀÄ-¹àË.¹@¢J7¹Àê8¹àñ9¹à_:¹$Í N_;¹('hªJ¹((lªY¹()pªm¹(*tªƒ¹(+xª”¹(Ð|ªÒ¹(×€ª º(優Mº(툪~º(ôŒª´º(ûªéº&þÜ©»&ÿØ©Y»&è©‘»&ð©È»&੼&ì©7¼&ä©k¼&ô©¦¼&ø©Ù¼&ü©½& ¯v'½& s”9½&?“K½&ž—]½&“o½&¬v½& ““½&î’¥½&Å—·½&,˜ʽ&Ì’ݽ&3—ð½&½’¾&„’¾&n’)¾&‹•<¾&H’O¾&ª•b¾&„–u¾&n—ˆ¾& í”›¾&!Ø™®¾&" •Á¾&#´•Ô¾&$€™ç¾&%(’ú¾&&’ ¿&'– ¿&(“–3¿&)‹˜F¿&*ä—Y¿&+ø–l¿&,嘿&-Ó–’¿&.Ü‘¥¿&/#”¸¿&0—Ë¿&1Ô—Þ¿&2-•ñ¿&3ç–À&4'–À&5Ö–*À&6 ”=À&7ó˜PÀ&8c—cÀ&9p–vÀ&:`‘‰À&;—œÀ&<s•¯À&=n˜ÂÀ&>C”ÕÀ&?‰“èÀ&@<‘ûÀ&AÞ“Á&B—!Á&CÀ“4Á&D°“GÁ&Ez–ZÁ&Fó•mÁ&GA–€Á&H7–“Á&Iü•¦Á&J=—¹Á&Kd•ÌÁ&LW•ßÁ&M–òÁ&NH–Â&OH—Â&P¡”+Â&Qv—>Â&R¤—QÂ&Sƒ“dÂ&T‡—wÂ&Uv™ŠÂ&VU–Â&Wý“°Â&Xé“ÃÂ&Y–ÖÂ&ZK•éÂ&[Ç–üÂ&\¯™Ã&]Ø“"Ã&^‘5Ã&_š—HÃ&`Ë•[Ã&a‘nÃ&b3˜Ã&cé”Ã&dÙ§Ã&e¾ºÃ&f«–ÍÃ&gÀ•àÃ&hЖóÃ&i_—Ä&jk™Ä&k¿˜,Ä&l9•?Ä&mì•RÄ&nŒeÄ&o™•yÄ&pi–Ä&q0–¡Ä&r“µÄ&sƒÉÄ&t±vÝÄ&udñÄ&vKÅ&wü—Å&x]“-Å&yp•AÅ&zš”UÅ&{Q”iÅ&|-}Å&}ü‘Å&~à•¥Å&Š–¹Å&€Ÿ˜ÍÅ&k”áÅ&‚‚”õÅ&ƒ” Æ&„ÿ˜Æ&…^™1Æ&†”EÆ&‡ô“YÆ&ˆ–“mÆ&‰ÈÆ&Н”•Æ&‹½”©Æ&ŒÊ”½Æ&Õ”ÑÆ&Žâ”åÆ&”ùÆ&ʘ Ç&‘g˜!Ç&’º–5Ç&“D˜IÇ&”˜]Ç&•V“qÇ&–¶…Ç&—·—™Ç&˜¹™­Ç&™µ˜ÁÇ&š¨˜ÕÇ&›”éÇ&œ$•ýÇ&;”È&ž°–%È&Ÿ–˜9È& …MÈ&¡ö”aÈ&¢™uÈ&££“‰È&¤ƒÈ&¥k±È&¦=™ÅÈ&§DÙÈ&¨•íÈ&©Z˜É&ª•É&«8)É&¬d–=É&­š–QÉ&®>•eÉ&¯Ù•yÉ&°É&±]–¡É&²–µÉ&³ŽÉÉ&´Ê™ÝÉ&µM”ñÉ&¶ÌÊ&·ݘÊ&¸™-Ê&¹”AÊ&ºÆ“UÊ&»hiÊ&¼H}Ê&½—‘Ê&¾/”¥Ê&¿ÈŒ¹Ê&À¼vÍÊ&Á¯ŒáÊ&˜ŒõÊ&öv Ë&ÄxŒË&ÅPŒ1Ë&Æ|“EË&ÇŒYË&ÈÁ—mË&É´vË&Ê©“•Ë&ËŒ©Ë&Ì÷‹½Ë&Íî‹ÑË&Î#˜åË&Ïì‹ùË&Ðç‹ Ì&Ñ”‹!Ì&Òh‹5Ì&Ó‹”IÌ&Ô˜]Ì&Õl“qÌ&ÖZ‹…Ì&×(™™Ì&Ø›™­Ì&ÙI‹ÁÌ&ÚŸ“ÕÌ&Ûi—éÌ&Ü6‹ýÌ&Ý]”Í&Þô‰%Í&ßî—9Í&àÔ‰MÍ&á̉aÍ&â•uÍ&ãÁ‰‰Í&ä•Í&åâš±Í&æ|˜ÅÍ&翚ÙÍ&茈íÍ&é—Î&ê›Î&ëpˆ)Î&ìà†=Î&í ›QÎ&îøšeÎ&ïçšyÎ&ðɆÎ&ñ±†¡Î&òÇšµÎ&ó †ÉÎ&ôŸ†ÝÎ&õu–ñÎ&öt†Ï&÷ù”Ï&ør“-Ï&ùñ•AÏ&úl†UÏ&û­šiÏ&üè…}Ï&ý ™‘Ï&þ›š¥Ï&ÿµ“¹Ï&P™ÍÏ&Ð…áÏ&´…õÏ&°… Ð&HVÐ&ÈQ1Ð&£•EÐ&þ”YÐ( ”ªwÐ( ˜ª”Ð( œª´Ð(  ªÍÐ( ¤ªðÐ(¨ª Ñ(¬ª)Ñ(°ªBÑ(´ª\Ñ(¸ªxÑ(¼ª•Ñ(Àª·Ñ(ĪÛÑ(ȪõÑ(̪Ò(Ъ1Ò(ÔªLÒ(تiÒ(ܪ€Ò(ઢÒ(䪼Ò(èªÕÒ(ìªñÒ( ðª Ó(!ôª!Ó("øª;Ó(#üªYÓ($«vÓ(%«ŒÓ(&«¨Ó(' «ÍÓ((«íÓ()«Ô(*«Ô(+«0Ô(, «JÔ(-$«oÔ(.(«ŒÔ(/,«¥Ô(00«ÄÔ(14«âÔ(28«õÔ(3<«Õ(4@«0Õ(5D«EÕ(6H«XÕ(7L«zÕ(8P«šÕ(9T«±Õ(:X«ÅÕ(;\«ÚÕ(<`«íÕ(=d«Ö(>h«-Ö(?l«FÖ(@p«jÖ(At«}Ö(Bx«’Ö(C|«­Ö(D€«ÃÖ(E„«ÛÖ(Fˆ«ûÖ(GŒ«×(H«-×(I”«?×(J˜«W×(Kœ«k×(L «‚×(M¤«›×(N¨«¯×(O¬«Ï×(P°«å×(Q´«ý×(R¸«Ø(S¼«+Ø(TÀ«?Ø(UÄ«SØ(VÈ«iØ(WÌ«}Ø(XЫ“Ø(YÔ«ªØ(ZØ«ÆØ([ܫܨ(\à«õØ(]ä« Ù(^è«#Ù(_ì«;Ù(`ð«WÙ(aô«qÙ(bø«ŠÙ(cü«¢Ù(d¬³Ù(e¬ÇÙ(f¬âÙ(g ¬øÙ(h¬Ú(i¬/Ú(j¬JÚ(k¬cÚ(l ¬yÚ(m$¬‹Ú(n(¬¡Ú(o,¬¹Ú(p0¬ÍÚ(q4¬èÚ(r8¬Û(s<¬Û(t@¬0Û(uD¬LÛ(vH¬gÛ(wL¬ƒÛ(xP¬—Û(yT¬²Û(zX¬ÊÛ({\¬àÛ(|`¬úÛ(}d¬Ü(~h¬1Ü(l¬BÜ(€p¬TÜ(t¬lÜ(‚x¬~Ü(ƒ|¬˜Ü(„€¬´Ü(…„¬ÎÜ(†ˆ¬êÜ(‡Œ¬Ý(ˆ¬$Ý(‰”¬:Ý(Š˜¬XÝ(‹œ¬pÝ(Œ ¬ŽÝ(¤¬¥Ý(ލ¬ÂÝ(¬¬ÝÝ(°¬ðÝ(‘´¬ Þ(’¸¬ Þ(“¼¬;Þ(”À¬VÞ(•ĬkÞ(–Ȭ‚Þ(—̬šÞ(˜Ь³Þ(™Ô¬ÇÞ(šجßÞ(›ܬùÞ(œà¬ß(ä¬(ß(žè¬Iß(Ÿì¬^ß( ð¬xß(¡ô¬Œß(¢ø¬¢ß(£ü¬·ß(¤­Êß(¥­âß(¦­þß(§ ­à(¨­$à(©­8à(ª­Jà(«­cà(¬ ­xà(­$­–à(®(­¬à(°,­½à(±0­Îà(²4­ßà(³8­ðà(´<­á(µ@­á(¶D­&á(·H­8á(¸L­Já(¹P­\á(ºT­ná(»X­€á(¼\­’á(½`­¤á(¾d­¶á(¿h­Èá(Àl­Úá(Áp­ìá(Ât­þá(Ãx­â(Ä|­#â(Å€­6â(Æ„­Iâ(Lj­\â(ÈŒ­oâ(É­‚â(Ê”­•â(˘­¨â(Ìœ­»â(Í ­Îâ(Τ­áâ(Ϩ­ôâ(Ь­ã(Ѱ­ã(Ò´­-ã(Ó¸­@ã(Ô¼­Sã(ÕÀ­fã(ÖÄ­yã(×È­Œã(ØÌ­Ÿã(ÙЭ²ã(ÚÔ­Åã(ÛØ­Øã(ÜÜ­ëã(Ýà­þã(Þä­ä(ßè­$ä(àì­7ä(áð­Jä(âô­]ä(ãø­pä(äü­ƒä(å®–ä(殩ä(箼ä(è ®Ïä(é®âä(ê®õä(ë®å(ì®å(í ®.å(î$®Aå(ï(®Tå(ð,®gå(ñ0®zå(ò4®å(ó8® å(ô<®³å(õ@®Æå(öD®Ùå(÷H®ìå&ùÀvæ(ëL®æ(ìP®&æ(íT®6æ(îX®Fæ(ï\®Xæ€w怗怷æ€Öæ€öæ€ç€5ç€Uç€u瀔瀴ç€Óç€óç€è€3è€Rè€r耑耰è€Ïè€îè€é€-é€Mé€mé€é€­é€Ìé€ëé€ ê€*ê€Iê€iꀈꀨê€Èê€çê€ë€'ë€Gë€f뀆뀥ë€Åë€äë€ì€$ì€Cì€c쀃쀢ì€Âì€âì€í€"í€Aí€`í€í€ží€½í€Üí€ûí€î€;î€[î€{î€Ûî€ûî€ï€:ï€Zï€yï€×ï€÷ï€ð€6ð€Uð€tð€”ð€³ð€Óð€óð€ñ€3ñ€Sñ€sñ€’ñ€²ñ€Ññ€ðñ€ò€0ò€Oò€nò€Žò€­ò€Ìò€ëò€ ó€)ó€Hó€hó€ˆó€¨ó€Èó€çó€ô€&ô€Fô€fô€†ô€¥ô€Äô€ãô€õ€!õ€Aõ€aõ€€õ€Ÿõ€¾õ€Þõ€þõ€ö€>ö€^ö€~ö€ö€½ö€Üö€ûö€÷€:÷€Y÷€y÷€˜÷€¸÷€×÷€÷÷€ø€6ø€Uø€tø€“ø€³ø€Òø€òø€ù€0ù€Pù€pù€ù€¯ù€Ïù€îù€ ú€,ú€Lú€lú€‹ú€«ú€Êú€éú€ û€*û€Iû€iû€ˆû€¨û€Èû€èû€ü€(ü€Hü€hü€‰ü€¨ü€Èü€èü€ý€'ý€Gý€fý€†ý€¥ý€Äý€ãý€þ€"þ€Aþ€`þ€þ€žþ€¾þ€Þþ€þþ€ÿ€=ÿ€]ÿ€}ÿ€ÿ€½ÿ€Üÿ€ûÿ€€;€\€|€œ€»€Û€û€€:€Z€y€š€¹€Ù€ù€€:€Z€z€š€º€Ú€ú€€8€X€w€–€µ€Ô€ô€€5€U€u€•€µ€Õ€ô€€4€S€s€•(ð`®§(ñd®·(òh®Ç(ól®×(ôp®è(õt®ù(öx® (÷|®(ø€®,(ù„®=(úˆ®N(ûŒ®_(ü®p(ý”®(þ˜®’(ÿœ®£( ®´(¤®Å(¨®Ö(¬®ç(°®ø(´® (¸®(¼®+(À®<( Ä®M( È®^( Ì®o( Ю€( Ô®‘(Ø®¢(Ü®³(à®Ä(ä®Õ(è®æ(ì®÷(ð®(ô®(ø®*(ü®;(¯L(¯](¯n( ¯(¯(¯¡(¯²(¯Ã(  ¯Ô(!$¯å("(¯ö(#,¯ ($0¯ (%4¯) (&8¯: ('<¯K ((@¯\ ()D¯m (*H¯~ (+L¯ (,P¯  (-T¯± (.X¯ &\xv &åDvE & v &K ànØ &¯ ÐT &þ eS &˜he &,eÆ &Xd &* dI &wøc &ãØ^Ò &NlY &¹G¸¯5#€U#€t#€“#€²#€Ñ#&pG€R$&wG R;$&~G Qp$&ƒG`£•$&¯G`S¼$&¼GPSâ$&ÂG8£%&H ¢E%&"H ¢s%&NH`¢£%&[H@¢Ò%&aH0¢&&™Hš&&ÚI<›0& CAc& íAž& ƒBÕ& ‡C ' :DJ' kEx' aF«' Gå' ÉG( hHR(€q(€(€¯(€Î(€í(€ )d_ )d_-)d_D)fE)<T)€._D_DbD rDsb)$_}) ‹)  ™)@§)@µ)€ß)€î)€ý)$Nx.xD xD{D‹DŒþ)$ x*  &*  4*@ B*@ P*$N‘.‘D‘DœD!¥D®D·D¹D¾DÍDåDêDìQ*$‘b* q*  * Š*€•*€¤*€³*€Í*€ã*€L+€ôÿÿÿT+@_+@h+À‘i+àôj+$cNô.ôD$ôD%úD&ÿD' D( D) D* D, k+$$ô€+ #‹+ # ˜+ #¤+ #°+ #¾+ #Ë+@#Ö+@#ã+@#ï+@#û+@# ,@#,€',€B,€Í,$1N% .% D2% D66 D7= D8| D9› D:¶ D;Ä DJÑ DOà DPç DX!D](!D`6!DeP!Dsm!Dv‚!D8©!DyÈ!DzÓ!D|Þ!DXì!D]ö!De"Df+"Dg;"DhK"Djt"Dl€"D%Œ"D&–"D'›"D(¤"D)§"D*²"Dp¹"Dq½"DeË"Dfá"Dg#Dh%#Dj+#D|>#D`L#DT[#DU}#DV¨#DfÔ#D;á#Î,„è#DÛè#ã,„$D;$D< $Dj$DA$DB¦$DCÑ$ú,„é$DÛé$-„%D%D%D%D#%D6%DQ%DV%DX%DKc%DLn%D@|%&-$2% ;- /F- / O- /_- /k- 0{- 0- 0 - 0$«- 1(Â- 1,Ý-€3lÿþÿå-€õ-€.€.€+.€~.€0€&0€S0€Š0€š0€«0€¼0€Í0€Þ0€ï0€ 1€)1€G1€]1€†1€–1€¦1€·1€Ç1€Ü1€2€'2€3äÿÿÿ62€3àÿÿÿA2€3pÿþÿL2€3tÿþÿZ2€3Üÿÿÿj2€3xÿþÿx2€3|ÿþÿ€2€3€ÿþÿ2€4Œÿÿ˜2@5¡2€­2€Î2€5ŒÿþÿÙ2€5Ìÿÿÿç2€5Œÿÿÿö2€5Ôÿÿÿ3À% 3@;3€@23€R3€n3€‹3Àè#Œ3à$3€„ÿþÿ•3Àj$–3à$—3@;¢3Àé$£3à%¤3€„ÿþÿ¬3À%­3àc%®3à–%¯3$qN–%.–%D–%D§%D‡&Dˆ8&°3„?&Dæ?&Å3„T&D‰T&D‹·&DŒÌ&Dá&DŽö&D'D$'D<'D‘L'DQ'D“l'D”u'D•Š'DŸ¤'D »'D‡ì'DÉ(DÊ!(DÎ/(D<(DK(DM(DY(Dl(D‡(D(D’(D—(D˜«(Dš¹(D›ë(D )D7)D=)DO)D_)D|)D)Dƒ)D”)D£Ÿ)D¤Î)D¥æ)D§ê)D¨*D©*D¬*D®h*D¯¨*D¶¹*D·Ã*D¸Ì*DºÕ*D»à*D¼ä*D½é*D®í*Dð*D®þ*D¿+DÀ"+D%7+D&?+D'B+D(K+D)T+D*W+DÂ^+D°f+D±p+D%y+D&+D'‡+D(+D)™+D*Ÿ+D²¦+D›¸+Dš,Ü3$–%ï3 ~ú3 ~ 4 ~4 $4 24 ?4  Q4 €$d4@‚m4€‚Øÿÿÿ|4€‚àÿÿÿ‰4€‚Üÿÿÿ™4€‚äÿÿÿ§4€‚Ôÿÿÿ²4€‚Ðÿÿÿ¾4€‚”zÿÿÊ4@ƒÓ4€ƒ˜zÿÿá4€ƒœzÿÿð4€ƒ zÿÿþ4€ƒ¤zÿÿ5€„¨zÿÿ5€…Èzÿÿ*5@†35€†¬zÿÿA5€†°zÿÿP5€†ˆÿÿÿ_5€†Hÿÿÿo5€†Èÿÿÿ~5€†ÿÿÿŒ5€†Èþÿÿ›5€§5À–%¨5@ˆ³5À?&´5àT&µ5€´zÿÿ½5À<'¾5àL'¿5€¸zÿÿÇ5ÀQ'È5àl'É5€´zÿÿÑ5À<(Ò5à(Ó5€›Èúÿÿá5À)â5à )ã5€6€¸zÿÿ 6À ) 6àŸ) 6@À6@À%6@À06À7+16à^+26@±?6@±K6@±V6Ày+W6à¦+X6€›Èúÿÿf6À¸+g6à,h6€šÈúÿÿv6À,w6à2,x6€šÈúÿÿ†6À2,‡6àŽ,ˆ6àŽ,‰6$øNŽ,Š6dŽ,0CPBÀtmt àrÏn@f,àPV o„`U¯ Pâ Sfå9y5”ŽC©Q*º‡Ì?Ü ð¨)Õ ‘¹W5[£–HÍa.{ % Š –%u–ˆà”Ƥ׺‰ÈäÜÌïÄà ô   xï _ˆ+µ=l$T/hì|G%þBþYþgþsþ€þ–þ¬þ¸þÈþÞþëþúþþþ-þGþWþfþuþ‘þ†þþ¼þÒþáþóþ¢þþþ/þDþYþlþµþ}þŠþžþ«þ¿þÐþÞþîþúþþþ þ5þGþUþfþzþþ¤þ¹þÇþÙþêþüþ þ& þ8 þM þ^ þp þˆ þš þ© þ¾ þÒ þç þû þ þ$ þ6 þD þW þl þˆ þ  þ¯ þ þÔ þæ þø þ þ þ% þ3 þ C þS þc þ ÇÍÕÝäëôû $ !s *— 1:- ´ ¼ Ä Ì “c”c¡c–cœcc¢c•c˜cFc™cšc—cŸc‘c’c@cacBcncXcDckcvc;c>cpc†c{ccc§csc?c¥c^cEcoceclcwc:cxc2czc‚cŠc cHc5cZcCcqcfc[crcgchc]c~cƒc¤c9c€cdc…c‰cVcbcAc3ctcmc}cWc7c¦cžcc=c8cycGcicˆc`c6cuc£c›ccMcTccc-cLcŒcUcjc„cYccOcNc4cQcKc‡cRcPc\cSc*c/SourceCache/Csu/Csu-58.1.1/bundle1.s/SourceCache/Csu/Csu-58.1.1/bundle1.sdyld_stub_binding_helper:F3dyld__mh_bundle_headerdyld_lazy_symbol_binding_entry_point__dyld_func_lookup:F3dyld_func_lookup_pointer/Users/marek/Desktop/pygr-0.8.1/pygr/intervaldb.cgcc2_compiled.:t(0,1)=(0,1)read_intervals:F(0,2)n:p(0,3)ifile:p(0,4)i:r(0,3)int:t(0,3)=r(0,3);-2147483648;2147483647;:t(0,2)=*(0,5):t(0,4)=*(0,6)IntervalMap:t(0,5)=(0,7)FILE:t(0,6)=(0,8):T(0,7)=s24start:(0,3),0,32;end:(0,3),32,32;target_id:(0,3),64,32;target_start:(0,3),96,32;target_end:(0,3),128,32;sublist:(0,3),160,32;;__sFILE:T(0,8)=s88_p:(0,9),0,32;_r:(0,3),32,32;_w:(0,3),64,32;_flags:(0,10),96,16;_file:(0,10),112,16;_bf:(0,11),128,64;_lbfsize:(0,3),192,32;_cookie:(0,12),224,32;_close:(0,13),256,32;_read:(0,14),288,32;_seek:(0,15),320,32;_write:(0,16),352,32;_ub:(0,11),384,64;_extra:(0,17),448,32;_ur:(0,3),480,32;_ubuf:(0,18),512,24;_nbuf:(0,19),536,8;_lb:(0,11),544,64;_blksize:(0,3),608,32;_offset:(0,20),640,64;;:t(0,9)=*(0,22)short int:t(0,10)=@s16;r(0,10);-32768;32767;__sbuf:T(0,11)=s8_base:(0,9),0,32;_size:(0,3),32,32;;:t(0,12)=*(0,1):t(0,13)=*(0,23):t(0,14)=*(0,24):t(0,15)=*(0,25):t(0,16)=*(0,26):t(0,17)=*(0,27):t(0,18)=ar(0,28);0;2;(0,22):t(0,19)=ar(0,28);0;0;(0,22)__darwin_off_t:t(0,21)=(0,29)fpos_t:t(0,20)=(0,21)unsigned char:t(0,22)=@s8;r(0,22);0;255;:t(0,23)=f(0,3):t(0,24)=f(0,3):t(0,25)=f(0,20):t(0,26)=f(0,3):t(0,27)=xs__sFILEX:long unsigned int:t(0,28)=r(0,28);0;037777777777;__int64_t:t(0,29)=(0,30)long long int:t(0,30)=@s64;r(0,30);01000000000000000000000;0777777777777777777777;im:(0,2)void:t(0,1)errstr:(0,31)errstr:(0,31):t(0,31)=ar(0,28);0;1023;(0,32)char:t(0,32)=r(0,32);0;127;imstart_qsort_cmp:F(0,3)void_a:p(0,33)void_b:p(0,33)void_a:r(0,33)void_b:r(0,33):t(0,33)=*(0,34):t(0,34)=k(0,1)sublist_qsort_cmp:F(0,3)void_a:p(0,33)void_b:p(0,33)void_a:r(0,33)void_b:r(0,33)target_qsort_cmp:F(0,3)void_a:p(0,33)void_b:p(0,33)void_a:r(0,33)void_b:r(0,33)reorient_intervals:F(0,1)n:p(0,3)im:p(0,2)ori_sign:p(0,3)i:r(0,3)tmp:r(0,3)n:r(0,3)interval_map_alloc:F(0,2)n:p(0,3)im:r(0,2)n:r(0,3)errstr:(0,31)errstr:(0,31)find_overlap_start:F(0,3)start:p(0,3)end:p(0,3)im:p(0,2)n:p(0,3)l:r(0,3)r:(0,3)find_index_start:F(0,3)start:p(0,3)end:p(0,3)im:p(0,35)n:p(0,3)l:r(0,3):t(0,35)=*(0,36)IntervalIndex:t(0,36)=(0,37):T(0,37)=s8start:(0,3),0,32;end:(0,3),32,32;;r:r(0,3)im:r(0,35)interval_iterator_alloc:F(0,38):t(0,38)=*(0,39)IntervalIterator:t(0,39)=(0,40)IntervalIterator_S:T(0,40)=s32i:(0,3),0,32;n:(0,3),32,32;nii:(0,3),64,32;ntop:(0,3),96,32;i_div:(0,3),128,32;im:(0,2),160,32;up:(0,41),192,32;down:(0,41),224,32;;:t(0,41)=*(0,40)errstr:(0,31)free_interval_iterator:F(0,3)it:p(0,38)it2:r(0,38)it_next:r(0,38)reset_interval_iterator:F(0,38)it:p(0,38)it:r(0,38)read_imdiv:F(0,3)ifile:p(0,4)imdiv:p(0,2)div:p(0,3)i_div:p(0,3)ntop:p(0,3)block:(0,3)ipos:r(0,42)off_t:t(0,42)=(0,21)imdiv:r(0,2)div:r(0,3)read_sublist:F(0,2)ifile:p(0,4)subheader:p(0,43)im:p(0,2)ipos:r(0,42):t(0,43)=*(0,44)SublistHeader:t(0,44)=(0,45):T(0,45)=s8start:(0,3),0,32;len:(0,3),32,32;;errstr:(0,31)errstr:(0,31)read_subheader_block:F(0,3)subheader:p(0,43)isub:p(0,3)nblock:p(0,3)nsubheader:p(0,3)ifile:p(0,4)ipos:r(0,42)start:r(0,46)long int:t(0,46)=r(0,46);-2147483648;2147483647;subheader:r(0,43)isub:r(0,3)nblock:r(0,3)nsubheader:r(0,3)write_padded_binary:F(0,3)im:p(0,2)n:p(0,3)div:p(0,3)ifile:p(0,4)i:r(0,3)npad:r(0,3)div:r(0,3)repack_subheaders:F(0,3)im:p(0,2)n:p(0,3)div:p(0,3)subheader:p(0,43)nlists:p(0,3)i:r(0,3)j:r(0,3)errstr:(0,31)errstr:(0,31)errstr:(0,31)errstr:(0,31)write_binary_index:F(0,3)im:p(0,2)n:p(0,3)div:p(0,3)ifile:p(0,4)i:r(0,3)j:r(0,3)nsave:(0,3)read_binary_files:F(0,47)filestem:p(0,48)err_msg:p(0,48)subheader_nblock:p(0,3)n:(0,3):t(0,47)=*(0,49):t(0,48)=*(0,32)IntervalDBFile:t(0,49)=(0,50):T(0,50)=s48n:(0,3),0,32;ntop:(0,3),32,32;nlists:(0,3),64,32;div:(0,3),96,32;nii:(0,3),128,32;ii:(0,35),160,32;subheader:(0,43),192,32;subheader_file:(0,51)=xsSubheaderFile:,224,128;ifile_idb:(0,4),352,32;;:T(0,52)=s16subheader:(0,43),0,32;nblock:(0,3),32,32;start:(0,3),64,32;ifile:(0,4),96,32;;SubheaderFile:t(0,51)=(0,52)ntop:(0,3)div:(0,3)nlists:(0,3)nii:(0,3)path:(0,53)subheader:r(0,43)idb_file:(0,47)ifile:r(0,4):t(0,53)=ar(0,28);0;2047;(0,32)subheader_nblock:r(0,3)errstr:(0,31)errstr:(0,31)errstr:(0,31)errstr:(0,31)errstr:(0,31)errstr:(0,31)free_interval_dbfile:F(0,3)db_file:p(0,47)db_file:r(0,47)save_text_file:F(0,3)filestem:p(0,48)basestem:p(0,48)err_msg:p(0,48)ofile:p(0,4)i:r(0,3)n:(0,3)ntop:(0,3)div:(0,3)nlists:(0,3)nii:(0,3)npad:(0,3)path:(0,53)im:(0,5)ii:(0,36)subheader:(0,44)ifile:r(0,4)text_file_to_binaries:F(0,3)infile:p(0,4)buildpath:p(0,48)err_msg:p(0,48)i:r(0,3)n:(0,3)ntop:(0,3)div:(0,3)nlists:(0,3)nii:(0,3)npad:r(0,3)path:(0,53)line:(0,54)filestem:(0,53)im:(0,5)ii:(0,36)subheader:(0,44)ifile:r(0,4):t(0,54)=ar(0,28);0;32767;(0,32)find_suboverlap_start:F(0,3)start:p(0,3)end:p(0,3)isub:p(0,3)im:p(0,2)subheader:p(0,43)nlists:p(0,3)i:r(0,3)isub:r(0,3)n:(0,3)im:(0,2)r:(0,3)find_file_start:F(0,3)it:p(0,38)start:p(0,3)end:p(0,3)isub:p(0,3)ii:p(0,35)nii:p(0,3)subheader:p(0,43)nlists:p(0,3)subheader_file:p(0,55)ntop:p(0,3)div:p(0,3)ifile:p(0,4)i_div:r(0,3):t(0,55)=*(0,51)offset:(0,3)offset_div:(0,3)ifile:(0,4)nblock:r(0,3)subheader:(0,43)ipos:r(0,42)start:r(0,46)ntop:(0,3)i_div:(0,3)imdiv:(0,2)ipos:r(0,42)n:(0,3)im:(0,2)l:r(0,3)r:(0,3)ntop:(0,3)i_div:(0,3)imdiv:(0,2)ipos:r(0,42)n:(0,3)im:(0,2)l:r(0,3)r:(0,3)im:(0,35)r:r(0,3)r:r(0,3)im:(0,35)r:r(0,3)errstr:(0,31)r:r(0,3)errstr:(0,31)_err_msg.7778write_binary_files:F(0,48)im:p(0,2)n:p(0,3)ntop:p(0,3)div:p(0,3)subheader:p(0,43)nlists:p(0,3)filestem:p(0,48)i:(0,3)npad:(0,3)nii:(0,3)path:(0,53)ifile:(0,4)ifile_subheader:(0,4)sh_tmp:(0,44)err_msg:V(0,31)i:r(0,3)npad:r(0,3)i:r(0,3)j:r(0,3)im:(0,2)i:r(0,3)j:r(0,3)nsave:(0,3)im:(0,2)i:r(0,3)j:r(0,3)nsave:(0,3)i:r(0,3)npad:r(0,3)im:(0,2)i:(0,3)npad:r(0,3)i:r(0,3)j:r(0,3)im:(0,2)i:(0,3)npad:r(0,3)build_nested_list_inplace:F(0,43)im:p(0,2)n:p(0,3)p_n:p(0,56)p_nlists:p(0,56)i:r(0,3):t(0,56)=*(0,3)isublist:r(0,3)total:r(0,3)temp:r(0,3)subheader:(0,43)p_nlists:r(0,56)i:r(0,3)tmp:r(0,3)errstr:(0,31)errstr:(0,31)errstr:(0,31)errstr:(0,31)build_nested_list:F(0,43)im:p(0,2)n:p(0,3)p_n:p(0,56)p_nlists:p(0,56)i:r(0,3)parent:r(0,3)nsub:(0,3)nlists:(0,3)subheader:(0,43)i:r(0,3)tmp:r(0,3)errstr:(0,31)errstr:(0,31)errstr:(0,31)errstr:(0,31)errstr:(0,31)errstr:(0,31)errstr:(0,31)errstr:(0,31)find_intervals:F(0,3)it0:p(0,38)start:p(0,3)end:p(0,3)im:p(0,2)n:p(0,3)subheader:p(0,43)nlists:p(0,3)buf:p(0,2)nbuf:p(0,3)p_nreturn:p(0,56)it_return:p(0,57)it:r(0,38)it2:r(0,38)ibuf:(0,3):t(0,57)=*(0,38)j:r(0,3)k:r(0,3)ori_sign:(0,3)p_nreturn:r(0,56)it_return:r(0,57)errstr:(0,31)l:(0,3)r:(0,3)i:r(0,3)tmp:r(0,3)i:(0,3)n:(0,3)im:(0,2)r:(0,3)i:(0,3)n:(0,3)im:(0,2)r:(0,3)it2:(0,38)l:(0,3)r:(0,3)errstr:(0,31)errstr:(0,31)errstr:(0,31)find_file_intervals:F(0,3)it0:p(0,38)start:p(0,3)end:p(0,3)ii:p(0,35)nii:p(0,3)subheader:p(0,43)nlists:p(0,3)subheader_file:p(0,55)ntop:p(0,3)div:p(0,3)ifile:p(0,4)buf:p(0,2)nbuf:p(0,3)p_nreturn:p(0,56)it_return:p(0,57)it:(0,38)it2:r(0,38)k:(0,3)ibuf:(0,3)ori_sign:(0,3)ov:(0,3)errstr:(0,31)i:r(0,3)tmp:r(0,3)ntop:(0,3)imdiv:(0,2)ipos:r(0,42)errstr:(0,31)ntop:(0,3)imdiv:(0,2)ipos:r(0,42)errstr:(0,31)it2:r(0,38)C_int_max:G(0,3)/Users/marek/Desktop/pygr-0.8.1/pygr/cnestedlist.cgcc2_compiled.:t(0,1)=(0,1)___pyx_tp_dealloc_4pygr_11cnestedlist_NLMSASliceIterator___pyx_tp_as_number_NLMSASliceIterator___pyx_tp_as_sequence_NLMSASliceIterator___pyx_tp_as_mapping_NLMSASliceIterator___pyx_tp_as_buffer_NLMSASliceIterator___pyx_tp_traverse_4pygr_11cnestedlist_NLMSASliceIterator___pyx_tp_clear_4pygr_11cnestedlist_NLMSASliceIterator___pyx_f_4pygr_11cnestedlist_18NLMSASliceIterator___iter_____pyx_f_4pygr_11cnestedlist_18NLMSASliceIterator___next_____pyx_methods_4pygr_11cnestedlist_NLMSASliceIterator___pyx_tp_new_4pygr_11cnestedlist_NLMSASliceIterator___pyx_tp_dealloc_4pygr_11cnestedlist_NLMSANode___pyx_f_4pygr_11cnestedlist_9NLMSANode___cmp_____pyx_tp_as_number_NLMSANode___pyx_tp_as_sequence_NLMSANode___pyx_tp_as_mapping_NLMSANode___pyx_tp_as_buffer_NLMSANode___pyx_tp_traverse_4pygr_11cnestedlist_NLMSANode___pyx_tp_clear_4pygr_11cnestedlist_NLMSANode___pyx_f_4pygr_11cnestedlist_9NLMSANode___iter_____pyx_methods_4pygr_11cnestedlist_NLMSANode___pyx_members_4pygr_11cnestedlist_NLMSANode___pyx_getsets_4pygr_11cnestedlist_NLMSANode___pyx_tp_new_4pygr_11cnestedlist_NLMSANode___pyx_getprop_4pygr_11cnestedlist_9NLMSANode_edges___pyx_k250___pyx_f_4pygr_11cnestedlist_9NLMSANode_getSeqPos___pyx_doc_4pygr_11cnestedlist_9NLMSANode_getSeqPos___pyx_f_4pygr_11cnestedlist_9NLMSANode_getEdgeSeqs___pyx_doc_4pygr_11cnestedlist_9NLMSANode_getEdgeSeqs___pyx_f_4pygr_11cnestedlist_9NLMSANode_nodeEdges___pyx_doc_4pygr_11cnestedlist_9NLMSANode_nodeEdges___pyx_f_4pygr_11cnestedlist_9NLMSANode___len_____pyx_f_4pygr_11cnestedlist_9NLMSANode___getitem_____pyx_sq_item_4pygr_11cnestedlist_NLMSANode___pyx_tp_dealloc_4pygr_11cnestedlist_NLMSASliceLetters___pyx_tp_as_number_NLMSASliceLetters___pyx_tp_as_sequence_NLMSASliceLetters___pyx_tp_as_mapping_NLMSASliceLetters___pyx_tp_as_buffer_NLMSASliceLetters___pyx_tp_traverse_4pygr_11cnestedlist_NLMSASliceLetters___pyx_tp_clear_4pygr_11cnestedlist_NLMSASliceLetters___pyx_f_4pygr_11cnestedlist_17NLMSASliceLetters___iter_____pyx_methods_4pygr_11cnestedlist_NLMSASliceLetters___pyx_members_4pygr_11cnestedlist_NLMSASliceLetters___pyx_tp_new_4pygr_11cnestedlist_NLMSASliceLetters___pyx_f_4pygr_11cnestedlist_17NLMSASliceLetters_items___pyx_doc_4pygr_11cnestedlist_17NLMSASliceLetters_items___pyx_f_4pygr_11cnestedlist_17NLMSASliceLetters_iteritems___pyx_f_4pygr_11cnestedlist_17NLMSASliceLetters___getitem_____pyx_sq_item_4pygr_11cnestedlist_NLMSASliceLetters___pyx_tp_dealloc_4pygr_11cnestedlist_NLMSASlice___pyx_f_4pygr_11cnestedlist_10NLMSASlice___cmp_____pyx_f_4pygr_11cnestedlist_10NLMSASlice___repr_____pyx_tp_as_number_NLMSASlice___pyx_tp_as_sequence_NLMSASlice___pyx_tp_as_mapping_NLMSASlice___pyx_f_4pygr_11cnestedlist_10NLMSASlice___hash_____pyx_tp_as_buffer_NLMSASlice___pyx_tp_traverse_4pygr_11cnestedlist_NLMSASlice___pyx_tp_clear_4pygr_11cnestedlist_NLMSASlice___pyx_f_4pygr_11cnestedlist_10NLMSASlice___iter_____pyx_methods_4pygr_11cnestedlist_NLMSASlice___pyx_members_4pygr_11cnestedlist_NLMSASlice___pyx_getsets_4pygr_11cnestedlist_NLMSASlice___pyx_tp_new_4pygr_11cnestedlist_NLMSASlice___pyx_getprop_4pygr_11cnestedlist_10NLMSASlice_letters___pyx_k249___pyx_f_4pygr_11cnestedlist_10NLMSASlice_edges___pyx_doc_4pygr_11cnestedlist_10NLMSASlice_edges___pyx_f_4pygr_11cnestedlist_10NLMSASlice_items___pyx_doc_4pygr_11cnestedlist_10NLMSASlice_items___pyx_f_4pygr_11cnestedlist_10NLMSASlice_iteritems___pyx_f_4pygr_11cnestedlist_10NLMSASlice_keys___pyx_doc_4pygr_11cnestedlist_10NLMSASlice_keys___pyx_f_4pygr_11cnestedlist_10NLMSASlice_matchIntervals___pyx_doc_4pygr_11cnestedlist_10NLMSASlice_matchIntervals___pyx_f_4pygr_11cnestedlist_10NLMSASlice_findSeqEnds___pyx_doc_4pygr_11cnestedlist_10NLMSASlice_findSeqEnds___pyx_f_4pygr_11cnestedlist_10NLMSASlice_generateSeqEnds___pyx_doc_4pygr_11cnestedlist_10NLMSASlice_generateSeqEnds___pyx_f_4pygr_11cnestedlist_10NLMSASlice_groupByIntervals___pyx_doc_4pygr_11cnestedlist_10NLMSASlice_groupByIntervals___pyx_f_4pygr_11cnestedlist_10NLMSASlice_conservationFilter___pyx_f_4pygr_11cnestedlist_10NLMSASlice_filterIvalConservation___pyx_f_4pygr_11cnestedlist_10NLMSASlice_groupBySequences___pyx_doc_4pygr_11cnestedlist_10NLMSASlice_groupBySequences___pyx_f_4pygr_11cnestedlist_10NLMSASlice_clip_interval_list___pyx_doc_4pygr_11cnestedlist_10NLMSASlice_clip_interval_list___pyx_f_4pygr_11cnestedlist_10NLMSASlice_split___pyx_doc_4pygr_11cnestedlist_10NLMSASlice_split___pyx_f_4pygr_11cnestedlist_10NLMSASlice_regions___pyx_doc_4pygr_11cnestedlist_10NLMSASlice_regions___pyx_f_4pygr_11cnestedlist_10NLMSASlice_rawIvals___pyx_doc_4pygr_11cnestedlist_10NLMSASlice_rawIvals___pyx_f_4pygr_11cnestedlist_10NLMSASlice___len_____pyx_f_4pygr_11cnestedlist_10NLMSASlice___getitem_____pyx_mp_ass_subscript_4pygr_11cnestedlist_NLMSASlice___pyx_sq_item_4pygr_11cnestedlist_NLMSASlice___pyx_tp_dealloc_4pygr_11cnestedlist_NLMSA___pyx_tp_as_number_NLMSA___pyx_tp_as_sequence_NLMSA___pyx_tp_as_mapping_NLMSA___pyx_tp_as_buffer_NLMSA___pyx_tp_traverse_4pygr_11cnestedlist_NLMSA___pyx_tp_clear_4pygr_11cnestedlist_NLMSA___pyx_f_4pygr_11cnestedlist_5NLMSA___iter_____pyx_methods_4pygr_11cnestedlist_NLMSA___pyx_members_4pygr_11cnestedlist_NLMSA___pyx_f_4pygr_11cnestedlist_5NLMSA___init_____pyx_tp_new_4pygr_11cnestedlist_NLMSA___pyx_f_4pygr_11cnestedlist_5NLMSA_close___pyx_doc_4pygr_11cnestedlist_5NLMSA_close___pyx_f_4pygr_11cnestedlist_5NLMSA___reduce_____pyx_f_4pygr_11cnestedlist_5NLMSA___getstate_____pyx_f_4pygr_11cnestedlist_5NLMSA___setstate_____pyx_f_4pygr_11cnestedlist_5NLMSA_read_indexes___pyx_doc_4pygr_11cnestedlist_5NLMSA_read_indexes___pyx_f_4pygr_11cnestedlist_5NLMSA_read_attrs___pyx_doc_4pygr_11cnestedlist_5NLMSA_read_attrs___pyx_f_4pygr_11cnestedlist_5NLMSA_addToSeqlist___pyx_doc_4pygr_11cnestedlist_5NLMSA_addToSeqlist___pyx_f_4pygr_11cnestedlist_5NLMSA_newSequence___pyx_doc_4pygr_11cnestedlist_5NLMSA_newSequence___pyx_f_4pygr_11cnestedlist_5NLMSA_nextID___pyx_doc_4pygr_11cnestedlist_5NLMSA_nextID___pyx_f_4pygr_11cnestedlist_5NLMSA_initLPO___pyx_doc_4pygr_11cnestedlist_5NLMSA_initLPO___pyx_f_4pygr_11cnestedlist_5NLMSA_init_pairwise_mode___pyx_doc_4pygr_11cnestedlist_5NLMSA_init_pairwise_mode___pyx_f_4pygr_11cnestedlist_5NLMSA_edges___pyx_f_4pygr_11cnestedlist_5NLMSA_addAnnotation___pyx_doc_4pygr_11cnestedlist_5NLMSA_addAnnotation___pyx_f_4pygr_11cnestedlist_5NLMSA_add_aligned_intervals___pyx_doc_4pygr_11cnestedlist_5NLMSA_add_aligned_intervals___pyx_f_4pygr_11cnestedlist_5NLMSA_readMAFfiles___pyx_doc_4pygr_11cnestedlist_5NLMSA_readMAFfiles___pyx_f_4pygr_11cnestedlist_5NLMSA_readAxtNet___pyx_doc_4pygr_11cnestedlist_5NLMSA_readAxtNet___pyx_f_4pygr_11cnestedlist_5NLMSA_buildFiles___pyx_doc_4pygr_11cnestedlist_5NLMSA_buildFiles___pyx_f_4pygr_11cnestedlist_5NLMSA_save_seq_dict___pyx_doc_4pygr_11cnestedlist_5NLMSA_save_seq_dict___pyx_f_4pygr_11cnestedlist_5NLMSA_build___pyx_doc_4pygr_11cnestedlist_5NLMSA_build___pyx_f_4pygr_11cnestedlist_5NLMSA_seqInterval___pyx_doc_4pygr_11cnestedlist_5NLMSA_seqInterval___pyx_f_4pygr_11cnestedlist_5NLMSA___getitem_____pyx_mp_ass_subscript_4pygr_11cnestedlist_NLMSA___pyx_sq_item_4pygr_11cnestedlist_NLMSA___pyx_f_4pygr_11cnestedlist_5NLMSA___invert_____pyx_f_4pygr_11cnestedlist_5NLMSA___iadd_____pyx_tp_dealloc_4pygr_11cnestedlist_IntervalFileDBIterator___pyx_tp_as_number_IntervalFileDBIterator___pyx_tp_as_sequence_IntervalFileDBIterator___pyx_tp_as_mapping_IntervalFileDBIterator___pyx_tp_as_buffer_IntervalFileDBIterator___pyx_tp_traverse_4pygr_11cnestedlist_IntervalFileDBIterator___pyx_tp_clear_4pygr_11cnestedlist_IntervalFileDBIterator___pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator___iter_____pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator___next_____pyx_methods_4pygr_11cnestedlist_IntervalFileDBIterator___pyx_tp_new_4pygr_11cnestedlist_IntervalFileDBIterator___pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator_mergeSeq___pyx_doc_4pygr_11cnestedlist_22IntervalFileDBIterator_mergeSeq___pyx_tp_dealloc_4pygr_11cnestedlist_NLMSASequence___pyx_tp_as_number_NLMSASequence___pyx_tp_as_sequence_NLMSASequence___pyx_tp_as_mapping_NLMSASequence___pyx_tp_as_buffer_NLMSASequence___pyx_tp_traverse_4pygr_11cnestedlist_NLMSASequence___pyx_tp_clear_4pygr_11cnestedlist_NLMSASequence___pyx_methods_4pygr_11cnestedlist_NLMSASequence___pyx_members_4pygr_11cnestedlist_NLMSASequence___pyx_f_4pygr_11cnestedlist_13NLMSASequence___init_____pyx_tp_new_4pygr_11cnestedlist_NLMSASequence___pyx_f_4pygr_11cnestedlist_13NLMSASequence_forceLoad___pyx_doc_4pygr_11cnestedlist_13NLMSASequence_forceLoad___pyx_f_4pygr_11cnestedlist_13NLMSASequence_close___pyx_doc_4pygr_11cnestedlist_13NLMSASequence_close___pyx_f_4pygr_11cnestedlist_13NLMSASequence_buildFiles___pyx_doc_4pygr_11cnestedlist_13NLMSASequence_buildFiles___pyx_f_4pygr_11cnestedlist_13NLMSASequence_buildInMemory___pyx_f_4pygr_11cnestedlist_13NLMSASequence___len_____pyx_f_4pygr_11cnestedlist_13NLMSASequence___getitem_____pyx_mp_ass_subscript_4pygr_11cnestedlist_NLMSASequence___pyx_sq_item_4pygr_11cnestedlist_NLMSASequence___pyx_f_4pygr_11cnestedlist_13NLMSASequence___iadd_____pyx_tp_dealloc_4pygr_11cnestedlist_IntervalFileDB___pyx_tp_as_number_IntervalFileDB___pyx_tp_as_sequence_IntervalFileDB___pyx_tp_as_mapping_IntervalFileDB___pyx_tp_as_buffer_IntervalFileDB___pyx_methods_4pygr_11cnestedlist_IntervalFileDB___pyx_tp_new_4pygr_11cnestedlist_IntervalFileDB___pyx_f_4pygr_11cnestedlist_14IntervalFileDB_open___pyx_f_4pygr_11cnestedlist_14IntervalFileDB_find_overlap___pyx_f_4pygr_11cnestedlist_14IntervalFileDB_find_overlap_list___pyx_f_4pygr_11cnestedlist_14IntervalFileDB_check_nonempty___pyx_f_4pygr_11cnestedlist_14IntervalFileDB_close___pyx_tp_dealloc_4pygr_11cnestedlist_IntervalDBIterator___pyx_tp_as_number_IntervalDBIterator___pyx_tp_as_sequence_IntervalDBIterator___pyx_tp_as_mapping_IntervalDBIterator___pyx_tp_as_buffer_IntervalDBIterator___pyx_tp_traverse_4pygr_11cnestedlist_IntervalDBIterator___pyx_tp_clear_4pygr_11cnestedlist_IntervalDBIterator___pyx_f_4pygr_11cnestedlist_18IntervalDBIterator___iter_____pyx_f_4pygr_11cnestedlist_18IntervalDBIterator___next_____pyx_methods_4pygr_11cnestedlist_IntervalDBIterator___pyx_tp_new_4pygr_11cnestedlist_IntervalDBIterator___pyx_tp_dealloc_4pygr_11cnestedlist_IntervalDB___pyx_tp_as_number_IntervalDB___pyx_tp_as_sequence_IntervalDB___pyx_tp_as_mapping_IntervalDB___pyx_tp_as_buffer_IntervalDB___pyx_methods_4pygr_11cnestedlist_IntervalDB___pyx_tp_new_4pygr_11cnestedlist_IntervalDB___pyx_f_4pygr_11cnestedlist_10IntervalDB_save_tuples___pyx_doc_4pygr_11cnestedlist_10IntervalDB_save_tuples___pyx_f_4pygr_11cnestedlist_10IntervalDB_runBuildMethod___pyx_doc_4pygr_11cnestedlist_10IntervalDB_runBuildMethod___pyx_f_4pygr_11cnestedlist_10IntervalDB_buildFromUnsortedFile___pyx_doc_4pygr_11cnestedlist_10IntervalDB_buildFromUnsortedFile___pyx_f_4pygr_11cnestedlist_10IntervalDB_find_overlap___pyx_f_4pygr_11cnestedlist_10IntervalDB_find_overlap_list___pyx_f_4pygr_11cnestedlist_10IntervalDB_check_nonempty___pyx_f_4pygr_11cnestedlist_10IntervalDB_write_binaries___pyx_f_4pygr_11cnestedlist_10IntervalDB_close___pyx_ptype_4pygr_11cnestedlist_IntervalDBIterator___pyx_k6___pyx_k1___pyx_ptype_4pygr_11cnestedlist_IntervalDB___pyx_ptype_4pygr_11cnestedlist_IntervalFileDBIterator___pyx_ptype_4pygr_11cnestedlist_NLMSASlice___pyx_ptype_4pygr_11cnestedlist_IntervalFileDB___pyx_k105___pyx_ptype_4pygr_11cnestedlist_NLMSA___pyx_ptype_4pygr_11cnestedlist_NLMSASequence___pyx_k190___pyx_k184___pyx_k181___pyx_ptype_4pygr_11cnestedlist_NLMSASliceLetters___pyx_ptype_4pygr_11cnestedlist_NLMSANode___pyx_ptype_4pygr_11cnestedlist_NLMSASliceIterator___pyx_string_tab___pyx_n_AttributeError___pyx_k22___pyx_n_BuildMSASlice___pyx_k169___pyx_n_ClassicUnpickler___pyx_k141___pyx_n_DictQueue___pyx_k81___pyx_n_EmptyAlignmentError___pyx_k205___pyx_n_EmptySlice___pyx_k173___pyx_n_EmptySliceError___pyx_k25___pyx_n_FloatType___pyx_k74___pyx_n_LetterEdge___pyx_k95___pyx_n_NLMSASeqDict___pyx_k122___pyx_n_NLMSASequence___pyx_k245___pyx_n_NLMSA_LPO_Internal___pyx_k155___pyx_n_NLMSA_UNION_Internal___pyx_k204___pyx_n_NLMSAindex___pyx_k151___pyx_n_PrefixUnionDict___pyx_k242___pyx_n_RLIMIT_NOFILE___pyx_k121___pyx_n_Seq2SeqEdge___pyx_k44___pyx_n_SeqCacheOwner___pyx_k33___pyx_n_SeqPath___pyx_k172___pyx_n_SeqPrefixUnionDict___pyx_k133___pyx_n_StringType___pyx_k96___pyx_n___class_____pyx_k142___pyx_n___getstate_____pyx_k143___pyx_n___iadd_____pyx_k117___pyx_n___init_____pyx_k148___pyx_n__cache_max___pyx_k30___pyx_n__persistent_id___pyx_k219___pyx_n_absoluteSlice___pyx_k50___pyx_n_addAll___pyx_k134___pyx_n_addToSeqlist___pyx_k158___pyx_n_add_aligned_intervals___pyx_k136___pyx_n_advanceStartStop___pyx_k87___pyx_n_append___pyx_k10___pyx_n_basename___pyx_k195___pyx_n_build___pyx_k137___pyx_n_buildFiles___pyx_k201___pyx_n_buildFromUnsortedFile___pyx_k108___pyx_n_buildInMemory___pyx_k212___pyx_n_cacheHint___pyx_k31___pyx_n_cache_reference___pyx_k38___pyx_n_check_nonempty___pyx_k9___pyx_n_chr___pyx_k189___pyx_n_classutil___pyx_k140___pyx_n_clip_interval_list___pyx_k71___pyx_n_close___pyx_k4___pyx_n_cmp___pyx_k84___pyx_n_conservationFilter___pyx_k73___pyx_n_conservedSegment___pyx_k70___pyx_n_doSlice___pyx_k20___pyx_n_dump___pyx_k208___pyx_n_edges___pyx_k45___pyx_n_end___pyx_k94___pyx_n_filterIvalConservation___pyx_k68___pyx_n_filterSeqs___pyx_k63___pyx_n_forceLoad___pyx_k12___pyx_n_generate_nlmsa_edges___pyx_k178___pyx_n_get___pyx_k222___pyx_n_getID___pyx_k48___pyx_n_getIDcoords___pyx_k55___pyx_n_getSeq___pyx_k37___pyx_n_getSeqID___pyx_k32___pyx_n_groupByIntervals___pyx_k40___pyx_n_groupBySequences___pyx_k42___pyx_n_id___pyx_k34___pyx_n_im___pyx_k93___pyx_n_indelCut___pyx_k80___pyx_n_info___pyx_k167___pyx_n_initLPO___pyx_k135___pyx_n_inverseDB___pyx_k147___pyx_n_ipos___pyx_k91___pyx_n_is_bidirectional___pyx_k162___pyx_n_is_lpo___pyx_k29___pyx_n_is_union___pyx_k116___pyx_n_items___pyx_k19___pyx_n_iteritems___pyx_k58___pyx_n_join___pyx_k234___pyx_n_keys___pyx_k46___pyx_n_length___pyx_k101___pyx_n_load___pyx_k161___pyx_n_logger___pyx_k166___pyx_n_mapping___pyx_k75___pyx_n_maxAlignSize___pyx_k67___pyx_n_maxgap___pyx_k60___pyx_n_maxinsert___pyx_k61___pyx_n_memory___pyx_k102___pyx_n_mergeAll___pyx_k41___pyx_n_mergeSeq___pyx_k28___pyx_n_minAlignSize___pyx_k66___pyx_n_minAligned___pyx_k78___pyx_n_mininsert___pyx_k62___pyx_n_msaSlice___pyx_k59___pyx_n_n___pyx_k238___pyx_n_name___pyx_k98___pyx_n_newSequence___pyx_k115___pyx_n_nextID___pyx_k164___pyx_n_nlmsaSequence___pyx_k85___pyx_n_nlmsaSlice___pyx_k92___pyx_n_nlmsa_utils___pyx_k24___pyx_n_nodeEdges___pyx_k18___pyx_n_noname___pyx_k251___pyx_n_ns___pyx_k23___pyx_n_offset___pyx_k100___pyx_n_onDemand___pyx_k157___pyx_n_open___pyx_k16___pyx_n_open_shelve___pyx_k215___pyx_n_orientation___pyx_k49___pyx_n_os___pyx_k110___pyx_n_pAlignedMin___pyx_k64___pyx_n_pIdentityMin___pyx_k65___pyx_n_pMinAligned___pyx_k79___pyx_n_pairwiseMode___pyx_k163___pyx_n_path___pyx_k97___pyx_n_pathForward___pyx_k39___pyx_n_pathstem___pyx_k145___pyx_n_pickle___pyx_k159___pyx_n_prefixDict___pyx_k217___pyx_n_prune_self_mappings___pyx_k252___pyx_n_pygr___pyx_k236___pyx_n_r___pyx_n_rU___pyx_k150___pyx_n_rawIvals___pyx_k21___pyx_n_rb___pyx_n_readAxtNet___pyx_k131___pyx_n_readMAFfiles___pyx_k130___pyx_n_read_attrs___pyx_k129___pyx_n_read_indexes___pyx_k128___pyx_n_read_seq_dict___pyx_k127___pyx_n_relativeSlice___pyx_k69___pyx_n_remove___pyx_k111___pyx_n_reopenReadOnly___pyx_k200___pyx_n_resource___pyx_k119___pyx_n_runBuildMethod___pyx_k2___pyx_n_saveSeq___pyx_k118___pyx_n_save_seq_dict___pyx_k210___pyx_n_save_tuples___pyx_k112___pyx_n_seq___pyx_k170___pyx_n_seqBounds___pyx_k51___pyx_n_seqDict___pyx_k146___pyx_n_seqInfoDict___pyx_k179___pyx_n_seqInterval___pyx_k36___pyx_n_seqdb___pyx_k132___pyx_n_seqlist___pyx_k123___pyx_n_sequence___pyx_k43___pyx_n_setrlimit___pyx_k120___pyx_n_sort___pyx_k76___pyx_n_sourceDB___pyx_k124___pyx_n_sourceOnly___pyx_k77___pyx_n_sourcePath___pyx_k54___pyx_n_split___pyx_k82___pyx_n_splitLPOintervals___pyx_k175___pyx_n_start___pyx_k56___pyx_n_startswith___pyx_k244___pyx_n_stop___pyx_k57___pyx_n_string___pyx_k191___pyx_n_strip___pyx_k152___pyx_n_sys___pyx_k207___pyx_n_targetDB___pyx_k125___pyx_n_target_start___pyx_k52___pyx_n_types___pyx_k72___pyx_n_w___pyx_k103___pyx_n_warn___pyx_k187___pyx_n_wb___pyx_n_worldbase___pyx_k237___pyx_n_write___pyx_k202___pyx_n_write_binaries___pyx_k109___pyx_n_xmlrpc___pyx_k138___pyx_k3p___pyx_k3___pyx_k5p___pyx_k5___pyx_k7p___pyx_k7___pyx_k8p___pyx_k8___pyx_k11p___pyx_k11___pyx_k13p___pyx_k13___pyx_k14p___pyx_k14___pyx_k15p___pyx_k15___pyx_k17p___pyx_k17___pyx_k26p___pyx_k26___pyx_k27p___pyx_k27___pyx_k35p___pyx_k35___pyx_k47p___pyx_k47___pyx_k53p___pyx_k53___pyx_k83p___pyx_k83___pyx_k86p___pyx_k86___pyx_k88p___pyx_k88___pyx_k89p___pyx_k89___pyx_k90p___pyx_k90___pyx_k99p___pyx_k99___pyx_k104p___pyx_k104___pyx_k106p___pyx_k106___pyx_k107p___pyx_k107___pyx_k113p___pyx_k113___pyx_k114p___pyx_k114___pyx_k126p___pyx_k126___pyx_k139p___pyx_k139___pyx_k144p___pyx_k144___pyx_k149p___pyx_k149___pyx_k153p___pyx_k153___pyx_k154p___pyx_k154___pyx_k156p___pyx_k156___pyx_k160p___pyx_k160___pyx_k165p___pyx_k165___pyx_k168p___pyx_k168___pyx_k171p___pyx_k171___pyx_k174p___pyx_k174___pyx_k176p___pyx_k176___pyx_k177p___pyx_k177___pyx_k180p___pyx_k180___pyx_k182p___pyx_k182___pyx_k183p___pyx_k183___pyx_k185p___pyx_k185___pyx_k186p___pyx_k186___pyx_k188p___pyx_k188___pyx_k192p___pyx_k192___pyx_k193p___pyx_k193___pyx_k194p___pyx_k194___pyx_k196p___pyx_k196___pyx_k197p___pyx_k197___pyx_k198p___pyx_k198___pyx_k199p___pyx_k199___pyx_k203p___pyx_k203___pyx_k206p___pyx_k206___pyx_k209p___pyx_k209___pyx_k211p___pyx_k211___pyx_k213p___pyx_k213___pyx_k214p___pyx_k214___pyx_k216p___pyx_k216___pyx_k221p___pyx_k221___pyx_k224p___pyx_k224___pyx_k225p___pyx_k225___pyx_k229p___pyx_k229___pyx_k230p___pyx_k230___pyx_k232p___pyx_k232___pyx_k233p___pyx_k233___pyx_k235p___pyx_k235___pyx_k239p___pyx_k239___pyx_k241p___pyx_k241___pyx_k246p___pyx_k246___pyx_k247p___pyx_k247___pyx_k248p___pyx_k248___pyx_methods___pyx_f_4pygr_11cnestedlist_advanceStartStop___pyx_f_4pygr_11cnestedlist_dump_textfile___pyx_doc_4pygr_11cnestedlist_dump_textfile___pyx_f_4pygr_11cnestedlist_textfile_to_binaries___pyx_doc_4pygr_11cnestedlist_textfile_to_binaries___pyx_k243___pyx_k240___pyx_k220___pyx_k231___pyx_k218___pyx_k228___pyx_k227___pyx_k226___pyx_k223___pyx_filenames__pyx_f_4pygr_11cnestedlist_18IntervalDBIterator___iter__:f(0,2)__pyx_v_self:p(0,2)void:t(0,1):t(0,2)=*(0,3)PyObject:t(0,3)=(0,4)_object:T(0,4)=s8ob_refcnt:(0,5),0,32;ob_type:(0,6),32,32;;int:t(0,5)=r(0,5);-2147483648;2147483647;:t(0,6)=*(0,7)_typeobject:T(0,7)=s192ob_refcnt:(0,5),0,32;ob_type:(0,6),32,32;ob_size:(0,5),64,32;tp_name:(0,8),96,32;tp_basicsize:(0,5),128,32;tp_itemsize:(0,5),160,32;tp_dealloc:(0,9),192,32;tp_print:(0,11),224,32;tp_getattr:(0,13),256,32;tp_setattr:(0,15),288,32;tp_compare:(0,17),320,32;tp_repr:(0,19),352,32;tp_as_number:(0,21),384,32;tp_as_sequence:(0,22),416,32;tp_as_mapping:(0,23),448,32;tp_hash:(0,24),480,32;tp_call:(0,26),512,32;tp_str:(0,19),544,32;tp_getattro:(0,28),576,32;tp_setattro:(0,30),608,32;tp_as_buffer:(0,32),640,32;tp_flags:(0,33),672,32;tp_doc:(0,8),704,32;tp_traverse:(0,34),736,32;tp_clear:(0,36),768,32;tp_richcompare:(0,38),800,32;tp_weaklistoffset:(0,33),832,32;tp_iter:(0,40),864,32;tp_iternext:(0,41),896,32;tp_methods:(0,42),928,32;tp_members:(0,43),960,32;tp_getset:(0,44),992,32;tp_base:(0,6),1024,32;tp_dict:(0,2),1056,32;tp_descr_get:(0,45),1088,32;tp_descr_set:(0,46),1120,32;tp_dictoffset:(0,33),1152,32;tp_init:(0,47),1184,32;tp_alloc:(0,48),1216,32;tp_new:(0,50),1248,32;tp_free:(0,52),1280,32;tp_is_gc:(0,36),1312,32;tp_bases:(0,2),1344,32;tp_mro:(0,2),1376,32;tp_cache:(0,2),1408,32;tp_subclasses:(0,2),1440,32;tp_weaklist:(0,2),1472,32;tp_del:(0,9),1504,32;;:t(0,8)=*(0,54):t(0,10)=*(0,55)destructor:t(0,9)=(0,10):t(0,12)=*(0,56)printfunc:t(0,11)=(0,12):t(0,14)=*(0,57)getattrfunc:t(0,13)=(0,14):t(0,16)=*(0,58)setattrfunc:t(0,15)=(0,16):t(0,18)=*(0,59)cmpfunc:t(0,17)=(0,18):t(0,20)=*(0,60)reprfunc:t(0,19)=(0,20):t(0,21)=*(0,61):t(0,22)=*(0,62):t(0,23)=*(0,63):t(0,25)=*(0,64)hashfunc:t(0,24)=(0,25):t(0,27)=*(0,65)ternaryfunc:t(0,26)=(0,27):t(0,29)=*(0,66)getattrofunc:t(0,28)=(0,29):t(0,31)=*(0,67)setattrofunc:t(0,30)=(0,31):t(0,32)=*(0,68)long int:t(0,33)=r(0,33);-2147483648;2147483647;:t(0,35)=*(0,69)traverseproc:t(0,34)=(0,35):t(0,37)=*(0,70)inquiry:t(0,36)=(0,37):t(0,39)=*(0,71)richcmpfunc:t(0,38)=(0,39)getiterfunc:t(0,40)=(0,20)iternextfunc:t(0,41)=(0,20):t(0,42)=*(0,72):t(0,43)=*(0,73):t(0,44)=*(0,74)descrgetfunc:t(0,45)=(0,27)descrsetfunc:t(0,46)=(0,31)initproc:t(0,47)=(0,31):t(0,49)=*(0,75)allocfunc:t(0,48)=(0,49):t(0,51)=*(0,76)newfunc:t(0,50)=(0,51):t(0,53)=*(0,77)freefunc:t(0,52)=(0,53)char:t(0,54)=r(0,54);0;127;:t(0,55)=f(0,1):t(0,56)=f(0,5):t(0,57)=f(0,2):t(0,58)=f(0,5):t(0,59)=f(0,5):t(0,60)=f(0,2)PyNumberMethods:t(0,61)=(0,78)PySequenceMethods:t(0,62)=(0,79)PyMappingMethods:t(0,63)=(0,80):t(0,64)=f(0,33):t(0,65)=f(0,2):t(0,66)=f(0,2):t(0,67)=f(0,5)PyBufferProcs:t(0,68)=(0,81):t(0,69)=f(0,5):t(0,70)=f(0,5):t(0,71)=f(0,2)PyMethodDef:T(0,72)=s16ml_name:(0,8),0,32;ml_meth:(0,82),32,32;ml_flags:(0,5),64,32;ml_doc:(0,8),96,32;;PyMemberDef:T(0,73)=s20name:(0,8),0,32;type:(0,5),32,32;offset:(0,5),64,32;flags:(0,5),96,32;doc:(0,8),128,32;;PyGetSetDef:T(0,74)=s20name:(0,8),0,32;get:(0,83),32,32;set:(0,85),64,32;doc:(0,8),96,32;closure:(0,87),128,32;;:t(0,75)=f(0,2):t(0,76)=f(0,2):t(0,77)=f(0,1):T(0,78)=s152nb_add:(0,88),0,32;nb_subtract:(0,88),32,32;nb_multiply:(0,88),64,32;nb_divide:(0,88),96,32;nb_remainder:(0,88),128,32;nb_divmod:(0,88),160,32;nb_power:(0,26),192,32;nb_negative:(0,89),224,32;nb_positive:(0,89),256,32;nb_absolute:(0,89),288,32;nb_nonzero:(0,36),320,32;nb_invert:(0,89),352,32;nb_lshift:(0,88),384,32;nb_rshift:(0,88),416,32;nb_and:(0,88),448,32;nb_xor:(0,88),480,32;nb_or:(0,88),512,32;nb_coerce:(0,90),544,32;nb_int:(0,89),576,32;nb_long:(0,89),608,32;nb_float:(0,89),640,32;nb_oct:(0,89),672,32;nb_hex:(0,89),704,32;nb_inplace_add:(0,88),736,32;nb_inplace_subtract:(0,88),768,32;nb_inplace_multiply:(0,88),800,32;nb_inplace_divide:(0,88),832,32;nb_inplace_remainder:(0,88),864,32;nb_inplace_power:(0,26),896,32;nb_inplace_lshift:(0,88),928,32;nb_inplace_rshift:(0,88),960,32;nb_inplace_and:(0,88),992,32;nb_inplace_xor:(0,88),1024,32;nb_inplace_or:(0,88),1056,32;nb_floor_divide:(0,88),1088,32;nb_true_divide:(0,88),1120,32;nb_inplace_floor_divide:(0,88),1152,32;nb_inplace_true_divide:(0,88),1184,32;;:T(0,79)=s40sq_length:(0,36),0,32;sq_concat:(0,88),32,32;sq_repeat:(0,92),64,32;sq_item:(0,92),96,32;sq_slice:(0,94),128,32;sq_ass_item:(0,96),160,32;sq_ass_slice:(0,98),192,32;sq_contains:(0,100),224,32;sq_inplace_concat:(0,88),256,32;sq_inplace_repeat:(0,92),288,32;;:T(0,80)=s12mp_length:(0,36),0,32;mp_subscript:(0,88),32,32;mp_ass_subscript:(0,101),64,32;;:T(0,81)=s16bf_getreadbuffer:(0,102),0,32;bf_getwritebuffer:(0,104),32,32;bf_getsegcount:(0,105),64,32;bf_getcharbuffer:(0,107),96,32;;PyCFunction:t(0,82)=(0,29):t(0,84)=*(0,109)getter:t(0,83)=(0,84):t(0,86)=*(0,110)setter:t(0,85)=(0,86):t(0,87)=*(0,1)binaryfunc:t(0,88)=(0,29)unaryfunc:t(0,89)=(0,20):t(0,91)=*(0,111)coercion:t(0,90)=(0,91):t(0,93)=*(0,112)intargfunc:t(0,92)=(0,93):t(0,95)=*(0,113)intintargfunc:t(0,94)=(0,95):t(0,97)=*(0,114)intobjargproc:t(0,96)=(0,97):t(0,99)=*(0,115)intintobjargproc:t(0,98)=(0,99)objobjproc:t(0,100)=(0,18)objobjargproc:t(0,101)=(0,31):t(0,103)=*(0,116)getreadbufferproc:t(0,102)=(0,103)getwritebufferproc:t(0,104)=(0,103):t(0,106)=*(0,117)getsegcountproc:t(0,105)=(0,106):t(0,108)=*(0,118)getcharbufferproc:t(0,107)=(0,108):t(0,109)=f(0,2):t(0,110)=f(0,5):t(0,111)=f(0,5):t(0,112)=f(0,2):t(0,113)=f(0,2):t(0,114)=f(0,5):t(0,115)=f(0,5):t(0,116)=f(0,5):t(0,117)=f(0,5):t(0,118)=f(0,5)__pyx_v_self:r(0,2)___pyx_argnames.8832__pyx_f_4pygr_11cnestedlist_10IntervalDB_close:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_r:r(0,2)__pyx_argnames:V(0,119):t(0,119)=ar(0,120);0;0;(0,8)long unsigned int:t(0,120)=r(0,120);0;037777777777;__pyx_v_self:r(0,2)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator_reset__pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator_reset:f(0,5)__pyx_v_self:p(0,121):t(0,121)=*(0,122)__pyx_obj_4pygr_11cnestedlist_IntervalFileDBIterator:T(0,122)=s52ob_refcnt:(0,5),0,32;ob_type:(0,6),32,32;__pyx_vtab:(0,123),64,32;it:(0,124),96,32;it_alloc:(0,124),128,32;im_buf:(0,125),160,32;ihit:(0,5),192,32;nhit:(0,5),224,32;start:(0,5),256,32;end:(0,5),288,32;nbuf:(0,5),320,32;db:(0,126),352,32;idb:(0,127),384,32;;:t(0,123)=*(0,128):t(0,124)=*(0,129):t(0,125)=*(0,130):t(0,126)=*(0,131):t(0,127)=*(0,132)__pyx_vtabstruct_4pygr_11cnestedlist_IntervalFileDBIterator:T(0,128)=s36restart:(0,133),0,32;reset:(0,134),32,32;cnext:(0,135),64,32;extend:(0,136),96,32;saveInterval:(0,137),128,32;nextBlock:(0,135),160,32;getIntervalMap:(0,138),192,32;loadAll:(0,134),224,32;copy:(0,139),256,32;;IntervalIterator:t(0,129)=(0,140)IntervalMap:t(0,130)=(0,141)__pyx_obj_4pygr_11cnestedlist_IntervalFileDB:T(0,131)=s12ob_refcnt:(0,5),0,32;ob_type:(0,6),32,32;db:(0,142),64,32;;__pyx_obj_4pygr_11cnestedlist_IntervalDB:T(0,132)=s28ob_refcnt:(0,5),0,32;ob_type:(0,6),32,32;n:(0,5),64,32;ntop:(0,5),96,32;nlists:(0,5),128,32;im:(0,125),160,32;subheader:(0,143),192,32;;:t(0,133)=*(0,144):t(0,134)=*(0,145):t(0,135)=*(0,146):t(0,136)=*(0,147):t(0,137)=*(0,148):t(0,138)=*(0,149):t(0,139)=*(0,150)IntervalIterator_S:T(0,140)=s32i:(0,5),0,32;n:(0,5),32,32;nii:(0,5),64,32;ntop:(0,5),96,32;i_div:(0,5),128,32;im:(0,125),160,32;up:(0,151),192,32;down:(0,151),224,32;;:T(0,141)=s24start:(0,5),0,32;end:(0,5),32,32;target_id:(0,5),64,32;target_start:(0,5),96,32;target_end:(0,5),128,32;sublist:(0,5),160,32;;:t(0,142)=*(0,152):t(0,143)=*(0,153):t(0,144)=f(0,5):t(0,145)=f(0,5):t(0,146)=f(0,5):t(0,147)=f(0,5):t(0,148)=f(0,5):t(0,149)=f(0,125):t(0,150)=f(0,5):t(0,151)=*(0,140)IntervalDBFile:t(0,152)=(0,154)SublistHeader:t(0,153)=(0,155):T(0,154)=s48n:(0,5),0,32;ntop:(0,5),32,32;nlists:(0,5),64,32;div:(0,5),96,32;nii:(0,5),128,32;ii:(0,156),160,32;subheader:(0,143),192,32;subheader_file:(0,157)=xsSubheaderFile:,224,128;ifile_idb:(0,159),352,32;;:T(0,155)=s8start:(0,5),0,32;len:(0,5),32,32;;:t(0,156)=*(0,160):T(0,158)=s16subheader:(0,143),0,32;nblock:(0,5),32,32;start:(0,5),64,32;ifile:(0,159),96,32;;SubheaderFile:t(0,157)=(0,158):t(0,159)=*(0,161)IntervalIndex:t(0,160)=(0,162)FILE:t(0,161)=(0,163):T(0,162)=s8start:(0,5),0,32;end:(0,5),32,32;;__sFILE:T(0,163)=s88_p:(0,164),0,32;_r:(0,5),32,32;_w:(0,5),64,32;_flags:(0,165),96,16;_file:(0,165),112,16;_bf:(0,166),128,64;_lbfsize:(0,5),192,32;_cookie:(0,87),224,32;_close:(0,167),256,32;_read:(0,168),288,32;_seek:(0,169),320,32;_write:(0,170),352,32;_ub:(0,166),384,64;_extra:(0,171),448,32;_ur:(0,5),480,32;_ubuf:(0,172),512,24;_nbuf:(0,173),536,8;_lb:(0,166),544,64;_blksize:(0,5),608,32;_offset:(0,174),640,64;;:t(0,164)=*(0,176)short int:t(0,165)=@s16;r(0,165);-32768;32767;__sbuf:T(0,166)=s8_base:(0,164),0,32;_size:(0,5),32,32;;:t(0,167)=*(0,177):t(0,168)=*(0,178):t(0,169)=*(0,179):t(0,170)=*(0,180):t(0,171)=*(0,181):t(0,172)=ar(0,120);0;2;(0,176):t(0,173)=ar(0,120);0;0;(0,176)__darwin_off_t:t(0,175)=(0,182)fpos_t:t(0,174)=(0,175)unsigned char:t(0,176)=@s8;r(0,176);0;255;:t(0,177)=f(0,5):t(0,178)=f(0,5):t(0,179)=f(0,174):t(0,180)=f(0,5):t(0,181)=xs__sFILEX:__int64_t:t(0,182)=(0,183)long long int:t(0,183)=@s64;r(0,183);01000000000000000000000;0777777777777777777777;__pyx_v_self:r(0,121)___pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator_saveInterval__pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator_saveInterval:f(0,5)__pyx_v_self:p(0,121)__pyx_v_start:p(0,5)__pyx_v_end:p(0,5)__pyx_v_target_id:p(0,5)__pyx_v_target_start:p(0,5)__pyx_v_target_end:p(0,5)int:t(0,5)__pyx_v_self:r(0,121)__pyx_v_start:r(0,5)__pyx_v_end:r(0,5)__pyx_v_target_id:r(0,5)__pyx_v_target_start:r(0,5)__pyx_v_target_end:r(0,5)___pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator_getIntervalMap__pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator_getIntervalMap:f(0,125)__pyx_v_self:p(0,121)__pyx_v_im:r(0,125)__pyx_r:r(0,125)__pyx_v_self:r(0,121)__pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator___iter__:f(0,2)__pyx_v_self:p(0,2)__pyx_v_self:r(0,2)___pyx_argnames.9855__pyx_f_4pygr_11cnestedlist_14IntervalFileDB_close:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_r:r(0,2)__pyx_argnames:V(0,184):t(0,184)=ar(0,120);0;0;(0,8)__pyx_v_self:r(0,2)__pyx_args:r(0,2)__pyx_kwds:r(0,2)__pyx_f_4pygr_11cnestedlist_10NLMSASlice___len__:f(0,185)__pyx_v_self:p(0,2)__pyx_r:r(0,185)Py_ssize_t:t(0,185)=(0,5)__pyx_v_self:r(0,2)__pyx_f_4pygr_11cnestedlist_18NLMSASliceIterator___iter__:f(0,2)__pyx_v_self:p(0,2)__pyx_v_self:r(0,2)__pyx_f_4pygr_11cnestedlist_9NLMSANode___len__:f(0,185)__pyx_v_self:p(0,2)__pyx_r:r(0,185)__pyx_v_self:r(0,2)___pyx_f_4pygr_11cnestedlist_9NLMSANode_check_edge__pyx_f_4pygr_11cnestedlist_9NLMSANode_check_edge:f(0,5)__pyx_v_self:p(0,186)__pyx_v_iseq:p(0,5)__pyx_v_ipos:p(0,5)__pyx_v_i:r(0,5):t(0,186)=*(0,187)__pyx_obj_4pygr_11cnestedlist_NLMSANode:T(0,187)=s36ob_refcnt:(0,5),0,32;ob_type:(0,6),32,32;__pyx_vtab:(0,188),64,32;id:(0,5),96,32;ipos:(0,5),128,32;istart:(0,5),160,32;istop:(0,5),192,32;n:(0,5),224,32;nlmsaSlice:(0,189),256,32;;:t(0,188)=*(0,190):t(0,189)=*(0,191)__pyx_vtabstruct_4pygr_11cnestedlist_NLMSANode:T(0,190)=s4check_edge:(0,192),0,32;;__pyx_obj_4pygr_11cnestedlist_NLMSASlice:T(0,191)=s64ob_refcnt:(0,5),0,32;ob_type:(0,6),32,32;__pyx_vtab:(0,193),64,32;start:(0,5),96,32;stop:(0,5),128,32;id:(0,5),160,32;n:(0,5),192,32;nseqBounds:(0,5),224,32;nrealseq:(0,5),256,32;offset:(0,5),288,32;im:(0,125),320,32;seqBounds:(0,125),352,32;nlmsaSequence:(0,194),384,32;nlmsa:(0,195),416,32;seq:(0,2),448,32;weakestLink:(0,2),480,32;;:t(0,192)=*(0,196):t(0,193)=*(0,197):t(0,194)=*(0,198):t(0,195)=*(0,199):t(0,196)=f(0,5)__pyx_vtabstruct_4pygr_11cnestedlist_NLMSASlice:T(0,197)=s8findSeqBounds:(0,200),0,32;get_seq_interval:(0,201),32,32;;__pyx_obj_4pygr_11cnestedlist_NLMSASequence:T(0,198)=s68ob_refcnt:(0,5),0,32;ob_type:(0,6),32,32;__pyx_vtab:(0,202),64,32;id:(0,5),96,32;length:(0,5),128,32;nbuild:(0,5),160,32;is_lpo:(0,5),192,32;is_union:(0,5),224,32;offset:(0,2),256,32;seq:(0,2),288,32;name:(0,2),320,32;db:(0,126),352,32;idb:(0,127),384,32;build_ifile:(0,159),416,32;filestem:(0,2),448,32;nlmsaLetters:(0,195),480,32;buildList:(0,2),512,32;;__pyx_obj_4pygr_11cnestedlist_NLMSA:T(0,199)=s88ob_refcnt:(0,5),0,32;ob_type:(0,6),32,32;__pyx_vtab:(0,203),64,32;pathstem:(0,2),96,32;seqs:(0,2),128,32;seqlist:(0,2),160,32;seqDict:(0,2),192,32;currentUnion:(0,194),224,32;do_build:(0,5),256,32;lpoList:(0,2),288,32;maxLPOcoord:(0,2),320,32;lpo_id:(0,5),352,32;maxlen:(0,5),384,32;inlmsa:(0,5),416,32;is_bidirectional:(0,5),448,32;pairwiseMode:(0,5),480,32;in_memory_mode:(0,5),512,32;_persistent_id:(0,2),544,32;_ignoreShadowAttr:(0,2),576,32;__doc__:(0,2),608,32;_saveLocalBuild:(0,2),640,32;inverseDB:(0,2),672,32;;:t(0,200)=*(0,204):t(0,201)=*(0,205):t(0,202)=*(0,206):t(0,203)=*(0,207):t(0,204)=f(0,5):t(0,205)=f(0,2)__pyx_vtabstruct_4pygr_11cnestedlist_NLMSASequence:T(0,206)=s4saveInterval:(0,208),0,32;;__pyx_vtabstruct_4pygr_11cnestedlist_NLMSA:T(0,207)=s12free_seqidmap:(0,209),0,32;save_nbuild:(0,210),32,32;add_seqidmap_to_union:(0,211),64,32;;:t(0,208)=*(0,212):t(0,209)=*(0,213):t(0,210)=*(0,214):t(0,211)=*(0,215):t(0,212)=f(0,5):t(0,213)=f(0,1):t(0,214)=f(0,1):t(0,215)=f(0,194)__pyx_r:r(0,5)__pyx_1:(0,5)__pyx_v_self:r(0,186)___pyx_f_4pygr_11cnestedlist_5NLMSA_free_seqidmap__pyx_f_4pygr_11cnestedlist_5NLMSA_free_seqidmap:f(0,1)__pyx_v_self:p(0,195)__pyx_v_nseq0:p(0,5)__pyx_v_seqidmap:p(0,216)__pyx_v_i:r(0,5):t(0,216)=*(0,217)SeqIDMap:t(0,217)=(0,218):T(0,218)=s20id:(0,8),0,32;length:(0,5),32,32;ns_id:(0,5),64,32;offset:(0,5),96,32;nlmsa_id:(0,5),128,32;;__pyx_v_self:(0,195)__pyx_v_nseq0:(0,5)__pyx_v_seqidmap:(0,216)__pyx_tp_dealloc_4pygr_11cnestedlist_IntervalDB:f(0,1)o:p(0,2)o:r(0,2)etype:(0,2)eval:(0,2)etb:(0,2)etype:(0,2)eval:(0,2)etb:(0,2)__pyx_tp_dealloc_4pygr_11cnestedlist_IntervalDBIterator:f(0,1)o:p(0,2)__pyx_obj_4pygr_11cnestedlist_IntervalDBIterator:T(0,219)=s24616ob_refcnt:(0,5),0,32;ob_type:(0,6),32,32;__pyx_vtab:(0,220),64,32;it:(0,124),96,32;it_alloc:(0,124),128,32;im_buf:(0,221),160,196608;ihit:(0,5),196768,32;nhit:(0,5),196800,32;start:(0,5),196832,32;end:(0,5),196864,32;db:(0,127),196896,32;;:t(0,220)=*(0,222):t(0,221)=ar(0,120);0;1023;(0,130)__pyx_vtabstruct_4pygr_11cnestedlist_IntervalDBIterator:T(0,222)=s4cnext:(0,223),0,32;;:t(0,223)=*(0,224):t(0,224)=f(0,5)o:r(0,2)etype:(0,2)eval:(0,2)etb:(0,2)etype:(0,2)eval:(0,2)etb:(0,2)__pyx_tp_traverse_4pygr_11cnestedlist_IntervalDBIterator:f(0,5)o:p(0,2)v:p(0,225)a:p(0,87)e:r(0,5):t(0,226)=*(0,227)visitproc:t(0,225)=(0,226):t(0,227)=f(0,5)o:r(0,2)__pyx_tp_clear_4pygr_11cnestedlist_IntervalDBIterator:f(0,5)o:p(0,2)o:r(0,2)__pyx_tp_dealloc_4pygr_11cnestedlist_IntervalFileDB:f(0,1)o:p(0,2)o:r(0,2)etype:(0,2)eval:(0,2)etb:(0,2)etype:(0,2)eval:(0,2)etb:(0,2)___pyx_vtabptr_4pygr_11cnestedlist_NLMSASequence__pyx_tp_new_4pygr_11cnestedlist_NLMSASequence:f(0,2)t:p(0,228)a:p(0,2)k:p(0,2):t(0,228)=*(0,229)PyTypeObject:t(0,229)=(0,7)o:r(0,2)t:r(0,228)__pyx_tp_dealloc_4pygr_11cnestedlist_NLMSASequence:f(0,1)o:p(0,2)o:r(0,2)etype:(0,2)eval:(0,2)etb:(0,2)etype:(0,2)eval:(0,2)etb:(0,2)__pyx_tp_traverse_4pygr_11cnestedlist_NLMSASequence:f(0,5)o:p(0,2)v:p(0,225)a:p(0,87)e:r(0,5)o:r(0,2)a:r(0,87)__pyx_tp_clear_4pygr_11cnestedlist_NLMSASequence:f(0,5)o:p(0,2)t:r(0,2)o:r(0,2)__pyx_sq_item_4pygr_11cnestedlist_NLMSASequence:f(0,2)o:p(0,2)i:p(0,185)r:r(0,2)x:r(0,2)o:r(0,2)i:r(0,185)__pyx_tp_dealloc_4pygr_11cnestedlist_IntervalFileDBIterator:f(0,1)o:p(0,2)o:r(0,2)etype:(0,2)eval:(0,2)etb:(0,2)etype:(0,2)eval:(0,2)etb:(0,2)__pyx_tp_traverse_4pygr_11cnestedlist_IntervalFileDBIterator:f(0,5)o:p(0,2)v:p(0,225)a:p(0,87)e:r(0,5)o:r(0,2)a:r(0,87)__pyx_tp_clear_4pygr_11cnestedlist_IntervalFileDBIterator:f(0,5)o:p(0,2)o:r(0,2)___pyx_vtabptr_4pygr_11cnestedlist_NLMSA__pyx_tp_new_4pygr_11cnestedlist_NLMSA:f(0,2)t:p(0,228)a:p(0,2)k:p(0,2)o:r(0,2)t:r(0,228)__pyx_tp_dealloc_4pygr_11cnestedlist_NLMSA:f(0,1)o:p(0,2)o:r(0,2)__pyx_tp_traverse_4pygr_11cnestedlist_NLMSA:f(0,5)o:p(0,2)v:p(0,225)a:p(0,87)e:r(0,5)o:r(0,2)a:r(0,87)__pyx_tp_clear_4pygr_11cnestedlist_NLMSA:f(0,5)o:p(0,2)t:r(0,2)o:r(0,2)__pyx_sq_item_4pygr_11cnestedlist_NLMSA:f(0,2)o:p(0,2)i:p(0,185)r:r(0,2)x:r(0,2)o:r(0,2)i:r(0,185)__pyx_tp_dealloc_4pygr_11cnestedlist_NLMSASlice:f(0,1)o:p(0,2)o:r(0,2)etype:(0,2)eval:(0,2)etb:(0,2)etype:(0,2)eval:(0,2)etb:(0,2)__pyx_tp_traverse_4pygr_11cnestedlist_NLMSASlice:f(0,5)o:p(0,2)v:p(0,225)a:p(0,87)e:r(0,5)o:r(0,2)a:r(0,87)__pyx_tp_clear_4pygr_11cnestedlist_NLMSASlice:f(0,5)o:p(0,2)o:r(0,2)__pyx_sq_item_4pygr_11cnestedlist_NLMSASlice:f(0,2)o:p(0,2)i:p(0,185)r:r(0,2)x:r(0,2)o:r(0,2)i:r(0,185)__pyx_tp_dealloc_4pygr_11cnestedlist_NLMSASliceLetters:f(0,1)o:p(0,2)__pyx_obj_4pygr_11cnestedlist_NLMSASliceLetters:T(0,230)=s12ob_refcnt:(0,5),0,32;ob_type:(0,6),32,32;nlmsaSlice:(0,189),64,32;;o:r(0,2)__pyx_tp_traverse_4pygr_11cnestedlist_NLMSASliceLetters:f(0,5)o:p(0,2)v:p(0,225)a:p(0,87)e:r(0,5)o:r(0,2)__pyx_tp_clear_4pygr_11cnestedlist_NLMSASliceLetters:f(0,5)o:p(0,2)o:r(0,2)__pyx_sq_item_4pygr_11cnestedlist_NLMSASliceLetters:f(0,2)o:p(0,2)i:p(0,185)r:r(0,2)x:r(0,2)o:r(0,2)i:r(0,185)__pyx_tp_dealloc_4pygr_11cnestedlist_NLMSANode:f(0,1)o:p(0,2)o:r(0,2)__pyx_tp_traverse_4pygr_11cnestedlist_NLMSANode:f(0,5)o:p(0,2)v:p(0,225)a:p(0,87)e:r(0,5)o:r(0,2)__pyx_tp_clear_4pygr_11cnestedlist_NLMSANode:f(0,5)o:p(0,2)o:r(0,2)__pyx_sq_item_4pygr_11cnestedlist_NLMSANode:f(0,2)o:p(0,2)i:p(0,185)r:r(0,2)x:r(0,2)o:r(0,2)i:r(0,185)__pyx_tp_dealloc_4pygr_11cnestedlist_NLMSASliceIterator:f(0,1)o:p(0,2)__pyx_obj_4pygr_11cnestedlist_NLMSASliceIterator:T(0,231)=s24ob_refcnt:(0,5),0,32;ob_type:(0,6),32,32;ipos:(0,5),64,32;istart:(0,5),96,32;istop:(0,5),128,32;nlmsaSlice:(0,189),160,32;;o:r(0,2)__pyx_tp_traverse_4pygr_11cnestedlist_NLMSASliceIterator:f(0,5)o:p(0,2)v:p(0,225)a:p(0,87)e:r(0,5)o:r(0,2)__pyx_tp_clear_4pygr_11cnestedlist_NLMSASliceIterator:f(0,5)o:p(0,2)o:r(0,2)___Pyx_Raise__Pyx_Raise:f(0,1)type:p(0,2)value:P(0,2)tb:P(0,2)___Pyx_GetStarArgs__Pyx_GetStarArgs:f(0,5)args:p(0,232)kwds:p(0,232)kwd_list:p(0,233)nargs:p(0,185)args2:p(0,232)kwds2:p(0,232)rqd_kwds:p(0,8)x:r(0,2)args1:(0,2)kwds1:(0,2)p:r(0,233)char:t(0,54):t(0,232)=*(0,2):t(0,233)=*(0,8)nargs:r(0,185)___Pyx_GetException__Pyx_GetException:f(0,5)type:P(0,232)value:p(0,232)tb:p(0,232)tstate:r(0,234):t(0,234)=*(0,235)PyThreadState:t(0,235)=(0,236)_ts:T(0,236)=s84next:(0,237),0,32;interp:(0,238),32,32;frame:(0,239),64,32;recursion_depth:(0,5),96,32;tracing:(0,5),128,32;use_tracing:(0,5),160,32;c_profilefunc:(0,240),192,32;c_tracefunc:(0,240),224,32;c_profileobj:(0,2),256,32;c_traceobj:(0,2),288,32;curexc_type:(0,2),320,32;curexc_value:(0,2),352,32;curexc_traceback:(0,2),384,32;exc_type:(0,2),416,32;exc_value:(0,2),448,32;exc_traceback:(0,2),480,32;dict:(0,2),512,32;tick_counter:(0,5),544,32;gilstate_counter:(0,5),576,32;async_exc:(0,2),608,32;thread_id:(0,33),640,32;;:t(0,237)=*(0,236):t(0,238)=*(0,242):t(0,239)=*(0,243):t(0,241)=*(0,244)Py_tracefunc:t(0,240)=(0,241)PyInterpreterState:t(0,242)=(0,245)_frame:T(0,243)=s336ob_refcnt:(0,5),0,32;ob_type:(0,6),32,32;ob_size:(0,5),64,32;f_back:(0,239),96,32;f_code:(0,246),128,32;f_builtins:(0,2),160,32;f_globals:(0,2),192,32;f_locals:(0,2),224,32;f_valuestack:(0,232),256,32;f_stacktop:(0,232),288,32;f_trace:(0,2),320,32;f_exc_type:(0,2),352,32;f_exc_value:(0,2),384,32;f_exc_traceback:(0,2),416,32;f_tstate:(0,234),448,32;f_lasti:(0,5),480,32;f_lineno:(0,5),512,32;f_restricted:(0,5),544,32;f_iblock:(0,5),576,32;f_blockstack:(0,247),608,1920;f_nlocals:(0,5),2528,32;f_ncells:(0,5),2560,32;f_nfreevars:(0,5),2592,32;f_stacksize:(0,5),2624,32;f_localsplus:(0,248),2656,32;;:t(0,244)=f(0,5)_is:T(0,245)=s36next:(0,249),0,32;tstate_head:(0,237),32,32;modules:(0,2),64,32;sysdict:(0,2),96,32;builtins:(0,2),128,32;codec_search_path:(0,2),160,32;codec_search_cache:(0,2),192,32;codec_error_registry:(0,2),224,32;dlopenflags:(0,5),256,32;;:t(0,246)=*(0,250):t(0,247)=ar(0,120);0;19;(0,251):t(0,248)=ar(0,120);0;0;(0,2):t(0,249)=*(0,245)PyCodeObject:t(0,250)=(0,252)PyTryBlock:t(0,251)=(0,253):T(0,252)=s64ob_refcnt:(0,5),0,32;ob_type:(0,6),32,32;co_argcount:(0,5),64,32;co_nlocals:(0,5),96,32;co_stacksize:(0,5),128,32;co_flags:(0,5),160,32;co_code:(0,2),192,32;co_consts:(0,2),224,32;co_names:(0,2),256,32;co_varnames:(0,2),288,32;co_freevars:(0,2),320,32;co_cellvars:(0,2),352,32;co_filename:(0,2),384,32;co_name:(0,2),416,32;co_firstlineno:(0,5),448,32;co_lnotab:(0,2),480,32;;:T(0,253)=s12b_type:(0,5),0,32;b_handler:(0,5),32,32;b_level:(0,5),64,32;;___Pyx_Import___pyx_b___pyx_m__Pyx_Import:f(0,2)name:p(0,2)from_list:P(0,2)__import__:r(0,2)empty_list:(0,2)module:r(0,2)global_dict:r(0,2)empty_dict:(0,2)list:(0,2)___Pyx_AddTraceback___pyx_filename___pyx_lineno__Pyx_AddTraceback:f(0,1)funcname:P(0,8)py_srcfile:(0,2)py_funcname:r(0,2)py_globals:(0,2)empty_tuple:r(0,2)empty_string:(0,2)py_code:(0,246)py_frame:(0,254):t(0,254)=*(0,255)PyFrameObject:t(0,255)=(0,243)___pyx_argnames.8754___pyx_d4___pyx_f__pyx_f_4pygr_11cnestedlist_10IntervalDB_write_binaries:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_filestem:(0,2)__pyx_v_div:(0,2)__pyx_v_err_msg:r(0,8)__pyx_r:r(0,2)__pyx_2:r(0,8)__pyx_3:(0,2)__pyx_4:r(0,2)__pyx_argnames:V(0,256):t(0,256)=ar(0,120);0;2;(0,8)__pyx_v_self:r(0,2)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.8697__pyx_f_4pygr_11cnestedlist_10IntervalDB_check_nonempty:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_msg:(0,2)__pyx_r:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_argnames:V(0,257):t(0,257)=ar(0,120);0;0;(0,8)__pyx_v_self:r(0,2)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.8598__pyx_f_4pygr_11cnestedlist_10IntervalDB_find_overlap_list:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_start:(0,5)__pyx_v_end:(0,5)__pyx_v_i:(0,5)__pyx_v_nhit:(0,5)__pyx_v_it:(0,124)__pyx_v_im_buf:(0,221)__pyx_v_l:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,124)__pyx_4:r(0,5)__pyx_5:r(0,2)__pyx_6:(0,2)__pyx_7:(0,2)__pyx_8:(0,2)__pyx_9:r(0,2)__pyx_argnames:V(0,258):t(0,258)=ar(0,120);0;2;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.8533__pyx_f_4pygr_11cnestedlist_10IntervalDB_find_overlap:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_start:(0,5)__pyx_v_end:(0,5)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_argnames:V(0,259):t(0,259)=ar(0,120);0;2;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.8437__pyx_f_4pygr_11cnestedlist_10IntervalDB_buildFromUnsortedFile:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_filename:(0,2)__pyx_v_n:(0,5)__pyx_v_kwargs:(0,2)__pyx_v_ifile:r(0,159)__pyx_v_i:(0,5)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:r(0,8)__pyx_5:r(0,125)__pyx_6:r(0,2)__pyx_argnames:V(0,260):t(0,260)=ar(0,120);0;2;(0,8)___pyx_argnames.8384___pyx_d3__pyx_f_4pygr_11cnestedlist_10IntervalDB_runBuildMethod:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_buildInPlace:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,5)__pyx_2:r(0,143)__pyx_3:r(0,143)__pyx_argnames:V(0,261):t(0,261)=ar(0,120);0;1;(0,8)__pyx_v_self:r(0,2)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.8164___pyx_d1___pyx_d2__pyx_tp_new_4pygr_11cnestedlist_IntervalDB:f(0,2)t:p(0,228)a:p(0,2)k:p(0,2)o:r(0,2)t:r(0,228)__pyx_kwds:(0,2)__pyx_args:(0,2)__pyx_v_filename:(0,2)__pyx_v_nsize:(0,2)__pyx_v_kwargs:(0,2)__pyx_v_ifile:(0,159)__pyx_v_msg:(0,2)__pyx_r:r(0,5)__pyx_1:(0,5)__pyx_3:r(0,8)__pyx_4:r(0,125)__pyx_5:(0,2)__pyx_6:r(0,2)__pyx_kwds:(0,2)__pyx_args:(0,2)__pyx_v_filename:(0,2)__pyx_v_nsize:(0,2)__pyx_v_kwargs:(0,2)__pyx_v_ifile:(0,159)__pyx_v_msg:(0,2)__pyx_r:r(0,5)__pyx_1:(0,5)__pyx_3:r(0,8)__pyx_4:r(0,125)__pyx_5:(0,2)__pyx_6:r(0,2)__pyx_kwds:(0,2)__pyx_args:(0,2)__pyx_v_filename:(0,2)__pyx_v_nsize:(0,2)__pyx_v_kwargs:(0,2)__pyx_v_ifile:(0,159)__pyx_v_msg:(0,2)__pyx_r:r(0,5)__pyx_1:(0,5)__pyx_3:r(0,8)__pyx_4:r(0,125)__pyx_5:(0,2)__pyx_6:r(0,2)__pyx_kwds:(0,2)__pyx_args:(0,2)__pyx_v_filename:(0,2)__pyx_v_nsize:(0,2)__pyx_v_kwargs:(0,2)__pyx_v_ifile:(0,159)__pyx_v_msg:(0,2)__pyx_r:r(0,5)__pyx_1:(0,5)__pyx_3:r(0,8)__pyx_4:r(0,125)__pyx_5:(0,2)__pyx_6:r(0,2)__pyx_kwds:(0,2)__pyx_args:(0,2)__pyx_v_filename:(0,2)__pyx_v_nsize:(0,2)__pyx_v_kwargs:(0,2)__pyx_v_ifile:(0,159)__pyx_v_msg:(0,2)__pyx_r:r(0,5)__pyx_1:(0,5)__pyx_3:r(0,8)__pyx_4:r(0,125)__pyx_5:(0,2)__pyx_6:r(0,2)___pyx_argnames.7978___pyx_vtabptr_4pygr_11cnestedlist_IntervalDBIterator__pyx_tp_new_4pygr_11cnestedlist_IntervalDBIterator:f(0,2)t:p(0,228)a:p(0,2)k:p(0,2)o:r(0,2)t:r(0,228)__pyx_v_start:(0,5)__pyx_v_end:(0,5)__pyx_v_db:(0,127)__pyx_r:r(0,5)__pyx_1:r(0,124)type:r(0,228)obj:(0,2)__pyx_v_start:(0,5)__pyx_v_end:(0,5)__pyx_v_db:(0,127)__pyx_r:r(0,5)__pyx_1:r(0,124)type:r(0,228)obj:(0,2)type:r(0,228)obj:(0,2)__pyx_f_4pygr_11cnestedlist_18IntervalDBIterator___next__:f(0,2)__pyx_v_self:p(0,2)__pyx_v_i:r(0,5)__pyx_r:r(0,2)__pyx_2:(0,2)__pyx_3:r(0,2)__pyx_4:(0,2)__pyx_5:(0,2)__pyx_6:r(0,2)__pyx_7:r(0,2)___pyx_argnames.9812__pyx_f_4pygr_11cnestedlist_14IntervalFileDB_check_nonempty:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_r:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_argnames:V(0,262):t(0,262)=ar(0,120);0;0;(0,8)__pyx_v_self:r(0,2)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.9709__pyx_f_4pygr_11cnestedlist_14IntervalFileDB_find_overlap_list:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_start:(0,5)__pyx_v_end:(0,5)__pyx_v_i:(0,5)__pyx_v_nhit:(0,5)__pyx_v_it:(0,124)__pyx_v_im_buf:(0,221)__pyx_v_l:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,124)__pyx_4:r(0,5)__pyx_5:r(0,2)__pyx_6:(0,2)__pyx_7:(0,2)__pyx_8:(0,2)__pyx_9:r(0,2)__pyx_argnames:V(0,263):t(0,263)=ar(0,120);0;2;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.9644__pyx_f_4pygr_11cnestedlist_14IntervalFileDB_find_overlap:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_start:(0,5)__pyx_v_end:(0,5)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_argnames:V(0,264):t(0,264)=ar(0,120);0;2;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.9591__pyx_f_4pygr_11cnestedlist_14IntervalFileDB_open:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_filestem:(0,2)__pyx_v_err_msg:(0,265)__pyx_r:r(0,2)__pyx_1:r(0,8):t(0,265)=ar(0,120);0;1023;(0,54)__pyx_2:r(0,142)__pyx_argnames:V(0,266):t(0,266)=ar(0,120);0;1;(0,8)__pyx_v_self:r(0,2)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.9525___pyx_d9___pyx_d10__pyx_tp_new_4pygr_11cnestedlist_IntervalFileDB:f(0,2)t:p(0,228)a:p(0,2)k:p(0,2)o:r(0,2)t:r(0,228)__pyx_v_filestem:(0,2)__pyx_v_mode:(0,2)__pyx_r:r(0,5)__pyx_1:(0,5)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_v_filestem:(0,2)__pyx_v_mode:(0,2)__pyx_r:r(0,5)__pyx_1:(0,5)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_v_filestem:(0,2)__pyx_v_mode:(0,2)__pyx_r:r(0,5)__pyx_1:(0,5)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_f_4pygr_11cnestedlist_13NLMSASequence___iadd__:f(0,2)__pyx_v_self:p(0,2)__pyx_v_seq:p(0,2)__pyx_v_x:r(0,2)__pyx_v_ns:r(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:r(0,5)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_5:r(0,185)__pyx_6:(0,2)__pyx_f_4pygr_11cnestedlist_13NLMSASequence___len__:f(0,185)__pyx_v_self:p(0,2)__pyx_r:r(0,185)__pyx_2:r(0,185)__pyx_v_self:r(0,2)___pyx_argnames.15625__pyx_f_4pygr_11cnestedlist_13NLMSASequence_buildInMemory:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_kwargs:(0,2)__pyx_v_n:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,185)__pyx_2:(0,2)__pyx_3:r(0,5)__pyx_4:(0,2)__pyx_5:(0,2)__pyx_6:r(0,2)__pyx_argnames:V(0,267):t(0,267)=ar(0,120);0;0;(0,8)___pyx_argnames.15498__pyx_f_4pygr_11cnestedlist_13NLMSASequence_buildFiles:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_kwargs:(0,2)__pyx_v_db:(0,127)__pyx_v_filename:(0,2)__pyx_v_os:(0,2)__pyx_r:r(0,2)__pyx_2:(0,2)__pyx_3:(0,2)__pyx_4:r(0,2)__pyx_argnames:V(0,268):t(0,268)=ar(0,120);0;0;(0,8)___pyx_argnames.15433__pyx_f_4pygr_11cnestedlist_13NLMSASequence_close:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_r:r(0,2)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_argnames:V(0,269):t(0,269)=ar(0,120);0;0;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.15378__pyx_f_4pygr_11cnestedlist_13NLMSASequence_forceLoad:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:(0,2)__pyx_argnames:V(0,270):t(0,270)=ar(0,120);0;0;(0,8)__pyx_v_self:r(0,2)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.9355__pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator_mergeSeq:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_i:(0,5)__pyx_v_j:r(0,5)__pyx_v_n:(0,5)__pyx_v_id:r(0,5)__pyx_r:r(0,2)__pyx_1:(0,5)__pyx_2:r(0,2)__pyx_argnames:V(0,271):t(0,271)=ar(0,120);0;0;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)__pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator___next__:f(0,2)__pyx_v_self:p(0,2)__pyx_v_i:r(0,5)__pyx_r:r(0,2)__pyx_2:(0,2)__pyx_3:r(0,2)__pyx_4:(0,2)__pyx_5:(0,2)__pyx_6:r(0,2)__pyx_7:r(0,2)__pyx_f_4pygr_11cnestedlist_5NLMSA___iadd__:f(0,2)__pyx_v_self:p(0,2)__pyx_v_seq:p(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_f_4pygr_11cnestedlist_5NLMSA___invert__:f(0,2)__pyx_v_self:p(0,2)__pyx_r:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_v_self:r(0,2)___pyx_argnames.17971__pyx_f_4pygr_11cnestedlist_5NLMSA_addAnnotation:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_a:(0,2)__pyx_v_ival:r(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_argnames:V(0,272):t(0,272)=ar(0,120);0;1;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.17346__pyx_f_4pygr_11cnestedlist_5NLMSA_nextID:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_nlmsaID:r(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_argnames:V(0,273):t(0,273)=ar(0,120);0;0;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.17213___pyx_d62___pyx_d63__pyx_f_4pygr_11cnestedlist_5NLMSA_newSequence:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_seq:(0,2)__pyx_v_is_union:(0,2)__pyx_v_ns:(0,194)__pyx_v_id:(0,2)__pyx_v_filestem:(0,2)__pyx_v_mode:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,5)__pyx_4:r(0,2)__pyx_argnames:V(0,274):t(0,274)=ar(0,120);0;2;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.16693__pyx_f_4pygr_11cnestedlist_5NLMSA___setstate__:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_state:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_argnames:V(0,275):t(0,275)=ar(0,120);0;1;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.16631__pyx_f_4pygr_11cnestedlist_5NLMSA___getstate__:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_r:r(0,2)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_4:(0,2)__pyx_argnames:V(0,276):t(0,276)=ar(0,120);0;0;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.16570__pyx_f_4pygr_11cnestedlist_5NLMSA___reduce__:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_classutil:r(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_4:(0,2)__pyx_argnames:V(0,277):t(0,277)=ar(0,120);0;0;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)__pyx_f_4pygr_11cnestedlist_5NLMSA___iter__:f(0,2)__pyx_v_self:p(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_mp_ass_subscript_4pygr_11cnestedlist_NLMSASlice:f(0,5)o:p(0,2)i:p(0,2)v:p(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)___pyx_argnames.13831__pyx_f_4pygr_11cnestedlist_10NLMSASlice_rawIvals:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_i:(0,5)__pyx_v_l:r(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:(0,5)__pyx_3:r(0,2)__pyx_4:r(0,2)__pyx_5:(0,2)__pyx_6:(0,2)__pyx_7:(0,2)__pyx_8:(0,2)__pyx_argnames:V(0,278):t(0,278)=ar(0,120);0;0;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.13426___pyx_d37__pyx_f_4pygr_11cnestedlist_10NLMSASlice_split:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_minAligned:(0,2)__pyx_v_kwargs:(0,2)__pyx_v_seqIntervals:(0,2)__pyx_v_ivals:r(0,2)__pyx_v_l:(0,2)__pyx_v_ival:(0,2)__pyx_v_subslice:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:(0,2)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_5:(0,5)__pyx_6:(0,2)__pyx_7:(0,2)__pyx_argnames:V(0,279):t(0,279)=ar(0,120);0;1;(0,8)___pyx_argnames.11687__pyx_f_4pygr_11cnestedlist_10NLMSASlice_generateSeqEnds:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_i:(0,5)__pyx_v_nl:r(0,195)__pyx_v_l:r(0,2)__pyx_v_ival2:(0,2)__pyx_v_edge:(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:(0,5)__pyx_3:r(0,2)__pyx_4:(0,2)__pyx_5:r(0,5)__pyx_argnames:V(0,280):t(0,280)=ar(0,120);0;0;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.11589__pyx_f_4pygr_11cnestedlist_10NLMSASlice_findSeqEnds:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_seq:(0,2)__pyx_v_i:r(0,5)__pyx_v_nl:r(0,195)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_argnames:V(0,281):t(0,281)=ar(0,120);0;1;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.11026__pyx_f_4pygr_11cnestedlist_10NLMSASlice_iteritems:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_kwargs:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_argnames:V(0,282):t(0,282)=ar(0,120);0;0;(0,8)__pyx_getprop_4pygr_11cnestedlist_10NLMSASlice_letters:f(0,2)o:p(0,2)x:p(0,87)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_f_4pygr_11cnestedlist_10NLMSASlice___iter__:f(0,2)__pyx_v_self:p(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)___pyx_argnames.10086__pyx_f_4pygr_11cnestedlist_17NLMSASliceLetters_iteritems:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_argnames:V(0,283):t(0,283)=ar(0,120);0;0;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)___pyx_argnames.10018__pyx_f_4pygr_11cnestedlist_17NLMSASliceLetters_items:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_l:r(0,2)__pyx_v_node:r(0,2)__pyx_r:(0,2)__pyx_1:(0,2)__pyx_2:(0,2)__pyx_3:r(0,2)__pyx_4:(0,2)__pyx_argnames:V(0,284):t(0,284)=ar(0,120);0;0;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)__pyx_f_4pygr_11cnestedlist_17NLMSASliceLetters___iter__:f(0,2)__pyx_v_self:p(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_f_4pygr_11cnestedlist_9NLMSANode___getitem__:f(0,2)__pyx_v_self:p(0,2)__pyx_v_seq:p(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_f_4pygr_11cnestedlist_9NLMSANode___iter__:f(0,2)__pyx_v_self:p(0,2)__pyx_v_i:(0,5)__pyx_v_j:(0,5)__pyx_v_nl:r(0,195)__pyx_v_l:r(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:(0,5)__pyx_4:r(0,2)__pyx_5:r(0,2)__pyx_6:r(0,5)__pyx_7:(0,2)__pyx_8:(0,2)__pyx_9:(0,2)___pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator_loadAll__pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator_loadAll:f(0,5)__pyx_v_self:p(0,121)__pyx_v_ikeep:(0,5)__pyx_r:r(0,5)__pyx_1:r(0,5)__pyx_v_self:r(0,121)___pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator_nextBlock__pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator_nextBlock:f(0,5)__pyx_v_self:p(0,121)__pyx_v_pkeep:p(0,285)__pyx_v_i:r(0,5):t(0,285)=*(0,5)__pyx_r:r(0,5)__pyx_1:(0,5)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_v_self:r(0,121)___pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator_restart__pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator_restart:f(0,5)__pyx_v_self:p(0,121)__pyx_v_start:p(0,5)__pyx_v_end:p(0,5)__pyx_v_db:p(0,126)__pyx_v_ns:p(0,194)__pyx_r:(0,5)__pyx_2:(0,2)__pyx_3:(0,2)__pyx_v_self:r(0,121)__pyx_v_start:r(0,5)__pyx_v_end:r(0,5)__pyx_v_ns:r(0,194)___pyx_f_4pygr_11cnestedlist_18IntervalDBIterator_cnext__pyx_f_4pygr_11cnestedlist_18IntervalDBIterator_cnext:f(0,5)__pyx_v_self:p(0,286)__pyx_r:r(0,5):t(0,286)=*(0,219)__pyx_1:r(0,5)__pyx_v_self:r(0,286)old_exc:(0,2)old_val:(0,2)old_tb:(0,2)ctx:r(0,2)___pyx_f_4pygr_11cnestedlist_13NLMSASequence_saveInterval__pyx_f_4pygr_11cnestedlist_13NLMSASequence_saveInterval:f(0,5)__pyx_v_self:p(0,194)__pyx_v_im:p(0,125)__pyx_v_n:p(0,5)__pyx_v_expand_self:p(0,5)__pyx_v_ifile:p(0,159)__pyx_v_i:r(0,5)__pyx_r:r(0,5)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_v_n:r(0,5)old_exc:(0,2)old_val:(0,2)old_tb:(0,2)ctx:r(0,2)old_exc:(0,2)old_val:(0,2)old_tb:(0,2)ctx:r(0,2)___pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator_cnext__pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator_cnext:f(0,5)__pyx_v_self:p(0,121)__pyx_v_pkeep:p(0,285)__pyx_r:r(0,5)__pyx_1:r(0,5)__pyx_v_self:r(0,121)old_exc:(0,2)old_val:(0,2)old_tb:(0,2)ctx:r(0,2)___pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator_extend__pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator_extend:f(0,5)__pyx_v_self:p(0,121)__pyx_v_ikeep:p(0,5)__pyx_v_istart:r(0,5)__pyx_v_new_buf:r(0,125)__pyx_r:r(0,5)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_v_ikeep:r(0,5)old_exc:(0,2)old_val:(0,2)old_tb:(0,2)ctx:r(0,2)___pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator_copy__pyx_f_4pygr_11cnestedlist_22IntervalFileDBIterator_copy:f(0,5)__pyx_v_self:p(0,121)__pyx_v_src:p(0,121)__pyx_v_new_buf:r(0,125)__pyx_2:(0,2)__pyx_3:(0,2)__pyx_v_self:r(0,121)__pyx_v_src:r(0,121)old_exc:(0,2)old_val:(0,2)old_tb:(0,2)ctx:(0,2)old_exc:(0,2)old_val:(0,2)old_tb:(0,2)ctx:(0,2)___pyx_argnames.13925__pyx_f_4pygr_11cnestedlist_advanceStartStop:f(0,2)__pyx_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_ipos:(0,5)__pyx_v_nlmsaSlice:(0,189)__pyx_v_istart:(0,5)__pyx_v_istop:(0,5)__pyx_v_i:r(0,5)__pyx_r:r(0,2)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_5:r(0,2)__pyx_argnames:V(0,287):t(0,287)=ar(0,120);0;4;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)type:r(0,228)type:r(0,228)type:r(0,228)___pyx_argnames.13999__pyx_tp_new_4pygr_11cnestedlist_NLMSASliceIterator:f(0,2)t:p(0,228)a:p(0,2)k:p(0,2)o:r(0,2)t:r(0,228)__pyx_v_nlmsaSlice:(0,189)__pyx_r:r(0,5)type:(0,228)__pyx_v_nlmsaSlice:(0,189)__pyx_r:r(0,5)__pyx_v_nlmsaSlice:(0,189)__pyx_r:r(0,5)type:(0,228)type:(0,228)___pyx_argnames.9893__pyx_tp_new_4pygr_11cnestedlist_NLMSASliceLetters:f(0,2)t:p(0,228)a:p(0,2)k:p(0,2)o:r(0,2)t:r(0,228)__pyx_v_nlmsaSlice:(0,189)__pyx_r:r(0,5)type:(0,228)__pyx_v_nlmsaSlice:(0,189)__pyx_r:r(0,5)__pyx_v_nlmsaSlice:(0,189)__pyx_r:r(0,5)type:(0,228)type:(0,228)__pyx_f_4pygr_11cnestedlist_17NLMSASliceLetters___getitem__:f(0,2)__pyx_v_self:p(0,2)__pyx_v_node:p(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)type:r(0,228)type:r(0,228)type:r(0,228)___pyx_argnames.17145___pyx_d61__pyx_f_4pygr_11cnestedlist_5NLMSA_addToSeqlist:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_ns:(0,194)__pyx_v_seq:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_argnames:V(0,288):t(0,288)=ar(0,120);0;2;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)type:r(0,228)obj:r(0,2)type:r(0,228)obj:r(0,2)type:r(0,228)obj:r(0,2)___pyx_f_4pygr_11cnestedlist_5NLMSA_save_nbuild__pyx_f_4pygr_11cnestedlist_5NLMSA_save_nbuild:f(0,1)__pyx_v_self:p(0,195)__pyx_v_nbuild:p(0,285)__pyx_v_ns:(0,194)__pyx_1:(0,2)__pyx_2:r(0,2)type:r(0,228)old_exc:(0,2)old_val:(0,2)old_tb:(0,2)ctx:r(0,2)type:r(0,228)old_exc:(0,2)old_val:(0,2)old_tb:(0,2)ctx:r(0,2)type:r(0,228)___pyx_argnames.16507__pyx_f_4pygr_11cnestedlist_5NLMSA_close:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_ns:(0,194)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_argnames:V(0,289):t(0,289)=ar(0,120);0;0;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)type:r(0,228)type:r(0,228)___pyx_argnames.17389__pyx_f_4pygr_11cnestedlist_5NLMSA_initLPO:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_ns:(0,194)__pyx_v_offset:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:(0,5)__pyx_3:r(0,2)__pyx_argnames:V(0,290):t(0,290)=ar(0,120);0;0;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)type:r(0,228)type:r(0,228)type:r(0,228)___pyx_f_4pygr_11cnestedlist_10NLMSASlice_get_seq_interval__pyx_f_4pygr_11cnestedlist_10NLMSASlice_get_seq_interval:f(0,2)__pyx_v_self:p(0,189)__pyx_v_nl:p(0,195)__pyx_v_targetID:p(0,5)__pyx_v_start:p(0,5)__pyx_v_stop:p(0,5)__pyx_v_ival:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,5)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_5:(0,2)__pyx_6:r(0,2)name:r(0,2)name:r(0,2)___pyx_argnames.20068___pyx_d66___pyx_d67___pyx_d68__pyx_f_4pygr_11cnestedlist_textfile_to_binaries:f(0,2)__pyx_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_filename:(0,2)__pyx_v_seqDict:(0,2)__pyx_v_prefixDict:(0,2)__pyx_v_buildpath:(0,2)__pyx_v_i:(0,5)__pyx_v_n:(0,5)__pyx_v_nlmsaID:(0,5)__pyx_v_nsID:(0,5)__pyx_v_offset:(0,5)__pyx_v_is_bidirectional:(0,5)__pyx_v_pairwiseMode:(0,5)__pyx_v_nprefix:(0,5)__pyx_v_infile:(0,159)__pyx_v_err_msg:(0,291)__pyx_v_line:(0,292)__pyx_v_tmp:(0,291)__pyx_v_basestem:(0,291)__pyx_v_seqDictID:(0,291)__pyx_v_ignorePrefix:(0,2)__pyx_v_os:(0,2)__pyx_v_buildpath1:(0,2)__pyx_v_worldbase:(0,2)__pyx_v_classutil:(0,2)__pyx_v_pickle:(0,2)__pyx_v_seqIDdict:(0,2)__pyx_v_IDdict:(0,2)__pyx_v_d:(0,2)__pyx_v_ifile:(0,2)__pyx_v_missing:(0,2)__pyx_v_seqdb:(0,2)__pyx_v_NLMSAindexText:(0,2)__pyx_v_buildpath2:(0,2)__pyx_v_sys:(0,2)__pyx_v_s:r(0,2)__pyx_r:r(0,2)__pyx_1:(0,5):t(0,291)=ar(0,120);0;2047;(0,54):t(0,292)=ar(0,120);0;32767;(0,54)__pyx_2:r(0,8)__pyx_3:r(0,2)__pyx_4:(0,2)__pyx_5:(0,2)__pyx_6:r(0,185)__pyx_7:r(0,2)__pyx_argnames:V(0,293):t(0,293)=ar(0,120);0;4;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:(0,5)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:(0,5)__pyx_why:(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:r(0,5)__pyx_why:(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:r(0,5)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:(0,5)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:(0,5)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:(0,5)__pyx_why:(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:r(0,5)__pyx_why:(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:r(0,5)__pyx_why:(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:r(0,5)name:r(0,2)name:r(0,2)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:(0,5)name:r(0,2)name:r(0,2)__pyx_why:(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:r(0,5)___pyx_vtable_4pygr_11cnestedlist_IntervalDBIterator___pyx_vtable_4pygr_11cnestedlist_NLMSASequence___pyx_vtable_4pygr_11cnestedlist_IntervalFileDBIterator___pyx_vtabptr_4pygr_11cnestedlist_IntervalFileDBIterator___pyx_vtable_4pygr_11cnestedlist_NLMSA___pyx_f_4pygr_11cnestedlist_5NLMSA_add_seqidmap_to_union___pyx_vtable_4pygr_11cnestedlist_NLMSASlice___pyx_vtabptr_4pygr_11cnestedlist_NLMSASlice___pyx_f_4pygr_11cnestedlist_10NLMSASlice_findSeqBounds___pyx_vtable_4pygr_11cnestedlist_NLMSANode___pyx_vtabptr_4pygr_11cnestedlist_NLMSANode___pyx_d5___pyx_d6___pyx_d7___pyx_d8___pyx_d11___pyx_d12___pyx_d13___pyx_d14___pyx_d15___pyx_d16___pyx_d17___pyx_d18___pyx_d19___pyx_d20___pyx_d21___pyx_d22___pyx_d23___pyx_d24___pyx_d25___pyx_d26___pyx_d27___pyx_d28___pyx_d29___pyx_d30___pyx_d31___pyx_d32___pyx_d33___pyx_d34___pyx_d35___pyx_d36___pyx_d38___pyx_d39___pyx_d40___pyx_d41___pyx_d42___pyx_d43___pyx_d44___pyx_d45___pyx_d46___pyx_d47___pyx_d48___pyx_d49___pyx_d50___pyx_d51___pyx_d52___pyx_d53___pyx_d54___pyx_d55___pyx_d56___pyx_d57___pyx_d58___pyx_d59___pyx_d60___pyx_d64___pyx_d65initcnestedlist:F(0,1)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_4:r(0,2)__pyx_5:r(0,2)__pyx_6:r(0,2)__pyx_7:r(0,2)__pyx_8:r(0,2)__pyx_9:r(0,2)__pyx_10:r(0,2)__pyx_11:r(0,2)__pyx_12:r(0,2)__pyx_13:r(0,2)t:r(0,294)dict:r(0,2)pycobj:r(0,2)result:r(0,5):t(0,294)=*(0,295)__Pyx_StringTabEntry:t(0,295)=(0,296):T(0,296)=s16p:(0,232),0,32;i:(0,5),32,32;s:(0,8),64,32;n:(0,33),96,32;;dict:r(0,2)pycobj:r(0,2)result:r(0,5)dict:r(0,2)pycobj:r(0,2)result:r(0,5)dict:r(0,2)pycobj:r(0,2)result:r(0,5)dict:r(0,2)pycobj:r(0,2)result:r(0,5)dict:r(0,2)pycobj:r(0,2)result:r(0,5)name:r(0,2)dict:r(0,2)pycobj:r(0,2)result:r(0,5)name:r(0,2)__pyx_f_4pygr_11cnestedlist_9NLMSANode___cmp__:f(0,5)__pyx_v_self:p(0,2)__pyx_v_other:p(0,2)__pyx_r:r(0,5)__pyx_1:r(0,5)__pyx_2:(0,2)__pyx_3:r(0,2)__pyx_4:r(0,2)__pyx_5:(0,2)__pyx_6:(0,2)name:r(0,2)name:r(0,2)name:(0,2)name:r(0,2)name:r(0,2)name:(0,2)__pyx_getprop_4pygr_11cnestedlist_9NLMSANode_edges:f(0,2)o:p(0,2)x:p(0,87)__pyx_v_l:r(0,2)__pyx_v_ival2:r(0,2)__pyx_3:(0,2)__pyx_4:(0,2)name:r(0,2)__pyx_v_l:r(0,2)__pyx_v_ival2:r(0,2)__pyx_3:(0,2)__pyx_4:(0,2)name:r(0,2)___pyx_argnames.14431__pyx_f_4pygr_11cnestedlist_9NLMSANode_getSeqPos:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_seq:(0,2)__pyx_v_i:r(0,5)__pyx_v_j:r(0,5)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:(0,2)__pyx_3:(0,2)__pyx_4:r(0,5)__pyx_5:r(0,2)__pyx_6:(0,2)__pyx_argnames:V(0,297):t(0,297)=ar(0,120);0;1;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)name:(0,2)name:(0,2)__pyx_f_4pygr_11cnestedlist_10NLMSASlice___cmp__:f(0,5)__pyx_v_self:p(0,2)__pyx_v_other:p(0,2)__pyx_r:r(0,5)__pyx_1:r(0,5)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_v_other:r(0,2)name:(0,2)name:(0,2)__pyx_f_4pygr_11cnestedlist_10NLMSASlice___repr__:f(0,2)__pyx_v_self:p(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,2)name:r(0,2)name:r(0,2)__pyx_f_4pygr_11cnestedlist_10NLMSASlice___hash__:f(0,33)__pyx_v_self:p(0,2)__pyx_r:r(0,33)long int:t(0,33)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_4:r(0,33)name:r(0,2)name:r(0,2)___pyx_argnames.11372__pyx_f_4pygr_11cnestedlist_10NLMSASlice_matchIntervals:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_seq:(0,2)__pyx_v_i:(0,5)__pyx_v_target_id:(0,5)__pyx_v_nl:r(0,195)__pyx_v_l:r(0,2)__pyx_v_ival2:(0,2)__pyx_v_ival1:(0,2)__pyx_r:r(0,2)__pyx_1:(0,5)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_6:(0,5)__pyx_7:(0,2)__pyx_8:(0,2)__pyx_argnames:V(0,298):t(0,298)=ar(0,120);0;1;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)name:r(0,2)name:r(0,2)__pyx_f_4pygr_11cnestedlist_10NLMSASlice___getitem__:f(0,2)__pyx_v_self:p(0,2)__pyx_v_k:p(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,2)name:r(0,2)name:r(0,2)___pyx_argnames.16110__pyx_f_4pygr_11cnestedlist_5NLMSA___init__:f(0,5)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_pathstem:(0,2)__pyx_v_mode:(0,2)__pyx_v_seqDict:(0,2)__pyx_v_mafFiles:(0,2)__pyx_v_axtFiles:(0,2)__pyx_v_maxOpenFiles:(0,2)__pyx_v_maxlen:(0,2)__pyx_v_nPad:(0,2)__pyx_v_maxint:(0,2)__pyx_v_trypath:(0,2)__pyx_v_bidirectional:(0,2)__pyx_v_pairwiseMode:(0,2)__pyx_v_bidirectionalRule:(0,2)__pyx_v_use_virtual_lpo:(0,2)__pyx_v_maxLPOcoord:(0,2)__pyx_v_inverseDB:(0,2)__pyx_v_alignedIvals:(0,2)__pyx_v_kwargs:(0,2)__pyx_v_resource:(0,2)__pyx_v_seqdb:r(0,2)__pyx_r:r(0,5)__pyx_1:(0,2)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_5:(0,5)__pyx_argnames:V(0,299):t(0,299)=ar(0,120);0;17;(0,8)name:r(0,2)result:r(0,2)name:r(0,2)result:r(0,2)name:r(0,2)result:r(0,2)___pyx_argnames.17459__pyx_f_4pygr_11cnestedlist_5NLMSA_init_pairwise_mode:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_r:r(0,2)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_4:r(0,2)__pyx_argnames:V(0,300):t(0,300)=ar(0,120);0;0;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)name:r(0,2)name:r(0,2)___pyx_argnames.17847__pyx_f_4pygr_11cnestedlist_5NLMSA_edges:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_args:(0,2)__pyx_v_kwargs:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_argnames:V(0,301):t(0,301)=ar(0,120);0;0;(0,8)name:r(0,2)name:r(0,2)___pyx_argnames.18035__pyx_f_4pygr_11cnestedlist_5NLMSA_add_aligned_intervals:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_alignedIvals:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_argnames:V(0,302):t(0,302)=ar(0,120);0;1;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)name:r(0,2)name:r(0,2)___pyx_argnames.18959__pyx_f_4pygr_11cnestedlist_5NLMSA_buildFiles:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_saveSeqDict:(0,2)__pyx_v_kwargs:(0,2)__pyx_v_ns:(0,194)__pyx_v_ntotal:(0,2)__pyx_v_ifile:(0,2)__pyx_v_pickle:(0,2)__pyx_v_sys:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:(0,2)__pyx_3:r(0,2)__pyx_4:r(0,2)__pyx_5:(0,5)__pyx_6:(0,2)__pyx_7:(0,2)__pyx_argnames:V(0,303):t(0,303)=ar(0,120);0;1;(0,8)type:r(0,228)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:(0,5)name:r(0,2)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:(0,5)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:(0,5)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:(0,5)__pyx_why:(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:r(0,5)name:r(0,2)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:(0,5)type:r(0,228)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:(0,5)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:(0,5)type:r(0,228)__pyx_why:(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:r(0,5)name:r(0,2)__pyx_why:(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:r(0,5)__pyx_why:(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:r(0,5)name:r(0,2)name:r(0,2)name:r(0,2)__pyx_why:(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:r(0,5)__pyx_why:(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:r(0,5)___pyx_argnames.19253__pyx_f_4pygr_11cnestedlist_5NLMSA_save_seq_dict:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_argnames:V(0,304):t(0,304)=ar(0,120);0;0;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)name:r(0,2)name:r(0,2)___pyx_argnames.19313__pyx_f_4pygr_11cnestedlist_5NLMSA_build:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_kwargs:(0,2)__pyx_v_ntotal:r(0,2)__pyx_v_ns:(0,2)__pyx_r:r(0,2)__pyx_1:(0,5)__pyx_2:(0,2)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_5:(0,2)__pyx_argnames:V(0,305):t(0,305)=ar(0,120);0;0;(0,8)name:r(0,2)result:r(0,2)name:r(0,2)result:r(0,2)name:r(0,2)name:r(0,2)___pyx_argnames.19444__pyx_f_4pygr_11cnestedlist_5NLMSA_seqInterval:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_iseq:(0,5)__pyx_v_istart:(0,5)__pyx_v_istop:(0,5)__pyx_v_seq:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:(0,2)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_argnames:V(0,306):t(0,306)=ar(0,120);0;3;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)name:r(0,2)name:r(0,2)__pyx_mp_ass_subscript_4pygr_11cnestedlist_NLMSA:f(0,5)o:p(0,2)i:p(0,2)v:p(0,2)__pyx_r:r(0,5)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,5)__pyx_4:r(0,2)name:r(0,2)__pyx_r:r(0,5)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,5)__pyx_4:r(0,2)name:r(0,2)__pyx_r:r(0,5)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,5)__pyx_4:r(0,2)__pyx_f_4pygr_11cnestedlist_13NLMSASequence___getitem__:f(0,2)__pyx_v_self:p(0,2)__pyx_v_k:p(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:r(0,5)__pyx_3:(0,2)__pyx_4:(0,2)name:r(0,2)result:r(0,2)name:r(0,2)result:r(0,2)__pyx_f_4pygr_11cnestedlist_18NLMSASliceIterator___next__:f(0,2)__pyx_v_self:p(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_4:r(0,2)__pyx_5:(0,2)name:r(0,2)name:r(0,2)item:r(0,2)item:r(0,2)name:r(0,2)item:r(0,2)name:r(0,2)___pyx_argnames.14170__pyx_tp_new_4pygr_11cnestedlist_NLMSANode:f(0,2)t:p(0,228)a:p(0,2)k:p(0,2)o:(0,2)t:r(0,228)__pyx_v_ipos:(0,5)__pyx_v_nlmsaSlice:(0,189)__pyx_v_istart:(0,5)__pyx_v_istop:(0,5)__pyx_v_i:r(0,5)__pyx_v_nl:(0,195)__pyx_r:r(0,5)__pyx_1:(0,5)__pyx_2:(0,2)__pyx_3:(0,2)__pyx_4:r(0,2)__pyx_5:(0,2)__pyx_6:(0,2)type:r(0,228)__pyx_v_ipos:(0,5)__pyx_v_nlmsaSlice:(0,189)__pyx_v_istart:(0,5)__pyx_v_istop:(0,5)__pyx_v_i:r(0,5)__pyx_v_nl:(0,195)__pyx_r:r(0,5)__pyx_1:(0,5)__pyx_2:(0,2)__pyx_3:(0,2)__pyx_4:r(0,2)__pyx_5:(0,2)__pyx_6:(0,2)name:r(0,2)type:r(0,228)type:r(0,228)__pyx_v_ipos:(0,5)__pyx_v_nlmsaSlice:(0,189)__pyx_v_istart:(0,5)__pyx_v_istop:(0,5)__pyx_v_i:r(0,5)__pyx_v_nl:(0,195)__pyx_r:r(0,5)__pyx_1:(0,5)__pyx_2:(0,2)__pyx_3:(0,2)__pyx_4:r(0,2)__pyx_5:(0,2)__pyx_6:(0,2)name:r(0,2)item:r(0,2)item:r(0,2)___pyx_argnames.10781__pyx_f_4pygr_11cnestedlist_10NLMSASlice_edges:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_mergeAll:(0,2)__pyx_v_kwargs:(0,2)__pyx_v_seqIntervals:(0,2)__pyx_v_ivals:r(0,2)__pyx_v_l:r(0,2)__pyx_v_ival1:(0,2)__pyx_v_ival2:(0,2)__pyx_v_mergeIntervals:(0,2)__pyx_r:(0,2)__pyx_1:(0,2)__pyx_2:(0,2)__pyx_3:r(0,2)__pyx_4:(0,2)__pyx_5:r(0,2)__pyx_argnames:V(0,307):t(0,307)=ar(0,120);0;1;(0,8)item:r(0,2)name:r(0,2)name:r(0,2)item:r(0,2)item:r(0,2)___pyx_argnames.10925__pyx_f_4pygr_11cnestedlist_10NLMSASlice_items:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_kwargs:(0,2)__pyx_v_l:r(0,2)__pyx_v_ival1:(0,2)__pyx_v_ival2:(0,2)__pyx_v_edge:r(0,2)__pyx_r:(0,2)__pyx_1:(0,2)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_4:(0,2)__pyx_argnames:V(0,308):t(0,308)=ar(0,120);0;0;(0,8)item:r(0,2)item:r(0,2)item:r(0,2)___pyx_argnames.11096__pyx_f_4pygr_11cnestedlist_10NLMSASlice_keys:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_mergeAll:(0,2)__pyx_v_kwargs:(0,2)__pyx_v_seqIntervals:(0,2)__pyx_v_ivals:(0,2)__pyx_v_l:r(0,2)__pyx_v_ival1:(0,2)__pyx_v_ival2:(0,2)__pyx_v_mergeIntervals:(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_argnames:V(0,309):t(0,309)=ar(0,120);0;1;(0,8)item:r(0,2)item:r(0,2)___pyx_argnames.13285__pyx_f_4pygr_11cnestedlist_10NLMSASlice_clip_interval_list:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_start:(0,2)__pyx_v_end:(0,2)__pyx_v_l:(0,2)__pyx_v_result:r(0,2)__pyx_v_srcStart:(0,2)__pyx_v_srcEnd:(0,2)__pyx_v_destStart:(0,2)__pyx_v_destEnd:(0,2)__pyx_r:r(0,2)__pyx_1:(0,5)__pyx_2:(0,2)__pyx_3:r(0,2)__pyx_4:r(0,2)__pyx_5:(0,2)__pyx_6:r(0,185)__pyx_argnames:V(0,310):t(0,310)=ar(0,120);0;3;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)___pyx_argnames.16759__pyx_f_4pygr_11cnestedlist_5NLMSA_read_indexes:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_seqDict:(0,2)__pyx_v_ns:(0,194)__pyx_v_ifile:(0,2)__pyx_v_line:(0,2)__pyx_v_id:(0,2)__pyx_v_name:(0,2)__pyx_v_is_union:(0,2)__pyx_v_length:(0,2)__pyx_v_filestem:(0,2)__pyx_v_seq:(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:(0,2)__pyx_3:(0,5)__pyx_4:(0,2)__pyx_5:(0,2)__pyx_6:r(0,2)__pyx_7:r(0,185)__pyx_9:r(0,2)__pyx_argnames:V(0,311):t(0,311)=ar(0,120);0;1;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:r(0,5)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:r(0,5)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:r(0,5)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:r(0,5)item:r(0,2)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:r(0,5)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:r(0,5)item:r(0,2)___pyx_argnames.17002__pyx_f_4pygr_11cnestedlist_5NLMSA_read_attrs:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_pickle:(0,2)__pyx_v_ifile:(0,2)__pyx_v_d:(0,2)__pyx_v_k:(0,2)__pyx_v_v:(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:(0,2)__pyx_3:(0,5)__pyx_4:(0,2)__pyx_5:r(0,5)__pyx_argnames:V(0,312):t(0,312)=ar(0,120);0;0;(0,8)__pyx_v_self:r(0,2)__pyx_args:r(0,2)__pyx_kwds:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:(0,5)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:(0,5)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:(0,5)item:r(0,2)item:r(0,2)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:(0,5)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:(0,5)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:(0,5)item:r(0,2)item:r(0,2)__pyx_mp_ass_subscript_4pygr_11cnestedlist_NLMSASequence:f(0,5)o:p(0,2)i:p(0,2)v:p(0,2)o:r(0,2)v:r(0,2)__pyx_v_i:r(0,5)__pyx_v_im_tmp:(0,130)__pyx_r:(0,5)__pyx_1:(0,5)__pyx_2:(0,2)__pyx_4:(0,2)__pyx_5:(0,2)__pyx_6:(0,2)__pyx_v_i:r(0,5)__pyx_v_im_tmp:(0,130)__pyx_r:(0,5)__pyx_1:(0,5)__pyx_2:(0,2)__pyx_4:(0,2)__pyx_5:(0,2)__pyx_6:(0,2)item:(0,2)name:(0,2)result:(0,2)__pyx_v_i:r(0,5)__pyx_v_im_tmp:(0,130)__pyx_r:(0,5)__pyx_1:(0,5)__pyx_2:(0,2)__pyx_4:(0,2)__pyx_5:(0,2)__pyx_6:(0,2)name:(0,2)result:(0,2)item:(0,2)item:(0,2)item:r(0,2)item:(0,2)item:(0,2)item:(0,2)item:r(0,2)item:(0,2)__pyx_f_4pygr_11cnestedlist_5NLMSA_add_seqidmap_to_union:f(0,194)__pyx_v_self:p(0,195)__pyx_v_j:p(0,5)__pyx_v_seqidmap:p(0,216)__pyx_v_ns:p(0,194)__pyx_v_build_ifile:p(0,313)__pyx_v_nbuild:p(0,285)__pyx_v_ns_lpo:r(0,194):t(0,313)=*(0,159)__pyx_r:(0,194)__pyx_2:(0,2)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_5:(0,2)__pyx_v_ns:r(0,194)type:(0,228)i:r(0,185)type:(0,228)type:(0,228)i:r(0,185)j:(0,2)type:(0,228)type:(0,228)__pyx_f_4pygr_11cnestedlist_10NLMSASlice_findSeqBounds:f(0,5)__pyx_v_self:p(0,189)__pyx_v_id:p(0,5)__pyx_v_ori:p(0,5)__pyx_v_left:(0,5)__pyx_v_right:r(0,5)__pyx_r:r(0,5)__pyx_1:(0,5)__pyx_2:(0,2)__pyx_3:(0,2)__pyx_v_ori:r(0,5)name:(0,2)name:r(0,2)j:(0,2)j:r(0,2)name:(0,2)old_exc:(0,2)old_val:(0,2)old_tb:(0,2)ctx:r(0,2)name:r(0,2)old_exc:(0,2)old_val:(0,2)old_tb:(0,2)ctx:r(0,2)j:(0,2)j:r(0,2)___pyx_argnames.19597__pyx_f_4pygr_11cnestedlist_dump_textfile:f(0,2)__pyx_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_pathstem:(0,2)__pyx_v_outfilename:(0,2)__pyx_v_nprefix:r(0,5)__pyx_v_outfile:(0,159)__pyx_v_err_msg:(0,291)__pyx_v_tmp:(0,291)__pyx_v_seqDictID:(0,314)__pyx_v_classutil:(0,2)__pyx_v_pickle:(0,2)__pyx_v_sys:(0,2)__pyx_v_seqIDdict:(0,2)__pyx_v_seqDict:(0,2)__pyx_v_prefixDict:(0,2)__pyx_v_ifile:(0,2)__pyx_v_d:(0,2)__pyx_v_os:(0,2)__pyx_v_basestem:(0,2)__pyx_v_pleaseWarn:(0,2)__pyx_v_id:(0,2)__pyx_v_t:(0,2)__pyx_v_line:(0,2)__pyx_v_name:(0,2)__pyx_v_is_union:(0,2)__pyx_v_length:(0,2)__pyx_v_mypath:(0,2)__pyx_v_mybase:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,5):t(0,314)=ar(0,120);0;255;(0,54)__pyx_2:(0,2)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_5:(0,185)__pyx_6:(0,2)__pyx_7:r(0,8)__pyx_8:(0,2)__pyx_9:(0,2)__pyx_10:(0,2)__pyx_11:(0,2)__pyx_12:(0,2)__pyx_13:r(0,8)__pyx_argnames:V(0,315):t(0,315)=ar(0,120);0;2;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)name:r(0,2)result:r(0,2)name:r(0,2)result:r(0,2)name:r(0,2)result:r(0,2)name:r(0,2)result:r(0,2)name:r(0,2)result:r(0,2)name:r(0,2)result:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)name:r(0,2)result:r(0,2)name:r(0,2)result:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)item:r(0,2)item:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:r(0,5)__pyx_why:r(0,5)__pyx_exc_type:(0,2)__pyx_exc_value:(0,2)__pyx_exc_tb:(0,2)__pyx_exc_lineno:r(0,5)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)name:r(0,2)result:r(0,2)___pyx_argnames.14784__pyx_f_4pygr_11cnestedlist_9NLMSANode_getEdgeSeqs:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_other:(0,186)__pyx_v_i:(0,5)__pyx_v_nl:(0,195)__pyx_v_d:r(0,2)__pyx_v_seq:(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:r(0,5)__pyx_3:(0,5)__pyx_4:(0,2)__pyx_5:(0,2)__pyx_argnames:V(0,316):t(0,316)=ar(0,120);0;1;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)type:r(0,228)obj:r(0,2)type:r(0,228)obj:r(0,2)j:r(0,2)type:r(0,228)obj:r(0,2)___pyx_argnames.14932__pyx_f_4pygr_11cnestedlist_9NLMSANode_nodeEdges:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_i:(0,5)__pyx_v_has_continuation:(0,5)__pyx_v_d:(0,2)__pyx_v_nodes:(0,2)__pyx_v_result:(0,2)__pyx_v_node:(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:(0,5)__pyx_3:(0,5)__pyx_4:r(0,185)__pyx_5:(0,2)__pyx_6:(0,2)__pyx_7:r(0,2)__pyx_argnames:V(0,317):t(0,317)=ar(0,120);0;0;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)i:r(0,185)r:r(0,5)name:r(0,2)result:r(0,2)i:r(0,185)r:r(0,2)i:r(0,185)r:r(0,5)i:r(0,185)r:r(0,5)i:r(0,185)r:r(0,2)j:r(0,2)name:r(0,2)result:r(0,2)i:r(0,185)r:r(0,5)j:r(0,2)i:r(0,185)r:r(0,2)j:r(0,2)i:r(0,185)r:r(0,5)j:r(0,2)i:r(0,185)r:r(0,5)j:r(0,2)___pyx_argnames.10158__pyx_tp_new_4pygr_11cnestedlist_NLMSASlice:f(0,2)t:p(0,228)a:p(0,2)k:p(0,2)o:(0,2)t:r(0,228)__pyx_v_ns:(0,194)__pyx_v_start:(0,5)__pyx_v_stop:(0,5)__pyx_v_id:(0,5)__pyx_v_offset:(0,5)__pyx_v_seq:(0,2)__pyx_v_i:(0,5)__pyx_v_j:(0,5)__pyx_v_n:(0,5)__pyx_v_start_max:(0,5)__pyx_v_end_min:r(0,5)__pyx_v_start2:r(0,5)__pyx_v_stop2:r(0,5)__pyx_v_istart:(0,5)__pyx_v_istop:(0,5)__pyx_v_ns_lpo:(0,194)__pyx_v_it:(0,121)__pyx_v_cacheMax:r(0,5)__pyx_v_ivals:(0,2)__pyx_v_saveCache:(0,2)__pyx_v_cacheDict:(0,2)__pyx_v_seqID:(0,2)__pyx_r:r(0,5)__pyx_1:(0,5)__pyx_2:(0,2)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_5:(0,2)__pyx_6:(0,2)__pyx_7:(0,2)__pyx_8:(0,2)__pyx_9:(0,2)__pyx_10:(0,5)__pyx_11:r(0,5)type:r(0,228)item:r(0,2)name:r(0,2)result:r(0,2)__pyx_v_ns:(0,194)__pyx_v_start:(0,5)__pyx_v_stop:(0,5)__pyx_v_id:(0,5)__pyx_v_offset:(0,5)__pyx_v_seq:(0,2)__pyx_v_i:(0,5)__pyx_v_j:(0,5)__pyx_v_n:(0,5)__pyx_v_start_max:(0,5)__pyx_v_end_min:r(0,5)__pyx_v_start2:r(0,5)__pyx_v_stop2:r(0,5)__pyx_v_istart:(0,5)__pyx_v_istop:(0,5)__pyx_v_ns_lpo:(0,194)__pyx_v_it:(0,121)__pyx_v_cacheMax:r(0,5)__pyx_v_ivals:(0,2)__pyx_v_saveCache:(0,2)__pyx_v_cacheDict:(0,2)__pyx_v_seqID:(0,2)__pyx_r:r(0,5)__pyx_1:(0,5)__pyx_2:(0,2)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_5:(0,2)__pyx_6:(0,2)__pyx_7:(0,2)__pyx_8:(0,2)__pyx_9:(0,2)__pyx_10:(0,5)__pyx_11:r(0,5)type:r(0,228)i:r(0,185)o:r(0,2)r:r(0,2)type:r(0,228)o:r(0,2)r:r(0,2)type:r(0,228)type:r(0,228)__pyx_v_ns:(0,194)__pyx_v_start:(0,5)__pyx_v_stop:(0,5)__pyx_v_id:(0,5)__pyx_v_offset:(0,5)__pyx_v_seq:(0,2)__pyx_v_i:(0,5)__pyx_v_j:(0,5)__pyx_v_n:(0,5)__pyx_v_start_max:(0,5)__pyx_v_end_min:r(0,5)__pyx_v_start2:r(0,5)__pyx_v_stop2:r(0,5)__pyx_v_istart:(0,5)__pyx_v_istop:(0,5)__pyx_v_ns_lpo:(0,194)__pyx_v_it:(0,121)__pyx_v_cacheMax:r(0,5)__pyx_v_ivals:(0,2)__pyx_v_saveCache:(0,2)__pyx_v_cacheDict:(0,2)__pyx_v_seqID:(0,2)__pyx_r:r(0,5)__pyx_1:(0,5)__pyx_2:(0,2)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_5:(0,2)__pyx_6:(0,2)__pyx_7:(0,2)__pyx_8:(0,2)__pyx_9:(0,2)__pyx_10:(0,5)__pyx_11:r(0,5)name:r(0,2)result:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)i:r(0,185)o:r(0,2)r:r(0,2)j:r(0,2)o:r(0,2)r:r(0,2)j:r(0,2)name:r(0,2)result:r(0,2)i:r(0,185)o:r(0,2)r:r(0,2)j:r(0,2)type:r(0,228)o:r(0,2)r:r(0,2)j:r(0,2)name:r(0,2)result:r(0,2)type:r(0,228)name:r(0,2)result:r(0,2)name:r(0,2)result:r(0,2)name:r(0,2)result:r(0,2)name:r(0,2)result:r(0,2)type:r(0,228)type:r(0,228)name:r(0,2)result:r(0,2)name:r(0,2)result:r(0,2)___pyx_argnames.11828__pyx_f_4pygr_11cnestedlist_10NLMSASlice_groupByIntervals:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_maxgap:(0,5)__pyx_v_maxinsert:(0,5)__pyx_v_mininsert:(0,5)__pyx_v_filterSeqs:(0,2)__pyx_v_filterList:(0,2)__pyx_v_mergeMost:(0,2)__pyx_v_maxsize:(0,2)__pyx_v_mergeAll:(0,2)__pyx_v_ivalMethod:(0,2)__pyx_v_kwargs:(0,2)__pyx_v_i:(0,5)__pyx_v_j:(0,5)__pyx_v_n:(0,5)__pyx_v_gap:(0,5)__pyx_v_insert:r(0,5)__pyx_v_targetStart:(0,5)__pyx_v_targetEnd:(0,5)__pyx_v_start:(0,5)__pyx_v_end:(0,5)__pyx_v_maskStart:r(0,5)__pyx_v_maskEnd:r(0,5)__pyx_v_nl:r(0,195)__pyx_v_targetDict:(0,2)__pyx_v_seq:(0,2)__pyx_v_t:(0,2)__pyx_v_seqIntervals:(0,2)__pyx_v_target:(0,2)__pyx_v_l:(0,2)__pyx_v_lastIval:(0,2)__pyx_v_m:(0,2)__pyx_r:r(0,2)__pyx_1:(0,5)__pyx_2:(0,2)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_5:(0,2)__pyx_6:(0,5)__pyx_7:(0,2)__pyx_8:(0,2)__pyx_9:(0,2)__pyx_10:(0,2)__pyx_11:(0,185)__pyx_12:(0,2)__pyx_argnames:V(0,318):t(0,318)=ar(0,120);0;9;(0,8)item:r(0,2)item:r(0,2)item:r(0,2)r:r(0,2)r:r(0,2)j:r(0,2)i:r(0,185)r:r(0,2)item:r(0,2)i:r(0,185)r:r(0,2)v:r(0,2)i:r(0,185)r:r(0,5)r:r(0,2)j:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)v:(0,2)r:r(0,5)r:r(0,2)r:r(0,2)r:r(0,2)v:(0,2)r:r(0,5)r:r(0,2)r:r(0,2)r:r(0,2)v:(0,2)r:r(0,5)r:r(0,2)r:r(0,2)r:r(0,2)v:(0,2)r:r(0,5)r:r(0,2)r:r(0,5)r:r(0,2)j:r(0,2)r:r(0,2)r:r(0,2)o:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)v:(0,2)o:r(0,2)r:r(0,5)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)v:(0,2)r:r(0,5)r:r(0,5)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)v:(0,2)r:r(0,5)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)v:(0,2)r:r(0,5)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)v:(0,2)r:r(0,5)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)o:r(0,2)r:r(0,2)j:r(0,2)i:r(0,185)r:r(0,2)j:r(0,2)i:r(0,185)r:r(0,2)j:r(0,2)v:r(0,2)i:r(0,185)r:r(0,5)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)v:(0,2)r:r(0,5)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)v:(0,2)r:r(0,5)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)i:r(0,185)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)v:(0,2)r:r(0,5)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)o:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)i:r(0,185)r:r(0,2)j:r(0,2)item:r(0,2)item:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)v:(0,2)o:r(0,2)r:r(0,5)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)v:(0,2)r:r(0,5)j:r(0,2)r:r(0,2)j:r(0,2)item:r(0,2)item:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)item:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)___pyx_argnames.12364__pyx_f_4pygr_11cnestedlist_10NLMSASlice_conservationFilter:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_seq:(0,2)__pyx_v_m:(0,2)__pyx_v_pIdentityMin:(0,2)__pyx_v_minAlignSize:(0,2)__pyx_v_maxAlignSize:(0,2)__pyx_v_kwargs:(0,2)__pyx_v_seqEdge:(0,2)__pyx_v_t:r(0,2)__pyx_v_mergeIntervals:(0,2)__pyx_r:r(0,2)__pyx_1:(0,5)__pyx_2:(0,2)__pyx_3:(0,2)__pyx_4:r(0,2)__pyx_5:(0,2)__pyx_6:(0,2)__pyx_7:(0,2)__pyx_argnames:V(0,319):t(0,319)=ar(0,120);0;5;(0,8)o:r(0,2)o:r(0,2)o:r(0,2)o:r(0,2)o:r(0,2)j:r(0,2)o:r(0,2)j:r(0,2)o:r(0,2)j:r(0,2)o:r(0,2)j:r(0,2)name:r(0,2)name:r(0,2)o:r(0,2)o:r(0,2)name:r(0,2)o:(0,2)o:(0,2)o:(0,2)o:r(0,2)j:r(0,2)o:r(0,2)j:r(0,2)o:r(0,2)j:(0,2)name:r(0,2)o:r(0,2)j:(0,2)o:r(0,2)j:(0,2)o:r(0,2)j:(0,2)name:r(0,2)o:(0,2)j:r(0,2)name:r(0,2)o:(0,2)j:r(0,2)o:(0,2)j:r(0,2)o:(0,2)j:r(0,2)o:(0,2)j:r(0,2)o:(0,2)j:r(0,2)o:(0,2)o:(0,2)j:r(0,2)o:(0,2)j:r(0,2)j:r(0,2)j:r(0,2)j:r(0,2)j:r(0,2)___pyx_argnames.12568__pyx_f_4pygr_11cnestedlist_10NLMSASlice_filterIvalConservation:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_seqIntervals:(0,2)__pyx_v_pIdentityMin:(0,2)__pyx_v_filterFun:(0,2)__pyx_v_kwargs:(0,2)__pyx_v_i:(0,5)__pyx_v_j:(0,5)__pyx_v_nl:(0,195)__pyx_v_types:r(0,2)__pyx_v_pIdentityMin0:(0,2)__pyx_v_targetID:(0,2)__pyx_v_l:(0,2)__pyx_v_seq:(0,2)__pyx_v_newIval:(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_5:r(0,5)__pyx_6:(0,2)__pyx_7:(0,185)__pyx_argnames:V(0,320):t(0,320)=ar(0,120);0;3;(0,8)item:r(0,2)item:r(0,2)item:r(0,2)r:r(0,2)r:r(0,5)r:r(0,2)j:r(0,2)r:r(0,5)j:r(0,2)r:r(0,2)j:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)___pyx_argnames.12782__pyx_f_4pygr_11cnestedlist_10NLMSASlice_groupBySequences:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_seqIntervals:(0,2)__pyx_v_sourceOnly:(0,2)__pyx_v_indelCut:(0,2)__pyx_v_seqGroups:(0,2)__pyx_v_minAligned:(0,2)__pyx_v_pMinAligned:(0,2)__pyx_v_seqMethod:(0,2)__pyx_v_kwargs:(0,2)__pyx_v_i:(0,5)__pyx_v_j:(0,5)__pyx_v_start:(0,5)__pyx_v_end:(0,5)__pyx_v_targetStart:(0,5)__pyx_v_targetEnd:(0,5)__pyx_v_ipos:(0,5)__pyx_v_id:r(0,5)__pyx_v_f:(0,321)float:t(0,321)=r(0,5);4;0;__pyx_v_nl:r(0,195)__pyx_v_result:(0,2)__pyx_v_mapping:(0,2)__pyx_v_seqs:(0,2)__pyx_v_bounds:r(0,2)__pyx_v_seq:(0,2)__pyx_v_ivals:(0,2)__pyx_v_isIndel:r(0,2)__pyx_v_ival:(0,2)__pyx_v_seqStart:(0,2)__pyx_v_maskStart:(0,2)__pyx_v_bound:(0,2)__pyx_v_isStart:(0,2)__pyx_v_mergeIntervals:(0,2)__pyx_v_pleaseClip:r(0,2)__pyx_r:r(0,2)__pyx_1:(0,5)__pyx_2:r(0,2)__pyx_3:r(0,2)__pyx_4:(0,2)__pyx_5:(0,2)__pyx_6:(0,2)__pyx_7:r(0,2)__pyx_8:r(0,2)__pyx_9:(0,5)__pyx_10:r(0,2)__pyx_11:r(0,185)__pyx_12:r(0,2)__pyx_argnames:V(0,322):t(0,322)=ar(0,120);0;7;(0,8)o:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)o:r(0,2)r:r(0,2)j:r(0,2)o:r(0,2)r:r(0,2)j:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)r:r(0,2)item:r(0,2)item:r(0,2)r:r(0,2)j:r(0,2)name:r(0,2)result:r(0,2)name:r(0,2)result:r(0,2)name:r(0,2)j:r(0,2)name:r(0,2)j:r(0,2)r:r(0,2)j:r(0,2)item:r(0,2)item:r(0,2)name:r(0,2)name:r(0,2)name:r(0,2)name:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)name:r(0,2)item:r(0,2)item:r(0,2)name:r(0,2)result:r(0,2)name:r(0,2)result:r(0,2)item:r(0,2)item:r(0,2)name:r(0,2)___pyx_argnames.13599__pyx_f_4pygr_11cnestedlist_10NLMSASlice_regions:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_dummyArg:(0,2)__pyx_v_kwargs:(0,2)__pyx_v_i:(0,5)__pyx_v_nl:(0,195)__pyx_v_ns_lpo:(0,194)__pyx_v_l:(0,2)__pyx_v_subslice:(0,2)__pyx_r:r(0,2)__pyx_2:r(0,2)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_6:r(0,185)__pyx_argnames:V(0,323):t(0,323)=ar(0,120);0;1;(0,8)i:r(0,185)o:r(0,2)type:r(0,228)i:r(0,185)o:r(0,2)j:r(0,2)type:r(0,228)type:r(0,228)___pyx_argnames.18190__pyx_f_4pygr_11cnestedlist_5NLMSA_readMAFfiles:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_mafFiles:(0,2)__pyx_v_maxint:(0,2)__pyx_v_i:r(0,5)__pyx_v_n:(0,5)__pyx_v_block_len:(0,5)__pyx_v_tmp:(0,292)__pyx_v_p:(0,8)__pyx_v_a_header:(0,324)__pyx_v_ifile:(0,159)__pyx_v_im:(0,325)__pyx_v_im_tmp:(0,130)__pyx_v_ns_lpo:(0,194):t(0,324)=ar(0,120);0;3;(0,54):t(0,325)=ar(0,120);0;4095;(0,130)__pyx_v_ns:(0,194)__pyx_v_build_ifile:(0,326)__pyx_v_nbuild:(0,327)__pyx_v_has_continuation:(0,5):t(0,326)=ar(0,120);0;4095;(0,159):t(0,327)=ar(0,120);0;4095;(0,5)__pyx_v_linecode_count:(0,328)__pyx_v_pythonStr:(0,2)__pyx_v_seqInfo:(0,2)__pyx_v_filename:(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:(0,185):t(0,328)=ar(0,120);0;255;(0,183)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_5:r(0,8)__pyx_6:(0,5)__pyx_7:(0,2)__pyx_8:(0,2)__pyx_9:(0,2)__pyx_argnames:V(0,329):t(0,329)=ar(0,120);0;2;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)i:r(0,185)o:r(0,2)r:r(0,2)type:r(0,228)i:r(0,185)o:r(0,2)r:r(0,2)j:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)i:r(0,185)o:r(0,2)r:r(0,2)j:r(0,2)type:r(0,228)item:r(0,2)item:r(0,2)type:r(0,228)item:r(0,2)item:r(0,2)name:r(0,2)result:r(0,2)type:(0,228)obj:(0,2)type:r(0,228)obj:r(0,2)type:(0,228)obj:(0,2)name:r(0,2)result:r(0,2)type:(0,228)obj:(0,2)name:r(0,2)name:r(0,2)result:r(0,2)name:r(0,2)type:r(0,228)obj:r(0,2)type:r(0,228)obj:r(0,2)___pyx_argnames.18644__pyx_f_4pygr_11cnestedlist_5NLMSA_readAxtNet:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_axtFiles:(0,2)__pyx_v_bidirectionalRule:(0,2)__pyx_v_i:(0,5)__pyx_v_j:r(0,5)__pyx_v_n:(0,5)__pyx_v_isrc:(0,5)__pyx_v_is_bidirectional:(0,5)__pyx_v_comment:(0,324)__pyx_v_src_prefix:(0,330)__pyx_v_dest_prefix:(0,330)__pyx_v_ifile:(0,159)__pyx_v_im:(0,325)__pyx_v_im_tmp:(0,130)__pyx_v_ns_src:(0,194):t(0,330)=ar(0,120);0;63;(0,54)__pyx_v_build_ifile:(0,326)__pyx_v_nbuild:(0,327)__pyx_v_pythonStr:(0,2)__pyx_v_seqInfo:(0,2)__pyx_v_string:r(0,2)__pyx_v_os:(0,2)__pyx_v_filename:(0,2)__pyx_v_t:(0,2)__pyx_r:r(0,2)__pyx_1:(0,185)__pyx_2:(0,2)__pyx_3:(0,2)__pyx_4:r(0,2)__pyx_5:r(0,8)__pyx_6:(0,5)__pyx_7:(0,2)__pyx_8:(0,2)__pyx_9:(0,2)__pyx_argnames:V(0,331):t(0,331)=ar(0,120);0;2;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)name:r(0,2)result:r(0,2)j:r(0,2)j:r(0,2)j:r(0,2)j:r(0,2)name:r(0,2)result:r(0,2)__pyx_f_4pygr_11cnestedlist_5NLMSA___getitem__:f(0,2)__pyx_v_self:p(0,2)__pyx_v_k:p(0,2)__pyx_v_id:(0,2)__pyx_v_ns:(0,2)__pyx_v_offset:(0,2)__pyx_v_i:(0,2)__pyx_v_l:(0,2)__pyx_v_myslice:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:(0,2)__pyx_3:r(0,5)__pyx_4:(0,2)__pyx_5:(0,2)__pyx_6:(0,2)__pyx_7:(0,2)__pyx_8:(0,2)__pyx_9:(0,2)__pyx_10:r(0,185)name:r(0,2)name:r(0,2)o:r(0,2)item:r(0,2)name:r(0,2)result:r(0,2)name:r(0,2)o:r(0,2)j:r(0,2)o:r(0,2)j:r(0,2)name:r(0,2)item:r(0,2)name:r(0,2)name:r(0,2)result:r(0,2)name:r(0,2)item:r(0,2)name:r(0,2)item:r(0,2)item:r(0,2)item:r(0,2)name:r(0,2)name:r(0,2)item:r(0,2)item:r(0,2)name:r(0,2)item:r(0,2)item:r(0,2)name:r(0,2)name:r(0,2)___pyx_argnames.8872__pyx_tp_new_4pygr_11cnestedlist_IntervalFileDBIterator:f(0,2)t:p(0,228)a:p(0,2)k:p(0,2)o:(0,2)t:r(0,228)__pyx_v_start:(0,5)__pyx_v_end:(0,5)__pyx_v_db:(0,126)__pyx_v_ns:(0,194)__pyx_v_nbuffer:(0,5)__pyx_v_rawIvals:(0,2)__pyx_v_i:(0,5)__pyx_v_ival:r(0,2)__pyx_r:r(0,5)__pyx_1:r(0,124)__pyx_2:r(0,5)__pyx_3:r(0,185)__pyx_4:r(0,125)__pyx_5:(0,2)type:r(0,228)obj:r(0,2)type:r(0,228)obj:r(0,2)j:r(0,2)type:r(0,228)obj:r(0,2)__pyx_v_start:(0,5)__pyx_v_end:(0,5)__pyx_v_db:(0,126)__pyx_v_ns:(0,194)__pyx_v_nbuffer:(0,5)__pyx_v_rawIvals:(0,2)__pyx_v_i:(0,5)__pyx_v_ival:r(0,2)__pyx_r:r(0,5)__pyx_1:r(0,124)__pyx_2:r(0,5)__pyx_3:r(0,185)__pyx_4:r(0,125)__pyx_5:(0,2)type:r(0,228)obj:r(0,2)type:r(0,228)obj:r(0,2)type:r(0,228)obj:r(0,2)__pyx_v_start:(0,5)__pyx_v_end:(0,5)__pyx_v_db:(0,126)__pyx_v_ns:(0,194)__pyx_v_nbuffer:(0,5)__pyx_v_rawIvals:(0,2)__pyx_v_i:(0,5)__pyx_v_ival:r(0,2)__pyx_r:r(0,5)__pyx_1:r(0,124)__pyx_2:r(0,5)__pyx_3:r(0,185)__pyx_4:r(0,125)__pyx_5:(0,2)j:r(0,2)j:r(0,2)j:r(0,2)j:r(0,2)j:r(0,2)j:r(0,2)j:r(0,2)j:r(0,2)j:r(0,2)___pyx_argnames.15094__pyx_f_4pygr_11cnestedlist_13NLMSASequence___init__:f(0,5)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_nl:(0,195)__pyx_v_filestem:(0,2)__pyx_v_seq:(0,2)__pyx_v_mode:(0,2)__pyx_v_is_union:(0,2)__pyx_v_length:(0,2)__pyx_v_types:(0,2)__pyx_v_lastLPO:r(0,2)__pyx_v_filename:(0,2)__pyx_v_errmsg:(0,2)__pyx_r:r(0,5)__pyx_1:(0,5)__pyx_2:(0,2)__pyx_3:(0,2)__pyx_4:(0,2)__pyx_5:(0,2)__pyx_6:(0,2)__pyx_7:(0,2)__pyx_8:(0,2)__pyx_9:(0,2)__pyx_10:(0,2)__pyx_11:(0,5)__pyx_12:r(0,185)__pyx_13:r(0,8)__pyx_argnames:V(0,332):t(0,332)=ar(0,120);0;6;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)type:r(0,228)type:r(0,228)type:r(0,228)name:r(0,2)result:r(0,2)o:r(0,2)name:r(0,2)result:r(0,2)o:r(0,2)j:r(0,2)o:r(0,2)j:r(0,2)name:r(0,2)result:r(0,2)name:r(0,2)name:r(0,2)result:r(0,2)name:r(0,2)___pyx_argnames.8273__pyx_f_4pygr_11cnestedlist_10IntervalDB_save_tuples:f(0,2)__pyx_v_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_l:(0,2)__pyx_v_kwargs:(0,2)__pyx_v_t:r(0,2)__pyx_r:r(0,2)__pyx_1:(0,2)__pyx_2:r(0,2)__pyx_3:r(0,185)__pyx_4:r(0,125)__pyx_6:r(0,2)__pyx_argnames:V(0,333):t(0,333)=ar(0,120);0;1;(0,8)j:r(0,2)j:r(0,2)j:r(0,2)j:r(0,2)j:r(0,2)j:r(0,2)j:r(0,2)j:r(0,2)j:r(0,2)j:r(0,2)__pyx_m:S(0,2)__pyx_b:S(0,2)__pyx_lineno:S(0,5)__pyx_filename:S(0,8)__pyx_f:S(0,233)__pyx_vtabptr_4pygr_11cnestedlist_IntervalDBIterator:S(0,220)__pyx_vtabptr_4pygr_11cnestedlist_NLMSASequence:S(0,202)__pyx_vtabptr_4pygr_11cnestedlist_IntervalFileDBIterator:S(0,123)__pyx_vtabptr_4pygr_11cnestedlist_NLMSA:S(0,203)__pyx_vtabptr_4pygr_11cnestedlist_NLMSASlice:S(0,193)__pyx_vtabptr_4pygr_11cnestedlist_NLMSANode:S(0,188)__pyx_ptype_4pygr_11cnestedlist_IntervalDB:S(0,228)__pyx_ptype_4pygr_11cnestedlist_IntervalDBIterator:S(0,228)__pyx_ptype_4pygr_11cnestedlist_IntervalFileDB:S(0,228)__pyx_ptype_4pygr_11cnestedlist_NLMSASequence:S(0,228)__pyx_ptype_4pygr_11cnestedlist_IntervalFileDBIterator:S(0,228)__pyx_ptype_4pygr_11cnestedlist_NLMSA:S(0,228)__pyx_ptype_4pygr_11cnestedlist_NLMSASlice:S(0,228)__pyx_ptype_4pygr_11cnestedlist_NLMSASliceLetters:S(0,228)__pyx_ptype_4pygr_11cnestedlist_NLMSANode:S(0,228)__pyx_ptype_4pygr_11cnestedlist_NLMSASliceIterator:S(0,228)__pyx_k1:S(0,334)__pyx_k2:S(0,335)__pyx_k3:S(0,336)__pyx_k4:S(0,337)__pyx_k5:S(0,338)__pyx_k6:S(0,339)__pyx_k7:S(0,340)__pyx_k8:S(0,341)__pyx_k9:S(0,342)__pyx_k10:S(0,343)__pyx_k11:S(0,344)__pyx_k12:S(0,345)__pyx_k13:S(0,346)__pyx_k14:S(0,347)__pyx_k15:S(0,348)__pyx_k16:S(0,349)__pyx_k17:S(0,350)__pyx_k18:S(0,351)__pyx_k19:S(0,352)__pyx_k20:S(0,353)__pyx_k21:S(0,354)__pyx_k22:S(0,355)__pyx_k23:S(0,356)__pyx_k24:S(0,357)__pyx_k25:S(0,358)__pyx_k26:S(0,359)__pyx_k27:S(0,360)__pyx_k28:S(0,361)__pyx_k29:S(0,362)__pyx_k30:S(0,363)__pyx_k31:S(0,364)__pyx_k32:S(0,365)__pyx_k33:S(0,366)__pyx_k34:S(0,367)__pyx_k35:S(0,368)__pyx_k36:S(0,369)__pyx_k37:S(0,370)__pyx_k38:S(0,371)__pyx_k39:S(0,372)__pyx_k40:S(0,373)__pyx_k41:S(0,374)__pyx_k42:S(0,375)__pyx_k43:S(0,376)__pyx_k44:S(0,377)__pyx_k45:S(0,378)__pyx_k46:S(0,379)__pyx_k47:S(0,380)__pyx_k48:S(0,381)__pyx_k49:S(0,382)__pyx_k50:S(0,383)__pyx_k51:S(0,384)__pyx_k52:S(0,385)__pyx_k53:S(0,386)__pyx_k54:S(0,387)__pyx_k55:S(0,388)__pyx_k56:S(0,389)__pyx_k57:S(0,390)__pyx_k58:S(0,391)__pyx_k59:S(0,392)__pyx_k60:S(0,393)__pyx_k61:S(0,394)__pyx_k62:S(0,395)__pyx_k63:S(0,396)__pyx_k64:S(0,397)__pyx_k65:S(0,398)__pyx_k66:S(0,399)__pyx_k67:S(0,400)__pyx_k68:S(0,401)__pyx_k69:S(0,402)__pyx_k70:S(0,403)__pyx_k71:S(0,404)__pyx_k72:S(0,405)__pyx_k73:S(0,406)__pyx_k74:S(0,407)__pyx_k75:S(0,408)__pyx_k76:S(0,409)__pyx_k77:S(0,410)__pyx_k78:S(0,411)__pyx_k79:S(0,412)__pyx_k80:S(0,413)__pyx_k81:S(0,414)__pyx_k82:S(0,415)__pyx_k83:S(0,416)__pyx_k84:S(0,417)__pyx_k85:S(0,418)__pyx_k86:S(0,419)__pyx_k87:S(0,420)__pyx_k88:S(0,421)__pyx_k89:S(0,422)__pyx_k90:S(0,423)__pyx_k91:S(0,424)__pyx_k92:S(0,425)__pyx_k93:S(0,426)__pyx_k94:S(0,427)__pyx_k95:S(0,428)__pyx_k96:S(0,429)__pyx_k97:S(0,430)__pyx_k98:S(0,431)__pyx_k99:S(0,432)__pyx_k100:S(0,433)__pyx_k101:S(0,434)__pyx_k102:S(0,435)__pyx_k103:S(0,436)__pyx_k104:S(0,437)__pyx_k105:S(0,438)__pyx_k106:S(0,439)__pyx_k107:S(0,440)__pyx_k108:S(0,441)__pyx_k109:S(0,442)__pyx_k110:S(0,443)__pyx_k111:S(0,444)__pyx_k112:S(0,445)__pyx_k113:S(0,446)__pyx_k114:S(0,447)__pyx_k115:S(0,448)__pyx_k116:S(0,449)__pyx_k117:S(0,450)__pyx_k118:S(0,451)__pyx_k119:S(0,452)__pyx_k120:S(0,453)__pyx_k121:S(0,454)__pyx_k122:S(0,455)__pyx_k123:S(0,456)__pyx_k124:S(0,457)__pyx_k125:S(0,458)__pyx_k126:S(0,459)__pyx_k127:S(0,460)__pyx_k128:S(0,461)__pyx_k129:S(0,462)__pyx_k130:S(0,463)__pyx_k131:S(0,464)__pyx_k132:S(0,465)__pyx_k133:S(0,466)__pyx_k134:S(0,467)__pyx_k135:S(0,468)__pyx_k136:S(0,469)__pyx_k137:S(0,470)__pyx_k138:S(0,471)__pyx_k139:S(0,472)__pyx_k140:S(0,473)__pyx_k141:S(0,474)__pyx_k142:S(0,475)__pyx_k143:S(0,476)__pyx_k144:S(0,477)__pyx_k145:S(0,478)__pyx_k146:S(0,479)__pyx_k147:S(0,480)__pyx_k148:S(0,481)__pyx_k149:S(0,482)__pyx_k150:S(0,483)__pyx_k151:S(0,484)__pyx_k152:S(0,485)__pyx_k153:S(0,486)__pyx_k154:S(0,487)__pyx_k155:S(0,488)__pyx_k156:S(0,489)__pyx_k157:S(0,490)__pyx_k158:S(0,491)__pyx_k159:S(0,492)__pyx_k160:S(0,493)__pyx_k161:S(0,494)__pyx_k162:S(0,495)__pyx_k163:S(0,496)__pyx_k164:S(0,497)__pyx_k165:S(0,498)__pyx_k166:S(0,499)__pyx_k167:S(0,500)__pyx_k168:S(0,501)__pyx_k169:S(0,502)__pyx_k170:S(0,503)__pyx_k171:S(0,504)__pyx_k172:S(0,505)__pyx_k173:S(0,506)__pyx_k174:S(0,507)__pyx_k175:S(0,508)__pyx_k176:S(0,509)__pyx_k177:S(0,510)__pyx_k178:S(0,511)__pyx_k179:S(0,512)__pyx_k180:S(0,513)__pyx_k181:S(0,514)__pyx_k182:S(0,515)__pyx_k183:S(0,516)__pyx_k184:S(0,517)__pyx_k185:S(0,518)__pyx_k186:S(0,519)__pyx_k187:S(0,520)__pyx_k188:S(0,521)__pyx_k189:S(0,522)__pyx_k190:S(0,523)__pyx_k191:S(0,524)__pyx_k192:S(0,525)__pyx_k193:S(0,526)__pyx_k194:S(0,527)__pyx_k195:S(0,528)__pyx_k196:S(0,529)__pyx_k197:S(0,530)__pyx_k198:S(0,531)__pyx_k199:S(0,532)__pyx_k200:S(0,533)__pyx_k201:S(0,534)__pyx_k202:S(0,535)__pyx_k203:S(0,536)__pyx_k204:S(0,537)__pyx_k205:S(0,538)__pyx_k206:S(0,539)__pyx_k207:S(0,540)__pyx_k208:S(0,541)__pyx_k209:S(0,542)__pyx_k210:S(0,543)__pyx_k211:S(0,544)__pyx_k212:S(0,545)__pyx_k213:S(0,546)__pyx_k214:S(0,547)__pyx_k215:S(0,548)__pyx_k216:S(0,549)__pyx_k217:S(0,550)__pyx_k218:S(0,551)__pyx_k219:S(0,552)__pyx_k220:S(0,553)__pyx_k221:S(0,554)__pyx_k222:S(0,555)__pyx_k223:S(0,556)__pyx_k224:S(0,557)__pyx_k225:S(0,558)__pyx_k226:S(0,559)__pyx_k227:S(0,560)__pyx_k228:S(0,561)__pyx_k229:S(0,562)__pyx_k230:S(0,563)__pyx_k231:S(0,564)__pyx_k232:S(0,565)__pyx_k233:S(0,566)__pyx_k234:S(0,567)__pyx_k235:S(0,568)__pyx_k236:S(0,569)__pyx_k237:S(0,570)__pyx_k238:S(0,571)__pyx_k239:S(0,572)__pyx_k240:S(0,573)__pyx_k241:S(0,574)__pyx_k242:S(0,575)__pyx_k243:S(0,576)__pyx_k244:S(0,577)__pyx_k245:S(0,578)__pyx_k246:S(0,579)__pyx_k247:S(0,580)__pyx_k248:S(0,581)__pyx_k249:S(0,582)__pyx_k250:S(0,583)__pyx_k251:S(0,584)__pyx_k252:S(0,585)__pyx_n_AttributeError:S(0,2)__pyx_n_BuildMSASlice:S(0,2)__pyx_n_ClassicUnpickler:S(0,2)__pyx_n_DictQueue:S(0,2)__pyx_n_EmptyAlignmentError:S(0,2)__pyx_n_EmptySlice:S(0,2)__pyx_n_EmptySliceError:S(0,2)__pyx_n_FloatType:S(0,2)__pyx_n_LetterEdge:S(0,2)__pyx_n_NLMSASeqDict:S(0,2)__pyx_n_NLMSASequence:S(0,2)__pyx_n_NLMSA_LPO_Internal:S(0,2)__pyx_n_NLMSA_UNION_Internal:S(0,2)__pyx_n_NLMSAindex:S(0,2)__pyx_n_PrefixUnionDict:S(0,2)__pyx_n_RLIMIT_NOFILE:S(0,2)__pyx_n_Seq2SeqEdge:S(0,2)__pyx_n_SeqCacheOwner:S(0,2)__pyx_n_SeqPath:S(0,2)__pyx_n_SeqPrefixUnionDict:S(0,2)__pyx_n_StringType:S(0,2)__pyx_n___class__:S(0,2)__pyx_n___getstate__:S(0,2)__pyx_n___iadd__:S(0,2)__pyx_n___init__:S(0,2)__pyx_n__cache_max:S(0,2)__pyx_n__persistent_id:S(0,2)__pyx_n_absoluteSlice:S(0,2)__pyx_n_addAll:S(0,2)__pyx_n_addToSeqlist:S(0,2)__pyx_n_add_aligned_intervals:S(0,2)__pyx_n_advanceStartStop:S(0,2)__pyx_n_append:S(0,2)__pyx_n_basename:S(0,2)__pyx_n_build:S(0,2)__pyx_n_buildFiles:S(0,2)__pyx_n_buildFromUnsortedFile:S(0,2)__pyx_n_buildInMemory:S(0,2)__pyx_n_cacheHint:S(0,2)__pyx_n_cache_reference:S(0,2)__pyx_n_check_nonempty:S(0,2)__pyx_n_chr:S(0,2)__pyx_n_classutil:S(0,2)__pyx_n_clip_interval_list:S(0,2)__pyx_n_close:S(0,2)__pyx_n_cmp:S(0,2)__pyx_n_conservationFilter:S(0,2)__pyx_n_conservedSegment:S(0,2)__pyx_n_doSlice:S(0,2)__pyx_n_dump:S(0,2)__pyx_n_edges:S(0,2)__pyx_n_end:S(0,2)__pyx_n_filterIvalConservation:S(0,2)__pyx_n_filterSeqs:S(0,2)__pyx_n_forceLoad:S(0,2)__pyx_n_generate_nlmsa_edges:S(0,2)__pyx_n_get:S(0,2)__pyx_n_getID:S(0,2)__pyx_n_getIDcoords:S(0,2)__pyx_n_getSeq:S(0,2)__pyx_n_getSeqID:S(0,2)__pyx_n_groupByIntervals:S(0,2)__pyx_n_groupBySequences:S(0,2)__pyx_n_id:S(0,2)__pyx_n_im:S(0,2)__pyx_n_indelCut:S(0,2)__pyx_n_info:S(0,2)__pyx_n_initLPO:S(0,2)__pyx_n_inverseDB:S(0,2)__pyx_n_ipos:S(0,2)__pyx_n_is_bidirectional:S(0,2)__pyx_n_is_lpo:S(0,2)__pyx_n_is_union:S(0,2)__pyx_n_items:S(0,2)__pyx_n_iteritems:S(0,2)__pyx_n_join:S(0,2)__pyx_n_keys:S(0,2)__pyx_n_length:S(0,2)__pyx_n_load:S(0,2)__pyx_n_logger:S(0,2)__pyx_n_mapping:S(0,2)__pyx_n_maxAlignSize:S(0,2)__pyx_n_maxgap:S(0,2)__pyx_n_maxinsert:S(0,2)__pyx_n_memory:S(0,2)__pyx_n_mergeAll:S(0,2)__pyx_n_mergeSeq:S(0,2)__pyx_n_minAlignSize:S(0,2)__pyx_n_minAligned:S(0,2)__pyx_n_mininsert:S(0,2)__pyx_n_msaSlice:S(0,2)__pyx_n_n:S(0,2)__pyx_n_name:S(0,2)__pyx_n_newSequence:S(0,2)__pyx_n_nextID:S(0,2)__pyx_n_nlmsaSequence:S(0,2)__pyx_n_nlmsaSlice:S(0,2)__pyx_n_nlmsa_utils:S(0,2)__pyx_n_nodeEdges:S(0,2)__pyx_n_noname:S(0,2)__pyx_n_ns:S(0,2)__pyx_n_offset:S(0,2)__pyx_n_onDemand:S(0,2)__pyx_n_open:S(0,2)__pyx_n_open_shelve:S(0,2)__pyx_n_orientation:S(0,2)__pyx_n_os:S(0,2)__pyx_n_pAlignedMin:S(0,2)__pyx_n_pIdentityMin:S(0,2)__pyx_n_pMinAligned:S(0,2)__pyx_n_pairwiseMode:S(0,2)__pyx_n_path:S(0,2)__pyx_n_pathForward:S(0,2)__pyx_n_pathstem:S(0,2)__pyx_n_pickle:S(0,2)__pyx_n_prefixDict:S(0,2)__pyx_n_prune_self_mappings:S(0,2)__pyx_n_pygr:S(0,2)__pyx_n_r:S(0,2)__pyx_n_rU:S(0,2)__pyx_n_rawIvals:S(0,2)__pyx_n_rb:S(0,2)__pyx_n_readAxtNet:S(0,2)__pyx_n_readMAFfiles:S(0,2)__pyx_n_read_attrs:S(0,2)__pyx_n_read_indexes:S(0,2)__pyx_n_read_seq_dict:S(0,2)__pyx_n_relativeSlice:S(0,2)__pyx_n_remove:S(0,2)__pyx_n_reopenReadOnly:S(0,2)__pyx_n_resource:S(0,2)__pyx_n_runBuildMethod:S(0,2)__pyx_n_saveSeq:S(0,2)__pyx_n_save_seq_dict:S(0,2)__pyx_n_save_tuples:S(0,2)__pyx_n_seq:S(0,2)__pyx_n_seqBounds:S(0,2)__pyx_n_seqDict:S(0,2)__pyx_n_seqInfoDict:S(0,2)__pyx_n_seqInterval:S(0,2)__pyx_n_seqdb:S(0,2)__pyx_n_seqlist:S(0,2)__pyx_n_sequence:S(0,2)__pyx_n_setrlimit:S(0,2)__pyx_n_sort:S(0,2)__pyx_n_sourceDB:S(0,2)__pyx_n_sourceOnly:S(0,2)__pyx_n_sourcePath:S(0,2)__pyx_n_split:S(0,2)__pyx_n_splitLPOintervals:S(0,2)__pyx_n_start:S(0,2)__pyx_n_startswith:S(0,2)__pyx_n_stop:S(0,2)__pyx_n_string:S(0,2)__pyx_n_strip:S(0,2)__pyx_n_sys:S(0,2)__pyx_n_targetDB:S(0,2)__pyx_n_target_start:S(0,2)__pyx_n_types:S(0,2)__pyx_n_w:S(0,2)__pyx_n_warn:S(0,2)__pyx_n_wb:S(0,2)__pyx_n_worldbase:S(0,2)__pyx_n_write:S(0,2)__pyx_n_write_binaries:S(0,2)__pyx_n_xmlrpc:S(0,2)__pyx_k3p:S(0,2)__pyx_k5p:S(0,2)__pyx_k7p:S(0,2)__pyx_k8p:S(0,2)__pyx_k11p:S(0,2)__pyx_k13p:S(0,2)__pyx_k14p:S(0,2)__pyx_k15p:S(0,2)__pyx_k17p:S(0,2)__pyx_k26p:S(0,2)__pyx_k27p:S(0,2)__pyx_k35p:S(0,2)__pyx_k47p:S(0,2)__pyx_k53p:S(0,2)__pyx_k83p:S(0,2)__pyx_k86p:S(0,2)__pyx_k88p:S(0,2)__pyx_k89p:S(0,2)__pyx_k90p:S(0,2)__pyx_k99p:S(0,2)__pyx_k104p:S(0,2)__pyx_k106p:S(0,2)__pyx_k107p:S(0,2)__pyx_k113p:S(0,2)__pyx_k114p:S(0,2)__pyx_k126p:S(0,2)__pyx_k139p:S(0,2)__pyx_k144p:S(0,2)__pyx_k149p:S(0,2)__pyx_k153p:S(0,2)__pyx_k154p:S(0,2)__pyx_k156p:S(0,2)__pyx_k160p:S(0,2)__pyx_k165p:S(0,2)__pyx_k168p:S(0,2)__pyx_k171p:S(0,2)__pyx_k174p:S(0,2)__pyx_k176p:S(0,2)__pyx_k177p:S(0,2)__pyx_k180p:S(0,2)__pyx_k182p:S(0,2)__pyx_k183p:S(0,2)__pyx_k185p:S(0,2)__pyx_k186p:S(0,2)__pyx_k188p:S(0,2)__pyx_k192p:S(0,2)__pyx_k193p:S(0,2)__pyx_k194p:S(0,2)__pyx_k196p:S(0,2)__pyx_k197p:S(0,2)__pyx_k198p:S(0,2)__pyx_k199p:S(0,2)__pyx_k203p:S(0,2)__pyx_k206p:S(0,2)__pyx_k209p:S(0,2)__pyx_k211p:S(0,2)__pyx_k213p:S(0,2)__pyx_k214p:S(0,2)__pyx_k216p:S(0,2)__pyx_k221p:S(0,2)__pyx_k224p:S(0,2)__pyx_k225p:S(0,2)__pyx_k229p:S(0,2)__pyx_k230p:S(0,2)__pyx_k232p:S(0,2)__pyx_k233p:S(0,2)__pyx_k235p:S(0,2)__pyx_k239p:S(0,2)__pyx_k241p:S(0,2)__pyx_k246p:S(0,2)__pyx_k247p:S(0,2)__pyx_k248p:S(0,2)__pyx_string_tab:S(0,586)__pyx_d1:S(0,2)__pyx_d2:S(0,2)__pyx_d3:S(0,2)__pyx_d4:S(0,2)__pyx_d5:S(0,126):t(0,334)=ar(0,120);0;1;(0,54):t(0,335)=ar(0,120);0;14;(0,54):t(0,336)=ar(0,120);0;22;(0,54):t(0,337)=ar(0,120);0;5;(0,54):t(0,338)=ar(0,120);0;34;(0,54):t(0,339)=ar(0,120);0;2;(0,54):t(0,340)=ar(0,120);0;15;(0,54):t(0,341)=ar(0,120);0;27;(0,54):t(0,342)=ar(0,120);0;14;(0,54):t(0,343)=ar(0,120);0;6;(0,54):t(0,344)=ar(0,120);0;33;(0,54):t(0,345)=ar(0,120);0;9;(0,54):t(0,346)=ar(0,120);0;13;(0,54):t(0,347)=ar(0,120);0;56;(0,54):t(0,348)=ar(0,120);0;21;(0,54):t(0,349)=ar(0,120);0;4;(0,54):t(0,350)=ar(0,120);0;37;(0,54):t(0,351)=ar(0,120);0;9;(0,54):t(0,352)=ar(0,120);0;5;(0,54):t(0,353)=ar(0,120);0;7;(0,54):t(0,354)=ar(0,120);0;8;(0,54):t(0,355)=ar(0,120);0;14;(0,54):t(0,356)=ar(0,120);0;2;(0,54):t(0,357)=ar(0,120);0;11;(0,54):t(0,358)=ar(0,120);0;15;(0,54):t(0,359)=ar(0,120);0;29;(0,54):t(0,360)=ar(0,120);0;35;(0,54):t(0,361)=ar(0,120);0;8;(0,54):t(0,362)=ar(0,120);0;6;(0,54):t(0,363)=ar(0,120);0;10;(0,54):t(0,364)=ar(0,120);0;9;(0,54):t(0,365)=ar(0,120);0;8;(0,54):t(0,366)=ar(0,120);0;13;(0,54):t(0,367)=ar(0,120);0;2;(0,54):t(0,368)=ar(0,120);0;36;(0,54):t(0,369)=ar(0,120);0;11;(0,54):t(0,370)=ar(0,120);0;6;(0,54):t(0,371)=ar(0,120);0;15;(0,54):t(0,372)=ar(0,120);0;11;(0,54):t(0,373)=ar(0,120);0;16;(0,54):t(0,374)=ar(0,120);0;8;(0,54):t(0,375)=ar(0,120);0;16;(0,54):t(0,376)=ar(0,120);0;8;(0,54):t(0,377)=ar(0,120);0;11;(0,54):t(0,378)=ar(0,120);0;5;(0,54):t(0,379)=ar(0,120);0;4;(0,54):t(0,380)=ar(0,120);0;121;(0,54):t(0,381)=ar(0,120);0;5;(0,54):t(0,382)=ar(0,120);0;11;(0,54):t(0,383)=ar(0,120);0;13;(0,54):t(0,384)=ar(0,120);0;9;(0,54):t(0,385)=ar(0,120);0;12;(0,54):t(0,386)=ar(0,120);0;32;(0,54):t(0,387)=ar(0,120);0;10;(0,54):t(0,388)=ar(0,120);0;11;(0,54):t(0,389)=ar(0,120);0;5;(0,54):t(0,390)=ar(0,120);0;4;(0,54):t(0,391)=ar(0,120);0;9;(0,54):t(0,392)=ar(0,120);0;8;(0,54):t(0,393)=ar(0,120);0;6;(0,54):t(0,394)=ar(0,120);0;9;(0,54):t(0,395)=ar(0,120);0;9;(0,54):t(0,396)=ar(0,120);0;10;(0,54):t(0,397)=ar(0,120);0;11;(0,54):t(0,398)=ar(0,120);0;12;(0,54):t(0,399)=ar(0,120);0;12;(0,54):t(0,400)=ar(0,120);0;12;(0,54):t(0,401)=ar(0,120);0;22;(0,54):t(0,402)=ar(0,120);0;13;(0,54):t(0,403)=ar(0,120);0;16;(0,54):t(0,404)=ar(0,120);0;18;(0,54):t(0,405)=ar(0,120);0;5;(0,54):t(0,406)=ar(0,120);0;18;(0,54):t(0,407)=ar(0,120);0;9;(0,54):t(0,408)=ar(0,120);0;7;(0,54):t(0,409)=ar(0,120);0;4;(0,54):t(0,410)=ar(0,120);0;10;(0,54):t(0,411)=ar(0,120);0;10;(0,54):t(0,412)=ar(0,120);0;11;(0,54):t(0,413)=ar(0,120);0;8;(0,54):t(0,414)=ar(0,120);0;9;(0,54):t(0,415)=ar(0,120);0;5;(0,54):t(0,416)=ar(0,120);0;39;(0,54):t(0,417)=ar(0,120);0;3;(0,54):t(0,418)=ar(0,120);0;13;(0,54):t(0,419)=ar(0,120);0;13;(0,54):t(0,420)=ar(0,120);0;16;(0,54):t(0,421)=ar(0,120);0;25;(0,54):t(0,422)=ar(0,120);0;15;(0,54):t(0,423)=ar(0,120);0;26;(0,54):t(0,424)=ar(0,120);0;4;(0,54):t(0,425)=ar(0,120);0;10;(0,54):t(0,426)=ar(0,120);0;2;(0,54):t(0,427)=ar(0,120);0;3;(0,54):t(0,428)=ar(0,120);0;10;(0,54):t(0,429)=ar(0,120);0;10;(0,54):t(0,430)=ar(0,120);0;4;(0,54):t(0,431)=ar(0,120);0;4;(0,54):t(0,432)=ar(0,120);0;49;(0,54):t(0,433)=ar(0,120);0;6;(0,54):t(0,434)=ar(0,120);0;6;(0,54):t(0,435)=ar(0,120);0;6;(0,54):t(0,436)=ar(0,120);0;1;(0,54):t(0,437)=ar(0,120);0;6;(0,54):t(0,438)=ar(0,120);0;2;(0,54):t(0,439)=ar(0,120);0;30;(0,54):t(0,440)=ar(0,120);0;24;(0,54):t(0,441)=ar(0,120);0;21;(0,54):t(0,442)=ar(0,120);0;14;(0,54):t(0,443)=ar(0,120);0;2;(0,54):t(0,444)=ar(0,120);0;6;(0,54):t(0,445)=ar(0,120);0;11;(0,54):t(0,446)=ar(0,120);0;29;(0,54):t(0,447)=ar(0,120);0;48;(0,54):t(0,448)=ar(0,120);0;11;(0,54):t(0,449)=ar(0,120);0;8;(0,54):t(0,450)=ar(0,120);0;8;(0,54):t(0,451)=ar(0,120);0;7;(0,54):t(0,452)=ar(0,120);0;8;(0,54):t(0,453)=ar(0,120);0;9;(0,54):t(0,454)=ar(0,120);0;13;(0,54):t(0,455)=ar(0,120);0;12;(0,54):t(0,456)=ar(0,120);0;7;(0,54):t(0,457)=ar(0,120);0;8;(0,54):t(0,458)=ar(0,120);0;8;(0,54):t(0,459)=ar(0,120);0;50;(0,54):t(0,460)=ar(0,120);0;13;(0,54):t(0,461)=ar(0,120);0;12;(0,54):t(0,462)=ar(0,120);0;10;(0,54):t(0,463)=ar(0,120);0;12;(0,54):t(0,464)=ar(0,120);0;10;(0,54):t(0,465)=ar(0,120);0;5;(0,54):t(0,466)=ar(0,120);0;18;(0,54):t(0,467)=ar(0,120);0;6;(0,54):t(0,468)=ar(0,120);0;7;(0,54):t(0,469)=ar(0,120);0;21;(0,54):t(0,470)=ar(0,120);0;5;(0,54):t(0,471)=ar(0,120);0;6;(0,54):t(0,472)=ar(0,120);0;15;(0,54):t(0,473)=ar(0,120);0;9;(0,54):t(0,474)=ar(0,120);0;16;(0,54):t(0,475)=ar(0,120);0;9;(0,54):t(0,476)=ar(0,120);0;12;(0,54):t(0,477)=ar(0,120);0;33;(0,54):t(0,478)=ar(0,120);0;8;(0,54):t(0,479)=ar(0,120);0;7;(0,54):t(0,480)=ar(0,120);0;9;(0,54):t(0,481)=ar(0,120);0;8;(0,54):t(0,482)=ar(0,120);0;11;(0,54):t(0,483)=ar(0,120);0;2;(0,54):t(0,484)=ar(0,120);0;10;(0,54):t(0,485)=ar(0,120);0;5;(0,54):t(0,486)=ar(0,120);0;1;(0,54):t(0,487)=ar(0,120);0;23;(0,54):t(0,488)=ar(0,120);0;18;(0,54):t(0,489)=ar(0,120);0;38;(0,54):t(0,490)=ar(0,120);0;8;(0,54):t(0,491)=ar(0,120);0;12;(0,54):t(0,492)=ar(0,120);0;6;(0,54):t(0,493)=ar(0,120);0;9;(0,54):t(0,494)=ar(0,120);0;4;(0,54):t(0,495)=ar(0,120);0;16;(0,54):t(0,496)=ar(0,120);0;12;(0,54):t(0,497)=ar(0,120);0;6;(0,54):t(0,498)=ar(0,120);0;39;(0,54):t(0,499)=ar(0,120);0;6;(0,54):t(0,500)=ar(0,120);0;4;(0,54):t(0,501)=ar(0,120);0;260;(0,54):t(0,502)=ar(0,120);0;13;(0,54):t(0,503)=ar(0,120);0;3;(0,54):t(0,504)=ar(0,120);0;57;(0,54):t(0,505)=ar(0,120);0;7;(0,54):t(0,506)=ar(0,120);0;10;(0,54):t(0,507)=ar(0,120);0;54;(0,54):t(0,508)=ar(0,120);0;17;(0,54):t(0,509)=ar(0,120);0;43;(0,54):t(0,510)=ar(0,120);0;30;(0,54):t(0,511)=ar(0,120);0;20;(0,54):t(0,512)=ar(0,120);0;11;(0,54):t(0,513)=ar(0,120);0;127;(0,54):t(0,514)=ar(0,120);0;2;(0,54):t(0,515)=ar(0,120);0;21;(0,54):t(0,516)=ar(0,120);0;22;(0,54):t(0,517)=ar(0,120);0;5;(0,54):t(0,518)=ar(0,120);0;31;(0,54):t(0,519)=ar(0,120);0;38;(0,54):t(0,520)=ar(0,120);0;4;(0,54):t(0,521)=ar(0,120);0;53;(0,54):t(0,522)=ar(0,120);0;3;(0,54):t(0,523)=ar(0,120);0;1;(0,54):t(0,524)=ar(0,120);0;6;(0,54):t(0,525)=ar(0,120);0;7;(0,54):t(0,526)=ar(0,120);0;24;(0,54):t(0,527)=ar(0,120);0;8;(0,54):t(0,528)=ar(0,120);0;8;(0,54):t(0,529)=ar(0,120);0;1;(0,54):t(0,530)=ar(0,120);0;4;(0,54):t(0,531)=ar(0,120);0;82;(0,54):t(0,532)=ar(0,120);0;41;(0,54):t(0,533)=ar(0,120);0;14;(0,54):t(0,534)=ar(0,120);0;10;(0,54):t(0,535)=ar(0,120);0;5;(0,54):t(0,536)=ar(0,120);0;12;(0,54):t(0,537)=ar(0,120);0;20;(0,54):t(0,538)=ar(0,120);0;19;(0,54):t(0,539)=ar(0,120);0;16;(0,54):t(0,540)=ar(0,120);0;3;(0,54):t(0,541)=ar(0,120);0;4;(0,54):t(0,542)=ar(0,120);0;18;(0,54):t(0,543)=ar(0,120);0;13;(0,54):t(0,544)=ar(0,120);0;321;(0,54):t(0,545)=ar(0,120);0;13;(0,54):t(0,546)=ar(0,120);0;30;(0,54):t(0,547)=ar(0,120);0;4;(0,54):t(0,548)=ar(0,120);0;11;(0,54):t(0,549)=ar(0,120);0;10;(0,54):t(0,550)=ar(0,120);0;10;(0,54):t(0,551)=ar(0,120);0;4;(0,54):t(0,552)=ar(0,120);0;14;(0,54):t(0,553)=ar(0,120);0;7;(0,54):t(0,554)=ar(0,120);0;308;(0,54):t(0,555)=ar(0,120);0;3;(0,54):t(0,556)=ar(0,120);0;27;(0,54):t(0,557)=ar(0,120);0;24;(0,54):t(0,558)=ar(0,120);0;399;(0,54):t(0,559)=ar(0,120);0;18;(0,54):t(0,560)=ar(0,120);0;18;(0,54):t(0,561)=ar(0,120);0;16;(0,54):t(0,562)=ar(0,120);0;21;(0,54):t(0,563)=ar(0,120);0;23;(0,54):t(0,564)=ar(0,120);0;26;(0,54):t(0,565)=ar(0,120);0;16;(0,54):t(0,566)=ar(0,120);0;0;(0,54):t(0,567)=ar(0,120);0;4;(0,54):t(0,568)=ar(0,120);0;42;(0,54):t(0,569)=ar(0,120);0;4;(0,54):t(0,570)=ar(0,120);0;9;(0,54):t(0,571)=ar(0,120);0;1;(0,54):t(0,572)=ar(0,120);0;7;(0,54):t(0,573)=ar(0,120);0;17;(0,54):t(0,574)=ar(0,120);0;131;(0,54):t(0,575)=ar(0,120);0;15;(0,54):t(0,576)=ar(0,120);0;17;(0,54):t(0,577)=ar(0,120);0;10;(0,54):t(0,578)=ar(0,120);0;13;(0,54):t(0,579)=ar(0,120);0;21;(0,54):t(0,580)=ar(0,120);0;27;(0,54):t(0,581)=ar(0,120);0;3;(0,54):t(0,582)=ar(0,120);0;52;(0,54):t(0,583)=ar(0,120);0;60;(0,54):t(0,584)=ar(0,120);0;6;(0,54):t(0,585)=ar(0,120);0;19;(0,54):t(0,586)=ar(0,120);0;238;(0,295)__pyx_d6:S(0,194)__pyx_d7:S(0,5)__pyx_d8:S(0,2)__pyx_d9:S(0,2)__pyx_d10:S(0,2)__pyx_d11:S(0,5)__pyx_d12:S(0,5)__pyx_d13:S(0,2)__pyx_d14:S(0,2)__pyx_d15:S(0,2)__pyx_d16:S(0,2)__pyx_d17:S(0,5)__pyx_d18:S(0,5)__pyx_d19:S(0,5)__pyx_d20:S(0,2)__pyx_d21:S(0,2)__pyx_d22:S(0,2)__pyx_d23:S(0,2)__pyx_d24:S(0,2)__pyx_d25:S(0,2)__pyx_d26:S(0,2)__pyx_d27:S(0,2)__pyx_d28:S(0,2)__pyx_d29:S(0,2)__pyx_d30:S(0,2)__pyx_d31:S(0,2)__pyx_d32:S(0,2)__pyx_d33:S(0,2)__pyx_d34:S(0,2)__pyx_d35:S(0,2)__pyx_d36:S(0,2)__pyx_d37:S(0,2)__pyx_d38:S(0,2)__pyx_d39:S(0,5)__pyx_d40:S(0,5)__pyx_d41:S(0,2)__pyx_d42:S(0,2)__pyx_d43:S(0,2)__pyx_d44:S(0,2)__pyx_d45:S(0,2)__pyx_d46:S(0,2)__pyx_d47:S(0,2)__pyx_d48:S(0,2)__pyx_d49:S(0,2)__pyx_d50:S(0,2)__pyx_d51:S(0,2)__pyx_d52:S(0,2)__pyx_d53:S(0,2)__pyx_d54:S(0,2)__pyx_d55:S(0,2)__pyx_d56:S(0,2)__pyx_d57:S(0,2)__pyx_d58:S(0,2)__pyx_d59:S(0,2)__pyx_d60:S(0,2)__pyx_d61:S(0,2)__pyx_d62:S(0,2)__pyx_d63:S(0,2)__pyx_d64:S(0,2)__pyx_d65:S(0,2)__pyx_d66:S(0,2)__pyx_d67:S(0,2)__pyx_d68:S(0,2)__pyx_doc_4pygr_11cnestedlist_10IntervalDB_save_tuples:S(0,587)__pyx_doc_4pygr_11cnestedlist_10IntervalDB_runBuildMethod:S(0,588)__pyx_doc_4pygr_11cnestedlist_10IntervalDB_buildFromUnsortedFile:S(0,589)__pyx_doc_4pygr_11cnestedlist_22IntervalFileDBIterator_mergeSeq:S(0,590)__pyx_doc_4pygr_11cnestedlist_17NLMSASliceLetters_items:S(0,591)__pyx_doc_4pygr_11cnestedlist_10NLMSASlice_edges:S(0,592)__pyx_doc_4pygr_11cnestedlist_10NLMSASlice_items:S(0,593)__pyx_doc_4pygr_11cnestedlist_10NLMSASlice_keys:S(0,594)__pyx_doc_4pygr_11cnestedlist_10NLMSASlice_matchIntervals:S(0,595)__pyx_doc_4pygr_11cnestedlist_10NLMSASlice_findSeqEnds:S(0,596)__pyx_doc_4pygr_11cnestedlist_10NLMSASlice_generateSeqEnds:S(0,597)__pyx_doc_4pygr_11cnestedlist_10NLMSASlice_groupByIntervals:S(0,598)__pyx_doc_4pygr_11cnestedlist_10NLMSASlice_groupBySequences:S(0,599)__pyx_doc_4pygr_11cnestedlist_10NLMSASlice_clip_interval_list:S(0,600)__pyx_doc_4pygr_11cnestedlist_10NLMSASlice_split:S(0,601)__pyx_doc_4pygr_11cnestedlist_10NLMSASlice_regions:S(0,602)__pyx_doc_4pygr_11cnestedlist_10NLMSASlice_rawIvals:S(0,603)__pyx_doc_4pygr_11cnestedlist_9NLMSANode_getSeqPos:S(0,604)__pyx_doc_4pygr_11cnestedlist_9NLMSANode_getEdgeSeqs:S(0,605)__pyx_doc_4pygr_11cnestedlist_9NLMSANode_nodeEdges:S(0,606)__pyx_doc_4pygr_11cnestedlist_13NLMSASequence_forceLoad:S(0,607)__pyx_doc_4pygr_11cnestedlist_13NLMSASequence_close:S(0,608)__pyx_doc_4pygr_11cnestedlist_13NLMSASequence_buildFiles:S(0,609)__pyx_doc_4pygr_11cnestedlist_5NLMSA_close:S(0,610)__pyx_doc_4pygr_11cnestedlist_5NLMSA_read_indexes:S(0,611)__pyx_doc_4pygr_11cnestedlist_5NLMSA_read_attrs:S(0,612)__pyx_doc_4pygr_11cnestedlist_5NLMSA_addToSeqlist:S(0,613)__pyx_doc_4pygr_11cnestedlist_5NLMSA_newSequence:S(0,614)__pyx_doc_4pygr_11cnestedlist_5NLMSA_nextID:S(0,615)__pyx_doc_4pygr_11cnestedlist_5NLMSA_initLPO:S(0,616)__pyx_doc_4pygr_11cnestedlist_5NLMSA_init_pairwise_mode:S(0,617)__pyx_doc_4pygr_11cnestedlist_5NLMSA_addAnnotation:S(0,618)__pyx_doc_4pygr_11cnestedlist_5NLMSA_add_aligned_intervals:S(0,619)__pyx_doc_4pygr_11cnestedlist_5NLMSA_readMAFfiles:S(0,620)__pyx_doc_4pygr_11cnestedlist_5NLMSA_readAxtNet:S(0,621)__pyx_doc_4pygr_11cnestedlist_5NLMSA_buildFiles:S(0,622)__pyx_doc_4pygr_11cnestedlist_5NLMSA_save_seq_dict:S(0,623)__pyx_doc_4pygr_11cnestedlist_5NLMSA_build:S(0,624)__pyx_doc_4pygr_11cnestedlist_5NLMSA_seqInterval:S(0,625)__pyx_doc_4pygr_11cnestedlist_dump_textfile:S(0,626)__pyx_doc_4pygr_11cnestedlist_textfile_to_binaries:S(0,627)__pyx_methods_4pygr_11cnestedlist_IntervalDB:S(0,628)__pyx_tp_as_number_IntervalDB:S(0,61)__pyx_tp_as_sequence_IntervalDB:S(0,62)__pyx_tp_as_mapping_IntervalDB:S(0,63)__pyx_tp_as_buffer_IntervalDB:S(0,68)__pyx_vtable_4pygr_11cnestedlist_IntervalDBIterator:S(0,222):t(0,587)=ar(0,120);0;51;(0,54):t(0,588)=ar(0,120);0;49;(0,54):t(0,589)=ar(0,120);0;48;(0,54):t(0,590)=ar(0,120);0;61;(0,54):t(0,591)=ar(0,120);0;40;(0,54):t(0,592)=ar(0,120);0;66;(0,54):t(0,593)=ar(0,120);0;53;(0,54):t(0,594)=ar(0,120);0;72;(0,54):t(0,595)=ar(0,120);0;193;(0,54):t(0,596)=ar(0,120);0;52;(0,54):t(0,597)=ar(0,120);0;37;(0,54):t(0,598)=ar(0,120);0;1309;(0,54):t(0,599)=ar(0,120);0;1385;(0,54):t(0,600)=ar(0,120);0;46;(0,54):t(0,601)=ar(0,120);0;116;(0,54):t(0,602)=ar(0,120);0;110;(0,54):t(0,603)=ar(0,120);0;50;(0,54):t(0,604)=ar(0,120);0;39;(0,54):t(0,605)=ar(0,120);0;62;(0,54):t(0,606)=ar(0,120);0;37;(0,54):t(0,607)=ar(0,120);0;53;(0,54):t(0,608)=ar(0,120);0;63;(0,54):t(0,609)=ar(0,120);0;52;(0,54):t(0,610)=ar(0,120);0;28;(0,54):t(0,611)=ar(0,120);0;66;(0,54):t(0,612)=ar(0,120);0;61;(0,54):t(0,613)=ar(0,120);0;51;(0,54):t(0,614)=ar(0,120);0;46;(0,54):t(0,615)=ar(0,120);0;40;(0,54):t(0,616)=ar(0,120);0;30;(0,54):t(0,617)=ar(0,120);0;67;(0,54):t(0,618)=ar(0,120);0;60;(0,54):t(0,619)=ar(0,120);0;34;(0,54):t(0,620)=ar(0,120);0;38;(0,54):t(0,621)=ar(0,120);0;41;(0,54):t(0,622)=ar(0,120);0;65;(0,54):t(0,623)=ar(0,120);0;45;(0,54):t(0,624)=ar(0,120);0;69;(0,54):t(0,625)=ar(0,120);0;45;(0,54):t(0,626)=ar(0,120);0;38;(0,54):t(0,627)=ar(0,120);0;51;(0,54):t(0,628)=ar(0,120);0;8;(0,72)__pyx_methods_4pygr_11cnestedlist_IntervalDBIterator:S(0,629)__pyx_tp_as_number_IntervalDBIterator:S(0,61)__pyx_tp_as_sequence_IntervalDBIterator:S(0,62)__pyx_tp_as_mapping_IntervalDBIterator:S(0,63)__pyx_tp_as_buffer_IntervalDBIterator:S(0,68)__pyx_methods_4pygr_11cnestedlist_IntervalFileDB:S(0,630)__pyx_tp_as_number_IntervalFileDB:S(0,61)__pyx_tp_as_sequence_IntervalFileDB:S(0,62)__pyx_tp_as_mapping_IntervalFileDB:S(0,63)__pyx_tp_as_buffer_IntervalFileDB:S(0,68)__pyx_vtable_4pygr_11cnestedlist_NLMSASequence:S(0,206):t(0,629)=ar(0,120);0;0;(0,72):t(0,630)=ar(0,120);0;5;(0,72)__pyx_methods_4pygr_11cnestedlist_NLMSASequence:S(0,631)__pyx_members_4pygr_11cnestedlist_NLMSASequence:S(0,632)__pyx_tp_as_number_NLMSASequence:S(0,61)__pyx_tp_as_sequence_NLMSASequence:S(0,62)__pyx_tp_as_mapping_NLMSASequence:S(0,63)__pyx_tp_as_buffer_NLMSASequence:S(0,68)__pyx_vtable_4pygr_11cnestedlist_IntervalFileDBIterator:S(0,128):t(0,631)=ar(0,120);0;4;(0,72):t(0,632)=ar(0,120);0;11;(0,73)__pyx_methods_4pygr_11cnestedlist_IntervalFileDBIterator:S(0,633)__pyx_tp_as_number_IntervalFileDBIterator:S(0,61)__pyx_tp_as_sequence_IntervalFileDBIterator:S(0,62)__pyx_tp_as_mapping_IntervalFileDBIterator:S(0,63)__pyx_tp_as_buffer_IntervalFileDBIterator:S(0,68)__pyx_vtable_4pygr_11cnestedlist_NLMSA:S(0,207):t(0,633)=ar(0,120);0;1;(0,72)__pyx_methods_4pygr_11cnestedlist_NLMSA:S(0,634)__pyx_members_4pygr_11cnestedlist_NLMSA:S(0,635)__pyx_tp_as_number_NLMSA:S(0,61)__pyx_tp_as_sequence_NLMSA:S(0,62)__pyx_tp_as_mapping_NLMSA:S(0,63)__pyx_tp_as_buffer_NLMSA:S(0,68)__pyx_vtable_4pygr_11cnestedlist_NLMSASlice:S(0,197):t(0,634)=ar(0,120);0;20;(0,72):t(0,635)=ar(0,120);0;17;(0,73)__pyx_methods_4pygr_11cnestedlist_NLMSASlice:S(0,636)__pyx_members_4pygr_11cnestedlist_NLMSASlice:S(0,637)__pyx_getsets_4pygr_11cnestedlist_NLMSASlice:S(0,638)__pyx_tp_as_number_NLMSASlice:S(0,61)__pyx_tp_as_sequence_NLMSASlice:S(0,62)__pyx_tp_as_mapping_NLMSASlice:S(0,63)__pyx_tp_as_buffer_NLMSASlice:S(0,68)__pyx_methods_4pygr_11cnestedlist_NLMSASliceLetters:S(0,639)__pyx_members_4pygr_11cnestedlist_NLMSASliceLetters:S(0,640)__pyx_tp_as_number_NLMSASliceLetters:S(0,61)__pyx_tp_as_sequence_NLMSASliceLetters:S(0,62)__pyx_tp_as_mapping_NLMSASliceLetters:S(0,63)__pyx_tp_as_buffer_NLMSASliceLetters:S(0,68)__pyx_vtable_4pygr_11cnestedlist_NLMSANode:S(0,190):t(0,636)=ar(0,120);0;15;(0,72):t(0,637)=ar(0,120);0;6;(0,73):t(0,638)=ar(0,120);0;1;(0,74):t(0,639)=ar(0,120);0;2;(0,72):t(0,640)=ar(0,120);0;1;(0,73)__pyx_methods_4pygr_11cnestedlist_NLMSANode:S(0,641)__pyx_members_4pygr_11cnestedlist_NLMSANode:S(0,642)__pyx_getsets_4pygr_11cnestedlist_NLMSANode:S(0,643)__pyx_tp_as_number_NLMSANode:S(0,61)__pyx_tp_as_sequence_NLMSANode:S(0,62)__pyx_tp_as_mapping_NLMSANode:S(0,63)__pyx_tp_as_buffer_NLMSANode:S(0,68)__pyx_methods_4pygr_11cnestedlist_NLMSASliceIterator:S(0,644)__pyx_tp_as_number_NLMSASliceIterator:S(0,61)__pyx_tp_as_sequence_NLMSASliceIterator:S(0,62)__pyx_tp_as_mapping_NLMSASliceIterator:S(0,63)__pyx_tp_as_buffer_NLMSASliceIterator:S(0,68)__pyx_methods:S(0,645)__pyx_filenames:S(0,646)__pyx_type_4pygr_11cnestedlist_IntervalDB:G(0,229)__pyx_type_4pygr_11cnestedlist_IntervalDBIterator:G(0,229)__pyx_type_4pygr_11cnestedlist_IntervalFileDB:G(0,229)__pyx_type_4pygr_11cnestedlist_NLMSASequence:G(0,229)__pyx_type_4pygr_11cnestedlist_IntervalFileDBIterator:G(0,229)__pyx_type_4pygr_11cnestedlist_NLMSA:G(0,229)__pyx_type_4pygr_11cnestedlist_NLMSASlice:G(0,229)__pyx_type_4pygr_11cnestedlist_NLMSASliceLetters:G(0,229)__pyx_type_4pygr_11cnestedlist_NLMSANode:G(0,229)__pyx_type_4pygr_11cnestedlist_NLMSASliceIterator:G(0,229):t(0,641)=ar(0,120);0;3;(0,72):t(0,642)=ar(0,120);0;3;(0,73):t(0,643)=ar(0,120);0;1;(0,74):t(0,644)=ar(0,120);0;0;(0,72):t(0,645)=ar(0,120);0;3;(0,72):t(0,646)=ar(0,120);0;0;(0,8)/Users/marek/Desktop/pygr-0.8.1/pygr/apps/maf2nclist.cgcc2_compiled.:t(0,1)=(0,1)seqnameID_qsort_cmp:F(0,2)void_a:p(0,3)void_b:p(0,3)void_a:r(0,3)void_b:r(0,3)int:t(0,2)=r(0,2);-2147483648;2147483647;:t(0,3)=*(0,4):t(0,4)=k(0,1)seqidmap_qsort_cmp:F(0,2)void_a:p(0,3)void_b:p(0,3)void_a:r(0,3)void_b:r(0,3)findseqID:F(0,2)seqName:p(0,5)seqidmap:p(0,6)r:p(0,2)int:t(0,2):t(0,5)=*(0,7):t(0,6)=*(0,8)char:t(0,7)=r(0,7);0;127;SeqIDMap:t(0,8)=(0,9):T(0,9)=s20id:(0,5),0,32;length:(0,2),32,32;ns_id:(0,2),64,32;offset:(0,2),96,32;nlmsa_id:(0,2),128,32;;l:(0,2)mid:r(0,2)r:r(0,2)save_interval:F(0,2)im:p(0,10)start:p(0,2)stop:p(0,2)iseq:p(0,2)istart:p(0,2)istop:p(0,2)im:r(0,10)start:r(0,2)stop:r(0,2)iseq:r(0,2)istart:r(0,2)istop:r(0,2):t(0,10)=*(0,11)IntervalMap:t(0,11)=(0,12):T(0,12)=s24start:(0,2),0,32;end:(0,2),32,32;target_id:(0,2),64,32;target_start:(0,2),96,32;target_end:(0,2),128,32;sublist:(0,2),160,32;;/usr/include/ctype.hpygr/apps/maf2nclist.c/usr/include/ctype.hpygr/apps/maf2nclist.creadMAFrecord:F(0,2)im:p(0,10)n:p(0,2)seqidmap:p(0,6)nseq:p(0,2)lpoStart:p(0,2)p_block_len:p(0,13)ifile:p(0,14)maxseq:p(0,2)linecode_count:p(0,15)p_has_continuation:p(0,13)i:(0,2):t(0,13)=*(0,2):t(0,14)=*(0,16):t(0,15)=*(0,17)FILE:t(0,16)=(0,18)long long int:t(0,17)=@s64;r(0,17);01000000000000000000000;0777777777777777777777;__sFILE:T(0,18)=s88_p:(0,19),0,32;_r:(0,2),32,32;_w:(0,2),64,32;_flags:(0,20),96,16;_file:(0,20),112,16;_bf:(0,21),128,64;_lbfsize:(0,2),192,32;_cookie:(0,22),224,32;_close:(0,23),256,32;_read:(0,24),288,32;_seek:(0,25),320,32;_write:(0,26),352,32;_ub:(0,21),384,64;_extra:(0,27),448,32;_ur:(0,2),480,32;_ubuf:(0,28),512,24;_nbuf:(0,29),536,8;_lb:(0,21),544,64;_blksize:(0,2),608,32;_offset:(0,30),640,64;;:t(0,19)=*(0,32)short int:t(0,20)=@s16;r(0,20);-32768;32767;__sbuf:T(0,21)=s8_base:(0,19),0,32;_size:(0,2),32,32;;:t(0,22)=*(0,1):t(0,23)=*(0,33):t(0,24)=*(0,34):t(0,25)=*(0,35):t(0,26)=*(0,36):t(0,27)=*(0,37):t(0,28)=ar(0,38);0;2;(0,32):t(0,29)=ar(0,38);0;0;(0,32)__darwin_off_t:t(0,31)=(0,39)fpos_t:t(0,30)=(0,31)unsigned char:t(0,32)=@s8;r(0,32);0;255;:t(0,33)=f(0,2):t(0,34)=f(0,2):t(0,35)=f(0,30):t(0,36)=f(0,2):t(0,37)=xs__sFILEX:long unsigned int:t(0,38)=r(0,38);0;037777777777;__int64_t:t(0,39)=(0,17)seqStart:(0,2)junk:(0,2)iseq:(0,2)max_len:(0,2)seqLength:(0,2)newline:(0,2)l:(0,2)extend:(0,2)tmp:(0,40)p:r(0,5)char:t(0,7):t(0,40)=ar(0,38);0;32767;(0,32)seq:(0,41)prefix:(0,42)seqName:(0,43)oriFlag:(0,42)_c:r(0,44)__darwin_ct_rune_t:t(0,44)=(0,2):t(0,41)=ar(0,38);0;32767;(0,7):t(0,42)=ar(0,38);0;7;(0,7):t(0,43)=ar(0,38);0;63;(0,7)l:(0,2)_c:r(0,44)l:(0,2)/usr/include/ctype.hpygr/apps/maf2nclist.cread_axtnet:F(0,2)im:p(0,10)seqidmap:p(0,6)nseq:p(0,2)ifile:p(0,14)maxseq:p(0,2)isrc:p(0,13)src_prefix:p(0,5)dest_prefix:p(0,5)i:r(0,2)srcStart:(0,2)srcEnd:(0,2)destStart:(0,2)destEnd:(0,2)junk:(0,2)junk2:(0,2)idest:(0,2)n:r(0,2)ivalSrc:(0,2)ivalDest:(0,2)lineMax:(0,2)lineAlloc:(0,2)destLength:(0,2)tmp:(0,40)p:r(0,5)src_seq:(0,5)dest_seq:(0,5)srcName:(0,43)destName:(0,43)oriFlag:(0,42)srcChr:(0,43)destChr:(0,43)void:t(0,1)_c:r(0,44)l:(0,2)l:(0,2)l:(0,2)errstr:(0,45):t(0,45)=ar(0,38);0;1023;(0,7)l:(0,2)istop:r(0,2)stop:r(0,2)im:r(0,10)istop:r(0,2)stop:r(0,2)im:r(0,10)errstr:(0,45)errstr:(0,45)errstr:(0,45)PKd—~;t¾…ÝÝpygr/coordinator.pyfrom __future__ import generators import os import time import thread import sys import xmlrpclib import traceback from SimpleXMLRPCServer import SimpleXMLRPCServer import socket import dbfile import logging def get_hostname(host=None): 'get FQDN for host, or current host if not specified' if host is None: host = socket.gethostname() try: return socket.gethostbyaddr(host)[0] except socket.herror: # DNS CAN'T RESOLVE HOSTNAME return host # JUST USE HOSTNAME AS REPORTED BY gethostname() def get_server(host, port, logRequests=False): """Start xmlrpc server on requested host:port. Return bound SimpleXMLRPCServer server obj and port it's bound to. Set port=0 to bind to a random port number. """ if host is None: # use localhost as default host = 'localhost' server = SimpleXMLRPCServer((host, port), logRequests=logRequests) port = server.socket.getsockname()[1] logging.info("Running XMLRPC server on port %d..." % port) return server, port class XMLRPCClientObject(object): """provides object proxy for remote object, with methods that mirror its xmlrpc_methods""" def __init__(self, server, name, methodDict): self.name = name self.server = server import new class methodcall(object): def __init__(self, name): self.name = name def __call__(self, obj, *args): return obj.server.server.methodCall(obj.name, self.name, args) # Create methods to access those of the remote object. for methodName in methodDict: setattr(self, methodName, new.instancemethod(methodcall( methodName), self, self.__class__)) class XMLRPCClient(dict): 'interface to XMLRPC server serving multiple named objects' def __init__(self, url): self.server = xmlrpclib.ServerProxy(url) def __getitem__(self, name): 'get connection to the named server object' try: return dict.__getitem__(self, name) except KeyError: # Get information about the requested object. methodDict = self.server.objectInfo(name) import types if isinstance(methodDict, types.StringType): raise KeyError(methodDict) # RETURNED VALUE IS ERROR MESSAGE! v = XMLRPCClientObject(self, name, methodDict) self[name] = v # SAVE THIS OBJECT INTO OUR DICTIONARY return v class ConnectionDict(dict): """ensure that multiple requests for the same connection use the same ServerProxy""" def __call__(self, url, name): try: s = self[url] # REUSE EXISTING CONNECTION TO THE SERVER except KeyError: s = XMLRPCClient(url) # GET NEW CONNECTION TO THE SERVER self[url] = s # CACHE THIS CONNECTION return s[name] # GET THE REQUESTED OBJECT PROXY FROM THE SERVER get_connection = ConnectionDict() # THIS RETURNS SAME ServerProxy FOR SAME url def safe_dispatch(self, name, args): """restrict calls to selected methods, and trap all exceptions to keep server alive!""" import datetime if name in self.xmlrpc_methods: # Make sure this method is explicitly allowed. try: # TRAP ALL ERRORS TO PREVENT OUR SERVER FROM DYING print >>sys.stderr, 'XMLRPC:', name, args, \ datetime.datetime.now().isoformat(' ') # LOG THE REQUEST if self.xmlrpc_methods[name]: # use this as an alias for method m = getattr(self, self.xmlrpc_methods[name]) else: # use method name as usual m = getattr(self, name) # GET THE BOUND METHOD val = m(*args) # CALL THE METHOD sys.stderr.flush() # FLUSH ANY OUTPUT TO OUR LOG return val # HAND BACK ITS RETURN VALUE except SystemExit: raise # WE REALLY DO WANT TO EXIT. except: # METHOD RAISED AN EXCEPTION, SO PRINT TRACEBACK TO STDERR traceback.print_exc(self.max_tb, sys.stderr) else: print >>sys.stderr, "safe_dispatch: blocked unregistered method %s" \ % name return False # THIS RETURN VALUE IS CONFORMABLE BY XMLRPC... class ObjectFromString(list): """convenience class for initialization from string of format: val1,val2,foo=12,bar=39,sshopts=-1 -p 1234 Args of format name=val are saved on the object as attributes; otherwise each arg is saved as a list. Argument type conversion is performed automatically if attrtype mapping provided either to constructor or by the class itself. Numeric keys in this mapping are applied to the corresponding list arguments; string keys in this mapping are applied to the corresponding attribute arguments. Both the argument separator and assignment separator can be customized.""" _separator = ',' _eq_separator = '=' def __init__(self, s, separator=None, eq_separator=None): list.__init__(self) if separator is None: separator = self._separator if eq_separator is None: eq_separator = self._eq_separator args = s.split(separator) i = 0 for arg in args: try: # PROCESS attr=val ARGUMENT FORMAT k, v = arg.split(eq_separator) try: # SEE IF WE HAVE A TYPE FOR THIS ATTRIBUTE v = self._attrtype[k](v) except (AttributeError, KeyError): pass # IF NO CONVERSION, JUST USE THE ORIGINAL STRING setattr(self, k, v) # SAVE VALUE AS ATTRIBUTE except ValueError: # JUST A SIMPLE ARGUMENT, SO SAVE AS ARG LIST try: # SEE IF WE HAVE A TYPE FOR THIS LIST ITEM arg = self._attrtype[i](arg) except (AttributeError, KeyError): pass # IF NO CONVERSION, JUST USE THE ORIGINAL STRING self.append(arg) i += 1 # ADVANCE OUR ARGUMENT COUNT class FileDict(dict): """read key,value pairs as WS-separated lines, with objclass(value) conversion""" def __init__(self, filename, objclass=str): dict.__init__(self) f = file(filename, 'rU') # text file for line in f: key = line.split()[0] # GET THE 1ST ARGUMENT # Get the rest, strip the outer whitespace. val = line[len(key):].lstrip().rstrip() self[key] = objclass(val) # APPLY THE DESIRED TYPE CONVERSION f.close() def detach_as_demon_process(self): "standard UNIX technique c/o Jurgen Hermann's Python Cookbook recipe" # CREATE AN APPROPRIATE ERRORLOG FILEPATH if not hasattr(self, 'errlog') or self.errlog is False: self.errlog = os.path.join(os.getcwd(), self.name + '.log') pid = os.fork() if pid: return pid os.setsid() # CREATE A NEW SESSION WITH NO CONTROLLING TERMINAL os.umask(0) # IS THIS ABSOLUTELY NECESSARY? sys.stdout = file(self.errlog, 'a') # Daemon sends all output to log file. sys.stderr = sys.stdout return 0 def serve_forever(self): 'start the service -- this will run forever' import datetime print >>sys.stderr, "START_SERVER:%s %s" % (self.name, datetime.datetime. now().isoformat(' ')) sys.stderr.flush() self.server.serve_forever() class CoordinatorInfo(object): """stores information about individual coordinators for the controller and provides interface to Coordinator that protects against possibility of deadlock.""" min_startup_time = 60.0 def __init__(self, name, url, user, priority, resources, job_id=0, immediate=False, demand_ncpu=0): self.name = name self.url = url self.user = user self.priority = priority self.job_id = job_id self.immediate = immediate self.server = xmlrpclib.ServerProxy(url) self.processors = {} self.resources = resources self.start_time = time.time() self.demand_ncpu = demand_ncpu # Set to non-zero for fixed #CPUs. self.allocated_ncpu = 0 self.new_cpus = [] self.last_start_proc_time = 0.0 def __iadd__(self, newproc): "add a processor to this coordinator's list" self.processors[newproc] = time.time() return self def __isub__(self, oldproc): "remove a processor from this coordinator's list" del self.processors[oldproc] return self def update_load(self): """tell this coordinator to use only allocated_ncpu processors, and to launch processors on the list of new_cpus. Simply spawns a thread to do this without danger of deadlock""" import threading t = threading.Thread(target=self.update_load_thread, args=(self.allocated_ncpu, self.new_cpus)) self.new_cpus = [] # DISCONNECT FROM OLD LIST TO PREVENT OVERWRITING t.start() def update_load_thread(self, ncpu, new_cpus): """tell this coordinator to use only ncpu processors, and to launch processors on the list of new_cpus. Run this in a separate thread to prevent deadlock.""" self.server.set_max_clients(ncpu) if len(new_cpus) > 0 and \ time.time() - self.last_start_proc_time > self.min_startup_time: self.server.start_processors(new_cpus) # SEND OUR LIST self.last_start_proc_time = time.time() class HostInfo(ObjectFromString): _attrtype = {'maxload': float} class XMLRPCServerBase(object): 'Base class for creating an XMLRPC server for multiple objects' xmlrpc_methods = {'methodCall': 0, 'objectList': 0, 'objectInfo': 0} max_tb = 10 _dispatch = safe_dispatch # RESTRICT XMLRPC TO JUST THE METHODS LISTED HERE def __init__(self, name, host='', port=5000, logRequests=False, server=None): self.host = host self.name = name if server is not None: self.server = server self.port = port else: self.server, self.port = get_server(host, port, logRequests) self.server.register_instance(self) self.objDict = {} def __setitem__(self, name, obj): 'add a new object to serve' self.objDict[name] = obj def __delitem__(self, name): del self.objDict[name] def objectList(self): 'get list of named objects in this server: [(name,methodDict),...]' return [(name, obj.xmlrpc_methods) for (name, obj) in self.objDict.items()] def objectInfo(self, objname): 'get dict of methodnames on the named object' try: return self.objDict[objname].xmlrpc_methods except KeyError: return 'error: server has no object named %s' % objname def methodCall(self, objname, methodname, args): 'run the named method on the named object and return its result' try: obj = self.objDict[objname] if methodname in obj.xmlrpc_methods: m = getattr(obj, methodname) else: print >>sys.stderr, \ "methodCall: blocked unregistered method %s" % methodname return '' except (KeyError, AttributeError): return '' # RETURN FAILURE CODE return m(*args) # RUN THE OBJECT METHOD def serve_forever(self, demonize=None, daemonize=False): 'launch the XMLRPC service. if daemonize=True, detach & exit.' if demonize is not None: logging.warning("demonize is a deprecated argument to \ serve_forever; use 'daemonize' instead!") daemonize = demonize print 'Serving on interface "%s", port %d' % (self.host, self.port, ) if daemonize: print "detaching to run as a daemon." pid = detach_as_demon_process(self) if pid: print 'PID', pid sys.exit(0) serve_forever(self) def serve_in_thread(self): thread.start_new_thread(serve_forever, (self, )) def register(self, url=None, name='index', server=None): 'register our server with the designated index server' data=self.registrationData # RAISE ERROR IF NO DATA TO REGISTER... if server is None and url is not None: # Use the URL to get the index server. server = get_connection(url, name) if server is not None: server.registerServer('%s:%d' % (self.host, self.port), data) else: # DEFAULT: SEARCH WORLDBASEPATH TO FIND INDEX SERVER from pygr import worldbase worldbase._mdb.registerServer('%s:%d' % (self.host, self.port), data) class ResourceController(object): """Centralized controller for getting resources and rules for making them. """ xmlrpc_methods = {'load_balance': 0, 'setrule': 0, 'delrule': 0, 'report_load': 0, 'register_coordinator': 0, 'unregister_coordinator': 0, 'register_processor': 0, 'unregister_processor': 0, 'get_resource': 0, 'acquire_rule': 0, 'release_rule': 0, 'request_cpus': 0, 'retry_unused_hosts': 0, 'get_status': 0, 'setthrottle': 0, 'del_lock': 0, 'get_hostinfo': 0, 'set_hostinfo': 0} _dispatch = safe_dispatch # RESTRICT XMLRPC TO JUST THE METHODS LISTED HERE max_tb = 10 def __init__(self, rc='controller', port=5000, overload_margin=0.6, rebalance_frequency=1200, errlog=False, throttle=1.0): self.name = rc self.overload_margin = overload_margin self.rebalance_frequency = rebalance_frequency self.errlog = errlog self.throttle = throttle self.rebalance_time = time.time() self.must_rebalance = False self.host = get_hostname() self.hosts = FileDict(self.name + '.hosts', HostInfo) self.getrules() self.getresources() self.server, self.port = get_server(self.host, port) self.server.register_instance(self) self.coordinators = {} self.njob = 0 self.locks = {} self.systemLoad = {} hostlist=[host for host in self.hosts] for host in hostlist: # 1ST ASSUME HOST EMPTY, THEN GET LOAD REPORTS hostFQDN = get_hostname(host) # CONVERT ALL HOSTNAMES TO FQDNs if hostFQDN != host: # USE FQDN FOR ALL SUBSEQUENT REFS! self.hosts[hostFQDN] = self.hosts[host] del self.hosts[host] self.systemLoad[hostFQDN] = 0.0 __call__ = serve_forever def assign_load(self): "calculate the latest balanced loads" maxload = 0. total = 0. current_job = 99999999 for c in self.coordinators.values(): if c.priority > 0.0 and c.job_id < current_job: current_job = c.job_id # FIND 1ST NON-ZER0 PRIORITY JOB for c in self.coordinators.values(): if c.demand_ncpu: # DEMANDS A FIXED #CPUS, NO LOAD BALANCING c.run = True elif c.job_id == current_job or c.immediate: c.run = True # YES, RUN THIS JOB total += c.priority else: c.run=False for v in self.hosts.values(): # SUM UP TOTAL CPUS maxload += v.maxload maxload *= self.throttle # APPLY OUR THROTTLE CONTROL for c in self.coordinators.values(): #REMOVE DEMANDED CPUS if c.demand_ncpu: maxload -= c.demand_ncpu if maxload < 0.: # DON'T ALLOW NEGATIVE VALUES maxload = 0. if total > 0.: # DON'T DIVIDE BY ZERO... maxload /= float(total) for c in self.coordinators.values(): # ALLOCATE SHARE OF TOTAL CPUS... if c.demand_ncpu: # ALLOCATE EXACTLY THE NUMBER REQUESTED c.allocated_ncpu = int(c.demand_ncpu) elif c.run: # COMPUTE BASED ON PRIORITY SHARE c.allocated_ncpu = int(maxload * c.priority) else: # NOT RUNNING c.allocated_ncpu = 0 return True # USE THIS AS DEFAULT XMLRPC RETURN VALUE def assign_processors(self): "hand out available processors to coordinators in order of need" margin = self.overload_margin - 1.0 free_cpus = [] nproc = {} for c in self.coordinators.values(): # COUNT NUMBER OF PROCS for host, pid in c.processors: # RUNNING ON EACH HOST try: nproc[host] += 1.0 # INCREMENT AN EXISTING COUNT except KeyError: nproc[host] = 1.0 # NEW, SO SET INITIAL COUNT for host in self.hosts: # BUILD LIST OF HOST CPUS TO BE ASSIGNED if host not in self.systemLoad: # ADDING A NEW HOST self.systemLoad[host] = 0.0 # DEFAULT LOAD: ASSUME HOST EMPTY try: # host MAY NOT BE IN nproc, SO CATCH THAT ERROR if self.systemLoad[host] > nproc[host]: raise KeyError # USE self.systemLoad[host] except KeyError: load = self.systemLoad[host] # MAXIMUM VALUE else: load = nproc[host] # MAXIMUM VALUE if load < self.hosts[host].maxload + margin: free_cpus += int(self.hosts[host].maxload + self.overload_margin - load) * [host] if len(free_cpus) == 0: # WE DON'T HAVE ANY CPUS TO GIVE OUT return False l = [] # BUILD A LIST OF HOW MANY CPUS EACH COORDINATOR NEEDS for c in self.coordinators.values(): ncpu = c.allocated_ncpu - len(c.processors) if ncpu > 0: l += ncpu*[c] # ADD c TO l EXACTLY ncpu TIMES import random random.shuffle(l) # REORDER LIST OF COORDINATORS RANDOMLY i = 0 # INDEX INTO OUR l LIST while i < len(free_cpus) and i < len(l): # Hand out free CPUs one by one. l[i].new_cpus.append(free_cpus[i]) i += 1 return i > 0 # RETURN TRUE IF WE HANDED OUT SOME PROCESSORS def load_balance(self): "recalculate load assignments, and assign free cpus" self.rebalance_time = time.time() # RESET OUR FLAGS self.must_rebalance = False # Calculate how many CPUs each coordinator should get. self.assign_load() # Assign free CPUs to coordinators which need them. self.assign_processors() for c in self.coordinators.values(): c.update_load() # INFORM THE COORDINATOR return True # USE THIS AS DEFAULT XMLRPC RETURN VALUE def get_hostinfo(self, host, attr): "get a host attribute" return getattr(self.hosts[host], attr) def set_hostinfo(self, host, attr, val): "increase or decrease the maximum load allowed on a given host" try: setattr(self.hosts[host], attr, val) except KeyError: self.hosts[host] = HostInfo('%s=%s' % (attr, str(val))) return True # USE THIS AS DEFAULT XMLRPC RETURN VALUE def getrules(self): import shelve self.rules = dbfile.shelve_open(self.name + '.rules') def getresources(self): import shelve self.resources = dbfile.shelve_open(self.name + '.rsrc') def setrule(self, rsrc, rule): "save a resource generation rule into our database" self.rules[rsrc] = rule self.rules.close() # THIS IS THE ONLY WAY I KNOW TO FLUSH... self.getrules() return True # USE THIS AS DEFAULT XMLRPC RETURN VALUE def delrule(self, rsrc): "delete a resource generation rule from our database" try: del self.rules[rsrc] except KeyError: print >>sys.stderr, "Attempt to delete unknown resource rule %s" \ % rsrc else: self.rules.close() # THIS IS THE ONLY WAY I KNOW TO FLUSH... self.getrules() return True # USE THIS AS DEFAULT XMLRPC RETURN VALUE def setthrottle(self, throttle): "set the total level of usage of available CPUs, usually 1.0" self.throttle = float(throttle) return True # USE THIS AS DEFAULT XMLRPC RETURN VALUE def report_load(self, host, pid, load): "save a reported load from one of our processors" self.systemLoad[host] = load # AT A REGULAR INTERVAL WE SHOULD REBALANCE LOAD if self.must_rebalance or \ time.time() - self.rebalance_time > self.rebalance_frequency: self.load_balance() if load < self.hosts[host].maxload + self.overload_margin: return True # OK TO CONTINUE else: return False # THIS SYSTEM OVERLOADED, TELL PROCESSOR TO EXIT def register_coordinator(self, name, url, user, priority, resources, immediate, demand_ncpu): "save a coordinator's registration info" try: print >>sys.stderr, 'change_priority: %s (%s,%s): %f -> %f' \ % (name, user, url, self.coordinators[url].priority, priority) self.coordinators[url].priority = priority self.coordinators[url].immediate = immediate self.coordinators[url].demand_ncpu = demand_ncpu except KeyError: print >>sys.stderr, 'register_coordinator: %s (%s,%s): %f' \ % (name, user, url, priority) self.coordinators[url] = CoordinatorInfo(name, url, user, priority, resources, self.njob, immediate, demand_ncpu) self.njob += 1 # INCREMENT COUNT OF JOBS WE'VE REGISTERED self.must_rebalance = True # FORCE REBALANCING ON NEXT OPPORTUNITY return True # USE THIS AS DEFAULT XMLRPC RETURN VALUE def unregister_coordinator(self, name, url, message): "remove a coordinator from our list" try: del self.coordinators[url] print >>sys.stderr, 'unregister_coordinator: %s (%s): %s' \ % (name, url, message) self.load_balance() # FORCE IT TO REBALANCE THE LOAD TO NEW JOBS... except KeyError: print >>sys.stderr, 'unregister_coordinator: %s unknown:%s (%s)' \ % (name, url, message) return True # USE THIS AS DEFAULT XMLRPC RETURN VALUE def request_cpus(self, name, url): "return a list of hosts for this coordinator to run processors on" try: c = self.coordinators[url] except KeyError: print >>sys.stderr, 'request_cpus: unknown coordinator %s @ %s' \ % (name, url) return [] # HAND BACK AN EMPTY LIST # Calculate how many CPUs each coordinator should get. self.assign_load() # Assign free CPUs to coordinators which need them. self.assign_processors() new_cpus=tuple(c.new_cpus) # MAKE A NEW COPY OF THE LIST OF HOSTS del c.new_cpus[:] # EMPTY OUR LIST return new_cpus def register_processor(self, host, pid, url): "record a new processor starting up" try: self.coordinators[url] += (host, pid) self.systemLoad[host] += 1.0 # THIS PROBABLY INCREASES LOAD BY 1 except KeyError: pass return True # USE THIS AS DEFAULT XMLRPC RETURN VALUE def unregister_processor(self, host, pid, url): "processor shutting down, so remove it from the list" try: self.coordinators[url] -= (host, pid) self.systemLoad[host] -= 1.0 # THIS PROBABLY DECREASES LOAD BY 1 if self.systemLoad[host] < 0.0: self.systemLoad[host] = 0.0 for k, v in self.locks.items(): # MAKE SURE THIS PROC HAS NO LOCKS h = k.split(':')[0] if h == host and v == pid: del self.locks[k] # REMOVE ALL ITS PENDING LOCKS except KeyError: pass self.load_balance() # FREEING A PROCESSOR, SO REBALANCE TO USE THIS return True # USE THIS AS DEFAULT XMLRPC RETURN VALUE def get_resource(self, host, pid, rsrc): """return a filename for the resource, or False if rule must be applied, or True if client must wait to get the resource""" key = host + ':' + rsrc try: # JUST HAND BACK THE RESOURCE return self.resources[key] except KeyError: if key in self.locks: return True # TELL CLIENT TO WAIT else: return False # TELL CLIENT TO ACQUIRE IT VIA RULE def acquire_rule(self, host, pid, rsrc): """lock the resource on this specific host and return its production rule""" if rsrc not in self.rules: return False # TELL CLIENT NO SUCH RULE key = host + ':' + rsrc if key in self.locks: return True # TELL CLIENT TO WAIT # Lock this resource on this host until constructed. self.locks[key] = pid return self.rules[rsrc] # RETURN THE CONSTRUCTION RULE def release_rule(self, host, pid, rsrc): """client is done applying this rule, it is now safe to give out the resource""" key = host + ':' + rsrc self.del_lock(host, rsrc) # Add the file name to resource list. self.resources[key] = self.rules[rsrc][0] self.resources.close() # THIS IS THE ONLY WAY I KNOW TO FLUSH THIS... self.getresources() return True # USE THIS AS DEFAULT XMLRPC RETURN VALUE def del_lock(self, host, rsrc): "delete a lock on a pending resource construction process" key = host + ':' + rsrc try: del self.locks[key] # REMOVE THE LOCK except KeyError: print >> sys.stderr, "attempt to release non-existent lock \ %s,%s:%d" % (host, rule, pid) return True # USE THIS AS DEFAULT XMLRPC RETURN VALUE def retry_unused_hosts(self): "reset systemLoad for hosts that have no jobs running" myhosts = {} for c in self.coordinators.values(): # LIST HOSTS WE'RE CURRENTLY USING for host, pid in c.processors: myhosts[host] = None # MARK THIS HOST AS IN USE for host in self.systemLoad: # RESET LOAD FOR ALL HOSTS WE'RE NOT USING if host not in myhosts: self.systemLoad[host] = 0.0 return True # USE THIS AS DEFAULT XMLRPC RETURN VALUE def get_status(self): """get report of system loads, max loads, coordinators, rules, resources, locks""" l = [(name, host.maxload) for name, host in self.hosts.items()] l.sort() return self.name, self.errlog, self.systemLoad, l, \ [(c.name, c.url, c.priority, c.allocated_ncpu, len(c.processors), c.start_time) for c in self.coordinators.values()], dict(self.rules), \ dict(self.resources), self.locks class AttrProxy(object): def __init__(self, getattr_proxy, k): self.getattr_proxy = getattr_proxy self.k = k def __getattr__(self, attr): try: val = self.getattr_proxy(self.k, attr) # GET IT FROM OUR PROXY except: raise AttributeError('unable to get proxy attr ' + attr) setattr(self, attr, val) # CACHE THIS ATTRIBUTE RIGHT HERE! return val class DictAttrProxy(dict): def __init__(self, getattr_proxy): dict.__init__(self) self.getattr_proxy = getattr_proxy def __getitem__(self, k): try: return dict.__getitem__(self, k) except KeyError: val = AttrProxy(self.getattr_proxy, k) self[k] = val return val class Coordinator(object): """Run our script as Processor on one or more client nodes, using XMLRPC communication between clients and server. On the server all output is logged to name.log, and successfully completed task IDs are stored in name.success, and error task IDs are stored in name.error On the clients all output is logged to the file name_#.log in the user's and/or system-specific temporary directory.""" xmlrpc_methods = {'start_processors': 0, 'register_client': 0, 'unregister_client': 0, 'report_success': 0, 'report_error': 0, 'next': 0, 'get_status': 0, 'set_max_clients': 0, 'stop_client': 0} _dispatch = safe_dispatch # RESTRICT XMLRPC TO JUST THE METHODS LISTED HERE max_tb = 10 # MAXIMUM #STACK LEVELS TO PRINT IN TRACEBACKS max_ssh_errors = 5 #MAXIMUM #ERRORS TO PERMIT IN A ROW BEFORE QUITTING python = 'python' # DEFAULT EXECUTABLE FOR RUNNING OUR CLIENTS def __init__(self, name, script, it, resources, port=8888, priority=1.0, rc_url=None, errlog=False, immediate=False, ncpu_limit=999999, demand_ncpu=0, max_initialization_errors=3, **kwargs): self.name = name self.script = script self.it = iter(it) # Make sure self.it is an iterator. self.resources = resources self.priority = priority self.errlog = errlog self.immediate = immediate self.ncpu_limit = ncpu_limit self.demand_ncpu = demand_ncpu self.max_initialization_errors = max_initialization_errors self.kwargs = kwargs self.host = get_hostname() self.user = os.environ['USER'] try: # Make sure ssh-agent is available before we launch # a lot of processes. a = os.environ['SSH_AGENT_PID'] except KeyError: raise OSError(1, 'SSH_AGENT_PID not found. No ssh-agent running?') self.dir = os.getcwd() self.n = 0 self.nsuccess = 0 self.nerrors = 0 self.nssh_errors = 0 self.iclient = 0 self.max_clients = 40 if rc_url is None: # Try the default resource-controller address on the same host. rc_url = 'http://%s:5000' % self.host self.rc_url = rc_url # Connect to the resource controller... self.rc_server = xmlrpclib.ServerProxy(rc_url) # ...create an XMLRPC server. self.server, self.port = get_server(self.host, port) # ...and provide it with all the methods. self.server.register_instance(self) self.clients = {} self.pending = {} self.already_done = {} self.stop_clients = {} self.logfile = {} self.clients_starting = {} self.clients_initializing = {} self.initialization_errors = {} try: # LOAD LIST OF IDs ALREADY SUCCESSFULLY PROCESSED, IF ANY f = file(name + '.success', 'rU') # text file for line in f: self.already_done[line.strip()] = None f.close() except IOError: # OK IF NO SUCCESS FILE YET, WE'LL CREATE ONE. pass # Success file is to be cumulative but overwrite the error file. self.successfile = file(name + '.success', 'a') self.errorfile = file(name + '.error', 'w') self.done = False self.hosts = DictAttrProxy(self.rc_server.get_hostinfo) self.register() def __call__(self, *l, **kwargs): "start the server, and launch a cpu request in a separate thread" import threading t = threading.Thread(target=self.initialize_thread) t.start() serve_forever(self, *l, **kwargs) def initialize_thread(self): """run this method in a separate thread to bootstrap our initial cpu request""" time.sleep(5) # GIVE serve_forever() TIME TO START SERVER # Now ask the controller to rebalance and give up CPUs. self.rc_server.load_balance() def start_client(self, host): "start a processor on a client node" import tempfile if len(self.clients) >= self.ncpu_limit: print >>sys.stderr, 'start_client: blocked, CPU limit', \ len(self.clients), self.ncpu_limit return # DON'T START ANOTHER PROCESS, TOO MANY ALREADY if len(self.clients) >= self.max_clients: print >>sys.stderr, 'start_client: blocked, too many already', \ len(self.clients), self.max_clients return # DON'T START ANOTHER PROCESS, TOO MANY ALREADY try: if len(self.clients_starting[host]) >= self.max_ssh_errors: print >>sys.stderr, \ 'start_client: blocked, too many unstarted jobs:', \ host, self.clients_starting[host] return # DON'T START ANOTHER PROCESS, host MAY BE DEAD... except KeyError: # NO clients_starting ON host, GOOD! pass try: if len(self.initialization_errors[host]) >= \ self.max_initialization_errors: print >>sys.stderr, 'start_client: blocked, too many \ initialization errors:', host, \ self.initialization_errors[host] return # DON'T START ANOTHER PROCESS, host HAS A PROBLEM except KeyError: # NO initialization_errors ON host, GOOD! pass try: sshopts = self.hosts[host].sshopts # GET sshopts VIA XMLRPC except AttributeError: sshopts = '' logfile = os.path.join(tempfile.gettempdir(), '%s_%d.log' \ % (self.name, self.iclient)) # PASS OUR KWARGS ON TO THE CLIENT PROCESSOR kwargs = ' '.join(['--%s=%s' % (k, v) for k, v in self.kwargs.items()]) cmd = 'cd %s;%s %s --url=http://%s:%d --rc_url=%s --logfile=%s %s %s' \ % (self.dir, self.python, self.script, self.host, self.port, self.rc_url, logfile, self.name, kwargs) # UGH, HAVE TO MIX CSH REDIRECTION (REMOTE) WITH SH REDIRECTION (LOCAL) ssh_cmd = "ssh %s %s '(%s) &%s &' >%s 2>&1 &" \ % (sshopts, host, cmd, logfile, self.errlog) print >>sys.stderr, 'SSH: ' + ssh_cmd self.logfile[logfile] = [host, False, self.iclient] # NO PID YET try: # RECORD THIS CLIENT AS STARTING UP self.clients_starting[host][self.iclient] = time.time() except KeyError: # CREATE A NEW HOST ENTRY self.clients_starting[host] = {self.iclient: time.time()} # RUN SSH IN BACKGROUND TO AVOID WAITING FOR IT TO TIMEOUT!!! os.system(ssh_cmd) # LAUNCH THE SSH PROCESS, SHOULD RETURN IMMEDIATELY self.iclient += 1 # ADVANCE OUR CLIENT COUNTER def start_processors(self, hosts): "start processors on the list of hosts using SSH transport" for host in hosts: # LAUNCH OURSELVES AS PROCESSOR ON ALL THESE HOSTS self.start_client(host) return True # USE THIS AS DEFAULT XMLRPC RETURN VALUE def register(self): "register our existence with the resource controller" url = 'http://%s:%d' % (self.host, self.port) self.rc_server.register_coordinator(self.name, url, self.user, self.priority, self.resources, self.immediate, self.demand_ncpu) def unregister(self, message): "tell the resource controller we're exiting" url = 'http://%s:%d' % (self.host, self.port) self.rc_server.unregister_coordinator(self.name, url, message) def register_client(self, host, pid, logfile): 'XMLRPC call to register client hostname and PID as starting_up' print >>sys.stderr, 'register_client: %s:%d' % (host, pid) self.clients[(host, pid)] = 0 try: self.logfile[logfile][1] = pid # SAVE OUR PID iclient = self.logfile[logfile][2] # GET ITS CLIENT ID del self.clients_starting[host][iclient] #REMOVE FROM STARTUP LIST except KeyError: print >>sys.stderr, 'no client logfile?', host, pid, logfile self.clients_initializing[(host, pid)] = logfile return True # USE THIS AS DEFAULT XMLRPC RETURN VALUE def unregister_client(self, host, pid, message): 'XMLRPC call to remove client from register as exiting' print >>sys.stderr, 'unregister_client: %s:%d %s' \ % (host, pid, message) try: del self.clients[(host, pid)] except KeyError: print >>sys.stderr, 'unregister_client: unknown client %s:%d' \ % (host, pid) try: # REMOVE IT FROM THE LIST OF CLIENTS TO SHUTDOWN, IF PRESENT del self.stop_clients[(host, pid)] except KeyError: pass try: # REMOVE FROM INITIALIZATION LIST del self.clients_initializing[(host, pid)] except KeyError: pass if len(self.clients) == 0 and self.done: # No more tasks or clients, the server can exit. self.exit("Done") return True # USE THIS AS DEFAULT XMLRPC RETURN VALUE def report_success(self, host, pid, success_id): 'mark task as successfully completed' # Keep permanent record of success ID. print >>self.successfile, success_id self.successfile.flush() self.nsuccess += 1 try: self.clients[(host, pid)] += 1 except KeyError: print >>sys.stderr, 'report_success: unknown client %s:%d' \ % (host, pid) try: del self.pending[success_id] except KeyError: print >>sys.stderr, 'report_success: unknown ID %s' \ % str(success_id) return True # USE THIS AS DEFAULT XMLRPC RETURN VALUE def report_error(self, host, pid, id, tb_report): "get traceback report from client as text" print >>sys.stderr, "TRACEBACK: %s:%s ID %s\n%s" % \ (host, str(pid), str(id), tb_report) if (host, pid) in self.clients_initializing: logfile = self.clients_initializing[(host, pid)] try: self.initialization_errors[host].append(logfile) except KeyError: self.initialization_errors[host] = [logfile] try: del self.pending[id] except KeyError: # Not associated with an actual task ID, do not record. if id is not None and id is not False: print >>sys.stderr, 'report_error: unknown ID %s' % str(id) else: print >>self.errorfile, id # KEEP PERMANENT RECORD OF FAILURE ID self.nerrors += 1 self.errorfile.flush() return True # USE THIS AS DEFAULT XMLRPC RETURN VALUE def next(self, host, pid, success_id): 'return next ID from iterator to the XMLRPC caller' if (host, pid) not in self.clients: print >>sys.stderr, 'next: unknown client %s:%d' % (host, pid) return False # HAND BACK "NO MORE FOR YOU TO DO" SIGNAL try: # INITIALIZATION DONE, SO REMOVE FROM INITIALIZATION LIST del self.clients_initializing[(host, pid)] except KeyError: pass if success_id is not False: self.report_success(host, pid, success_id) if self.done: # EXHAUSTED OUR ITERATOR, SO SHUT DOWN THIS CLIENT return False # HAND BACK "NO MORE FOR YOU TO DO" SIGNAL try: # CHECK LIST FOR COMMAND TO SHUT DOWN THIS CLIENT del self.stop_clients[(host, pid)] # IS IT IN stop_clients? return False # IF SO, HAND BACK "NO MORE FOR YOU TO DO" SIGNAL except KeyError: # DO ONE MORE CHECK: ARE WE OVER OUR MAX ALLOWED LOAD? if len(self.clients) > self.max_clients: # Yes, better throttle down. print >>sys.stderr, 'next: halting %s:too many processors \ (%d>%d)' % (host, len(self.clients), self.max_clients) return False # HAND BACK "NO MORE FOR YOU TO DO" SIGNAL for id in self.it: # GET AN ID WE CAN USE if str(id) not in self.already_done: self.n += 1 # GREAT, WE CAN USE THIS ID self.lastID = id self.pending[id] = (host, pid, time.time()) print >>sys.stderr, 'giving id %s to %s:%d' % (str(id), host, pid) return id print >>sys.stderr, 'exhausted all items from iterator!' self.done = True # EXHAUSTED OUR ITERATOR # Release our claims on any further processor allication # and inform the resource controller about it. self.priority = 0.0 self.register() return False # False IS CONFORMABLE BY XMLRPC... def get_status(self): "return basic status info on number of jobs finished, client list etc." client_report = [client + (nsuccess, ) for client, nsuccess in self.clients.items()] pending_report = [(k, ) + v for k, v in self.pending.items()] return self.name, self.errlog, self.n, self.nsuccess, self.nerrors, \ client_report, pending_report, self.logfile def set_max_clients(self, n): "change the maximum number of clients we should have running" self.max_clients = int(n) # MAKE SURE n IS CONVERTABLE TO int return True # USE THIS AS DEFAULT XMLRPC RETURN VALUE def stop_client(self, host, pid): "set signal forcing this client to exit on next iteration" self.stop_clients[(host, pid)] = None return True # USE THIS AS DEFAULT XMLRPC RETURN VALUE def exit(self, message): "clean up and close this server" self.unregister(message) self.successfile.close() self.errorfile.close() sys.exit() try: class ResourceFile(file): """wrapper around some locking behavior, to ensure only one copy operation performed for a given resource on a given host. Otherwise, it's just a regular file object.""" def __init__(self, resource, rule, mode, processor): "resource is name of the resource; rule is (localFile, cpCommand)" self.resource = resource self.processor = processor localFile, cpCommand = rule if not os.access(localFile, os.R_OK): cmd = cpCommand % localFile print 'copying data:', cmd os.system(cmd) # Now, initialise as a real file object. file.__init__(self, localFile, mode) def close(self): # Release the lock we placed on this rule. self.processor.release_rule(self.resource) file.close(self) except TypeError: pass class Processor(object): 'provides an iterator interface to an XMLRPC ID server' max_errors_in_a_row = 10 # LOOKS LIKE NOTHING WORKS HERE, SO QUIT! max_tb = 10 # DON'T SHOW MORE THAN 10 STACK LEVELS FOR A TRACEBACK report_frequency = 600 overload_max = 5 # Max number of overload events in a row before we exit. def __init__(self, url = "http://localhost:8888", rc_url = 'http://localhost:5000', logfile=False, **kwargs): self.url = url self.logfile = logfile self.server = xmlrpclib.ServerProxy(url) self.rc_url = rc_url self.rc_server = xmlrpclib.ServerProxy(rc_url) self.host = get_hostname() self.pid = os.getpid() self.user = os.environ['USER'] self.success_id = False self.pending_id = False self.exit_message = 'MYSTERY-EXIT please debug' self.overload_count = 0 def register(self): "add ourselves to list of processors for this server" self.server.register_client(self.host, self.pid, self.logfile) self.rc_server.register_processor(self.host, self.pid, self.url) print >>sys.stderr, 'REGISTERED:', self.url, self.rc_url def unregister(self, message): "remove ourselves from list of processors for this server" if self.success_id is not False: # REPORT THAT LAST JOB SUCCEEDED! self.report_success(self.success_id) self.server.unregister_client(self.host, self.pid, message) self.rc_server.unregister_processor(self.host, self.pid, self.url) print >>sys.stderr, 'UNREGISTERED:', self.url, self.rc_url, message def __iter__(self): return self def next(self): "get next ID from server" # REPORT LAST JOB SUCCESSFULLY COMPLETED, IF ANY while 1: id = self.server.next(self.host, self.pid, self.success_id) self.success_id = False # ERASE SUCCESS ID if id is True: # WE'RE BEING TOLD TO JUST WAIT time.sleep(60) # SO GO TO SLEEP FOR A MINUTE else: break if id is False: # NO MODE id FOR US TO PROCESS, SO QUIT self.serverStopIteration = True # RECORD THIS AS GENUINE END EVENT raise StopIteration else: # HAND BACK THE id TO THE USER self.pending_id = id return id def report_success(self, id): "report successful completion of task ID" self.server.report_success(self.host, self.pid, id) def report_error(self, id): "report an error using traceback.print_exc()" import StringIO err_report = StringIO.StringIO() traceback.print_exc(self.max_tb, sys.stderr) #REPORT TB TO OUR LOG traceback.print_exc(self.max_tb, err_report) #REPORT TB TO SERVER self.server.report_error(self.host, self.pid, id, err_report.getvalue()) err_report.close() def report_load(self): "report system load" load = os.getloadavg()[0] # GET 1 MINUTE LOAD AVERAGE if self.rc_server.report_load(self.host, self.pid, load) is False: # Are we consistently overloaded for an extended time period? self.overload_count += 1 if self.overload_count > self.overload_max: # Limit exceeded, exit. self.exit('load too high') else: self.overload_count = 0 def open_resource(self, resource, mode): "get a file object for the requested resource, opened in mode" while 1: rule = self.rc_server.get_resource(self.host, self.pid, resource) if rule is False: # WE HAVE TO LOCK AND APPLY A RULE... rule = self.acquire_rule(resource) if rule is True: # Looks like a race condition, wait a minute before # trying again. time.sleep(60) continue # Construct the resource. return ResourceFile(resource, rule, mode, self) elif rule is True: # Rule is locked by another processor, wait a minute before # trying again. time.sleep(60) else: # GOT A REGULAR FILE, SO JUST OPEN IT return file(rule, mode) def acquire_rule(self, resource): """lock the specified resource rule for this host so that it's safe to build it""" rule = self.rc_server.acquire_rule(self.host, self.pid, resource) if rule is False: # NO SUCH RESOURCE?!? self.exit('invalid resource: ' + resource) return rule def release_rule(self, resource): "release our lock on this resource rule, so others can use it" self.rc_server.release_rule(self.host, self.pid, resource) def exit(self, message): "save message for self.unregister() and force exit" self.exit_message = message raise SystemExit def run_all(self, resultGenerator, **kwargs): "run until all task IDs completed, trap & report all errors" errors_in_a_row = 0 it = resultGenerator(self, **kwargs) # GET ITERATOR FROM GENERATOR report_time = time.time() self.register() # REGISTER WITH RESOURCE CONTROLLER & COORDINATOR initializationError = None try: # TRAP ERRORS BOTH IN USER CODE AND coordinator CODE while 1: try: # TRAP AND REPORT ALL ERRORS IN USER CODE id = it.next() # THIS RUNS USER CODE FOR ONE ITERATION self.success_id = id # MARK THIS AS A SUCCESS... errors_in_a_row = 0 initializationError = False except StopIteration: # NO MORE TASKS FOR US... if not hasattr(self, 'serverStopIteration'): # Weird! # USER CODE RAISED StopIteration?!? self.report_error(self.pending_id) # REPORT THE PROBLEM self.exit_message = 'user StopIteration error' elif initializationError: self.exit_message = 'initialization error' else: self.exit_message = 'done' break except SystemExit: # sys.exit() CALLED raise # WE REALLY DO WANT TO EXIT. except: # MUST HAVE BEEN AN ERROR IN THE USER CODE if initializationError is None: # STILL IN INITIALIZATION initializationError=True self.report_error(self.pending_id) # REPORT THE PROBLEM errors_in_a_row +=1 if errors_in_a_row>=self.max_errors_in_a_row: self.exit_message='too many errors' break if time.time()-report_time>self.report_frequency: self.report_load() # SEND A ROUTINE LOAD REPORT report_time=time.time() except SystemExit: # sys.exit() CALLED pass # WE REALLY DO WANT TO EXIT. except: # IMPORTANT TO TRAP ALL ERRORS SO THAT WE UNREGISTER!! traceback.print_exc(self.max_tb, sys.stderr) #REPORT TB TO OUR LOG self.exit_message='error trap' self.unregister('run_all '+self.exit_message) # MUST UNREGISTER!! def run_interactive(self, it, n=1, **kwargs): "run n task IDs, with no error trapping" if not hasattr(it, 'next'): # Assume 'it' is a generator, use it to get an iterator. it = it(self, **kwargs) i=0 self.register() # REGISTER WITH RESOURCE CONTROLLER & COORDINATOR try: # EVEN IF ERROR OCCURS, WE MUST UNREGISTER!! for id in it: self.success_id=id i+=1 if i>=n: break except: self.unregister('run_interactive error') # MUST UNREGISTER!!! raise # SHOW THE ERROR INTERACTIVELY self.unregister('run_interactive exit') return it # HAND BACK ITERATOR IN CASE USER WANTS TO RUN MORE... def parse_argv(): """parse sys.argv into a dictionary of GNU-style args (--foo=bar) and a list of other args""" d = {} l = [] for v in sys.argv[1:]: if v[:2] == '--': try: k, v = v[2:].split('=') d[k] = v except ValueError: d[v[2:]] = None else: l.append(v) return d, l def start_client_or_server(clientGenerator, serverGenerator, resources, script): """start controller, client or server depending on whether we get coordinator argument from the command-line args. Client must be a generator function that takes Processor as argument, and uses it as an iterator. Also, clientGenerator must yield the IDs that the Processor provides (this structure allows us to trap all exceptions from clientGenerator, while allowing it to do resource initializations that would be much less elegant in a callback function.) Server must be a function that returns an iterator (e.g. a generator). Resources is a list of strings naming the resources we need copied to local host for client to be able to do its work. Both client and server constructors use **kwargs to get command line arguments (passed as GNU-style --foo=bar; see the constructor arguments to see the list of options that each can be passed. #CALL LIKE THIS FROM yourscript.py: import coordinator if __name__ == '__main__': coordinator.start_client_or_server(clientGen, serverGen, resources,__file__) To start the resource controller: python coordinator.py --rc=NAME [options] To start a job coordinator: python yourscript.py NAME [--rc_url=URL] [options] To start a job processor: python yourscript.py --url=URL --rc_url=URL [options]""" d, l = parse_argv() if 'url' in d: # WE ARE A CLIENT! client = Processor(**d) time.sleep(5) # GIVE THE SERVER SOME BREATHING SPACE client.run_all(clientGenerator, **d) elif 'rc' in d: # WE ARE THE RESOURCE CONTROLLER rc_server = ResourceController(**d) # NAME FOR THIS CONTROLLER... detach_as_demon_process(rc_server) rc_server() # START THE SERVER else: # WE ARE A SERVER try: # PASS OUR KWARGS TO THE SERVER FUNCTION it = serverGenerator(**d) except TypeError: # DOESN'T WANT ANY ARGS? it = serverGenerator() server = Coordinator(l[0], script, it, resources, **d) detach_as_demon_process(server) server() # START THE SERVER class CoordinatorMonitor(object): "Monitor a Coordinator." def __init__(self, coordInfo): self.name, self.url, self.priority, self.allocated_ncpu, \ self.ncpu, self.start_time = coordInfo self.server = xmlrpclib.ServerProxy(self.url) self.get_status() def get_status(self): self.name, self.errlog, self.n, self.nsuccess, self.nerrors, \ self.client_report, self.pending_report, \ self.logfile = self.server.get_status() print "Got status from Coordinator: ", self.name, self.url def __getattr__(self, attr): "just pass on method requests to our server" return getattr(self.server, attr) class RCMonitor(object): """monitor a ResourceController. Useful methods: get_status() load_balance() setrule(rsrc,rule) delrule(rsrc) setload(host,maxload) retry_unused_hosts() Documented in ResourceController docstrings.""" def __init__(self, host=None, port=5000): host = get_hostname(host) # GET FQDN self.rc_url = 'http://%s:%d' % (host, port) self.rc_server = xmlrpclib.ServerProxy(self.rc_url) self.get_status() def get_status(self): self.name, self.errlog, self.systemLoad, self.hosts, \ coordinators, self.rules, self.resources, \ self.locks = self.rc_server.get_status() print "Got status from ResourceController:", self.name, self.rc_url self.coordinators = {} for cinfo in coordinators: try: # IF COORDINATOR HAS DIED, STILL WANT TO RETURN RCMonitor... self.coordinators[cinfo[0]] = CoordinatorMonitor(cinfo) except socket.error, e: # JUST COMPLAIN, BUT CONTINUE... print >>sys.stderr, "Unable to connect to coordinator:", \ cinfo, e def __getattr__(self, attr): "just pass on method requests to our rc_server" return getattr(self.rc_server, attr) def test_client(server, **kwargs): for id in server: print 'ID', id yield id time.sleep(1) def test_server(): return range(1000) if __name__ == '__main__': start_client_or_server(test_client, test_server, [], __file__) PK7“;÷ÎÄúÁøÁøpygr/coordinator.pyc;ò |†Kc@smdklZdkZdkZdkZdkZdkZdkZdklZdk Z dk Z dk Z e d„Z ed„Zdefd„ƒYZdefd„ƒYZd efd „ƒYZeƒZd „Zd efd „ƒYZdefd„ƒYZd„Zd„Zdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZ defd„ƒYZ!defd„ƒYZ"yd e#fd!„ƒYZ$Wne%j onXd"efd#„ƒYZ&d$„Z'd%„Z(d&efd'„ƒYZ)d(efd)„ƒYZ*d*„Z+d+„Z,e-d,joe(e+e,ge.ƒndS(-(s generatorsN(sSimpleXMLRPCServercCsS|tjotiƒ}nyti|ƒdSWntij o |SnXdS(s3get FQDN for host, or current host if not specifiediN(shostsNonessockets gethostnames gethostbyaddrsherror(shost((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys get_hostnames cCsa|tjo d}nt||fd|ƒ}|iiƒd}ti d|ƒ||fSdS(s©Start xmlrpc server on requested host:port. Return bound SimpleXMLRPCServer server obj and port it's bound to. Set port=0 to bind to a random port number. s localhosts logRequestsis#Running XMLRPC server on port %d...N( shostsNonesSimpleXMLRPCServersports logRequestssserverssockets getsocknamesloggingsinfo(shostsports logRequestssserver((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys get_servers  sXMLRPCClientObjectcBstZdZd„ZRS(sXprovides object proxy for remote object, with methods that mirror its xmlrpc_methodscCsn||_||_dk}dtfd„ƒY}x6|D].}t|||i ||ƒ||i ƒƒq8WdS(Ns methodcallcBstZd„Zd„ZRS(NcCs ||_dS(N(snamesself(sselfsname((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys__init__3scGs#|iii|i|i|ƒSdS(N(sobjsservers methodCallsnamesselfsargs(sselfsobjsargs((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys__call__6s(s__name__s __module__s__init__s__call__(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys methodcall1s ( snamesselfsserversnewsobjects methodcalls methodDicts methodNamessetattrsinstancemethods __class__(sselfsserversnames methodDicts methodNames methodcallsnew((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys__init__,s    (s__name__s __module__s__doc__s__init__(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysXMLRPCClientObject(s s XMLRPCClientcBs tZdZd„Zd„ZRS(s9interface to XMLRPC server serving multiple named objectscCsti|ƒ|_dS(N(s xmlrpclibs ServerProxysurlsselfsserver(sselfsurl((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys__init__BscCsŒyti||ƒSWnqtj oe|ii|ƒ}dk}t ||i ƒot|ƒ‚nt |||ƒ}|||<|SnXdS(s)get connection to the named server objectN( sdicts __getitem__sselfsnamesKeyErrorsservers objectInfos methodDictstypess isinstances StringTypesXMLRPCClientObjectsv(sselfsnamesvs methodDictstypes((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys __getitem__Es  (s__name__s __module__s__doc__s__init__s __getitem__(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys XMLRPCClient?s  sConnectionDictcBstZdZd„ZRS(sRensure that multiple requests for the same connection use the same ServerProxycCsFy||}Wn)tj ot|ƒ}|||run the named method on the named object and return its results*methodCall: blocked unregistered method %ssN( sselfsobjDictsobjnamesobjs methodnamesxmlrpc_methodssgetattrsmssyssstderrsKeyErrorsAttributeErrorsargs(sselfsobjnames methodnamesargssobjsm((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys methodCall-s  cCs„|tj otidƒ|}nd|i|ifGH|o6dGHt|ƒ}|odG|GHt i dƒqvnt |ƒdS(s=launch the XMLRPC service. if daemonize=True, detach & exit.shdemonize is a deprecated argument to serve_forever; use 'daemonize' instead!s"Serving on interface "%s", port %dsdetaching to run as a daemon.sPIDiN( sdemonizesNonesloggingswarnings daemonizesselfshostsportsdetach_as_demon_processspidssyssexits serve_forever(sselfsdemonizes daemonizespid((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys serve_forever;s     cCstit|fƒdS(N(sthreadsstart_new_threads serve_foreversself(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysserve_in_threadMssindexcCs›|i}|tjo |tj ot||ƒ}n|tj o$|id|i |i f|ƒn1dk l }|i id|i |i f|ƒdS(s4register our server with the designated index servers%s:%d(s worldbaseN(sselfsregistrationDatasdatasserversNonesurlsget_connectionsnamesregisterServershostsportspygrs worldbases_mdb(sselfsurlsnamesservers worldbasesdata((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysregisterPs  $ (s__name__s __module__s__doc__sxmlrpc_methodssmax_tbs safe_dispatchs _dispatchsFalsesNones__init__s __setitem__s __delitem__s objectLists objectInfos methodCalls serve_foreversserve_in_threadsregister(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysXMLRPCServerBases !      sResourceControllercBs©tZdZhdd<dd<dd<dd<dd<dd<dd<d d<d d<d d<d d<d d<dd<dd<dd<dd<dd<dd}|it|iƒ}|djo|||g7}q…q…Wdk}|i|ƒd}xM|t| ƒjo|t|ƒjo&||ii| |ƒ|d7}qæW|djSdS(s>hand out available processors to coordinators in order of needf1.0f0.0iNi(sselfsoverload_marginsmargins free_cpussnprocs coordinatorssvaluesscs processorsshostspidsKeyErrorshostss systemLoadsloadsmaxloadsintslensFalseslsallocated_ncpusncpusrandomsshufflesisnew_cpussappend( sselfsloadscsrandomspidslsncpusishosts free_cpussnprocsmargin((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysassign_processors­sP    4   &cCsXtiƒ|_t|_|iƒ|iƒx!|iiƒD]}|i ƒq<Wt SdS(s2recalculate load assignments, and assign free cpusN( stimesselfsrebalance_timesFalsesmust_rebalances assign_loadsassign_processorss coordinatorssvaluesscs update_loadsTrue(sselfsc((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys load_balanceÕs   cCst|i||ƒSdS(sget a host attributeN(sgetattrsselfshostsshostsattr(sselfshostsattr((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys get_hostinfoáscCs\yt|i|||ƒWn6tj o*td|t|ƒfƒ|i| %fs$register_coordinator: %s (%s,%s): %fiN(ssyssstderrsnamesusersurlsselfs coordinatorssprioritys immediates demand_ncpusKeyErrorsCoordinatorInfos resourcessnjobsTruesmust_rebalance(sselfsnamesurlsusersprioritys resourcess immediates demand_ncpu((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysregister_coordinators*  cCsjy2|i|=tid|||fIJ|iƒWn-tj o!tid|||fIJnXt SdS(s"remove a coordinator from our lists#unregister_coordinator: %s (%s): %ss*unregister_coordinator: %s unknown:%s (%s)N( sselfs coordinatorssurlssyssstderrsnamesmessages load_balancesKeyErrorsTrue(sselfsnamesurlsmessage((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysunregister_coordinator-s cCsty|i|}Wn.tj o"tid||fIJgSnX|iƒ|i ƒt |i ƒ}|i 2|SdS(s@return a list of hosts for this coordinator to run processors ons)request_cpus: unknown coordinator %s @ %sN( sselfs coordinatorssurlscsKeyErrorssyssstderrsnames assign_loadsassign_processorsstuplesnew_cpus(sselfsnamesurlscsnew_cpus((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys request_cpus9s   cCsNy0|i|c||f7<|i|cd7&%s &' >%s 2>&1 &sSSH: i()stempfileslensselfsclientss ncpu_limitssyssstderrs max_clientssclients_startingshostsmax_ssh_errorssKeyErrorsinitialization_errorssmax_initialization_errorsshostsssshoptssAttributeErrorsosspathsjoins gettempdirsnamesiclientslogfilesappends_[1]skwargssitemssksvsdirspythonsscriptsportsrc_urlscmdserrlogsssh_cmdsFalsestimessystem( sselfshosts_[1]scmdssshoptsstempfilesvsssh_cmdskwargsslogfilesk((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys start_client!sH %%     +I:$ cCs&x|D]}|i|ƒqWtSdS(s9start processors on the list of hosts using SSH transportN(shostsshostsselfs start_clientsTrue(sselfshostsshost((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysstart_processorsUs cCsNd|i|if}|ii|i||i|i|i |i |i ƒdS(s3register our existence with the resource controllers http://%s:%dN( sselfshostsportsurls rc_serversregister_coordinatorsnamesusersprioritys resourcess immediates demand_ncpu(sselfsurl((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysregister[s  cCs3d|i|if}|ii|i||ƒdS(s*tell the resource controller we're exitings http://%s:%dN(sselfshostsportsurls rc_serversunregister_coordinatorsnamesmessage(sselfsmessagesurl((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys unregisterbscCs®tid||fIJd|i||fXMLRPC call to register client hostname and PID as starting_upsregister_client: %s:%diiisno client logfile?N( ssyssstderrshostspidsselfsclientsslogfilesiclientsclients_startingsKeyErrorsclients_initializingsTrue(sselfshostspidslogfilesiclient((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysregister_clientgs$cCsètid|||fIJy|i||f=Wn*tj otid||fIJnXy|i||f=Wntj onXy|i ||f=Wntj onXt |iƒdjo|i o|i dƒnt SdS(s5XMLRPC call to remove client from register as exitingsunregister_client: %s:%d %ss'unregister_client: unknown client %s:%disDoneN(ssyssstderrshostspidsmessagesselfsclientssKeyErrors stop_clientssclients_initializingslensdonesexitsTrue(sselfshostspidsmessage((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysunregister_clientts" cCs¶|i|IJ|iiƒ|id7_y|i||fcd7%d)isgiving id %s to %s:%ds"exhausted all items from iterator!f0.0N(shostspidsselfsclientsssyssstderrsFalsesclients_initializingsKeyErrors success_idsreport_successsdones stop_clientsslens max_clientssitsidsstrs already_donesnslastIDstimespendingsTruesprioritysregister(sselfshostspids success_idsid((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysnext²s@  &         cCs¬gi}|iiƒD]\}}|||fƒq~}gi}|iiƒD]\}}||f|ƒqT~}|i |i |i|i|i|||ifSdS(sEreturn basic status info on number of jobs finished, client list etc.N(sappends_[1]sselfsclientssitemssclientsnsuccesss client_reportspendingsksvspending_reportsnameserrlogsnsnerrorsslogfile(sselfsvsclients_[1]s client_reportspending_reportsnsuccesssk((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys get_statusØs==cCst|ƒ|_tSdS(s;change the maximum number of clients we should have runningN(sintsnsselfs max_clientssTrue(sselfsn((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysset_max_clientsàscCst|i||f   4       &   s ResourceFilecBs tZdZd„Zd„ZRS(s³wrapper around some locking behavior, to ensure only one copy operation performed for a given resource on a given host. Otherwise, it's just a regular file object.cCsp||_||_|\}}ti|tiƒ o$||}dG|GHti |ƒnt i |||ƒdS(s@resource is name of the resource; rule is (localFile, cpCommand)s copying data:N(sresourcesselfs processorsrules localFiles cpCommandsossaccesssR_OKscmdssystemsfiles__init__smode(sselfsresourcesrulesmodes processorscmds cpCommands localFile((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys__init__ùs     cCs$|ii|iƒti|ƒdS(N(sselfs processors release_rulesresourcesfilesclose(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pyscloses(s__name__s __module__s__doc__s__init__sclose(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys ResourceFileôs  s ProcessorcBs°tZdZdZdZdZdZdded„Zd„Z d„Z d „Z d „Z d „Z d „Zd „Zd„Zd„Zd„Zd„Zd„Zdd„ZRS(s5provides an iterator interface to an XMLRPC ID serveri iXishttp://localhost:8888shttp://localhost:5000cKs’||_||_ti|ƒ|_||_ti|ƒ|_tƒ|_ t i ƒ|_ t i d|_t|_t|_d|_d|_dS(NsUSERsMYSTERY-EXIT please debugi(surlsselfslogfiles xmlrpclibs ServerProxysserversrc_urls rc_servers get_hostnameshostsossgetpidspidsenvironsusersFalses success_ids pending_ids exit_messagesoverload_count(sselfsurlsrc_urlslogfileskwargs((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys__init__s       cCsa|ii|i|i|iƒ|ii|i|i|iƒt i dI|iI|i IJdS(s3add ourselves to list of processors for this servers REGISTERED:N( sselfsserversregister_clientshostspidslogfiles rc_serversregister_processorsurlssyssstderrsrc_url(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysregister#scCsˆ|itj o|i|iƒn|ii|i|i|ƒ|i i |i|i|i ƒt i dI|i I|iI|IJdS(s8remove ourselves from list of processors for this servers UNREGISTERED:N(sselfs success_idsFalsesreport_successsserversunregister_clientshostspidsmessages rc_serversunregister_processorsurlssyssstderrsrc_url(sselfsmessage((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys unregister)s cCs|SdS(N(sself(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys__iter__1scCs‰xUnoM|ii|i|i|iƒ}t|_|tjot i dƒqPq W|tjot|_ t ‚n||_ |SdS(sget next ID from serverii<N(sselfsserversnextshostspids success_idsidsFalsesTruestimessleepsserverStopIterations StopIterations pending_id(sselfsid((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysnext4s!      cCs |ii|i|i|ƒdS(s'report successful completion of task IDN(sselfsserversreport_successshostspidsid(sselfsid((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysreport_successEscCsqdk}|iƒ}ti|itiƒti|i|ƒ|ii |i |i ||i ƒƒ|iƒdS(s+report an error using traceback.print_exc()N(sStringIOs err_reports tracebacks print_excsselfsmax_tbssyssstderrsservers report_errorshostspidsidsgetvaluesclose(sselfsids err_reportsStringIO((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys report_errorIs   cCsytiƒd}|ii|i|i|ƒtjo7|i d7_ |i |i jo|i dƒqun d|_ dS(sreport system loadiis load too highN( soss getloadavgsloadsselfs rc_servers report_loadshostspidsFalsesoverload_counts overload_maxsexit(sselfsload((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys report_loadSs%cCs°x©no¡|ii|i|i|ƒ}|tjoG|i|ƒ}|t jot i dƒq nt ||||ƒSq|t jot i dƒqt||ƒSq WdS(s<get a file object for the requested resource, opened in modeii<N(sselfs rc_servers get_resourceshostspidsresourcesrulesFalses acquire_rulesTruestimessleeps ResourceFilesmodesfile(sselfsresourcesmodesrule((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys open_resource_s    cCsH|ii|i|i|ƒ}|tjo|id|ƒn|SdS(sTlock the specified resource rule for this host so that it's safe to build itsinvalid resource: N( sselfs rc_servers acquire_ruleshostspidsresourcesrulesFalsesexit(sselfsresourcesrule((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys acquire_ruless  cCs |ii|i|i|ƒdS(s<release our lock on this resource rule, so others can use itN(sselfs rc_servers release_ruleshostspidsresource(sselfsresource((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys release_rule{scCs||_t‚dS(s1save message for self.unregister() and force exitN(smessagesselfs exit_messages SystemExit(sselfsmessage((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysexits cKs¼d}|||}tiƒ}|iƒt}y8x1no)y%|i ƒ}||_ d}t }WnÉtj oSt|dƒ o|i|iƒd|_n|o d|_n d|_Pnltj o ‚nW|tjo t}n|i|iƒ|d7}||ijod|_Pq/nXtiƒ||ijo|iƒtiƒ}q7q>WWn8tj on'ti|itiƒd|_nX|id |iƒd S( s:run until all task IDs completed, trap & report all errorsiisserverStopIterationsuser StopIteration errorsinitialization errorsdonestoo many errorss error trapsrun_all N(serrors_in_a_rowsresultGeneratorsselfskwargssitstimes report_timesregistersNonesinitializationErrorsnextsids success_idsFalses StopIterationshasattrs report_errors pending_ids exit_messages SystemExitsTruesmax_errors_in_a_rowsreport_frequencys report_loads tracebacks print_excsmax_tbssyssstderrs unregister(sselfsresultGeneratorskwargss report_timesitsidsinitializationErrorserrors_in_a_row((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysrun_all„sR               icKst|dƒ o|||}nd}|iƒy:x3|D]+}||_|d7}||joPq>q>WWn|i dƒ‚nX|i dƒ|SdS(s&run n task IDs, with no error trappingsnextiisrun_interactive errorsrun_interactive exitN( shasattrsitsselfskwargssisregistersids success_idsns unregister(sselfsitsnskwargssisid((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysrun_interactive°s"       (s__name__s __module__s__doc__smax_errors_in_a_rowsmax_tbsreport_frequencys overload_maxsFalses__init__sregisters unregisters__iter__snextsreport_successs report_errors report_loads open_resources acquire_rules release_rulesexitsrun_allsrun_interactive(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys Processor s&           ,cCsŸh}g}x‚tidD]s}|d djoOy'|didƒ\}}|||run the named method on the named object and return its results*methodCall: blocked unregistered method %ssN( sselfsobjDictsobjnamesobjs methodnamesxmlrpc_methodssgetattrsmssyssstderrsKeyErrorsAttributeErrorsargs(sselfsobjnames methodnamesargssobjsm((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys methodCall-s  cCs„|tj otidƒ|}nd|i|ifGH|o6dGHt|ƒ}|odG|GHt i dƒqvnt |ƒdS(s=launch the XMLRPC service. if daemonize=True, detach & exit.shdemonize is a deprecated argument to serve_forever; use 'daemonize' instead!s"Serving on interface "%s", port %dsdetaching to run as a daemon.sPIDiN( sdemonizesNonesloggingswarnings daemonizesselfshostsportsdetach_as_demon_processspidssyssexits serve_forever(sselfsdemonizes daemonizespid((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys serve_forever;s     cCstit|fƒdS(N(sthreadsstart_new_threads serve_foreversself(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysserve_in_threadMssindexcCs›|i}|tjo |tj ot||ƒ}n|tj o$|id|i |i f|ƒn1dk l }|i id|i |i f|ƒdS(s4register our server with the designated index servers%s:%d(s worldbaseN(sselfsregistrationDatasdatasserversNonesurlsget_connectionsnamesregisterServershostsportspygrs worldbases_mdb(sselfsurlsnamesservers worldbasesdata((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysregisterPs  $ (s__name__s __module__s__doc__sxmlrpc_methodssmax_tbs safe_dispatchs _dispatchsFalsesNones__init__s __setitem__s __delitem__s objectLists objectInfos methodCalls serve_foreversserve_in_threadsregister(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysXMLRPCServerBases !      sResourceControllercBs©tZdZhdd<dd<dd<dd<dd<dd<dd<d d<d d<d d<d d<d d<dd<dd<dd<dd<dd<dd}|it|iƒ}|djo|||g7}q…q…Wdk}|i|ƒd}xM|t| ƒjo|t|ƒjo&||ii| |ƒ|d7}qæW|djSdS(s>hand out available processors to coordinators in order of needf1.0f0.0iNi(sselfsoverload_marginsmargins free_cpussnprocs coordinatorssvaluesscs processorsshostspidsKeyErrorshostss systemLoadsloadsmaxloadsintslensFalseslsallocated_ncpusncpusrandomsshufflesisnew_cpussappend( sselfsloadscsrandomspidslsncpusishosts free_cpussnprocsmargin((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysassign_processors­sP    4   &cCsXtiƒ|_t|_|iƒ|iƒx!|iiƒD]}|i ƒq<Wt SdS(s2recalculate load assignments, and assign free cpusN( stimesselfsrebalance_timesFalsesmust_rebalances assign_loadsassign_processorss coordinatorssvaluesscs update_loadsTrue(sselfsc((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys load_balanceÕs   cCst|i||ƒSdS(sget a host attributeN(sgetattrsselfshostsshostsattr(sselfshostsattr((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys get_hostinfoáscCs\yt|i|||ƒWn6tj o*td|t|ƒfƒ|i| %fs$register_coordinator: %s (%s,%s): %fiN(ssyssstderrsnamesusersurlsselfs coordinatorssprioritys immediates demand_ncpusKeyErrorsCoordinatorInfos resourcessnjobsTruesmust_rebalance(sselfsnamesurlsusersprioritys resourcess immediates demand_ncpu((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysregister_coordinators*  cCsjy2|i|=tid|||fIJ|iƒWn-tj o!tid|||fIJnXt SdS(s"remove a coordinator from our lists#unregister_coordinator: %s (%s): %ss*unregister_coordinator: %s unknown:%s (%s)N( sselfs coordinatorssurlssyssstderrsnamesmessages load_balancesKeyErrorsTrue(sselfsnamesurlsmessage((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysunregister_coordinator-s cCsty|i|}Wn.tj o"tid||fIJgSnX|iƒ|i ƒt |i ƒ}|i 2|SdS(s@return a list of hosts for this coordinator to run processors ons)request_cpus: unknown coordinator %s @ %sN( sselfs coordinatorssurlscsKeyErrorssyssstderrsnames assign_loadsassign_processorsstuplesnew_cpus(sselfsnamesurlscsnew_cpus((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys request_cpus9s   cCsNy0|i|c||f7<|i|cd7&%s &' >%s 2>&1 &sSSH: i()stempfileslensselfsclientss ncpu_limitssyssstderrs max_clientssclients_startingshostsmax_ssh_errorssKeyErrorsinitialization_errorssmax_initialization_errorsshostsssshoptssAttributeErrorsosspathsjoins gettempdirsnamesiclientslogfilesappends_[1]skwargssitemssksvsdirspythonsscriptsportsrc_urlscmdserrlogsssh_cmdsFalsestimessystem( sselfshosts_[1]scmdssshoptsstempfilesvsssh_cmdskwargsslogfilesk((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys start_client!sH %%     +I:$ cCs&x|D]}|i|ƒqWtSdS(s9start processors on the list of hosts using SSH transportN(shostsshostsselfs start_clientsTrue(sselfshostsshost((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysstart_processorsUs cCsNd|i|if}|ii|i||i|i|i |i |i ƒdS(s3register our existence with the resource controllers http://%s:%dN( sselfshostsportsurls rc_serversregister_coordinatorsnamesusersprioritys resourcess immediates demand_ncpu(sselfsurl((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysregister[s  cCs3d|i|if}|ii|i||ƒdS(s*tell the resource controller we're exitings http://%s:%dN(sselfshostsportsurls rc_serversunregister_coordinatorsnamesmessage(sselfsmessagesurl((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys unregisterbscCs®tid||fIJd|i||fXMLRPC call to register client hostname and PID as starting_upsregister_client: %s:%diiisno client logfile?N( ssyssstderrshostspidsselfsclientsslogfilesiclientsclients_startingsKeyErrorsclients_initializingsTrue(sselfshostspidslogfilesiclient((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysregister_clientgs$cCsètid|||fIJy|i||f=Wn*tj otid||fIJnXy|i||f=Wntj onXy|i ||f=Wntj onXt |iƒdjo|i o|i dƒnt SdS(s5XMLRPC call to remove client from register as exitingsunregister_client: %s:%d %ss'unregister_client: unknown client %s:%disDoneN(ssyssstderrshostspidsmessagesselfsclientssKeyErrors stop_clientssclients_initializingslensdonesexitsTrue(sselfshostspidsmessage((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysunregister_clientts" cCs¶|i|IJ|iiƒ|id7_y|i||fcd7%d)isgiving id %s to %s:%ds"exhausted all items from iterator!f0.0N(shostspidsselfsclientsssyssstderrsFalsesclients_initializingsKeyErrors success_idsreport_successsdones stop_clientsslens max_clientssitsidsstrs already_donesnslastIDstimespendingsTruesprioritysregister(sselfshostspids success_idsid((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysnext²s@  &         cCs¬gi}|iiƒD]\}}|||fƒq~}gi}|iiƒD]\}}||f|ƒqT~}|i |i |i|i|i|||ifSdS(sEreturn basic status info on number of jobs finished, client list etc.N(sappends_[1]sselfsclientssitemssclientsnsuccesss client_reportspendingsksvspending_reportsnameserrlogsnsnerrorsslogfile(sselfsvsclients_[1]s client_reportspending_reportsnsuccesssk((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys get_statusØs==cCst|ƒ|_tSdS(s;change the maximum number of clients we should have runningN(sintsnsselfs max_clientssTrue(sselfsn((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysset_max_clientsàscCst|i||f   4       &   s ResourceFilecBs tZdZd„Zd„ZRS(s³wrapper around some locking behavior, to ensure only one copy operation performed for a given resource on a given host. Otherwise, it's just a regular file object.cCsp||_||_|\}}ti|tiƒ o$||}dG|GHti |ƒnt i |||ƒdS(s@resource is name of the resource; rule is (localFile, cpCommand)s copying data:N(sresourcesselfs processorsrules localFiles cpCommandsossaccesssR_OKscmdssystemsfiles__init__smode(sselfsresourcesrulesmodes processorscmds cpCommands localFile((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys__init__ùs     cCs$|ii|iƒti|ƒdS(N(sselfs processors release_rulesresourcesfilesclose(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pyscloses(s__name__s __module__s__doc__s__init__sclose(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys ResourceFileôs  s ProcessorcBs°tZdZdZdZdZdZdded„Zd„Z d„Z d „Z d „Z d „Z d „Zd „Zd„Zd„Zd„Zd„Zd„Zdd„ZRS(s5provides an iterator interface to an XMLRPC ID serveri iXishttp://localhost:8888shttp://localhost:5000cKs’||_||_ti|ƒ|_||_ti|ƒ|_tƒ|_ t i ƒ|_ t i d|_t|_t|_d|_d|_dS(NsUSERsMYSTERY-EXIT please debugi(surlsselfslogfiles xmlrpclibs ServerProxysserversrc_urls rc_servers get_hostnameshostsossgetpidspidsenvironsusersFalses success_ids pending_ids exit_messagesoverload_count(sselfsurlsrc_urlslogfileskwargs((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys__init__s       cCsa|ii|i|i|iƒ|ii|i|i|iƒt i dI|iI|i IJdS(s3add ourselves to list of processors for this servers REGISTERED:N( sselfsserversregister_clientshostspidslogfiles rc_serversregister_processorsurlssyssstderrsrc_url(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysregister#scCsˆ|itj o|i|iƒn|ii|i|i|ƒ|i i |i|i|i ƒt i dI|i I|iI|IJdS(s8remove ourselves from list of processors for this servers UNREGISTERED:N(sselfs success_idsFalsesreport_successsserversunregister_clientshostspidsmessages rc_serversunregister_processorsurlssyssstderrsrc_url(sselfsmessage((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys unregister)s cCs|SdS(N(sself(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys__iter__1scCs‰xUnoM|ii|i|i|iƒ}t|_|tjot i dƒqPq W|tjot|_ t ‚n||_ |SdS(sget next ID from serverii<N(sselfsserversnextshostspids success_idsidsFalsesTruestimessleepsserverStopIterations StopIterations pending_id(sselfsid((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysnext4s!      cCs |ii|i|i|ƒdS(s'report successful completion of task IDN(sselfsserversreport_successshostspidsid(sselfsid((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysreport_successEscCsqdk}|iƒ}ti|itiƒti|i|ƒ|ii |i |i ||i ƒƒ|iƒdS(s+report an error using traceback.print_exc()N(sStringIOs err_reports tracebacks print_excsselfsmax_tbssyssstderrsservers report_errorshostspidsidsgetvaluesclose(sselfsids err_reportsStringIO((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys report_errorIs   cCsytiƒd}|ii|i|i|ƒtjo7|i d7_ |i |i jo|i dƒqun d|_ dS(sreport system loadiis load too highN( soss getloadavgsloadsselfs rc_servers report_loadshostspidsFalsesoverload_counts overload_maxsexit(sselfsload((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys report_loadSs%cCs°x©no¡|ii|i|i|ƒ}|tjoG|i|ƒ}|t jot i dƒq nt ||||ƒSq|t jot i dƒqt||ƒSq WdS(s<get a file object for the requested resource, opened in modeii<N(sselfs rc_servers get_resourceshostspidsresourcesrulesFalses acquire_rulesTruestimessleeps ResourceFilesmodesfile(sselfsresourcesmodesrule((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys open_resource_s    cCsH|ii|i|i|ƒ}|tjo|id|ƒn|SdS(sTlock the specified resource rule for this host so that it's safe to build itsinvalid resource: N( sselfs rc_servers acquire_ruleshostspidsresourcesrulesFalsesexit(sselfsresourcesrule((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys acquire_ruless  cCs |ii|i|i|ƒdS(s<release our lock on this resource rule, so others can use itN(sselfs rc_servers release_ruleshostspidsresource(sselfsresource((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys release_rule{scCs||_t‚dS(s1save message for self.unregister() and force exitN(smessagesselfs exit_messages SystemExit(sselfsmessage((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysexits cKs¼d}|||}tiƒ}|iƒt}y8x1no)y%|i ƒ}||_ d}t }WnÉtj oSt|dƒ o|i|iƒd|_n|o d|_n d|_Pnltj o ‚nW|tjo t}n|i|iƒ|d7}||ijod|_Pq/nXtiƒ||ijo|iƒtiƒ}q7q>WWn8tj on'ti|itiƒd|_nX|id |iƒd S( s:run until all task IDs completed, trap & report all errorsiisserverStopIterationsuser StopIteration errorsinitialization errorsdonestoo many errorss error trapsrun_all N(serrors_in_a_rowsresultGeneratorsselfskwargssitstimes report_timesregistersNonesinitializationErrorsnextsids success_idsFalses StopIterationshasattrs report_errors pending_ids exit_messages SystemExitsTruesmax_errors_in_a_rowsreport_frequencys report_loads tracebacks print_excsmax_tbssyssstderrs unregister(sselfsresultGeneratorskwargss report_timesitsidsinitializationErrorserrors_in_a_row((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysrun_all„sR               icKst|dƒ o|||}nd}|iƒy:x3|D]+}||_|d7}||joPq>q>WWn|i dƒ‚nX|i dƒ|SdS(s&run n task IDs, with no error trappingsnextiisrun_interactive errorsrun_interactive exitN( shasattrsitsselfskwargssisregistersids success_idsns unregister(sselfsitsnskwargssisid((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pysrun_interactive°s"       (s__name__s __module__s__doc__smax_errors_in_a_rowsmax_tbsreport_frequencys overload_maxsFalses__init__sregisters unregisters__iter__snextsreport_successs report_errors report_loads open_resources acquire_rules release_rulesexitsrun_allsrun_interactive(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/coordinator.pys Processor s&           ,cCsŸh}g}x‚tidD]s}|d djoOy'|didƒ\}}|||' class BetterShelf(shelve.Shelf): """Shelf subclass that fixes its horrible iter implementation. """ def __iter__(self): 'avoid using iter provided by shelve/DictMixin, which loads all keys!' try: return iter(self.dict) except TypeError: # gdbm lacks __iter__ method, so try iter_gdbm() exc_type, exc_value, exc_traceback = sys.exc_info() try: self.dict.firstkey except AttributeError: # evidently not a gdbm dict raise TypeError('''cannot iterate over this dictionary. This means that you do not have bsddb, bsddb3, or gdbm available for use by the 'shelve' module in this Python install. Please fix this! Original error message was: %s''' % str(exc_value)) else: # iterate using gdbm-specific method return iter_gdbm(self.dict) if sys.version_info < (2, 6): # Python finally added good err msg in 2.6 def close(self): if isinstance(self.dict, _ClosedDict): return # if already closed, nothing further to do... shelve.Shelf.close(self) # close Shelf as usual self.dict = _ClosedDict() # raises sensible error msg if accessed def shelve_open(filename, flag='c', protocol=None, writeback=False, useHash=False, mode=0666, *args, **kwargs): """improved implementation of shelve.open() that won't generate bogus __del__ warning messages like Python's version does.""" d = open_index(filename, flag, useHash, mode) # construct Shelf only if OK return BetterShelf(d, protocol, writeback, *args, **kwargs) PK7“; L\úÒÒpygr/dbfile.pyc;ò |†Kc@s©dkZdkZdkZdkZdkZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZ d „Z y4dk Z y e i Wne j o e‚nXWniej o]y:dkZy ei Wne j o e‚nXeZ Wq.ej o eZ q.XnXd ed d „Zd ed d „Zd„Zdeifd„ƒYZdeifd„ƒYZdeeed d„ZdS(NsWrongFormatErrorcBstZdZRS(s>attempted to open db with the wrong format e.g. btree vs. hash(s__name__s __module__s__doc__(((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pysWrongFormatError s sNoSuchFileErrorcBstZdZRS(sfile does not exist!(s__name__s __module__s__doc__(((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pysNoSuchFileErrors sPermissionsErrorcBstZdZRS(s)inadequate permissions for requested file(s__name__s __module__s__doc__(((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pysPermissionsErrors s ReadOnlyErrorcBstZdZRS(s=attempted to open a file for writing, but no write permission(s__name__s __module__s__doc__(((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pys ReadOnlyErrors cOsÊyti||ŽSWn¯tj o=}t|ƒidƒototi ||ŽSn‚nhti j oX}t|ƒ}|idƒot |ƒ‚n!|i dƒot|ƒ‚n‚nXdS(sItrap anydbm.error message and transform to our consistent exception typessbsddbsnew dbsdb typeN(sanydbmsopensargsskwargss ImportErrorsesstrsendswithsbsddbshashopenserrorsmsgsNoSuchFileErrors startswithsWrongFormatError(sargsskwargssesmsg((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pys open_anydbms sri¶cCsay/|ot||ƒSnti|||ƒSWn+tiij o…|djp |djoTyt |ƒ}Wn#t j ot d|ƒ‚nX|i ƒtd|ƒ‚q]t d|ƒ‚n–tiij otd|ƒ‚nntiij o[y(|otii‚nt||ƒSWq]tiij otd|ƒ‚q]XnXdS(s¡open bsddb index instead of hash by default. useHash=True forces it to use anydbm default (i.e. hash) instead. Also gives more meaningful error messages.scsws'insufficient permissions to open file: sfile is read-only: sno file named: s,file does not match expected shelve format: N(suseHashs open_anydbmsfilenamesflagsbsddbsbtopensmodesdbs DBAccessErrorsfilesifilesIOErrorsPermissionsErrorscloses ReadOnlyErrorsDBNoSuchFileErrorsNoSuchFileErrorsDBInvalidArgErrorsWrongFormatError(sfilenamesflagsuseHashsmodesifile((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pys open_bsddbDs. cCsTttjo0t||ƒ}| otidƒn|Snt ||||ƒSdS(Ns2Falling back to hash index: unable to import bsddb( sbsddbsNones open_anydbmsfilenamesflagsdsuseHashsloggerswarns open_bsddbsmode(sfilenamesflagsuseHashsmodesd((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pys open_indexhs  ccs8|iƒ}x%|tj o|V|i|ƒ}qWdS(siterator for gdbm objectsN(sdbsfirstkeysksNonesnextkey(sdbsk((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pys iter_gdbmqs   s _ClosedDictcBs2tZdZd„ZeZZZZd„ZRS(spThis dummy class exists solely to raise a clear error msg if accessed. Copied from the Python 2.6 shelve.py cGstdƒ‚dS(Ns!invalid operation on closed shelf(s ValueError(sselfsargs((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pysclosed}scCsdSdS(Ns((sself((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pys__repr__s( s__name__s __module__s__doc__scloseds __getitem__s __setitem__s __delitem__skeyss__repr__(((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pys _ClosedDictys  s BetterShelfcBs:tZdZd„Zeiddfjo d„ZnRS(s@Shelf subclass that fixes its horrible iter implementation. cCs‡yt|iƒSWnotj octiƒ\}}}y|ii Wn)t j otdt |ƒƒ‚qƒXt |iƒSnXdS(sDavoid using iter provided by shelve/DictMixin, which loads all keys!sÎcannot iterate over this dictionary. This means that you do not have bsddb, bsddb3, or gdbm available for use by the 'shelve' module in this Python install. Please fix this! Original error message was: %sN( sitersselfsdicts TypeErrorssyssexc_infosexc_types exc_values exc_tracebacksfirstkeysAttributeErrorsstrs iter_gdbm(sselfs exc_tracebacks exc_valuesexc_type((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pys__iter__‰siicCs;t|itƒodSntii|ƒtƒ|_dS(N(s isinstancesselfsdicts _ClosedDictsshelvesShelfsclose(sself((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pyscloseœs(s__name__s __module__s__doc__s__iter__ssyss version_infosclose(((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pys BetterShelf…s  scc Os/t||||ƒ}t|||||ŽSdS(swimproved implementation of shelve.open() that won't generate bogus __del__ warning messages like Python's version does.N( s open_indexsfilenamesflagsuseHashsmodesds BetterShelfsprotocols writebacksargsskwargs( sfilenamesflagsprotocols writebacksuseHashsmodesargsskwargssd((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pys shelve_open£s(sanydbmsshelvessyssUserDictsloggersIOErrorsWrongFormatErrorsNoSuchFileErrorsPermissionsErrors ReadOnlyErrors open_anydbmsbsddbsdbsAttributeErrors ImportErrorsbsddb3sNonesFalses open_bsddbs open_indexs iter_gdbms DictMixins _ClosedDictsShelfs BetterShelfs shelve_open(sNoSuchFileErrors open_anydbms _ClosedDicts shelve_opens open_indexsbsddbsloggersbsddb3sUserDictsPermissionsErrorssyssanydbmsWrongFormatErrors iter_gdbms ReadOnlyErrorsshelves open_bsddbs BetterShelf((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pys?s>            $  PK7“; L\úÒÒpygr/dbfile.pyo;ò |†Kc@s©dkZdkZdkZdkZdkZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZ d „Z y4dk Z y e i Wne j o e‚nXWniej o]y:dkZy ei Wne j o e‚nXeZ Wq.ej o eZ q.XnXd ed d „Zd ed d „Zd„Zdeifd„ƒYZdeifd„ƒYZdeeed d„ZdS(NsWrongFormatErrorcBstZdZRS(s>attempted to open db with the wrong format e.g. btree vs. hash(s__name__s __module__s__doc__(((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pysWrongFormatError s sNoSuchFileErrorcBstZdZRS(sfile does not exist!(s__name__s __module__s__doc__(((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pysNoSuchFileErrors sPermissionsErrorcBstZdZRS(s)inadequate permissions for requested file(s__name__s __module__s__doc__(((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pysPermissionsErrors s ReadOnlyErrorcBstZdZRS(s=attempted to open a file for writing, but no write permission(s__name__s __module__s__doc__(((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pys ReadOnlyErrors cOsÊyti||ŽSWn¯tj o=}t|ƒidƒototi ||ŽSn‚nhti j oX}t|ƒ}|idƒot |ƒ‚n!|i dƒot|ƒ‚n‚nXdS(sItrap anydbm.error message and transform to our consistent exception typessbsddbsnew dbsdb typeN(sanydbmsopensargsskwargss ImportErrorsesstrsendswithsbsddbshashopenserrorsmsgsNoSuchFileErrors startswithsWrongFormatError(sargsskwargssesmsg((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pys open_anydbms sri¶cCsay/|ot||ƒSnti|||ƒSWn+tiij o…|djp |djoTyt |ƒ}Wn#t j ot d|ƒ‚nX|i ƒtd|ƒ‚q]t d|ƒ‚n–tiij otd|ƒ‚nntiij o[y(|otii‚nt||ƒSWq]tiij otd|ƒ‚q]XnXdS(s¡open bsddb index instead of hash by default. useHash=True forces it to use anydbm default (i.e. hash) instead. Also gives more meaningful error messages.scsws'insufficient permissions to open file: sfile is read-only: sno file named: s,file does not match expected shelve format: N(suseHashs open_anydbmsfilenamesflagsbsddbsbtopensmodesdbs DBAccessErrorsfilesifilesIOErrorsPermissionsErrorscloses ReadOnlyErrorsDBNoSuchFileErrorsNoSuchFileErrorsDBInvalidArgErrorsWrongFormatError(sfilenamesflagsuseHashsmodesifile((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pys open_bsddbDs. cCsTttjo0t||ƒ}| otidƒn|Snt ||||ƒSdS(Ns2Falling back to hash index: unable to import bsddb( sbsddbsNones open_anydbmsfilenamesflagsdsuseHashsloggerswarns open_bsddbsmode(sfilenamesflagsuseHashsmodesd((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pys open_indexhs  ccs8|iƒ}x%|tj o|V|i|ƒ}qWdS(siterator for gdbm objectsN(sdbsfirstkeysksNonesnextkey(sdbsk((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pys iter_gdbmqs   s _ClosedDictcBs2tZdZd„ZeZZZZd„ZRS(spThis dummy class exists solely to raise a clear error msg if accessed. Copied from the Python 2.6 shelve.py cGstdƒ‚dS(Ns!invalid operation on closed shelf(s ValueError(sselfsargs((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pysclosed}scCsdSdS(Ns((sself((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pys__repr__s( s__name__s __module__s__doc__scloseds __getitem__s __setitem__s __delitem__skeyss__repr__(((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pys _ClosedDictys  s BetterShelfcBs:tZdZd„Zeiddfjo d„ZnRS(s@Shelf subclass that fixes its horrible iter implementation. cCs‡yt|iƒSWnotj octiƒ\}}}y|ii Wn)t j otdt |ƒƒ‚qƒXt |iƒSnXdS(sDavoid using iter provided by shelve/DictMixin, which loads all keys!sÎcannot iterate over this dictionary. This means that you do not have bsddb, bsddb3, or gdbm available for use by the 'shelve' module in this Python install. Please fix this! Original error message was: %sN( sitersselfsdicts TypeErrorssyssexc_infosexc_types exc_values exc_tracebacksfirstkeysAttributeErrorsstrs iter_gdbm(sselfs exc_tracebacks exc_valuesexc_type((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pys__iter__‰siicCs;t|itƒodSntii|ƒtƒ|_dS(N(s isinstancesselfsdicts _ClosedDictsshelvesShelfsclose(sself((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pyscloseœs(s__name__s __module__s__doc__s__iter__ssyss version_infosclose(((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pys BetterShelf…s  scc Os/t||||ƒ}t|||||ŽSdS(swimproved implementation of shelve.open() that won't generate bogus __del__ warning messages like Python's version does.N( s open_indexsfilenamesflagsuseHashsmodesds BetterShelfsprotocols writebacksargsskwargs( sfilenamesflagsprotocols writebacksuseHashsmodesargsskwargssd((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pys shelve_open£s(sanydbmsshelvessyssUserDictsloggersIOErrorsWrongFormatErrorsNoSuchFileErrorsPermissionsErrors ReadOnlyErrors open_anydbmsbsddbsdbsAttributeErrors ImportErrorsbsddb3sNonesFalses open_bsddbs open_indexs iter_gdbms DictMixins _ClosedDictsShelfs BetterShelfs shelve_open(sNoSuchFileErrors open_anydbms _ClosedDicts shelve_opens open_indexsbsddbsloggersbsddb3sUserDictsPermissionsErrorssyssanydbmsWrongFormatErrors iter_gdbms ReadOnlyErrorsshelves open_bsddbs BetterShelf((s1build/bdist.darwin-8.11.1-i386/egg/pygr/dbfile.pys?s>            $  PKd—~;sÒ)'#'#pygr/downloader.pyimport os import sys from classutil import call_subprocess import logger # METHODS FOR AUTOMATIC DOWNLOADING OF RESOURCES def copy_to_file(f, ifile=None, newpath=None, blocksize=8192000): 'copy from file obj f to ifile (or create newpath if given)' if newpath is not None: ifile = file(newpath, 'wb') # binary file try: while True: s = f.read(blocksize) if s == '': break ifile.write(s) finally: if newpath is not None: ifile.close() f.close() def do_gunzip(filepath, newpath=None): 'gunzip the target using Python gzip module' from gzip import GzipFile if newpath is None: newpath = filepath[:-3] f = GzipFile(filepath) copy_to_file(f, newpath=newpath) return newpath def run_gunzip(filepath, newpath=None): 'run gunzip program as a sub process' if newpath is None: newpath = filepath[:-3] ifile = open(newpath, 'w+b') try: if call_subprocess(['gunzip', '-c', filepath], stdout=ifile): raise OSError('gunzip "%s" failed!' % filepath) finally: ifile.close() return newpath def run_unzip(filepath, newpath=None, singleFile=False, **kwargs): '''run unzip program as a sub process, save to single file newpath if desired.''' if newpath is None: newpath = filepath[:-4] # DROP THE .zip SUFFIX if singleFile: # concatenate all files into newpath ifile = file(newpath, 'wb') # copy as binary file try: status = call_subprocess(['unzip', '-p', filepath], stdout=ifile) finally: ifile.close() else: # just unzip the package as usual status = call_subprocess(['unzip', filepath]) if status != 0: raise OSError('unzip "%s" failed!' % filepath) return newpath def create_dir_if_needed(path): 'ensure that this directory exists, by creating it if needed' import os if os.path.isdir(path): return # directory exists so nothing to do create_dir_if_needed(os.path.dirname(path)) # ensure parent exists os.mkdir(path) # create this directory def create_file_with_path(basepath, filepath): 'create file in write mode, creating parent directory(s) if needed' import os.path newpath = os.path.join(basepath, filepath) create_dir_if_needed(os.path.dirname(newpath)) return file(newpath, 'wb') # copy as binary file def do_unzip(filepath, newpath=None, singleFile=False, **kwargs): 'extract zip archive, to single file given by newpath if desired' # WARNING: zipfile module reads entire file into memory! if newpath is None: newpath = filepath[:-4] from zipfile import ZipFile t = ZipFile(filepath, 'r') try: if singleFile: # extract to a single file ifile = file(newpath, 'wb') # copy as binary file try: for name in t.namelist(): ifile.write(t.read(name)) # may run out of memory!! finally: ifile.close() else: # extract a bunch of files as usual for name in t.namelist(): ifile = create_file_with_path(newpath, name) ifile.write(t.read(name)) # may run out of memory!! ifile.close() finally: t.close() return newpath def do_untar(filepath, mode='r|', newpath=None, singleFile=False, **kwargs): 'extract tar archive, to single file given by newpath if desired' if newpath is None: newpath = filepath + '.out' import tarfile t = tarfile.open(filepath, mode) try: if singleFile: # extract to a single file ifile = file(newpath, 'wb') # copy as binary file try: for name in t.getnames(): f = t.extractfile(name) copy_to_file(f, ifile) finally: ifile.close() else: # extract a bunch of files as usual import os t.extractall(os.path.dirname(newpath)) finally: t.close() return newpath def uncompress_file(filepath, **kwargs): '''stub for applying appropriate uncompression based on file suffix (.tar .tar.gz .tgz .tar.bz2 .gz and .zip for now)''' if filepath.endswith('.zip'): logger.info('unzipping %s...' % filepath) try: return run_unzip(filepath, **kwargs) except OSError: return do_unzip(filepath, **kwargs) elif filepath.endswith('.tar'): logger.info('untarring %s...' % filepath) return do_untar(filepath, newpath=filepath[:-4], **kwargs) elif filepath.endswith('.tgz'): logger.info('untarring %s...' % filepath) return do_untar(filepath, mode='r:gz', newpath=filepath[:-4], **kwargs) elif filepath.endswith('.tar.gz'): logger.info('untarring %s...' % filepath) return do_untar(filepath, mode='r:gz', newpath=filepath[:-7], **kwargs) elif filepath.endswith('.tar.bz2'): logger.info('untarring %s...' % filepath) return do_untar(filepath, mode='r:bz2', newpath=filepath[:-8], **kwargs) elif filepath.endswith('.gz'): logger.info('gunzipping %s...' % filepath) try: # could use gzip module, but it's two times slower!! return run_gunzip(filepath, **kwargs) # run as sub process except OSError: # on Windows, have to run as python module return do_gunzip(filepath, **kwargs) return filepath # DEFAULT: NOT COMPRESSED, SO JUST HAND BACK FILENAME def download_monitor(bcount, bsize, totalsize): 'show current download progress' if bcount == 0: download_monitor.percentage_last_shown = 0. bytes = bcount * bsize percentage = bytes * 100. / totalsize if percentage >= 10. + download_monitor.percentage_last_shown: logger.info('downloaded %s bytes (%2.1f%%)...' % (bytes, percentage)) download_monitor.percentage_last_shown = percentage def download_unpickler(path, filename, kwargs): 'try to download the desired file, and uncompress it if need be' import os import urllib import classutil if filename is None: filename = os.path.basename(path) try: dl_dir = os.environ['WORLDBASEDOWNLOAD'] except KeyError: dl_dir = classutil.get_env_or_cwd('PYGRDATADOWNLOAD') filepath = os.path.join(dl_dir, filename) logger.info('Beginning download of %s to %s...' % (path, filepath)) t = urllib.urlretrieve(path, filepath, download_monitor) logger.info('Download done.') filepath = uncompress_file(filepath, **kwargs) # UNCOMPRESS IF NEEDED # PATH TO WHERE THIS FILE IS NOW STORED o = classutil.SourceFileName(filepath) o._saveLocalBuild = True # MARK THIS FOR SAVING IN LOCAL PYGR.DATA return o download_unpickler.__safe_for_unpickling__ = 1 class SourceURL(object): '''unpickling this object will trigger downloading of the desired path, which will be cached to WORLDBASEDOWNLOAD directory if any. The value returned from unpickling will simply be the path to the downloaded file, as a SourceFileName''' _worldbase_no_cache = True # force worldbase to always re-load this class def __init__(self, path, filename=None, **kwargs): self.path = path self.kwargs = kwargs self.filename = filename if path.startswith('http:'): # make sure we can read this URL import httplib conn = httplib.HTTPConnection(path.split('/')[2]) try: conn.request('GET', '/'.join([''] + path.split('/')[3:])) r1 = conn.getresponse() if r1.status != 200: raise OSError('http GET failed: %d %s, %s' % (r1.status, r1.reason, path)) finally: conn.close() def __reduce__(self): return (download_unpickler, (self.path, self.filename, self.kwargs)) def generic_build_unpickler(cname, args, kwargs): 'does nothing but construct the specified klass with the specified args' if cname == 'BlastDB': from seqdb import BlastDB as klass else: raise ValueError('''class name not registered for unpickling security. Add it to pygr.downloader.generic_build_unpickler if needed: ''' + cname) o = klass(*args, **kwargs) o._saveLocalBuild = True # MARK FOR LOCAL PYGR.DATA SAVE return o generic_build_unpickler.__safe_for_unpickling__ = 1 class GenericBuilder(object): 'proxy for constructing the desired klass on unpickling' _worldbase_no_cache = True # force worldbase to always re-load this class def __init__(self, cname, *args, **kwargs): self.cname = cname self.args = args self.kwargs = kwargs def __reduce__(self): return (generic_build_unpickler, (self.cname, self.args, self.kwargs)) PK7“;¼t@Æç+ç+pygr/downloader.pyc;ò |†Kc@súdkZdkZdklZdkZeedd„Zed„Zed„Zee d„Z d„Z d„Z ee d „Z d ee d „Zd „Zd „Zd„Zde_defd„ƒYZd„Zde_defd„ƒYZdS(N(scall_subprocessi}cCsŽ|tj ot|dƒ}nzAx:to2|i|ƒ}|djoPn|i |ƒq&WWd|tj o|i ƒn|i ƒXdS(s:copy from file obj f to ifile (or create newpath if given)swbsN( snewpathsNonesfilesifilesTruesfsreads blocksizessswritesclose(sfsifilesnewpaths blocksizess((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pys copy_to_file s   cCsLdkl}|tjo|d }n||ƒ}t|d|ƒ|SdS(s*gunzip the target using Python gzip module(sGzipFileiýÿÿÿsnewpathN(sgzipsGzipFilesnewpathsNonesfilepathsfs copy_to_file(sfilepathsnewpathsfsGzipFile((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pys do_gunzips   cCst|tjo|d }nt|dƒ}z4tdd|gd|ƒotd|ƒ‚nWd|iƒX|SdS(s#run gunzip program as a sub processiýÿÿÿsw+bsgunzips-csstdoutsgunzip "%s" failed!N(snewpathsNonesfilepathsopensifilescall_subprocesssOSErrorsclose(sfilepathsnewpathsifile((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pys run_gunzip#s  cKs|tjo|d }n|o@t|dƒ}ztdd|gd|ƒ}Wd|iƒXntd|gƒ}|djot d|ƒ‚n|SdS( sOrun unzip program as a sub process, save to single file newpath if desired.iüÿÿÿswbsunzips-psstdoutNisunzip "%s" failed!( snewpathsNonesfilepaths singleFilesfilesifilescall_subprocesssstatussclosesOSError(sfilepathsnewpaths singleFileskwargssstatussifile((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pys run_unzip0s  cCsKdk}|ii|ƒodSnt|ii|ƒƒ|i|ƒdS(s;ensure that this directory exists, by creating it if neededN(sosspathsisdirscreate_dir_if_neededsdirnamesmkdir(spathsos((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pyscreate_dir_if_neededBs  cCsEdk}|ii||ƒ}t|ii|ƒƒt |dƒSdS(sAcreate file in write mode, creating parent directory(s) if neededNswb( sos.pathsosspathsjoinsbasepathsfilepathsnewpathscreate_dir_if_neededsdirnamesfile(sbasepathsfilepathsnewpathsos((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pyscreate_file_with_pathKs  cKsð|tjo|d }ndkl}||dƒ}z£|oRt|dƒ}z1x*|i ƒD]}|i |i |ƒƒq`WWd|i ƒXnGxC|i ƒD]5}t||ƒ}|i |i |ƒƒ|i ƒq WWd|i ƒX|SdS(s?extract zip archive, to single file given by newpath if desirediüÿÿÿ(sZipFilesrswbN(snewpathsNonesfilepathszipfilesZipFilests singleFilesfilesifilesnamelistsnameswritesreadsclosescreate_file_with_path(sfilepathsnewpaths singleFileskwargssnamesZipFilesifilest((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pysdo_unzipSs,     sr|c KsÑ|tjo|d}ndk}|i||ƒ} z…|oXt|dƒ}z7x0| i ƒD]"}| i |ƒ}t||ƒq_WWd|iƒXn#dk} | i| ii|ƒƒWd| iƒX|SdS(s?extract tar archive, to single file given by newpath if desireds.outNswb(snewpathsNonesfilepathstarfilesopensmodests singleFilesfilesifilesgetnamessnames extractfilesfs copy_to_filesclosesoss extractallspathsdirname( sfilepathsmodesnewpaths singleFileskwargssnamesfstarfilesifilesosst((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pysdo_untarls(     cKs¼|idƒoItid|ƒyt||SWq´tj ot||Sq´Xn\|idƒo,tid|ƒt|d|d |Sn |idƒo2tid|ƒt|dd d|d |SnÞ|id ƒo2tid|ƒt|dd d|d |Snœ|id ƒo2tid|ƒt|dd d|d |SnZ|idƒoItid|ƒyt ||SWq´tj ot ||Sq´Xn|SdS(svstub for applying appropriate uncompression based on file suffix (.tar .tar.gz .tgz .tar.bz2 .gz and .zip for now)s.zipsunzipping %s...s.tarsuntarring %s...snewpathiüÿÿÿs.tgzsmodesr:gzs.tar.gziùÿÿÿs.tar.bz2sr:bz2iøÿÿÿs.gzsgunzipping %s...N( sfilepathsendswithsloggersinfos run_unzipskwargssOSErrorsdo_unzipsdo_untars run_gunzips do_gunzip(sfilepathskwargs((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pysuncompress_fileƒs4!!!cCsn|djo dt_n||}|d|}|dtijo$tid||fƒ|t_ndS(sshow current download progressif0.0f100.0f10.0s downloaded %s bytes (%2.1f%%)...N( sbcountsdownload_monitorspercentage_last_shownsbsizesbytess totalsizes percentagesloggersinfo(sbcountsbsizes totalsizesbytess percentage((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pysdownload_monitor£s   c Csñdk} dk}dk}|tjo| ii|ƒ}ny| id}Wn"t j o|i dƒ}nX| ii ||ƒ}t id||fƒ|i||tƒ}t idƒt||}|i|ƒ}t|_|SdS(s>try to download the desired file, and uncompress it if need beNsWORLDBASEDOWNLOADsPYGRDATADOWNLOADs!Beginning download of %s to %s...sDownload done.(sossurllibs classutilsfilenamesNonespathsbasenamesenvironsdl_dirsKeyErrorsget_env_or_cwdsjoinsfilepathsloggersinfos urlretrievesdownload_monitorstsuncompress_fileskwargssSourceFileNamesosTrues_saveLocalBuild( spathsfilenameskwargssos classutilsfilepathsurllibsdl_dirstsos((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pysdownload_unpickler¯s$      is SourceURLcBs)tZdZeZed„Zd„ZRS(sóunpickling this object will trigger downloading of the desired path, which will be cached to WORLDBASEDOWNLOAD directory if any. The value returned from unpickling will simply be the path to the downloaded file, as a SourceFileNamecKsÖ||_||_||_|idƒo§dk}|i|idƒdƒ}zp|i ddi dg|idƒdƒƒ|i ƒ}|i djo#td|i |i|fƒ‚nWd|iƒXndS( Nshttp:s/isGETsiiÈshttp GET failed: %d %s, %s(spathsselfskwargssfilenames startswithshttplibsHTTPConnectionssplitsconnsrequestsjoins getresponsesr1sstatussOSErrorsreasonsclose(sselfspathsfilenameskwargsshttplibsr1sconn((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pys__init__Îs    - 'cCs t|i|i|iffSdS(N(sdownload_unpicklersselfspathsfilenameskwargs(sself((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pys __reduce__Þs(s__name__s __module__s__doc__sTrues_worldbase_no_cachesNones__init__s __reduce__(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pys SourceURLÇs  cCsN|djodkl}ntd|ƒ‚|||Ž}t|_ |SdS(sFdoes nothing but construct the specified klass with the specified argssBlastDB(sBlastDBspclass name not registered for unpickling security. Add it to pygr.downloader.generic_build_unpickler if needed: N( scnamesseqdbsBlastDBsklasss ValueErrorsargsskwargssosTrues_saveLocalBuild(scnamesargsskwargssosklass((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pysgeneric_build_unpicklerâs  sGenericBuildercBs&tZdZeZd„Zd„ZRS(s6proxy for constructing the desired klass on unpicklingcOs||_||_||_dS(N(scnamesselfsargsskwargs(sselfscnamesargsskwargs((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pys__init__ós  cCs t|i|i|iffSdS(N(sgeneric_build_unpicklersselfscnamesargsskwargs(sself((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pys __reduce__øs(s__name__s __module__s__doc__sTrues_worldbase_no_caches__init__s __reduce__(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pysGenericBuilderïs  (sosssyss classutilscall_subprocesssloggersNones copy_to_files do_gunzips run_gunzipsFalses run_unzipscreate_dir_if_neededscreate_file_with_pathsdo_unzipsdo_untarsuncompress_filesdownload_monitorsdownload_unpicklers__safe_for_unpickling__sobjects SourceURLsgeneric_build_unpicklersGenericBuilder(sdo_untarsdo_unzips copy_to_files SourceURLsuncompress_filesGenericBuildersgeneric_build_unpicklers run_gunzips do_gunzipscreate_file_with_pathssysscreate_dir_if_neededsdownload_unpicklerscall_subprocesssloggersdownload_monitorsoss run_unzip((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pys?s&         PK7“;¼t@Æç+ç+pygr/downloader.pyo;ò |†Kc@súdkZdkZdklZdkZeedd„Zed„Zed„Zee d„Z d„Z d„Z ee d „Z d ee d „Zd „Zd „Zd„Zde_defd„ƒYZd„Zde_defd„ƒYZdS(N(scall_subprocessi}cCsŽ|tj ot|dƒ}nzAx:to2|i|ƒ}|djoPn|i |ƒq&WWd|tj o|i ƒn|i ƒXdS(s:copy from file obj f to ifile (or create newpath if given)swbsN( snewpathsNonesfilesifilesTruesfsreads blocksizessswritesclose(sfsifilesnewpaths blocksizess((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pys copy_to_file s   cCsLdkl}|tjo|d }n||ƒ}t|d|ƒ|SdS(s*gunzip the target using Python gzip module(sGzipFileiýÿÿÿsnewpathN(sgzipsGzipFilesnewpathsNonesfilepathsfs copy_to_file(sfilepathsnewpathsfsGzipFile((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pys do_gunzips   cCst|tjo|d }nt|dƒ}z4tdd|gd|ƒotd|ƒ‚nWd|iƒX|SdS(s#run gunzip program as a sub processiýÿÿÿsw+bsgunzips-csstdoutsgunzip "%s" failed!N(snewpathsNonesfilepathsopensifilescall_subprocesssOSErrorsclose(sfilepathsnewpathsifile((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pys run_gunzip#s  cKs|tjo|d }n|o@t|dƒ}ztdd|gd|ƒ}Wd|iƒXntd|gƒ}|djot d|ƒ‚n|SdS( sOrun unzip program as a sub process, save to single file newpath if desired.iüÿÿÿswbsunzips-psstdoutNisunzip "%s" failed!( snewpathsNonesfilepaths singleFilesfilesifilescall_subprocesssstatussclosesOSError(sfilepathsnewpaths singleFileskwargssstatussifile((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pys run_unzip0s  cCsKdk}|ii|ƒodSnt|ii|ƒƒ|i|ƒdS(s;ensure that this directory exists, by creating it if neededN(sosspathsisdirscreate_dir_if_neededsdirnamesmkdir(spathsos((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pyscreate_dir_if_neededBs  cCsEdk}|ii||ƒ}t|ii|ƒƒt |dƒSdS(sAcreate file in write mode, creating parent directory(s) if neededNswb( sos.pathsosspathsjoinsbasepathsfilepathsnewpathscreate_dir_if_neededsdirnamesfile(sbasepathsfilepathsnewpathsos((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pyscreate_file_with_pathKs  cKsð|tjo|d }ndkl}||dƒ}z£|oRt|dƒ}z1x*|i ƒD]}|i |i |ƒƒq`WWd|i ƒXnGxC|i ƒD]5}t||ƒ}|i |i |ƒƒ|i ƒq WWd|i ƒX|SdS(s?extract zip archive, to single file given by newpath if desirediüÿÿÿ(sZipFilesrswbN(snewpathsNonesfilepathszipfilesZipFilests singleFilesfilesifilesnamelistsnameswritesreadsclosescreate_file_with_path(sfilepathsnewpaths singleFileskwargssnamesZipFilesifilest((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pysdo_unzipSs,     sr|c KsÑ|tjo|d}ndk}|i||ƒ} z…|oXt|dƒ}z7x0| i ƒD]"}| i |ƒ}t||ƒq_WWd|iƒXn#dk} | i| ii|ƒƒWd| iƒX|SdS(s?extract tar archive, to single file given by newpath if desireds.outNswb(snewpathsNonesfilepathstarfilesopensmodests singleFilesfilesifilesgetnamessnames extractfilesfs copy_to_filesclosesoss extractallspathsdirname( sfilepathsmodesnewpaths singleFileskwargssnamesfstarfilesifilesosst((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pysdo_untarls(     cKs¼|idƒoItid|ƒyt||SWq´tj ot||Sq´Xn\|idƒo,tid|ƒt|d|d |Sn |idƒo2tid|ƒt|dd d|d |SnÞ|id ƒo2tid|ƒt|dd d|d |Snœ|id ƒo2tid|ƒt|dd d|d |SnZ|idƒoItid|ƒyt ||SWq´tj ot ||Sq´Xn|SdS(svstub for applying appropriate uncompression based on file suffix (.tar .tar.gz .tgz .tar.bz2 .gz and .zip for now)s.zipsunzipping %s...s.tarsuntarring %s...snewpathiüÿÿÿs.tgzsmodesr:gzs.tar.gziùÿÿÿs.tar.bz2sr:bz2iøÿÿÿs.gzsgunzipping %s...N( sfilepathsendswithsloggersinfos run_unzipskwargssOSErrorsdo_unzipsdo_untars run_gunzips do_gunzip(sfilepathskwargs((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pysuncompress_fileƒs4!!!cCsn|djo dt_n||}|d|}|dtijo$tid||fƒ|t_ndS(sshow current download progressif0.0f100.0f10.0s downloaded %s bytes (%2.1f%%)...N( sbcountsdownload_monitorspercentage_last_shownsbsizesbytess totalsizes percentagesloggersinfo(sbcountsbsizes totalsizesbytess percentage((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pysdownload_monitor£s   c Csñdk} dk}dk}|tjo| ii|ƒ}ny| id}Wn"t j o|i dƒ}nX| ii ||ƒ}t id||fƒ|i||tƒ}t idƒt||}|i|ƒ}t|_|SdS(s>try to download the desired file, and uncompress it if need beNsWORLDBASEDOWNLOADsPYGRDATADOWNLOADs!Beginning download of %s to %s...sDownload done.(sossurllibs classutilsfilenamesNonespathsbasenamesenvironsdl_dirsKeyErrorsget_env_or_cwdsjoinsfilepathsloggersinfos urlretrievesdownload_monitorstsuncompress_fileskwargssSourceFileNamesosTrues_saveLocalBuild( spathsfilenameskwargssos classutilsfilepathsurllibsdl_dirstsos((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pysdownload_unpickler¯s$      is SourceURLcBs)tZdZeZed„Zd„ZRS(sóunpickling this object will trigger downloading of the desired path, which will be cached to WORLDBASEDOWNLOAD directory if any. The value returned from unpickling will simply be the path to the downloaded file, as a SourceFileNamecKsÖ||_||_||_|idƒo§dk}|i|idƒdƒ}zp|i ddi dg|idƒdƒƒ|i ƒ}|i djo#td|i |i|fƒ‚nWd|iƒXndS( Nshttp:s/isGETsiiÈshttp GET failed: %d %s, %s(spathsselfskwargssfilenames startswithshttplibsHTTPConnectionssplitsconnsrequestsjoins getresponsesr1sstatussOSErrorsreasonsclose(sselfspathsfilenameskwargsshttplibsr1sconn((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pys__init__Îs    - 'cCs t|i|i|iffSdS(N(sdownload_unpicklersselfspathsfilenameskwargs(sself((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pys __reduce__Þs(s__name__s __module__s__doc__sTrues_worldbase_no_cachesNones__init__s __reduce__(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pys SourceURLÇs  cCsN|djodkl}ntd|ƒ‚|||Ž}t|_ |SdS(sFdoes nothing but construct the specified klass with the specified argssBlastDB(sBlastDBspclass name not registered for unpickling security. Add it to pygr.downloader.generic_build_unpickler if needed: N( scnamesseqdbsBlastDBsklasss ValueErrorsargsskwargssosTrues_saveLocalBuild(scnamesargsskwargssosklass((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pysgeneric_build_unpicklerâs  sGenericBuildercBs&tZdZeZd„Zd„ZRS(s6proxy for constructing the desired klass on unpicklingcOs||_||_||_dS(N(scnamesselfsargsskwargs(sselfscnamesargsskwargs((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pys__init__ós  cCs t|i|i|iffSdS(N(sgeneric_build_unpicklersselfscnamesargsskwargs(sself((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pys __reduce__øs(s__name__s __module__s__doc__sTrues_worldbase_no_caches__init__s __reduce__(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pysGenericBuilderïs  (sosssyss classutilscall_subprocesssloggersNones copy_to_files do_gunzips run_gunzipsFalses run_unzipscreate_dir_if_neededscreate_file_with_pathsdo_unzipsdo_untarsuncompress_filesdownload_monitorsdownload_unpicklers__safe_for_unpickling__sobjects SourceURLsgeneric_build_unpicklersGenericBuilder(sdo_untarsdo_unzips copy_to_files SourceURLsuncompress_filesGenericBuildersgeneric_build_unpicklers run_gunzips do_gunzipscreate_file_with_pathssysscreate_dir_if_neededsdownload_unpicklerscall_subprocesssloggersdownload_monitorsoss run_unzip((s5build/bdist.darwin-8.11.1-i386/egg/pygr/downloader.pys?s&         PKd—~;…¹rRE|E|pygr/graphquery.py from __future__ import generators from mapping import * class QueryMatchWrapper(dict): """build a queryMatch mapping on demand, since its not actually needed during query traversal""" def __init__(self, dataMatch, compiler): dict.__init__(self) for k, v in dataMatch.items(): # INVERT THE DATA MATCH MAPPING self[v] = k for i in range(compiler.n): # ALSO SAVE MAPPINGS TO DATA EDGES gqi = compiler.gqi[i] self[gqi.fromNode, gqi.queryNode] = compiler.dataEdge[i] class QueryMatchDescriptor(object): def __get__(self, obj, objtype): return QueryMatchWrapper(obj.dataMatch, obj) class QueryMatcher(object): "map a query node or edge on demand" def __init__(self, compiler): self.compiler = compiler def __getitem__(self, k): for q, d in self.iteritems(): if q == k: return d return KeyError def __iter__(self, k): for k, v in self.iteritems(): yield k def iteritems(self): for dataNode, queryNode in self.compiler.dataMatch.items(): yield queryNode, dataNode # RETURN NODE MAPPINGS for i in range(self.compiler.n): # ALSO SAVE MAPPINGS TO DATA EDGES gqi = self.compiler.gqi[i] # RETURN EDGE MAPPINGS yield (gqi.fromNode, gqi.queryNode), self.compiler.dataEdge[i] def items(self): return [x for x in self.iteritems()] def __repr__(self): return '{' + ','.join([repr(k) + ':' + repr(v) for k, v in self.iteritems()]) + '}' class GraphQueryCompiler(object): 'compile a series of GraphQueryIterators into python code, run them' #queryMatch = QueryMatchDescriptor() _lang = "" # NO LANGUAGE STEM def __init__(self, name='graphquery', globalDict=None): self.name = name self.code = [] self.unmark_code = [] self.next_code = [] self.end_code = [] self.indent = [] self.gqi = [] self.queryLayerGraph = dictGraph() self.n = 0 if globalDict is None: self._compiled = {} else: self._compiled = globalDict self.queryMatch = QueryMatcher(self) def __getitem__(self, key): 'return appropropriate code for accessing nodes/edges in data or query' if key == 'n': return self.n elif key == 'name': return self.name elif key == 'dataGraph': queryEdge = self.gqi[self.n].queryGraph[self.gqi[self.n].fromNode]\ [self.gqi[self.n].queryNode] try: # CHECK IF QUERY EDGE USES A NON-DEFAULT DATA GRAPH dg = queryEdge['dataGraph'] return 'self.gqi[%d].dataGraph' % self.n except (TypeError, KeyError): return 'dataGraph' elif key == 'filter': return 'self.gqi[%d].filter' % self.n elif key == 'toQueryNode': return 'self.gqi[%d].queryNode' % self.n elif key == 'fromQueryNode': return 'self.gqi[%d].fromNode' % self.n if key[:2] == 'to': layer = self.queryLayerGraph[self.gqi[self.n].queryNode] elif key[:4] == 'from': layer = self.queryLayerGraph[self.gqi[self.n].fromNode] if key[-8:] == 'DataNode': # GET 1ST LAYER WHERE THIS NODE ASSIGNED return 'dataNode%d' % layer.values()[0] if key[-8:] == 'DataEdge': # GET LAST LAYER, WHERE THIS EDGE CREATED return 'dataEdge[%d]' % layer.values()[-1] if key == 'level': return self.n try: return getattr(self.gqi[self.n], key) except AttributeError: raise KeyError('%s not a valid GraphQueryCompiler key' % key) def indent_code(self, codestr, current_indent): 'calculate indentation levels added by code in codestr' codestr = codestr % self # PERFORM MACRO SUBSTITUTIONS lines = codestr.split('\n') lastline = lines[-1] if lastline == '' and len(lines) > 1: # IGNORE TERMINAL BLANK LINE lastline = lines[-2] # Determine final indentation level. nindent = len(lastline.split('\t')) - 1 if len(lastline) > 0 and lastline[-1] == ':': nindent += 1 s = '' # NOW FORMAT THE CODE WITH PROPER INDENTATION LEVEL for line in lines: s += current_indent * '\t' + line + '\n' return s, current_indent + nindent def __iadd__(self, gqi): 'add a GraphQueryIterator to be compiled into this query' self.gqi.append(gqi) if gqi.queryNode not in self.queryLayerGraph: # NOT ALREADY BOUND? self.queryLayerGraph += gqi.queryNode codestr = getattr(gqi, self._lang + '_generator_code') markstr = getattr(gqi, self._lang + '_index_code') unmarkstr = getattr(gqi, self._lang + '_unmark_code') try: endcode = getattr(gqi, self._lang + '_end_code') except AttributeError: endcode = '' try: nextcode = getattr(gqi, self._lang + '_next_code') except AttributeError: nextcode = '' self.lastGenerator = self.n else: codestr = getattr(gqi, self._lang + '_closure_code') markstr = None unmarkstr = getattr(gqi, self._lang + '_unmark_closure_code') try: endcode = getattr(gqi, self._lang + '_end_closure_code') except AttributeError: endcode = '' try: nextcode = getattr(gqi, self._lang + '_next_closure_code') except AttributeError: nextcode = '' #BIND QUERY EDGE TO THIS LAYER self.queryLayerGraph[gqi.queryNode][gqi.fromNode] = self.n try: # GET INDENTATION LEVEL FROM PREVIOUS LAYER current_indent = self.indent[-1] except IndexError: current_indent = 1 # TOPLEVEL: MUST INDENT INSIDE def self.end_code.append(self.indent_code(endcode, current_indent)[0]) s, current_indent = self.indent_code(codestr, current_indent) self.next_code.append(self.indent_code(nextcode, current_indent)[0]) if hasattr(gqi, 'filter'): s2, current_indent = self.indent_code(getattr(gqi, self._lang + \ '_filter_code'), current_indent) s += s2 if hasattr(gqi, 'filtercode'): s2, current_indent = self.indent_code(gqi.filtercode, current_indent) s += s2 if markstr is not None: s2, current_indent = self.indent_code(markstr, current_indent) s += s2 if unmarkstr is not None: s2, tail_indent = self.indent_code(unmarkstr, current_indent) self.unmark_code.append(s2) else: self.unmark_code.append('') # NO UNMARK CODE, SO JUST APPEND BLANK self.code.append(s) self.indent.append(current_indent) self.n += 1 return self # iadd MUST RETURN self!! _def_code = """ def %(name)s(self, dataGraph, dataMatch=None, queryMatch=None): \tif dataMatch is None: dataMatch={} \tself.dataMatch = dataMatch \tdataEdge = %(n)d * [None] \tself.dataEdge = dataEdge """ _yield_code = 'yield self.queryMatch\n' _end_code = '' def __str__(self): 'generate code for this query, as a string function definition' s = self._def_code % self for layer in self.code: # GENERATE ALL THE TRAVERSAL CODE s += layer # yield the result s2 = self.indent_code(self._yield_code, self.indent[-1])[0] s += s2 i = len(self.unmark_code) - 1 while i >= 0: # GENERATE THE UNMARKING CODE... s += self.unmark_code[i] s += self.next_code[i] s += self.end_code[i] i -= 1 s += self._end_code % self return s def run(self, dataGraph, *args, **kwargs): 'run the query, pre-compiling it if necessary' try: # JUST TRY RUNNING OUR FUNCTION: IT RETURNS AN ITERATOR return self._compiled[self.name](self, dataGraph, *args, **kwargs) except KeyError: self.compile() # Run it. return self._compiled[self.name](self, dataGraph, *args, **kwargs) def compile(self): 'compile using Python exec statement' exec str(self) in self._compiled # COMPILE OUR FUNCTION def find_distutils_lib(path='build'): 'locate the build/lib path where distutils builds modules' import os dirs = os.listdir('build') for d in dirs: if d[:4] == 'lib.': return path + '/' + d raise OSError((1, 'Unable to locate where distutils built your module!')) class GraphQueryPyrex(GraphQueryCompiler): 'compile a series of GraphQueryIterators into pyrex code, run them' #queryMatch = QueryMatchDescriptor() _lang = "_pyrex" # NO LANGUAGE STEM def __getitem__(self, key): 'return appropropriate code for accessing nodes/edges in data or query' if key == 'n': return self.n elif key == 'name': return self.name elif key == 'dataGraph': try: # CHECK IF QUERY EDGE USES A NON-DEFAULT DATA GRAPH queryEdge = self.gqi[self.n].queryGraph[self.gqi[self.n].\ fromNode][self.gqi[self.n].queryNode] dg = queryEdge['dataGraph'] return 'self.gqi[%d].dataGraph' % self.n except (TypeError, KeyError): return 'dataGraph' elif key == 'filter': return 'self.gqi[%d].filter' % self.n elif key == 'toQueryNode': return 'self.gqi[%d].queryNode' % self.n elif key == 'fromQueryNode': return 'self.gqi[%d].fromNode' % self.n if key[:2] == 'to': layer = self.queryLayerGraph[self.gqi[self.n].queryNode] elif key[:4] == 'from': layer = self.queryLayerGraph[self.gqi[self.n].fromNode] if key[-8:] == 'DataNode': # GET 1ST LAYER WHERE THIS NODE ASSIGNED return 'dataNode%d' % layer.values()[0] if key[-8:] == 'DataEdge': # GET LAST LAYER, WHERE THIS EDGE CREATED return 'dataEdge%d' % layer.values()[-1] if key[-8:] == 'DataDict': # GET 1ST LAYER WHERE THIS NODE ASSIGNED return 'cDict%d' % layer.values()[0] if key[-7:] == 'DataPtr': # GET 1ST LAYER WHERE THIS NODE ASSIGNED return 'pDictEntry%d' % layer.values()[0] if key[-11:] == 'DataPtrCont': # GET 1ST LAYER WHERE THIS NODE ASSIGNED return 'pGraphEntry%d' % layer.values()[0] if key[-11:] == 'DataCounter': # GET 1ST LAYER WHERE THIS NODE ASSIGNED return 'i%d' % layer.values()[0] if key == 'toDataNodeUnmatched': l = ['dataNode%d!=dataNode%d' % (self.queryLayerGraph[self.gqi[i].queryNode].values()[0], self.queryLayerGraph[self.gqi[self.n].queryNode].values()[0]) for i in range(self.n)] if len(l) > 0: return ' and '.join(l) else: return 'True' if key == 'dataNodeDefs': return ','.join(['dataNode%d' % i for i in range(self.n)]) if key == 'dataEdgeDefs': return ','.join(['dataEdge%d' % i for i in range(self.n)]) if key == 'dataDictDefs': return ','.join(['*cDict%d' % i for i in range(self.n)]) if key == 'dataPtrDefs': return ','.join(['*pDictEntry%d' % i for i in range(self.n)]) if key == 'dataPtrContDefs': return ','.join(['*pGraphEntry%d' % i for i in range(self.n)]) if key == 'dataCounterDefs': return ','.join(['i%d' % i for i in range(self.n)]) if key == 'dataCounterArgs': return ','.join(['int i%d' % i for i in range(self.n)]) if key == 'itaVector': return ','.join(['ita.vector[%d]' % i for i in range(self.n)]) if key == 'itaTuple': return ',\\\n'.join(['p_ita[%d]' % i for i in range(2 * self.n)]) if key == 'resultTuple': return ',\\\n'.join(['dataNode%d,dataEdge%d' % (self.queryLayerGraph[self.gqi[i].queryNode].values()[0], i) for i in range(self.n)]) if key == 'resultTuples': return ','.join(['(dataNode%d,dataEdge%d)' % (self.queryLayerGraph[self.gqi[i].queryNode].values()[0], i) for i in range(self.n)]) if key == 'level' or key == 'nEdges': return self.n if key == 'lastGenerator': return self.lastGenerator try: return getattr(self.gqi[self.n], key) except AttributeError: raise KeyError('%s not a valid GraphQueryPyrex key' % key) _def_code = """ cimport cdict cdef c_%(name)s(cdict.CGraphDict cgd, cdict.IntTupleArray ita, %(dataCounterArgs)s): \tcdef cdict.CGraph *dataGraph \tcdef cdict.CDict %(dataDictDefs)s \tcdef cdict.CDictEntry %(dataPtrDefs)s \tcdef cdict.CDictEntry *pd_temp \tcdef cdict.CGraphEntry %(dataPtrContDefs)s \tcdef cdict.CGraphEntry *p_temp \t#cdef int %(dataCounterDefs)s \tcdef int %(dataNodeDefs)s \tcdef int %(dataEdgeDefs)s \tcdef int *p_ita \tdataGraph = cgd.d \tp_ita = ita.data """ _yield_code = """ %(itaTuple)s = %(resultTuple)s p_ita = p_ita + 2 * %(nEdges)d ita.n = ita.n + 1 if ita.n >= ita.n_alloc: \tita.set_vector((%(dataCounterDefs)s), 1) \treturn """ #results.append((%(resultTuples)s))\n _end_code = """ \tita.isDone = 1 # COMPLETED THIS QUERY from pygr import cdict def %(name)s(self, g, int maxhit=1000, cdict.IntTupleArray ita=None, qml=None): \tif not isinstance(g, cdict.CGraphDict): \t\tg = cdict.CGraphDict(g, cdict.KeyIndex()) \tif ita is None: \t\tita = cdict.IntTupleArray(maxhit, %(nEdges)d, 2, %(lastGenerator)d) \tita.n = 0 \tc_%(name)s(g, ita, %(itaVector)s) # RUN THE QUERY \tif qml is not None: \t\tqml.matches = ita \t\treturn qml \telse: \t\treturn cdict.QueryMatchList(self, ita, g, %(name)s) """ def compile(self): 'compile using Pyrex, Distutils, and finally import!' import os try: # We need access to Pygr source code to access cgraph functions # in this module. pygrpath = os.environ['PYGRPATH'] except KeyError: raise OSError((1, """pyrex compilation requires access to pygr source. Please set the environment variable PYGRPATH to \ the top of the pygr source package.""")) if not os.access(pygrpath + '/pygr/cgraph.c', os.R_OK): raise OSError((1, """Unable to access %s/pygr/cgraph.c. Is PYGRPATH set to the top of the pygr source package?""" % pygrpath)) exit_status = os.system('cp %s/pygr/cgraph.c %s/pygr/cgraph.h \ %s/pygr/cdict.pxd .' % (pygrpath, pygrpath, pygrpath)) if exit_status != 0: # RUN THE PYREX COMPILER TO PRODUCE C raise OSError((exit_status, 'unable to copy source code to this directory.')) # Construct a unique name for the module. modulename = self.name + str(id(self)) myfile = file(modulename + '.pyx', 'w') # GENERATE PYREX CODE myfile.write(str(self)) # WRITE CODE myfile.close() exit_status = os.system('pyrexc %s.pyx' % (modulename)) if exit_status != 0: # RUN THE PYREX COMPILER TO PRODUCE C raise OSError((exit_status, 'pyrex compilation failed. Is \ pyrexc missing or not in your PATH?')) # Build the module using distutils. from distutils.core import setup, Extension module1 = Extension(modulename, sources=['cgraph.c', modulename + '.c']) setup(name=modulename, description='autogenerated by pygr.graphquery', ext_modules=[module1], script_args=['build']) # Find out where distutils put our built module. modulepath = find_distutils_lib() # Work around a nasty problem with Pyrex cimport - there is no way to # tell it the module is in a subdirectory! Here, 'from pygr cimport # cdict' or 'cimport pygr.cdict' fail; one MUST say 'cimport cdict'. import sys import os.path from pygr import cdict # Add the module's location to our path. sys.path += [os.path.dirname(cdict.__file__)] import imp # FINALLY, TRY TO IMPORT THE NEW MODULE modulefile, path, desc = imp.find_module(modulename, [modulepath]) # Load and bind the module. self._module = imp.load_module(modulename, modulefile, path, desc) # Bind our query function. self._compiled[self.name] = getattr(self._module, self.name) modulefile.close() class GraphQueryIterator(object): """iterator for a single node in graph query. Subclasses provide different flavors of generator methods: graph w/ edges; container; attr; function etc.""" def __init__(self, fromNode, queryNode, dataGraph, queryGraph, dataMatch, queryMatch, attrDict={}): self.fromNode = fromNode self.queryNode = queryNode self.dataGraph = dataGraph self.queryGraph = queryGraph self.dataMatch = dataMatch self.queryMatch = queryMatch self.dataNode = None for attr, val in attrDict.items(): # Save our edge information as attributes of this object. setattr(self, attr, val) ## try: ## self.nq = len(self.queryGraph[self.queryNode]) ## except KeyError: ## self.nq = 0 def restart(self): "reset the iterator to its beginning" self.mustMark = True if self.fromNode != None: self.dataNode = self.queryMatch[self.fromNode] if self.queryNode in self.queryMatch: # ALREADY ASSIGNED TO A DATA NODE self.mustMark = False if self.fromNode is None: # NO PATH TO HERE, SO JUST ECHO SINGLETON self.iterator = self.echo() else: # CHECK FOR PATH FROM fromNode TO THIS DATA NODE self.iterator = self.closure() else: self.iterator = self.generate() def echo(self): "Just return what our node is ALREADY matched to" yield self.queryMatch[self.queryNode], None def closure(self): "This node is already matched. Make sure a path to it (closure) exists" targetNode = self.queryMatch[self.queryNode] try: # GENERATE IF container HAS EDGE TO targetNode container = self.dataGraph[self.dataNode] yield targetNode, container[targetNode] except KeyError: pass def generate(self): "generate all neighbors of data node matched to fromNode" try: it = self.dataGraph[self.dataNode] except KeyError: pass else: for i, e in it.items(): yield i, e _generator_code = """ try: # GENERATOR \tit%(level)d = %(dataGraph)s[%(fromDataNode)s] except KeyError: \tcontinue for %(toDataNode)s, %(toDataEdge)s in it%(level)d.items():""" _index_code = """ if %(toDataNode)s in dataMatch: \tcontinue else: \tdataMatch[%(toDataNode)s] = %(toQueryNode)s \t#queryMatch[%(toQueryNode)s] = %(toDataNode)s \t#queryMatch[%(fromQueryNode)s, %(toQueryNode)s] = %(toDataEdge)s # THIS LINE PREVENTS COMPILER FROM PUSHING EXTRA INDENTATION LAYER""" _filter_code = """ if self.gqi[%(level)d].filter(toNode=%(toDataNode)s, fromNode=%(fromDataNode)s, \ edge=%(toDataEdge)s, queryMatch=self.queryMatch, \ gqi=self.gqi[%(level)d]):""" _unmark_code = """ del dataMatch[%(toDataNode)s] #del queryMatch[%(toQueryNode)s] #del queryMatch[%(fromQueryNode)s, %(toQueryNode)s]""" _closure_code = """ try: # CLOSURE \t%(toDataEdge)s = %(dataGraph)s[%(fromDataNode)s][%(toDataNode)s] except KeyError: \tpass else: \t#queryMatch[%(fromQueryNode)s, %(toQueryNode)s] = %(toDataEdge)s""" _unmark_closure_code = """ #del queryMatch[%(fromQueryNode)s, %(toQueryNode)s]""" # PYREX CODE _pyrex_generator_code = """ p_temp = cdict.cgraph_getitem(%(dataGraph)s, %(fromDataNode)s) if p_temp != NULL: \t%(fromDataDict)s = p_temp[0].v \t%(toDataPtr)s = %(fromDataDict)s[0].dict \twhile %(toDataCounter)s < %(fromDataDict)s[0].n: \t\t%(toDataNode)s = %(toDataPtr)s[%(toDataCounter)s].k \t\t%(toDataEdge)s = %(toDataPtr)s[%(toDataCounter)s].v """ #for %(toDataCounter)s from 0 <= %(toDataCounter)s < %(fromDataDict)s[0].n: _pyrex_index_code = 'if %(toDataNodeUnmatched)s:' _pyrex_unmark_code = '# COMPILER NEEDS AT LEAST ONE LINE, \ EVEN THOUGH NOTHING TO DO HERE' _pyrex_next_code = '%(toDataCounter)s = %(toDataCounter)s + 1' _pyrex_end_code = '%(toDataCounter)s = 0' _pyrex_closure_code = """ p_temp = cdict.cgraph_getitem(%(dataGraph)s, %(fromDataNode)s) if p_temp != NULL: \t%(fromDataDict)s = p_temp[0].v \tpd_temp = cdict.cdict_getitem(%(fromDataDict)s, %(toDataNode)s) \tif pd_temp != NULL: \t\t%(toDataEdge)s = pd_temp[0].v """ _pyrex_unmark_closure_code = '# COMPILER NEEDS AT LEAST ONE LINE, \ EVEN THOUGH NOTHING TO DO HERE' def unmark(self): "erase node and edge assignment associated with the iterator" if self.mustMark and self.queryNode in self.queryMatch: i = self.queryMatch[self.queryNode] # ERASE OLD NODE ASSIGNMENT del self.dataMatch[i] del self.queryMatch[self.queryNode] try: # Erase old edge. del self.queryMatch[(self.fromNode, self.queryNode)] except KeyError: pass def next(self): "returns the next node from iterator that passes all tests" self.unmark() for i, e in self.iterator: # RETURN THE FIRST ACCEPTABLE ITEM ## try: ## # Check the number of outgoing edges. NOTE: This check ## # will NOT work if multiple graphs are queried! ## nd = len(self.dataGraph[i]) ## except KeyError: ## nd = 0 ## if nd >= self.nq and if self.mustMark and i in self.dataMatch: continue # THIS NODE ALREADY ASSIGNED. CAN'T REUSE IT! if (not hasattr(self, 'filter') # APPLY EDGE / NODE TESTS HERE or self.filter(toNode=i, fromNode=self.dataNode, edge=e, queryMatch=self.queryMatch, gqi=self)): if self.mustMark: # Save this node assignment. self.dataMatch[i] = self.queryNode self.queryMatch[self.queryNode] = i if e is not None: # SAVE EDGE INFO, IF ANY self.queryMatch[(self.fromNode, self.queryNode)] = e return i # THIS ITEM PASSES ALL TESTS. RETURN IT return None # NO MORE ITEMS FROM THE ITERATOR class ContainerGQI(GraphQueryIterator): "Iterate over all nodes in self.dataGraph" def generate(self): for i in self.dataGraph: yield i, None _generator_code = """ %(toDataEdge)s = None # CONTAINER for %(toDataNode)s in dataGraph:""" _pyrex_generator_code=""" %(toDataPtrCont)s = %(dataGraph)s[0].dict for %(toDataCounter)s from 0 <= %(toDataCounter)s < %(dataGraph)s[0].n: \t%(toDataNode)s = %(toDataPtrCont)s[%(toDataCounter)s].k \t%(toDataEdge)s = -1 # NO EDGE INFO """ class AttributeGQI(GraphQueryIterator): "Iterate over all nodes in attribute called self.attr of self.dataNode" def generate(self): for i, e in getattr(self.dataNode, self.attr).items(): yield i, e _generator_code = """ for %(toDataNode)s, %(toDataEdge)s in getattr(%(fromDataNode)s, \ '%(attr)s').items():""" class AttrContainerGQI(GraphQueryIterator): """Iterate over all nodes in attribute called self.attrN of self.dataNode (no edge info)""" def generate(self): for i in getattr(self.dataNode, self.attrN): yield i, None _generator_code = """ %(toDataEdge)s = None for %(toDataNode)s in getattr(%(fromDataNode)s, '%(attrN)s'):""" class CallableGQI(GraphQueryIterator): "Call the specified function self.f as iterator" def generate(self): for i, e in self.f(self.dataNode, self.dataGraph, self): yield i, e _generator_code = """ for %(toDataNode)s, %(toDataEdge)s in self.gqi[%(level)d].f(%(fromDataNode)s, \ dataGraph, self.gqi[%(level)d]):""" class CallableContainerGQI(GraphQueryIterator): "Call the specified function self.fN as iterator (no edge info)" def generate(self): for i in self.fN(self.dataNode, self.dataGraph, self): yield i, None _generator_code = """ %(toDataEdge)s = None for %(toDataNode)s in self.gqi[%(level)d].fN(%(fromDataNode)s, dataGraph, \ self.gqi[%(level)d]):""" class SubqueryGQI(GraphQueryIterator): """base class for running subqueries; produces a union of all subquery solutions. self.subqueries must be list of graph objects, each representing a subquery""" def __init__(self, fromNode, queryNode, dataGraph, queryGraph, dataMatch, queryMatch, attrDict={}): GraphQueryIterator.__init__(self, fromNode, queryNode, dataGraph, queryGraph, dataMatch, queryMatch, attrDict) self.graphQueries = [] for qg in self.subqueries: # INITIALIZE OUR SUBQUERIES self.graphQueries.append(self.gqClass(self.dataGraph, qg, dataMatch, queryMatch)) def closure(self): "Generate union of all solutions returned by all subqueries" for gq in self.graphQueries: for d in gq: # LAUNCHES THE GRAPH QUERY, GETS ALL ITS SOLUTIONS yield self.queryMatch[self.queryNode], None # Remove its query-data mapping before going to the next subquery. gq.cleanup() def newGQI(self, oclass, fromNode, toNode, dataGraph, queryGraph, dataMatch, queryMatch, gqiDict): """figure out a default GQI class to use, based on an attribute dictionary, then return a new object of that class initialized with the input data """ if fromNode is not None and toNode is not None and \ queryGraph[fromNode][toNode] is not None: kwargs = queryGraph[fromNode][toNode] for attr in kwargs: try: # Use attribute name to determine default class. oclass = gqiDict[attr] except KeyError: pass else: kwargs = {} try: oclass = kwargs['__class__'] # LET USER SET CLASS TO USE except KeyError: pass return oclass(fromNode, toNode, dataGraph, queryGraph, dataMatch, queryMatch, kwargs) class GraphQuery(object): "represents a single query or subquery" # DEFAULT MAPPING OF ATTRIBUTE NAMES TO GQI CLASSES TO USE WITH THEM gqiDict = {'attr': AttributeGQI, 'attrN': AttrContainerGQI, 'f': CallableGQI, 'fN': CallableContainerGQI, 'subqueries': SubqueryGQI} newGQI = newGQI # USE THIS METHOD TO CHOOSE GQI CLASS FOR EACH ITERATOR def __init__(self, dataGraph, queryGraph, dataMatch=None, queryMatch=None): """Enumerate nodes in queryGraph in BFS order, constructing iterator stack""" self.dataGraph = dataGraph self.queryGraph = queryGraph if dataMatch is None: dataMatch = {} if queryMatch is None: queryMatch = {} self.dataMatch = dataMatch self.queryMatch = queryMatch # First we need to find start nodes: process them first and mark them # as generate all. isFollower = {} for node in queryGraph: for node2 in queryGraph[node]: # node2 has an incoming edge so it cannot be a start node. isFollower[node2] = True q = [] self.q = q n = 0 for node in queryGraph: # PLACE START NODES AT HEAD OF QUEUE if node not in isFollower: q.append(self.newGQI(ContainerGQI, None, node, dataGraph, queryGraph, dataMatch, queryMatch, self.gqiDict)) n += 1 if n == 0: # No start nodes; just add the first query node to the queue. for node in queryGraph: q.append(self.newGQI(ContainerGQI, None, node, dataGraph, queryGraph, dataMatch, queryMatch, self.gqiDict)) n += 1 break # Only add the first node. if n == 0: raise ValueError('query graph is empty!') visited = {} i = 0 while i < n: # Add node to the queue even if it's already been visited # - but don't add its neighbours. if q[i].queryNode not in visited: # ADD NEIGHBORS TO THE QUEUE visited[q[i].queryNode] = True # MARK AS VISITED for node in queryGraph[q[i].queryNode]: # GET ALL ITS NEIGHBORS #print 'QUEUE:', n, node q.append(self.newGQI(GraphQueryIterator, q[i].queryNode, node, dataGraph, queryGraph, dataMatch, queryMatch, self.gqiDict)) n += 1 i += 1 def __iter__(self): "generates all subgraphs of dataGraph matching queryGraph" i = 0 n = len(self.q) self.q[0].restart() # PRELOAD ITERATOR FOR 1ST NODE while i >= 0: dataNode = self.q[i].next() if dataNode is not None: #print i,qu[i].queryNode,dataNode if i + 1 < n: # MORE LEVELS TO QUERY? i += 1 # ADVANCE TO NEXT QUERY LEVEL self.q[i].restart() else: # GRAPH MATCH IS COMPLETE! yield self.queryMatch # RETURN COMPLETE MATCH else: # NO MORE ACCEPTABLE NODES AT THIS LEVEL, SO BACKTRACK i -= 1 def cleanup(self): "erase any query:data node matching associated with this subquery" for q in self.q: q.unmark() def compile(self, globals=None, compilerClass=GraphQueryCompiler, **kwargs): """return a compiled version of this query, using globals namespace if specified""" compiler = compilerClass(globalDict=globals, **kwargs) for gqi in self.q: compiler += gqi return compiler SubqueryGQI.gqClass = GraphQuery # CLASS FOR CONSTRUCTING SUBQUERIES PK7“;e&Õ5â„â„pygr/graphquery.pyc;ò |†Kc@sTdklZdkTdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd „ƒYZd d „Z d efd „ƒYZ defd„ƒYZ de fd„ƒYZ de fd„ƒYZ de fd„ƒYZde fd„ƒYZde fd„ƒYZde fd„ƒYZd„Zdefd„ƒYZee_dS( (s generators(s*sQueryMatchWrappercBstZdZd„ZRS(s^build a queryMatch mapping on demand, since its not actually needed during query traversalcCs|ti|ƒx$|iƒD]\}}|||s            cCs |djo |iSnì|djo |iSnÔ|djor|i|ii|i|ii|i|ii}y|d}d|iSWqt t fj o dSqXnU|djod|iSn9|djod|iSn|d jod |iSn|d d jo|i |i|ii}n0|d djo|i |i|ii}n|ddjod|iƒdSn|ddjod|iƒdSn|djo |iSnyt|i|i|ƒSWn#tj ot d|ƒ‚nXdS(sEreturn appropropriate code for accessing nodes/edges in data or querysnsnames dataGraphsself.gqi[%d].dataGraphsfiltersself.gqi[%d].filters toQueryNodesself.gqi[%d].queryNodes fromQueryNodesself.gqi[%d].fromNodeistoisfromiøÿÿÿsDataNodes dataNode%disDataEdges dataEdge[%d]iÿÿÿÿslevels%%s not a valid GraphQueryCompiler keyN(skeysselfsnsnamesgqis queryGraphsfromNodes queryNodes queryEdgesdgs TypeErrorsKeyErrorsqueryLayerGraphslayersvaluessgetattrsAttributeError(sselfskeyslayersdgs queryEdge((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pys __getitem__Ns@     5       cCsÛ||}|idƒ}|d}|djot|ƒdjo|d}nt|idƒƒd}t|ƒdjo|ddjo|d7}nd}x$|D]}||d|d7}q©W|||fSd S( s5calculate indentation levels added by code in codestrs iÿÿÿÿsiiþÿÿÿs is:N( scodestrsselfssplitslinesslastlineslensnindentssslinescurrent_indent(sselfscodestrscurrent_indentslinesssslastlinesnindentsline((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pys indent_codeqs   $c Csb|ii|ƒ|i|ijoÐ|i|i7_t||idƒ}t||idƒ}t||idƒ} yt||idƒ}Wnt j o d}nXyt||idƒ}Wnt j o d}nX|i |_nŸt||idƒ}t}t||idƒ} yt||id ƒ}Wnt j o d}nXyt||id ƒ}Wnt j o d}nX|i |i|i|i~ƒSn|d9jp |d:jo |iSn|d;jo |iSnyt|i|i|ƒSWn#tj ot d<|ƒ‚nXd=S(>sEreturn appropropriate code for accessing nodes/edges in data or querysnsnames dataGraphsself.gqi[%d].dataGraphsfiltersself.gqi[%d].filters toQueryNodesself.gqi[%d].queryNodes fromQueryNodesself.gqi[%d].fromNodeistoisfromiøÿÿÿsDataNodes dataNode%disDataEdges dataEdge%diÿÿÿÿsDataDictscDict%diùÿÿÿsDataPtrs pDictEntry%diõÿÿÿs DataPtrConts pGraphEntry%ds DataCountersi%dstoDataNodeUnmatchedsdataNode%d!=dataNode%ds and sTrues dataNodeDefss,s dataEdgeDefss dataDictDefss*cDict%ds dataPtrDefss *pDictEntry%dsdataPtrContDefss*pGraphEntry%dsdataCounterDefssdataCounterArgssint i%ds itaVectorsita.vector[%d]sitaTuples,\ s p_ita[%d]s resultTuplesdataNode%d,dataEdge%ds resultTupless(dataNode%d,dataEdge%d)slevelsnEdgess lastGenerators"%s not a valid GraphQueryPyrex keyN(skeysselfsnsnamesgqis queryGraphsfromNodes queryNodes queryEdgesdgs TypeErrorsKeyErrorsqueryLayerGraphslayersvaluessappends_[1]srangesislslensjoins lastGeneratorsgetattrsAttributeError(sselfskeyslayersisdgsls_[1]s queryEdge((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pys __getitem__ôsŠ     5      s ? ? ? ? ? ? ? ? C ` `   s× cimport cdict cdef c_%(name)s(cdict.CGraphDict cgd, cdict.IntTupleArray ita, %(dataCounterArgs)s): cdef cdict.CGraph *dataGraph cdef cdict.CDict %(dataDictDefs)s cdef cdict.CDictEntry %(dataPtrDefs)s cdef cdict.CDictEntry *pd_temp cdef cdict.CGraphEntry %(dataPtrContDefs)s cdef cdict.CGraphEntry *p_temp #cdef int %(dataCounterDefs)s cdef int %(dataNodeDefs)s cdef int %(dataEdgeDefs)s cdef int *p_ita dataGraph = cgd.d p_ita = ita.data sœ %(itaTuple)s = %(resultTuple)s p_ita = p_ita + 2 * %(nEdges)d ita.n = ita.n + 1 if ita.n >= ita.n_alloc: ita.set_vector((%(dataCounterDefs)s), 1) return sí ita.isDone = 1 # COMPLETED THIS QUERY from pygr import cdict def %(name)s(self, g, int maxhit=1000, cdict.IntTupleArray ita=None, qml=None): if not isinstance(g, cdict.CGraphDict): g = cdict.CGraphDict(g, cdict.KeyIndex()) if ita is None: ita = cdict.IntTupleArray(maxhit, %(nEdges)d, 2, %(lastGenerator)d) ita.n = 0 c_%(name)s(g, ita, %(itaVector)s) # RUN THE QUERY if qml is not None: qml.matches = ita return qml else: return cdict.QueryMatchList(self, ita, g, %(name)s) c CsAdk}y|id} Wn%tj otddfƒ‚nX|i| d|iƒ otdd| fƒ‚n|id| | | fƒ}|djot|d fƒ‚n|i t t |ƒƒ}t|d d ƒ} | it |ƒƒ| iƒ|id |ƒ}|djot|d fƒ‚ndkl} l}||dd|dgƒ}| d|ddd|gddgƒtƒ}dk}dk}dkl}|i|ii|iƒg7_dk}|i ||gƒ\}} } |i#||| | ƒ|_$t%|i$|i ƒ|i&|i <|iƒdS(s3compile using Pyrex, Distutils, and finally import!NsPYGRPATHis»pyrex compilation requires access to pygr source. Please set the environment variable PYGRPATH to the top of the pygr source package.s/pygr/cgraph.cseUnable to access %s/pygr/cgraph.c. Is PYGRPATH set to the top of the pygr source package?sXcp %s/pygr/cgraph.c %s/pygr/cgraph.h %s/pygr/cdict.pxd .is-unable to copy source code to this directory.s.pyxsws pyrexc %s.pyxs@pyrex compilation failed. Is pyrexc missing or not in your PATH?(ssetups Extensionssourcesscgraph.cs.csnames descriptions autogenerated by pygr.graphquerys ext_moduless script_argssbuild(scdict('sossenvironspygrpathsKeyErrorsOSErrorsaccesssR_OKssystems exit_statussselfsnamesstrsids modulenamesfilesmyfileswritesclosesdistutils.coressetups Extensionsmodule1sfind_distutils_libs modulepathssyssos.pathspygrscdictspathsdirnames__file__simps find_modules modulefilesdescs load_modules_modulesgetattrs _compiled(sselfs modulenames exit_statuss modulefiles modulepathsmodule1simps Extensionssysspathsdescspygrpathssetupsmyfilesosscdict((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pyscompilepsB         ! ( s__name__s __module__s__doc__s_langs __getitem__s _def_codes _yield_codes _end_codescompile(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pysGraphQueryPyrexïs  P sGraphQueryIteratorcBsžtZdZhd„Zd„Zd„Zd„Zd„ZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZd„Zd„ZRS(s£iterator for a single node in graph query. Subclasses provide different flavors of generator methods: graph w/ edges; container; attr; function etc.c Csp||_||_||_||_||_||_t|_x*|i ƒD]\}} t ||| ƒqLWdS(N(sfromNodesselfs queryNodes dataGraphs queryGraphs dataMatchs queryMatchsNonesdataNodesattrDictsitemssattrsvalssetattr( sselfsfromNodes queryNodes dataGraphs queryGraphs dataMatchs queryMatchsattrDictsattrsval((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pys__init__®s        cCs•t|_|itjo|i|i|_n|i|ijo?t|_|itjo|i ƒ|_ q‘|i ƒ|_ n|i ƒ|_ dS(s#reset the iterator to its beginningN( sTruesselfsmustMarksfromNodesNones queryMatchsdataNodes queryNodesFalsesechositeratorsclosuresgenerate(sself((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pysrestart¿s  ccs|i|itfVdS(s/Just return what our node is ALREADY matched toN(sselfs queryMatchs queryNodesNone(sself((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pysechoÍsccsL|i|i}y"|i|i}|||fVWntj onXdS(sEThis node is already matched. Make sure a path to it (closure) existsN(sselfs queryMatchs queryNodes targetNodes dataGraphsdataNodes containersKeyError(sselfs targetNodes container((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pysclosureÑsccsUy|i|i}Wntj on)Xx$|iƒD]\}}||fVq7WdS(s7generate all neighbors of data node matched to fromNodeN(sselfs dataGraphsdataNodesitsKeyErrorsitemssise(sselfsisesit((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pysgenerateÚs s– try: # GENERATOR it%(level)d = %(dataGraph)s[%(fromDataNode)s] except KeyError: continue for %(toDataNode)s, %(toDataEdge)s in it%(level)d.items():s if %(toDataNode)s in dataMatch: continue else: dataMatch[%(toDataNode)s] = %(toQueryNode)s #queryMatch[%(toQueryNode)s] = %(toDataNode)s #queryMatch[%(fromQueryNode)s, %(toQueryNode)s] = %(toDataEdge)s # THIS LINE PREVENTS COMPILER FROM PUSHING EXTRA INDENTATION LAYERs× if self.gqi[%(level)d].filter(toNode=%(toDataNode)s, fromNode=%(fromDataNode)s, edge=%(toDataEdge)s, queryMatch=self.queryMatch, gqi=self.gqi[%(level)d]):ss del dataMatch[%(toDataNode)s] #del queryMatch[%(toQueryNode)s] #del queryMatch[%(fromQueryNode)s, %(toQueryNode)s]s° try: # CLOSURE %(toDataEdge)s = %(dataGraph)s[%(fromDataNode)s][%(toDataNode)s] except KeyError: pass else: #queryMatch[%(fromQueryNode)s, %(toQueryNode)s] = %(toDataEdge)ss4 #del queryMatch[%(fromQueryNode)s, %(toQueryNode)s]s; p_temp = cdict.cgraph_getitem(%(dataGraph)s, %(fromDataNode)s) if p_temp != NULL: %(fromDataDict)s = p_temp[0].v %(toDataPtr)s = %(fromDataDict)s[0].dict while %(toDataCounter)s < %(fromDataDict)s[0].n: %(toDataNode)s = %(toDataPtr)s[%(toDataCounter)s].k %(toDataEdge)s = %(toDataPtr)s[%(toDataCounter)s].v sif %(toDataNodeUnmatched)s:s\# COMPILER NEEDS AT LEAST ONE LINE, EVEN THOUGH NOTHING TO DO HEREs)%(toDataCounter)s = %(toDataCounter)s + 1s%(toDataCounter)s = 0sé p_temp = cdict.cgraph_getitem(%(dataGraph)s, %(fromDataNode)s) if p_temp != NULL: %(fromDataDict)s = p_temp[0].v pd_temp = cdict.cdict_getitem(%(fromDataDict)s, %(toDataNode)s) if pd_temp != NULL: %(toDataEdge)s = pd_temp[0].v sd# COMPILER NEEDS AT LEAST ONE LINE, EVEN THOUGH NOTHING TO DO HEREcCs||io|i|ijo+|i|i}|i|=|i|i=ny|i|i|if=Wntj onXdS(s;erase node and edge assignment associated with the iteratorN(sselfsmustMarks queryNodes queryMatchsis dataMatchsfromNodesKeyError(sselfsi((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pysunmark*s c Csï|iƒxÚ|iD]Ï\}}|io ||ijoqnt|dƒ p.|id|d|i d|d|i d|ƒo`|io$|i |i|<||i |i Call the specified function self.fN as iterator (no edge info)ccs4x-|i|i|i|ƒD]}|tfVqWdS(N(sselfsfNsdataNodes dataGraphsisNone(sselfsi((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pysgenerate‹ss£ %(toDataEdge)s = None for %(toDataNode)s in self.gqi[%(level)d].fN(%(fromDataNode)s, dataGraph, self.gqi[%(level)d]):(s__name__s __module__s__doc__sgenerates_generator_code(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pysCallableContainerGQIˆs  s SubqueryGQIcBs#tZdZhd„Zd„ZRS(s¢base class for running subqueries; produces a union of all subquery solutions. self.subqueries must be list of graph objects, each representing a subqueryc Cshti||||||||ƒg|_ x6|i D]+}|i i |i|i|||ƒƒq5WdS(N(sGraphQueryIterators__init__sselfsfromNodes queryNodes dataGraphs queryGraphs dataMatchs queryMatchsattrDicts graphQueriess subqueriessqgsappendsgqClass( sselfsfromNodes queryNodes dataGraphs queryGraphs dataMatchs queryMatchsattrDictsqg((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pys__init__šs   ccsGx@|iD]5}x"|D]}|i|itfVqW|iƒq WdS(s:Generate union of all solutions returned by all subqueriesN(sselfs graphQueriessgqsds queryMatchs queryNodesNonescleanup(sselfsdsgq((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pysclosure¤s (s__name__s __module__s__doc__s__init__sclosure(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pys SubqueryGQI•s  c CsÀ|tj o|tj o|||tj oG|||} x<| D]*} y|| }WqDtj oqDXqDWnh} y| d}Wntj onX|||||||| ƒSdS(sžfigure out a default GQI class to use, based on an attribute dictionary, then return a new object of that class initialized with the input data s __class__N( sfromNodesNonestoNodes queryGraphskwargssattrsgqiDictsoclasssKeyErrors dataGraphs dataMatchs queryMatch( sselfsoclasssfromNodestoNodes dataGraphs queryGraphs dataMatchs queryMatchsgqiDictsattrskwargs((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pysnewGQI­s / s GraphQuerycBswtZdZhde<de<de<de<des            cCs |djo |iSnì|djo |iSnÔ|djor|i|ii|i|ii|i|ii}y|d}d|iSWqt t fj o dSqXnU|djod|iSn9|djod|iSn|d jod |iSn|d d jo|i |i|ii}n0|d djo|i |i|ii}n|ddjod|iƒdSn|ddjod|iƒdSn|djo |iSnyt|i|i|ƒSWn#tj ot d|ƒ‚nXdS(sEreturn appropropriate code for accessing nodes/edges in data or querysnsnames dataGraphsself.gqi[%d].dataGraphsfiltersself.gqi[%d].filters toQueryNodesself.gqi[%d].queryNodes fromQueryNodesself.gqi[%d].fromNodeistoisfromiøÿÿÿsDataNodes dataNode%disDataEdges dataEdge[%d]iÿÿÿÿslevels%%s not a valid GraphQueryCompiler keyN(skeysselfsnsnamesgqis queryGraphsfromNodes queryNodes queryEdgesdgs TypeErrorsKeyErrorsqueryLayerGraphslayersvaluessgetattrsAttributeError(sselfskeyslayersdgs queryEdge((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pys __getitem__Ns@     5       cCsÛ||}|idƒ}|d}|djot|ƒdjo|d}nt|idƒƒd}t|ƒdjo|ddjo|d7}nd}x$|D]}||d|d7}q©W|||fSd S( s5calculate indentation levels added by code in codestrs iÿÿÿÿsiiþÿÿÿs is:N( scodestrsselfssplitslinesslastlineslensnindentssslinescurrent_indent(sselfscodestrscurrent_indentslinesssslastlinesnindentsline((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pys indent_codeqs   $c Csb|ii|ƒ|i|ijoÐ|i|i7_t||idƒ}t||idƒ}t||idƒ} yt||idƒ}Wnt j o d}nXyt||idƒ}Wnt j o d}nX|i |_nŸt||idƒ}t}t||idƒ} yt||id ƒ}Wnt j o d}nXyt||id ƒ}Wnt j o d}nX|i |i|i|i~ƒSn|d9jp |d:jo |iSn|d;jo |iSnyt|i|i|ƒSWn#tj ot d<|ƒ‚nXd=S(>sEreturn appropropriate code for accessing nodes/edges in data or querysnsnames dataGraphsself.gqi[%d].dataGraphsfiltersself.gqi[%d].filters toQueryNodesself.gqi[%d].queryNodes fromQueryNodesself.gqi[%d].fromNodeistoisfromiøÿÿÿsDataNodes dataNode%disDataEdges dataEdge%diÿÿÿÿsDataDictscDict%diùÿÿÿsDataPtrs pDictEntry%diõÿÿÿs DataPtrConts pGraphEntry%ds DataCountersi%dstoDataNodeUnmatchedsdataNode%d!=dataNode%ds and sTrues dataNodeDefss,s dataEdgeDefss dataDictDefss*cDict%ds dataPtrDefss *pDictEntry%dsdataPtrContDefss*pGraphEntry%dsdataCounterDefssdataCounterArgssint i%ds itaVectorsita.vector[%d]sitaTuples,\ s p_ita[%d]s resultTuplesdataNode%d,dataEdge%ds resultTupless(dataNode%d,dataEdge%d)slevelsnEdgess lastGenerators"%s not a valid GraphQueryPyrex keyN(skeysselfsnsnamesgqis queryGraphsfromNodes queryNodes queryEdgesdgs TypeErrorsKeyErrorsqueryLayerGraphslayersvaluessappends_[1]srangesislslensjoins lastGeneratorsgetattrsAttributeError(sselfskeyslayersisdgsls_[1]s queryEdge((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pys __getitem__ôsŠ     5      s ? ? ? ? ? ? ? ? C ` `   s× cimport cdict cdef c_%(name)s(cdict.CGraphDict cgd, cdict.IntTupleArray ita, %(dataCounterArgs)s): cdef cdict.CGraph *dataGraph cdef cdict.CDict %(dataDictDefs)s cdef cdict.CDictEntry %(dataPtrDefs)s cdef cdict.CDictEntry *pd_temp cdef cdict.CGraphEntry %(dataPtrContDefs)s cdef cdict.CGraphEntry *p_temp #cdef int %(dataCounterDefs)s cdef int %(dataNodeDefs)s cdef int %(dataEdgeDefs)s cdef int *p_ita dataGraph = cgd.d p_ita = ita.data sœ %(itaTuple)s = %(resultTuple)s p_ita = p_ita + 2 * %(nEdges)d ita.n = ita.n + 1 if ita.n >= ita.n_alloc: ita.set_vector((%(dataCounterDefs)s), 1) return sí ita.isDone = 1 # COMPLETED THIS QUERY from pygr import cdict def %(name)s(self, g, int maxhit=1000, cdict.IntTupleArray ita=None, qml=None): if not isinstance(g, cdict.CGraphDict): g = cdict.CGraphDict(g, cdict.KeyIndex()) if ita is None: ita = cdict.IntTupleArray(maxhit, %(nEdges)d, 2, %(lastGenerator)d) ita.n = 0 c_%(name)s(g, ita, %(itaVector)s) # RUN THE QUERY if qml is not None: qml.matches = ita return qml else: return cdict.QueryMatchList(self, ita, g, %(name)s) c CsAdk}y|id} Wn%tj otddfƒ‚nX|i| d|iƒ otdd| fƒ‚n|id| | | fƒ}|djot|d fƒ‚n|i t t |ƒƒ}t|d d ƒ} | it |ƒƒ| iƒ|id |ƒ}|djot|d fƒ‚ndkl} l}||dd|dgƒ}| d|ddd|gddgƒtƒ}dk}dk}dkl}|i|ii|iƒg7_dk}|i ||gƒ\}} } |i#||| | ƒ|_$t%|i$|i ƒ|i&|i <|iƒdS(s3compile using Pyrex, Distutils, and finally import!NsPYGRPATHis»pyrex compilation requires access to pygr source. Please set the environment variable PYGRPATH to the top of the pygr source package.s/pygr/cgraph.cseUnable to access %s/pygr/cgraph.c. Is PYGRPATH set to the top of the pygr source package?sXcp %s/pygr/cgraph.c %s/pygr/cgraph.h %s/pygr/cdict.pxd .is-unable to copy source code to this directory.s.pyxsws pyrexc %s.pyxs@pyrex compilation failed. Is pyrexc missing or not in your PATH?(ssetups Extensionssourcesscgraph.cs.csnames descriptions autogenerated by pygr.graphquerys ext_moduless script_argssbuild(scdict('sossenvironspygrpathsKeyErrorsOSErrorsaccesssR_OKssystems exit_statussselfsnamesstrsids modulenamesfilesmyfileswritesclosesdistutils.coressetups Extensionsmodule1sfind_distutils_libs modulepathssyssos.pathspygrscdictspathsdirnames__file__simps find_modules modulefilesdescs load_modules_modulesgetattrs _compiled(sselfs modulenames exit_statuss modulefiles modulepathsmodule1simps Extensionssysspathsdescspygrpathssetupsmyfilesosscdict((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pyscompilepsB         ! ( s__name__s __module__s__doc__s_langs __getitem__s _def_codes _yield_codes _end_codescompile(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pysGraphQueryPyrexïs  P sGraphQueryIteratorcBsžtZdZhd„Zd„Zd„Zd„Zd„ZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZd„Zd„ZRS(s£iterator for a single node in graph query. Subclasses provide different flavors of generator methods: graph w/ edges; container; attr; function etc.c Csp||_||_||_||_||_||_t|_x*|i ƒD]\}} t ||| ƒqLWdS(N(sfromNodesselfs queryNodes dataGraphs queryGraphs dataMatchs queryMatchsNonesdataNodesattrDictsitemssattrsvalssetattr( sselfsfromNodes queryNodes dataGraphs queryGraphs dataMatchs queryMatchsattrDictsattrsval((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pys__init__®s        cCs•t|_|itjo|i|i|_n|i|ijo?t|_|itjo|i ƒ|_ q‘|i ƒ|_ n|i ƒ|_ dS(s#reset the iterator to its beginningN( sTruesselfsmustMarksfromNodesNones queryMatchsdataNodes queryNodesFalsesechositeratorsclosuresgenerate(sself((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pysrestart¿s  ccs|i|itfVdS(s/Just return what our node is ALREADY matched toN(sselfs queryMatchs queryNodesNone(sself((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pysechoÍsccsL|i|i}y"|i|i}|||fVWntj onXdS(sEThis node is already matched. Make sure a path to it (closure) existsN(sselfs queryMatchs queryNodes targetNodes dataGraphsdataNodes containersKeyError(sselfs targetNodes container((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pysclosureÑsccsUy|i|i}Wntj on)Xx$|iƒD]\}}||fVq7WdS(s7generate all neighbors of data node matched to fromNodeN(sselfs dataGraphsdataNodesitsKeyErrorsitemssise(sselfsisesit((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pysgenerateÚs s– try: # GENERATOR it%(level)d = %(dataGraph)s[%(fromDataNode)s] except KeyError: continue for %(toDataNode)s, %(toDataEdge)s in it%(level)d.items():s if %(toDataNode)s in dataMatch: continue else: dataMatch[%(toDataNode)s] = %(toQueryNode)s #queryMatch[%(toQueryNode)s] = %(toDataNode)s #queryMatch[%(fromQueryNode)s, %(toQueryNode)s] = %(toDataEdge)s # THIS LINE PREVENTS COMPILER FROM PUSHING EXTRA INDENTATION LAYERs× if self.gqi[%(level)d].filter(toNode=%(toDataNode)s, fromNode=%(fromDataNode)s, edge=%(toDataEdge)s, queryMatch=self.queryMatch, gqi=self.gqi[%(level)d]):ss del dataMatch[%(toDataNode)s] #del queryMatch[%(toQueryNode)s] #del queryMatch[%(fromQueryNode)s, %(toQueryNode)s]s° try: # CLOSURE %(toDataEdge)s = %(dataGraph)s[%(fromDataNode)s][%(toDataNode)s] except KeyError: pass else: #queryMatch[%(fromQueryNode)s, %(toQueryNode)s] = %(toDataEdge)ss4 #del queryMatch[%(fromQueryNode)s, %(toQueryNode)s]s; p_temp = cdict.cgraph_getitem(%(dataGraph)s, %(fromDataNode)s) if p_temp != NULL: %(fromDataDict)s = p_temp[0].v %(toDataPtr)s = %(fromDataDict)s[0].dict while %(toDataCounter)s < %(fromDataDict)s[0].n: %(toDataNode)s = %(toDataPtr)s[%(toDataCounter)s].k %(toDataEdge)s = %(toDataPtr)s[%(toDataCounter)s].v sif %(toDataNodeUnmatched)s:s\# COMPILER NEEDS AT LEAST ONE LINE, EVEN THOUGH NOTHING TO DO HEREs)%(toDataCounter)s = %(toDataCounter)s + 1s%(toDataCounter)s = 0sé p_temp = cdict.cgraph_getitem(%(dataGraph)s, %(fromDataNode)s) if p_temp != NULL: %(fromDataDict)s = p_temp[0].v pd_temp = cdict.cdict_getitem(%(fromDataDict)s, %(toDataNode)s) if pd_temp != NULL: %(toDataEdge)s = pd_temp[0].v sd# COMPILER NEEDS AT LEAST ONE LINE, EVEN THOUGH NOTHING TO DO HEREcCs||io|i|ijo+|i|i}|i|=|i|i=ny|i|i|if=Wntj onXdS(s;erase node and edge assignment associated with the iteratorN(sselfsmustMarks queryNodes queryMatchsis dataMatchsfromNodesKeyError(sselfsi((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pysunmark*s c Csï|iƒxÚ|iD]Ï\}}|io ||ijoqnt|dƒ p.|id|d|i d|d|i d|ƒo`|io$|i |i|<||i |i Call the specified function self.fN as iterator (no edge info)ccs4x-|i|i|i|ƒD]}|tfVqWdS(N(sselfsfNsdataNodes dataGraphsisNone(sselfsi((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pysgenerate‹ss£ %(toDataEdge)s = None for %(toDataNode)s in self.gqi[%(level)d].fN(%(fromDataNode)s, dataGraph, self.gqi[%(level)d]):(s__name__s __module__s__doc__sgenerates_generator_code(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pysCallableContainerGQIˆs  s SubqueryGQIcBs#tZdZhd„Zd„ZRS(s¢base class for running subqueries; produces a union of all subquery solutions. self.subqueries must be list of graph objects, each representing a subqueryc Cshti||||||||ƒg|_ x6|i D]+}|i i |i|i|||ƒƒq5WdS(N(sGraphQueryIterators__init__sselfsfromNodes queryNodes dataGraphs queryGraphs dataMatchs queryMatchsattrDicts graphQueriess subqueriessqgsappendsgqClass( sselfsfromNodes queryNodes dataGraphs queryGraphs dataMatchs queryMatchsattrDictsqg((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pys__init__šs   ccsGx@|iD]5}x"|D]}|i|itfVqW|iƒq WdS(s:Generate union of all solutions returned by all subqueriesN(sselfs graphQueriessgqsds queryMatchs queryNodesNonescleanup(sselfsdsgq((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pysclosure¤s (s__name__s __module__s__doc__s__init__sclosure(((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pys SubqueryGQI•s  c CsÀ|tj o|tj o|||tj oG|||} x<| D]*} y|| }WqDtj oqDXqDWnh} y| d}Wntj onX|||||||| ƒSdS(sžfigure out a default GQI class to use, based on an attribute dictionary, then return a new object of that class initialized with the input data s __class__N( sfromNodesNonestoNodes queryGraphskwargssattrsgqiDictsoclasssKeyErrors dataGraphs dataMatchs queryMatch( sselfsoclasssfromNodestoNodes dataGraphs queryGraphs dataMatchs queryMatchsgqiDictsattrskwargs((s5build/bdist.darwin-8.11.1-i386/egg/pygr/graphquery.pysnewGQI­s / s GraphQuerycBswtZdZhde<de<de<de<de= (2, 5) def get_logger(name='pygr-log', stream=sys.stdout, formatter=None): """ Returns a logger >>> disable('INFO') >>> info('logtest, this message SHOULD NOT be visible') >>> disable() >>> info('logtest, this message should be visible') >>> disable('DEBUG') >>> debug('logtest, this message SHOULD NOT be visible') >>> info('logtest, this message should be visible') """ logger = logging.getLogger(name) # this is needed in case the process is # forked/multithreaded; loggers exist in a global scope # we don't want each import to duplocate this handler if not logger.handlers: console = logging.StreamHandler(stream) console.setLevel(logging.DEBUG) if PYTHON_25: format = '%(levelname)s %(module)s.%(funcName)s: %(message)s' else: format = '%(levelname)s %(module)s: %(message)s' formatter = formatter or logging.Formatter(format) console.setFormatter(formatter) logger.addHandler(console) logger.setLevel(logging.DEBUG) return logger def disable(level=0): """ Disables logging levels Levels: DEBUG, INFO, WARNING, ERROR >>> disable('INFO') >>> info('logtest, this message SHOULD NOT be visible') """ level = str(level) value = dict(NOTSET=0, DEBUG=10, INFO=20, WARNING=30, ERROR=40)\ .get(level.upper(), 0) logging.disable(value) # populate some loggers by default log = get_logger() debug, info, warn, error = log.debug, log.info, log.warn, log.error def test(verbose=0): "Performs module level testing" import doctest doctest.testmod(verbose=verbose) if __name__ == "__main__": test() PK7“;Å×Ëœ œ pygr/logger.pyc;ò |†Kc@s©dZdkZdkZeiddfjZdeied„Zdd„ZeƒZ e i e i e i e i f\Z Z Z Z dd„Zed jo eƒndS( sè Implements logging functionality Upon import creates a module level log class (log) and the following logging functions: debug, info, warn and error The default formatters will print out the function the log was triggered from. Niispygr-logcCsœti|ƒ}|i ozti|ƒ}|iti ƒt o d}nd}|p ti |ƒ}|i|ƒ|i|ƒ|iti ƒn|SdS(sG Returns a logger >>> disable('INFO') >>> info('logtest, this message SHOULD NOT be visible') >>> disable() >>> info('logtest, this message should be visible') >>> disable('DEBUG') >>> debug('logtest, this message SHOULD NOT be visible') >>> info('logtest, this message should be visible') s2%(levelname)s %(module)s.%(funcName)s: %(message)ss%%(levelname)s %(module)s: %(message)sN(sloggings getLoggersnamesloggershandlerss StreamHandlersstreamsconsolessetLevelsDEBUGs PYTHON_25sformats formatters Formatters setFormatters addHandler(snamesstreams formattersconsolesformatslogger((s1build/bdist.darwin-8.11.1-i386/egg/pygr/logger.pys get_loggers     ic CsVt|ƒ}tddddddddd d ƒi|iƒdƒ}ti|ƒd S( sž Disables logging levels Levels: DEBUG, INFO, WARNING, ERROR >>> disable('INFO') >>> info('logtest, this message SHOULD NOT be visible') sNOTSETisDEBUGi sINFOisWARNINGisERRORi(N(sstrslevelsdictsgetsuppersvaluesloggingsdisable(slevelsvalue((s1build/bdist.darwin-8.11.1-i386/egg/pygr/logger.pysdisable5s 9cCsdk}|id|ƒdS(sPerforms module level testingNsverbose(sdocteststestmodsverbose(sverbosesdoctest((s1build/bdist.darwin-8.11.1-i386/egg/pygr/logger.pystestHs s__main__(s__doc__sloggingssyss version_infos PYTHON_25sstdoutsNones get_loggersdisableslogsdebugsinfoswarnserrorstests__name__( sinfoswarnsloggingslogstestssyss get_loggersdisableserrorsdebugs PYTHON_25((s1build/bdist.darwin-8.11.1-i386/egg/pygr/logger.pys? s  !  *  PK7“;Å×Ëœ œ pygr/logger.pyo;ò |†Kc@s©dZdkZdkZeiddfjZdeied„Zdd„ZeƒZ e i e i e i e i f\Z Z Z Z dd„Zed jo eƒndS( sè Implements logging functionality Upon import creates a module level log class (log) and the following logging functions: debug, info, warn and error The default formatters will print out the function the log was triggered from. Niispygr-logcCsœti|ƒ}|i ozti|ƒ}|iti ƒt o d}nd}|p ti |ƒ}|i|ƒ|i|ƒ|iti ƒn|SdS(sG Returns a logger >>> disable('INFO') >>> info('logtest, this message SHOULD NOT be visible') >>> disable() >>> info('logtest, this message should be visible') >>> disable('DEBUG') >>> debug('logtest, this message SHOULD NOT be visible') >>> info('logtest, this message should be visible') s2%(levelname)s %(module)s.%(funcName)s: %(message)ss%%(levelname)s %(module)s: %(message)sN(sloggings getLoggersnamesloggershandlerss StreamHandlersstreamsconsolessetLevelsDEBUGs PYTHON_25sformats formatters Formatters setFormatters addHandler(snamesstreams formattersconsolesformatslogger((s1build/bdist.darwin-8.11.1-i386/egg/pygr/logger.pys get_loggers     ic CsVt|ƒ}tddddddddd d ƒi|iƒdƒ}ti|ƒd S( sž Disables logging levels Levels: DEBUG, INFO, WARNING, ERROR >>> disable('INFO') >>> info('logtest, this message SHOULD NOT be visible') sNOTSETisDEBUGi sINFOisWARNINGisERRORi(N(sstrslevelsdictsgetsuppersvaluesloggingsdisable(slevelsvalue((s1build/bdist.darwin-8.11.1-i386/egg/pygr/logger.pysdisable5s 9cCsdk}|id|ƒdS(sPerforms module level testingNsverbose(sdocteststestmodsverbose(sverbosesdoctest((s1build/bdist.darwin-8.11.1-i386/egg/pygr/logger.pystestHs s__main__(s__doc__sloggingssyss version_infos PYTHON_25sstdoutsNones get_loggersdisableslogsdebugsinfoswarnserrorstests__name__( sinfoswarnsloggingslogstestssyss get_loggersdisableserrorsdebugs PYTHON_25((s1build/bdist.darwin-8.11.1-i386/egg/pygr/logger.pys? s  !  *  PKd—~;ìð••pygr/mapping.py from __future__ import generators from schema import * import classutil def update_graph(self, graph): 'save nodes and edges of graph to self' for node, d in graph.iteritems(): self += node saveDict = self[node] for target, edge in d.iteritems(): saveDict[target] = edge class PathList(list): """Internal representation for storing both nodes and edges as list So filter functions can see both nodes and edges""" def __init__(self, nodes=None, edges=None): if nodes != None: list.__init__(self, nodes) else: list.__init__(self) if edges != None: self.edge = list(edges) else: self.edge = [] def append(self, val): list.append(self, val) self.edge.append(val) def extend(self, l): list.extend(self, l) # EXTEND TOP-LEVEL LIST AS USUAL try: # EXTEND OUR EDGE LIST AS WELL self.edge.extend(l.edge) except AttributeError: #IF l HAS NO EDGES, PAD OUR EDGE LIST WITH Nones self.edge.extend(len(l) * [None]) class Edge(list): "Interface to edge information." isDirected = False def __init__(self, graph, nodes, edgeInfo): self.graph = graph if edgeInfo: self.edgeInfo = edgeInfo list.__init__(self, nodes) # SAVE NODES AS TUPLE def __getattr__(self, attr): try: return getattr(self.edgeInfo, attr) except AttributeError: if isinstance(self.edgeInfo, types.DictType): # Treat edgeInfo as an attribute dictionary. return self.edgeInfo[attr] raise AttributeError(attr) # Should we define setattr here too, to allow users to add new attribute # values? The problem is setattr is painful to implement due to the # recursive reference problem. def __cmp__(self, other): # DO WE NEED TO COMPARE EDGE INFO?? if not isinstance(other, Edge): # CAN ONLY COMPARE A PAIR OF EDGES return -1 diff = cmp(self.graph, other.graph) if diff: # NOT IN THE SAME GRAPH... return diff elif self.isDirected: # IF DIRECTED, JUST COMPARE IN CURRENT ORDER return tuple.__cmp__(self, other) else: # UNDIRECTED COMPARISON REQUIRES PUTTING BOTH IN SAME ORDER me = [i for i in self] you = [i for i in other] me.sort() you.sort() return cmp(me, you) # NEEDS SCHEMA SUPPORT: RETURN A SINGLE SCHEMA TUPLE DESCRIBING THIS EDGE. class DirectedEdge(Edge): isDirected = True # need a class to provide access to the edges in a graph # iterator, membership test #class EdgeSet class dictEdge(dict): """2nd layer graph interface implemenation using dict. """ dictClass = dict def __init__(self, graph, fromNode): self.graph = graph self.fromNode = fromNode self.dictClass.__init__(self) # INITIALIZE TOPLEVEL DICTIONARY def __iadd__(self, target): "Add edge from fromNode to target with no edge-info" self[target] = None return self # THIS IS REQUIRED FROM iadd()!! def __setitem__(self, target, edgeInfo): "Add edge from fromNode to target with edgeInfo" self.dictClass.__setitem__(self, target, edgeInfo) if target not in self.graph: # ADD NEW NODE TO THE NODE DICT self.graph += target _setitem_ = dict.__setitem__ # INTERNAL INTERFACE FOR SAVING AN ENTRY def __delitem__(self, target): "Delete edge from fromNode to target" try: self.dictClass.__delitem__(self, target) except KeyError: # GENERATE A MORE INFORMATIVE ERROR MESSAGE raise KeyError('No edge from node to target') def __isub__(self, target): "Delete edge from fromNode to target" self.__delitem__(target) return self # THIS IS REQUIRED FROM iadd()!! def edges(self): "Return iterator for accessing edges from fromNode" for target, edgeInfo in self.items(): if isinstance(edgeInfo, Edge): yield edgeInfo else: yield Edge(self.graph, (self.fromNode, target, edgeInfo), edgeInfo) class dictGraph(dict): """Top layer graph interface implemenation using dict. """ dictClass = dict edgeDictClass = dictEdge def __init__(self, schema=None, domain=None, range=None): if schema and domain and range: if domain not in schema: schema += domain #ADD DOMAIN AS NODE TO schema GRAPH schema[domain][range] = self self.dictClass.__init__(self) # INITIALIZE TOPLEVEL DICTIONARY def __iadd__(self, node, ruleSet=False): "Add node to graph with no edges" if node not in self: self.dictClass.__setitem__(self, node, self.edgeDictClass(self, node)) if ruleSet == False: ruleSet = getschema(node, graph=self) for rule in ruleSet: if isinstance(rule[1], types.StringType): # Attribute binding; bind directly to attribute. setattr(node, rule[1], self[node]) return self # THIS IS REQUIRED FROM iadd()!! def __setitem__(self, node, target): "This method exists only to support g[n]+=o. Do not use as g[n]=foo." if self[node] != target: raise ValueError('Incorrect usage. Add edges using g[n]+=o \ or g[n][o]=edge.') def __delitem__(self, node): "Delete node from graph." # Grr, we really need to find all edges going to this node # and delete them. try: # Do stuff to remove it here... self.dictClass.__delitem__(self, node) except KeyError: raise KeyError('Node not present in mapping.') for rule in getschema(node, graph=self): if isinstance(rule[1], types.StringType): # ATTRIBUTE BINDING! delattr(node, rule[1]) # REMOVE ATTRIBUTE BINDING def __isub__(self, node): "Delete node from graph" self.__delitem__(node) return self # THIS IS REQUIRED FROM isub()!! def __hash__(self): # SO SCHEMA CAN INDEX ON GRAPHS... return id(self) def edges(self): "Return iterator for all edges in this graph" for edgedict in self.values(): for edge in edgedict.edges(): yield edge update = update_graph class dictEdgeFB(dictEdge): "dictEdge subclass that saves both forward and backward edges" def __setitem__(self, target, edgeInfo): "Save edge in both forward and backward dicts." dictEdge.__setitem__(self, target, edgeInfo) # FORWARD EDGE try: d = self.graph._inverse[target] except KeyError: d = self.dictClass() self.graph._inverse[target] = d d[self.fromNode] = edgeInfo # SAVE BACKWARD EDGE def __invert__(self): "Get nodes with edges to this node" return self.graph._inverse[self.fromNode] class dictGraphFB(dictGraph): "Graph that saves both forward and backward edges" def __init__(self, **kwargs): dictGraph.__init__(self, **kwargs) self._inverse = self.dictClass() __invert__ = classutil.standard_invert def __delitem__(self, node): "Delete node from the graph" try: fromNodes = self._inverse[node] del self._inverse[node] # REMOVE FROM _inverse DICT except KeyError: pass else: # DELETE EDGES TO THIS NODE for i in fromNodes: del self[i][node] dictGraph.__delitem__(self, node) def listUnion(ivals): 'merge all items using union operator' union = None for ival in ivals: try: union += ival except TypeError: union = ival return union class DictQueue(dict): 'each index entry acts like a queue; setitem PUSHES, and delitem POPS' def __setitem__(self, k, val): try: dict.__getitem__(self, k).append(val) except KeyError: dict.__setitem__(self, k, [val]) def __getitem__(self, k): return dict.__getitem__(self, k)[0] def __delitem__(self, k): l=dict.__getitem__(self, k) del l[0] if len(l) == 0: dict.__delitem__(self, k) ################################ PYGR.DATA.SCHEMA - AWARE CLASSES BELOW def close_if_possible(self): 'close storage to ensure any pending data is written' try: do_close = self.d.close except AttributeError: pass else: do_close() class Collection(object): 'flexible storage mapping ID --> OBJECT' def __init__(self, saveDict=None, dictClass=dict, **kwargs): '''saveDict, if not None, the internal mapping to use as our storage. filename: if provided, a file path to a shelve (BerkeleyDB) file to store the data in. dictClass: if provided, the class to use for storage of dict data.''' if saveDict is not None: self.d = saveDict elif 'filename' in kwargs: # USE A SHELVE (BERKELEY DB) try: if kwargs['intKeys']: # ALLOW INT KEYS, HAVE TO USE IntShelve self.__class__ = IntShelve else: raise KeyError except KeyError: self.__class__ = PicklableShelve return self.__init__(**kwargs) else: self.d = dictClass() classutil.apply_itemclass(self, kwargs) def __getitem__(self, k): return self.d[k] def __setitem__(self, k, v): self.d[k] = v def __delitem__(self, k): del self.d[k] def __len__(self): return len(self.d) def __contains__(self, k): return k in self.d def __iter__(self): return iter(self.d) def __getattr__(self, attr): if attr == '__setstate__' or attr == '__dict__': # This prevents infinite recursion during unpickling. raise AttributeError try: # PROTECT AGAINST INFINITE RECURSE IF NOT FULLY __init__ED... return getattr(self.__dict__['d'], attr) except KeyError: raise AttributeError('Collection has no subdictionary') close = close_if_possible def __del__(self): 'must ensure that shelve object is closed to save pending data' try: self.close() except classutil.FileAlreadyClosedError: pass class PicklableShelve(Collection): 'persistent storage mapping ID --> OBJECT' def __init__(self, filename, mode=None, writeback=False, unpicklingMode=False, verbose=True, **kwargs): '''Wrapper for a shelve object that can be pickled. Ideally, you should specify a TWO letter mode string: the first letter to indicate what mode the shelve should be initially opened in, and the second to indicate the mode to open the shelve during unpickling. e.g. mode='nr': to create an empty shelve (writable), which in future will be re-opened read-only. Also, mode=None makes it first attempt to open read-only, but if the file does not exist will create it using mode 'c'. ''' # Mark this string as a file path. self.filename = classutil.SourceFileName(str(filename)) self.writeback = writeback if unpicklingMode or mode is None or mode == 'r': # Just use mode as given. self.mode = mode elif mode == 'n' or mode == 'c' or mode == 'w': # Ambiguous modes, warn & set default. if verbose: import sys print >>sys.stderr, '''Warning: you opened shelve file %s in mode '%s' but this is ambiguous for how the shelve should be re-opened later during unpickling. By default it will be re-opened in mode 'r' (read-only). To make it be re-opened writable, create it in mode '%sw', or call its method reopen('w'), which will make it be re-opened in mode 'w' now and in later unpickling. To suppress this warning message, use the verbose=False option.''' % (filename, mode, mode) self.mode = 'r' else: # PROCESS UNAMBIGUOUS TWO-LETTER mode STRING try: if len(mode) == 2 and mode[0] in 'ncwr' and mode[1] in 'cwr': self.mode = mode[1] # IN FUTURE OPEN IN THIS MODE mode = mode[0] # OPEN NOW IN THIS MODE else: raise ValueError('invalid mode string: ' + mode) except TypeError: raise ValueError('file mode must be a string!') if unpicklingMode: self.d = classutil.open_shelve(filename, mode, writeback, allowReadOnly=True) else: self.d = classutil.open_shelve(filename, mode, writeback) classutil.apply_itemclass(self, kwargs) __getstate__ = classutil.standard_getstate ############### PICKLING METHODS __setstate__ = classutil.standard_setstate _pickleAttrs = dict(filename=0, mode=0, writeback=0) def close(self): '''close our shelve index file.''' self.d.close() def __setitem__(self, k, v): try: self.d[k] = v except TypeError: raise TypeError('to allow int keys, you must pass intKeys=True \ to constructor!') def reopen(self, mode='r'): 're-open shelve in the specified mode, and save mode on self' self.close() self.d = classutil.open_shelve(self.filename, mode, writeback=self.writeback) self.mode = mode class IntShelve(PicklableShelve): 'provides an interface to shelve that can use int as key' def saveKey(self, i): 'convert to string key' if isinstance(i, int): return 'int:%s' % i elif isinstance(i, str): return i try: return 'int:%s' % int(i) except TypeError: pass raise KeyError('IntShelve can only save int or str as key') def trueKey(self, k): "convert back to key's original format" if k.startswith('int:'): return int(k[4:]) else: return k def __getitem__(self, k): return self.d[self.saveKey(k)] def __setitem__(self, k, v): self.d[self.saveKey(k)] = v def __delitem__(self, k): del self.d[self.saveKey(k)] def __contains__(self, k): return self.saveKey(k) in self.d def __iter__(self): ################ STANDARD ITERATOR METHODS for k in self.d: yield self.trueKey(k) def keys(self): return [k for k in self] def iteritems(self): for k, v in self.d.iteritems(): yield self.trueKey(k), v def items(self): return [k for k in self.iteritems()] ## PACKING / UNPACKING METHODS FOR SEPARATING INTERNAL VS. EXTERNAL ## REPRESENTATIONS OF GRAPH NODES AND EDGES ## 1. ID-BASED PACKING: USE obj.id AS INTERNAL REPRESENTATION ## ## 2. TRIVIAL: INTERNAL AND EXTERNAL REPRESENTATIONS IDENTICAL ## WORKS WELL FOR STRING OR INT NODES / EDGES. ## ## 3. PICKLE PACKING: USE PICKLE AS INTERNAL REPRESENTATION def pack_id(self, obj): 'extract id attribute from obj' try: return obj.id except AttributeError: if obj is None: return None raise def unpack_source(self, objID): return self.sourceDB[objID] def unpack_target(self, objID): return self.targetDB[objID] def unpack_edge(self, objID): try: return self.edgeDB[objID] except KeyError: if objID is None: return None raise def add_standard_packing_methods(localDict): localDict['pack_source'] = pack_id localDict['pack_target'] = pack_id localDict['pack_edge'] = pack_id localDict['unpack_source'] = unpack_source localDict['unpack_target'] = unpack_target localDict['unpack_edge'] = unpack_edge def add_trivial_packing_methods(localDict): for name in ('pack_source', 'pack_target', 'pack_edge', 'unpack_source', 'unpack_target', 'unpack_edge'): localDict[name] = lambda self, obj: obj def pack_pickle(self, obj): 'get pickle string for obj' import pickle return pickle.dumps(obj) def unpack_pickle(self, s): 'unpickle string to get obj' import pickle return pickle.loads(s) class MappingInverse(object): def __init__(self, db): self._inverse = db self.attr = db.inverseAttr def __getitem__(self, k): return self._inverse.sourceDB[getattr(k, self.attr)] __invert__ = classutil.standard_invert class Mapping(object): '''dict-like class suitable for persistent usages. Extracts ID values from keys and values passed to it, and saves IDs into its internal dictionary instead of the actual objects. Thus, the external interface is objects, but the internal storage is ID values.''' def __init__(self, sourceDB, targetDB, saveDict=None, IDAttr='id', targetIDAttr='id', itemAttr=None, multiValue=False, inverseAttr=None, **kwargs): '''sourceDB: dictionary that maps key ID values to key objects targetDB: dictionary that maps value IDs to value objects saveDict, if not None, is the internal mapping to use as our storage IDAttr: attribute name to obtain an ID from a key object targetIDAttr: attribute name to obtain an ID from a value object itemAttr, if not None, the attribute to obtain target (value) ID from an internal storage value multiValue: if True, treat each value as a list of values. filename: if provided, is a file path to a shelve (BerkeleyDB) file to store the data in. dictClass: if not None, is the class to use for storage of dict data''' if saveDict is None: self.d = classutil.get_shelve_or_dict(**kwargs) else: self.d = saveDict self.IDAttr = IDAttr self.targetIDAttr = targetIDAttr self.itemAttr = itemAttr self.multiValue = multiValue self.sourceDB = sourceDB self.targetDB = targetDB if inverseAttr is not None: self.inverseAttr = inverseAttr def __getitem__(self, k): kID = getattr(k, self.IDAttr) return self.getTarget(self.d[kID]) def getTarget(self, vID): if self.itemAttr is not None: vID = getattr(vID, self.itemAttr) if self.multiValue: return [self.targetDB[j] for j in vID] else: return self.targetDB[vID] def __setitem__(self, k, v): if self.multiValue: v = [getattr(x, self.targetIDAttr) for x in v] else: v = getattr(v, self.targetIDAttr) self.d[getattr(k, self.IDAttr)] = v def __delitem__(self, k): del self.d[getattr(k, self.IDAttr)] def __contains__(self, k): return getattr(k, self.IDAttr) in self.d def __len__(self): return len(self.d) def clear(self): self.d.clear() def copy(self): return Mapping(self.sourceDB, self.targetDB, self.d.copy(), self.IDAttr, self.targetIDAttr, self.itemAttr, self.multiValue) def update(self, b): for k, v in b.iteritems(): self[k] = v def get(self, k, v=None): try: return self[k] except KeyError: return v def setdefault(self, k, v=None): try: return self[k] except KeyError: self[k] = v return v def pop(self, k, v=None): try: v = self[k] except KeyError: return v del self[k] return v def popitem(self): kID, vID = self.d.popitem() return kID, self.getTarget(vID) def __iter__(self): ######################## ITERATORS for kID in self.d: yield self.sourceDB[kID] def keys(self): return [k for k in self] def itervalues(self): for vID in self.d.itervalues(): yield self.getTarget(vID) def values(self): return [v for v in self.itervalues()] def iteritems(self): for kID, vID in self.d.iteritems(): yield self.sourceDB[kID], self.getTarget(vID) def items(self): return [x for x in self.iteritems()] __invert__ = classutil.standard_invert _inverseClass = MappingInverse close = close_if_possible def __del__(self): close_if_possible(self) def graph_cmp(self, other): 'compare two graph dictionaries' import sys diff = cmp(len(self), len(other)) if diff != 0: print >>sys.stderr, 'len diff:', len(self), len(other) return diff for node, d in self.iteritems(): try: d2 = other[node] except KeyError: print >>sys.stderr, 'other missing key' return 1 diff = cmp(d, d2) if diff != 0: print >>sys.stderr, 'value diff', d, d2 return diff return 0 class IDNodeDict(object): """2nd layer graph interface implementation using proxy dict. e.g. shelve.""" dictClass = dict def __init__(self, graph, fromNode): self.graph = graph self.fromNode = fromNode def __getitem__(self, target): ############# ACCESS METHODS edgeID = self.graph.d[self.fromNode][self.graph.pack_target(target)] return self.graph.unpack_edge(edgeID) def __setitem__(self, target, edgeInfo): "Add edge from fromNode to target with edgeInfo" self.graph.d[self.fromNode][self.graph.pack_target(target)] \ = self.graph.pack_edge(edgeInfo) if not hasattr(self.graph, 'sourceDB') or \ (hasattr(self.graph, 'targetDB') and \ self.graph.sourceDB == self.graph.targetDB): self.graph += target # ADD NEW NODE TO THE NODE DICT def __delitem__(self, target): "Delete edge from fromNode to target" try: del self.graph.d[self.fromNode][self.graph.pack_target(target)] except KeyError: # GENERATE A MORE INFORMATIVE ERROR MESSAGE raise KeyError('No edge from node to target') ######### CONVENIENCE METHODS THAT USE THE ACCESS METHODS ABOVE def __iadd__(self, target): "Add edge from fromNode to target with no edge-info" self[target] = None return self # THIS IS REQUIRED FROM iadd()!! def __isub__(self, target): "Delete edge from fromNode to target" self.__delitem__(target) return self # THIS IS REQUIRED FROM iadd()!! def edges(self): "Return iterator for accessing edges from fromNode" for target, edgeInfo in self.graph.d[self.fromNode].items(): yield (self.graph.unpack_source(self.fromNode), self.graph.unpack_target(target), self.graph.unpack_edge(edgeInfo)) def __len__(self): return len(self.graph.d[self.fromNode]) def keys(self): return [k[1] for k in self.edges()] ##### ITERATORS def values(self): return [k[2] for k in self.edges()] def items(self): return [k[1:3] for k in self.edges()] def __iter__(self): for source, target, edgeInfo in self.edges(): yield target def itervalues(self): for source, target, edgeInfo in self.edges(): yield edgeInfo def iteritems(self): for source, target, edgeInfo in self.edges(): yield target, edgeInfo __cmp__ = graph_cmp class IDNodeDictWriteback(IDNodeDict): 'forces writing of subdictionary in shelve opened without writeback=True' def __setitem__(self, target, edgeInfo): d = self.graph.d[self.fromNode] d[self.graph.pack_target(target)] = self.graph.pack_edge(edgeInfo) self.graph.d[self.fromNode] = d # WRITE IT BACK... REQUIRED FOR SHELVE self.graph += target # ADD NEW NODE TO THE NODE DICT def __delitem__(self, target): d = self.graph.d[self.fromNode] del d[self.graph.pack_target(target)] self.graph.d[self.fromNode] = d # WRITE IT BACK... REQUIRED FOR SHELVE class IDNodeDictWriteNow(IDNodeDictWriteback): 'opens shelve for writing, writes an item, immediately reopens' def __setitem__(self, target, edgeInfo): self.graph.d.reopen('w') IDNodeDictWriteback.__setitem__(self, target, edgeInfo) self.graph.d.reopen('w') def __delitem__(self, target): self.graph.d.reopen('w') IDNodeDictWriteback.__delitem__(self, target) self.graph.d.reopen('w') class IDGraphEdges(object): '''provides iterator over edges as (source, target, edge) tuples and getitem[edge] --> [(source, target), ...]''' def __init__(self, g): self.g = g def __iter__(self): for d in self.g.itervalues(): for edge in d.edges(): yield edge def __getitem__(self, edge): l = [] for sourceID, targetID in self.d[edge.id]: l.append((self.g.sourceDB[sourceID], self.g.targetDB[targetID])) return l def __call__(self): return self class IDGraphEdgeDescriptor(object): 'provides interface to edges on demand' def __get__(self, obj, objtype): return IDGraphEdges(obj) def save_graph_db_refs(self, sourceDB=None, targetDB=None, edgeDB=None, simpleKeys=False, unpack_edge=None, edgeDictClass=None, graph=None, **kwargs): 'apply kwargs to reference DB objects for this graph' if sourceDB is not None: self.sourceDB = sourceDB else: # No source DB, store keys as internal representation. simpleKeys = True if targetDB is not None: self.targetDB=targetDB if edgeDB is not None: self.edgeDB=edgeDB else: # just save the edge object as itself (not its ID) self.pack_edge = self.unpack_edge = lambda edge: edge if simpleKeys: # SWITCH TO USING TRIVIAL PACKING: OBJECT IS ITS OWN ID self.__class__ = self._IDGraphClass if unpack_edge is not None: self.unpack_edge = unpack_edge # UNPACKING METHOD OVERRIDES DEFAULT if graph is not None: self.graph = graph if edgeDictClass is not None: self.edgeDictClass = edgeDictClass def graph_db_inverse_refs(self, edgeIndex=False): 'return kwargs for inverse of this graph, or edge index of this graph' if edgeIndex: # TO CONSTRUCT AN EDGE INDEX db = ('edgeDB', 'sourceDB', 'targetDB') else: # DEFAULT: TO CONSTRUCT AN INVERSE MAPPING OF THE GRAPH db = ('targetDB', 'sourceDB', 'edgeDB') try: d = dict(sourceDB=getattr(self, db[0]), targetDB=getattr(self, db[1])) try: d['edgeDB'] = getattr(self, db[2]) # EDGE INFO IS OPTIONAL except AttributeError: pass except AttributeError: d = dict(simpleKeys=True) # NO SOURCE / TARGET DB, SO USE IDs AS KEYS try: # COPY THE LOCAL UNPACKING METHOD, IF ANY if not edgeIndex: d['unpack_edge'] = self.__dict__['unpack_edge'] except KeyError: pass return d def graph_setitem(self, node, target): "This method exists only to support g[n]+=o. Do not use as g[n]=foo." node = self.pack_source(node) try: if node == target.fromNode: return except AttributeError: pass raise ValueError('Incorrect usage. Add edges using g[n]+=o or \ g[n][o]=edge.') class Graph(object): """Top layer graph interface implemenation using proxy dict. Works with dict, shelve, any mapping interface.""" edgeDictClass = IDNodeDict # DEFAULT EDGE DICT def __init__(self, saveDict=None, dictClass=dict, writeNow=False, **kwargs): if saveDict is not None: # USE THE SUPPLIED STORAGE self.d = saveDict elif 'filename' in kwargs: # USE A SHELVE (BERKELEY DB) try: if kwargs['intKeys']: # ALLOW INT KEYS, HAVE TO USE IntShelve self.d = IntShelve(writeback=False, **kwargs) else: raise KeyError except KeyError: self.d = PicklableShelve(writeback=False, **kwargs) if writeNow: # Write immediately. self.edgeDictClass = IDNodeDictWriteNow else: # Use our own writeback. self.edgeDictClass = IDNodeDictWriteback else: self.d = dictClass() save_graph_db_refs(self, **kwargs) __getstate__ = classutil.standard_getstate ############### PICKLING METHODS __setstate__ = classutil.standard_setstate _pickleAttrs = dict(d='saveDict', sourceDB=0, targetDB=0, edgeDB=0, edgeDictClass=0) add_standard_packing_methods(locals()) ############ PACK / UNPACK METHODS def close(self): '''If possible, close our dict.''' try: do_close = self.d.close except AttributeError: pass else: do_close() def __len__(self): return len(self.d) def __iter__(self): for node in self.d: yield self.unpack_source(node) def keys(self): return [k for k in self] def itervalues(self): for node in self.d: yield self.edgeDictClass(self, node) def values(self): return [v for v in self.itervalues()] def iteritems(self): for node in self.d: yield self.unpack_source(node), self.edgeDictClass(self, node) def items(self): return [v for v in self.iteritems()] edges = IDGraphEdgeDescriptor() def __iadd__(self, node): "Add node to graph with no edges" node = self.pack_source(node) if node not in self.d: self.d[node] = {} # INITIALIZE TOPLEVEL DICTIONARY return self # THIS IS REQUIRED FROM iadd()!! def __contains__(self, node): return self.pack_source(node) in self.d def __getitem__(self, node): if node in self: return self.edgeDictClass(self, self.pack_source(node)) raise KeyError('node not in graph') __setitem__ = graph_setitem def __delitem__(self, node): "Delete node from graph." node = self.pack_source(node) # Grr, we really need to find all edges going to this node # and delete them. try: del self.d[node] # DO STUFF TO REMOVE IT HERE... except KeyError: raise KeyError('Node not present in mapping.') def __isub__(self, node): "Delete node from graph" self.__delitem__(node) return self # THIS IS REQUIRED FROM isub()!! update = update_graph __cmp__ = graph_cmp def __del__(self): try: self.close() except classutil.FileAlreadyClosedError: pass # NEED TO PROVIDE A REAL INVERT METHOD!! ## def __invert__(self): ## 'get an interface to the inverse graph mapping' ## try: # CACHED ## return self._inverse ## except AttributeError: # NEED TO CONSTRUCT INVERSE MAPPING ## self._inverse = IDGraph(~(self.d), self.targetDB, self.sourceDB, ## self.edgeDB) ## self._inverse._inverse = self ## return self._inverse ## def __hash__(self): # SO SCHEMA CAN INDEX ON GRAPHS... return id(self) class IDGraph(Graph): add_trivial_packing_methods(locals()) Graph._IDGraphClass = IDGraph class KeepUniqueDict(dict): 'dict that blocks attempts to overwrite an existing key' def __setitem__(self, k, v): try: if self[k] is v: return # ALREADY SAVED. NOTHING TO DO! except KeyError: # NOT PRESENT, SO JUST SAVE THE VALUE dict.__setitem__(self, k, v) return raise KeyError('attempt to overwrite existing key!') def __hash__(self): 'ALLOW THIS OBJECT TO BE USED AS A KEY IN DICTS...' return id(self) PK7“;c4SÐSÐpygr/mapping.pyc;ò |†Kc@s—dklZdkTdkZd„Zdefd„ƒYZdefd„ƒYZdefd „ƒYZd e fd „ƒYZ d e fd „ƒYZ de fd„ƒYZ de fd„ƒYZ d„Zde fd„ƒYZd„Zdefd„ƒYZdefd„ƒYZdefd„ƒYZd„Zd„Zd„Zd„Zd „Zd!„Zd"„Zd#„Zd$efd%„ƒYZd&efd'„ƒYZd(„Zd)efd*„ƒYZ d+e fd,„ƒYZ!d-e!fd.„ƒYZ"d/efd0„ƒYZ#d1efd2„ƒYZ$e%e%e%e&e%e%e%d3„Z'e&d4„Z(d5„Z)d6efd7„ƒYZ*d8e*fd9„ƒYZ+e+e*_,d:e fd;„ƒYZ-dS(<(s generators(s*NcCs\xU|iƒD]G\}}||7}||}x$|iƒD]\}}||| OBJECTcKs™|tj o ||_nld|joRy"|do t|_nt‚Wntj ot|_nX|i |Sn |ƒ|_t i ||ƒdS(súsaveDict, if not None, the internal mapping to use as our storage. filename: if provided, a file path to a shelve (BerkeleyDB) file to store the data in. dictClass: if provided, the class to use for storage of dict data.sfilenamesintKeysN( ssaveDictsNonesselfsdskwargss IntShelves __class__sKeyErrorsPicklableShelves__init__s dictClasss classutilsapply_itemclass(sselfssaveDicts dictClassskwargs((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys__init__s       cCs|i|SdS(N(sselfsdsk(sselfsk((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys __getitem__/scCs||i|scCsb|djp |djo t‚nyt|id|ƒSWntj otdƒ‚nXdS(Ns __setstate__s__dict__sdsCollection has no subdictionary(sattrsAttributeErrorsgetattrsselfs__dict__sKeyError(sselfsattr((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys __getattr__As  cCs+y|iƒWntij onXdS(s=must ensure that shelve object is closed to save pending dataN(sselfscloses classutilsFileAlreadyClosedError(sself((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys__del__Ks (s__name__s __module__s__doc__sNonesdicts__init__s __getitem__s __setitem__s __delitem__s__len__s __contains__s__iter__s __getattr__sclose_if_possiblescloses__del__(((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys Collections        sPicklableShelvecBsntZdZeeeed„ZeiZ ei Z e ddddddƒZ d„Zd„Zdd „ZRS( s(persistent storage mapping ID --> OBJECTcKsŒtit|ƒƒ|_||_|p|tjp |djo ||_né|djp|djp |djo;|o'dk }|i d|||fIJnd|_n‡ydt |ƒdjo|dd jo|d d jo|d |_|d}nt d |ƒ‚Wntj ot d ƒ‚nX|o"ti|||dtƒ|_nti|||ƒ|_ti||ƒdS(sÞWrapper for a shelve object that can be pickled. Ideally, you should specify a TWO letter mode string: the first letter to indicate what mode the shelve should be initially opened in, and the second to indicate the mode to open the shelve during unpickling. e.g. mode='nr': to create an empty shelve (writable), which in future will be re-opened read-only. Also, mode=None makes it first attempt to open read-only, but if the file does not exist will create it using mode 'c'. srsnscswNs¥Warning: you opened shelve file %s in mode '%s' but this is ambiguous for how the shelve should be re-opened later during unpickling. By default it will be re-opened in mode 'r' (read-only). To make it be re-opened writable, create it in mode '%sw', or call its method reopen('w'), which will make it be re-opened in mode 'w' now and in later unpickling. To suppress this warning message, use the verbose=False option.iisncwriscwrsinvalid mode string: sfile mode must be a string!s allowReadOnly(s classutilsSourceFileNamesstrsfilenamesselfs writebacksunpicklingModesmodesNonesverbosessyssstderrslens ValueErrors TypeErrors open_shelvesTruesdsapply_itemclassskwargs(sselfsfilenamesmodes writebacksunpicklingModesverboseskwargsssys((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys__init__Vs,  ! '  5 sfilenameismodes writebackcCs|iiƒdS(sclose our shelve index file.N(sselfsdsclose(sself((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pysclose‡scCs7y||i|ús(snames localDict(s localDictsname((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pysadd_trivial_packing_methods÷scCsdk}|i|ƒSdS(sget pickle string for objN(spicklesdumpssobj(sselfsobjspickle((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys pack_pickleýs cCsdk}|i|ƒSdS(sunpickle string to get objN(spicklesloadsss(sselfssspickle((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys unpack_pickles sMappingInversecBs#tZd„Zd„ZeiZRS(NcCs||_|i|_dS(N(sdbsselfs_inverses inverseAttrsattr(sselfsdb((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys__init__ s cCs|iit||iƒSdS(N(sselfs_inversessourceDBsgetattrsksattr(sselfsk((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys __getitem__s(s__name__s __module__s__init__s __getitem__s classutilsstandard_inverts __invert__(((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pysMappingInverse s  sMappingcBsûtZdZeddeeed„Zd„Zd„Zd„Zd„Z d„Z d„Z d „Z d „Z d „Zed „Zed „Zed„Zd„Zd„Zd„Zd„Zd„Zd„Zd„ZeiZeZeZd„Z RS(s dict-like class suitable for persistent usages. Extracts ID values from keys and values passed to it, and saves IDs into its internal dictionary instead of the actual objects. Thus, the external interface is objects, but the internal storage is ID values.sidc Ks€|tjoti| |_n ||_||_||_||_ ||_ ||_ ||_ |tj o ||_ ndS(sÇsourceDB: dictionary that maps key ID values to key objects targetDB: dictionary that maps value IDs to value objects saveDict, if not None, is the internal mapping to use as our storage IDAttr: attribute name to obtain an ID from a key object targetIDAttr: attribute name to obtain an ID from a value object itemAttr, if not None, the attribute to obtain target (value) ID from an internal storage value multiValue: if True, treat each value as a list of values. filename: if provided, is a file path to a shelve (BerkeleyDB) file to store the data in. dictClass: if not None, is the class to use for storage of dict dataN(ssaveDictsNones classutilsget_shelve_or_dictskwargssselfsdsIDAttrs targetIDAttrsitemAttrs multiValuessourceDBstargetDBs inverseAttr( sselfssourceDBstargetDBssaveDictsIDAttrs targetIDAttrsitemAttrs multiValues inverseAttrskwargs((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys__init__s          cCs*t||iƒ}|i|i|ƒSdS(N(sgetattrsksselfsIDAttrskIDs getTargetsd(sselfskskID((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys __getitem__5scCso|itj ot||iƒ}n|io0gi}|D]}||i |ƒq>~Sn |i |SdS(N( sselfsitemAttrsNonesgetattrsvIDs multiValuesappends_[1]sjstargetDB(sselfsvIDsjs_[1]((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys getTarget9s  0cCsp|io7gi}|D]}|t||iƒƒq~}nt||iƒ}||it||i ƒx7|iiƒD]&\}}|i||i|ƒfVqWdS(N(sselfsds iteritemsskIDsvIDssourceDBs getTarget(sselfsvIDskID((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys iteritems„s cCs/gi}|iƒD]}||ƒq~SdS(N(sappends_[1]sselfs iteritemssx(sselfs_[1]sx((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pysitemsˆscCst|ƒdS(N(sclose_if_possiblesself(sself((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys__del__s(!s__name__s __module__s__doc__sNonesFalses__init__s __getitem__s getTargets __setitem__s __delitem__s __contains__s__len__sclearscopysupdatesgets setdefaultspopspopitems__iter__skeyss itervaluessvaluess iteritemssitemss classutilsstandard_inverts __invert__sMappingInverses _inverseClasssclose_if_possiblescloses__del__(((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pysMappings2                     cCsõdk}tt|ƒt|ƒƒ}|djo-|idIt|ƒIt|ƒIJ|SnxŒ|iƒD]~\}}y||}Wn$t j o|idIJdSnXt||ƒ}|djo!|idI|I|IJ|SqkqkWdSdS(scompare two graph dictionariesNis len diff:sother missing keyis value diff( ssysscmpslensselfsothersdiffsstderrs iteritemssnodesdsd2sKeyError(sselfsothersnodesdssyssdiffsd2((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys graph_cmp“s$  %     s IDNodeDictcBs˜tZdZeZd„Zd„Zd„Zd„Zd„Z d„Z d„Z d„Z d „Z d „Zd „Zd „Zd „Zd„ZeZRS(sN2nd layer graph interface implementation using proxy dict. e.g. shelve.cCs||_||_dS(N(sgraphsselfsfromNode(sselfsgraphsfromNode((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys__init__¬s cCs7|ii|i|ii|ƒ}|ii|ƒSdS(N(sselfsgraphsdsfromNodes pack_targetstargetsedgeIDs unpack_edge(sselfstargetsedgeID((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys __getitem__°s#cCs†|ii|ƒ|ii|i|ii|ƒ [(source, target), ...]cCs ||_dS(N(sgsself(sselfsg((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys__init__sccs9x2|iiƒD]!}x|iƒD] }|Vq#WqWdS(N(sselfsgs itervaluessdsedgessedge(sselfsedgesd((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys__iter__s  cCsVg}xE|i|iD]3\}}|i|ii ||ii |fƒqW|SdS(N( slsselfsdsedgesidssourceIDstargetIDsappendsgssourceDBstargetDB(sselfsedgessourceIDstargetIDsl((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys __getitem__s  +cCs|SdS(N(sself(sself((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys__call__ s(s__name__s __module__s__doc__s__init__s__iter__s __getitem__s__call__(((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys IDGraphEdgess    sIDGraphEdgeDescriptorcBstZdZd„ZRS(s%provides interface to edges on demandcCst|ƒSdS(N(s IDGraphEdgessobj(sselfsobjsobjtype((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys__get__'s(s__name__s __module__s__doc__s__get__(((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pysIDGraphEdgeDescriptor$s c KsÐ|tj o ||_nt}|tj o ||_n|tj o ||_nd„|_|_|o|i |_ n|tj o ||_n|tj o ||_ n|tj o ||_ ndS(s3apply kwargs to reference DB objects for this graphcCs|S(N(sedge(sedge((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys9sN( ssourceDBsNonesselfsTrues simpleKeysstargetDBsedgeDBs pack_edges unpack_edges _IDGraphClasss __class__sgraphs edgeDictClass( sselfssourceDBstargetDBsedgeDBs simpleKeyss unpack_edges edgeDictClasssgraphskwargs((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pyssave_graph_db_refs+s"           cCsñ|odddf}ndddf}ydtdt||dƒdt||dƒƒ}yt||dƒ|d OBJECTcKs™|tj o ||_nld|joRy"|do t|_nt‚Wntj ot|_nX|i |Sn |ƒ|_t i ||ƒdS(súsaveDict, if not None, the internal mapping to use as our storage. filename: if provided, a file path to a shelve (BerkeleyDB) file to store the data in. dictClass: if provided, the class to use for storage of dict data.sfilenamesintKeysN( ssaveDictsNonesselfsdskwargss IntShelves __class__sKeyErrorsPicklableShelves__init__s dictClasss classutilsapply_itemclass(sselfssaveDicts dictClassskwargs((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys__init__s       cCs|i|SdS(N(sselfsdsk(sselfsk((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys __getitem__/scCs||i|scCsb|djp |djo t‚nyt|id|ƒSWntj otdƒ‚nXdS(Ns __setstate__s__dict__sdsCollection has no subdictionary(sattrsAttributeErrorsgetattrsselfs__dict__sKeyError(sselfsattr((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys __getattr__As  cCs+y|iƒWntij onXdS(s=must ensure that shelve object is closed to save pending dataN(sselfscloses classutilsFileAlreadyClosedError(sself((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys__del__Ks (s__name__s __module__s__doc__sNonesdicts__init__s __getitem__s __setitem__s __delitem__s__len__s __contains__s__iter__s __getattr__sclose_if_possiblescloses__del__(((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys Collections        sPicklableShelvecBsntZdZeeeed„ZeiZ ei Z e ddddddƒZ d„Zd„Zdd „ZRS( s(persistent storage mapping ID --> OBJECTcKsŒtit|ƒƒ|_||_|p|tjp |djo ||_né|djp|djp |djo;|o'dk }|i d|||fIJnd|_n‡ydt |ƒdjo|dd jo|d d jo|d |_|d}nt d |ƒ‚Wntj ot d ƒ‚nX|o"ti|||dtƒ|_nti|||ƒ|_ti||ƒdS(sÞWrapper for a shelve object that can be pickled. Ideally, you should specify a TWO letter mode string: the first letter to indicate what mode the shelve should be initially opened in, and the second to indicate the mode to open the shelve during unpickling. e.g. mode='nr': to create an empty shelve (writable), which in future will be re-opened read-only. Also, mode=None makes it first attempt to open read-only, but if the file does not exist will create it using mode 'c'. srsnscswNs¥Warning: you opened shelve file %s in mode '%s' but this is ambiguous for how the shelve should be re-opened later during unpickling. By default it will be re-opened in mode 'r' (read-only). To make it be re-opened writable, create it in mode '%sw', or call its method reopen('w'), which will make it be re-opened in mode 'w' now and in later unpickling. To suppress this warning message, use the verbose=False option.iisncwriscwrsinvalid mode string: sfile mode must be a string!s allowReadOnly(s classutilsSourceFileNamesstrsfilenamesselfs writebacksunpicklingModesmodesNonesverbosessyssstderrslens ValueErrors TypeErrors open_shelvesTruesdsapply_itemclassskwargs(sselfsfilenamesmodes writebacksunpicklingModesverboseskwargsssys((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys__init__Vs,  ! '  5 sfilenameismodes writebackcCs|iiƒdS(sclose our shelve index file.N(sselfsdsclose(sself((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pysclose‡scCs7y||i|ús(snames localDict(s localDictsname((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pysadd_trivial_packing_methods÷scCsdk}|i|ƒSdS(sget pickle string for objN(spicklesdumpssobj(sselfsobjspickle((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys pack_pickleýs cCsdk}|i|ƒSdS(sunpickle string to get objN(spicklesloadsss(sselfssspickle((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys unpack_pickles sMappingInversecBs#tZd„Zd„ZeiZRS(NcCs||_|i|_dS(N(sdbsselfs_inverses inverseAttrsattr(sselfsdb((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys__init__ s cCs|iit||iƒSdS(N(sselfs_inversessourceDBsgetattrsksattr(sselfsk((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys __getitem__s(s__name__s __module__s__init__s __getitem__s classutilsstandard_inverts __invert__(((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pysMappingInverse s  sMappingcBsûtZdZeddeeed„Zd„Zd„Zd„Zd„Z d„Z d„Z d „Z d „Z d „Zed „Zed „Zed„Zd„Zd„Zd„Zd„Zd„Zd„Zd„ZeiZeZeZd„Z RS(s dict-like class suitable for persistent usages. Extracts ID values from keys and values passed to it, and saves IDs into its internal dictionary instead of the actual objects. Thus, the external interface is objects, but the internal storage is ID values.sidc Ks€|tjoti| |_n ||_||_||_||_ ||_ ||_ ||_ |tj o ||_ ndS(sÇsourceDB: dictionary that maps key ID values to key objects targetDB: dictionary that maps value IDs to value objects saveDict, if not None, is the internal mapping to use as our storage IDAttr: attribute name to obtain an ID from a key object targetIDAttr: attribute name to obtain an ID from a value object itemAttr, if not None, the attribute to obtain target (value) ID from an internal storage value multiValue: if True, treat each value as a list of values. filename: if provided, is a file path to a shelve (BerkeleyDB) file to store the data in. dictClass: if not None, is the class to use for storage of dict dataN(ssaveDictsNones classutilsget_shelve_or_dictskwargssselfsdsIDAttrs targetIDAttrsitemAttrs multiValuessourceDBstargetDBs inverseAttr( sselfssourceDBstargetDBssaveDictsIDAttrs targetIDAttrsitemAttrs multiValues inverseAttrskwargs((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys__init__s          cCs*t||iƒ}|i|i|ƒSdS(N(sgetattrsksselfsIDAttrskIDs getTargetsd(sselfskskID((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys __getitem__5scCso|itj ot||iƒ}n|io0gi}|D]}||i |ƒq>~Sn |i |SdS(N( sselfsitemAttrsNonesgetattrsvIDs multiValuesappends_[1]sjstargetDB(sselfsvIDsjs_[1]((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys getTarget9s  0cCsp|io7gi}|D]}|t||iƒƒq~}nt||iƒ}||it||i ƒx7|iiƒD]&\}}|i||i|ƒfVqWdS(N(sselfsds iteritemsskIDsvIDssourceDBs getTarget(sselfsvIDskID((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys iteritems„s cCs/gi}|iƒD]}||ƒq~SdS(N(sappends_[1]sselfs iteritemssx(sselfs_[1]sx((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pysitemsˆscCst|ƒdS(N(sclose_if_possiblesself(sself((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys__del__s(!s__name__s __module__s__doc__sNonesFalses__init__s __getitem__s getTargets __setitem__s __delitem__s __contains__s__len__sclearscopysupdatesgets setdefaultspopspopitems__iter__skeyss itervaluessvaluess iteritemssitemss classutilsstandard_inverts __invert__sMappingInverses _inverseClasssclose_if_possiblescloses__del__(((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pysMappings2                     cCsõdk}tt|ƒt|ƒƒ}|djo-|idIt|ƒIt|ƒIJ|SnxŒ|iƒD]~\}}y||}Wn$t j o|idIJdSnXt||ƒ}|djo!|idI|I|IJ|SqkqkWdSdS(scompare two graph dictionariesNis len diff:sother missing keyis value diff( ssysscmpslensselfsothersdiffsstderrs iteritemssnodesdsd2sKeyError(sselfsothersnodesdssyssdiffsd2((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys graph_cmp“s$  %     s IDNodeDictcBs˜tZdZeZd„Zd„Zd„Zd„Zd„Z d„Z d„Z d„Z d „Z d „Zd „Zd „Zd „Zd„ZeZRS(sN2nd layer graph interface implementation using proxy dict. e.g. shelve.cCs||_||_dS(N(sgraphsselfsfromNode(sselfsgraphsfromNode((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys__init__¬s cCs7|ii|i|ii|ƒ}|ii|ƒSdS(N(sselfsgraphsdsfromNodes pack_targetstargetsedgeIDs unpack_edge(sselfstargetsedgeID((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys __getitem__°s#cCs†|ii|ƒ|ii|i|ii|ƒ [(source, target), ...]cCs ||_dS(N(sgsself(sselfsg((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys__init__sccs9x2|iiƒD]!}x|iƒD] }|Vq#WqWdS(N(sselfsgs itervaluessdsedgessedge(sselfsedgesd((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys__iter__s  cCsVg}xE|i|iD]3\}}|i|ii ||ii |fƒqW|SdS(N( slsselfsdsedgesidssourceIDstargetIDsappendsgssourceDBstargetDB(sselfsedgessourceIDstargetIDsl((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys __getitem__s  +cCs|SdS(N(sself(sself((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys__call__ s(s__name__s __module__s__doc__s__init__s__iter__s __getitem__s__call__(((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys IDGraphEdgess    sIDGraphEdgeDescriptorcBstZdZd„ZRS(s%provides interface to edges on demandcCst|ƒSdS(N(s IDGraphEdgessobj(sselfsobjsobjtype((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys__get__'s(s__name__s __module__s__doc__s__get__(((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pysIDGraphEdgeDescriptor$s c KsÐ|tj o ||_nt}|tj o ||_n|tj o ||_nd„|_|_|o|i |_ n|tj o ||_n|tj o ||_ n|tj o ||_ ndS(s3apply kwargs to reference DB objects for this graphcCs|S(N(sedge(sedge((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pys9sN( ssourceDBsNonesselfsTrues simpleKeysstargetDBsedgeDBs pack_edges unpack_edges _IDGraphClasss __class__sgraphs edgeDictClass( sselfssourceDBstargetDBsedgeDBs simpleKeyss unpack_edges edgeDictClasssgraphskwargs((s2build/bdist.darwin-8.11.1-i386/egg/pygr/mapping.pyssave_graph_db_refs+s"           cCsñ|odddf}ndddf}ydtdt||dƒdt||dƒƒ}yt||dƒ|d>sys.stderr, '''%s Database table %s appears to be missing or has no layer name! To create this table, call worldbase.MySQLMetabase("%s", createLayer=) where is the layer name you want to assign it. %s''' % ('!' * 40, self.tablename, self.tablename, '!' * 40) raise if n > 0: # Get layer name from the db. self.zoneName = self.cursor.fetchone()[0] if self.cursor.execute('select location from %s where pygr_id=%%s' % self.tablename, ('0root', )) > 0: for row in self.cursor.fetchall(): self.rootNames[row[0]] = None mdb.save_root_names(self.rootNames) self.graph = SQLGraph(schemaTable, self.cursor, attrAlias= dict(source_id='source_id', target_id='target_id', edge_id='edge_id'), simpleKeys=True, unpack_edge=SchemaEdge(self)) def save_root_name(self, name): self.rootNames[name] = None self.cursor.execute('insert into %s (pygr_id,location,objdata) values \ (%%s,%%s,%%s)' % self.tablename, ('0root', name, 'a')) def find_resource(self, id, download=False): 'get construction rule from mysql, and attempt to construct' self.cursor.execute('select location,objdata,docstring from %s where \ pygr_id=%%s' % self.tablename, (id, )) for location, objdata, docstring in self.cursor.fetchall(): return objdata, docstring # return first resource found raise WorldbaseNotFoundError('unable to construct %s from remote \ services') def __setitem__(self, id, obj): 'add an object to this resource database' s = dumps(obj) # PICKLE obj AND ITS DEPENDENCIES d = get_info_dict(obj, s) self.cursor.execute('replace into %s (pygr_id,location,docstring,user,\ creation_time,pickle_size,objdata) values (%%s,\ %%s,%%s,%%s,%%s,%%s,%%s)' % self.tablename, (id, 'mysql:' + self.tablename, obj.__doc__, d['user'], d['creation_time'], d['pickle_size'], s)) root = id.split('.')[0] if root not in self.rootNames: self.save_root_name(root) def __delitem__(self, id): 'delete this resource and its schema rules' if self.cursor.execute('delete from %s where pygr_id=%%s' % self.tablename, (id, )) < 1: raise WorldbaseNotFoundError('no resource %s in this database' % id) def registerServer(self, locationKey, serviceDict): 'register the specified services to mysql database' n = 0 for id, (d, pdata) in serviceDict.items(): n+=self.cursor.execute('replace into %s (pygr_id,location,\ docstring,user,creation_time,pickle_size,\ objdata) values (%%s,%%s,%%s,%%s,%%s,%%s,\ %%s)' % self.tablename, (id, locationKey, d['__doc__'], d['user'], d['creation_time'], d['pickle_size'], pdata)) return n def setschema(self, id, attr, kwargs): 'save a schema binding for id.attr --> targetID' if not attr.startswith('-'): # REAL ATTRIBUTE targetID = kwargs['targetID'] # RAISES KeyError IF NOT PRESENT kwdata = dumps(kwargs) self.cursor.execute('replace into %s (pygr_id,location,objdata) \ values (%%s,%%s,%%s)' % self.tablename, ('SCHEMA.' + id, attr, kwdata)) def delschema(self, id, attr): 'delete schema binding for id.attr' self.cursor.execute('delete from %s where pygr_id=%%s and location=%%s' % self.tablename, ('SCHEMA.' + id, attr)) def getschema(self, id): 'return dict of {attr:{args}}' d = {} self.cursor.execute('select location,objdata from %s where pygr_id=%%s' % self.tablename, ('SCHEMA.' + id, )) for attr, objData in self.cursor.fetchall(): d[attr] = self.mdb.loads(objData) return d def dir(self, pattern, matchType='p', asDict=False, download=False): 'return list or dict of resources matching the specified string' if matchType == 'r': self.cursor.execute('select pygr_id,docstring,user,creation_time,\ pickle_size from %s where pygr_id regexp %%s' % self.tablename, (pattern, )) elif matchType == 'p': self.cursor.execute('select pygr_id,docstring,user,creation_time,\ pickle_size from %s where pygr_id like %%s' % self.tablename, (pattern + '%', )) else: # Exit now to avoid fetching rows with no query executed if asDict: return {} else: return [] d = {} for l in self.cursor.fetchall(): d[l[0]] = dict(__doc__=l[1], user=l[2], creation_time=l[3], pickle_size=l[4]) if asDict: return d else: return [name for name in d] class SchemaEdge(object): 'provides unpack_edge method for schema graph storage' def __init__(self, schemaDB): self.schemaDB = schemaDB def __call__(self, edgeID): 'get the actual schema object describing this ID' return self.schemaDB.getschema(edgeID)['-schemaEdge'] class ResourceDBGraphDescr(object): 'this property provides graph interface to schema' def __get__(self, obj, objtype): g = Graph(filename=obj.dbpath + '_schema', mode='cw', writeNow=True, simpleKeys=True, unpack_edge=SchemaEdge(obj)) obj.graph = g return g class ShelveMetabase(object): '''BerkeleyDB-based storage of worldbase resource databases, using the python shelve module. Users will not need to create instances of this class themselves, as worldbase automatically creates one for each appropriate entry in your WORLDBASEPATH; if the corresponding database file does not already exist, it is automatically created for you.''' _pygr_data_version = (0, 1, 0) graph = ResourceDBGraphDescr() # INTERFACE TO SCHEMA GRAPH def __init__(self, dbpath, mdb, mode='r', newZone=None, **kwargs): import anydbm self.dbpath = os.path.join(dbpath, '.pygr_data') # CONSTRUCT FILENAME self.mdb = mdb self.writeable = True # can write to this storage self.zoneName = None try: # OPEN DATABASE FOR READING self.db = open_shelve(self.dbpath, mode) try: mdb.save_root_names(self.db['0root']) except KeyError: pass try: self.zoneName = self.db['0zoneName'] except KeyError: pass except anydbm.error: # CREATE NEW FILE IF NEEDED self.db = open_shelve(self.dbpath, 'c') self.db['0version'] = self._pygr_data_version # SAVE VERSION STAMP self.db['0root'] = {} if newZone is not None: self.db['0zoneName'] = newZone self.zoneName = newZone def reopen(self, mode): self.db.close() self.db = open_shelve(self.dbpath, mode) def find_resource(self, resID, download=False): 'get an item from this resource database' objdata = self.db[resID] # RAISES KeyError IF NOT PRESENT try: return objdata, self.db['__doc__.' + resID]['__doc__'] except KeyError: return objdata, None def __setitem__(self, resID, obj): 'add an object to this resource database' s = dumps(obj) # PICKLE obj AND ITS DEPENDENCIES self.reopen('w') # OPEN BRIEFLY IN WRITE MODE try: self.db[resID] = s # SAVE TO OUR SHELVE FILE self.db['__doc__.' + resID] = get_info_dict(obj, s) root = resID.split('.')[0] # SEE IF ROOT NAME IS IN THIS SHELVE d = self.db.get('0root', {}) if root not in d: d[root] = None # ADD NEW ENTRY self.db['0root'] = d # SAVE BACK TO SHELVE finally: self.reopen('r') # REOPEN READ-ONLY def __delitem__(self, resID): 'delete this item from the database, with a modicum of safety' self.reopen('w') # OPEN BRIEFLY IN WRITE MODE try: try: del self.db[resID] # DELETE THE SPECIFIED RULE except KeyError: raise WorldbaseNotFoundError('ID %s not found in %s' % (resID, self.dbpath)) try: del self.db['__doc__.' + resID] except KeyError: pass finally: self.reopen('r') # REOPEN READ-ONLY def dir(self, pattern, matchType='p', asDict=False, download=False): 'generate all item IDs matching the specified pattern' if matchType == 'r': pattern = re.compile(pattern) l = [] for name in self.db: if matchType == 'p' and name.startswith(pattern) or \ matchType == 'r' and pattern.search(name): l.append(name) if asDict: d = {} for name in l: d[name] = self.db.get('__doc__.' + name, None) return d return l def setschema(self, resID, attr, kwargs): 'save a schema binding for resID.attr --> targetID' if not attr.startswith('-'): # REAL ATTRIBUTE targetID = kwargs['targetID'] # RAISES KeyError IF NOT PRESENT self.reopen('w') # OPEN BRIEFLY IN WRITE MODE d = self.db.get('SCHEMA.' + resID, {}) d[attr] = kwargs # SAVE THIS SCHEMA RULE self.db['SCHEMA.' + resID] = d # FORCE shelve TO RESAVE BACK self.reopen('r') # REOPEN READ-ONLY def getschema(self, resID): 'return dict of {attr:{args}}' return self.db['SCHEMA.' + resID] def delschema(self, resID, attr): 'delete schema binding for resID.attr' self.reopen('w') # OPEN BRIEFLY IN WRITE MODE d=self.db['SCHEMA.' + resID] del d[attr] self.db['SCHEMA.' + resID] = d # FORCE shelve TO RESAVE BACK self.reopen('r') # REOPEN READ-ONLY def __del__(self): 'close the shelve file when finished' self.db.close() def dumps(obj, **kwargs): 'pickle to string, using persistent ID encoding' src = StringIO() pickler = PygrPickler(src) # NEED OUR OWN PICKLER, TO USE persistent_id # Root of pickle tree: save even if persistent_id. pickler.setRoot(obj, **kwargs) pickler.dump(obj) # PICKLE IT return src.getvalue() # RETURN THE PICKLED FORM AS A STRING def get_info_dict(obj, pickleString): 'get dict of standard info about a resource' d = dict(creation_time=datetime.datetime.now(), pickle_size=len(pickleString), __doc__=obj.__doc__) try: d['user'] = os.environ['USER'] except KeyError: d['user'] = None return d class MetabaseBase(object): def persistent_load(self, persid): 'check for PYGR_ID:... format and return the requested object' if persid.startswith('PYGR_ID:'): return self(persid[8:]) # RUN OUR STANDARD RESOURCE REQUEST PROCESS else: # UNKNOWN PERSISTENT ID... NOT FROM PYGR! raise pickle.UnpicklingError, 'Invalid persistent ID %s' % persid def load(self, resID, objdata, docstring): 'load the pickled data and all its dependencies' obj = self.loads(objdata) obj.__doc__ = docstring if hasattr(obj, '_saveLocalBuild') and obj._saveLocalBuild: saver = self.writer.saver # mdb in which to record local copy # SAVE AUTO BUILT RESOURCE TO LOCAL PYGR.DATA hasPending = saver.has_pending() # any pending transaction? saver.add_resource(resID, obj) # add to queue for commit obj._saveLocalBuild = False # NO NEED TO SAVE THIS AGAIN if hasPending: print >>sys.stderr, \ '''Saving new resource %s to local worldbase... You must use worldbase.commit() to commit! You are seeing this message because you appear to be in the middle of a worldbase transaction. Ordinarily worldbase would automatically commit this new downloaded resource, but doing so now would also commit your pending transaction, which you may not be ready to do!''' % resID else: # automatically save new resource saver.save_pending() # commit it else: # NORMAL USAGE obj._persistent_id = resID # MARK WITH ITS PERSISTENT ID self.resourceCache[resID] = obj # SAVE TO OUR CACHE self.bind_schema(resID, obj) # BIND SHADOW ATTRIBUTES IF ANY return obj def loads(self, data): 'unpickle from string, using persistent ID expansion' src = StringIO(data) unpickler = pickle.Unpickler(src) # We provide persistent lookup. unpickler.persistent_load = self.persistent_load obj = unpickler.load() # ACTUALLY UNPICKLE THE DATA return obj def __call__(self, resID, debug=None, download=None, *args, **kwargs): 'get the requested resource ID by searching all databases' try: return self.resourceCache[resID] # USE OUR CACHED OBJECT except KeyError: pass debug_state = self.debug # SAVE ORIGINAL STATE download_state = self.download if debug is not None: self.debug = debug if download is not None: # apply the specified download mode self.download = download else: # just use our current download mode download = self.download try: # finally... TO RESTORE debug STATE EVEN IF EXCEPTION OCCURS. self.update(debug=self.debug, keepCurrentPath=True) # load if empty for objdata, docstr in self.find_resource(resID, download): try: obj = self.load(resID, objdata, docstr) break except (KeyError, IOError): # Not in this DB; files not accessible... if self.debug: # PASS ON THE ACTUAL ERROR IMMEDIATELY raise finally: # RESTORE STATE BEFORE RAISING ANY EXCEPTION self.debug = debug_state self.download = download_state self.resourceCache[resID] = obj # save to our cache return obj def bind_schema(self, resID, obj): 'if this resource ID has any schema, bind its attrs to class' try: schema = self.getschema(resID) except KeyError: return # NO SCHEMA FOR THIS OBJ, SO NOTHING TO DO self.resourceCache.schemaCache[resID] = schema # cache for speed for attr, rules in schema.items(): if not attr.startswith('-'): # only bind real attributes self.bind_property(obj, attr, **rules) def bind_property(self, obj, attr, itemRule=False, **kwargs): 'create a descriptor for the attr on the appropriate obj class' try: # SEE IF OBJECT TELLS US TO SKIP THIS ATTRIBUTE return obj._ignoreShadowAttr[attr] # IF PRESENT, NOTHING TO DO except (AttributeError, KeyError): pass # PROCEED AS NORMAL if itemRule: # SHOULD BIND TO ITEMS FROM obj DATABASE # Class used for constructing items. targetClass = get_bound_subclass(obj, 'itemClass') descr = ItemDescriptor(attr, self, **kwargs) else: # SHOULD BIND DIRECTLY TO obj VIA ITS CLASS targetClass = get_bound_subclass(obj) descr = OneTimeDescriptor(attr, self, **kwargs) setattr(targetClass, attr, descr) # BIND descr TO targetClass.attr if itemRule: try: # BIND TO itemSliceClass TOO, IF IT EXISTS... targetClass = get_bound_subclass(obj, 'itemSliceClass') except AttributeError: pass # NO itemSliceClass, SO SKIP else: # BIND TO itemSliceClass setattr(targetClass, attr, descr) if attr == 'inverseDB': # ADD SHADOW __invert__ TO ACCESS THIS addSpecialMethod(obj, '__invert__', getInverseDB) def get_schema_attr(self, resID, attr): 'actually retrieve the desired schema attribute' try: # GET SCHEMA FROM CACHE schema = self.resourceCache.schemaCache[resID] except KeyError: # Hmm, it should be cached! Obtain from resource DB and cache. schema = self.getschema(resID) self.resourceCache.schemaCache[resID] = schema try: schema = schema[attr] # GET SCHEMA FOR THIS SPECIFIC ATTRIBUTE except KeyError: raise AttributeError('no worldbase schema info for %s.%s' \ % (resID, attr)) targetID = schema['targetID'] # GET THE RESOURCE ID return self(targetID) # actually load the resource def add_root_name(self, name): 'add name to the root of our data namespace and schema namespace' # This forces the root object to add name if not present. getattr(self.Data, name) getattr(self.Schema, name) def save_root_names(self, rootNames): 'add set of names to our namespace root' for name in rootNames: self.add_root_name(name) def clear_cache(self): 'clear all resources from cache' self.resourceCache.clear() def get_writer(self): 'return writeable mdb if available, or raise exception' try: return self.writer except AttributeError: raise WorldbaseReadOnlyError('this metabase is read-only!') def add_resource(self, resID, obj=None): """assign obj as the specified resource ID to our metabase. if obj is None, treat resID as a dictionary whose keys are resource IDs and values are the objects to save.""" if obj is None: self.get_writer().saver.add_resource_dict(resID) else: self.get_writer().saver.add_resource(resID, obj) def delete_resource(self, resID): 'delete specified resource ID from our metabase' self.get_writer().saver.delete_resource(resID) def commit(self): 'save any pending resource assignments and schemas' self.get_writer().saver.save_pending() def rollback(self): 'discard any pending resource assignments and schemas' self.get_writer().saver.rollback() def queue_schema_obj(self, schemaPath, attr, schemaObj): 'add a schema to the list of pending schemas to commit' self.get_writer().saver.queue_schema_obj(schemaPath, attr, schemaObj) def add_schema(self, resID, schemaObj): 'assign a schema relation object to a worldbase resource name' l = resID.split('.') schemaPath = SchemaPath(self, '.'.join(l[:-1])) setattr(schemaPath, l[-1], schemaObj) def list_pending(self): return self.get_writer().saver.list_pending() class Metabase(MetabaseBase): def __init__(self, dbpath, resourceCache, zoneDict=None, parent=None, **kwargs): '''zoneDict provides a mechanism for the caller to request information about what type of metabase this dbpath mapped to. zoneDict must be a dict''' self.parent = parent self.Schema = SchemaPath(self) self.Data = ResourceRoot(self) # root of namespace self.resourceCache = resourceCache self.debug = True # single mdb should expose all errors self.download = False if zoneDict is None: # user doesn't want zoneDict info zoneDict = {} # use a dummy dict, disposable if dbpath.startswith('http://'): storage = XMLRPCMetabase(dbpath, self, **kwargs) if 'remote' not in zoneDict: zoneDict['remote'] = self elif dbpath.startswith('mysql:'): storage = MySQLMetabase(dbpath[6:], self, **kwargs) if 'MySQL' not in zoneDict: zoneDict['MySQL'] = self else: # TREAT AS LOCAL FILEPATH dbpath = os.path.expanduser(dbpath) storage = ShelveMetabase(dbpath, self, **kwargs) if dbpath == os.path.expanduser('~') or \ dbpath.startswith(os.path.expanduser('~') + os.sep): if 'my' not in zoneDict: zoneDict['my'] = self elif os.path.isabs(dbpath): if 'system' not in zoneDict: zoneDict['system'] = self elif dbpath.split(os.sep)[0] == os.curdir: if 'here' not in zoneDict: zoneDict['here'] = self elif 'subdir' not in zoneDict: zoneDict['subdir'] = self self.storage = storage if storage.zoneName is not None and storage.zoneName not in zoneDict: zoneDict[storage.zoneName] = self # record this zone name if storage.writeable: self.writeable = True self.saver = ResourceSaver(self) self.writer = self # record downloaded resources here else: self.writeable = False def update(self, worldbasePath=None, debug=None, keepCurrentPath=False): if not keepCurrentPath: # metabase has fixed path raise ValueError('You cannot change the path of a Metabase') def find_resource(self, resID, download=False): yield self.storage.find_resource(resID, download) def get_pending_or_find(self, resID, **kwargs): 'find resID even if only pending (not actually saved yet)' try: # 1st LOOK IN PENDING QUEUE return self.saver.pendingData[resID] except KeyError: pass return self(resID, **kwargs) def getschema(self, resID): 'return dict of {attr: {args}} or KeyError if not found' return self.storage.getschema(resID) def save_root_names(self, rootNames): if self.parent is not None: # add names to parent's namespace as well self.parent.save_root_names(rootNames) MetabaseBase.save_root_names(self, rootNames) # call the generic method def saveSchema(self, resID, attr, args): '''save an attribute binding rule to the schema; DO NOT use this internal interface unless you know what you are doing!''' self.storage.setschema(resID, attr, args) def saveSchemaEdge(self, schema): 'save schema edge to schema graph' self.saveSchema(schema.name, '-schemaEdge', schema) self.storage.graph += schema.sourceDB # ADD NODE TO SCHEMA GRAPH # Edge self.storage.graph[schema.sourceDB][schema.targetDB] = schema.name def dir(self, pattern='', matchType='p', asDict=False, download=False): return self.storage.dir(pattern, matchType, asDict=asDict, download=download) class ZoneDict(UserDict.DictMixin): 'interface to current zones' def __init__(self, mdbList): self.mdbList = mdbList def __getitem__(self, zoneName): self.mdbList.update(keepCurrentPath=True) # make sure metabases loaded return self.mdbList.zoneDict[zoneName] def keys(self): self.mdbList.update(keepCurrentPath=True) # make sure metabases loaded return self.mdbList.zoneDict.keys() def copy(self): self.mdbList.update(keepCurrentPath=True) # make sure metabases loaded return self.mdbList.zoneDict.copy() class MetabaseList(MetabaseBase): '''Primary interface for worldbase resource database access. A single instance of this class is created upon import of the worldbase module, accessible as worldbase.getResource. Users normally will have no need to create additional instances of this class themselves.''' # DEFAULT WORLDBASEPATH: HOME, CURRENT DIR, XMLRPC IN THAT ORDER defaultPath = ['~', '.', 'http://biodb2.bioinformatics.ucla.edu:5000'] def __init__(self, worldbasePath=None, resourceCache=None, separator=',', mdbArgs={}): '''initializes attrs; does not connect to metabases''' if resourceCache is None: # create a cache for loaded resources resourceCache = ResourceCache() self.resourceCache = resourceCache self.mdb = None self.mdbArgs = mdbArgs self.zoneDict = {} self.zones = ZoneDict(self) # interface to dict of zones self.worldbasePath = worldbasePath self.separator = separator self.Schema = SchemaPath(self) self.Data = ResourceRoot(self, zones=self.zones) # root of namespace self.debug = False # if one load attempt fails, try other metabases self.download = False self.ready = False def get_writer(self): 'ensure that metabases are loaded, before looking for our writer' self.update(keepCurrentPath=True) # make sure metabases loaded return MetabaseBase.get_writer(self) # proceed as usual def find_resource(self, resID, download=False): 'search our metabases for pickle string and docstr for resID' for mdb in self.mdb: try: yield mdb.find_resource(resID, download).next() except KeyError: # not in this db pass raise WorldbaseNotFoundError('unable to find %s in WORLDBASEPATH' % resID) def get_worldbase_path(self): 'get environment var, or default in that order' try: return os.environ['WORLDBASEPATH'] except KeyError: try: return os.environ['PYGRDATAPATH'] except KeyError: return self.separator.join(self.defaultPath) def update(self, worldbasePath=None, debug=None, keepCurrentPath=False, mdbArgs=None): 'get the latest list of resource databases' if keepCurrentPath: # only update if self.worldbasePath is None worldbasePath = self.worldbasePath if worldbasePath is None: # get environment var or default worldbasePath = self.get_worldbase_path() if debug is None: debug = self.debug if mdbArgs is None: mdbArgs = self.mdbArgs if not self.ready or self.worldbasePath != worldbasePath: # reload self.worldbasePath = worldbasePath try: # disconnect from previous writeable interface if any del self.writer except AttributeError: pass self.mdb = [] try: # default: we don't have a writeable mdb to save data in del self.writer except AttributeError: pass self.zoneDict = {} for dbpath in worldbasePath.split(self.separator): try: # connect to metabase mdb = Metabase(dbpath, self.resourceCache, self.zoneDict, self, **mdbArgs) except (KeyboardInterrupt, SystemExit): raise # DON'T TRAP THESE CONDITIONS # FORCED TO ADOPT THIS STRUCTURE BECAUSE xmlrpc RAISES # socket.gaierror WHICH IS NOT A SUBCLASS OF StandardError... # SO I CAN'T JUST TRAP StandardError, UNFORTUNATELY... except: # trap errors and continue to next metabase if debug: raise # expose the error immediately else: # warn the user but keep going... import traceback traceback.print_exc(10, sys.stderr) print >>sys.stderr, ''' WARNING: error accessing metabase %s. Continuing...''' % dbpath else: # NO PROBLEM, SO ADD TO OUR RESOURCE DB LIST # Save to our list of resource databases. self.mdb.append(mdb) if mdb.writeable and not hasattr(self, 'writer'): self.writer = mdb # record as place to save resources self.ready = True # metabases successfully loaded def get_pending_or_find(self, resID, **kwargs): 'find resID even if only pending (not actually saved yet)' for mdb in self.mdb: try: # 1st LOOK IN PENDING QUEUE return mdb.saver.pendingData[resID] except KeyError: pass return self(resID, **kwargs) def registerServer(self, locationKey, serviceDict): 'register the serviceDict with the first index server in WORLDBASEPATH' for mdb in self.mdb: if hasattr(mdb.storage, 'registerServer'): n = mdb.storage.registerServer(locationKey, serviceDict) if n == len(serviceDict): return n raise ValueError('unable to register services. Check WORLDBASEPATH') def getschema(self, resID): 'search our resource databases for schema info for the desired ID' for mdb in self.mdb: try: return mdb.getschema(resID) # TRY TO OBTAIN FROM THIS DATABASE except KeyError: pass # NOT IN THIS DB raise KeyError('no schema info available for ' + resID) def dir(self, pattern='', matchType='p', asDict=False, download=False): 'get list or dict of resources beginning with the specified string' self.update(keepCurrentPath=True) # make sure metabases loaded results = [] for mdb in self.mdb: results.append(mdb.dir(pattern, matchType, asDict=asDict, download=download)) if asDict: # merge result dictionaries d = {} results.reverse() # give first results highest precedence for subdir in results: d.update(subdir) return d else: # simply remove redundancy from results d = {} for l in results: filter(d.setdefault, l) # add all entries to dict results = d.keys() results.sort() return results class ResourceCache(dict): 'provide one central repository of loaded resources & schema info' def __init__(self): dict.__init__(self) self.schemaCache = {} def clear(self): dict.clear(self) # clear our dictionary self.schemaCache.clear() # class ResourceSaver(object): 'queues new resources until committed to our mdb' def __init__(self, mdb): self.clear_pending() self.mdb = mdb def clear_pending(self): self.pendingData = {} # CLEAR THE PENDING QUEUE self.pendingSchema = {} # CLEAR THE PENDING QUEUE self.lastData = {} self.lastSchema = {} self.rollbackData = {} # CLEAR THE ROLLBACK CACHE def check_docstring(self, obj): '''enforce requirement for docstring, by raising exception if not present''' try: if obj.__doc__ is None or (hasattr(obj.__class__, '__doc__') and obj.__doc__==obj.__class__.__doc__): raise AttributeError except AttributeError: raise ValueError('to save a resource object, you MUST give it a \ __doc__ string attribute describing it!') def add_resource(self, resID, obj): 'queue the object for saving to our metabase as ' self.check_docstring(obj) obj._persistent_id = resID # MARK OBJECT WITH ITS PERSISTENT ID self.pendingData[resID] = obj # ADD TO QUEUE try: self.rollbackData[resID] = self.mdb.resourceCache[resID] except KeyError: pass self.cache_if_appropriate(resID, obj) def cache_if_appropriate(self, resID, obj): try: if obj._worldbase_no_cache: return # do not cache this object; it is not ready to use!! except AttributeError: pass self.mdb.resourceCache[resID] = obj # SAVE TO OUR CACHE def add_resource_dict(self, d): 'queue a dict of name:object pairs for saving to metabase' for k, v in d.items(): self.add_resource(k, v) def queue_schema_obj(self, schemaPath, attr, schemaObj): 'add a schema object to the queue for saving to our metabase' resID = schemaPath.getPath(attr) # GET STRING ID self.pendingSchema[resID] = (schemaPath, attr, schemaObj) def save_resource(self, resID, obj): 'save the object as ' self.check_docstring(obj) if obj._persistent_id != resID: raise WorldbaseMismatchError( '''The _persistent_id attribute for %s has changed! If you changed it, shame on you! Otherwise, this should not happen, so report the reproducible steps to this error message as a bug report.''' % resID) # Finally, save the object to the database. self.mdb.storage[resID] = obj self.cache_if_appropriate(resID, obj) # SAVE TO OUR CACHE def has_pending(self): 'return True if there are resources pending to be committed' return len(self.pendingData) > 0 or len(self.pendingSchema) > 0 def save_pending(self): 'save any pending worldbase resources and schema' if len(self.pendingData) > 0 or len(self.pendingSchema) > 0: d = self.pendingData schemaDict = self.pendingSchema else: raise WorldbaseEmptyError('there is no data queued for saving!') for resID, obj in d.items(): # now save the data self.save_resource(resID, obj) for schemaPath, attr, schemaObj in schemaDict.values():# save schema schemaObj.saveSchema(schemaPath, attr, self.mdb) # save each rule self.clear_pending() # FINALLY, CLEAN UP... self.lastData = d # keep as a historical record self.lastSchema = schemaDict def list_pending(self): 'return tuple of pending data dictionary, pending schema' return list(self.pendingData), list(self.pendingSchema) def rollback(self): 'dump any pending data without saving, and restore state of cache' if len(self.pendingData) == 0 and len(self.pendingSchema) == 0: raise WorldbaseEmptyError('there is no data queued for saving!') # Restore the rollback queue. self.mdb.resourceCache.update(self.rollbackData) self.clear_pending() def delete_resource(self, resID): # incorporate this into commit-process? 'delete the specified resource from resourceCache, saver and schema' del self.mdb.storage[resID] # delete from the resource database try: del self.mdb.resourceCache[resID] # delete from cache if exists except KeyError: pass try: del self.pendingData[resID] # delete from queue if exists except KeyError: pass self.delSchema(resID) def delSchema(self, resID): 'delete schema bindings TO and FROM this resource ID' storage = self.mdb.storage try: d = storage.getschema(resID) # GET THE EXISTING SCHEMA except KeyError: return # no schema stored for this object so nothing to do... # This is more aggressive than needed... Could be refined. self.mdb.resourceCache.schemaCache.clear() for attr, obj in d.items(): if attr.startswith('-'): # A SCHEMA OBJECT obj.delschema(storage) # DELETE ITS SCHEMA RELATIONS storage.delschema(resID, attr) # delete attribute schema rule def __del__(self): try: self.save_pending() # SEE WHETHER ANY DATA NEEDS SAVING print >>sys.stderr, ''' WARNING: saving worldbase pending data that you forgot to save... Remember in the future, you must issue the command worldbase.commit() to save your pending worldbase resources to your resource database(s), or alternatively worldbase.rollback() to dump those pending data without saving them. It is a very bad idea to rely on this automatic attempt to save your forgotten data, because it is possible that the Python interpreter may never call this function at exit (for details see the atexit module docs in the Python Library Reference).''' except WorldbaseEmptyError: pass class ResourceServer(XMLRPCServerBase): 'serves resources that can be transmitted on XMLRPC' def __init__(self, mdb, name, serverClasses=None, clientHost=None, withIndex=True, excludeClasses=None, downloadDB=None, resourceDict=None, **kwargs): 'construct server for the designated classes' XMLRPCServerBase.__init__(self, name, **kwargs) self.mdb = mdb if resourceDict is None: resourceDict = mdb.resourceCache if excludeClasses is None: # DEFAULT: NO POINT IN SERVING SQL TABLES... from sqlgraph import SQLTableBase, SQLGraphClustered excludeClasses = [SQLTableBase, SQLGraphClustered] if serverClasses is None: # DEFAULT TO ALL CLASSES WE KNOW HOW TO SERVE from seqdb import SequenceFileDB, BlastDB, \ XMLRPCSequenceDB, BlastDBXMLRPC, \ AnnotationDB, AnnotationClient, AnnotationServer serverClasses=[(SequenceFileDB, XMLRPCSequenceDB, BlastDBXMLRPC), (BlastDB, XMLRPCSequenceDB, BlastDBXMLRPC), (AnnotationDB, AnnotationClient, AnnotationServer)] try: from cnestedlist import NLMSA from xnestedlist import NLMSAClient, NLMSAServer serverClasses.append((NLMSA, NLMSAClient, NLMSAServer)) except ImportError: # cnestedlist NOT INSTALLED, SO SKIP... pass if clientHost is None: # DEFAULT: USE THE SAME HOST STRING AS SERVER clientHost = self.host clientDict = {} for id, obj in resourceDict.items(): # Save all objects matching serverClasses. skipThis = False for skipClass in excludeClasses: # CHECK LIST OF CLASSES TO EXCLUDE if isinstance(obj, skipClass): skipThis = True break if skipThis: continue # DO NOT INCLUDE THIS OBJECT IN SERVER skipThis = True for baseKlass, clientKlass, serverKlass in serverClasses: if isinstance(obj, baseKlass) and not isinstance(obj, clientKlass): skipThis = False # OK, WE CAN SERVE THIS CLASS break if skipThis: # HAS NO XMLRPC CLIENT-SERVER CLASS PAIRING try: # SAVE IT AS ITSELF self.client_dict_setitem(clientDict, id, obj, badClasses=nonPortableClasses) except WorldbaseNotPortableError: pass # HAS NON-PORTABLE LOCAL DEPENDENCIES, SO SKIP IT continue # GO ON TO THE NEXT DATA RESOURCE try: # TEST WHETHER obj CAN BE RE-CLASSED TO CLIENT / SERVER # Convert to server class for serving.` obj.__class__ = serverKlass except TypeError: # GRR, EXTENSION CLASS CAN'T BE RE-CLASSED... state = obj.__getstate__() # READ obj STATE newobj = serverKlass.__new__(serverKlass) # ALLOCATE NEW OBJECT newobj.__setstate__(state) # AND INITIALIZE ITS STATE obj = newobj # THIS IS OUR RE-CLASSED VERSION OF obj try: # USE OBJECT METHOD TO SAVE HOST INFO, IF ANY... obj.saveHostInfo(clientHost, self.port, id) except AttributeError: # TRY TO SAVE URL AND NAME DIRECTLY ON obj obj.url = 'http://%s:%d' % (clientHost, self.port) obj.name = id obj.__class__ = clientKlass # CONVERT TO CLIENT CLASS FOR PICKLING self.client_dict_setitem(clientDict, id, obj) obj.__class__ = serverKlass # CONVERT TO SERVER CLASS FOR SERVING self[id] = obj # ADD TO XMLRPC SERVER self.registrationData = clientDict # SAVE DATA FOR SERVER REGISTRATION if withIndex: # SERVE OUR OWN INDEX AS A STATIC, READ-ONLY INDEX myIndex = MetabaseServer(name, readOnly=True, # CREATE EMPTY INDEX downloadDB=downloadDB) self['index'] = myIndex # ADD TO OUR XMLRPC SERVER # Add our resources to the index. self.register('', '', server=myIndex) def client_dict_setitem(self, clientDict, k, obj, **kwargs): 'save pickle and schema for obj into clientDict' pickleString = dumps(obj, **kwargs) # PICKLE THE CLIENT OBJECT, SAVE clientDict[k] = (get_info_dict(obj, pickleString), pickleString) try: # SAVE SCHEMA INFO AS WELL... clientDict['SCHEMA.' + k] = (dict(schema_version='1.0'), self.mdb.getschema(k)) except KeyError: pass # NO SCHEMA FOR THIS OBJ, SO NOTHING TO DO class ResourcePath(object): 'simple way to read resource names as python foo.bar.bob expressions' def __init__(self, mdb, base=None): self.__dict__['_path'] = base # AVOID TRIGGERING setattr! self.__dict__['_mdb'] = mdb def getPath(self, name): if self._path is not None: return self._path + '.' + name else: return name def __getattr__(self, name): 'extend the resource path by one more attribute' attr = self._pathClass(self._mdb, self.getPath(name)) # MUST NOT USE setattr BECAUSE WE OVERRIDE THIS BELOW! self.__dict__[name] = attr # CACHE THIS ATTRIBUTE ON THE OBJECT return attr def __call__(self, *args, **kwargs): 'construct the requested resource' return self._mdb(self._path, *args, **kwargs) def __setattr__(self, name, obj): 'save obj using the specified resource name' self._mdb.add_resource(self.getPath(name), obj) def __delattr__(self, name): self._mdb.delete_resource(self.getPath(name)) try: # IF ACTUAL ATTRIBUTE EXISTS, JUST DELETE IT del self.__dict__[name] except KeyError: # TRY TO DELETE RESOURCE FROM THE DATABASE pass # NOTHING TO DO def __dir__(self, prefix=None, start=None): """return list of our attributes from worldbase search""" if prefix is None: start = len(self._path) + 1 # skip past . separator prefix = self._path l = self._mdb.dir(prefix) d = {} for name in l: if name.startswith(prefix): d[name[start:].split('.')[0]] = None return d.keys() ResourcePath._pathClass = ResourcePath class ResourceRoot(ResourcePath): 'provide proxy to public metabase methods' def __init__(self, mdb, base=None, zones=None): ResourcePath.__init__(self, mdb, base) self.__dict__['schema'] = mdb.Schema # AVOID TRIGGERING setattr! if zones is not None: self.__dict__['zones'] = zones for attr in ('dir', 'commit', 'rollback', 'add_resource', 'delete_resource', 'clear_cache', 'add_schema', 'update', 'list_pending'): self.__dict__[attr] = getattr(mdb, attr) # mirror metabase methods def __call__(self, resID, *args, **kwargs): """Construct the requested resource""" return self._mdb(resID, *args, **kwargs) def __dir__(self): return ResourcePath.__dir__(self, '', 0) class ResourceZone(object): 'provide pygr.Data old-style interface to resource zones' def __init__(self, mdb, zoneName): self._mdbParent = mdb self._zoneName = zoneName def __getattr__(self, name): # Make sure metabases have been loaded. self._mdbParent.update(keepCurrentPath=True) try: mdb = self._mdbParent.zoneDict[self._zoneName] # get our zone except KeyError: raise ValueError('no zone "%s" available' % self._zoneName) if name == 'schema': # get schema root return SchemaPath.__getitem__(self, mdb) else: # treat as regular worldbase string return ResourcePath.__getitem__(self, mdb, name) class SchemaPath(ResourcePath): 'save schema information for a resource' def __setattr__(self, name, schema): try: schema.saveSchema # VERIFY THAT THIS LOOKS LIKE A SCHEMA OBJECT except AttributeError: raise ValueError('not a valid schema object!') self._mdb.queue_schema_obj(self, name, schema) # QUEUE IT def __delattr__(self, attr): raise NotImplementedError('schema deletion is not yet implemented.') SchemaPath._pathClass = SchemaPath class DirectRelation(object): 'bind an attribute to the target' def __init__(self, target): self.targetID = getID(target) def schemaDict(self): return dict(targetID=self.targetID) def saveSchema(self, source, attr, mdb, **kwargs): d = self.schemaDict() d.update(kwargs) # ADD USER-SUPPLIED ARGS try: # IF kwargs SUPPLIED A TARGET, SAVE ITS ID d['targetID'] = getID(d['targetDB']) del d['targetDB'] except KeyError: pass mdb.saveSchema(getID(source), attr, d) class ItemRelation(DirectRelation): 'bind item attribute to the target' def schemaDict(self): return dict(targetID=self.targetID, itemRule=True) class ManyToManyRelation(object): 'a general graph mapping from sourceDB -> targetDB with edge info' _relationCode = 'many:many' def __init__(self, sourceDB, targetDB, edgeDB=None, bindAttrs=None, sourceNotNone=None, targetNotNone=None): self.sourceDB = getID(sourceDB) # CONVERT TO STRING RESOURCE ID self.targetDB = getID(targetDB) if edgeDB is not None: self.edgeDB = getID(edgeDB) else: self.edgeDB = None self.bindAttrs = bindAttrs if sourceNotNone is not None: self.sourceNotNone = sourceNotNone if targetNotNone is not None: self.targetNotNone = targetNotNone def save_graph_bindings(self, graphDB, attr, mdb): '''save standard schema bindings to graphDB attributes sourceDB, targetDB, edgeDB''' graphDB = graphDB.getPath(attr) # GET STRING ID FOR source self.name = graphDB mdb.saveSchemaEdge(self) #SAVE THIS RULE b = DirectRelation(self.sourceDB) # SAVE sourceDB BINDING b.saveSchema(graphDB, 'sourceDB', mdb) b = DirectRelation(self.targetDB) # SAVE targetDB BINDING b.saveSchema(graphDB, 'targetDB', mdb) if self.edgeDB is not None: # SAVE edgeDB BINDING b = DirectRelation(self.edgeDB) b.saveSchema(graphDB, 'edgeDB', mdb) return graphDB def saveSchema(self, path, attr, mdb): 'save schema bindings associated with this rule' graphDB = self.save_graph_bindings(path, attr, mdb) if self.bindAttrs is not None: bindObj = (self.sourceDB, self.targetDB, self.edgeDB) bindArgs = [{}, dict(invert=True), dict(getEdges=True)] try: # USE CUSTOM INVERSE SCHEMA IF PROVIDED BY TARGET DB bindArgs[1] = mdb.get_pending_or_find(graphDB). \ _inverse_schema() except AttributeError: pass for i in range(3): if len(self.bindAttrs) > i and self.bindAttrs[i] is not None: b = ItemRelation(graphDB) # SAVE ITEM BINDING b.saveSchema(bindObj[i], self.bindAttrs[i], mdb, **bindArgs[i]) def delschema(self, resourceDB): 'delete resource attribute bindings associated with this rule' if self.bindAttrs is not None: bindObj = (self.sourceDB, self.targetDB, self.edgeDB) for i in range(3): if len(self.bindAttrs) > i and self.bindAttrs[i] is not None: resourceDB.delschema(bindObj[i], self.bindAttrs[i]) class OneToManyRelation(ManyToManyRelation): _relationCode = 'one:many' class OneToOneRelation(ManyToManyRelation): _relationCode = 'one:one' class ManyToOneRelation(ManyToManyRelation): _relationCode = 'many:one' class InverseRelation(DirectRelation): "bind source and target as each other's inverse mappings" _relationCode = 'inverse' def saveSchema(self, source, attr, mdb, **kwargs): 'save schema bindings associated with this rule' source = source.getPath(attr) # GET STRING ID FOR source self.name = source mdb.saveSchemaEdge(self) #SAVE THIS RULE DirectRelation.saveSchema(self, source, 'inverseDB', mdb, **kwargs) # source -> target b = DirectRelation(source) # CREATE REVERSE MAPPING b.saveSchema(self.targetID, 'inverseDB', mdb, **kwargs) # target -> source def delschema(self, resourceDB): resourceDB.delschema(self.targetID, 'inverseDB') def getID(obj): 'get persistent ID of the object or raise AttributeError' if isinstance(obj, str): # TREAT ANY STRING AS A RESOURCE ID return obj elif isinstance(obj, ResourcePath): return obj._path # GET RESOURCE ID FROM A ResourcePath else: try: # GET RESOURCE'S PERSISTENT ID return obj._persistent_id except AttributeError: raise AttributeError('this obj has no persistent ID!') PK7“;Ƹ›ÈMÈMpygr/metabase.pyc;ò |†Kc@s2dkZdkZdkZdkZdkZdkZdklZdklZl Z l Z dk l Z l Z lZlZdklZyeWnej oegZnXdefd„ƒYZdefd„ƒYZd efd „ƒYZd efd „ƒYZd efd„ƒYZd„Zd„Zdefd„ƒYZdefd„ƒYZdefd„ƒYZ defd„ƒYZ!defd„ƒYZ"defd„ƒYZ#dei$fd„ƒYZ%dei&fd „ƒYZ'd!efd"„ƒYZ(d#„Z)d$efd%„ƒYZ*d&efd'„ƒYZ+d(efd)„ƒYZ,d*efd+„ƒYZ-d,efd-„ƒYZ.d.„Z/d/„Z0d0efd1„ƒYZ1d2e1fd3„ƒYZ2d4ei3fd5„ƒYZ4d6e1fd7„ƒYZ5d8e6fd9„ƒYZ7d:efd;„ƒYZ8d<efd=„ƒYZ9d>efd?„ƒYZ:e:e:_;d@e:fdA„ƒYZ<dBefdC„ƒYZ=dDe:fdE„ƒYZ>e>e>_;dFefdG„ƒYZ?dHe?fdI„ƒYZ@dJefdK„ƒYZAdLeAfdM„ƒYZBdNeAfdO„ƒYZCdPeAfdQ„ƒYZDdRe?fdS„ƒYZEdT„ZFdS(UN(sStringIO(s CollectionsMappingsGraph(s open_shelvesstandard_invertsget_bound_subclasssSourceFileName(sXMLRPCServerBasesOneTimeDescriptorcBs tZdZd„Zd„ZRS(s)provides shadow attribute based on schemacKs||_||_dS(N(sattrNamesselfsattrsmdb(sselfsattrNamesmdbskwargs((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__init__s cCs_y |i}Wntj otdƒ‚nX|ii||iƒ}||i |i<|SdS(NsYattempt to access worldbase attr on non-worldbase object( sobjs_persistent_idsresIDsAttributeErrorsselfsmdbsget_schema_attrsattrstargets__dict__(sselfsobjsobjtypesresIDstarget((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__get__s (s__name__s __module__s__doc__s__init__s__get__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysOneTimeDescriptors  sItemDescriptorcBs8tZdZeeeeed„Zd„Zd„ZRS(s<provides shadow attribute for items in a db, based on schemac KsC||_||_||_||_||_||_||_dS(N( sattrNamesselfsattrsmdbsinvertsgetEdgessmapAttrs targetAttrs uniqueMapping( sselfsattrNamesmdbsinvertsgetEdgessmapAttrs targetAttrs uniqueMappingskwargs((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__init__+s      cCs~y|ii}Wntj otdƒ‚nX|ii||iƒ}|i o |}n|i o |i }n|SdS(s2return the mapping object for this schema relationsYattempt to access worldbase attr on non-worldbase objectN( sobjsdbs_persistent_idsresIDsAttributeErrorsselfsmdbsget_schema_attrsattrs targetDictsinvertsgetEdgessedges(sselfsobjsresIDs targetDict((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys get_target5s    cCsœ|i|ƒ}|itj o5t||iƒ}|tjotSn||}n ||}|i tj ot||i ƒ}n||i |i <|SdS(N( sselfs get_targetsobjs targetDictsmapAttrsNonesgetattrsobj_idsresults targetAttrs__dict__sattr(sselfsobjsobjtypes targetDictsobj_idsresult((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__get__Cs  (s__name__s __module__s__doc__sFalsesNones__init__s get_targets__get__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysItemDescriptor(s  sItemDescriptorRWcBstZd„ZRS(NcCsH|i otdƒ‚n|i|ƒ}|||<||i|it||iƒo |idjotd|iƒ‚nWntj onXyzt||iƒ o ||i j oRyd|i t |ƒSWqÖt j o&|i tj od|i SqÒqÖXnWntj onXx1|iD]&}t||ƒotdƒ‚q÷q÷WtSdS(sNconvert objects with _persistent_id to PYGR_ID strings during picklingNs__main__s}You cannot pickle a class from __main__! To make this class (%s) picklable, it must be loaded via a regular import statement.s PYGR_ID:%ssUthis object has a local data dependency and cannnot be transferred to a remote client(stypess isinstancesobjsTypeTypes __module__sWorldbaseNoModuleErrors__name__sAttributeErrorsselfsroots sourceIDssidsKeyErrors_persistent_idsNones badClassessklasssWorldbaseNotPortableError(sselfsobjsklassstypes((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys persistent_id·s* #$ cCs||_||_||_dS(sOset obj as root of pickling tree: genuinely pickle it (not just its id)N(sobjsselfsroots sourceIDss badClasses(sselfsobjs sourceIDss badClasses((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pyssetRootÖs  (s__name__s __module__s persistent_idssetRoot(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys PygrPicklerµs sMetabaseServercBs¿tZdZhdd<dd<dd<dd<dd<ddreturn list or dict of resources matching the specified stringsrspN(sselfsget_dbsdownloadsdbsdocss matchTypesrescompilespatternslsnames startswithssearchsappendsasDictsdsget( sselfspatternsasDicts matchTypesdownloadsnamesdbslsdocssd((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysdir.s  :cCs |iSdS(N(sselfs_pygr_data_version(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys get_version?s(s__name__s __module__s__doc__sxmlrpc_methodss_pygr_data_versionsTruesNones__init__sread_download_dbsgetNamesget_dbsFalses getResourcesregisterServers delResourcesdirs get_version(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysMetabaseServerÞs <    cGstdƒ‚dS(Ns€You cannot save data to a remote XMLRPC server. Give a user-editable resource database as the first entry in your WORLDBASEPATH!(sWorldbaseReadOnlyError(sselfsl((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysraise_illegal_saveCssXMLRPCMetabasecBs_tZdZd„Zed„Zd„Zd„Zdeed„Ze Z e Z e Z e Z RS(s3client interface to remote XMLRPC resource databasecKsPdkl}||dƒ|_||_||_|iiƒ|_t|_ dS(N(sget_connectionsindex( s coordinatorsget_connectionsurlsselfsserversmdbsgetNameszoneNamesFalses writeable(sselfsurlsmdbskwargssget_connection((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__init__Ms    cCs¿|o|ii||ƒ}n|ii|ƒ}|djotd|ƒ‚ny|d}|d=Wntj o t }nXx$|i ƒD]\}}||fSq‘Wtd|ƒ‚dS(s9get pickledata,docstring for this resource ID from serverssresource %s not founds__doc__s&unable to find %s from remote servicesN( sdownloadsselfsservers getResourcesidsdsWorldbaseNotFoundErrors docstringsKeyErrorsNonesitemsslocationsobjdata(sselfsidsdownloadsobjdatasds docstringslocation((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys find_resourceUs     cCs|ii||ƒSdS(s"forward registration to the serverN(sselfsserversregisterServers locationKeys serviceDict(sselfs locationKeys serviceDict((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysregisterServerfscCsR|iid|ƒ}|djo t‚nx|iƒD] }|Sq:Wt‚dS(sreturn dict of {attr: {args}}sSCHEMA.sN(sselfsservers getResourcesidsdsKeyErrorsvaluess schemaDict(sselfsids schemaDictsd((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys getschemajs   spcCs>|o|ii||||ƒSn|ii|||ƒSdS(s>return list or dict of resources matching the specified stringN(sdownloadsselfsserversdirspatternsasDicts matchType(sselfspatterns matchTypesasDictsdownload((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysdirss(s__name__s __module__s__doc__s__init__sFalses find_resourcesregisterServers getschemasdirsraise_illegal_saves __setitem__s __delitem__s setschemas delschema(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysXMLRPCMetabaseJs     s MySQLMetabasecBs‰tZdZdddfZeed„Zd„Zed„Zd„Z d„Z d„Z d „Z d „Z d „Zd eed „ZRS(s To create a new resource table, call: MySQLMetabase("DBNAME.TABLENAME", mdb, createLayer="LAYERNAME") where DBNAME is the name of your database, TABLENAME is the name of the table you want to create, and LAYERNAME is the layer name you want to assign itiic Ksxdkl}l} ||ƒ\|_|_|_||_t|_ h|_ |id}|t jo |}n|t j oÂtiiƒ}|iid|iƒ|iid|iƒ|iid|id||dfƒ|iid|id d |idfƒ||_|iid|ƒ|iid |ƒnôy#|iid |idfƒ} WnAtj o5tid dd|i|iddfIJ‚nX| djo|iiƒd|_n|iid|idfƒdjo?x(|iiƒD]} t |i | d) where is the layer name you want to assign it. %ss!i(is)select location from %s where pygr_id=%%ss0roots attrAliass source_ids target_idsedge_ids simpleKeyss unpack_edge( ssqlgraphsget_name_cursorsSQLGraphs tablenamesselfscursors serverInfosmdbsTrues writeables rootNamess schemaTables createLayersNonesnewZonesdatetimesnows creation_timesexecutes_pygr_data_versionszoneNamesns StandardErrorssyssstderrsfetchonesfetchallsrowssave_root_namessdicts SchemaEdgesgraph( sselfs tablenamesmdbs createLayersnewZoneskwargss schemaTables creation_timesget_name_cursorsSQLGraphsnsrow((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__init__ˆsH        + cCs4t|i|<|iid|id|dfƒdS(NsZinsert into %s (pygr_id,location,objdata) values (%%s,%%s,%%s)s0rootsa(sNonesselfs rootNamessnamescursorsexecutes tablename(sselfsname((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pyssave_root_nameÇs cCsZ|iid|i|fƒx*|iiƒD]\}}}||fSq-Wt dƒ‚dS(s:get construction rule from mysql, and attempt to constructsWselect location,objdata,docstring from %s where pygr_id=%%ssPunable to construct %s from remote servicesN( sselfscursorsexecutes tablenamesidsfetchallslocationsobjdatas docstringsWorldbaseNotFoundError(sselfsidsdownloadsobjdatas docstringslocation((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys find_resourceÍs c Cs˜t|ƒ}t||ƒ}|iid|i|d|i|i |d|d|d|fƒ|i dƒd}||i jo|i|ƒndS( s'add an object to this resource databases°replace into %s (pygr_id,location,docstring,user, creation_time,pickle_size,objdata) values (%%s, %%s,%%s,%%s,%%s,%%s,%%s)smysql:susers creation_times pickle_sizes.iN(sdumpssobjsss get_info_dictsdsselfscursorsexecutes tablenamesids__doc__ssplitsroots rootNamesssave_root_name(sselfsidsobjsdsssroot((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys __setitem__Ös 2cCs>|iid|i|fƒdjotd|ƒ‚ndS(s)delete this resource and its schema ruless delete from %s where pygr_id=%%sisno resource %s in this databaseN(sselfscursorsexecutes tablenamesidsWorldbaseNotFoundError(sselfsid((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys __delitem__äsc Csvd}xe|iƒD]W\}\}}||iid|i |||d|d|d|d|fƒ7}qW|SdS(s1register the specified services to mysql databaseisáreplace into %s (pygr_id,location, docstring,user,creation_time,pickle_size, objdata) values (%%s,%%s,%%s,%%s,%%s,%%s, %%s)s__doc__susers creation_times pickle_sizeN( sns serviceDictsitemssidsdspdatasselfscursorsexecutes tablenames locationKey(sselfs locationKeys serviceDictsdspdatasnsid((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysregisterServerës 3cCsV|idƒ o|d}nt|ƒ}|iid|i d|||fƒdS(s.save a schema binding for id.attr --> targetIDs-stargetIDs[replace into %s (pygr_id,location,objdata) values (%%s,%%s,%%s)sSCHEMA.N( sattrs startswithskwargsstargetIDsdumpsskwdatasselfscursorsexecutes tablenamesid(sselfsidsattrskwargsskwdatastargetID((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys setschemaøs  cCs(|iid|id||fƒdS(s!delete schema binding for id.attrs1delete from %s where pygr_id=%%s and location=%%ssSCHEMA.N(sselfscursorsexecutes tablenamesidsattr(sselfsidsattr((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys delschemascCseh}|iid|id|fƒx3|iiƒD]"\}}|i i |ƒ||return list or dict of resources matching the specified stringsrsxselect pygr_id,docstring,user,creation_time, pickle_size from %s where pygr_id regexp %%sspsvselect pygr_id,docstring,user,creation_time, pickle_size from %s where pygr_id like %%ss%s__doc__isuseris creation_timeis pickle_sizeiiN(s matchTypesselfscursorsexecutes tablenamespatternsasDictsdsfetchallslsdictsappends_[1]sname( sselfspatterns matchTypesasDictsdownloadsdsls_[1]sname((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysdirs$  !(s__name__s __module__s__doc__s_pygr_data_versionsNones__init__ssave_root_namesFalses find_resources __setitem__s __delitem__sregisterServers setschemas delschemas getschemasdir(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys MySQLMetabase€s ?     s SchemaEdgecBs tZdZd„Zd„ZRS(s4provides unpack_edge method for schema graph storagecCs ||_dS(N(sschemaDBsself(sselfsschemaDB((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__init__.scCs|ii|ƒdSdS(s/get the actual schema object describing this IDs -schemaEdgeN(sselfsschemaDBs getschemasedgeID(sselfsedgeID((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__call__1s(s__name__s __module__s__doc__s__init__s__call__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys SchemaEdge+s  sResourceDBGraphDescrcBstZdZd„ZRS(s0this property provides graph interface to schemac CsEtd|iddddtdtdt|ƒƒ}||_|SdS(Nsfilenames_schemasmodescwswriteNows simpleKeyss unpack_edge(sGraphsobjsdbpathsTrues SchemaEdgesgsgraph(sselfsobjsobjtypesg((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__get__9s (s__name__s __module__s__doc__s__get__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysResourceDBGraphDescr6s sShelveMetabasecBs’tZdZdddfZeƒZded„Zd„Ze d„Z d„Z d„Z d e e d „Z d „Zd „Zd „Zd„ZRS(siBerkeleyDB-based storage of worldbase resource databases, using the python shelve module. Users will not need to create instances of this class themselves, as worldbase automatically creates one for each appropriate entry in your WORLDBASEPATH; if the corresponding database file does not already exist, it is automatically created for you.iisrcKs#dk}tii|dƒ|_||_t|_t |_ yqt |i|ƒ|_ y|i|i dƒWntj onXy|i d|_ Wntj onXWno|ij o`t |idƒ|_ |i|i d targetIDs-stargetIDswsSCHEMA.srN( sattrs startswithskwargsstargetIDsselfsreopensdbsgetsresIDsd(sselfsresIDsattrskwargssdstargetID((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys setschemas  cCs|id|SdS(sreturn dict of {attr:{args}}sSCHEMA.N(sselfsdbsresID(sselfsresID((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys getschema§scCsG|idƒ|id|}||=||id|<|idƒdS(s$delete schema binding for resID.attrswsSCHEMA.srN(sselfsreopensdbsresIDsdsattr(sselfsresIDsattrsd((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys delschema«s  cCs|iiƒdS(s#close the shelve file when finishedN(sselfsdbsclose(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__del__³s(s__name__s __module__s__doc__s_pygr_data_versionsResourceDBGraphDescrsgraphsNones__init__sreopensFalses find_resources __setitem__s __delitem__sdirs setschemas getschemas delschemas__del__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysShelveMetabase@s        cKs@tƒ}t|ƒ}|i|||i|ƒ|iƒSdS(s.pickle to string, using persistent ID encodingN( sStringIOssrcs PygrPicklerspicklerssetRootsobjskwargssdumpsgetvalue(sobjskwargsssrcspickler((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysdumps¸s    cCsjtdtiiƒdt|ƒd|iƒ}yti d|dN( sselfscheck_docstringsobjsresIDs_persistent_ids pendingDatasmdbs resourceCaches rollbackDatasKeyErrorscache_if_appropriate(sselfsresIDsobj((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys add_resource¨s   cCs@y|iodSnWntj onX||ii|s½The _persistent_id attribute for %s has changed! If you changed it, shame on you! Otherwise, this should not happen, so report the reproducible steps to this error message as a bug report.N( sselfscheck_docstringsobjs_persistent_idsresIDsWorldbaseMismatchErrorsmdbsstoragescache_if_appropriate(sselfsresIDsobj((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys save_resourceÅs  cCs-t|iƒdjpt|iƒdjSdS(s:return True if there are resources pending to be committediN(slensselfs pendingDatas pendingSchema(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys has_pendingÑscCsÑt|iƒdjpt|iƒdjo|i}|i}n tdƒ‚x*|iƒD]\}}|i ||ƒq[Wx3|i ƒD]%\}}}|i|||iƒqˆW|iƒ||_||_dS(s/save any pending worldbase resources and schemais#there is no data queued for saving!N(slensselfs pendingDatas pendingSchemasds schemaDictsWorldbaseEmptyErrorsitemssresIDsobjs save_resourcesvaluess schemaPathsattrs schemaObjs saveSchemasmdbs clear_pendingslastDatas lastSchema(sselfsresIDsds schemaObjs schemaDicts schemaPathsobjsattr((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys save_pendingÕs,       cCs t|iƒt|iƒfSdS(s7return tuple of pending data dictionary, pending schemaN(slistsselfs pendingDatas pendingSchema(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys list_pendingäscCs`t|iƒdjot|iƒdjotdƒ‚n|iii|iƒ|i ƒdS(s@dump any pending data without saving, and restore state of cacheis#there is no data queued for saving!N( slensselfs pendingDatas pendingSchemasWorldbaseEmptyErrorsmdbs resourceCachesupdates rollbackDatas clear_pending(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysrollbackès ,cCsi|ii|=y|ii|=Wntj onXy|i|=Wntj onX|i|ƒdS(sBdelete the specified resource from resourceCache, saver and schemaN(sselfsmdbsstoragesresIDs resourceCachesKeyErrors pendingDatas delSchema(sselfsresID((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysdelete_resourceðs cCsž|ii}y|i|ƒ}Wntj o dSnX|iiii ƒxK|i ƒD]=\}}|i dƒo|i|ƒn|i||ƒqYWdS(s3delete schema bindings TO and FROM this resource IDNs-(sselfsmdbsstorages getschemasresIDsdsKeyErrors resourceCaches schemaCachesclearsitemssattrsobjs startswiths delschema(sselfsresIDsdsstoragesobjsattr((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys delSchemaýs   cCs5y|iƒtidIJWntj onXdS(Ns WARNING: saving worldbase pending data that you forgot to save... Remember in the future, you must issue the command worldbase.commit() to save your pending worldbase resources to your resource database(s), or alternatively worldbase.rollback() to dump those pending data without saving them. It is a very bad idea to rely on this automatic attempt to save your forgotten data, because it is possible that the Python interpreter may never call this function at exit (for details see the atexit module docs in the Python Library Reference).(sselfs save_pendingssyssstderrsWorldbaseEmptyError(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__del__ s   (s__name__s __module__s__doc__s__init__s clear_pendingscheck_docstrings add_resourcescache_if_appropriatesadd_resource_dictsqueue_schema_objs save_resources has_pendings save_pendings list_pendingsrollbacksdelete_resources delSchemas__del__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys ResourceSavers           sResourceServercBs2tZdZeeeeeed„Zd„ZRS(s2serves resources that can be transmitted on XMLRPCc !KsKti||| ||_|tjo |i}n|tjo#dk l }l }||g}n|tjo¯dkl}l}l}l}l}l}l}|||f|||f|||fg}y:dkl}dkl}l}|i|||fƒWq"tj oq"Xn|tjo |i}nh}x¶|i ƒD]¨\} }t#} x)|D]!}t&||ƒo t'} PqhqhW| oqOnt'} xC|D];\} }}t&|| ƒot&||ƒ o t#} Pq¨q¨W| o:y|i+|| |dt,ƒWqOt-j oqOXqOny ||_.WnAt/j o5|i0ƒ}|i2|ƒ} | i4|ƒ| }nXy|i5||i6| ƒWn2t7j o&d||i6f|_8| |_nX||_.|i+|| |ƒ||_.||| d d d | ƒnd S( s+construct server for the designated classes(s SQLTableBasesSQLGraphClustered(sSequenceFileDBsBlastDBsXMLRPCSequenceDBs BlastDBXMLRPCs AnnotationDBsAnnotationClientsAnnotationServer(sNLMSA(s NLMSAClients NLMSAServers badClassess http://%s:%dsreadOnlys downloadDBsindexssserverN(?sXMLRPCServerBases__init__sselfsnameskwargssmdbs resourceDictsNones resourceCachesexcludeClassesssqlgraphs SQLTableBasesSQLGraphClustereds serverClassessseqdbsSequenceFileDBsBlastDBsXMLRPCSequenceDBs BlastDBXMLRPCs AnnotationDBsAnnotationClientsAnnotationServers cnestedlistsNLMSAs xnestedlists NLMSAClients NLMSAServersappends ImportErrors clientHostshosts clientDictsitemssidsobjsFalsesskipThiss skipClasss isinstancesTrues baseKlasss clientKlasss serverKlasssclient_dict_setitemsnonPortableClassessWorldbaseNotPortableErrors __class__s TypeErrors __getstate__sstates__new__snewobjs __setstate__s saveHostInfosportsAttributeErrorsurlsregistrationDatas withIndexsMetabaseServers downloadDBsmyIndexsregister(!sselfsmdbsnames serverClassess clientHosts withIndexsexcludeClassess downloadDBs resourceDictskwargss baseKlasssmyIndexsnewobjsidsstates NLMSAClients clientKlasssBlastDBsSequenceFileDBs BlastDBXMLRPCsXMLRPCSequenceDBs skipClasssNLMSAs serverKlasss clientDictsobjsAnnotationServersAnnotationClients AnnotationDBsSQLGraphClustereds NLMSAServers SQLTableBasesskipThis((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__init__s„     1*                  cKsot||}t||ƒ|f|| targetDB with edge infos many:manycCsˆt|ƒ|_t|ƒ|_|tj ot|ƒ|_n t|_||_|tj o ||_n|tj o ||_ndS(N( sgetIDssourceDBsselfstargetDBsedgeDBsNones bindAttrss sourceNotNones targetNotNone(sselfssourceDBstargetDBsedgeDBs bindAttrss sourceNotNones targetNotNone((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__init__ýs      cCs§|i|ƒ}||_|i|ƒt|iƒ}|i |d|ƒt|i ƒ}|i |d|ƒ|i t j o&t|i ƒ}|i |d|ƒn|SdS(sVsave standard schema bindings to graphDB attributes sourceDB, targetDB, edgeDBssourceDBstargetDBsedgeDBN(sgraphDBsgetPathsattrsselfsnamesmdbssaveSchemaEdgesDirectRelationssourceDBsbs saveSchemastargetDBsedgeDBsNone(sselfsgraphDBsattrsmdbsb((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pyssave_graph_bindings s  c Cs|i|||ƒ}|itj oæ|i|i |i f}ht dt ƒt dt ƒg}y|i|ƒiƒ|defd?„ƒYZ:e:e:_;d@e:fdA„ƒYZ<dBefdC„ƒYZ=dDe:fdE„ƒYZ>e>e>_;dFefdG„ƒYZ?dHe?fdI„ƒYZ@dJefdK„ƒYZAdLeAfdM„ƒYZBdNeAfdO„ƒYZCdPeAfdQ„ƒYZDdRe?fdS„ƒYZEdT„ZFdS(UN(sStringIO(s CollectionsMappingsGraph(s open_shelvesstandard_invertsget_bound_subclasssSourceFileName(sXMLRPCServerBasesOneTimeDescriptorcBs tZdZd„Zd„ZRS(s)provides shadow attribute based on schemacKs||_||_dS(N(sattrNamesselfsattrsmdb(sselfsattrNamesmdbskwargs((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__init__s cCs_y |i}Wntj otdƒ‚nX|ii||iƒ}||i |i<|SdS(NsYattempt to access worldbase attr on non-worldbase object( sobjs_persistent_idsresIDsAttributeErrorsselfsmdbsget_schema_attrsattrstargets__dict__(sselfsobjsobjtypesresIDstarget((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__get__s (s__name__s __module__s__doc__s__init__s__get__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysOneTimeDescriptors  sItemDescriptorcBs8tZdZeeeeed„Zd„Zd„ZRS(s<provides shadow attribute for items in a db, based on schemac KsC||_||_||_||_||_||_||_dS(N( sattrNamesselfsattrsmdbsinvertsgetEdgessmapAttrs targetAttrs uniqueMapping( sselfsattrNamesmdbsinvertsgetEdgessmapAttrs targetAttrs uniqueMappingskwargs((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__init__+s      cCs~y|ii}Wntj otdƒ‚nX|ii||iƒ}|i o |}n|i o |i }n|SdS(s2return the mapping object for this schema relationsYattempt to access worldbase attr on non-worldbase objectN( sobjsdbs_persistent_idsresIDsAttributeErrorsselfsmdbsget_schema_attrsattrs targetDictsinvertsgetEdgessedges(sselfsobjsresIDs targetDict((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys get_target5s    cCsœ|i|ƒ}|itj o5t||iƒ}|tjotSn||}n ||}|i tj ot||i ƒ}n||i |i <|SdS(N( sselfs get_targetsobjs targetDictsmapAttrsNonesgetattrsobj_idsresults targetAttrs__dict__sattr(sselfsobjsobjtypes targetDictsobj_idsresult((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__get__Cs  (s__name__s __module__s__doc__sFalsesNones__init__s get_targets__get__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysItemDescriptor(s  sItemDescriptorRWcBstZd„ZRS(NcCsH|i otdƒ‚n|i|ƒ}|||<||i|it||iƒo |idjotd|iƒ‚nWntj onXyzt||iƒ o ||i j oRyd|i t |ƒSWqÖt j o&|i tj od|i SqÒqÖXnWntj onXx1|iD]&}t||ƒotdƒ‚q÷q÷WtSdS(sNconvert objects with _persistent_id to PYGR_ID strings during picklingNs__main__s}You cannot pickle a class from __main__! To make this class (%s) picklable, it must be loaded via a regular import statement.s PYGR_ID:%ssUthis object has a local data dependency and cannnot be transferred to a remote client(stypess isinstancesobjsTypeTypes __module__sWorldbaseNoModuleErrors__name__sAttributeErrorsselfsroots sourceIDssidsKeyErrors_persistent_idsNones badClassessklasssWorldbaseNotPortableError(sselfsobjsklassstypes((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys persistent_id·s* #$ cCs||_||_||_dS(sOset obj as root of pickling tree: genuinely pickle it (not just its id)N(sobjsselfsroots sourceIDss badClasses(sselfsobjs sourceIDss badClasses((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pyssetRootÖs  (s__name__s __module__s persistent_idssetRoot(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys PygrPicklerµs sMetabaseServercBs¿tZdZhdd<dd<dd<dd<dd<ddreturn list or dict of resources matching the specified stringsrspN(sselfsget_dbsdownloadsdbsdocss matchTypesrescompilespatternslsnames startswithssearchsappendsasDictsdsget( sselfspatternsasDicts matchTypesdownloadsnamesdbslsdocssd((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysdir.s  :cCs |iSdS(N(sselfs_pygr_data_version(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys get_version?s(s__name__s __module__s__doc__sxmlrpc_methodss_pygr_data_versionsTruesNones__init__sread_download_dbsgetNamesget_dbsFalses getResourcesregisterServers delResourcesdirs get_version(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysMetabaseServerÞs <    cGstdƒ‚dS(Ns€You cannot save data to a remote XMLRPC server. Give a user-editable resource database as the first entry in your WORLDBASEPATH!(sWorldbaseReadOnlyError(sselfsl((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysraise_illegal_saveCssXMLRPCMetabasecBs_tZdZd„Zed„Zd„Zd„Zdeed„Ze Z e Z e Z e Z RS(s3client interface to remote XMLRPC resource databasecKsPdkl}||dƒ|_||_||_|iiƒ|_t|_ dS(N(sget_connectionsindex( s coordinatorsget_connectionsurlsselfsserversmdbsgetNameszoneNamesFalses writeable(sselfsurlsmdbskwargssget_connection((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__init__Ms    cCs¿|o|ii||ƒ}n|ii|ƒ}|djotd|ƒ‚ny|d}|d=Wntj o t }nXx$|i ƒD]\}}||fSq‘Wtd|ƒ‚dS(s9get pickledata,docstring for this resource ID from serverssresource %s not founds__doc__s&unable to find %s from remote servicesN( sdownloadsselfsservers getResourcesidsdsWorldbaseNotFoundErrors docstringsKeyErrorsNonesitemsslocationsobjdata(sselfsidsdownloadsobjdatasds docstringslocation((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys find_resourceUs     cCs|ii||ƒSdS(s"forward registration to the serverN(sselfsserversregisterServers locationKeys serviceDict(sselfs locationKeys serviceDict((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysregisterServerfscCsR|iid|ƒ}|djo t‚nx|iƒD] }|Sq:Wt‚dS(sreturn dict of {attr: {args}}sSCHEMA.sN(sselfsservers getResourcesidsdsKeyErrorsvaluess schemaDict(sselfsids schemaDictsd((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys getschemajs   spcCs>|o|ii||||ƒSn|ii|||ƒSdS(s>return list or dict of resources matching the specified stringN(sdownloadsselfsserversdirspatternsasDicts matchType(sselfspatterns matchTypesasDictsdownload((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysdirss(s__name__s __module__s__doc__s__init__sFalses find_resourcesregisterServers getschemasdirsraise_illegal_saves __setitem__s __delitem__s setschemas delschema(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysXMLRPCMetabaseJs     s MySQLMetabasecBs‰tZdZdddfZeed„Zd„Zed„Zd„Z d„Z d„Z d „Z d „Z d „Zd eed „ZRS(s To create a new resource table, call: MySQLMetabase("DBNAME.TABLENAME", mdb, createLayer="LAYERNAME") where DBNAME is the name of your database, TABLENAME is the name of the table you want to create, and LAYERNAME is the layer name you want to assign itiic Ksxdkl}l} ||ƒ\|_|_|_||_t|_ h|_ |id}|t jo |}n|t j oÂtiiƒ}|iid|iƒ|iid|iƒ|iid|id||dfƒ|iid|id d |idfƒ||_|iid|ƒ|iid |ƒnôy#|iid |idfƒ} WnAtj o5tid dd|i|iddfIJ‚nX| djo|iiƒd|_n|iid|idfƒdjo?x(|iiƒD]} t |i | d) where is the layer name you want to assign it. %ss!i(is)select location from %s where pygr_id=%%ss0roots attrAliass source_ids target_idsedge_ids simpleKeyss unpack_edge( ssqlgraphsget_name_cursorsSQLGraphs tablenamesselfscursors serverInfosmdbsTrues writeables rootNamess schemaTables createLayersNonesnewZonesdatetimesnows creation_timesexecutes_pygr_data_versionszoneNamesns StandardErrorssyssstderrsfetchonesfetchallsrowssave_root_namessdicts SchemaEdgesgraph( sselfs tablenamesmdbs createLayersnewZoneskwargss schemaTables creation_timesget_name_cursorsSQLGraphsnsrow((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__init__ˆsH        + cCs4t|i|<|iid|id|dfƒdS(NsZinsert into %s (pygr_id,location,objdata) values (%%s,%%s,%%s)s0rootsa(sNonesselfs rootNamessnamescursorsexecutes tablename(sselfsname((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pyssave_root_nameÇs cCsZ|iid|i|fƒx*|iiƒD]\}}}||fSq-Wt dƒ‚dS(s:get construction rule from mysql, and attempt to constructsWselect location,objdata,docstring from %s where pygr_id=%%ssPunable to construct %s from remote servicesN( sselfscursorsexecutes tablenamesidsfetchallslocationsobjdatas docstringsWorldbaseNotFoundError(sselfsidsdownloadsobjdatas docstringslocation((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys find_resourceÍs c Cs˜t|ƒ}t||ƒ}|iid|i|d|i|i |d|d|d|fƒ|i dƒd}||i jo|i|ƒndS( s'add an object to this resource databases°replace into %s (pygr_id,location,docstring,user, creation_time,pickle_size,objdata) values (%%s, %%s,%%s,%%s,%%s,%%s,%%s)smysql:susers creation_times pickle_sizes.iN(sdumpssobjsss get_info_dictsdsselfscursorsexecutes tablenamesids__doc__ssplitsroots rootNamesssave_root_name(sselfsidsobjsdsssroot((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys __setitem__Ös 2cCs>|iid|i|fƒdjotd|ƒ‚ndS(s)delete this resource and its schema ruless delete from %s where pygr_id=%%sisno resource %s in this databaseN(sselfscursorsexecutes tablenamesidsWorldbaseNotFoundError(sselfsid((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys __delitem__äsc Csvd}xe|iƒD]W\}\}}||iid|i |||d|d|d|d|fƒ7}qW|SdS(s1register the specified services to mysql databaseisáreplace into %s (pygr_id,location, docstring,user,creation_time,pickle_size, objdata) values (%%s,%%s,%%s,%%s,%%s,%%s, %%s)s__doc__susers creation_times pickle_sizeN( sns serviceDictsitemssidsdspdatasselfscursorsexecutes tablenames locationKey(sselfs locationKeys serviceDictsdspdatasnsid((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysregisterServerës 3cCsV|idƒ o|d}nt|ƒ}|iid|i d|||fƒdS(s.save a schema binding for id.attr --> targetIDs-stargetIDs[replace into %s (pygr_id,location,objdata) values (%%s,%%s,%%s)sSCHEMA.N( sattrs startswithskwargsstargetIDsdumpsskwdatasselfscursorsexecutes tablenamesid(sselfsidsattrskwargsskwdatastargetID((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys setschemaøs  cCs(|iid|id||fƒdS(s!delete schema binding for id.attrs1delete from %s where pygr_id=%%s and location=%%ssSCHEMA.N(sselfscursorsexecutes tablenamesidsattr(sselfsidsattr((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys delschemascCseh}|iid|id|fƒx3|iiƒD]"\}}|i i |ƒ||return list or dict of resources matching the specified stringsrsxselect pygr_id,docstring,user,creation_time, pickle_size from %s where pygr_id regexp %%sspsvselect pygr_id,docstring,user,creation_time, pickle_size from %s where pygr_id like %%ss%s__doc__isuseris creation_timeis pickle_sizeiiN(s matchTypesselfscursorsexecutes tablenamespatternsasDictsdsfetchallslsdictsappends_[1]sname( sselfspatterns matchTypesasDictsdownloadsdsls_[1]sname((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysdirs$  !(s__name__s __module__s__doc__s_pygr_data_versionsNones__init__ssave_root_namesFalses find_resources __setitem__s __delitem__sregisterServers setschemas delschemas getschemasdir(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys MySQLMetabase€s ?     s SchemaEdgecBs tZdZd„Zd„ZRS(s4provides unpack_edge method for schema graph storagecCs ||_dS(N(sschemaDBsself(sselfsschemaDB((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__init__.scCs|ii|ƒdSdS(s/get the actual schema object describing this IDs -schemaEdgeN(sselfsschemaDBs getschemasedgeID(sselfsedgeID((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__call__1s(s__name__s __module__s__doc__s__init__s__call__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys SchemaEdge+s  sResourceDBGraphDescrcBstZdZd„ZRS(s0this property provides graph interface to schemac CsEtd|iddddtdtdt|ƒƒ}||_|SdS(Nsfilenames_schemasmodescwswriteNows simpleKeyss unpack_edge(sGraphsobjsdbpathsTrues SchemaEdgesgsgraph(sselfsobjsobjtypesg((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__get__9s (s__name__s __module__s__doc__s__get__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysResourceDBGraphDescr6s sShelveMetabasecBs’tZdZdddfZeƒZded„Zd„Ze d„Z d„Z d„Z d e e d „Z d „Zd „Zd „Zd„ZRS(siBerkeleyDB-based storage of worldbase resource databases, using the python shelve module. Users will not need to create instances of this class themselves, as worldbase automatically creates one for each appropriate entry in your WORLDBASEPATH; if the corresponding database file does not already exist, it is automatically created for you.iisrcKs#dk}tii|dƒ|_||_t|_t |_ yqt |i|ƒ|_ y|i|i dƒWntj onXy|i d|_ Wntj onXWno|ij o`t |idƒ|_ |i|i d targetIDs-stargetIDswsSCHEMA.srN( sattrs startswithskwargsstargetIDsselfsreopensdbsgetsresIDsd(sselfsresIDsattrskwargssdstargetID((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys setschemas  cCs|id|SdS(sreturn dict of {attr:{args}}sSCHEMA.N(sselfsdbsresID(sselfsresID((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys getschema§scCsG|idƒ|id|}||=||id|<|idƒdS(s$delete schema binding for resID.attrswsSCHEMA.srN(sselfsreopensdbsresIDsdsattr(sselfsresIDsattrsd((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys delschema«s  cCs|iiƒdS(s#close the shelve file when finishedN(sselfsdbsclose(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__del__³s(s__name__s __module__s__doc__s_pygr_data_versionsResourceDBGraphDescrsgraphsNones__init__sreopensFalses find_resources __setitem__s __delitem__sdirs setschemas getschemas delschemas__del__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysShelveMetabase@s        cKs@tƒ}t|ƒ}|i|||i|ƒ|iƒSdS(s.pickle to string, using persistent ID encodingN( sStringIOssrcs PygrPicklerspicklerssetRootsobjskwargssdumpsgetvalue(sobjskwargsssrcspickler((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysdumps¸s    cCsjtdtiiƒdt|ƒd|iƒ}yti d|dN( sselfscheck_docstringsobjsresIDs_persistent_ids pendingDatasmdbs resourceCaches rollbackDatasKeyErrorscache_if_appropriate(sselfsresIDsobj((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys add_resource¨s   cCs@y|iodSnWntj onX||ii|s½The _persistent_id attribute for %s has changed! If you changed it, shame on you! Otherwise, this should not happen, so report the reproducible steps to this error message as a bug report.N( sselfscheck_docstringsobjs_persistent_idsresIDsWorldbaseMismatchErrorsmdbsstoragescache_if_appropriate(sselfsresIDsobj((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys save_resourceÅs  cCs-t|iƒdjpt|iƒdjSdS(s:return True if there are resources pending to be committediN(slensselfs pendingDatas pendingSchema(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys has_pendingÑscCsÑt|iƒdjpt|iƒdjo|i}|i}n tdƒ‚x*|iƒD]\}}|i ||ƒq[Wx3|i ƒD]%\}}}|i|||iƒqˆW|iƒ||_||_dS(s/save any pending worldbase resources and schemais#there is no data queued for saving!N(slensselfs pendingDatas pendingSchemasds schemaDictsWorldbaseEmptyErrorsitemssresIDsobjs save_resourcesvaluess schemaPathsattrs schemaObjs saveSchemasmdbs clear_pendingslastDatas lastSchema(sselfsresIDsds schemaObjs schemaDicts schemaPathsobjsattr((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys save_pendingÕs,       cCs t|iƒt|iƒfSdS(s7return tuple of pending data dictionary, pending schemaN(slistsselfs pendingDatas pendingSchema(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys list_pendingäscCs`t|iƒdjot|iƒdjotdƒ‚n|iii|iƒ|i ƒdS(s@dump any pending data without saving, and restore state of cacheis#there is no data queued for saving!N( slensselfs pendingDatas pendingSchemasWorldbaseEmptyErrorsmdbs resourceCachesupdates rollbackDatas clear_pending(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysrollbackès ,cCsi|ii|=y|ii|=Wntj onXy|i|=Wntj onX|i|ƒdS(sBdelete the specified resource from resourceCache, saver and schemaN(sselfsmdbsstoragesresIDs resourceCachesKeyErrors pendingDatas delSchema(sselfsresID((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pysdelete_resourceðs cCsž|ii}y|i|ƒ}Wntj o dSnX|iiii ƒxK|i ƒD]=\}}|i dƒo|i|ƒn|i||ƒqYWdS(s3delete schema bindings TO and FROM this resource IDNs-(sselfsmdbsstorages getschemasresIDsdsKeyErrors resourceCaches schemaCachesclearsitemssattrsobjs startswiths delschema(sselfsresIDsdsstoragesobjsattr((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys delSchemaýs   cCs5y|iƒtidIJWntj onXdS(Ns WARNING: saving worldbase pending data that you forgot to save... Remember in the future, you must issue the command worldbase.commit() to save your pending worldbase resources to your resource database(s), or alternatively worldbase.rollback() to dump those pending data without saving them. It is a very bad idea to rely on this automatic attempt to save your forgotten data, because it is possible that the Python interpreter may never call this function at exit (for details see the atexit module docs in the Python Library Reference).(sselfs save_pendingssyssstderrsWorldbaseEmptyError(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__del__ s   (s__name__s __module__s__doc__s__init__s clear_pendingscheck_docstrings add_resourcescache_if_appropriatesadd_resource_dictsqueue_schema_objs save_resources has_pendings save_pendings list_pendingsrollbacksdelete_resources delSchemas__del__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys ResourceSavers           sResourceServercBs2tZdZeeeeeed„Zd„ZRS(s2serves resources that can be transmitted on XMLRPCc !KsKti||| ||_|tjo |i}n|tjo#dk l }l }||g}n|tjo¯dkl}l}l}l}l}l}l}|||f|||f|||fg}y:dkl}dkl}l}|i|||fƒWq"tj oq"Xn|tjo |i}nh}x¶|i ƒD]¨\} }t#} x)|D]!}t&||ƒo t'} PqhqhW| oqOnt'} xC|D];\} }}t&|| ƒot&||ƒ o t#} Pq¨q¨W| o:y|i+|| |dt,ƒWqOt-j oqOXqOny ||_.WnAt/j o5|i0ƒ}|i2|ƒ} | i4|ƒ| }nXy|i5||i6| ƒWn2t7j o&d||i6f|_8| |_nX||_.|i+|| |ƒ||_.||| d d d | ƒnd S( s+construct server for the designated classes(s SQLTableBasesSQLGraphClustered(sSequenceFileDBsBlastDBsXMLRPCSequenceDBs BlastDBXMLRPCs AnnotationDBsAnnotationClientsAnnotationServer(sNLMSA(s NLMSAClients NLMSAServers badClassess http://%s:%dsreadOnlys downloadDBsindexssserverN(?sXMLRPCServerBases__init__sselfsnameskwargssmdbs resourceDictsNones resourceCachesexcludeClassesssqlgraphs SQLTableBasesSQLGraphClustereds serverClassessseqdbsSequenceFileDBsBlastDBsXMLRPCSequenceDBs BlastDBXMLRPCs AnnotationDBsAnnotationClientsAnnotationServers cnestedlistsNLMSAs xnestedlists NLMSAClients NLMSAServersappends ImportErrors clientHostshosts clientDictsitemssidsobjsFalsesskipThiss skipClasss isinstancesTrues baseKlasss clientKlasss serverKlasssclient_dict_setitemsnonPortableClassessWorldbaseNotPortableErrors __class__s TypeErrors __getstate__sstates__new__snewobjs __setstate__s saveHostInfosportsAttributeErrorsurlsregistrationDatas withIndexsMetabaseServers downloadDBsmyIndexsregister(!sselfsmdbsnames serverClassess clientHosts withIndexsexcludeClassess downloadDBs resourceDictskwargss baseKlasssmyIndexsnewobjsidsstates NLMSAClients clientKlasssBlastDBsSequenceFileDBs BlastDBXMLRPCsXMLRPCSequenceDBs skipClasssNLMSAs serverKlasss clientDictsobjsAnnotationServersAnnotationClients AnnotationDBsSQLGraphClustereds NLMSAServers SQLTableBasesskipThis((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__init__s„     1*                  cKsot||}t||ƒ|f|| targetDB with edge infos many:manycCsˆt|ƒ|_t|ƒ|_|tj ot|ƒ|_n t|_||_|tj o ||_n|tj o ||_ndS(N( sgetIDssourceDBsselfstargetDBsedgeDBsNones bindAttrss sourceNotNones targetNotNone(sselfssourceDBstargetDBsedgeDBs bindAttrss sourceNotNones targetNotNone((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pys__init__ýs      cCs§|i|ƒ}||_|i|ƒt|iƒ}|i |d|ƒt|i ƒ}|i |d|ƒ|i t j o&t|i ƒ}|i |d|ƒn|SdS(sVsave standard schema bindings to graphDB attributes sourceDB, targetDB, edgeDBssourceDBstargetDBsedgeDBN(sgraphDBsgetPathsattrsselfsnamesmdbssaveSchemaEdgesDirectRelationssourceDBsbs saveSchemastargetDBsedgeDBsNone(sselfsgraphDBsattrsmdbsb((s3build/bdist.darwin-8.11.1-i386/egg/pygr/metabase.pyssave_graph_bindings s  c Cs|i|||ƒ}|itj oæ|i|i |i f}ht dt ƒt dt ƒg}y|i|ƒiƒ|d= len(self): return False ns = self[id] if ns.is_lpo: return True else: return False def nextID(self): return len(self) class EmptySliceError(KeyError): pass class EmptyAlignmentError(ValueError): pass class EmptySlice: 'Empty slice for use by NLMSASlice' def __init__(self, seq): self.seq = seq def edges(self, *args, **kwargs): return [] def items(self, **kwargs): return [] def iteritems(self, **kwargs): return iter([]) def keys(self, **kwargs): return [] def __iter__(self): return iter([]) def __getitem__(self, k): raise KeyError def __len__(self): return 0 def matchIntervals(self, seq=None): return [] def findSeqEnds(self, seq): raise KeyError('seq not aligned in this interval') def generateSeqEnds(self): return [] def groupByIntervals(self, **kwargs): return {} def groupBySequences(self, **kwargs): return [] def split(self, **kwargs): return [] def regions(self, **kwargs): return [] def __cmp__(self, other): return cmp(self.seq, other.seq) def rawIvals(self): return [] class _NLMSASeqDict_ValueWrapper(object): """A wrapper class for NLMSASeqDict to use to store 3-tuples in its cache. NLMSASeqDict has a most-recent-values cache containing (id, seqlist, offset) tuples for each referenced pathForward. However, tuples cannot be stored in a weakref dictionary. This class provides a tuple-like wrapper object that *can* be stored in a weakref dict. """ def __init__(self, nlmsaID, seqlist, offset): self.v = (nlmsaID, seqlist, offset) def __hash__(self): return hash(self.v) def __len__(self): return 3 def __getitem__(self, n): return self.v[n] _DEFAULT_SEQUENCE_CACHE_SIZE=100 class NLMSASeqDict(object, DictMixin): """Index sequences by pathForward, and use list to keep reverse mapping. Keeps a cache of n most recently accessed sequences, up to maxSequenceCacheSize (defaults to 100). """ def __init__(self, nlmsa, filename, mode, idDictClass=None, maxSequenceCacheSize=_DEFAULT_SEQUENCE_CACHE_SIZE): self._cache = classutil.RecentValueDictionary(maxSequenceCacheSize) self.seqlist = NLMSASeqList(self) self.nlmsa = nlmsa self.filename = filename if mode == 'memory': # just use python dictionary idDictClass = dict elif mode == 'w': # new database mode = 'n' if idDictClass is None: # use persistent id dictionary storage self.seqIDdict = classutil.open_shelve(filename + '.seqIDdict', mode) self.IDdict = classutil.open_shelve(filename + '.idDict', mode) else: # user supplied class for id dictionary storage self.seqIDdict = idDictClass() self.IDdict = idDictClass() def saveSeq(self, seq, nsID= -1, offset=0, nlmsaID=None): 'save mapping of seq to specified (nlmsaID,ns,offset)' if nsID < 0: # let the union figure it out self.nlmsa.currentUnion.__iadd__(seq) return # the union added it for us, no need to do anything if isinstance(seq, types.StringType): id = seq # treat this as fully qualified identifier else: # get the identfier from the seq / database id = self.getSeqID(seq) if nlmsaID is None: # allocate a new unique id nlmsaID = self.nlmsa.nextID() self.seqIDdict[id] = nlmsaID, nsID, offset self.IDdict[str(nlmsaID)] = id, nsID def getIDcoords(self, seq): 'return nlmsaID,start,stop for a given seq ival.' nlmsaID = self.getID(seq) return nlmsaID, seq.start, seq.stop # standard coords def getID(self, seq): 'return nlmsa_id for a given seq' return self[seq][0] def __getitem__(self, seq): 'return nlmsaID,NLMSASequence,offset for a given seq' if not hasattr(seq, 'annotationType'): # don't cache annotations try: # look in our sequence cache return self._cache[seq.pathForward] except AttributeError: raise KeyError('key must be a sequence interval!') except KeyError: pass seqID = self.getSeqID(seq) # use seq id to look up... try: nlmsaID, nsID, offset = self.seqIDdict[seqID] except KeyError: raise KeyError('seq not found in this alignment') v = nlmsaID, self.seqlist[nsID], offset if not hasattr(seq, 'annotationType'): # don't cache annotations self._cache[seq.pathForward] = _NLMSASeqDict_ValueWrapper(*v) return v def __iter__(self): 'iterate over sequences in this alignment' for seqID in self.seqIDdict: yield self.nlmsa.seqDict[seqID] def getSeqID(self, seq): 'return fully qualified sequence ID for this seq' return (~(self.nlmsa.seqDict))[seq] def __setitem__(self, k, ns): 'save mapping of seq to the specified NLMSASequence' self.seqlist.append(ns) if isinstance(k, types.StringType): # Allow build with a string object. self._cache[k] = (ns.id, ns, 0) elif k is not None: self._cache[k.pathForward] = (ns.id, ns, 0) def __iadd__(self, ns): 'add coord system ns to the alignment' self[None] = ns return self # iadd must return self!!! def close(self): 'finalize and close shelve indexes' try: do_close = self.seqIDdict.close except AttributeError: return # our storage doesn't support close(), so nothing to do do_close() # close both shelve objects self.IDdict.close() def reopenReadOnly(self, mode='r'): 'save existing data and reopen in read-only mode' self.close() self.seqIDdict = classutil.open_shelve(self.filename + '.seqIDdict', mode) self.IDdict = classutil.open_shelve(self.filename + '.idDict', mode) def getUnionSlice(self, seq): 'get union coords for this seq interval, adding seq to index if needed' try: id, ns, offset = self[seq] # look up in index except KeyError: self.saveSeq(seq) # add this new sequence to our current union id, ns, offset = self[seq] # look up in index # Make sure to handle annotations right i, start, stop = self.getIDcoords(seq) if start < 0: # reverse orientation return ns, slice(start - offset, stop - offset) # use union coords else: # forward orientation return ns, slice(start + offset, stop + offset) # use union coords def clear_cache(self): 'Clear the cache of saved sequences.' self._cache.clear() def splitLPOintervals(lpoList, ival, targetIval=None): 'return list of intervals split to different LPOs' if ival.start < 0: # reverse orientation: force into forward ori start= -(ival.stop) stop= -(ival.start) else: # forward orientation start=ival.start stop=ival.stop l = [] i = len(lpoList) - 1 while i >= 0: offset = lpoList[i].offset if offset < stop: # appears to be in this if offset <= start: # fits completely in this LPO if ival.start < 0: # reverse ori myslice = slice(offset - stop, offset - start) else: # forward ori myslice = slice(start - offset, stop - offset) if targetIval is not None: l.append((lpoList[i], myslice, targetIval)) else: l.append((lpoList[i], myslice)) return l # done else: # continues past start of this LPO if ival.start < 0: # reverse ori myslice = slice(offset - stop, 0) else: # forward ori myslice = slice(0, stop - offset) if targetIval is not None: l.append((lpoList[i], myslice, targetIval[offset - start:])) # Remove the already-appended part targetIval = targetIval[:offset - start] else: l.append((lpoList[i], myslice)) stop = offset i -= 1 # continue to previous LPO raise ValueError('empty lpoList or offset not starting at 0? Debug!') class BuildMSASlice(object): def __init__(self, ns, start, stop, id, offset, is_lpo=0, seq=None): self.ns = ns self.start = start self.stop = stop self.id = id self.offset = offset self.is_lpo = is_lpo self.seq = seq def offsetSlice(self, ival): if ival.orientation < 0: return slice(ival.start - self.offset, ival.stop - self.offset) else: return slice(ival.start + self.offset, ival.stop + self.offset) def __iadd__(self, targetIval): 'save an alignment edge between self and targetIval' if self.is_lpo: # assign to correct LPO(s) if isinstance(targetIval, types.SliceType): raise ValueError('you attempted to map LPO --> LPO?!?') self.ns.nlmsaLetters.__iadd__(targetIval) splitList = splitLPOintervals(self.ns.nlmsaLetters.lpoList, slice(self.start, self.stop), targetIval) for ns, src, target in splitList: # Save intervals to respective LPOs; LPO --> target ns[src] = self.ns.nlmsaLetters.seqs.getIDcoords(target) if self.ns.nlmsaLetters.is_bidirectional: nsu, myslice = self.ns.nlmsaLetters.seqs \ .getUnionSlice(target) # Save target --> LPO nsu[myslice] = (ns.id, src.start, src.stop) else: if isinstance(targetIval, types.SliceType): # target is LPO splitList = splitLPOintervals(self.ns.nlmsaLetters.lpoList, targetIval, self.seq) for ns, target, src in splitList: self.ns[self.offsetSlice(src)] = (ns.id, target.start, target.stop) if self.ns.nlmsaLetters.is_bidirectional: # Save LPO --> SRC ns[target]=(self.id, src.start, src.stop) else: # both src and target are normal seqs. use_virtual_lpo!! self.ns.nlmsaLetters.__iadd__(targetIval) self.ns.nlmsaLetters.init_pairwise_mode() # Our virtual LPO ns_lpo = self.ns.nlmsaLetters.seqlist[self.ns.id - 1] # Save src --> target ns_lpo[self.offsetSlice(self.seq)] = self.ns.nlmsaLetters \ .seqs.getIDcoords(targetIval) if self.ns.nlmsaLetters.is_bidirectional: nsu, myslice = self.ns.nlmsaLetters.seqs \ .getUnionSlice(targetIval) # Our virtual LPO ns_lpo = self.ns.nlmsaLetters.seqlist[nsu.id - 1] # Save target --> src ns_lpo[myslice] = (self.id, self.start, self.stop) return self # iadd must always return self def __setitem__(self, k, v): if v is not None: raise ValueError('NLMSA cannot save edge-info. Only \ nlmsa[s1][s2]=None allowed') self += k def read_seq_dict(pathstem, trypath=None): 'read seqDict for NLMSA' if os.access(pathstem + '.seqDictP', os.R_OK): from pygr import worldbase ifile = file(pathstem+'.seqDictP', 'rb') # pickle is binary file! try: # load from worldbase-aware pickle file seqDict = worldbase._mdb.loads(ifile.read()) finally: ifile.close() elif os.access(pathstem + '.seqDict', os.R_OK): # old-style union header import seqdb seqDict = seqdb.PrefixUnionDict(filename=pathstem+'.seqDict', trypath=trypath) else: raise ValueError('''Unable to find seqDict file %s.seqDictP or %s.seqDict and no seqDict provided as an argument''' % (pathstem, pathstem)) return seqDict def save_seq_dict(pathstem, seqDict): 'save seqDict to a worldbase-aware pickle file' from metabase import dumps ofile = file(pathstem + '.seqDictP', 'wb') # pickle is binary file! try: ofile.write(dumps(seqDict)) finally: ofile.close() def prune_self_mappings(src_prefix, dest_prefix, is_bidirectional): '''return is_bidirectional flag according to whether source and target are the same genome. This handles axtNet reading, in which mappings between genomes are given in only one direction, whereas mappings between the same genome are given in both directions.''' if src_prefix == dest_prefix: return 0 else: return 1 def nlmsa_textdump_unpickler(filepath, kwargs): from cnestedlist import textfile_to_binaries, NLMSA logger.info('Saving NLMSA indexes from textdump: %s' % filepath) try: buildpath = os.environ['WORLDBASEBUILDDIR'] except KeyError: buildpath = classutil.get_env_or_cwd('PYGRDATABUILDDIR') path = textfile_to_binaries(filepath, buildpath=buildpath, **kwargs) o = NLMSA(path) # now open in read mode from the saved index fileset o._saveLocalBuild = True # mark this for saving in local metabase return o nlmsa_textdump_unpickler.__safe_for_unpickling__ = 1 class NLMSABuilder(object): 'when unpickled triggers construction of NLMSA from textdump' _worldbase_no_cache = True # force worldbase to reload this fresh def __init__(self, filepath, **kwargs): self.filepath = filepath self.kwargs = kwargs def __reduce__(self): return (nlmsa_textdump_unpickler, (self.filepath, self.kwargs)) class SeqCacheOwner(object): 'weak referenceable object: workaround for pyrex extension classes' def __init__(self): self.cachedSeqs = {} def cache_reference(self, seq): 'keep a ref to seqs cached on our behalf' self.cachedSeqs[seq.id] = seq def generate_nlmsa_edges(self, *args, **kwargs): """iterate over all edges for all sequences in the alignment. Very slow for a big alignment!""" for seq in self.seqs: myslice = self[seq] for results in myslice.edges(*args, **kwargs): yield results def get_interval(seq, start, end, ori): "trivial function to get the interval seq[start:end] with requested ori" if ori < 0: return seq.absolute_slice(-end, -start) else: return seq.absolute_slice(start, end) _default_ivals_attrs = dict(idDest='id', startDest='start', stopDest='stop', oriDest='ori') class CoordsToIntervals(object): '''Transforms coord objects to (ival1,ival2) aligned interval pairs. The intervals can come in in two forms: First, as a list, with [src, dest1, dest2, dest3] information; or second, as an object, with attributes specifying src/dest info. ''' def __init__(self, srcDB, destDB=None, alignedIvalsAttrs=_default_ivals_attrs): self.srcDB = srcDB if destDB: self.destDB = destDB else: self.destDB = srcDB self.getAttr = classutil.make_attribute_interface(alignedIvalsAttrs) def __call__(self, alignedCoords): '''Read interval info from alignedCoords and generate actual intervals. Information read is id, start, stop, and orientation (ori). ''' for c in alignedCoords: if isinstance(c, (CoordsGroupStart, CoordsGroupEnd)): yield c # just pass grouping-info through continue try: srcData = c[0] # align everything to the first interval destSet = c[1:] except TypeError: srcData = c # extract both src and dest from ivals object destSet = [c] id = self.getAttr(srcData, 'id') start = self.getAttr(srcData, 'start') stop = self.getAttr(srcData, 'stop') ori = self.getAttr(srcData, 'ori', 1) # default orientation: + srcIval = get_interval(self.srcDB[id], start, stop, ori) # get the dest interval(s) and yield w/src. for destData in destSet: idDest = self.getAttr(destData, 'idDest') startDest = self.getAttr(destData, 'startDest') stopDest = self.getAttr(destData, 'stopDest') oriDest = self.getAttr(destData, 'oriDest', 1) # default ori: + destIval = get_interval(self.destDB[idDest], startDest, stopDest, oriDest) yield srcIval, destIval # generate aligned intervals def add_aligned_intervals(al, alignedIvals): '''Save a set of aligned intervals to alignment. ''' # for each pair of aligned intervals, save them into the alignment. for t in alignedIvals: # is 't' a marker object for start or end of a group of coordinates? if isinstance(t, (CoordsGroupStart, CoordsGroupEnd)): continue # ignore grouping markers (src, dest) = t al += src al[src][dest] = None # save their alignment class CoordsGroupStart(object): '''Marker object indicating start of a coordinates group. See BlastHitParser for an example.''' pass class CoordsGroupEnd(object): '''Marker object indicating end of a group of coordinates. See BlastHitParser for an example.''' pass PK7“;r¹mFlFlpygr/nlmsa_utils.pyc;ò |†Kc @s»dkZdkZdkZdkZdklZdefd„ƒYZdefd„ƒYZ de fd„ƒYZ dfd „ƒYZ d e fd „ƒYZd Zd e efd„ƒYZed„Zde fd„ƒYZed„Zd„Zd„Zd„Zde_de fd„ƒYZde fd„ƒYZd„Zd„Zedddd d!d"d#d$ƒZd%e fd&„ƒYZd'„Z d(e fd)„ƒYZ!d*e fd+„ƒYZ"dS(,N(s DictMixins NLMSASeqListcBs>tZd„Zd„Zd„Zd„Zd„Zd„ZRS(NcCsti|ƒ||_dS(N(slists__init__sselfs nlmsaSeqDict(sselfs nlmsaSeqDict((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__init__ s cCsZyti||ƒSWn?tj o3|iit|ƒ\}}ti||ƒSnXdS(s)return NLMSASequence for a given nlmsa_idN( slists __getitem__sselfsnlmsaIDs IndexErrors nlmsaSeqDictsIDdictsstrsseqIDsnsID(sselfsnlmsaIDsnsIDsseqID((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys __getitem__s cCs1|iit|ƒ\}}|iii|SdS(sreturn seq for a given nlmsa_idN( sselfs nlmsaSeqDictsIDdictsstrsnlmsaIDsseqIDsnsIDsnlmsasseqDict(sselfsnlmsaIDsseqIDsnsID((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysgetSeqscCs$|iit|ƒ\}}|SdS(s!return seqID for a given nlmsa_idN(sselfs nlmsaSeqDictsIDdictsstrsnlmsaIDsseqIDsnsID(sselfsnlmsaIDsseqIDsnsID((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysgetSeqIDscCs?|t|ƒjotSn||}|iotSntSdS(N(sidslensselfsFalsesnssis_lposTrue(sselfsidsns((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysis_lpo s   cCst|ƒSdS(N(slensself(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysnextID)s(s__name__s __module__s__init__s __getitem__sgetSeqsgetSeqIDsis_lposnextID(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys NLMSASeqLists      sEmptySliceErrorcBstZRS(N(s__name__s __module__(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysEmptySliceError-ssEmptyAlignmentErrorcBstZRS(N(s__name__s __module__(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysEmptyAlignmentError1ss EmptySlicecBsªtZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z e d „Z d „Z d „Zd „Zd „Zd„Zd„Zd„Zd„ZRS(s!Empty slice for use by NLMSASlicecCs ||_dS(N(sseqsself(sselfsseq((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__init__8scOsgSdS(N((sselfsargsskwargs((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysedges;scKsgSdS(N((sselfskwargs((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysitems>scKstgƒSdS(N(siter(sselfskwargs((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys iteritemsAscKsgSdS(N((sselfskwargs((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pyskeysDscCstgƒSdS(N(siter(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__iter__GscCs t‚dS(N(sKeyError(sselfsk((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys __getitem__JscCsdSdS(Ni((sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__len__MscCsgSdS(N((sselfsseq((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysmatchIntervalsPscCstdƒ‚dS(Ns seq not aligned in this interval(sKeyError(sselfsseq((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys findSeqEndsSscCsgSdS(N((sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysgenerateSeqEndsVscKshSdS(N((sselfskwargs((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysgroupByIntervalsYscKsgSdS(N((sselfskwargs((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysgroupBySequences\scKsgSdS(N((sselfskwargs((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pyssplit_scKsgSdS(N((sselfskwargs((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysregionsbscCst|i|iƒSdS(N(scmpsselfsseqsother(sselfsother((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__cmp__escCsgSdS(N((sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysrawIvalshs(s__name__s __module__s__doc__s__init__sedgessitemss iteritemsskeyss__iter__s __getitem__s__len__sNonesmatchIntervalss findSeqEndssgenerateSeqEndssgroupByIntervalssgroupBySequencesssplitsregionss__cmp__srawIvals(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys EmptySlice5s$                 s_NLMSASeqDict_ValueWrappercBs2tZdZd„Zd„Zd„Zd„ZRS(skA wrapper class for NLMSASeqDict to use to store 3-tuples in its cache. NLMSASeqDict has a most-recent-values cache containing (id, seqlist, offset) tuples for each referenced pathForward. However, tuples cannot be stored in a weakref dictionary. This class provides a tuple-like wrapper object that *can* be stored in a weakref dict. cCs|||f|_dS(N(snlmsaIDsseqlistsoffsetsselfsv(sselfsnlmsaIDsseqlistsoffset((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__init__uscCst|iƒSdS(N(shashsselfsv(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__hash__xscCsdSdS(Ni((sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__len__{scCs|i|SdS(N(sselfsvsn(sselfsn((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys __getitem__~s(s__name__s __module__s__doc__s__init__s__hash__s__len__s __getitem__(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys_NLMSASeqDict_ValueWrapperls    ids NLMSASeqDictcBs•tZdZeed„Zdded„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd d„Zd„Zd„ZRS(s»Index sequences by pathForward, and use list to keep reverse mapping. Keeps a cache of n most recently accessed sequences, up to maxSequenceCacheSize (defaults to 100). cCsÀti|ƒ|_t|ƒ|_||_||_|djo t }n|djo d}n|t jo6ti |d|ƒ|_ti |d|ƒ|_n|ƒ|_|ƒ|_dS(Nsmemoryswsns .seqIDdicts.idDict(s classutilsRecentValueDictionarysmaxSequenceCacheSizesselfs_caches NLMSASeqListsseqlistsnlmsasfilenamesmodesdicts idDictClasssNones open_shelves seqIDdictsIDdict(sselfsnlmsasfilenamesmodes idDictClasssmaxSequenceCacheSize((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__init__Šs          iÿÿÿÿicCs§|djo|iii|ƒdSnt|tiƒo |}n|i |ƒ}|t jo|ii ƒ}n|||f|i|<||f|it|ƒ|iiii|ƒ\}}|i|i |if|| LPO?!?iN(sselfsis_lpos isinstances targetIvalstypess SliceTypes ValueErrorsnss nlmsaLetterss__iadd__ssplitLPOintervalsslpoListsslicesstartsstops splitListssrcstargetsseqss getIDcoordssis_bidirectionals getUnionSlicesnsusmyslicesidsseqs offsetSlicesinit_pairwise_modesseqlistsns_lpo( sselfs targetIvalssrcsnsustargetsns_lposnss splitListsmyslice((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__iadd__9s>  (((( cCs+|tj otdƒ‚n||7}dS(NsYNLMSA cannot save edge-info. Only nlmsa[s1][s2]=None allowed(svsNones ValueErrorsselfsk(sselfsksv((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys __setitem__es (s__name__s __module__sNones__init__s offsetSlices__iadd__s __setitem__(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys BuildMSASlice(s  ,cCsÉti|dtiƒoNdkl}t|ddƒ}z|ii |i ƒƒ}Wd|i ƒXnZti|dtiƒo)dk }|id|dd|ƒ}ntd||fƒ‚|SdS( sread seqDict for NLMSAs .seqDictP(s worldbasesrbNs.seqDictsfilenamestrypaths\Unable to find seqDict file %s.seqDictP or %s.seqDict and no seqDict provided as an argument(sossaccessspathstemsR_OKspygrs worldbasesfilesifiles_mdbsloadssreadsseqDictsclosesseqdbsPrefixUnionDictstrypaths ValueError(spathstemstrypathsseqdbs worldbasesifilesseqDict((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys read_seq_dictls  cCsIdkl}t|ddƒ}z|i||ƒƒWd|iƒXdS(s-save seqDict to a worldbase-aware pickle file(sdumpss .seqDictPswbN(smetabasesdumpssfilespathstemsofileswritesseqDictsclose(spathstemsseqDictsdumpssofile((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys save_seq_dict€s cCs||jodSndSdS(s return is_bidirectional flag according to whether source and target are the same genome. This handles axtNet reading, in which mappings between genomes are given in only one direction, whereas mappings between the same genome are given in both directions.iiN(s src_prefixs dest_prefix(s src_prefixs dest_prefixsis_bidirectional((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysprune_self_mappingsŠs cCsŒdkl}l}tid|ƒytid}Wn"t j ot i dƒ}nX||d||}||ƒ}t|_|SdS(N(stextfile_to_binariessNLMSAs&Saving NLMSA indexes from textdump: %ssWORLDBASEBUILDDIRsPYGRDATABUILDDIRs buildpath(s cnestedliststextfile_to_binariessNLMSAsloggersinfosfilepathsossenvirons buildpathsKeyErrors classutilsget_env_or_cwdskwargsspathsosTrues_saveLocalBuild(sfilepathskwargss buildpathsNLMSAsospathstextfile_to_binaries((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysnlmsa_textdump_unpickler•s  is NLMSABuildercBs&tZdZeZd„Zd„ZRS(s;when unpickled triggers construction of NLMSA from textdumpcKs||_||_dS(N(sfilepathsselfskwargs(sselfsfilepathskwargs((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__init__©s cCst|i|iffSdS(N(snlmsa_textdump_unpicklersselfsfilepathskwargs(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys __reduce__­s(s__name__s __module__s__doc__sTrues_worldbase_no_caches__init__s __reduce__(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys NLMSABuilder¥s  s SeqCacheOwnercBs tZdZd„Zd„ZRS(sAweak referenceable object: workaround for pyrex extension classescCs h|_dS(N(sselfs cachedSeqs(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__init__´scCs||i|itZd„Zd„Zd„Zd„Zd„Zd„ZRS(NcCsti|ƒ||_dS(N(slists__init__sselfs nlmsaSeqDict(sselfs nlmsaSeqDict((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__init__ s cCsZyti||ƒSWn?tj o3|iit|ƒ\}}ti||ƒSnXdS(s)return NLMSASequence for a given nlmsa_idN( slists __getitem__sselfsnlmsaIDs IndexErrors nlmsaSeqDictsIDdictsstrsseqIDsnsID(sselfsnlmsaIDsnsIDsseqID((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys __getitem__s cCs1|iit|ƒ\}}|iii|SdS(sreturn seq for a given nlmsa_idN( sselfs nlmsaSeqDictsIDdictsstrsnlmsaIDsseqIDsnsIDsnlmsasseqDict(sselfsnlmsaIDsseqIDsnsID((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysgetSeqscCs$|iit|ƒ\}}|SdS(s!return seqID for a given nlmsa_idN(sselfs nlmsaSeqDictsIDdictsstrsnlmsaIDsseqIDsnsID(sselfsnlmsaIDsseqIDsnsID((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysgetSeqIDscCs?|t|ƒjotSn||}|iotSntSdS(N(sidslensselfsFalsesnssis_lposTrue(sselfsidsns((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysis_lpo s   cCst|ƒSdS(N(slensself(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysnextID)s(s__name__s __module__s__init__s __getitem__sgetSeqsgetSeqIDsis_lposnextID(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys NLMSASeqLists      sEmptySliceErrorcBstZRS(N(s__name__s __module__(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysEmptySliceError-ssEmptyAlignmentErrorcBstZRS(N(s__name__s __module__(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysEmptyAlignmentError1ss EmptySlicecBsªtZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z e d „Z d „Z d „Zd „Zd „Zd„Zd„Zd„Zd„ZRS(s!Empty slice for use by NLMSASlicecCs ||_dS(N(sseqsself(sselfsseq((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__init__8scOsgSdS(N((sselfsargsskwargs((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysedges;scKsgSdS(N((sselfskwargs((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysitems>scKstgƒSdS(N(siter(sselfskwargs((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys iteritemsAscKsgSdS(N((sselfskwargs((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pyskeysDscCstgƒSdS(N(siter(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__iter__GscCs t‚dS(N(sKeyError(sselfsk((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys __getitem__JscCsdSdS(Ni((sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__len__MscCsgSdS(N((sselfsseq((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysmatchIntervalsPscCstdƒ‚dS(Ns seq not aligned in this interval(sKeyError(sselfsseq((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys findSeqEndsSscCsgSdS(N((sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysgenerateSeqEndsVscKshSdS(N((sselfskwargs((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysgroupByIntervalsYscKsgSdS(N((sselfskwargs((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysgroupBySequences\scKsgSdS(N((sselfskwargs((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pyssplit_scKsgSdS(N((sselfskwargs((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysregionsbscCst|i|iƒSdS(N(scmpsselfsseqsother(sselfsother((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__cmp__escCsgSdS(N((sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysrawIvalshs(s__name__s __module__s__doc__s__init__sedgessitemss iteritemsskeyss__iter__s __getitem__s__len__sNonesmatchIntervalss findSeqEndssgenerateSeqEndssgroupByIntervalssgroupBySequencesssplitsregionss__cmp__srawIvals(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys EmptySlice5s$                 s_NLMSASeqDict_ValueWrappercBs2tZdZd„Zd„Zd„Zd„ZRS(skA wrapper class for NLMSASeqDict to use to store 3-tuples in its cache. NLMSASeqDict has a most-recent-values cache containing (id, seqlist, offset) tuples for each referenced pathForward. However, tuples cannot be stored in a weakref dictionary. This class provides a tuple-like wrapper object that *can* be stored in a weakref dict. cCs|||f|_dS(N(snlmsaIDsseqlistsoffsetsselfsv(sselfsnlmsaIDsseqlistsoffset((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__init__uscCst|iƒSdS(N(shashsselfsv(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__hash__xscCsdSdS(Ni((sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__len__{scCs|i|SdS(N(sselfsvsn(sselfsn((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys __getitem__~s(s__name__s __module__s__doc__s__init__s__hash__s__len__s __getitem__(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys_NLMSASeqDict_ValueWrapperls    ids NLMSASeqDictcBs•tZdZeed„Zdded„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd d„Zd„Zd„ZRS(s»Index sequences by pathForward, and use list to keep reverse mapping. Keeps a cache of n most recently accessed sequences, up to maxSequenceCacheSize (defaults to 100). cCsÀti|ƒ|_t|ƒ|_||_||_|djo t }n|djo d}n|t jo6ti |d|ƒ|_ti |d|ƒ|_n|ƒ|_|ƒ|_dS(Nsmemoryswsns .seqIDdicts.idDict(s classutilsRecentValueDictionarysmaxSequenceCacheSizesselfs_caches NLMSASeqListsseqlistsnlmsasfilenamesmodesdicts idDictClasssNones open_shelves seqIDdictsIDdict(sselfsnlmsasfilenamesmodes idDictClasssmaxSequenceCacheSize((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__init__Šs          iÿÿÿÿicCs§|djo|iii|ƒdSnt|tiƒo |}n|i |ƒ}|t jo|ii ƒ}n|||f|i|<||f|it|ƒ|iiii|ƒ\}}|i|i |if|| LPO?!?iN(sselfsis_lpos isinstances targetIvalstypess SliceTypes ValueErrorsnss nlmsaLetterss__iadd__ssplitLPOintervalsslpoListsslicesstartsstops splitListssrcstargetsseqss getIDcoordssis_bidirectionals getUnionSlicesnsusmyslicesidsseqs offsetSlicesinit_pairwise_modesseqlistsns_lpo( sselfs targetIvalssrcsnsustargetsns_lposnss splitListsmyslice((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__iadd__9s>  (((( cCs+|tj otdƒ‚n||7}dS(NsYNLMSA cannot save edge-info. Only nlmsa[s1][s2]=None allowed(svsNones ValueErrorsselfsk(sselfsksv((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys __setitem__es (s__name__s __module__sNones__init__s offsetSlices__iadd__s __setitem__(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys BuildMSASlice(s  ,cCsÉti|dtiƒoNdkl}t|ddƒ}z|ii |i ƒƒ}Wd|i ƒXnZti|dtiƒo)dk }|id|dd|ƒ}ntd||fƒ‚|SdS( sread seqDict for NLMSAs .seqDictP(s worldbasesrbNs.seqDictsfilenamestrypaths\Unable to find seqDict file %s.seqDictP or %s.seqDict and no seqDict provided as an argument(sossaccessspathstemsR_OKspygrs worldbasesfilesifiles_mdbsloadssreadsseqDictsclosesseqdbsPrefixUnionDictstrypaths ValueError(spathstemstrypathsseqdbs worldbasesifilesseqDict((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys read_seq_dictls  cCsIdkl}t|ddƒ}z|i||ƒƒWd|iƒXdS(s-save seqDict to a worldbase-aware pickle file(sdumpss .seqDictPswbN(smetabasesdumpssfilespathstemsofileswritesseqDictsclose(spathstemsseqDictsdumpssofile((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys save_seq_dict€s cCs||jodSndSdS(s return is_bidirectional flag according to whether source and target are the same genome. This handles axtNet reading, in which mappings between genomes are given in only one direction, whereas mappings between the same genome are given in both directions.iiN(s src_prefixs dest_prefix(s src_prefixs dest_prefixsis_bidirectional((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysprune_self_mappingsŠs cCsŒdkl}l}tid|ƒytid}Wn"t j ot i dƒ}nX||d||}||ƒ}t|_|SdS(N(stextfile_to_binariessNLMSAs&Saving NLMSA indexes from textdump: %ssWORLDBASEBUILDDIRsPYGRDATABUILDDIRs buildpath(s cnestedliststextfile_to_binariessNLMSAsloggersinfosfilepathsossenvirons buildpathsKeyErrors classutilsget_env_or_cwdskwargsspathsosTrues_saveLocalBuild(sfilepathskwargss buildpathsNLMSAsospathstextfile_to_binaries((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pysnlmsa_textdump_unpickler•s  is NLMSABuildercBs&tZdZeZd„Zd„ZRS(s;when unpickled triggers construction of NLMSA from textdumpcKs||_||_dS(N(sfilepathsselfskwargs(sselfsfilepathskwargs((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__init__©s cCst|i|iffSdS(N(snlmsa_textdump_unpicklersselfsfilepathskwargs(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys __reduce__­s(s__name__s __module__s__doc__sTrues_worldbase_no_caches__init__s __reduce__(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys NLMSABuilder¥s  s SeqCacheOwnercBs tZdZd„Zd„ZRS(sAweak referenceable object: workaround for pyrex extension classescCs h|_dS(N(sselfs cachedSeqs(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/nlmsa_utils.pys__init__´scCs||i|iend, and letterunit (1 or 3) depending on the ratio of end-start difference vs the actual non-gap letter count. Returns tuple (ori,letterunit)""" if end > start: ori = 1 else: ori = -1 ngap = 0 for l in seq: if l == gapchar: ngap += 1 seqlen = len(seq) - ngap if ori * float(end - start) / seqlen > 2.0: letterunit = 3 else: letterunit = 1 return ori, letterunit class BlastIval(object): def __repr__(self): return '' class BlastHitParser(object): """reads alignment info from blastall standard output. Method parse_file(fo) reads file object fo, and generates tuples suitable for BlastIval.""" gapchar = '-' def __init__(self): self.hit_id = 0 self.nline = 0 self.reset() def reset(self): "flush any alignment info, so we can start reading new alignment" self.query_seq = "" self.subject_seq = "" self.hit_id += 1 def save_query(self, line): self.query_id = line.split()[1] def save_subject(self, line): self.subject_id = line.split()[0][1:] def save_score(self, line): "save a Score: line" self.blast_score = float(line.split()[2]) s = line.split()[7] if s[0] == 'e': s = '1' + s try: self.e_value = -math.log(float(s)) / math.log(10.0) except (ValueError, OverflowError): self.e_value = 300. def save_identity(self, line): "save Identities line" s = line.split()[3][1:] self.identity_percent = int(s[:s.find('%')]) def save_query_line(self, line): "save a Query: line" c=line.split() self.query_end=int(c[3]) if not self.query_seq: self.query_start=int(c[1]) # Handle forward orientation. if self.query_start < self.query_end: self.query_start -= 1 self.query_seq+=c[2] self.seq_start_char=line.find(c[2], 5) # IN CASE BLAST SCREWS UP Sbjct: def save_subject_line(self, line): "save a Sbjct: line, attempt to handle various BLAST insanities" c=line.split() if len(c)<4: # OOPS, BLAST FORGOT TO PUT SPACE BEFORE 1ST NUMBER # THIS HAPPENS IN TBLASTN... WHEN THE SUBJECT SEQUENCE # COVERS RANGE 1-1200, THE FOUR DIGIT NUMBER WILL RUN INTO # THE SEQUENCE, WITH NO SPACE!! c = ['Sbjct:', line[6:self.seq_start_char]] \ + line[self.seq_start_char:].split() # FIX BLAST SCREW-UP self.subject_end=int(c[3]) if not self.subject_seq: self.subject_start = int(c[1]) # Handle forward orientation. if self.subject_start < self.subject_end: self.subject_start -= 1 self.subject_seq += c[2] lendiff = len(self.query_seq) - len(self.subject_seq) if lendiff > 0: # HANDLE TBLASTN SCREWINESS: Sbjct SEQ OFTEN TOO SHORT! # THIS APPEARS TO BE ASSOCIATED ESPECIALLY WITH STOP CODONS * self.subject_seq += lendiff * 'A' # EXTEND TO SAME LENGTH AS QUERY elif lendiff < 0 and not hasattr(self, 'ignore_query_truncation'): # WHAT THE HECK?!?! WARN THE USER: BLAST RESULTS ARE SCREWY... raise ValueError( """BLAST appears to have truncated the Query: sequence to be shorter than the Sbjct: sequence: Query: %s Sbjct: %s This should not happen! To ignore this error, please create an attribute ignore_query_truncation on the BlastHitParser object.""" % (self.query_seq, self.subject_seq)) def get_interval_obj(self, q_start, q_end, s_start, s_end, query_ori, query_factor, subject_ori, subject_factor): "return interval result as an object with attributes" o = BlastIval() o.hit_id = self.hit_id o.src_id = self.query_id o.dest_id = self.subject_id o.blast_score = self.blast_score o.e_value = self.e_value o.percent_id = self.identity_percent o.src_ori = query_ori o.dest_ori = subject_ori query_start = self.query_start+q_start*query_ori*query_factor query_end = self.query_start+q_end*query_ori*query_factor subject_start = self.subject_start+s_start*subject_ori*subject_factor subject_end = self.subject_start+s_end*subject_ori*subject_factor if query_start= 0: # END OF AN UNGAPPED INTERVAL yield self.get_interval_obj(q_start, i_query, s_start, i_subject, query_ori, query_factor, subject_ori, subject_factor) q_start= -1 elif q_start<0: # START OF AN UNGAPPED INTERVAL q_start=i_query s_start=i_subject if self.query_seq[i]!=self.gapchar: # COUNT QUERY LETTERS i_query+=1 if self.subject_seq[i]!=self.gapchar: # COUNT SUBJECT LETTERS i_subject+=1 if q_start>=0: # REPORT THE LAST INTERVAL yield self.get_interval_obj(q_start, i_query, s_start, i_subject, query_ori, query_factor, subject_ori, subject_factor) yield CoordsGroupEnd() def parse_file(self, myfile): "generate interval tuples by parsing BLAST output from myfile" for line in myfile: self.nline += 1 if self.is_valid_hit() and \ (is_line_start('>', line) or is_line_start(' Score =', line) \ or is_line_start(' Database:', line) \ or is_line_start('Query=', line)): for t in self.generate_intervals(): # REPORT THIS ALIGNMENT yield t # GENERATE ALL ITS INTERVAL MATCHES self.reset() # RESET TO START A NEW ALIGNMENT if is_line_start('Query=', line): self.save_query(line) elif is_line_start('>', line): self.save_subject(line) elif is_line_start(' Score =', line): self.save_score(line) elif 'Identities =' in line: self.save_identity(line) elif is_line_start('Query:', line): self.save_query_line(line) elif is_line_start('Sbjct:', line): self.save_subject_line(line) if self.nline == 0: # no blast output?? raise IOError('No BLAST output. Check that blastall is \ in your PATH') if __name__=='__main__': import sys p=BlastHitParser() for t in p.parse_file(sys.stdin): print t PK7“;œ¯!'!'pygr/parse_blast.pyc;ò |†Kc@s³dklZdkZdklZlZd„Zdd„Zdefd„ƒYZ defd „ƒYZ e d jo8dk Z e ƒZ x#e ie iƒD] ZeGHqœWndS( (s generatorsN(sCoordsGroupStartsCoordsGroupEndcCs||t|ƒ jSdS(s$check whether line begins with tokenN(stokenslineslen(stokensline((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pys is_line_startss-c Csœ||jo d}nd}d}x)|D]!}||jo|d7}q*q*Wt|ƒ|}|t ||ƒ|djo d}nd}||fSdS(sÕtry to determine orientation (1 or -1) based on whether start>end, and letterunit (1 or 3) depending on the ratio of end-start difference vs the actual non-gap letter count. Returns tuple (ori,letterunit)iiÿÿÿÿif2.0iN( sendsstartsorisngapsseqslsgapcharslensseqlensfloats letterunit( sstartsendsseqsgapchars letterunitsngapsseqlenslsori((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pysget_ori_letterunit s    s BlastIvalcBstZd„ZRS(NcCsdt|iƒdSdS(Ns (sreprsselfs__dict__(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pys__repr__#s(s__name__s __module__s__repr__(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pys BlastIval!ssBlastHitParsercBs€tZdZdZd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd „ZRS(s”reads alignment info from blastall standard output. Method parse_file(fo) reads file object fo, and generates tuples suitable for BlastIval.s-cCs d|_d|_|iƒdS(Ni(sselfshit_idsnlinesreset(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pys__init__-s  cCs%d|_d|_|id7_dS(s?flush any alignment info, so we can start reading new alignmentsiN(sselfs query_seqs subject_seqshit_id(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pysreset2s  cCs|iƒd|_dS(Ni(slinessplitsselfsquery_id(sselfsline((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pys save_query8scCs|iƒdd|_dS(Nii(slinessplitsselfs subject_id(sselfsline((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pys save_subject;scCs›t|iƒdƒ|_|iƒd}|ddjod|}ny*tit|ƒƒ tidƒ|_Wn"t t fj od|_nXdS( ssave a Score: lineiiises1f10.0f300.0N( sfloatslinessplitsselfs blast_scoresssmathslogse_values ValueErrors OverflowError(sselfsliness((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pys save_score>s*cCs4|iƒdd}t||idƒ ƒ|_dS(ssave Identities lineiis%N(slinessplitsssintsfindsselfsidentity_percent(sselfsliness((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pys save_identityIscCs—|iƒ}t|dƒ|_|i o=t|dƒ|_|i|ijo|id8_qgn|i|d7_|i|ddƒ|_ dS(ssave a Query: lineiiiiN( slinessplitscsintsselfs query_ends query_seqs query_startsfindsseq_start_char(sselfslinesc((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pyssave_query_lineNs  cCs:|iƒ}t|ƒdjo+d|d|i!g||iiƒ}nt|dƒ|_|i o=t|dƒ|_ |i |ijo|i d8_ q¥n|i|d7_t|i ƒt|iƒ}|djo|i|d7_n?|djot |d ƒ o t d |i |ifƒ‚nd S( s>save a Sbjct: line, attempt to handle various BLAST insanitiesisSbjct:iiiiisAsignore_query_truncationsOBLAST appears to have truncated the Query: sequence to be shorter than the Sbjct: sequence: Query: %s Sbjct: %s This should not happen! To ignore this error, please create an attribute ignore_query_truncation on the BlastHitParser object.N(slinessplitscslensselfsseq_start_charsints subject_ends subject_seqs subject_starts query_seqslendiffshasattrs ValueError(sselfslinescslendiff((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pyssave_subject_lineZs +  c Cs)tƒ} |i| _|i| _|i| _|i| _|i | _ |i | _ || _ || _|i|||} |i|||} |i|||} |i|||} | | jo| | _| | _n| | _| | _| | jo| | _| | _n| | _| | _| SdS(s3return interval result as an object with attributesN(s BlastIvalsosselfshit_idsquery_idssrc_ids subject_idsdest_ids blast_scorese_valuesidentity_percents percent_ids query_orissrc_oris subject_orisdest_oris query_startsq_starts query_factorsq_ends query_ends subject_startss_startssubject_factorss_ends subject_ends src_startssrc_ends dest_startsdest_end(sselfsq_startsq_endss_startss_ends query_oris query_factors subject_orissubject_factors subject_ends query_endsos subject_starts query_start((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pysget_interval_objys2                   cCs|io|iSdS(N(sselfs query_seqs subject_seq(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pys is_valid_hit—sc cstƒVt|i|i|i|iƒ\}}t|i |i |i |iƒ\}}d} d}d}d}xïtt|iƒƒD]Ø}|i||ijp|i ||ijo=| djo&|i| |||||||ƒVnd} n| djo|} |}n|i||ijo|d7}n|i ||ijo|d7}qƒqƒW| djo&|i| |||||||ƒVntƒVdS(s2generate interval tuples for the current alignmentiÿÿÿÿiiN(sCoordsGroupStartsget_ori_letterunitsselfs query_starts query_ends query_seqsgapchars query_oris query_factors subject_starts subject_ends subject_seqs subject_orissubject_factorsq_startss_startsi_querys i_subjectsrangeslensisget_interval_objsCoordsGroupEnd( sselfs query_factors subject_oris query_oriss_startsi_querysis i_subjectssubject_factorsq_start((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pysgenerate_intervalsšs@  .       ccs}xV|D]N}|id7_|iƒo=td|ƒp-td|ƒptd|ƒp td|ƒo)x|iƒD] }|VqvW|iƒntd|ƒo|i |ƒqtd|ƒo|i |ƒqtd|ƒo|i |ƒqd|jo|i |ƒqtd|ƒo|i |ƒqtd|ƒo|i|ƒqqW|id jotd ƒ‚nd S( s<generate interval tuples by parsing BLAST output from myfileis>s Score =s Database:sQuery=s Identities =sQuery:sSbjct:isNNo BLAST output. Check that blastall is in your PATHN(smyfileslinesselfsnlines is_valid_hits is_line_startsgenerate_intervalsstsresets save_querys save_subjects save_scores save_identityssave_query_linessave_subject_linesIOError(sselfsmyfilestsline((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pys parse_file¾s.M  (s__name__s __module__s__doc__sgapchars__init__sresets save_querys save_subjects save_scores save_identityssave_query_linessave_subject_linesget_interval_objs is_valid_hitsgenerate_intervalss parse_file(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pysBlastHitParser's          $s__main__(s __future__s generatorssmaths nlmsa_utilssCoordsGroupStartsCoordsGroupEnds is_line_startsget_ori_letterunitsobjects BlastIvalsBlastHitParsers__name__ssyssps parse_filesstdinst( s is_line_startsBlastHitParsers BlastIvalsget_ori_letterunitssysspsCoordsGroupEndstsCoordsGroupStartsmaths generators((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pys?s    ²   PK7“;œ¯!'!'pygr/parse_blast.pyo;ò |†Kc@s³dklZdkZdklZlZd„Zdd„Zdefd„ƒYZ defd „ƒYZ e d jo8dk Z e ƒZ x#e ie iƒD] ZeGHqœWndS( (s generatorsN(sCoordsGroupStartsCoordsGroupEndcCs||t|ƒ jSdS(s$check whether line begins with tokenN(stokenslineslen(stokensline((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pys is_line_startss-c Csœ||jo d}nd}d}x)|D]!}||jo|d7}q*q*Wt|ƒ|}|t ||ƒ|djo d}nd}||fSdS(sÕtry to determine orientation (1 or -1) based on whether start>end, and letterunit (1 or 3) depending on the ratio of end-start difference vs the actual non-gap letter count. Returns tuple (ori,letterunit)iiÿÿÿÿif2.0iN( sendsstartsorisngapsseqslsgapcharslensseqlensfloats letterunit( sstartsendsseqsgapchars letterunitsngapsseqlenslsori((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pysget_ori_letterunit s    s BlastIvalcBstZd„ZRS(NcCsdt|iƒdSdS(Ns (sreprsselfs__dict__(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pys__repr__#s(s__name__s __module__s__repr__(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pys BlastIval!ssBlastHitParsercBs€tZdZdZd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd „ZRS(s”reads alignment info from blastall standard output. Method parse_file(fo) reads file object fo, and generates tuples suitable for BlastIval.s-cCs d|_d|_|iƒdS(Ni(sselfshit_idsnlinesreset(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pys__init__-s  cCs%d|_d|_|id7_dS(s?flush any alignment info, so we can start reading new alignmentsiN(sselfs query_seqs subject_seqshit_id(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pysreset2s  cCs|iƒd|_dS(Ni(slinessplitsselfsquery_id(sselfsline((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pys save_query8scCs|iƒdd|_dS(Nii(slinessplitsselfs subject_id(sselfsline((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pys save_subject;scCs›t|iƒdƒ|_|iƒd}|ddjod|}ny*tit|ƒƒ tidƒ|_Wn"t t fj od|_nXdS( ssave a Score: lineiiises1f10.0f300.0N( sfloatslinessplitsselfs blast_scoresssmathslogse_values ValueErrors OverflowError(sselfsliness((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pys save_score>s*cCs4|iƒdd}t||idƒ ƒ|_dS(ssave Identities lineiis%N(slinessplitsssintsfindsselfsidentity_percent(sselfsliness((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pys save_identityIscCs—|iƒ}t|dƒ|_|i o=t|dƒ|_|i|ijo|id8_qgn|i|d7_|i|ddƒ|_ dS(ssave a Query: lineiiiiN( slinessplitscsintsselfs query_ends query_seqs query_startsfindsseq_start_char(sselfslinesc((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pyssave_query_lineNs  cCs:|iƒ}t|ƒdjo+d|d|i!g||iiƒ}nt|dƒ|_|i o=t|dƒ|_ |i |ijo|i d8_ q¥n|i|d7_t|i ƒt|iƒ}|djo|i|d7_n?|djot |d ƒ o t d |i |ifƒ‚nd S( s>save a Sbjct: line, attempt to handle various BLAST insanitiesisSbjct:iiiiisAsignore_query_truncationsOBLAST appears to have truncated the Query: sequence to be shorter than the Sbjct: sequence: Query: %s Sbjct: %s This should not happen! To ignore this error, please create an attribute ignore_query_truncation on the BlastHitParser object.N(slinessplitscslensselfsseq_start_charsints subject_ends subject_seqs subject_starts query_seqslendiffshasattrs ValueError(sselfslinescslendiff((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pyssave_subject_lineZs +  c Cs)tƒ} |i| _|i| _|i| _|i| _|i | _ |i | _ || _ || _|i|||} |i|||} |i|||} |i|||} | | jo| | _| | _n| | _| | _| | jo| | _| | _n| | _| | _| SdS(s3return interval result as an object with attributesN(s BlastIvalsosselfshit_idsquery_idssrc_ids subject_idsdest_ids blast_scorese_valuesidentity_percents percent_ids query_orissrc_oris subject_orisdest_oris query_startsq_starts query_factorsq_ends query_ends subject_startss_startssubject_factorss_ends subject_ends src_startssrc_ends dest_startsdest_end(sselfsq_startsq_endss_startss_ends query_oris query_factors subject_orissubject_factors subject_ends query_endsos subject_starts query_start((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pysget_interval_objys2                   cCs|io|iSdS(N(sselfs query_seqs subject_seq(sself((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pys is_valid_hit—sc cstƒVt|i|i|i|iƒ\}}t|i |i |i |iƒ\}}d} d}d}d}xïtt|iƒƒD]Ø}|i||ijp|i ||ijo=| djo&|i| |||||||ƒVnd} n| djo|} |}n|i||ijo|d7}n|i ||ijo|d7}qƒqƒW| djo&|i| |||||||ƒVntƒVdS(s2generate interval tuples for the current alignmentiÿÿÿÿiiN(sCoordsGroupStartsget_ori_letterunitsselfs query_starts query_ends query_seqsgapchars query_oris query_factors subject_starts subject_ends subject_seqs subject_orissubject_factorsq_startss_startsi_querys i_subjectsrangeslensisget_interval_objsCoordsGroupEnd( sselfs query_factors subject_oris query_oriss_startsi_querysis i_subjectssubject_factorsq_start((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pysgenerate_intervalsšs@  .       ccs}xV|D]N}|id7_|iƒo=td|ƒp-td|ƒptd|ƒp td|ƒo)x|iƒD] }|VqvW|iƒntd|ƒo|i |ƒqtd|ƒo|i |ƒqtd|ƒo|i |ƒqd|jo|i |ƒqtd|ƒo|i |ƒqtd|ƒo|i|ƒqqW|id jotd ƒ‚nd S( s<generate interval tuples by parsing BLAST output from myfileis>s Score =s Database:sQuery=s Identities =sQuery:sSbjct:isNNo BLAST output. Check that blastall is in your PATHN(smyfileslinesselfsnlines is_valid_hits is_line_startsgenerate_intervalsstsresets save_querys save_subjects save_scores save_identityssave_query_linessave_subject_linesIOError(sselfsmyfilestsline((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pys parse_file¾s.M  (s__name__s __module__s__doc__sgapchars__init__sresets save_querys save_subjects save_scores save_identityssave_query_linessave_subject_linesget_interval_objs is_valid_hitsgenerate_intervalss parse_file(((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pysBlastHitParser's          $s__main__(s __future__s generatorssmaths nlmsa_utilssCoordsGroupStartsCoordsGroupEnds is_line_startsget_ori_letterunitsobjects BlastIvalsBlastHitParsers__name__ssyssps parse_filesstdinst( s is_line_startsBlastHitParsers BlastIvalsget_ori_letterunitssysspsCoordsGroupEndstsCoordsGroupStartsmaths generators((s6build/bdist.darwin-8.11.1-i386/egg/pygr/parse_blast.pys?s    ²   PKd—~;ÔwÖ””pygr/schema.py import types # STORES DICTIONARY OF ATTRIBUTE-BOUND GRAPHS # AND LIST OF UNBOUND GRAPHS class SchemaDict(dict): """Container for schema rules bound to a class or object. Rules are stored in two indexes for fast access, indexed by graph, and indexed by attrname. Use += and -= to add or remove rules. """ def __init__(self, newlist=(), baselist=()): "Initialize schema list from list of base classes and newlist of rules" self.attrs = {} dict.__init__(self) # COMBINE SCHEMAS FROM PARENTS WITH NEW SCHEMA LIST for b in baselist: if hasattr(b, '__class_schema__'): self.update(b.__class_schema__) self.attrs.update(b.__class_schema__.attrs) for i in newlist: # newlist OVERRIDES OLD DEFS FROM baselist self += i def __iadd__(self, i): "Add a schema rule to this SchemaDict" g = i[0] if len(i) >= 2: if isinstance(i[1], types.StringType): if i[1] in self.attrs: # REMOVE OLD ENTRY self -= self.attrs[i[1]] self.attrs[i[1]] = i # SAVE IN INDEX ACCORDING TO ATTR NAME else: raise TypeError('Attribute name must be a string') if g not in self: self[g] = [] self[g].append(i) # SAVE IN GRAPH INDEX return self # REQUIRED FROM iadd()!! def __isub__(self, i): "Remove a schema rule from this SchemaDict" g = i[0] if g not in self: raise KeyError('graph not found in SchemaDict!') self[g].remove(i) # REMOVE OLD ENTRY if len(self[g]) == 0: # REMOVE EMPTY LIST del self[g] if len(i) >= 2: if isinstance(i[1], types.StringType): if i[1] not in self.attrs: raise KeyError('attribute not found in SchemaDict!') del self.attrs[i[1]] # REMOVE OLD ENTRY else: raise TypeError('Attribute name must be a string') return self # REQUIRED FROM iadd()!! def initInstance(self, obj): "Add obj as new node to all graphs referenced by this SchemaDict." for g, l in self.items(): # GET ALL OUR RULES for s in l: if obj not in g: g.__iadd__(obj, (s, )) # ADD OBJECT TO GRAPH USING RULE s def getschema(self, attr=None, graph=None): "Return list of schema rules that match attr / graph arguments." if attr: if attr in self.attrs: return [self.attrs[attr]] elif graph: if graph in self: return self[graph] else: raise ValueError('You must specify an attribute or graph.') return [] # DIDN'T FIND ANYTHING class SchemaList(list): "Temporary container for returned schema list, with attached methods" def __init__(self, obj): self.obj = obj # OBJECT THAT WE'RE DESCRIBING SCHEMA OF list.__init__(self) # CALL SUPERCLASS CONSTRUCTOR def __iadd__(self, rule): "Add a new schema rule to object described by this SchemaList" if not hasattr(self.obj, '__schema__'): self.obj.__schema__ = SchemaDict() self.obj.__schema__ += rule return self # REQUIRED FROM iadd()!! # PROBABLY NEED AN __isub__() TOO?? ###################### # getschema, getnodes, getedges # these functions are analogous to getattr, except they get graph information def getschema(o, attr=None, graph=None): "Get list of schema rules for object o that match attr / graph arguments." found = SchemaList(o) attrs = {} if hasattr(o, '__schema__'): for s in o.__schema__.getschema(attr, graph): found.append(s) if isinstance(s[1], types.StringType): attrs[s[1]] = None if attr and len(found) > 0: # DON'T PROCEED return found if hasattr(o, '__class_schema__'): for s in o.__class_schema__.getschema(attr, graph): if not isinstance(s[1], types.StringType) or s[1] not in attrs: found.append(s) # DON'T OVERWRITE OBJECT __schema__ BINDINGS return found def setschema(o, attr, graph): """Bind object to graph, and if attr not None, also bind graph to this attribute.""" if not hasattr(o, '__schema__'): o.__schema__ = SchemaDict() o.__schema__ += (graph, attr) def getnodes(o, attr=None, graph=None): """Get destination nodes from graph bindings of o, limited to the specific attribute or graph if specified""" if attr: if hasattr(o, '__schema__') and attr in o.__schema__: return getattr(o, o.__schema__[attr][2]) # RETURN THE PRODUCT if hasattr(o, '__class_schema__') and attr in o.__class_schema__: return getattr(o, o.__class_schema__[attr][2]) # RETURN THE PRODUCT raise AttributeError('No attribute named %s in object %s' % (attr, o)) elif graph: # JUST LOOK UP THE GRAPH TRIVIALLY return graph[o] else: # SHOULD WE GET ALL NODES FROM ALL SCHEMA ENTRIES? HOW?? raise ValueError('You must pass an attribute name or graph') def getedges(o, attr=None, graph=None): """Get edges from graph bindings of o, limited to the specific attribute or graph if specified""" g = getnodes(o, attr, graph) # CAN JUST REUSE THE LOGIC OF getnodes if g and hasattr(g, 'edges'): return g.edges() else: return None PK7“;ÄÏœpygr/schema.pyc;ò |†Kc@sodkZdefd„ƒYZdefd„ƒYZeed„Zd„Zeed„Zeed„Z dS( Ns SchemaDictcBsGtZdZffd„Zd„Zd„Zd„Zeed„ZRS(sÅContainer for schema rules bound to a class or object. Rules are stored in two indexes for fast access, indexed by graph, and indexed by attrname. Use += and -= to add or remove rules. cCs€h|_ti|ƒxH|D]@}t|dƒo*|i|iƒ|ii|iiƒqqWx|D]}||7}qhWdS(sEInitialize schema list from list of base classes and newlist of ruless__class_schema__N( sselfsattrssdicts__init__sbaselistsbshasattrsupdates__class_schema__snewlistsi(sselfsnewlistsbaselistsbsi((s1build/bdist.darwin-8.11.1-i386/egg/pygr/schema.pys__init__ s  cCsº|d}t|ƒdjoit|dtiƒoB|d|ijo||i|d8}n||i|dReturn list of schema rules that match attr / graph arguments.s'You must specify an attribute or graph.N(sattrsselfsattrssgraphs ValueError(sselfsattrsgraph((s1build/bdist.darwin-8.11.1-i386/egg/pygr/schema.pys getschema@s  ( s__name__s __module__s__doc__s__init__s__iadd__s__isub__s initInstancesNones getschema(((s1build/bdist.darwin-8.11.1-i386/egg/pygr/schema.pys SchemaDicts    s SchemaListcBs tZdZd„Zd„ZRS(sCTemporary container for returned schema list, with attached methodscCs||_ti|ƒdS(N(sobjsselfslists__init__(sselfsobj((s1build/bdist.darwin-8.11.1-i386/egg/pygr/schema.pys__init__Ps cCsAt|idƒ otƒ|i_n|ii|7_|SdS(s<Add a new schema rule to object described by this SchemaLists __schema__N(shasattrsselfsobjs SchemaDicts __schema__srule(sselfsrule((s1build/bdist.darwin-8.11.1-i386/egg/pygr/schema.pys__iadd__Ts (s__name__s __module__s__doc__s__init__s__iadd__(((s1build/bdist.darwin-8.11.1-i386/egg/pygr/schema.pys SchemaListMs  cCst|ƒ}h}t|dƒoZxW|ii||ƒD]<}|i |ƒt |dt i ƒot||dReturn list of schema rules that match attr / graph arguments.s'You must specify an attribute or graph.N(sattrsselfsattrssgraphs ValueError(sselfsattrsgraph((s1build/bdist.darwin-8.11.1-i386/egg/pygr/schema.pys getschema@s  ( s__name__s __module__s__doc__s__init__s__iadd__s__isub__s initInstancesNones getschema(((s1build/bdist.darwin-8.11.1-i386/egg/pygr/schema.pys SchemaDicts    s SchemaListcBs tZdZd„Zd„ZRS(sCTemporary container for returned schema list, with attached methodscCs||_ti|ƒdS(N(sobjsselfslists__init__(sselfsobj((s1build/bdist.darwin-8.11.1-i386/egg/pygr/schema.pys__init__Ps cCsAt|idƒ otƒ|i_n|ii|7_|SdS(s<Add a new schema rule to object described by this SchemaLists __schema__N(shasattrsselfsobjs SchemaDicts __schema__srule(sselfsrule((s1build/bdist.darwin-8.11.1-i386/egg/pygr/schema.pys__iadd__Ts (s__name__s __module__s__doc__s__init__s__iadd__(((s1build/bdist.darwin-8.11.1-i386/egg/pygr/schema.pys SchemaListMs  cCst|ƒ}h}t|dƒoZxW|ii||ƒD]<}|i |ƒt |dt i ƒot||d self._cache_max: # TRUNCATE EXCESSIVE LENGTH ival=(ival[0], ival[0] + self._cache_max) # @CTB untested d[id]=[ival[0], ival[1]] try: self._cache[owner] = d # ADD TO EXISTING CACHE except AttributeError: self._cache = weakref.WeakKeyDictionary() # AUTOMATICALLY REMOVE self._cache[owner] = d # FROM CACHE IF owner GOES OUT OF SCOPE def strsliceCache(self, seq, start, stop): """Get strslice using cache hints, if any available.""" try: cacheDict=self._cache except AttributeError: raise IndexError('no cache present') for owner, d in cacheDict.items(): try: ival = d[seq.id] except KeyError: continue # NOT IN THIS CACHE, SO SKIP @CTB untested ival_start, ival_stop = ival[:2] if start >= ival_start and stop <= ival_stop: # CONTAINED IN ival try: s = ival[2] # get seq string from our cache except IndexError: # use strslice() to retrieve from storage s = seq.strslice(ival_start, ival_stop, useCache=False) ival.append(s) try: # does owner want to reference this cached seq? save_f = owner.cache_reference except AttributeError: pass # no, so nothing to do else: # let owner control caching in our _weakValueDict save_f(seq) # # @CTB untested return s[start - ival_start:stop - ival_start] raise IndexError('interval not found in cache') # @CTB untested # these methods should all be implemented on all SequenceDBs. def close(self): pass # subclass should implement closing of its open resources! def __iter__(self): return iter(self.seqInfoDict) def iteritems(self): for seqID in self: yield seqID, self[seqID] def __len__(self): return len(self.seqInfoDict) def __getitem__(self, seqID): """Retrieve sequence by id, using cache if available.""" try: # for speed, default case (cache hit) should return immediately return self._weakValueDict[seqID] except KeyError: # not in cache? try loading. try: s = self.itemClass(self, seqID) except KeyError: raise KeyError("no key '%s' in database %s" % (seqID, repr(self))) self._weakValueDict[seqID] = s # save in cache. return s def keys(self): return self.seqInfoDict.keys() def __contains__(self, key): return key in self.seqInfoDict def __repr__(self): return "<%s '%s'>" % (self.__class__.__name__, self.itemClass.__class__.__name__) def clear_cache(self): """Empty the cache.""" self._weakValueDict.clear() # these methods should not be implemented for read-only database. clear = setdefault = pop = popitem = copy = update = \ classutil.read_only_error #### # # FileDBSequence and SequenceFileDB, and associated support classes. # class _FileDBSeqDescriptor(object): """Descriptor to retrieve entire sequence from seqLenDict.""" def __get__(self, obj, objtype): length = obj.db.seqLenDict[obj.id][0] return obj.strslice(0, length) class FileDBSequence(SequenceBase): """Default sequence object for file-based storage mechanism. See SequenceFileDB for the associated database class. In general, you should not create objects from this class directly; retrieve them from SequenceFileDB objects, instead. NOTE: 'self.db' is attached to all instances of this class that come from a particular database by 'classutil.get_bound_subclass'. """ seq = _FileDBSeqDescriptor() # dynamically retrieve 'seq'. __reduce__ = classutil.item_reducer # for pickling purposes. def __init__(self, db, id): self.id = id SequenceBase.__init__(self) if self.id not in self.db.seqLenDict: raise KeyError('sequence %s not in db %s' % (self.id, self.db)) def __len__(self): """Unpack this sequence's length from the seqLenDict.""" return self.db.seqLenDict[self.id][0] def strslice(self, start, end, useCache=True): """Access slice of a sequence efficiently, using seqLenDict info.""" if useCache: # If it's in the cache, use that! try: return self.db.strsliceCache(self, start, end) except IndexError: pass return self.db.strslice(self.id, start, end) class SequenceFileDB(SequenceDB): """Main class for file-based storage of a sequence database. By default, SequenceFileDB uses a seqLenDict, a.k.a. a shelve index of sequence lengths and offsets, to retrieve sequence slices with fseek. Thus entire chromosomes (for example) do not have to be loaded to retrieve a subslice. Takes one required argument, 'filepath', which should be the name of a FASTA file (or a file whose format is understood by your custom reader; see 'reader' kw arg, and the _store_seqlen_dict function). The SequenceFileDB seqInfoDict interface is a wrapper around the seqLenDict created by the __init__ function. """ itemClass = FileDBSequence # copy _pickleAttrs and add 'filepath' _pickleAttrs = SequenceDB._pickleAttrs.copy() _pickleAttrs['filepath'] = 0 def __init__(self, filepath, reader=None, **kwargs): # make filepath a pickleable attribute. self.filepath = classutil.SourceFileName(str(filepath)) fullpath = self.filepath + '.seqlen' # build the seqLenDict if it doesn't already exist try: seqLenDict = classutil.open_shelve(fullpath, 'r') except NoSuchFileError: seqLenDict = self._create_seqLenDict(fullpath, filepath, reader) self.seqLenDict = seqLenDict self.seqInfoDict = _SeqLenDictWrapper(self) # standard interface # initialize base class. dbname = os.path.basename(filepath) SequenceDB.__init__(self, filepath=filepath, dbname=dbname, **kwargs) def close(self): '''close our open shelve index file and _pureseq...''' self.seqLenDict.close() try: do_close = self._pureseq.close except AttributeError: pass # _pureseq not open yet, so nothing to do else: do_close() def __repr__(self): return "<%s '%s'>" % (self.__class__.__name__, self.filepath) def _create_seqLenDict(self, dictpath, seqpath, reader=None): """Create a seqLenDict from 'seqpath' and store in 'dictpath'.""" seqLenDict = classutil.open_shelve(dictpath, 'n') try: logger.debug('Building sequence length index...') _store_seqlen_dict(seqLenDict, seqpath, reader) finally: seqLenDict.close() # close after writing, no matter what! return classutil.open_shelve(dictpath, 'r') # re-open read-only def strslice(self, seqID, start, end, useCache=True): """Access slice of a sequence efficiently, using seqLenDict info.""" # Retrieve sequence from the .pureseq file based on seqLenDict # information. try: ifile=self._pureseq except AttributeError: fullpath = self.filepath + '.pureseq' ifile = file(fullpath, 'rb') self._pureseq = ifile # Now, read in the actual slice. offset = self.seqLenDict[seqID][1] ifile.seek(offset + start) return ifile.read(end - start) # Some support classes for the SeqLenDict mechanism. class BasicSeqInfo(object): """Wrapper to provide the correct seqInfoDict-style object information. This boils down to providing id, db, length, and possibly offset. """ def __init__(self, seqID, seqDB, length=None): self.id = seqID self.db = seqDB if length is None: self.length = len(seqDB[seqID]) # generic but possibly slow else: self.length = length class _SeqLenObject(BasicSeqInfo): """Wrapper for use with a seqLenDict """ def __init__(self, seqID, seqDB): length, self.offset = seqDB.seqLenDict[seqID] BasicSeqInfo.__init__(self, seqID, seqDB, length) class BasicSeqInfoDict(object, UserDict.DictMixin): """Wrapper around SequenceDB.seqLenDict to provide seqInfoDict behavior. This basic version just gets the length from the sequence object itself. """ itemClass = BasicSeqInfo def __init__(self, db): self.seqDB = db def __getitem__(self, k): return self.itemClass(k, self.seqDB) def __len__(self): return len(self.seqDB.seqLenDict) def __iter__(self): return iter(self.seqDB.seqLenDict) def keys(self): return self.seqDB.seqLenDict.keys() class _SeqLenDictWrapper(BasicSeqInfoDict): """ The default storage mechanism for sequences implemented by FileDBSequence and SequenceFileDB puts everything in seqLenDict, a shelve index of lengths and offsets. This class wraps that dictionary to provide the interface that SequenceDB expects to see. """ itemClass = _SeqLenObject class _SeqLenDictSaver(object): """Support for generic reading functions, called by _store_seqlen_dict. This allows you to specify your own 'reader' function when constructing a FileSequenceDB, e.g. so that you could read something other than FASTA files into a seqLenDict. Pass in this function as the 'reader' kwarg to FileSequenceDB. Custom reader functions should take a file handle and a filename, and return a list of sequence info objects with 'id', 'length', and 'sequence' attributes for each sequence in the given file/filename. _SeqLenDictSaver will then construct a '.pureseq' file containing the concatenated sequences and fill in the seqLenDict appropriately. """ def __init__(self, reader): self.reader = reader def __call__(self, d, ifile, filename): offset = 0L pureseq_fp = file(filename + '.pureseq', 'wb') try: for o in self.reader(ifile, filename): # store the length & offset in the seqLenDict d[o.id] = o.length, offset offset += o.length if o.length != len(o.sequence): raise ValueError('length does not match sequence: %s,%d' % (o.id, o.length)) pureseq_fp.write(o.sequence) finally: pureseq_fp.close() def _store_seqlen_dict(d, filename, reader=None, mode='rU'): """Store sequence lengths in a dictionary, e.g. a seqLenDict. Used by SequenceFileDB._create_seqLenDict. The 'reader' function implements a custom sequence format reader; by default, _store_seqlen_dict uses seqfmt.read_fasta_lengths, which reads FASTA-format files. See _SeqLenDictSaver for information on building a custom 'reader', and see the seqdb docs for an example. """ # if a custom reader function was passed in, run that. builder = seqfmt.read_fasta_lengths if reader is not None: builder = _SeqLenDictSaver(reader) ifile = file(filename, mode) try: builder(d, ifile, filename) # run the builder on our sequence set finally: ifile.close() #### # # class PrefixUnionDict and associated support classes. # class _PrefixUnionDictInverse(object): """Provide inverse (~) operator behavior for PrefixUnionDicts. This enables ~pud to return a database that, given a sequence object, returns the corresponding key (prefix.id) to retrieve that sequence object in the pud. """ def __init__(self, db): self.db = db def __getitem__(self, ival): seq = ival.pathForward # get the top-level sequence object try: # for speed, normal case should execute immediately prefix = self.db.dicts[seq.db] except KeyError: try: # @CTB abstraction boundary violation! keep? how test? if seq.pathForward._anno_seq.db in self.db.dicts: raise KeyError('''\ this annotation is not in the PrefixUnion, but its sequence is. You can get that using its \'sequence\' attribute.''') except AttributeError: pass raise KeyError('seq.db not in PrefixUnionDict') return prefix + self.db.separator + str(seq.id) def __contains__(self, seq): try: return seq.pathForward.db in self.db.dicts except AttributeError: return False class _PrefixUnionMemberDict(object, UserDict.DictMixin): """ @CTB confusing/inappropriate use of a dict interface! keep?? @CTB document. 'd[prefix]=value; d[k] returns value if k is a member of prefix' """ def __init__(self, puDict, default=None, attrMethod=lambda x: x.pathForward.db): self.values = {} self.puDict = puDict self._attrMethod = attrMethod if default is not None: self.default = default # @CTB can we use setdefault for this? def keys(self): return self.puDict.prefixDict.keys() possibleKeys = keys # legacy interface (?) def __setitem__(self, k, v): if k not in self.puDict.prefixDict: raise KeyError('key %s is not a valid union prefix string!' % k) new_k = self.puDict.prefixDict[k] self.values[new_k] = v def __getitem__(self, k): try: db = self._attrMethod(k) except AttributeError: raise TypeError('wrong key type? _attrMethod() failed.') if db not in self.values: try: return self.default except AttributeError: # no default value - raise KeyError. raise KeyError('key not a member of this union!') return self.values[db] class PrefixUnionDict(object, UserDict.DictMixin): """Interface to a set of sequence DBs, each assigned a unique prefix. For example, the sequence ID 'foo.bar' would unpack to ID 'bar' in the dictionary associated with the prefix 'foo'. This is a useful way to combine disparate seqdbs into a single db, without actually altering the individual seqdbs. PrefixUnionDicts can be created in one of two ways: either - pass in a dictionary containing prefix-to-seqdb mappings as 'prefixDict', or - pass in a header file containing the information necessary to create such a dictionary. In the latter case, see the 'writeHeaderFile' method for format information. The optional kwarg 'trypath' contains a list of directories to search for the database file named in each line. The optional kwarg 'dbClass' specifies the database class to use to load each sequence file; it defaults to SequenceFileDB. The default ID separator is '.'; use the 'separator' kwarg to change it. @CTB trypath => trypaths? """ # define ~ (invert) operator to return a lazily-created _PUDInverse. __invert__ = classutil.lazy_create_invert(_PrefixUnionDictInverse) def __init__(self, prefixDict=None, separator='.', filename=None, dbClass=SequenceFileDB, trypath=None): # read union header file if filename is not None: if prefixDict: raise TypeError(''' cannot create with prefixDict and filename both!''') if trypath is None: trypath = [os.path.dirname(filename)] ifile = file(filename, 'rU') try: it = iter(ifile) # Remove leading/trailing CR+LF. separator = it.next().strip('\r\n') prefixDict = {} for line in it: prefix, filepath=line.strip().split('\t')[:2] try: dbfile = classutil.search_dirs_for_file(filepath, trypath) db = dbClass(dbfile) except IOError: for db in prefixDict.values(): db.close() # close databases before exiting raise IOError('''\ unable to open database %s: check path or privileges. Set 'trypath' to give a list of directories to search.''' % filepath) else: prefixDict[prefix] = db finally: ifile.close() self.separator = separator if prefixDict is not None: self.prefixDict = prefixDict else: self.prefixDict = {} # also create a reverse mapping d = {} for k, v in self.prefixDict.items(): d[v] = k self.dicts = d self.seqInfoDict = _PUDSeqInfoDict(self) # supply standard interface def format_id(self, prefix, seqID): return prefix + self.separator + seqID def get_prefix_id(self, k): """Subdivide a key into a prefix and ID using the given separator.""" try: t = k.split(self.separator, 2) # split into no more than 3 fields except AttributeError: raise KeyError('key should be a string! ' + repr(k)) l = len(t) if l == 2: return t elif l<2: raise KeyError('invalid id format; no prefix: ' + k) else: # id contains separator character? prefix = t[0] # assume prefix doesn't contain separator @CTB untested seqID = k[len(prefix) + 1:] # skip past prefix return prefix, seqID def get_subitem(self, d, seqID): # try int key first try: return d[int(seqID)] except (ValueError, KeyError, TypeError): pass # otherwise, use default (str) key try: return d[seqID] except KeyError: raise KeyError("no key '%s' in %s" % (seqID, repr(d))) def __getitem__(self, k): """For 'foo.bar', return 'bar' in dict associated with prefix 'foo'""" prefix, seqID = self.get_prefix_id(k) try: d = self.prefixDict[prefix] except KeyError, e: raise KeyError("no key '%s' in %s" % (k, repr(self))) return self.get_subitem(d, seqID) def __contains__(self, k): """Is the given ID in our PrefixUnionDict?""" # try it out as an ID. if isinstance(k, str): try: (prefix, id) = self.get_prefix_id(k) return id in self.prefixDict[prefix] except KeyError: return False # otherwise, try treating key as a sequence. # @CTB inconsistent with 'getitem'. try: db = k.pathForward.db except AttributeError: raise AttributeError('key must be a sequence with db attribute!') return db in self.dicts def has_key(self, k): return self.__contains__(k) def __iter__(self): for p, d in self.prefixDict.items(): for id in d: yield self.format_id(p, id) def keys(self): return list(self.iterkeys()) def iterkeys(self): return iter(self) def iteritems(self): for p, d in self.prefixDict.items(): for id, seq in d.iteritems(): yield self.format_id(p, id), seq def getName(self, ival): """For a given sequence, return a fully qualified name, 'prefix.id'.""" seq = ival.pathForward # get the top-level sequence object return self.dicts[seq.db] + self.separator + seq.id def newMemberDict(self, **kwargs): # @CTB not used; necessary? """return a new member dictionary (empty)""" return _PrefixUnionMemberDict(self, **kwargs) def writeHeaderFile(self, filename): # @CTB not used; necessary? """Save a header file, suitable for later re-creation.""" ifile = file(filename, 'w') print >>ifile, self.separator for k, v in self.prefixDict.items(): try: print >>ifile, '%s\t%s' % (k, v.filepath) except AttributeError: raise AttributeError('''\ seq db '%s' has no filepath; you may be able to save this to worldbase, but not to a text HeaderFile!''' % k) ifile.close() def __len__(self): n=0 for db in self.dicts: n += len(db) return n def cacheHint(self, ivalDict, owner=None): # @CTB untested '''save a cache hint dict of {id:(start,stop)}''' d={} # extract separate cache hint dict for each prefix for longID, ival in ivalDict.items(): prefix, seqID = self.get_prefix_id(longID) d.setdefault(prefix, {})[seqID] = ival for prefix, seqDict in d.items(): try: m = self.prefixDict[prefix].cacheHint except AttributeError: # subdict can't cacheHint(), so just ignore pass else: # pass cache hint down to subdictionary m(seqDict, owner) # not clear what this should do for PrefixUnionDict copy = setdefault = update = classutil.method_not_implemented # these methods should not be implemented for read-only database. clear = pop = popitem = classutil.read_only_error class _PrefixDictInverseAdder(_PrefixUnionDictInverse): """Inverse class for SeqPrefixUnionDict; adds sequences when looked up. @CTB is getName only used by __getitem__? Make private? """ def getName(self, seq): """Find in or add the given sequence to the inverse of a PUD.""" try: return _PrefixUnionDictInverse.__getitem__(self, seq) except AttributeError: # no seq.db? treat as a user sequence. new_id = 'user' + self.db.separator + seq.pathForward.id # check to make sure it's already in the user seq db... _ = self.db[new_id] return new_id def __getitem__(self, seq): """__getitem__ interface that calls getName.""" try: return self.getName(seq) except KeyError: if not self.db.addAll: raise # if we should add, add seq & re-try. self.db += seq return self.getName(seq) class SeqPrefixUnionDict(PrefixUnionDict): """SeqPrefixUnionDict provides += functionality to add seqs to a PUD. See the __iadd__ method for details. If addAll is True, then looking a sequence up in the inverse db will automatically add it to the PrefixUnionDict. """ __invert__ = classutil.lazy_create_invert(_PrefixDictInverseAdder) def __init__(self, addAll=False, **kwargs): PrefixUnionDict.__init__(self, **kwargs) # override default PrefixUnionDict __invert__ to add sequences; # see classutil.lazy_create_invert. self.addAll = addAll # see _PrefixDictInverseAdder behavior. def __iadd__(self, k): """Add a sequence or database to the PUD, with a unique prefix. NOTE: __iadd__ must return self. """ # seq or db already present? if k in (~self): return self db = getattr(k, 'db', None) if db is None: # annotation sequence? db = getattr(k.pathForward, 'db', None) # @CTB untested if db is None: # this is a user sequence, with no container; create. if 'user' not in self.prefixDict: d = KeepUniqueDict() self._add_prefix_dict('user', d) else: d = self.prefixDict['user'] # now add the sequence d[k.pathForward.id] = k.pathForward return self # already contain? nothing to do. if db in self.dicts: # @CTB can this 'if' ever be true? return self # ok, not present; add, with a unique name. does it have # _persistent_id? try: name = db._persistent_id.split('.')[-1] except AttributeError: # no; retrieve from filepath? name = getattr(db, 'filepath', None) if name: # got one; clean up. name = os.path.basename(name) name = name.split('.')[0] else: # generate one. name = 'noname%d' % len(self.dicts) if name in self.prefixDict: logger.debug(''' It appears that two different sequence databases are being assigned the same prefix ("%s"). For this reason, the attempted automatic construction of a PrefixUnionDict for you cannot be completed! You should instead construct a PrefixUnionDict that assigns a unique prefix to each sequence database, and supply it directly as the seqDict argument to the NLMSA constructor.''' % id) raise ValueError('''\ cannot automatically construct PrefixUnionDict''') self._add_prefix_dict(name, db) return self def _add_prefix_dict(self, name, d): self.prefixDict[name] = d self.dicts[d] = name class _PUDSeqInfoDict(object, UserDict.DictMixin): """A wrapper object supplying a standard seqInfoDict interface for PUDs. This class simply provides a standard dict interface that rewrites individual sequence IDs into the compound PrefixUnionDict seq IDs on the fly. """ def __init__(self, db): self.seqDB = db def __iter__(self): return iter(self.seqDB) def keys(self): return list(self.iterkeys()) def iterkeys(self): for (k, v) in self.iteritems(): yield k def itervalues(self): for (k, v) in self.iteritems(): yield v def iteritems(self): for p, d in self.seqDB.prefixDict.items(): for seqID, info in d.seqInfoDict.iteritems(): yield self.seqDB.format_id(p, seqID), info def __getitem__(self, k): prefix, seqID = self.seqDB.get_prefix_id(k) db = self.seqDB.prefixDict[prefix] return self.seqDB.get_subitem(db.seqInfoDict, seqID) def has_key(self, k): return k in self.seqDB # # @CTB stopped review here. ################################################### # class BlastDB(SequenceFileDB): # @CTB untested? '''Deprecated interface provided for backwards compatibility. Provides blast() and megablast() methods for searching your seq db. Instead of this, you should use the blast.BlastMapping, which provides a graph interface to BLAST, or MegablastMapping for megablast.''' def __reduce__(self): # provided only for compatibility w/ 0.7 clients return (classutil.ClassicUnpickler, (self.__class__, self.__getstate__())) def __init__(self, filepath=None, blastReady=False, blastIndexPath=None, blastIndexDirs=None, **kwargs): """format database and build indexes if needed. Provide filepath or file object""" SequenceFileDB.__init__(self, filepath, **kwargs) def __repr__(self): return "" % (self.filepath) def blast(self, seq, al=None, blastpath='blastall', blastprog=None, expmax=0.001, maxseq=None, verbose=True, opts='', **kwargs): 'run blast with the specified parameters, return NLMSA alignment' blastmap = self.formatdb() return blastmap(seq, al, blastpath, blastprog, expmax, maxseq, verbose, opts, **kwargs) def megablast(self, seq, al=None, blastpath='megablast', expmax=1e-20, maxseq=None, minIdentity=None, maskOpts='-U T -F m', rmPath='RepeatMasker', rmOpts='-xsmall', verbose=True, opts='', **kwargs): 'run megablast with the specified parameters, return NLMSA alignment' from blast import MegablastMapping blastmap = self.formatdb(attr='megablastMap', mapClass=MegablastMapping) return blastmap(seq, al, blastpath, expmax, maxseq, minIdentity, maskOpts, rmPath, rmOpts, verbose, opts, **kwargs) def formatdb(self, filepath=None, attr='blastMap', mapClass=None): 'create a blast mapping object if needed, and ensure it is indexed' try: # see if mapping object already exists blastmap = getattr(self, attr) except AttributeError: if mapClass is None: # default: BlastMapping from blast import BlastMapping mapClass = BlastMapping blastmap = mapClass(self) setattr(self, attr, blastmap) # re-use this in the future blastmap.formatdb(filepath) # create index file if not already present return blastmap class BlastDBXMLRPC(BlastDB): 'XMLRPC server wrapper around a standard BlastDB' xmlrpc_methods = dict(getSeqLen=0, get_strslice=0, getSeqLenDict=0, get_db_size=0, get_seqtype=0, strslice='get_strslice') def getSeqLen(self, id): 'get sequence length, or -1 if not found' try: return len(self[id]) except KeyError: return -1 # SEQUENCE OBJECT DOES NOT EXIST def getSeqLenDict(self): 'return seqLenDict over XMLRPC' d = {} for k, v in self.seqLenDict.items(): d[k] = v[0], str(v[1]) # CONVERT TO STR TO ALLOW OFFSET>2GB return d # XML-RPC CANNOT HANDLE INT > 2 GB, SO FORCED TO CONVERT... def get_db_size(self): return len(self) def get_strslice(self, id, start, stop): '''return string sequence for specified interval in the specified sequence''' if start < 0: # HANDLE NEGATIVE ORIENTATION return str((-(self[id]))[-stop:-start]) else: # POSITIVE ORIENTATION return str(self[id][start:stop]) def get_seqtype(self): return self._seqtype class XMLRPCSequence(SequenceBase): "Represents a sequence in a blast database, accessed via XMLRPC" def __init__(self, db, id): self.length = db.server.getSeqLen(id) if self.length <= 0: raise KeyError('%s not in this database' % id) self.id = id SequenceBase.__init__(self) def strslice(self, start, end, useCache=True): "XMLRPC access to slice of a sequence" if useCache: try: return self.db.strsliceCache(self, start, end) except IndexError: # NOT FOUND IN CACHE pass # JUST USE OUR REGULAR XMLRPC METHOD # Get from XMLRPC. return self.db.server.get_strslice(self.id, start, end) def __len__(self): return self.length class XMLRPCSeqLenDescr(object): 'descriptor that returns dictionary of remote server seqLenDict' def __init__(self, attr): self.attr = attr def __get__(self, obj, objtype): '''only called if attribute does not already exist. Saves result as attribute''' d = obj.server.getSeqLenDict() for k, v in d.items(): d[k] = v[0], int(v[1]) # CONVERT OFFSET STR BACK TO INT obj.__dict__[self.attr] = d # PROVIDE DIRECTLY TO THE __dict__ return d class XMLRPCSequenceDB(SequenceDB): 'XMLRPC client: access sequence database over XMLRPC' itemClass = XMLRPCSequence # sequence storage interface seqLenDict = XMLRPCSeqLenDescr('seqLenDict') # INTERFACE TO SEQLENDICT def __init__(self, url, name, *args, **kwargs): import coordinator self.server = coordinator.get_connection(url, name) self.url = url self.name = name self.seqInfoDict = _SeqLenDictWrapper(self) SequenceDB.__init__(self, *args, **kwargs) def __reduce__(self): # provided only for compatibility w/ 0.7 clients return (classutil.ClassicUnpickler, (self.__class__, self.__getstate__())) def __getstate__(self): # DO NOT pickle self.itemClass! We provide our own. return dict(url=self.url, name=self.name) # just need XMLRPC info def __len__(self): return self.server.get_db_size() def __contains__(self, k): if self.server.getSeqLen(k)>0: return True else: return False def _set_seqtype(self): 'efficient way to determine sequence type of this database' try: # if already known, no need to do anything return self._seqtype except AttributeError: self._seqtype = self.server.get_seqtype() return self._seqtype PK7“;Îk!ˆ Û Ûpygr/seqdb.pyc;ò |†Kc@s‘dZdklZdkZdkZdkZdkZdkTdkTdk Z dk l Z l Z l Z lZlZdkZdkZdklZdefd„ƒYZdeeifd „ƒYZd efd „ƒYZd efd „ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdeeifd„ƒYZdefd„ƒYZdefd„ƒYZ e!dd„Z"defd„ƒYZ#deeifd„ƒYZ$d eeifd!„ƒYZ%d"e#fd#„ƒYZ&d$e%fd%„ƒYZ'd&eeifd'„ƒYZ(d(efd)„ƒYZ)d*e)fd+„ƒYZ*d,efd-„ƒYZ+d.efd/„ƒYZ,d0efd1„ƒYZ-dS(2sî seqdb contains a set of classes for interacting with sequence databases. Primary sequence database classes: - SequenceDB - base class for sequence databases - SequenceFileDB - file-based sequence database - PrefixUnionDict - container to combine multiple sequence databases - XMLRPCSequenceDB - XML-RPC-accessible sequence database Extensions: - SeqPrefixUnionDict - extends PrefixUnionDict to automatically add seqs - BlastDB - implements NCBI-style name munging for lookups Associated sequence classes: - FileDBSequence - sequence associated with a SequenceFileDB - XMLRPCSequence - sequence associated with a XMLRPCSequenceDB ---- SequenceDB provides some basic behaviors for sequence databases: dictionary behavior, an invert operator interface, and caching for both sequence objects and sequence intervals. It also relies on a 'seqInfoDict' attribute to contain summary information about sequences, so that e.g. slice operations can be done without loading the entire sequence into memory. (See below for more info on seqInfoDict.) SequenceFileDB extends SequenceDB to contain a file-based database of sequences. It constructs a seqLenDict that allows direct on-disk lookup of sequence intervals. (See below for more info on seqLenDict.) PrefixUnionDict provides a unified SequenceDB-like interface to a collection of sequence databases by combining the database name with the sequence ID into a new sequence id. For example, the ID 'genome.chrI' would return the sequence 'chrI' in the 'genome' database. This is particularly handy for situations where you want to have seqdbs of multiple sequence types (DNA, protein, annotations, etc.) all associated together. @CTB document XMLRPCSequenceDB. @CTB document SeqPrefixUnionDict. @CTB document BlastDB. ---- The seqInfoDict interface ------------------------- The seqInfoDict attribute of a SequenceDB is a dictionary-like object, keyed by sequence IDs, with associated values being an information object containing various attributes. seqInfoDict is essentially an optimization that permits other pygr-aware components to access information *about* sequences without actually loading the entire sequence. The only required attribute at the moment is 'length', which is required by some of the NLMSA code. However, seqInfoDict is a good mechanism for the storage of any summary information on a sequence, and so it may be expanded in the future. The seqLenDict interface ------------------------ The seqLenDict attribute is specific to a SequenceFileDB, where it provides a file-backed storage of length and offset sequence metadata. It is used to implement a key optimization in SequenceFileDB, in which a sequence's offset within a file is used to read only the required part of the sequence into memory. This optimization is particularly important for large sequences, e.g. chromosomes, where reading the entire sequence into memory shouldn't be done unless it's necessary. The seqLenDict is keyed by sequence ID and the associated values are a 2-tuple (length, offset), where the offset indicates the byte offset within the '.pureseq' index file created for each SequenceFileDB. get_bound_subclass and the 'self.db' attribute ---------------------------------------------- The SequenceDB constructor calls classutil.get_bound_subclass on its itemClass. What does that do, and what is it for? get_bound_subclass takes an existing class, makes a new subclass of it, binds the variable 'db' to it, and then calls the _init_subclass classmethod (if it exists) on the new class. This has the effect of creating a new class for each SequenceDB instance, tied specifically to that instance and initialized by the _init_subclass method. The main effect of this for SequenceDBs is that for any SequenceDB descendant, the '.db' attribute is automatically set for each Sequence retrieved from the database. CTB: I think this is an optimization? Caching ------- @CTB discuss caching. Pickling sequence databases and sequences ----------------------------------------- @CTB document pickling issues. programmer notes: extending SequenceDB - seqInfoDict, itemclass extending SequenceFileDB - seqLenDict - using your own itemclass - using your own reader doctests & examples ------------------- update docs for these classes! intro: - loading a FASTA file - using a PUD + combining dbs, etc. + inverse Code review issues, short term: - @CTB get_bound_subclass stuff refers directly to itemClass to set 'db'. - @CTB fix 'import *'s - @CTB run lint/checker? - @CTB test _create_seqLenDict - @CTB XMLRPCSequenceDB vs SequenceFileDB Some long term issues: - it should be possible to remove _SeqLenDictSaver and just combine its functionality with _store_seqlen_dict. --titus 3/21/09 (s generatorsN(s*(s AnnotationDBs AnnotationSeqsAnnotationSlicesAnnotationServersAnnotationClient(sNoSuchFileErrors_SequenceDBInversecBs)tZdZd„Zd„Zd„ZRS(sAImplements __inverse__ on SequenceDB objects, returning seq name.cCs ||_dS(N(sdbsself(sselfsdb((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__init__§scCs|iiSdS(N(sseqs pathForwardsid(sselfsseq((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys __getitem__ªscCs5y|ii|ijSWntj o tSnXdS(N(sseqs pathForwardsdbsselfsAttributeErrorsFalse(sselfsseq((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys __contains__­s(s__name__s __module__s__doc__s__init__s __getitem__s __contains__(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys_SequenceDBInverse¤s   s SequenceDBcBsñtZdZeZeZeiZ ei Z e ddƒZ eieƒZeed„Zd„Zd„ZdZd„Zd„Zd „Zd „Zd „Zd „Zd „Zd„Zd„Zd„Zd„Z ei!Z"Z#Z$Z%Z&Z'RS(sÏBase class for sequence databases. SequenceDB provides a few basic (base) behaviors: - dict-like interface to sequence objects each with an ID - the ~ (invert) operator returns an 'inverted' database, which is a dict-like object that returns sequence names when given a sequence. - weakref-based automatic flushing of seq objects no longer in use; use autoGC=0 to turn this off. - cacheHint() system for caching a given set of sequence intervals associated with an owner object, which are flushed from cache if the owner object is garbage-collected. For subclassing, note that self.seqInfoDict must be set before SequenceDB.__init__ is called! sautoGCicKs¼|oti|ƒ|_n h|_||_|id|iƒ|_|id|iƒ|_|it jot dƒ‚n|i ƒ}||d(sselfs __class__s__name__s itemClass(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__repr__LscCs|iiƒdS(sEmpty the cache.N(sselfs_weakValueDictsclear(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys clear_cachePs((s__name__s __module__s__doc__sNones itemClasss SeqDBSlicesitemSliceClasss classutilsstandard_getstates __getstate__sstandard_setstates __setstate__sdicts _pickleAttrsslazy_create_inverts_SequenceDBInverses __invert__sTrues__init__s__hash__s _set_seqtypes _cache_maxs cacheHints strsliceCachescloses__iter__s iteritemss__len__s __getitem__skeyss __contains__s__repr__s clear_cachesread_only_errorsclears setdefaultspopspopitemscopysupdate(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys SequenceDB´s.               s_FileDBSeqDescriptorcBstZdZd„ZRS(s7Descriptor to retrieve entire sequence from seqLenDict.cCs+|ii|id}|id|ƒSdS(Ni(sobjsdbs seqLenDictsidslengthsstrslice(sselfsobjsobjtypeslength((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__get__as(s__name__s __module__s__doc__s__get__(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys_FileDBSeqDescriptor^s sFileDBSequencecBs>tZdZeƒZeiZd„Zd„Z e d„Z RS(s‡Default sequence object for file-based storage mechanism. See SequenceFileDB for the associated database class. In general, you should not create objects from this class directly; retrieve them from SequenceFileDB objects, instead. NOTE: 'self.db' is attached to all instances of this class that come from a particular database by 'classutil.get_bound_subclass'. cCsP||_ti|ƒ|i|iijo td|i|ifƒ‚ndS(Nssequence %s not in db %s(sidsselfs SequenceBases__init__sdbs seqLenDictsKeyError(sselfsdbsid((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__init__us  cCs|ii|idSdS(s2Unpack this sequence's length from the seqLenDict.iN(sselfsdbs seqLenDictsid(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__len__{scCsX|o4y|ii|||ƒSWq;tj oq;Xn|ii|i||ƒSdS(s>Access slice of a sequence efficiently, using seqLenDict info.N( suseCachesselfsdbs strsliceCachesstartsends IndexErrorsstrslicesid(sselfsstartsendsuseCache((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysstrslices ( s__name__s __module__s__doc__s_FileDBSeqDescriptorsseqs classutils item_reducers __reduce__s__init__s__len__sTruesstrslice(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysFileDBSequencefs     sSequenceFileDBcBsctZdZeZeiiƒZded|iiƒy|ii}Wntj on X|ƒdS(s0close our open shelve index file and _pureseq...N(sselfs seqLenDictscloses_pureseqsdo_closesAttributeError(sselfsdo_close((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysclose³s cCsd|ii|ifSdS(Ns <%s '%s'>(sselfs __class__s__name__sfilepath(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__repr__½scCsUti|dƒ}z!tidƒt|||ƒWd|i ƒXti|dƒSdS(s;Create a seqLenDict from 'seqpath' and store in 'dictpath'.sns!Building sequence length index...Nsr( s classutils open_shelvesdictpaths seqLenDictsloggersdebugs_store_seqlen_dictsseqpathsreadersclose(sselfsdictpathsseqpathsreaders seqLenDict((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys_create_seqLenDictÀs  cCsy |i}Wn8tj o,|id}t|dƒ}||_nX|i|d}|i ||ƒ|i ||ƒSdS(s>Access slice of a sequence efficiently, using seqLenDict info.s.pureseqsrbiN(sselfs_pureseqsifilesAttributeErrorsfilepathsfullpathsfiles seqLenDictsseqIDsoffsetsseeksstartsreadsend(sselfsseqIDsstartsendsuseCachesifilesoffsetsfullpath((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysstrsliceÊs  (s__name__s __module__s__doc__sFileDBSequences itemClasss SequenceDBs _pickleAttrsscopysNones__init__scloses__repr__s_create_seqLenDictsTruesstrslice(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysSequenceFileDBŠs     s BasicSeqInfocBstZdZed„ZRS(s‘Wrapper to provide the correct seqInfoDict-style object information. This boils down to providing id, db, length, and possibly offset. cCsC||_||_|tjot||ƒ|_n ||_dS(N(sseqIDsselfsidsseqDBsdbslengthsNoneslen(sselfsseqIDsseqDBslength((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__init__äs    (s__name__s __module__s__doc__sNones__init__(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys BasicSeqInfoÝs s _SeqLenObjectcBstZdZd„ZRS(s"Wrapper for use with a seqLenDict cCs0|i|\}|_ti||||ƒdS(N(sseqDBs seqLenDictsseqIDslengthsselfsoffsets BasicSeqInfos__init__(sselfsseqIDsseqDBslength((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__init__ðs(s__name__s __module__s__doc__s__init__(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys _SeqLenObjectís sBasicSeqInfoDictcBsAtZdZeZd„Zd„Zd„Zd„Zd„Z RS(s—Wrapper around SequenceDB.seqLenDict to provide seqInfoDict behavior. This basic version just gets the length from the sequence object itself. cCs ||_dS(N(sdbsselfsseqDB(sselfsdb((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__init__ûscCs|i||iƒSdS(N(sselfs itemClasssksseqDB(sselfsk((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys __getitem__þscCst|iiƒSdS(N(slensselfsseqDBs seqLenDict(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__len__scCst|iiƒSdS(N(sitersselfsseqDBs seqLenDict(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__iter__scCs|iiiƒSdS(N(sselfsseqDBs seqLenDictskeys(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pyskeyss( s__name__s __module__s__doc__s BasicSeqInfos itemClasss__init__s __getitem__s__len__s__iter__skeys(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysBasicSeqInfoDictõs     s_SeqLenDictWrappercBstZdZeZRS(s The default storage mechanism for sequences implemented by FileDBSequence and SequenceFileDB puts everything in seqLenDict, a shelve index of lengths and offsets. This class wraps that dictionary to provide the interface that SequenceDB expects to see. (s__name__s __module__s__doc__s _SeqLenObjects itemClass(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys_SeqLenDictWrapper s s_SeqLenDictSavercBs tZdZd„Zd„ZRS(s°Support for generic reading functions, called by _store_seqlen_dict. This allows you to specify your own 'reader' function when constructing a FileSequenceDB, e.g. so that you could read something other than FASTA files into a seqLenDict. Pass in this function as the 'reader' kwarg to FileSequenceDB. Custom reader functions should take a file handle and a filename, and return a list of sequence info objects with 'id', 'length', and 'sequence' attributes for each sequence in the given file/filename. _SeqLenDictSaver will then construct a '.pureseq' file containing the concatenated sequences and fill in the seqLenDict appropriately. cCs ||_dS(N(sreadersself(sselfsreader((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__init__'scCs¸d}t|ddƒ}zx†|i||ƒD]r}|i|f||i <||i7}|it |i ƒjo t d|i |ifƒ‚n|i|i ƒq/WWd|iƒXdS(Nls.pureseqswbs%length does not match sequence: %s,%d(soffsetsfilesfilenames pureseq_fpsselfsreadersifilesoslengthsdsidslenssequences ValueErrorswritesclose(sselfsdsifilesfilenamesosoffsets pureseq_fp((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__call__*s  (s__name__s __module__s__doc__s__init__s__call__(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys_SeqLenDictSavers  srUcCs[ti}|tj ot|ƒ}nt||ƒ}z||||ƒWd|i ƒXdS(s’Store sequence lengths in a dictionary, e.g. a seqLenDict. Used by SequenceFileDB._create_seqLenDict. The 'reader' function implements a custom sequence format reader; by default, _store_seqlen_dict uses seqfmt.read_fasta_lengths, which reads FASTA-format files. See _SeqLenDictSaver for information on building a custom 'reader', and see the seqdb docs for an example. N( sseqfmtsread_fasta_lengthssbuildersreadersNones_SeqLenDictSaversfilesfilenamesmodesifilesdsclose(sdsfilenamesreadersmodesbuildersifile((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys_store_seqlen_dict:s   s_PrefixUnionDictInversecBs)tZdZd„Zd„Zd„ZRS(sëProvide inverse (~) operator behavior for PrefixUnionDicts. This enables ~pud to return a database that, given a sequence object, returns the corresponding key (prefix.id) to retrieve that sequence object in the pud. cCs ||_dS(N(sdbsself(sselfsdb((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__init__`scCs§|i}y|ii|i}Wnetj oYy0|iii|iijotdƒ‚nWnt j onXtdƒ‚nX||ii t |i ƒSdS(Nspthis annotation is not in the PrefixUnion, but its sequence is. You can get that using its 'sequence' attribute.sseq.db not in PrefixUnionDict( sivals pathForwardsseqsselfsdbsdictssprefixsKeyErrors _anno_seqsAttributeErrors separatorsstrsid(sselfsivalsseqsprefix((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys __getitem__cs cCs8y|ii|iijSWntj o tSnXdS(N(sseqs pathForwardsdbsselfsdictssAttributeErrorsFalse(sselfsseq((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys __contains__ts(s__name__s __module__s__doc__s__init__s __getitem__s __contains__(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys_PrefixUnionDictInverseWs   s_PrefixUnionMemberDictcBsAtZdZed„d„Zd„ZeZd„Zd„ZRS(sž @CTB confusing/inappropriate use of a dict interface! keep?? @CTB document. 'd[prefix]=value; d[k] returns value if k is a member of prefix' cCs |iiS(N(sxs pathForwardsdb(sx((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysƒscCs9h|_||_||_|tj o ||_ndS(N(sselfsvaluesspuDicts attrMethods _attrMethodsdefaultsNone(sselfspuDictsdefaults attrMethod((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__init__‚s     cCs|iiiƒSdS(N(sselfspuDicts prefixDictskeys(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pyskeysŠscCsH||iijotd|ƒ‚n|ii|}||i| trypaths? s.cCs±|tj o,|otdƒ‚n|tjotii|ƒg}nt|dƒ} zÎt | ƒ}|i ƒi dƒ}h}x |D]˜} | i ƒidƒd \}} y"ti| |ƒ}||ƒ} WnDtj o8x|iƒD]} | iƒqïWtd| ƒ‚qŠX| |||iiƒD]-\}}x|D]}|i||ƒVq#WqWdS(N(sselfs prefixDictsitemsspsdsids format_id(sselfspsdsid((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__iter__.s  cCst|iƒƒSdS(N(slistsselfsiterkeys(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pyskeys3scCst|ƒSdS(N(sitersself(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysiterkeys6sccsWxP|iiƒD]?\}}x0|iƒD]"\}}|i||ƒ|fVq)WqWdS(N( sselfs prefixDictsitemsspsds iteritemssidsseqs format_id(sselfspsdsseqsid((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys iteritems9s   cCs)|i}|i|i|i|iSdS(sAFor a given sequence, return a fully qualified name, 'prefix.id'.N(sivals pathForwardsseqsselfsdictssdbs separatorsid(sselfsivalsseq((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysgetName>s cKst||SdS(s&return a new member dictionary (empty)N(s_PrefixUnionMemberDictsselfskwargs(sselfskwargs((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys newMemberDictCscCs‹t|dƒ}||iIJx^|iiƒD]M\}}y|d||i fIJWq,t j ot d|ƒ‚q,Xq,W|i ƒdS(s3Save a header file, suitable for later re-creation.sws%s %sseseq db '%s' has no filepath; you may be able to save this to worldbase, but not to a text HeaderFile!N( sfilesfilenamesifilesselfs separators prefixDictsitemssksvsfilepathsAttributeErrorsclose(sselfsfilenamesifilesksv((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pyswriteHeaderFileGs  cCs2d}x!|iD]}|t|ƒ7}qW|SdS(Ni(snsselfsdictssdbslen(sselfsdbsn((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__len__Ts  c Cs¦h}xE|iƒD]7\}} |i|ƒ\}}| |i |hƒ|tj o2d|ii|ii}|i|}|SnXdS(s:Find in or add the given sequence to the inverse of a PUD.suserN( s_PrefixUnionDictInverses __getitem__sselfsseqsAttributeErrorsdbs separators pathForwardsidsnew_ids_(sselfsseqsnew_ids_((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysgetNamews cCs\y|i|ƒSWnDtj o8|ii o‚n|i|7_|i|ƒSnXdS(s)__getitem__ interface that calls getName.N(sselfsgetNamesseqsKeyErrorsdbsaddAll(sselfsseq((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys __getitem__s(s__name__s __module__s__doc__sgetNames __getitem__(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys_PrefixDictInverseAdderqs  sSeqPrefixUnionDictcBs;tZdZeieƒZed„Zd„Z d„Z RS(sìSeqPrefixUnionDict provides += functionality to add seqs to a PUD. See the __iadd__ method for details. If addAll is True, then looking a sequence up in the inverse db will automatically add it to the PrefixUnionDict. cKsti||||_dS(N(sPrefixUnionDicts__init__sselfskwargssaddAll(sselfsaddAllskwargs((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__init__™scCs–||jo|Snt|dtƒ}|tjot|idtƒ}n|tjoUd|ijotƒ}|i d|ƒn|id}|i||ii <|Sn||i jo|Sny|i i dƒd}Wn™tj ot|dtƒ}|o)tii|ƒ}|i dƒd}ndt|i ƒ}||ijo!tidt ƒtd ƒ‚q~nX|i ||ƒ|Sd S( spAdd a sequence or database to the PUD, with a unique prefix. NOTE: __iadd__ must return self. sdbsusers.iÿÿÿÿsfilepathisnoname%dsv It appears that two different sequence databases are being assigned the same prefix ("%s"). For this reason, the attempted automatic construction of a PrefixUnionDict for you cannot be completed! You should instead construct a PrefixUnionDict that assigns a unique prefix to each sequence database, and supply it directly as the seqDict argument to the NLMSA constructor.s.cannot automatically construct PrefixUnionDictN(sksselfsgetattrsNonesdbs pathForwards prefixDictsKeepUniqueDictsds_add_prefix_dictsidsdictss_persistent_idssplitsnamesAttributeErrorsosspathsbasenameslensloggersdebugs ValueError(sselfsksdsdbsname((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__iadd__ s8    cCs||i|<||i|(sselfsfilepath(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__repr__ssblastallf0.001sc Ks2|iƒ} | ||||||||| SdS(s?run blast with the specified parameters, return NLMSA alignmentN( sselfsformatdbsblastmapsseqsals blastpaths blastprogsexpmaxsmaxseqsverbosesoptsskwargs( sselfsseqsals blastpaths blastprogsexpmaxsmaxseqsverbosesoptsskwargssblastmap((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysblasts s megablastf9.9999999999999995e-21s -U T -F ms RepeatMaskers-xsmallc  KsTdkl} |iddd| ƒ}|||||||||| | | | SdS(sCrun megablast with the specified parameters, return NLMSA alignment(sMegablastMappingsattrs megablastMapsmapClassN(sblastsMegablastMappingsselfsformatdbsblastmapsseqsals blastpathsexpmaxsmaxseqs minIdentitysmaskOptssrmPathsrmOptssverbosesoptsskwargs(sselfsseqsals blastpathsexpmaxsmaxseqs minIdentitysmaskOptssrmPathsrmOptssverbosesoptsskwargssMegablastMappingsblastmap((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys megablast#s    sblastMapcCs~yt||ƒ}WnStj oG|tjodkl}|}n||ƒ}t |||ƒnX|i |ƒ|SdS(sAcreate a blast mapping object if needed, and ensure it is indexed(s BlastMappingN( sgetattrsselfsattrsblastmapsAttributeErrorsmapClasssNonesblasts BlastMappingssetattrsformatdbsfilepath(sselfsfilepathsattrsmapClasss BlastMappingsblastmap((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysformatdb.s     ( s__name__s __module__s__doc__s __reduce__sNonesFalses__init__s__repr__sTruesblasts megablastsformatdb(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysBlastDBs   ' s BlastDBXMLRPCc BshtZdZeddddddddddddƒZd„Zd „Zd „Zd „Zd „Z RS( s/XMLRPC server wrapper around a standard BlastDBs getSeqLenis get_strslices getSeqLenDicts get_db_sizes get_seqtypesstrslicecCs0yt||ƒSWntj o dSnXdS(s'get sequence length, or -1 if not foundiÿÿÿÿN(slensselfsidsKeyError(sselfsid((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys getSeqLenBs cCsLh}x;|iiƒD]*\}}|dt|dƒf||Represents a sequence in a blast database, accessed via XMLRPCcCsS|ii|ƒ|_|idjotd|ƒ‚n||_ti|ƒdS(Nis%s not in this database( sdbsservers getSeqLensidsselfslengthsKeyErrors SequenceBases__init__(sselfsdbsid((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__init__bs  cCs[|o4y|ii|||ƒSWq;tj oq;Xn|iii|i ||ƒSdS(s$XMLRPC access to slice of a sequenceN( suseCachesselfsdbs strsliceCachesstartsends IndexErrorsservers get_strslicesid(sselfsstartsendsuseCache((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysstrsliceis cCs |iSdS(N(sselfslength(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__len__ss(s__name__s __module__s__doc__s__init__sTruesstrslices__len__(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysXMLRPCSequence_s   sXMLRPCSeqLenDescrcBs tZdZd„Zd„ZRS(s>descriptor that returns dictionary of remote server seqLenDictcCs ||_dS(N(sattrsself(sselfsattr((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__init__zscCsb|iiƒ}x8|iƒD]*\}}|dt|dƒf||y |iSWn,tj o |iiƒ|_|iSnXdS(s9efficient way to determine sequence type of this databaseN(sselfs_seqtypesAttributeErrorsservers get_seqtype(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys _set_seqtype¤s  ( s__name__s __module__s__doc__sXMLRPCSequences itemClasssXMLRPCSeqLenDescrs seqLenDicts__init__s __reduce__s __getstate__s__len__s __contains__s _set_seqtype(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysXMLRPCSequenceDB‡s       (.s__doc__s __future__s generatorsssyssossUserDictsweakrefssequencessqlgraphs classutils annotations AnnotationDBs AnnotationSeqsAnnotationSlicesAnnotationServersAnnotationClientsloggersseqfmtsdbfilesNoSuchFileErrorsobjects_SequenceDBInverses DictMixins SequenceDBs_FileDBSeqDescriptors SequenceBasesFileDBSequencesSequenceFileDBs BasicSeqInfos _SeqLenObjectsBasicSeqInfoDicts_SeqLenDictWrappers_SeqLenDictSaversNones_store_seqlen_dicts_PrefixUnionDictInverses_PrefixUnionMemberDictsPrefixUnionDicts_PrefixDictInverseAddersSeqPrefixUnionDicts_PUDSeqInfoDictsBlastDBs BlastDBXMLRPCsXMLRPCSequencesXMLRPCSeqLenDescrsXMLRPCSequenceDB($s _SeqLenObjects_store_seqlen_dictsAnnotationSlicesNoSuchFileErrors BlastDBXMLRPCsseqfmts_FileDBSeqDescriptors generatorssXMLRPCSequenceDBsloggersBasicSeqInfoDictsXMLRPCSeqLenDescrsBlastDBsSequenceFileDBs_SequenceDBInverses classutilsPrefixUnionDictsXMLRPCSequencesUserDicts_PrefixDictInverseAdderssyss SequenceDBs_SeqLenDictSaversFileDBSequences_PrefixUnionDictInverses_PrefixUnionMemberDicts_SeqLenDictWrappersSeqPrefixUnionDicts BasicSeqInfos_PUDSeqInfoDictsAnnotationServers AnnotationSeqsAnnotationClients AnnotationDBsweakrefsos((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys?ŒsD      %   ª$S $$)ÍO+4#PK7“;Îk!ˆ Û Ûpygr/seqdb.pyo;ò |†Kc@s‘dZdklZdkZdkZdkZdkZdkTdkTdk Z dk l Z l Z l Z lZlZdkZdkZdklZdefd„ƒYZdeeifd „ƒYZd efd „ƒYZd efd „ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdeeifd„ƒYZdefd„ƒYZdefd„ƒYZ e!dd„Z"defd„ƒYZ#deeifd„ƒYZ$d eeifd!„ƒYZ%d"e#fd#„ƒYZ&d$e%fd%„ƒYZ'd&eeifd'„ƒYZ(d(efd)„ƒYZ)d*e)fd+„ƒYZ*d,efd-„ƒYZ+d.efd/„ƒYZ,d0efd1„ƒYZ-dS(2sî seqdb contains a set of classes for interacting with sequence databases. Primary sequence database classes: - SequenceDB - base class for sequence databases - SequenceFileDB - file-based sequence database - PrefixUnionDict - container to combine multiple sequence databases - XMLRPCSequenceDB - XML-RPC-accessible sequence database Extensions: - SeqPrefixUnionDict - extends PrefixUnionDict to automatically add seqs - BlastDB - implements NCBI-style name munging for lookups Associated sequence classes: - FileDBSequence - sequence associated with a SequenceFileDB - XMLRPCSequence - sequence associated with a XMLRPCSequenceDB ---- SequenceDB provides some basic behaviors for sequence databases: dictionary behavior, an invert operator interface, and caching for both sequence objects and sequence intervals. It also relies on a 'seqInfoDict' attribute to contain summary information about sequences, so that e.g. slice operations can be done without loading the entire sequence into memory. (See below for more info on seqInfoDict.) SequenceFileDB extends SequenceDB to contain a file-based database of sequences. It constructs a seqLenDict that allows direct on-disk lookup of sequence intervals. (See below for more info on seqLenDict.) PrefixUnionDict provides a unified SequenceDB-like interface to a collection of sequence databases by combining the database name with the sequence ID into a new sequence id. For example, the ID 'genome.chrI' would return the sequence 'chrI' in the 'genome' database. This is particularly handy for situations where you want to have seqdbs of multiple sequence types (DNA, protein, annotations, etc.) all associated together. @CTB document XMLRPCSequenceDB. @CTB document SeqPrefixUnionDict. @CTB document BlastDB. ---- The seqInfoDict interface ------------------------- The seqInfoDict attribute of a SequenceDB is a dictionary-like object, keyed by sequence IDs, with associated values being an information object containing various attributes. seqInfoDict is essentially an optimization that permits other pygr-aware components to access information *about* sequences without actually loading the entire sequence. The only required attribute at the moment is 'length', which is required by some of the NLMSA code. However, seqInfoDict is a good mechanism for the storage of any summary information on a sequence, and so it may be expanded in the future. The seqLenDict interface ------------------------ The seqLenDict attribute is specific to a SequenceFileDB, where it provides a file-backed storage of length and offset sequence metadata. It is used to implement a key optimization in SequenceFileDB, in which a sequence's offset within a file is used to read only the required part of the sequence into memory. This optimization is particularly important for large sequences, e.g. chromosomes, where reading the entire sequence into memory shouldn't be done unless it's necessary. The seqLenDict is keyed by sequence ID and the associated values are a 2-tuple (length, offset), where the offset indicates the byte offset within the '.pureseq' index file created for each SequenceFileDB. get_bound_subclass and the 'self.db' attribute ---------------------------------------------- The SequenceDB constructor calls classutil.get_bound_subclass on its itemClass. What does that do, and what is it for? get_bound_subclass takes an existing class, makes a new subclass of it, binds the variable 'db' to it, and then calls the _init_subclass classmethod (if it exists) on the new class. This has the effect of creating a new class for each SequenceDB instance, tied specifically to that instance and initialized by the _init_subclass method. The main effect of this for SequenceDBs is that for any SequenceDB descendant, the '.db' attribute is automatically set for each Sequence retrieved from the database. CTB: I think this is an optimization? Caching ------- @CTB discuss caching. Pickling sequence databases and sequences ----------------------------------------- @CTB document pickling issues. programmer notes: extending SequenceDB - seqInfoDict, itemclass extending SequenceFileDB - seqLenDict - using your own itemclass - using your own reader doctests & examples ------------------- update docs for these classes! intro: - loading a FASTA file - using a PUD + combining dbs, etc. + inverse Code review issues, short term: - @CTB get_bound_subclass stuff refers directly to itemClass to set 'db'. - @CTB fix 'import *'s - @CTB run lint/checker? - @CTB test _create_seqLenDict - @CTB XMLRPCSequenceDB vs SequenceFileDB Some long term issues: - it should be possible to remove _SeqLenDictSaver and just combine its functionality with _store_seqlen_dict. --titus 3/21/09 (s generatorsN(s*(s AnnotationDBs AnnotationSeqsAnnotationSlicesAnnotationServersAnnotationClient(sNoSuchFileErrors_SequenceDBInversecBs)tZdZd„Zd„Zd„ZRS(sAImplements __inverse__ on SequenceDB objects, returning seq name.cCs ||_dS(N(sdbsself(sselfsdb((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__init__§scCs|iiSdS(N(sseqs pathForwardsid(sselfsseq((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys __getitem__ªscCs5y|ii|ijSWntj o tSnXdS(N(sseqs pathForwardsdbsselfsAttributeErrorsFalse(sselfsseq((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys __contains__­s(s__name__s __module__s__doc__s__init__s __getitem__s __contains__(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys_SequenceDBInverse¤s   s SequenceDBcBsñtZdZeZeZeiZ ei Z e ddƒZ eieƒZeed„Zd„Zd„ZdZd„Zd„Zd „Zd „Zd „Zd „Zd „Zd„Zd„Zd„Zd„Z ei!Z"Z#Z$Z%Z&Z'RS(sÏBase class for sequence databases. SequenceDB provides a few basic (base) behaviors: - dict-like interface to sequence objects each with an ID - the ~ (invert) operator returns an 'inverted' database, which is a dict-like object that returns sequence names when given a sequence. - weakref-based automatic flushing of seq objects no longer in use; use autoGC=0 to turn this off. - cacheHint() system for caching a given set of sequence intervals associated with an owner object, which are flushed from cache if the owner object is garbage-collected. For subclassing, note that self.seqInfoDict must be set before SequenceDB.__init__ is called! sautoGCicKs¼|oti|ƒ|_n h|_||_|id|iƒ|_|id|iƒ|_|it jot dƒ‚n|i ƒ}||d(sselfs __class__s__name__s itemClass(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__repr__LscCs|iiƒdS(sEmpty the cache.N(sselfs_weakValueDictsclear(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys clear_cachePs((s__name__s __module__s__doc__sNones itemClasss SeqDBSlicesitemSliceClasss classutilsstandard_getstates __getstate__sstandard_setstates __setstate__sdicts _pickleAttrsslazy_create_inverts_SequenceDBInverses __invert__sTrues__init__s__hash__s _set_seqtypes _cache_maxs cacheHints strsliceCachescloses__iter__s iteritemss__len__s __getitem__skeyss __contains__s__repr__s clear_cachesread_only_errorsclears setdefaultspopspopitemscopysupdate(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys SequenceDB´s.               s_FileDBSeqDescriptorcBstZdZd„ZRS(s7Descriptor to retrieve entire sequence from seqLenDict.cCs+|ii|id}|id|ƒSdS(Ni(sobjsdbs seqLenDictsidslengthsstrslice(sselfsobjsobjtypeslength((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__get__as(s__name__s __module__s__doc__s__get__(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys_FileDBSeqDescriptor^s sFileDBSequencecBs>tZdZeƒZeiZd„Zd„Z e d„Z RS(s‡Default sequence object for file-based storage mechanism. See SequenceFileDB for the associated database class. In general, you should not create objects from this class directly; retrieve them from SequenceFileDB objects, instead. NOTE: 'self.db' is attached to all instances of this class that come from a particular database by 'classutil.get_bound_subclass'. cCsP||_ti|ƒ|i|iijo td|i|ifƒ‚ndS(Nssequence %s not in db %s(sidsselfs SequenceBases__init__sdbs seqLenDictsKeyError(sselfsdbsid((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__init__us  cCs|ii|idSdS(s2Unpack this sequence's length from the seqLenDict.iN(sselfsdbs seqLenDictsid(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__len__{scCsX|o4y|ii|||ƒSWq;tj oq;Xn|ii|i||ƒSdS(s>Access slice of a sequence efficiently, using seqLenDict info.N( suseCachesselfsdbs strsliceCachesstartsends IndexErrorsstrslicesid(sselfsstartsendsuseCache((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysstrslices ( s__name__s __module__s__doc__s_FileDBSeqDescriptorsseqs classutils item_reducers __reduce__s__init__s__len__sTruesstrslice(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysFileDBSequencefs     sSequenceFileDBcBsctZdZeZeiiƒZded|iiƒy|ii}Wntj on X|ƒdS(s0close our open shelve index file and _pureseq...N(sselfs seqLenDictscloses_pureseqsdo_closesAttributeError(sselfsdo_close((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysclose³s cCsd|ii|ifSdS(Ns <%s '%s'>(sselfs __class__s__name__sfilepath(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__repr__½scCsUti|dƒ}z!tidƒt|||ƒWd|i ƒXti|dƒSdS(s;Create a seqLenDict from 'seqpath' and store in 'dictpath'.sns!Building sequence length index...Nsr( s classutils open_shelvesdictpaths seqLenDictsloggersdebugs_store_seqlen_dictsseqpathsreadersclose(sselfsdictpathsseqpathsreaders seqLenDict((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys_create_seqLenDictÀs  cCsy |i}Wn8tj o,|id}t|dƒ}||_nX|i|d}|i ||ƒ|i ||ƒSdS(s>Access slice of a sequence efficiently, using seqLenDict info.s.pureseqsrbiN(sselfs_pureseqsifilesAttributeErrorsfilepathsfullpathsfiles seqLenDictsseqIDsoffsetsseeksstartsreadsend(sselfsseqIDsstartsendsuseCachesifilesoffsetsfullpath((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysstrsliceÊs  (s__name__s __module__s__doc__sFileDBSequences itemClasss SequenceDBs _pickleAttrsscopysNones__init__scloses__repr__s_create_seqLenDictsTruesstrslice(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysSequenceFileDBŠs     s BasicSeqInfocBstZdZed„ZRS(s‘Wrapper to provide the correct seqInfoDict-style object information. This boils down to providing id, db, length, and possibly offset. cCsC||_||_|tjot||ƒ|_n ||_dS(N(sseqIDsselfsidsseqDBsdbslengthsNoneslen(sselfsseqIDsseqDBslength((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__init__äs    (s__name__s __module__s__doc__sNones__init__(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys BasicSeqInfoÝs s _SeqLenObjectcBstZdZd„ZRS(s"Wrapper for use with a seqLenDict cCs0|i|\}|_ti||||ƒdS(N(sseqDBs seqLenDictsseqIDslengthsselfsoffsets BasicSeqInfos__init__(sselfsseqIDsseqDBslength((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__init__ðs(s__name__s __module__s__doc__s__init__(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys _SeqLenObjectís sBasicSeqInfoDictcBsAtZdZeZd„Zd„Zd„Zd„Zd„Z RS(s—Wrapper around SequenceDB.seqLenDict to provide seqInfoDict behavior. This basic version just gets the length from the sequence object itself. cCs ||_dS(N(sdbsselfsseqDB(sselfsdb((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__init__ûscCs|i||iƒSdS(N(sselfs itemClasssksseqDB(sselfsk((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys __getitem__þscCst|iiƒSdS(N(slensselfsseqDBs seqLenDict(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__len__scCst|iiƒSdS(N(sitersselfsseqDBs seqLenDict(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__iter__scCs|iiiƒSdS(N(sselfsseqDBs seqLenDictskeys(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pyskeyss( s__name__s __module__s__doc__s BasicSeqInfos itemClasss__init__s __getitem__s__len__s__iter__skeys(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysBasicSeqInfoDictõs     s_SeqLenDictWrappercBstZdZeZRS(s The default storage mechanism for sequences implemented by FileDBSequence and SequenceFileDB puts everything in seqLenDict, a shelve index of lengths and offsets. This class wraps that dictionary to provide the interface that SequenceDB expects to see. (s__name__s __module__s__doc__s _SeqLenObjects itemClass(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys_SeqLenDictWrapper s s_SeqLenDictSavercBs tZdZd„Zd„ZRS(s°Support for generic reading functions, called by _store_seqlen_dict. This allows you to specify your own 'reader' function when constructing a FileSequenceDB, e.g. so that you could read something other than FASTA files into a seqLenDict. Pass in this function as the 'reader' kwarg to FileSequenceDB. Custom reader functions should take a file handle and a filename, and return a list of sequence info objects with 'id', 'length', and 'sequence' attributes for each sequence in the given file/filename. _SeqLenDictSaver will then construct a '.pureseq' file containing the concatenated sequences and fill in the seqLenDict appropriately. cCs ||_dS(N(sreadersself(sselfsreader((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__init__'scCs¸d}t|ddƒ}zx†|i||ƒD]r}|i|f||i <||i7}|it |i ƒjo t d|i |ifƒ‚n|i|i ƒq/WWd|iƒXdS(Nls.pureseqswbs%length does not match sequence: %s,%d(soffsetsfilesfilenames pureseq_fpsselfsreadersifilesoslengthsdsidslenssequences ValueErrorswritesclose(sselfsdsifilesfilenamesosoffsets pureseq_fp((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__call__*s  (s__name__s __module__s__doc__s__init__s__call__(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys_SeqLenDictSavers  srUcCs[ti}|tj ot|ƒ}nt||ƒ}z||||ƒWd|i ƒXdS(s’Store sequence lengths in a dictionary, e.g. a seqLenDict. Used by SequenceFileDB._create_seqLenDict. The 'reader' function implements a custom sequence format reader; by default, _store_seqlen_dict uses seqfmt.read_fasta_lengths, which reads FASTA-format files. See _SeqLenDictSaver for information on building a custom 'reader', and see the seqdb docs for an example. N( sseqfmtsread_fasta_lengthssbuildersreadersNones_SeqLenDictSaversfilesfilenamesmodesifilesdsclose(sdsfilenamesreadersmodesbuildersifile((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys_store_seqlen_dict:s   s_PrefixUnionDictInversecBs)tZdZd„Zd„Zd„ZRS(sëProvide inverse (~) operator behavior for PrefixUnionDicts. This enables ~pud to return a database that, given a sequence object, returns the corresponding key (prefix.id) to retrieve that sequence object in the pud. cCs ||_dS(N(sdbsself(sselfsdb((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__init__`scCs§|i}y|ii|i}Wnetj oYy0|iii|iijotdƒ‚nWnt j onXtdƒ‚nX||ii t |i ƒSdS(Nspthis annotation is not in the PrefixUnion, but its sequence is. You can get that using its 'sequence' attribute.sseq.db not in PrefixUnionDict( sivals pathForwardsseqsselfsdbsdictssprefixsKeyErrors _anno_seqsAttributeErrors separatorsstrsid(sselfsivalsseqsprefix((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys __getitem__cs cCs8y|ii|iijSWntj o tSnXdS(N(sseqs pathForwardsdbsselfsdictssAttributeErrorsFalse(sselfsseq((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys __contains__ts(s__name__s __module__s__doc__s__init__s __getitem__s __contains__(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys_PrefixUnionDictInverseWs   s_PrefixUnionMemberDictcBsAtZdZed„d„Zd„ZeZd„Zd„ZRS(sž @CTB confusing/inappropriate use of a dict interface! keep?? @CTB document. 'd[prefix]=value; d[k] returns value if k is a member of prefix' cCs |iiS(N(sxs pathForwardsdb(sx((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysƒscCs9h|_||_||_|tj o ||_ndS(N(sselfsvaluesspuDicts attrMethods _attrMethodsdefaultsNone(sselfspuDictsdefaults attrMethod((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__init__‚s     cCs|iiiƒSdS(N(sselfspuDicts prefixDictskeys(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pyskeysŠscCsH||iijotd|ƒ‚n|ii|}||i| trypaths? s.cCs±|tj o,|otdƒ‚n|tjotii|ƒg}nt|dƒ} zÎt | ƒ}|i ƒi dƒ}h}x |D]˜} | i ƒidƒd \}} y"ti| |ƒ}||ƒ} WnDtj o8x|iƒD]} | iƒqïWtd| ƒ‚qŠX| |||iiƒD]-\}}x|D]}|i||ƒVq#WqWdS(N(sselfs prefixDictsitemsspsdsids format_id(sselfspsdsid((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__iter__.s  cCst|iƒƒSdS(N(slistsselfsiterkeys(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pyskeys3scCst|ƒSdS(N(sitersself(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysiterkeys6sccsWxP|iiƒD]?\}}x0|iƒD]"\}}|i||ƒ|fVq)WqWdS(N( sselfs prefixDictsitemsspsds iteritemssidsseqs format_id(sselfspsdsseqsid((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys iteritems9s   cCs)|i}|i|i|i|iSdS(sAFor a given sequence, return a fully qualified name, 'prefix.id'.N(sivals pathForwardsseqsselfsdictssdbs separatorsid(sselfsivalsseq((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysgetName>s cKst||SdS(s&return a new member dictionary (empty)N(s_PrefixUnionMemberDictsselfskwargs(sselfskwargs((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys newMemberDictCscCs‹t|dƒ}||iIJx^|iiƒD]M\}}y|d||i fIJWq,t j ot d|ƒ‚q,Xq,W|i ƒdS(s3Save a header file, suitable for later re-creation.sws%s %sseseq db '%s' has no filepath; you may be able to save this to worldbase, but not to a text HeaderFile!N( sfilesfilenamesifilesselfs separators prefixDictsitemssksvsfilepathsAttributeErrorsclose(sselfsfilenamesifilesksv((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pyswriteHeaderFileGs  cCs2d}x!|iD]}|t|ƒ7}qW|SdS(Ni(snsselfsdictssdbslen(sselfsdbsn((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__len__Ts  c Cs¦h}xE|iƒD]7\}} |i|ƒ\}}| |i |hƒ|tj o2d|ii|ii}|i|}|SnXdS(s:Find in or add the given sequence to the inverse of a PUD.suserN( s_PrefixUnionDictInverses __getitem__sselfsseqsAttributeErrorsdbs separators pathForwardsidsnew_ids_(sselfsseqsnew_ids_((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysgetNamews cCs\y|i|ƒSWnDtj o8|ii o‚n|i|7_|i|ƒSnXdS(s)__getitem__ interface that calls getName.N(sselfsgetNamesseqsKeyErrorsdbsaddAll(sselfsseq((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys __getitem__s(s__name__s __module__s__doc__sgetNames __getitem__(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys_PrefixDictInverseAdderqs  sSeqPrefixUnionDictcBs;tZdZeieƒZed„Zd„Z d„Z RS(sìSeqPrefixUnionDict provides += functionality to add seqs to a PUD. See the __iadd__ method for details. If addAll is True, then looking a sequence up in the inverse db will automatically add it to the PrefixUnionDict. cKsti||||_dS(N(sPrefixUnionDicts__init__sselfskwargssaddAll(sselfsaddAllskwargs((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__init__™scCs–||jo|Snt|dtƒ}|tjot|idtƒ}n|tjoUd|ijotƒ}|i d|ƒn|id}|i||ii <|Sn||i jo|Sny|i i dƒd}Wn™tj ot|dtƒ}|o)tii|ƒ}|i dƒd}ndt|i ƒ}||ijo!tidt ƒtd ƒ‚q~nX|i ||ƒ|Sd S( spAdd a sequence or database to the PUD, with a unique prefix. NOTE: __iadd__ must return self. sdbsusers.iÿÿÿÿsfilepathisnoname%dsv It appears that two different sequence databases are being assigned the same prefix ("%s"). For this reason, the attempted automatic construction of a PrefixUnionDict for you cannot be completed! You should instead construct a PrefixUnionDict that assigns a unique prefix to each sequence database, and supply it directly as the seqDict argument to the NLMSA constructor.s.cannot automatically construct PrefixUnionDictN(sksselfsgetattrsNonesdbs pathForwards prefixDictsKeepUniqueDictsds_add_prefix_dictsidsdictss_persistent_idssplitsnamesAttributeErrorsosspathsbasenameslensloggersdebugs ValueError(sselfsksdsdbsname((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__iadd__ s8    cCs||i|<||i|(sselfsfilepath(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__repr__ssblastallf0.001sc Ks2|iƒ} | ||||||||| SdS(s?run blast with the specified parameters, return NLMSA alignmentN( sselfsformatdbsblastmapsseqsals blastpaths blastprogsexpmaxsmaxseqsverbosesoptsskwargs( sselfsseqsals blastpaths blastprogsexpmaxsmaxseqsverbosesoptsskwargssblastmap((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysblasts s megablastf9.9999999999999995e-21s -U T -F ms RepeatMaskers-xsmallc  KsTdkl} |iddd| ƒ}|||||||||| | | | SdS(sCrun megablast with the specified parameters, return NLMSA alignment(sMegablastMappingsattrs megablastMapsmapClassN(sblastsMegablastMappingsselfsformatdbsblastmapsseqsals blastpathsexpmaxsmaxseqs minIdentitysmaskOptssrmPathsrmOptssverbosesoptsskwargs(sselfsseqsals blastpathsexpmaxsmaxseqs minIdentitysmaskOptssrmPathsrmOptssverbosesoptsskwargssMegablastMappingsblastmap((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys megablast#s    sblastMapcCs~yt||ƒ}WnStj oG|tjodkl}|}n||ƒ}t |||ƒnX|i |ƒ|SdS(sAcreate a blast mapping object if needed, and ensure it is indexed(s BlastMappingN( sgetattrsselfsattrsblastmapsAttributeErrorsmapClasssNonesblasts BlastMappingssetattrsformatdbsfilepath(sselfsfilepathsattrsmapClasss BlastMappingsblastmap((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysformatdb.s     ( s__name__s __module__s__doc__s __reduce__sNonesFalses__init__s__repr__sTruesblasts megablastsformatdb(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysBlastDBs   ' s BlastDBXMLRPCc BshtZdZeddddddddddddƒZd„Zd „Zd „Zd „Zd „Z RS( s/XMLRPC server wrapper around a standard BlastDBs getSeqLenis get_strslices getSeqLenDicts get_db_sizes get_seqtypesstrslicecCs0yt||ƒSWntj o dSnXdS(s'get sequence length, or -1 if not foundiÿÿÿÿN(slensselfsidsKeyError(sselfsid((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys getSeqLenBs cCsLh}x;|iiƒD]*\}}|dt|dƒf||Represents a sequence in a blast database, accessed via XMLRPCcCsS|ii|ƒ|_|idjotd|ƒ‚n||_ti|ƒdS(Nis%s not in this database( sdbsservers getSeqLensidsselfslengthsKeyErrors SequenceBases__init__(sselfsdbsid((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__init__bs  cCs[|o4y|ii|||ƒSWq;tj oq;Xn|iii|i ||ƒSdS(s$XMLRPC access to slice of a sequenceN( suseCachesselfsdbs strsliceCachesstartsends IndexErrorsservers get_strslicesid(sselfsstartsendsuseCache((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysstrsliceis cCs |iSdS(N(sselfslength(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__len__ss(s__name__s __module__s__doc__s__init__sTruesstrslices__len__(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysXMLRPCSequence_s   sXMLRPCSeqLenDescrcBs tZdZd„Zd„ZRS(s>descriptor that returns dictionary of remote server seqLenDictcCs ||_dS(N(sattrsself(sselfsattr((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys__init__zscCsb|iiƒ}x8|iƒD]*\}}|dt|dƒf||y |iSWn,tj o |iiƒ|_|iSnXdS(s9efficient way to determine sequence type of this databaseN(sselfs_seqtypesAttributeErrorsservers get_seqtype(sself((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys _set_seqtype¤s  ( s__name__s __module__s__doc__sXMLRPCSequences itemClasssXMLRPCSeqLenDescrs seqLenDicts__init__s __reduce__s __getstate__s__len__s __contains__s _set_seqtype(((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pysXMLRPCSequenceDB‡s       (.s__doc__s __future__s generatorsssyssossUserDictsweakrefssequencessqlgraphs classutils annotations AnnotationDBs AnnotationSeqsAnnotationSlicesAnnotationServersAnnotationClientsloggersseqfmtsdbfilesNoSuchFileErrorsobjects_SequenceDBInverses DictMixins SequenceDBs_FileDBSeqDescriptors SequenceBasesFileDBSequencesSequenceFileDBs BasicSeqInfos _SeqLenObjectsBasicSeqInfoDicts_SeqLenDictWrappers_SeqLenDictSaversNones_store_seqlen_dicts_PrefixUnionDictInverses_PrefixUnionMemberDictsPrefixUnionDicts_PrefixDictInverseAddersSeqPrefixUnionDicts_PUDSeqInfoDictsBlastDBs BlastDBXMLRPCsXMLRPCSequencesXMLRPCSeqLenDescrsXMLRPCSequenceDB($s _SeqLenObjects_store_seqlen_dictsAnnotationSlicesNoSuchFileErrors BlastDBXMLRPCsseqfmts_FileDBSeqDescriptors generatorssXMLRPCSequenceDBsloggersBasicSeqInfoDictsXMLRPCSeqLenDescrsBlastDBsSequenceFileDBs_SequenceDBInverses classutilsPrefixUnionDictsXMLRPCSequencesUserDicts_PrefixDictInverseAdderssyss SequenceDBs_SeqLenDictSaversFileDBSequences_PrefixUnionDictInverses_PrefixUnionMemberDicts_SeqLenDictWrappersSeqPrefixUnionDicts BasicSeqInfos_PUDSeqInfoDictsAnnotationServers AnnotationSeqsAnnotationClients AnnotationDBsweakrefsos((s0build/bdist.darwin-8.11.1-i386/egg/pygr/seqdb.pys?ŒsD      %   ª$S $$)ÍO+4#PK7“;“Hpygr/seqfmt.pydef __bootstrap__(): global __bootstrap__, __loader__, __file__ import sys, pkg_resources, imp __file__ = pkg_resources.resource_filename(__name__,'seqfmt.so') __loader__ = None; del __bootstrap__, __loader__ imp.load_dynamic(__name__,__file__) __bootstrap__() PK7“;Æ{::pygr/seqfmt.pyc;ò {–,Kc@sd„atƒdS(cCsMdk}dk}dk}|itdƒatabb|i ttƒdS(Ns seqfmt.so( ssyss pkg_resourcessimpsresource_filenames__name__s__file__sNones __loader__s __bootstrap__s load_dynamic(s pkg_resourcesssyssimp((s1build/bdist.darwin-8.11.1-i386/egg/pygr/seqfmt.pys __bootstrap__s  N(s __bootstrap__(((s1build/bdist.darwin-8.11.1-i386/egg/pygr/seqfmt.pys?s PK8“;Æ{::pygr/seqfmt.pyo;ò {–,Kc@sd„atƒdS(cCsMdk}dk}dk}|itdƒatabb|i ttƒdS(Ns seqfmt.so( ssyss pkg_resourcessimpsresource_filenames__name__s__file__sNones __loader__s __bootstrap__s load_dynamic(s pkg_resourcesssyssimp((s1build/bdist.darwin-8.11.1-i386/egg/pygr/seqfmt.pys __bootstrap__s  N(s __bootstrap__(((s1build/bdist.darwin-8.11.1-i386/egg/pygr/seqfmt.pys?s PK“;X÷²0°°pygr/seqfmt.soÎúíþ„H__TEXT __text__TEXT4  4 €__picsymbol_stub__TEXTÔÔ€__cstring__TEXTÔ(Ô__textcoal_nt__TEXTüü €__DATA  __data__DATA < __dyld__DATA"‰Ç…À„拃d‰$èê!‰EØ…À„ÍÇ$èØ!‰Æ…À„¹ƒ‰$è÷!‰EÜ…À„u‰D$4‹ƒl‰D$0‰|$,‹UÔ‰T$(‰t$$‰t$ ‰t$‰t$‰t$‹E܉D$ÇD$ ÇD$ÇD$Ç$èË!‰Eà…ÀtOèâ!ÇD$ ‹U؉T$‹Uà‰T$‰$è8!‰Eä…Àt,‰Â‹ƒl‰B@‰$è}!ë1öÇEÜÇEàÇEä‹UÔ‹ƒè‰…Àt}…ÿt‹ƒè‰…À„‘…öt ‹ƒè‰…Àtl‹uÜ…öt‹UÜ‹ƒè‰…Àt;‹Mà…Ét‹Uà‹ƒè‰…ÀtM‹Uä…Òt‹U䋃艅Àu ‹B‰$ÿPƒÄl[^_]ËB‰$ÿP뺋UÔ‹B‰$ÿPérÿÿÿ‹F‰4$ÿP뉋B‰$ÿP먋G‰<$ÿPéaÿÿÿÇEàÇEäé-ÿÿÿU‰åWVSƒì,èƒ=‰ƒiÇD$ôÇD$ ÇD$ƒÕ‰D$ƒ¥‰$è ‰ƒY…À„•ƒƒ­‰$è ‰ƒ]…Àtz‰D$ƒ¹‰D$‹ƒY‰$è% …ÀxZ‹»5…ÿtH³5ë ƒÆ‹>…ÿt7‹F ƒè‰D$‹F‰$èy‰‹‹…Òt ‹~…ÿtщ$è݃Ƌ>…ÿuɃÄ,[^_]˃i‹‰ƒeǃaƒÉƒÄ,[^_]éÞüÿÿU‰åWVSì|€è÷ÇEäÇEàÇEÜE܉D$Eà‰D$Eä‰D$ƒ'‰D$ ƒÓ‰D$‹E‰D$‹E ‰$è7…Àu1ö‰ðÄ|€[^_]ËE䃋Eàƒ‹E܃‹ƒÁƒ‹ƒS‰D$‹Eà‰$蚉ƅÀ„8ÇD$‰$èN‰…Ìÿÿ…À„œ‹ƒè‰…À„ý‹•Ìÿÿ‰$è ‰Æèv…À„‹ƒO‹‰ƒKǃGÇ…Ðÿÿ‹ƒÁ‰…Èÿÿ‰Ç‹•Ìÿÿ‹ƒè‰…À„‹Ðÿÿ…Ét‹•Ðÿÿ‹ƒè‰…À„þƒ×èwûÿÿ1ö‹ƒè‰…À„Æ‹•Èÿÿ‹ƒè‰…À„£‹E䋃ꉅ҄€‹Eà‹ƒê‰…Òtd‹EÜ‹ƒê‰…Ò…¨þÿÿ‹EÜ‹P‰$ÿR‰ðÄ|€[^_]ËF‰4$ÿPéõþÿÿ‹ƒO‹‰ƒKǃG‹“Á‰•Èÿÿ‰×éKÿÿÿ‹Eà‹P‰$ÿR뎋Eä‹P‰$ÿRéoÿÿÿ‹B‰$ÿPéOÿÿÿ‹G‰<$ÿPé,ÿÿÿ‹B‰$ÿPéãþÿÿ‹B‰$ÿPéôþÿÿ‹ƒO‹‰ƒKǃG‹ƒÁ‰…Èÿÿ‰Ç‹ƒè‰…À„΋µÌÿÿ…ö„±þÿÿÇ…Ðÿÿénþÿÿ‹•Ìÿÿ‹ƒè‰…À„Oƒ!‰D$‰4$èS‰…Àÿÿ…À„‹ƒ_‰D$‹E܉$èS‰…Ôÿÿ…À„ž‹“Á‹ƒè‰…À„Ë‹…Ôÿÿ‰$è‰Â…À„8ƒ‰D$‰$èÞ‰…Äÿÿ…À„8‹³Á‹…À„zƒ‰D$E؉$見…Àÿÿ‰D$ÇD$ÿ•Øÿÿ‰•¤ÿÿ‰$èä‰Ç…À„UÇ…°ÿÿÇ…´ÿÿ‰µÈÿÿÇ…¨ÿÿÇ…¬ÿÿ¶8EØ„‹„À„¼wëK‹ƒ¹‹D4Áèƒà…Àt'¾÷€ÿÿÿ…㋃¹‹D4Áèƒà…À„•‰÷¶v„À„l¾Ð÷€ÿÿÿtªÇD$‰$è…À•À¶Àë ‹F‰4$ÿPé$þÿÿ‹…Èÿÿ;ƒÁ„·ƒ½¬ÿÿŒªŽY‹…¨ÿÿ‹•¬ÿÿ‰$‰T$覉ƅÀ„®‹…¸ÿÿ‹•¼ÿÿ‰$‰T$脉…Ìÿÿ…À„šÇ$è$‰…Ðÿÿ…À„€‰p ‹•Ìÿÿ‰P‰D$‹…Èÿÿ‰D$‹Eä‰$èû…Àˆ‹•Ðÿÿ‹ƒè‰…À„™G‰$è‰Æ…À„oÇ$賉…Ìÿÿ…À„Œ‰p ‰D$‹ƒµ‰$膉…Ðÿÿ…À„F‹•Ìÿÿ‹ƒè‰…À„ ‹ƒW‰D$‹…Ðÿÿ‰$è}‰Æ…À„Ø‹•Ðÿÿ‹ƒè‰…À„ÆÇD$‰4$艅Ìÿÿ…À„ÿ‹ƒè‰…À„µ‹•Ìÿÿ‹B‹@4…À„ ‹@ …À„ÇD$‰$èu‰…Ðÿÿ‹½Ðÿÿ…ÿ„Š‹•Ìÿÿ‹ƒè‰…À„‹•Èÿÿ‹ƒè‰…À„V‹…Ðÿÿ‰…Èÿÿ‹…°ÿÿ‹•´ÿÿ‰…¸ÿÿ‰•¼ÿÿÇ…¨ÿÿÇ…¬ÿÿ‹…Àÿÿ‰D$ÇD$ÿ‹•¤ÿÿ‰$載DžÀ…ýÿÿ‹…Èÿÿ;ƒÁ„¹ƒ½¬ÿÿŒ¬ŽY‹…¨ÿÿ‹•¬ÿÿ‰$‰T$èC‰Æ…À„‹…¸ÿÿ‹•¼ÿÿ‰$‰T$è!‰…Ìÿÿ…À„ËÇ$èÁ‰…Ðÿÿ…À„±‰Â‰p ‹…Ìÿÿ‰B‰T$‹•Èÿÿ‰T$‹Eä‰$è–…ÀˆË‹•Ðÿÿ‹ƒè‰…À„¨‹…Äÿÿ‰$èÞ‹ƒÁƒ‹½Ôÿÿ‰Æéžùÿÿƒ…¨ÿÿƒ•¬ÿÿ‹•Äÿÿ‰T$¾‰$臃…°ÿÿƒ•´ÿÿé5üÿÿÇD$@‰$èn…À•À¶Àéüÿÿ‹B‰$ÿPé£úÿÿÇ$è3‰Æ…À„މD$‹…Ìÿÿ‰$èX‰…Ðÿÿ‹ƒè‰…À…Ùýÿÿ‹F‰4$ÿPéËýÿÿ‹ƒO‹‰ƒKǃG!‹½Ôÿÿ‹“Á‰•Èÿÿé¶øÿÿ‹B‰$ÿPé,ýÿÿ‹B‰$ÿPéçüÿÿ‹F‰4$ÿPé=ýÿÿ‹•Èÿÿ‹B‰$ÿPé–ýÿÿ‹B‰$ÿPésýÿÿ‹B‰$ÿPé'úÿÿ‹E܉D$‹ƒ[‰$è.‰Æ…ÀtjÇ$èÌÿÿ…À„7‰p ‰D$‹ƒ½‹‰$èÀ‰Æ…À„E‹•Ìÿÿ‹ƒè‰…À„"1É1Ò‰ðèìñÿÿ‹ƒè‰…À„ú‹ƒO‹‰ƒKǃG‹ƒÁ‰…Èÿÿ‰Çé¬÷ÿÿ‹ƒO‹‰ƒKǃG‹“Á‰•Èÿÿ‰×é÷ÿÿ‹B‰$ÿPéYûÿÿ‹F‰4$ÿPéxùÿÿƒ½¨ÿÿ†>ûÿÿé•úÿÿ‰µÈÿÿé“ýÿÿ‹ƒO‹‰ƒKǃG:‹½ÔÿÿéWøÿÿ‹ƒO‹‰ƒKǃG:‹½Ôÿÿé÷ÿÿƒ½¨ÿÿ†@ýÿÿé•üÿÿ‹ƒO‹‰ƒKǃG‹“Á‰•Èÿÿ‰×é÷÷ÿÿ‹ƒ_‰D$‹E܉$諉ƅÀ„j‰D$‹ƒc‰$è{‰…Ìÿÿ…À„F‹ƒè‰…Àu ‹F‰4$ÿPÇ$è ‰Æ…À„ã‹•Ìÿÿ‰P ‰D$‹ƒ½‹‰$èï‰Ç…À„d‹ƒè‰…À„œ1É1Ò‰øè!ðÿÿ‹ƒè‰…À„t‹ƒO‹‰ƒKǃG#‹½Ôÿÿ‹“Á‰•ÈÿÿéÝõÿÿ‹F‰4$ÿPéøýÿÿ‹B‰$ÿPéÐýÿÿ‹ƒO‹‰ƒKǃGÇ…Ðÿÿ‹“Á‰•Èÿÿ‰×éXõÿÿÇ…Ðÿÿ‹ƒO‹‰ƒKǃG-‹½Ôÿÿé+õÿÿ‹ƒO‹‰ƒKǃG-‹½Ôÿÿénöÿÿ‹ƒO‹‰ƒKǃG#‹½Ôÿÿ‹ƒÁ‰…Èÿÿé õÿÿ‹B‰$ÿPéJûÿÿ‹ƒO‹‰ƒKǃG:‹½Ôÿÿé½ôÿÿ‹ƒO‹‰ƒKǃG,‹½Ôÿÿéëõÿÿ‹ƒO‹‰ƒKǃG-‹½Ôÿÿéwôÿÿ‹ƒO‹‰ƒKǃG-élýÿÿ‹ƒO‹‰ƒKǃG#‹½ÔÿÿÇ…Ðÿÿ‹ƒÁ‰…Èÿÿé ôÿÿ‹ƒO‹‰ƒKǃG#‹½Ôÿÿ‹“Á‰•ÈÿÿéCõÿÿ‹ƒO‹‰ƒKǃG,‹½ÔÿÿéÏóÿÿ‹ƒO‹‰ƒKǃG,éÄüÿÿ‹ƒO‹‰ƒKǃG#‹½ÔÿÿÇ…Ìÿÿ‹ƒÁ‰…ÈÿÿéÊôÿÿ‹G‰<$ÿPé~ýÿÿ‹F‰4$ÿPéVýÿÿread_fasta_lengthsseqfmt.pyxraise: arg 3 must be a traceback or Noneinstance exception may not have a separate valueraise: exception must be an old-style class or instanceseqfmt__builtin____builtins__pygr.seqfmtdpyfilefilenameOOOpygr.seqfmt.read_fasta_lengths‹$ÃX!µ \!¯ `! d!” h!€ unable to create %s.puresequnable to open %ssplitfilenoÔôà read seq lengths from python file object, save into dictionary d>wbrèÀÄÌààôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô 4!0!,!(!Ì Ä À h ` X P H @ 8 0 (  d4 +€M€_€i„4 „4 ­„4 ¸„4 Ç„4 í„4 $a4 /Db4 0Dc9 1 HDd: I€ þ.&?!!/&@¯ "/(BX!8/(C\!M/(E`!^/(Fd!o/(Gh!€/&I š/&Wà Î/&=À å/&U(!þ/€0€<0€\0€{0€š0€º0€Ù0€ø0€1€81€W1€u1dÔC€ü0[Ýgþ„þ’þžþ®þ½þÎþÝþîþûþþ þ.þ>þSþeþsþ‡þœþ®þÀþØþêþþþþ&þBþZþiþ|þŽþ þ­þ½Ñþáíõý gdu^ko}{Zhfmnvec[Yb_~syXa|zVjprilW]t`qw\x__dyld_func_lookupdyld_stub_binding_helper__mh_bundle_header___i686.get_pc_thunk.bx_initseqfmt_PyArg_ParseTupleAndKeywords_PyClass_Type_PyCode_New_PyErr_Occurred_PyErr_Restore_PyErr_SetString_PyExc_IOError_PyExc_TypeError_PyFrame_New_PyImport_AddModule_PyInstance_Type_PyInt_AsLong_PyInt_FromLong_PyLong_FromLongLong_PyModule_GetDict_PyNumber_Add_PyNumber_Remainder_PyObject_CallObject_PyObject_GetAttr_PyObject_GetItem_PyObject_SetAttrString_PyObject_SetItem_PySequence_GetItem_PyString_AsString_PyString_FromString_PyString_FromStringAndSize_PyString_InternInPlace_PyString_Type_PyThreadState_Get_PyTraceBack_Here_PyTraceBack_Type_PyTuple_New_Py_InitModule4__DefaultRuneLocale__Py_NoneStruct___maskrune_fclose_fdopen_fgets_fopen_fputc_strcpy{standard input}int:t1=r1;-2147483648;2147483647;char:t2=r2;0;127;void:t3=3/SourceCache/Csu/Csu-58.1.1/bundle1.s/SourceCache/Csu/Csu-58.1.1///SourceCache/Csu/Csu-58.1.1/bundle1.s/SourceCache/Csu/Csu-58.1.1/bundle1.sdyld_stub_binding_helper:F3dyld__mh_bundle_headerdyld_lazy_symbol_binding_entry_point__dyld_func_lookup:F3dyld_func_lookup_pointer/Users/marek/Desktop/pygr-0.8.1/pygr/seqfmt.cgcc2_compiled.:t(0,1)=(0,1)___pyx_string_tab___pyx_n_fileno___pyx_k1___pyx_n_split___pyx_k8___pyx_k3p___pyx_k3___pyx_k4p___pyx_k4___pyx_k6p___pyx_k6___pyx_methods___pyx_f_4pygr_6seqfmt_read_fasta_lengths___pyx_doc_4pygr_6seqfmt_read_fasta_lengths___pyx_k7___pyx_k5___pyx_k2___pyx_filenames___Pyx_Raise__Pyx_Raise:f(0,1)type:p(0,2)value:P(0,2)tb:P(0,2)void:t(0,1):t(0,2)=*(0,3)PyObject:t(0,3)=(0,4)_object:T(0,4)=s8ob_refcnt:(0,5),0,32;ob_type:(0,6),32,32;;int:t(0,5)=r(0,5);-2147483648;2147483647;:t(0,6)=*(0,7)_typeobject:T(0,7)=s192ob_refcnt:(0,5),0,32;ob_type:(0,6),32,32;ob_size:(0,5),64,32;tp_name:(0,8),96,32;tp_basicsize:(0,5),128,32;tp_itemsize:(0,5),160,32;tp_dealloc:(0,9),192,32;tp_print:(0,11),224,32;tp_getattr:(0,13),256,32;tp_setattr:(0,15),288,32;tp_compare:(0,17),320,32;tp_repr:(0,19),352,32;tp_as_number:(0,21),384,32;tp_as_sequence:(0,22),416,32;tp_as_mapping:(0,23),448,32;tp_hash:(0,24),480,32;tp_call:(0,26),512,32;tp_str:(0,19),544,32;tp_getattro:(0,28),576,32;tp_setattro:(0,30),608,32;tp_as_buffer:(0,32),640,32;tp_flags:(0,33),672,32;tp_doc:(0,8),704,32;tp_traverse:(0,34),736,32;tp_clear:(0,36),768,32;tp_richcompare:(0,38),800,32;tp_weaklistoffset:(0,33),832,32;tp_iter:(0,40),864,32;tp_iternext:(0,41),896,32;tp_methods:(0,42),928,32;tp_members:(0,43),960,32;tp_getset:(0,44),992,32;tp_base:(0,6),1024,32;tp_dict:(0,2),1056,32;tp_descr_get:(0,45),1088,32;tp_descr_set:(0,46),1120,32;tp_dictoffset:(0,33),1152,32;tp_init:(0,47),1184,32;tp_alloc:(0,48),1216,32;tp_new:(0,50),1248,32;tp_free:(0,52),1280,32;tp_is_gc:(0,36),1312,32;tp_bases:(0,2),1344,32;tp_mro:(0,2),1376,32;tp_cache:(0,2),1408,32;tp_subclasses:(0,2),1440,32;tp_weaklist:(0,2),1472,32;tp_del:(0,9),1504,32;;:t(0,8)=*(0,54):t(0,10)=*(0,55)destructor:t(0,9)=(0,10):t(0,12)=*(0,56)printfunc:t(0,11)=(0,12):t(0,14)=*(0,57)getattrfunc:t(0,13)=(0,14):t(0,16)=*(0,58)setattrfunc:t(0,15)=(0,16):t(0,18)=*(0,59)cmpfunc:t(0,17)=(0,18):t(0,20)=*(0,60)reprfunc:t(0,19)=(0,20):t(0,21)=*(0,61):t(0,22)=*(0,62):t(0,23)=*(0,63):t(0,25)=*(0,64)hashfunc:t(0,24)=(0,25):t(0,27)=*(0,65)ternaryfunc:t(0,26)=(0,27):t(0,29)=*(0,66)getattrofunc:t(0,28)=(0,29):t(0,31)=*(0,67)setattrofunc:t(0,30)=(0,31):t(0,32)=*(0,68)long int:t(0,33)=r(0,33);-2147483648;2147483647;:t(0,35)=*(0,69)traverseproc:t(0,34)=(0,35):t(0,37)=*(0,70)inquiry:t(0,36)=(0,37):t(0,39)=*(0,71)richcmpfunc:t(0,38)=(0,39)getiterfunc:t(0,40)=(0,20)iternextfunc:t(0,41)=(0,20):t(0,42)=*(0,72):t(0,43)=*(0,73):t(0,44)=*(0,74)descrgetfunc:t(0,45)=(0,27)descrsetfunc:t(0,46)=(0,31)initproc:t(0,47)=(0,31):t(0,49)=*(0,75)allocfunc:t(0,48)=(0,49):t(0,51)=*(0,76)newfunc:t(0,50)=(0,51):t(0,53)=*(0,77)freefunc:t(0,52)=(0,53)char:t(0,54)=r(0,54);0;127;:t(0,55)=f(0,1):t(0,56)=f(0,5):t(0,57)=f(0,2):t(0,58)=f(0,5):t(0,59)=f(0,5):t(0,60)=f(0,2)PyNumberMethods:t(0,61)=(0,78)PySequenceMethods:t(0,62)=(0,79)PyMappingMethods:t(0,63)=(0,80):t(0,64)=f(0,33):t(0,65)=f(0,2):t(0,66)=f(0,2):t(0,67)=f(0,5)PyBufferProcs:t(0,68)=(0,81):t(0,69)=f(0,5):t(0,70)=f(0,5):t(0,71)=f(0,2)PyMethodDef:T(0,72)=s16ml_name:(0,8),0,32;ml_meth:(0,82),32,32;ml_flags:(0,5),64,32;ml_doc:(0,8),96,32;;PyMemberDef:T(0,73)=s20name:(0,8),0,32;type:(0,5),32,32;offset:(0,5),64,32;flags:(0,5),96,32;doc:(0,8),128,32;;PyGetSetDef:T(0,74)=s20name:(0,8),0,32;get:(0,83),32,32;set:(0,85),64,32;doc:(0,8),96,32;closure:(0,87),128,32;;:t(0,75)=f(0,2):t(0,76)=f(0,2):t(0,77)=f(0,1):T(0,78)=s152nb_add:(0,88),0,32;nb_subtract:(0,88),32,32;nb_multiply:(0,88),64,32;nb_divide:(0,88),96,32;nb_remainder:(0,88),128,32;nb_divmod:(0,88),160,32;nb_power:(0,26),192,32;nb_negative:(0,89),224,32;nb_positive:(0,89),256,32;nb_absolute:(0,89),288,32;nb_nonzero:(0,36),320,32;nb_invert:(0,89),352,32;nb_lshift:(0,88),384,32;nb_rshift:(0,88),416,32;nb_and:(0,88),448,32;nb_xor:(0,88),480,32;nb_or:(0,88),512,32;nb_coerce:(0,90),544,32;nb_int:(0,89),576,32;nb_long:(0,89),608,32;nb_float:(0,89),640,32;nb_oct:(0,89),672,32;nb_hex:(0,89),704,32;nb_inplace_add:(0,88),736,32;nb_inplace_subtract:(0,88),768,32;nb_inplace_multiply:(0,88),800,32;nb_inplace_divide:(0,88),832,32;nb_inplace_remainder:(0,88),864,32;nb_inplace_power:(0,26),896,32;nb_inplace_lshift:(0,88),928,32;nb_inplace_rshift:(0,88),960,32;nb_inplace_and:(0,88),992,32;nb_inplace_xor:(0,88),1024,32;nb_inplace_or:(0,88),1056,32;nb_floor_divide:(0,88),1088,32;nb_true_divide:(0,88),1120,32;nb_inplace_floor_divide:(0,88),1152,32;nb_inplace_true_divide:(0,88),1184,32;;:T(0,79)=s40sq_length:(0,36),0,32;sq_concat:(0,88),32,32;sq_repeat:(0,92),64,32;sq_item:(0,92),96,32;sq_slice:(0,94),128,32;sq_ass_item:(0,96),160,32;sq_ass_slice:(0,98),192,32;sq_contains:(0,100),224,32;sq_inplace_concat:(0,88),256,32;sq_inplace_repeat:(0,92),288,32;;:T(0,80)=s12mp_length:(0,36),0,32;mp_subscript:(0,88),32,32;mp_ass_subscript:(0,101),64,32;;:T(0,81)=s16bf_getreadbuffer:(0,102),0,32;bf_getwritebuffer:(0,104),32,32;bf_getsegcount:(0,105),64,32;bf_getcharbuffer:(0,107),96,32;;PyCFunction:t(0,82)=(0,29):t(0,84)=*(0,109)getter:t(0,83)=(0,84):t(0,86)=*(0,110)setter:t(0,85)=(0,86):t(0,87)=*(0,1)binaryfunc:t(0,88)=(0,29)unaryfunc:t(0,89)=(0,20):t(0,91)=*(0,111)coercion:t(0,90)=(0,91):t(0,93)=*(0,112)intargfunc:t(0,92)=(0,93):t(0,95)=*(0,113)intintargfunc:t(0,94)=(0,95):t(0,97)=*(0,114)intobjargproc:t(0,96)=(0,97):t(0,99)=*(0,115)intintobjargproc:t(0,98)=(0,99)objobjproc:t(0,100)=(0,18)objobjargproc:t(0,101)=(0,31):t(0,103)=*(0,116)getreadbufferproc:t(0,102)=(0,103)getwritebufferproc:t(0,104)=(0,103):t(0,106)=*(0,117)getsegcountproc:t(0,105)=(0,106):t(0,108)=*(0,118)getcharbufferproc:t(0,107)=(0,108):t(0,109)=f(0,2):t(0,110)=f(0,5):t(0,111)=f(0,5):t(0,112)=f(0,2):t(0,113)=f(0,2):t(0,114)=f(0,5):t(0,115)=f(0,5):t(0,116)=f(0,5):t(0,117)=f(0,5):t(0,118)=f(0,5)___Pyx_AddTraceback___pyx_filename___pyx_m___pyx_lineno__Pyx_AddTraceback:f(0,1)funcname:P(0,8)py_srcfile:(0,2)py_funcname:r(0,2)py_globals:(0,2)empty_tuple:r(0,2)empty_string:(0,2)py_code:(0,119)py_frame:(0,120):t(0,119)=*(0,121):t(0,120)=*(0,122)PyCodeObject:t(0,121)=(0,123)PyFrameObject:t(0,122)=(0,124):T(0,123)=s64ob_refcnt:(0,5),0,32;ob_type:(0,6),32,32;co_argcount:(0,5),64,32;co_nlocals:(0,5),96,32;co_stacksize:(0,5),128,32;co_flags:(0,5),160,32;co_code:(0,2),192,32;co_consts:(0,2),224,32;co_names:(0,2),256,32;co_varnames:(0,2),288,32;co_freevars:(0,2),320,32;co_cellvars:(0,2),352,32;co_filename:(0,2),384,32;co_name:(0,2),416,32;co_firstlineno:(0,5),448,32;co_lnotab:(0,2),480,32;;_frame:T(0,124)=s336ob_refcnt:(0,5),0,32;ob_type:(0,6),32,32;ob_size:(0,5),64,32;f_back:(0,125),96,32;f_code:(0,119),128,32;f_builtins:(0,2),160,32;f_globals:(0,2),192,32;f_locals:(0,2),224,32;f_valuestack:(0,126),256,32;f_stacktop:(0,126),288,32;f_trace:(0,2),320,32;f_exc_type:(0,2),352,32;f_exc_value:(0,2),384,32;f_exc_traceback:(0,2),416,32;f_tstate:(0,127),448,32;f_lasti:(0,5),480,32;f_lineno:(0,5),512,32;f_restricted:(0,5),544,32;f_iblock:(0,5),576,32;f_blockstack:(0,128),608,1920;f_nlocals:(0,5),2528,32;f_ncells:(0,5),2560,32;f_nfreevars:(0,5),2592,32;f_stacksize:(0,5),2624,32;f_localsplus:(0,129),2656,32;;:t(0,125)=*(0,124):t(0,126)=*(0,2):t(0,127)=*(0,130):t(0,128)=ar(0,131);0;19;(0,132):t(0,129)=ar(0,131);0;0;(0,2)PyThreadState:t(0,130)=(0,133)long unsigned int:t(0,131)=r(0,131);0;037777777777;PyTryBlock:t(0,132)=(0,134)_ts:T(0,133)=s84next:(0,135),0,32;interp:(0,136),32,32;frame:(0,125),64,32;recursion_depth:(0,5),96,32;tracing:(0,5),128,32;use_tracing:(0,5),160,32;c_profilefunc:(0,137),192,32;c_tracefunc:(0,137),224,32;c_profileobj:(0,2),256,32;c_traceobj:(0,2),288,32;curexc_type:(0,2),320,32;curexc_value:(0,2),352,32;curexc_traceback:(0,2),384,32;exc_type:(0,2),416,32;exc_value:(0,2),448,32;exc_traceback:(0,2),480,32;dict:(0,2),512,32;tick_counter:(0,5),544,32;gilstate_counter:(0,5),576,32;async_exc:(0,2),608,32;thread_id:(0,33),640,32;;:T(0,134)=s12b_type:(0,5),0,32;b_handler:(0,5),32,32;b_level:(0,5),64,32;;:t(0,135)=*(0,133):t(0,136)=*(0,139):t(0,138)=*(0,140)Py_tracefunc:t(0,137)=(0,138)PyInterpreterState:t(0,139)=(0,141):t(0,140)=f(0,5)_is:T(0,141)=s36next:(0,142),0,32;tstate_head:(0,135),32,32;modules:(0,2),64,32;sysdict:(0,2),96,32;builtins:(0,2),128,32;codec_search_path:(0,2),160,32;codec_search_cache:(0,2),192,32;codec_error_registry:(0,2),224,32;dlopenflags:(0,5),256,32;;:t(0,142)=*(0,141)___pyx_f___pyx_binitseqfmt:F(0,1)t:r(0,143):t(0,143)=*(0,144)__Pyx_StringTabEntry:t(0,144)=(0,145):T(0,145)=s16p:(0,126),0,32;i:(0,5),32,32;s:(0,8),64,32;n:(0,33),96,32;;___pyx_argnames.7007/usr/include/ctype.hpygr/seqfmt.c/usr/include/ctype.hpygr/seqfmt.c/usr/include/ctype.hpygr/seqfmt.c/usr/include/ctype.hpygr/seqfmt.c__pyx_f_4pygr_6seqfmt_read_fasta_lengths:f(0,2)__pyx_self:p(0,2)__pyx_args:p(0,2)__pyx_kwds:p(0,2)__pyx_v_d:(0,2)__pyx_v_pyfile:(0,2)__pyx_v_filename:(0,2)__pyx_v_seqLength:(0,146)long long int:t(0,146)=@s64;r(0,146);01000000000000000000000;0777777777777777777777;__pyx_v_ipos:(0,146)__pyx_v_offset:(0,146)__pyx_v_tmp:(0,147)__pyx_v_fastastart:(0,148)__pyx_v_p:r(0,8)char:t(0,54):t(0,147)=ar(0,131);0;32767;(0,54):t(0,148)=ar(0,131);0;3;(0,54)__pyx_v_ifile:(0,149)__pyx_v_ifile2:(0,149)__pyx_v_outfile:r(0,2)__pyx_v_id:(0,2)__pyx_r:r(0,2)__pyx_1:r(0,2)__pyx_2:(0,2)__pyx_3:r(0,5)int:t(0,5):t(0,149)=*(0,150)FILE:t(0,150)=(0,151)__sFILE:T(0,151)=s88_p:(0,152),0,32;_r:(0,5),32,32;_w:(0,5),64,32;_flags:(0,153),96,16;_file:(0,153),112,16;_bf:(0,154),128,64;_lbfsize:(0,5),192,32;_cookie:(0,87),224,32;_close:(0,155),256,32;_read:(0,156),288,32;_seek:(0,157),320,32;_write:(0,158),352,32;_ub:(0,154),384,64;_extra:(0,159),448,32;_ur:(0,5),480,32;_ubuf:(0,160),512,24;_nbuf:(0,161),536,8;_lb:(0,154),544,64;_blksize:(0,5),608,32;_offset:(0,162),640,64;;:t(0,152)=*(0,164)short int:t(0,153)=@s16;r(0,153);-32768;32767;__sbuf:T(0,154)=s8_base:(0,152),0,32;_size:(0,5),32,32;;:t(0,155)=*(0,165):t(0,156)=*(0,166):t(0,157)=*(0,167):t(0,158)=*(0,168):t(0,159)=*(0,169):t(0,160)=ar(0,131);0;2;(0,164):t(0,161)=ar(0,131);0;0;(0,164)__darwin_off_t:t(0,163)=(0,170)fpos_t:t(0,162)=(0,163)unsigned char:t(0,164)=@s8;r(0,164);0;255;:t(0,165)=f(0,5):t(0,166)=f(0,5):t(0,167)=f(0,162):t(0,168)=f(0,5):t(0,169)=xs__sFILEX:__int64_t:t(0,170)=(0,146)__pyx_4:r(0,8)__pyx_5:(0,2)__pyx_6:r(0,54)__pyx_argnames:V(0,171):t(0,171)=ar(0,131);0;3;(0,8)__pyx_args:r(0,2)__pyx_kwds:r(0,2)_c:r(0,172)__darwin_ct_rune_t:t(0,172)=(0,5)_c:r(0,172)_c:r(0,172)_c:r(0,172)j:r(0,2)j:r(0,2)__pyx_m:S(0,2)__pyx_b:S(0,2)__pyx_lineno:S(0,5)__pyx_filename:S(0,8)__pyx_f:S(0,173):t(0,173)=*(0,8)__pyx_k1:S(0,174)__pyx_k2:S(0,175)__pyx_k3:S(0,176)__pyx_k4:S(0,177)__pyx_k5:S(0,178)__pyx_k6:S(0,179)__pyx_k7:S(0,180)__pyx_k8:S(0,181)__pyx_n_fileno:S(0,2)__pyx_n_split:S(0,2)__pyx_k3p:S(0,2)__pyx_k4p:S(0,2)__pyx_k6p:S(0,2)__pyx_string_tab:S(0,182)__pyx_doc_4pygr_6seqfmt_read_fasta_lengths:S(0,183)__pyx_methods:S(0,184)__pyx_filenames:S(0,185):t(0,174)=ar(0,131);0;6;(0,54):t(0,175)=ar(0,131);0;1;(0,54):t(0,176)=ar(0,131);0;17;(0,54):t(0,177)=ar(0,131);0;8;(0,54):t(0,178)=ar(0,131);0;2;(0,54):t(0,179)=ar(0,131);0;19;(0,54):t(0,180)=ar(0,131);0;1;(0,54):t(0,181)=ar(0,131);0;5;(0,54):t(0,182)=ar(0,131);0;5;(0,144):t(0,183)=ar(0,131);0;64;(0,54):t(0,184)=ar(0,131);0;1;(0,72):t(0,185)=ar(0,131);0;0;(0,8)PKd—~;iÍ*bë€ë€pygr/sequence.py from __future__ import generators import types from sequtil import * NOT_ON_SAME_PATH = -2 class ReadOnlyAttribute(object): def __init__(self, attr): self.attr = attr def __get__(self, obj, klass): return getattr(obj, self.attr) ################################################################### # # INTERVAL - INTERVAL MAPPING # CORRECTLY HANDLES SCALING AND ORIENTATION TRANSFORMATIONS # ASSUMES A SIMPLE SCALAR TRANSFORMATION FROM ONE COORD SYSTEM # TO THE OTHER. DOES NOT HANDLE INDELS WITHIN THE MAPPING! class IntervalTransform(object): "Represents coordinate transformation from one interval to another" srcPath=ReadOnlyAttribute('_srcPath') # PREVENT USER FROM MODIFYING THESE! destPath=ReadOnlyAttribute('_destPath') def __init__(self, srcPath, destPath, edgeInfo=None, edgeAttr=None, edgeIndex=None): "MAP FROM srcPath -> destPath" self.scale = len(destPath) / float(len(srcPath)) self._srcPath = srcPath self._destPath = destPath if edgeInfo != None and edgeAttr != None: try: # GET EDGE INFO IF PRESENT edgeInfo = getattr(edgeInfo, edgeAttr) except AttributeError: edgeInfo = None if edgeInfo != None: if edgeIndex != None: edgeInfo = edgeInfo[edgeIndex] self.edgeInfo = edgeInfo def xform(self, i): 'transform int srcPath local coord to destPath local coord' return int(i * self.scale) def xformBack(self, i): 'transform int destPath local coord to srcPath local coord' return int(i / self.scale) def getStartStop(self, srcPath, ourPath): 'compute srcPath start,stop in ourPath local coords' if srcPath.path is ourPath.path: return srcPath.start - ourPath.start, srcPath.stop - ourPath.start try: if srcPath.path._reverse is ourPath.path: return -(srcPath.start) - ourPath.start,\ -(srcPath.stop) - ourPath.start except AttributeError: pass raise ValueError('sequence mismatch: argument not from this seq') def __call__(self, srcPath): """Apply this transformation to an interval NB: it is not restricted to the domain of this transform, and thus can extend BEYOND the boundaries of this transform. If you want it clipped use [] interface instead of ().""" start, stop = self.getStartStop(srcPath, self.srcPath) return SeqPath(self.destPath, self.xform(start), self.xform(stop), relativeToStart=True) def reverse(self, destPath): "reverse transform an interval" start, stop = self.getStartStop(destPath, self.destPath) return SeqPath(self.srcPath, self.xformBack(start), self.xformBack(stop), relativeToStart=True) def __getitem__(self, srcPath): # PROVIDE DICT-LIKE INTERFACE """intersect srcPath with domain of this transform, then return transform to target domain coordinates""" return self(srcPath * self.srcPath) def __iter__(self): yield self.srcPath def items(self): yield self.srcPath, self.destPath def __getattr__(self, attr): "provide transparent wrapper for edgeInfo attributes" try: return getattr(self.__dict__['edgeInfo'], attr) except (KeyError, AttributeError): # RAISE EXCEPTION IF NOT FOUND! raise AttributeError('neither IntervalTransform nor edgeinfo \ has attr ' + attr) def repr_dict(self): "Return compact dictionary representing this interval mapping" s = self.srcPath.repr_dict() # GET REPR OF BOTH INTERVALS d = self.destPath.repr_dict() out= {} for k, val in s.items(): # ADD PREFIX TO EACH ATTR out['src_' + k] = val out['dest_' + k] = d[k] try: e = self.edgeInfo.repr_dict() # GET EDGE INFO IF PRESENT except AttributeError: pass else: out.update(e) # SAVE EDGE INFO DATA return out def nidentity(self): "calculate total #identity matches between srcPath and destPath" nid = 0 src = str(self.srcPath).upper() dest = str(self.destPath).upper() slen = len(src) i = 0 while i < slen: if src[i] == dest[i]: nid += 1 i += 1 return nid def percent_id(self): "calculate fractional identity for this pairwise alignment" return self.nidentity / float(len(self.srcPath)) ################################################################### # # SINGLE LETTER GRAPH INTERFACE CLASSES # INSTANTIATED ON THE FLY TO PROVIDE LETTER GRAPH INTERFACE class LetterEdgeDescriptor(object): "cached dict of sequences traversing this edge" def __get__(self, edge, objtype): try: return edge._seqs except AttributeError: edge._seqs = edge.origin.getEdgeSeqs(edge.target) return edge._seqs class LetterEdge(object): "represents an edge from origin -> target. seqs returns its sequences" seqs = LetterEdgeDescriptor() def __init__(self, origin, target): self.origin = origin self.target = target def __iter__(self): 'generate origin seqpos for sequences that traverse this edge' for seq in self.seqs: # Reduce 1:many schema to 1:1, discard edge information. yield self.origin.getSeqPos(seq) def iteritems(self): 'generate origin,target seqpos for sequences that traverse this edge' for seq in self.seqs: # REDUCE 1:MANY SCHEMA TO 1:1, DISCARD EDGE INFO yield self.origin.getSeqPos(seq), self.target.getSeqPos(seq) def __getitem__(self, k): '''return origin,target seqpos for sequence k; raise KeyError if not in this edge''' try: k = k.path except AttributeError: raise TypeError('k not a valid sequence: it has no path attribute') return (self.origin.getSeqPos(k.path), self.target.getSeqPos(k.path)) def __cmp__(self, other): 'two edge objects match if they link identical nodes' try: if self.origin == other.origin and self.target == other.target: return 0 # REPORT A MATCH except AttributeError: # other MUST BE A DIFFERENT TYPE, SO NO MATCH pass return cmp(id(self), id(other)) def absoluteSlice(seq, start, stop): '''get slice of top-level sequence object, in absolute coordinates. This method calls getitem on the top-level sequence object i.e. seq.pathForward''' try: if start < 0: # REVERSE ORIENTATION return -(seq.pathForward[-stop:-start]) else: # FORWARD ORIENTATION return seq.pathForward[start:stop] except AttributeError: if seq is None: return slice(start, stop) def relativeSlice(seq, start, stop): '''get slice of this sequence object, in relative coordinates. This method calls getitem on the top-level sequence object i.e. seq.pathForward''' if start < 0: # REVERSE ORIENTATION return -(seq[-stop: -start]) else: # FORWARD ORIENTATION return seq[start: stop] def sumSliceIndex(i, myslice, relativeToStart): '''Adjust index value either relative to myslice.start (positive indexes) or relative to myslice.stop (negative indexes). Handle the case where i is None or myslice is None appropriately. ''' if myslice is None: # NO OBJECT, SO NOTHING TO DO... return i if i is None: i = 0 i *= myslice.step if relativeToStart: return i + myslice.start else: return i + myslice.stop class SeqOriDescriptor(object): "Get orientation of sequence interval" def __get__(self, seq, objtype): if seq.start >= 0: return 1 # FORWARD ORIENTATION else: return -1 # REVERSE ORIENTATION class PathForwardDescr(object): 'get the top-level forward sequence object' def __get__(self, seq, objtype): if seq.orientation > 0: return seq.path else: return seq.path._reverse class AbsIntervalDescr(object): 'get the top-level forward sequence object' def __get__(self, seq, objtype): if seq.orientation > 0: return seq.start, seq.stop else: return -(seq.stop), -(seq.start) class SeqPath(object): '''Base class for specifying a path, ie. sequence interval. This implementation takes a sequence object as initializer and simply represents the interval as a slice of the sequence.''' orientation=SeqOriDescriptor() # COMPUTE ORIENTATION AUTOMATICALLY pathForward=PathForwardDescr() # GET THE TOP-LEVEL FORWARD SEQUENCE OBJ _abs_interval=AbsIntervalDescr() def __init__(self, path, start=0, stop=None, step=None, reversePath=False, relativeToStart=False, absoluteCoords=False): '''Return slice of path[start:stop:step]. NB: start>stop means reverse orientation, i.e. (-path)[-stop:-start] start/stop are LOCAL coordinates relative to the specified path By default, start/stop are interpreted in the usual Python slicing way, i.e. a negative start value is interpreted as len(path)-start. The relativeToStart option turns off this behavior, so that negative values are interpreted as negative coordinates in the local coordinate system of path. absoluteCoords option allows intervals to be created using Pygr's internal coordinate convention i.e. -20,-10 --> -(path.pathForward[10:20]) ''' if reversePath: # create top-level negative orientation path start = -(path.stop) stop = 0 self._reverse = path path = None # make this a top-level path object if absoluteCoords: # THIS OPTION PROVIDES TRANSPARENT WAY TO CREATE if start >= 0: # INTERVALS USING start,stop PAIRS THAT FOLLOW path = path.pathForward # OUR INTERNAL SIGN CONVENTION else: # i.e. start<0 MEANS REVERSE ORIENTATION! path = - (path.pathForward) else: # ADJUST start,stop ACCORDING TO path.start / path.stop start = sumSliceIndex(start, path, relativeToStart or start is None or start>=0) stop = sumSliceIndex(stop, path, relativeToStart or (stop is not None and stop>=0)) if start is not None and stop is not None and start>stop: start = -start # start>stop MEANS REVERSE ORIENTATION! stop = -stop if path is not None: path = -path if path is not None: # perform bounds checking if start < path.path.start: start = path.path.start if stop > path.path.stop: stop = path.path.stop if start is None or stop is None or start>=stop: raise IndexError('cannot create empty sequence interval!') self.start = start self.stop = stop if step is None: step = 1 if path is None: self.path = self self.step = step else: # STORE TOP-LEVEL SEQUENCE PATH... self.path = path.path self.step = step * path.step def classySlice(self, path, *l, **kwargs): 'create a subslice using appropriate class based on container' try: # if db provides a class to use for slices, use it. klass = path.pathForward.db.itemSliceClass except AttributeError: klass = SeqPath # default: just use generic slice class return klass(path, *l, **kwargs) # construct the slice def absolute_slice(self, start, stop): 'get slice of top-level sequence, using absolute coords' return self.classySlice(self, start, stop, absoluteCoords=True) def __getitem__(self, k): if isinstance(k, types.IntType): if k == -1: # HAVE TO HANDLE THIS CASE SPECIALLY k = slice(k, None, 1) # -1 IS LAST LETTER, SO [-1:None] slice else: # REGULAR CASE, JUST [k:k+1] slice k = slice(k, k + 1, 1) if isinstance(k, types.SliceType): # GET AN INTERVAL USING slice return self.classySlice(self, k.start, k.stop, k.step) elif isinstance(k, SeqPath): # MODEL SEQ AS GRAPH if k.path is not self.path: raise KeyError('node is not in this sequence!') try: target = self.classySlice(self.path, k.stop, k.stop + len(k) * k.step, k.step) return {target: LetterEdge(k, target)} except IndexError: # OUT OF BOUNDS, SO NO NEXT NODE return {} raise KeyError('requires a slice object or integer key') def __len__(self): if self.path is self and self.orientation < 0: return len(self._reverse) # GET LENGTH FROM FORWARD SEQUENCE # Get the number of results from iter(self). d = (self.stop - self.start) / self.step if d > 0: # IF stop - start < step, d WILL BE ZERO -- PREVENT THAT! return d else: # Never return 0 length... Bounds checking ensures non-empty ival. return 1 ################################ LETTER GRAPH METHODS: JUST A LINEAR GRAPH def __iter__(self): for i in range(len(self)): yield self[i] def iteritems(self): 'letter graph iterator over (node1, {node2: edge}) tuples' src = self[0] # GET 1ST LETTER for i in range(1, len(self)): # ITERATE OVER ALL ADJACENT PAIRS target = self[i] yield src, {target: LetterEdge(src, target)} src = target yield src, {} # LAST LETTER HAS NO EDGES def getEdgeSeqs(self, other): 'return dict of sequences that traverse edge from self -> other' if self.path is other.path and self.stop == other.start: return {self.path: self.stop - self.step} else: return {} def getSeqPos(self, seq): 'get seq interval corresponding to this node in sequence graph' if seq.path is self.path: return self raise KeyError('seq not on this path!') ################################ INTERVAL COMPOSITION OPERATORS def __hash__(self): 'ensure that same seq intervals match in dict' return id(self.path)^hash(self.start)^hash(self.stop) def __cmp__(self, other): 'ensure that same seq intervals match in cmp()' if not isinstance(other, SeqPath): return -1 if self.path is other.path: return cmp((self.start, self.stop), (other.start, other.stop)) else: return NOT_ON_SAME_PATH #raise TypeError('SeqPath not comparable, not on same path: %s, %s' # % (self.path, other.path)) def __contains__(self, k): # PUT OTHER LOGIC HERE FOR CHECKING WHETHER INTERVAL IS CONTAINED... if isinstance(k, SeqPath): if k.path == self.path and self.start <= k.start and \ k.stop <= self.stop: return True else: return False elif isinstance(k, types.IntType): return self.start <= k and k < self.stop def overlaps(self, p): "check whether two paths on same seq overlap" if self.path is not p.path: return False if (self.start <= p.start and p.start < self.stop) or \ (p.start <= self.start and self.start < p.stop): return True else: return False def __mul__(self, other): "find intersection of two intervals" if isinstance(other, SeqPath): if self.path is not other.path: return None start=max(self.start, other.start) stop=min(self.stop, other.stop) if start < stop: if stop == 0: # Have to handle the boundary case specially because of # Python conventions. stop = None return self.classySlice(self.path, start, stop) else: return None else: raise TypeError('SeqPath can only intersect SeqPath') def __div__(self, other): "return transform from other -> self coordinate systems" return IntervalTransform(other, self) def __neg__(self): "return same interval in reverse orientation" try: if self.seqtype() == PROTEIN_SEQTYPE: raise ValueError('protein sequence has no reverse \ orientation!') except AttributeError: pass # ALLOW UNTYPED SEQ OBJECTS TO BE REV-COMPD if self is self.path: # TOP-LEVEL SEQUENCE OBJECT try: return self._reverse # USE EXISTING RC OBJECT FOR THIS SEQ except AttributeError: # CREATE ONLY ONE RC FOR THIS SEQUENCE self._reverse = self.classySlice(self, reversePath=True) return self._reverse elif self.orientation > 0: # FORWARD ORI: JUST REVERSE INDICES return self.classySlice(self.path, self.stop, self.start, self.step) #SWAP ==> RC else: # REVERSE ORI: BECAUSE OF stop=0 POSSIBILITY, USE POSITIVE COORDS return self.classySlice(self.path._reverse, -(self.stop), -(self.start), self.step) def __add__(self, other): "return merged interval spanning both self and other intervals" if self.path is not other.path: raise ValueError('incompatible intervals cannot be merged.') if self.start < other.start: start = self.start else: start = other.start if self.stop > other.stop: stop = self.stop else: stop = other.stop if stop == 0: # Have to handle the boundary case specially because of Python # conventions. stop = None return self.classySlice(self.path, start, stop, self.step) def __iadd__(self, other): "return merged interval spanning both self and other intervals" if self.path is not other.path: raise ValueError('incompatible intervals cannot be merged.') if other.start < self.start: self.start = other.start if other.stop > self.stop: self.stop = other.stop return self # iadd MUST ALWAYS RETURN self!! def before(self): 'get the sequence interval before this interval' return self.classySlice(self.path, None, self.start) def after(self): 'get the sequence interval after this interval' if self.stop == 0: raise IndexError('cannot create empty sequence interval') return self.classySlice(self.path, self.stop, None) def is_full_length(self): '''test whether this constitutes the whole sequence (in either orientation)''' return self == self.path ############################################ STRING SEQUENCE METHODS _complement = {'a': 't', 'c': 'g', 'g': 'c', 't': 'a', 'u': 'a', 'n': 'n', 'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A', 'U': 'A', 'N': 'N'} def reverse_complement(self, s): 'get reverse complement of a string s' #return ''.join([self._complement.get(c, c) for c in s[::-1]]) return ''.join([self._complement.get(s[i], s[i]) for i in range(len(s) -1, -1, -1)]) def seqtype(self): "Get the sequence type for this sequence" path = self.pathForward try: # TRY GETTING IT FROM TOP-LEVEL SEQUENCE OBJECT? return path._seqtype except AttributeError: try: # TRY TO GET IT FROM DB THIS SEQ IS ASSOCIATED WITH, IF ANY return path.db._seqtype except AttributeError:# GUESS IT FROM 1ST 40 LETTERS OF SEQUENCE path._seqtype = guess_seqtype(str(self[0:40])) return path._seqtype def __str__(self): '''string for this sequence interval; use reverse complement if necessary...''' if self.orientation > 0: return self.path.strslice(self.start, self.stop) else: s = self.path._reverse.strslice(-(self.stop), -(self.start)) return self.reverse_complement(s) def __repr__(self): try: # USE id CONVENTION TO GET A NAME FOR THIS SEQUENCE id = self.pathForward.id except AttributeError: # OTHERWISE USE A DEFAULT, SHOWING THERE'S NO id id = '@NONAME' if self.orientation < 0: # INDICATE NEGATIVE ORIENTATION return '-%s[%d:%d]' % (id, -self.stop, -self.start) else: return '%s[%d:%d]' % (id, self.start, self.stop) def repr_dict(self): "Return compact dictionary representing this interval" try: id = self.path.id except AttributeError: id = self.id return {'id': id, 'start': self.start, 'end': self.stop, 'ori': self.orientation} class LengthDescriptor(object): 'property that just returns length of object' def __get__(self, seq, klass): return len(seq) # BASIC WRAPPER FOR A SEQUENCE. LETS US ATTACH A NAME TO IT... class SequenceBase(SeqPath): '''base sequence type assumes there will be a seq attribute providing sequence''' start = 0 stop = LengthDescriptor() step = 1 orientation = 1 def __init__(self): self.path = self def update(self, seq): 'change this sequence to the string ' self.seq = seq def __len__(self): 'default: get the whole self.seq and compute its length' return len(self.seq) # COMPUTE IT FROM THE SEQUENCE def strslice(self, start, stop): 'default method assumes self.seq is a sliceable string' return self.seq[start:stop] class Sequence(SequenceBase): 'default sequence class initialized with a sequence string and ID' def __init__(self, s, id): SequenceBase.__init__(self) self.id = id self.seq = s class SeqFilterDict(dict): '''stores a set of intervals, either on init or via self[ival]=junk; self[ival] returns intersection of ival and the overlapping interval in self if any; otherwise raise KeyError''' def __init__(self, l=[]): 'accepts optional arg giving list of intervals' dict.__init__(self) for ival in l: self[ival] = None def __getitem__(self, k): try: ival = dict.__getitem__(self, k.path) except KeyError: raise KeyError('seq not in dict') result = k * ival # RETURN INTERSECTION OF IVALS if result is None: raise KeyError # PROPER WAY TO SIGNAL KEY MAPS TO NO VALUE return result def __setitem__(self, ival, junk): dict.__setitem__(self, ival.path, ival) def __iter__(self): return dict.itervalues(self) ## ## ## class S2SEEdgesDescriptor(object): ## "list of interval matches as list of tuples (ival1, ival2, xform)" ## def __get__(self, s2se, objtype): ## return [(t.srcPath, t.destPath, t) for t in s2se.matches] class Seq2SeqEdge(object): '''Maps two sequence regions onto each other, using a list of scalar transformations. Can handle indels within the mapping.''' #edges = S2SEEdgesDescriptor() def __init__(self, msaSlice, targetPath, sourcePath=None, matchIntervals=False): self.msaSlice = msaSlice self.targetPath = targetPath if sourcePath is not None: self.sourcePath = sourcePath self.matchIntervals = matchIntervals else: # NEED TO REVERSE-MAP targetPath TO FIND sourcePath # Mask to targetPath. si = msaSlice.groupByIntervals(filterList = [targetPath], mergeAll=True) l = msaSlice.groupBySequences(si) try: self.sourcePath = l[0][0] except IndexError: raise KeyError('target interval not in msaSlice!') self.matchIntervals = l[0][2] def items(self, mergeAll=False, **kwargs): 'get list of (srcPath, destPath) 1:1 matches' if self.matchIntervals is None: # THIS IS ALREADY A 1:1 INTERVAL! return [(self.sourcePath, self.targetPath)] elif self.matchIntervals is False: raise ValueError('no matchIntervals information!') l = [] # USE STORED LIST OF 1:1 INTERVALS for srcStart, srcEnd, destStart, destEnd in self.matchIntervals: l.append((absoluteSlice(self.sourcePath, srcStart, srcEnd), absoluteSlice(self.targetPath, destStart, destEnd))) return l def get_gaps(self): 'return list of (srcIval,destIval) representing gaps / insertions' if self.matchIntervals is False: raise ValueError('no matchIntervals information!') elif self.matchIntervals is None or len(self.matchIntervals) < 2: return [] # no gaps here... srcLast = self.matchIntervals[0][1] # ends of 1st aligned intervals destLast = self.matchIntervals[0][3] l = [] for t in self.matchIntervals[1:]: if t[0] > srcLast: # gap region srcIval = absoluteSlice(self.sourcePath, srcLast, t[0]) else: srcIval = None if t[2] > destLast: # insertion region destIval = absoluteSlice(self.targetPath, destLast, t[2]) else: destIval = None if srcIval is not None or destIval is not None: l.append((srcIval, destIval)) srcLast = t[1] # ends of these aligned intervals destLast = t[3] return l def __iter__(self, sourceOnly=True, **kwargs): return iter([t[0] for t in self.items(sourceOnly=sourceOnly, **kwargs)]) def length(self, mode=max): 'get length of source vs. target interval according to mode' return mode(len(self.sourcePath), len(self.targetPath)) def pIdentity(self, mode=max, trapOverflow=True): "calculate fractional identity for this pairwise alignment" nid = 0 start1 = self.sourcePath.start s1 = str(self.sourcePath).upper() start2 = self.targetPath.start s2 = str(self.targetPath).upper() for srcPath, destPath in self.items(): isrc = srcPath.start - start1 idest = destPath.start - start2 for i in xrange(len(srcPath)): if s1[isrc + i] == s2[idest + i]: nid += 1 x = nid / float(self.length(mode)) if trapOverflow and x > 1.: raise ValueError('''pIdentity overflow due to multiple hits (see docs)? To avoid this error message, use trapOverflow=False option.''') return x def longestSegment(self, segment, pIdentityMin=.9, minAlignSize=1, mode=max, **kwargs): besthit = None for i in xrange(len(segment)): ni = 0 # IDENTITY COUNT nm = 0 # MISMATCH COUNT for j in xrange(i, -1, -1): ni += segment[j][2] l = mode(segment[i][0] + segment[i][2] - segment[j][0], segment[i][1] + segment[i][2] - segment[j][1]) pIdentity = float(ni) / l if pIdentity >= pIdentityMin and (besthit is None or ni + nm > besthit[4]): besthit = (segment[j][0], segment[i][0] + segment[i][2], segment[j][1], segment[i][1] + segment[i][2], ni + nm) nm += segment[j][3] if besthit is None: return None elif besthit[4] >= minAlignSize: return besthit[:4] else: return None def conservedSegment(self, **kwargs): "calculate fractional identity for this pairwise alignment" start1 = self.sourcePath.start s1 = str(self.sourcePath).upper() start2 = self.targetPath.start s2 = str(self.targetPath).upper() i1 = None segment = [] n = 0 # Find unbroken identity segments. for srcPath, destPath in self.items(): isrc = srcPath.start - start1 idest = destPath.start - start2 for i in xrange(len(srcPath)): if s1[isrc + i] == s2[idest + i]: # EXACT MATCH if i1 is None: # START NEW IDENTITY-SEGMENT seg1, i1 = isrc + i, isrc + i seg2, i2 = idest + i, idest + i elif i1 + 1 != isrc + i or i2 + 1 != idest + i: # Not contiguous, break. segment.append((seg1 + start1, seg2 + start2, i1 + 1 - seg1, n)) n = 0 # RESET MISMATCH COUNT seg1, i1 = isrc + i, isrc + i seg2, i2 = idest + i, idest + i else: i1 = isrc + i i2 = idest + i else: # MISMATCH if i1 is not None: # BREAK PREVIOUS SEGMENT segment.append((seg1 + start1, seg2 + start2, i1 + 1 - seg1, n)) i1 = None n = 0 # RESET MISMATCH COUNT n += 1 # COUNT MISMATCH if i1 is not None: segment.append((seg1 + start1, seg2 + start2, i1 + 1 - seg1, n)) return self.longestSegment(segment, **kwargs) def pAligned(self, mode=max, trapOverflow=True): 'get fraction of aligned letters for this pairwise alignment' nid = 0 for srcPath, destPath in self.items(): nid += len(destPath) x = nid / float(self.length(mode)) if trapOverflow and x > 1.: raise ValueError('''pAligned overflow due to multiple hits (see docs)? To avoid this error message, use trapOverflow=False option.''') return x class SeqDBDescriptor(object): 'forwards attribute requests to self.pathForward' def __init__(self, attr): self.attr = attr def __get__(self, obj, objtype): # Raises an AttributeError if None. return getattr(obj.pathForward, self.attr) class SeqDBSlice(SeqPath): 'JUST A WRAPPER FOR SCHEMA TO HANG SHADOW ATTRIBUTES ON...' id = SeqDBDescriptor('id') db = SeqDBDescriptor('db') # CURRENTLY UNUSED ## class PathEdgeDict(dict): ## ## def __init__(self, p): ## self.path = p.path ## self.pos = p.end - 1 ## if p.end < len(p.path): ## dict.__setitem__(self, p.path[p.end], 1) ## if hasattr(p.path, '_next') and self.pos in p.path._next: ## dict.update(self, p.path._next[self.pos]) ## ## def __setitem__(self, k, val): ## print 'entered PathEdgeDict.setitem' ## if not hasattr(self.path, '_next'): ## self.path._next = {} ## if self.pos not in self.path._next: ## self.path._next[self.pos] = {} ## self.path._next[self.pos][k] = val ## dict.__setitem__(self, k, val) ## class PathNextDescr(object): ## ## def __init__(self, attrName='next'): ## self.attrName = attrName ## ## def __get__(self, obj, objtype): ## return PathEdgeDict(obj) ## ## def __set__(self, obj, val): ## raise AttributeError(self.attrName + ' is read-only!') ## class LengthDescriptor(object): ## ## def __init__(self, attr): ## self.attr = attr ## ## def __get__(self, obj, objtype): ## return len(getattr(obj, self.attr)) ## ## def __set__(self, obj, val): ## raise AttributeError(self.attr + ' is read-only!') ## def firstItem(aList): ## if hasattr(aList, '__iter__'): ## for i in aList: ## return i ## else: ## return aList PK7“;03œh›h›pygr/sequence.pyc;ò |†Kc@sŒdklZdkZdkTdZdefd„ƒYZdefd„ƒYZdefd „ƒYZd efd „ƒYZ d „Z d „Z d„Z defd„ƒYZ defd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd „ƒYZd!efd"„ƒYZd#efd$„ƒYZdS(%(s generatorsN(s*iþÿÿÿsReadOnlyAttributecBstZd„Zd„ZRS(NcCs ||_dS(N(sattrsself(sselfsattr((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__init__ scCst||iƒSdS(N(sgetattrsobjsselfsattr(sselfsobjsklass((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__get__s(s__name__s __module__s__init__s__get__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysReadOnlyAttribute s sIntervalTransformcBs¤tZdZedƒZedƒZeeed„Zd„Zd„Z d„Z d„Z d„Z d „Z d „Zd „Zd „Zd „Zd„Zd„ZRS(sARepresents coordinate transformation from one interval to anothers_srcPaths _destPathcCs·t|ƒtt|ƒƒ|_||_||_|t jo |t jo3yt ||ƒ}Wq~t j o t }q~Xn|t jo(|t jo||}n||_ndS(sMAP FROM srcPath -> destPathN(slensdestPathsfloatssrcPathsselfsscales_srcPaths _destPathsedgeInfosNonesedgeAttrsgetattrsAttributeErrors edgeIndex(sselfssrcPathsdestPathsedgeInfosedgeAttrs edgeIndex((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__init__s    cCst||iƒSdS(s9transform int srcPath local coord to destPath local coordN(sintsisselfsscale(sselfsi((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysxform/scCst||iƒSdS(s9transform int destPath local coord to srcPath local coordN(sintsisselfsscale(sselfsi((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys xformBack3scCs™|i|ijo"|i|i|i|ifSny>|ii|ijo$|i |i|i |ifSnWntj onXtdƒ‚dS(s2compute srcPath start,stop in ourPath local coordss-sequence mismatch: argument not from this seqN(ssrcPathspathsourPathsstartsstops_reversesAttributeErrors ValueError(sselfssrcPathsourPath((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys getStartStop7s"(cCsJ|i||iƒ\}}t|i|i|ƒ|i|ƒdtƒSdS(s÷Apply this transformation to an interval NB: it is not restricted to the domain of this transform, and thus can extend BEYOND the boundaries of this transform. If you want it clipped use [] interface instead of ().srelativeToStartN( sselfs getStartStopssrcPathsstartsstopsSeqPathsdestPathsxformsTrue(sselfssrcPathsstopsstart((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__call__Cs!cCsJ|i||iƒ\}}t|i|i|ƒ|i|ƒdtƒSdS(sreverse transform an intervalsrelativeToStartN( sselfs getStartStopsdestPathsstartsstopsSeqPathssrcPaths xformBacksTrue(sselfsdestPathsstopsstart((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysreverseLscCs|||iƒSdS(skintersect srcPath with domain of this transform, then return transform to target domain coordinatesN(sselfssrcPath(sselfssrcPath((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys __getitem__Rsccs |iVdS(N(sselfssrcPath(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__iter__Wsccs|i|ifVdS(N(sselfssrcPathsdestPath(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysitemsZscCsHyt|id|ƒSWn)ttfj otd|ƒ‚nXdS(s3provide transparent wrapper for edgeInfo attributessedgeInfosQneither IntervalTransform nor edgeinfo has attr N(sgetattrsselfs__dict__sattrsKeyErrorsAttributeError(sselfsattr((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys __getattr__]s cCsŸ|iiƒ}|iiƒ}h}x:|iƒD],\}}||d|<|||d|calculate total #identity matches between srcPath and destPathiiN( snidsstrsselfssrcPathsupperssrcsdestPathsdestslensslensi(sselfssrcsslensdestsnidsi((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys nidentityus  cCs|itt|iƒƒSdS(s9calculate fractional identity for this pairwise alignmentN(sselfs nidentitysfloatslenssrcPath(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys percent_id‚s(s__name__s __module__s__doc__sReadOnlyAttributessrcPathsdestPathsNones__init__sxforms xformBacks getStartStops__call__sreverses __getitem__s__iter__sitemss __getattr__s repr_dicts nidentitys percent_id(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysIntervalTransforms            sLetterEdgeDescriptorcBstZdZd„ZRS(s-cached dict of sequences traversing this edgecCsDy |iSWn2tj o&|ii|iƒ|_|iSnXdS(N(sedges_seqssAttributeErrorsorigins getEdgeSeqsstarget(sselfsedgesobjtype((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__get__s  (s__name__s __module__s__doc__s__get__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysLetterEdgeDescriptorŒs s LetterEdgecBsDtZdZeƒZd„Zd„Zd„Zd„Zd„Z RS(sDrepresents an edge from origin -> target. seqs returns its sequencescCs||_||_dS(N(soriginsselfstarget(sselfsoriginstarget((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__init__›s ccs(x!|iD]}|ii|ƒVq WdS(s<generate origin seqpos for sequences that traverse this edgeN(sselfsseqssseqsorigins getSeqPos(sselfsseq((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__iter__Ÿs ccs:x3|iD](}|ii|ƒ|ii|ƒfVq WdS(sCgenerate origin,target seqpos for sequences that traverse this edgeN(sselfsseqssseqsorigins getSeqPosstarget(sselfsseq((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys iteritems¥s cCs[y |i}Wntj otdƒ‚nX|ii|iƒ|ii|iƒfSdS(sVreturn origin,target seqpos for sequence k; raise KeyError if not in this edges0k not a valid sequence: it has no path attributeN(skspathsAttributeErrors TypeErrorsselfsorigins getSeqPosstarget(sselfsk((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys __getitem__ªs  cCsey2|i|ijo|i|ijodSnWntj onXtt|ƒt|ƒƒSdS(s3two edge objects match if they link identical nodesiN(sselfsoriginsotherstargetsAttributeErrorscmpsid(sselfsother((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__cmp__³s& ( s__name__s __module__s__doc__sLetterEdgeDescriptorsseqss__init__s__iter__s iteritemss __getitem__s__cmp__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys LetterEdge—s      cCsly4|djo|i| | ! Sn|i||!SWn1tj o%|tjot||ƒSqhnXdS(s˜get slice of top-level sequence object, in absolute coordinates. This method calls getitem on the top-level sequence object i.e. seq.pathForwardiN(sstartsseqs pathForwardsstopsAttributeErrorsNonesslice(sseqsstartsstop((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys absoluteSlice½s  cCs.|djo|| | ! Sn |||!SdS(s“get slice of this sequence object, in relative coordinates. This method calls getitem on the top-level sequence object i.e. seq.pathForwardiN(sstartsseqsstop(sseqsstartsstop((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys relativeSliceËs cCs^|tjo|Sn|tjo d}n||i9}|o||iSn ||iSdS(sÆAdjust index value either relative to myslice.start (positive indexes) or relative to myslice.stop (negative indexes). Handle the case where i is None or myslice is None appropriately. iN(smyslicesNonesisstepsrelativeToStartsstartsstop(sismyslicesrelativeToStart((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys sumSliceIndexÕs    sSeqOriDescriptorcBstZdZd„ZRS(s$Get orientation of sequence intervalcCs |idjodSndSdS(Niiiÿÿÿÿ(sseqsstart(sselfsseqsobjtype((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__get__ès(s__name__s __module__s__doc__s__get__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysSeqOriDescriptorås sPathForwardDescrcBstZdZd„ZRS(s)get the top-level forward sequence objectcCs)|idjo |iSn |iiSdS(Ni(sseqs orientationspaths_reverse(sselfsseqsobjtype((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__get__òs (s__name__s __module__s__doc__s__get__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysPathForwardDescrïs sAbsIntervalDescrcBstZdZd„ZRS(s)get the top-level forward sequence objectcCs:|idjo|i|ifSn|i |i fSdS(Ni(sseqs orientationsstartsstop(sselfsseqsobjtype((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__get__üs(s__name__s __module__s__doc__s__get__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysAbsIntervalDescrùs sSeqPathcBs—tZdZeƒZeƒZeƒZde e e e e d„Z d„Z d„Z d„Zd„Zd„Zd„Zd „Zd „Zd „Zd „Zd „Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zhdd<dd<dd<dd<dd<dd<dd<dd <d d<dd<d!d<d"d"stop means reverse orientation, i.e. (-path)[-stop:-start] start/stop are LOCAL coordinates relative to the specified path By default, start/stop are interpreted in the usual Python slicing way, i.e. a negative start value is interpreted as len(path)-start. The relativeToStart option turns off this behavior, so that negative values are interpreted as negative coordinates in the local coordinate system of path. absoluteCoords option allows intervals to be created using Pygr's internal coordinate convention i.e. -20,-10 --> -(path.pathForward[10:20]) is&cannot create empty sequence interval!iN( s reversePathspathsstopsstartsselfs_reversesNonesabsoluteCoordss pathForwards sumSliceIndexsrelativeToStarts IndexErrorsstep(sselfspathsstartsstopssteps reversePathsrelativeToStartsabsoluteCoords((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__init__ sB     ,,'  '        cOsCy|iii}Wntj o t}nX||||ŽSdS(s<create a subslice using appropriate class based on containerN( spaths pathForwardsdbsitemSliceClasssklasssAttributeErrorsSeqPathslskwargs(sselfspathslskwargssklass((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys classySlice@s  cCs|i|||dtƒSdS(s6get slice of top-level sequence, using absolute coordssabsoluteCoordsN(sselfs classySlicesstartsstopsTrue(sselfsstartsstop((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysabsolute_sliceHscCs6t|tiƒo=|djot|tdƒ}qPt||ddƒ}nt|tiƒo#|i||i |i |i ƒSn¡t|t ƒo|i |i j otdƒ‚nyO|i|i |i |i t|ƒ|i |i ƒ}h|t||ƒreturn dict of sequences that traverse edge from self -> otherN(sselfspathsothersstopsstartsstep(sselfsother((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys getEdgeSeqsxs&cCs+|i|ijo|Sntdƒ‚dS(s=get seq interval corresponding to this node in sequence graphsseq not on this path!N(sseqspathsselfsKeyError(sselfsseq((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys getSeqPosscCs+t|iƒt|iƒAt|iƒASdS(s,ensure that same seq intervals match in dictN(sidsselfspathshashsstartsstop(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__hash__†scCs]t|tƒ odSn|i|ijo)t|i|if|i|ifƒSntSdS(s-ensure that same seq intervals match in cmp()iÿÿÿÿN( s isinstancesothersSeqPathsselfspathscmpsstartsstopsNOT_ON_SAME_PATH(sselfsother((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__cmp__Šs )cCs‘t|tƒoI|i|ijo#|i|ijo|i|ijotSqtSn5t|t i ƒo!|i|jo ||ijSndS(N( s isinstancesksSeqPathspathsselfsstartsstopsTruesFalsestypessIntType(sselfsk((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys __contains__•s 9cCsw|i|ij otSn|i|ijo|i|ijp#|i|ijo|i|ijotSntSdS(s+check whether two paths on same seq overlapN(sselfspathspsFalsesstartsstopsTrue(sselfsp((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysoverlaps s LcCs«t|tƒo‹|i|ij otSnt|i|iƒ}t|i |i ƒ}||jo1|djo t}n|i |i||ƒSq§tSn t dƒ‚dS(s"find intersection of two intervalsis"SeqPath can only intersect SeqPathN( s isinstancesothersSeqPathsselfspathsNonesmaxsstartsminsstops classySlices TypeError(sselfsothersstopsstart((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__mul__ªs   cCst||ƒSdS(s6return transform from other -> self coordinate systemsN(sIntervalTransformsothersself(sselfsother((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__div__¼scCsòy'|iƒtjotdƒ‚nWntj onX||ijoDy |iSWqîtj o&|i|dtƒ|_|iSqîXn^|i djo&|i|i|i |i |i ƒSn(|i|ii|i |i |i ƒSdS(s+return same interval in reverse orientationsMprotein sequence has no reverse orientation!s reversePathiN( sselfsseqtypesPROTEIN_SEQTYPEs ValueErrorsAttributeErrorspaths_reverses classySlicesTrues orientationsstopsstartsstep(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__neg__Às" cCs¬|i|ij otdƒ‚n|i|ijo |i}n |i}|i|ijo |i}n |i}|djo t}n|i|i|||iƒSdS(s=return merged interval spanning both self and other intervalss(incompatible intervals cannot be merged.iN( sselfspathsothers ValueErrorsstartsstopsNones classySlicesstep(sselfsothersstopsstart((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__add__Õs      cCsq|i|ij otdƒ‚n|i|ijo|i|_n|i|ijo|i|_n|SdS(s=return merged interval spanning both self and other intervalss(incompatible intervals cannot be merged.N(sselfspathsothers ValueErrorsstartsstop(sselfsother((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__iadd__çscCs|i|it|iƒSdS(s.get the sequence interval before this intervalN(sselfs classySlicespathsNonesstart(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysbeforeñscCs=|idjotdƒ‚n|i|i|itƒSdS(s-get the sequence interval after this intervalis%cannot create empty sequence intervalN(sselfsstops IndexErrors classySlicespathsNone(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysafterõscCs||ijSdS(sPtest whether this constitutes the whole sequence (in either orientation)N(sselfspath(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysis_full_lengthûssastscsgsusnsAsTsCsGsUsNcCs_digi}tt|ƒdddƒD]'}||ii ||||ƒƒq*~ƒSdS(s$get reverse complement of a string ssiiÿÿÿÿN( sjoinsappends_[1]srangeslensssisselfs _complementsget(sselfsssis_[1]((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysreverse_complementscCsu|i}y |iSWnZtj oNy|iiSWqqtj o*tt|dd!ƒƒ|_|iSqqXnXdS(s'Get the sequence type for this sequenceii(N(sselfs pathForwardspaths_seqtypesAttributeErrorsdbs guess_seqtypesstr(sselfspath((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysseqtype s  cCs^|idjo|ii|i|iƒSn.|iii|i |i ƒ}|i|ƒSdS(sQstring for this sequence interval; use reverse complement if necessary...iN( sselfs orientationspathsstrslicesstartsstops_reversesssreverse_complement(sselfss((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__str__s  cCsty|ii}Wntj o d}nX|idjod||i |i fSnd||i|ifSdS(Ns@NONAMEis -%s[%d:%d]s %s[%d:%d](sselfs pathForwardsidsAttributeErrors orientationsstopsstart(sselfsid((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__repr__s cCsdy|ii}Wntj o|i}nXhd|<d|i<d|i<d|i    5              r  sLengthDescriptorcBstZdZd„ZRS(s+property that just returns length of objectcCst|ƒSdS(N(slensseq(sselfsseqsklass((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__get__6s(s__name__s __module__s__doc__s__get__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysLengthDescriptor3s s SequenceBasecBsMtZdZdZeƒZdZdZd„Zd„Z d„Z d„Z RS(sObase sequence type assumes there will be a seq attribute providing sequenceiicCs ||_dS(N(sselfspath(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__init__CscCs ||_dS(s(change this sequence to the string N(sseqsself(sselfsseq((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysupdateFscCst|iƒSdS(s6default: get the whole self.seq and compute its lengthN(slensselfsseq(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__len__JscCs|i||!SdS(s5default method assumes self.seq is a sliceable stringN(sselfsseqsstartsstop(sselfsstartsstop((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysstrsliceNs( s__name__s __module__s__doc__sstartsLengthDescriptorsstopssteps orientations__init__supdates__len__sstrslice(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys SequenceBase;s     sSequencecBstZdZd„ZRS(s@default sequence class initialized with a sequence string and IDcCs#ti|ƒ||_||_dS(N(s SequenceBases__init__sselfsidsssseq(sselfsssid((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__init__Vs  (s__name__s __module__s__doc__s__init__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysSequenceSs s SeqFilterDictcBs5tZdZgd„Zd„Zd„Zd„ZRS(s·stores a set of intervals, either on init or via self[ival]=junk; self[ival] returns intersection of ival and the overlapping interval in self if any; otherwise raise KeyErrorcCs,ti|ƒx|D]}t||WqW|tjotSn"|d|jo |d SntSdS(Niiÿÿÿÿiiii(sNonesbesthitsxrangeslenssegmentsisnisnmsjsmodeslsfloats pIdentitys pIdentityMins minAlignSize( sselfssegments pIdentityMins minAlignSizesmodeskwargssnisbesthitsnmsisjsls pIdentity((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pyslongestSegmentÖs&&)/U  cKsQ|ii}t|iƒiƒ}|ii}t|iƒiƒ}t } g}d} x¬|iƒD]ž\} }| i|} |i|}xutt| ƒƒD]a}|| ||||joî| t jo8| || |f\}} ||||f\} }qû| d| |jp|d||jog|i||| || d|| fƒd} | || |f\}} ||||f\} }qû| |} ||}qš| t j o9|i||| || d|| fƒt } d} n| d7} qšWqaW| t j o-|i||| || d|| fƒn|i||SdS(s9calculate fractional identity for this pairwise alignmentiiN(sselfs sourcePathsstartsstart1sstrsupperss1s targetPathsstart2ss2sNonesi1ssegmentsnsitemsssrcPathsdestPathsisrcsidestsxrangeslensisseg1sseg2si2sappendslongestSegmentskwargs(sselfskwargssidestsi2sisstart2ss2sstart1sseg1snsi1ssrcPathsisrcsseg2ssegmentss1sdestPath((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysconservedSegmentîsB      *)  )  -cCsxd}x*|iƒD]\}}|t|ƒ7}qW|t|i|ƒƒ}|o |djot dƒ‚n|SdS(s;get fraction of aligned letters for this pairwise alignmentif1.0s¨pAligned overflow due to multiple hits (see docs)? To avoid this error message, use trapOverflow=False option.N( snidsselfsitemsssrcPathsdestPathslensfloatslengthsmodesxs trapOverflows ValueError(sselfsmodes trapOverflowsdestPathsnidssrcPathsx((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pyspAligneds (s__name__s __module__s__doc__sNonesFalses__init__sitemssget_gapssTrues__iter__smaxslengths pIdentityslongestSegmentsconservedSegmentspAligned(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys Seq2SeqEdge~s     'sSeqDBDescriptorcBs tZdZd„Zd„ZRS(s/forwards attribute requests to self.pathForwardcCs ||_dS(N(sattrsself(sselfsattr((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__init__%scCst|i|iƒSdS(N(sgetattrsobjs pathForwardsselfsattr(sselfsobjsobjtype((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__get__(s(s__name__s __module__s__doc__s__init__s__get__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysSeqDBDescriptor"s  s SeqDBSlicecBs&tZdZedƒZedƒZRS(s9JUST A WRAPPER FOR SCHEMA TO HANG SHADOW ATTRIBUTES ON...sidsdb(s__name__s __module__s__doc__sSeqDBDescriptorsidsdb(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys SeqDBSlice-s  (s __future__s generatorsstypesssequtilsNOT_ON_SAME_PATHsobjectsReadOnlyAttributesIntervalTransformsLetterEdgeDescriptors LetterEdges absoluteSlices relativeSlices sumSliceIndexsSeqOriDescriptorsPathForwardDescrsAbsIntervalDescrsSeqPathsLengthDescriptors SequenceBasesSequencesdicts SeqFilterDicts Seq2SeqEdgesSeqDBDescriptors SeqDBSlice(s sumSliceIndexsReadOnlyAttributesSeqDBDescriptorsIntervalTransformsAbsIntervalDescrs absoluteSlices generatorss relativeSlices SeqDBSlices Seq2SeqEdgesPathForwardDescrs LetterEdgesLengthDescriptors SeqFilterDictsSeqPathstypessNOT_ON_SAME_PATHsSequencesSeqOriDescriptors SequenceBasesLetterEdgeDescriptor((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys?s,  r &     ÿ1 "¤ PK7“;03œh›h›pygr/sequence.pyo;ò |†Kc@sŒdklZdkZdkTdZdefd„ƒYZdefd„ƒYZdefd „ƒYZd efd „ƒYZ d „Z d „Z d„Z defd„ƒYZ defd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd „ƒYZd!efd"„ƒYZd#efd$„ƒYZdS(%(s generatorsN(s*iþÿÿÿsReadOnlyAttributecBstZd„Zd„ZRS(NcCs ||_dS(N(sattrsself(sselfsattr((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__init__ scCst||iƒSdS(N(sgetattrsobjsselfsattr(sselfsobjsklass((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__get__s(s__name__s __module__s__init__s__get__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysReadOnlyAttribute s sIntervalTransformcBs¤tZdZedƒZedƒZeeed„Zd„Zd„Z d„Z d„Z d„Z d „Z d „Zd „Zd „Zd „Zd„Zd„ZRS(sARepresents coordinate transformation from one interval to anothers_srcPaths _destPathcCs·t|ƒtt|ƒƒ|_||_||_|t jo |t jo3yt ||ƒ}Wq~t j o t }q~Xn|t jo(|t jo||}n||_ndS(sMAP FROM srcPath -> destPathN(slensdestPathsfloatssrcPathsselfsscales_srcPaths _destPathsedgeInfosNonesedgeAttrsgetattrsAttributeErrors edgeIndex(sselfssrcPathsdestPathsedgeInfosedgeAttrs edgeIndex((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__init__s    cCst||iƒSdS(s9transform int srcPath local coord to destPath local coordN(sintsisselfsscale(sselfsi((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysxform/scCst||iƒSdS(s9transform int destPath local coord to srcPath local coordN(sintsisselfsscale(sselfsi((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys xformBack3scCs™|i|ijo"|i|i|i|ifSny>|ii|ijo$|i |i|i |ifSnWntj onXtdƒ‚dS(s2compute srcPath start,stop in ourPath local coordss-sequence mismatch: argument not from this seqN(ssrcPathspathsourPathsstartsstops_reversesAttributeErrors ValueError(sselfssrcPathsourPath((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys getStartStop7s"(cCsJ|i||iƒ\}}t|i|i|ƒ|i|ƒdtƒSdS(s÷Apply this transformation to an interval NB: it is not restricted to the domain of this transform, and thus can extend BEYOND the boundaries of this transform. If you want it clipped use [] interface instead of ().srelativeToStartN( sselfs getStartStopssrcPathsstartsstopsSeqPathsdestPathsxformsTrue(sselfssrcPathsstopsstart((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__call__Cs!cCsJ|i||iƒ\}}t|i|i|ƒ|i|ƒdtƒSdS(sreverse transform an intervalsrelativeToStartN( sselfs getStartStopsdestPathsstartsstopsSeqPathssrcPaths xformBacksTrue(sselfsdestPathsstopsstart((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysreverseLscCs|||iƒSdS(skintersect srcPath with domain of this transform, then return transform to target domain coordinatesN(sselfssrcPath(sselfssrcPath((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys __getitem__Rsccs |iVdS(N(sselfssrcPath(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__iter__Wsccs|i|ifVdS(N(sselfssrcPathsdestPath(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysitemsZscCsHyt|id|ƒSWn)ttfj otd|ƒ‚nXdS(s3provide transparent wrapper for edgeInfo attributessedgeInfosQneither IntervalTransform nor edgeinfo has attr N(sgetattrsselfs__dict__sattrsKeyErrorsAttributeError(sselfsattr((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys __getattr__]s cCsŸ|iiƒ}|iiƒ}h}x:|iƒD],\}}||d|<|||d|calculate total #identity matches between srcPath and destPathiiN( snidsstrsselfssrcPathsupperssrcsdestPathsdestslensslensi(sselfssrcsslensdestsnidsi((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys nidentityus  cCs|itt|iƒƒSdS(s9calculate fractional identity for this pairwise alignmentN(sselfs nidentitysfloatslenssrcPath(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys percent_id‚s(s__name__s __module__s__doc__sReadOnlyAttributessrcPathsdestPathsNones__init__sxforms xformBacks getStartStops__call__sreverses __getitem__s__iter__sitemss __getattr__s repr_dicts nidentitys percent_id(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysIntervalTransforms            sLetterEdgeDescriptorcBstZdZd„ZRS(s-cached dict of sequences traversing this edgecCsDy |iSWn2tj o&|ii|iƒ|_|iSnXdS(N(sedges_seqssAttributeErrorsorigins getEdgeSeqsstarget(sselfsedgesobjtype((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__get__s  (s__name__s __module__s__doc__s__get__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysLetterEdgeDescriptorŒs s LetterEdgecBsDtZdZeƒZd„Zd„Zd„Zd„Zd„Z RS(sDrepresents an edge from origin -> target. seqs returns its sequencescCs||_||_dS(N(soriginsselfstarget(sselfsoriginstarget((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__init__›s ccs(x!|iD]}|ii|ƒVq WdS(s<generate origin seqpos for sequences that traverse this edgeN(sselfsseqssseqsorigins getSeqPos(sselfsseq((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__iter__Ÿs ccs:x3|iD](}|ii|ƒ|ii|ƒfVq WdS(sCgenerate origin,target seqpos for sequences that traverse this edgeN(sselfsseqssseqsorigins getSeqPosstarget(sselfsseq((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys iteritems¥s cCs[y |i}Wntj otdƒ‚nX|ii|iƒ|ii|iƒfSdS(sVreturn origin,target seqpos for sequence k; raise KeyError if not in this edges0k not a valid sequence: it has no path attributeN(skspathsAttributeErrors TypeErrorsselfsorigins getSeqPosstarget(sselfsk((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys __getitem__ªs  cCsey2|i|ijo|i|ijodSnWntj onXtt|ƒt|ƒƒSdS(s3two edge objects match if they link identical nodesiN(sselfsoriginsotherstargetsAttributeErrorscmpsid(sselfsother((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__cmp__³s& ( s__name__s __module__s__doc__sLetterEdgeDescriptorsseqss__init__s__iter__s iteritemss __getitem__s__cmp__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys LetterEdge—s      cCsly4|djo|i| | ! Sn|i||!SWn1tj o%|tjot||ƒSqhnXdS(s˜get slice of top-level sequence object, in absolute coordinates. This method calls getitem on the top-level sequence object i.e. seq.pathForwardiN(sstartsseqs pathForwardsstopsAttributeErrorsNonesslice(sseqsstartsstop((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys absoluteSlice½s  cCs.|djo|| | ! Sn |||!SdS(s“get slice of this sequence object, in relative coordinates. This method calls getitem on the top-level sequence object i.e. seq.pathForwardiN(sstartsseqsstop(sseqsstartsstop((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys relativeSliceËs cCs^|tjo|Sn|tjo d}n||i9}|o||iSn ||iSdS(sÆAdjust index value either relative to myslice.start (positive indexes) or relative to myslice.stop (negative indexes). Handle the case where i is None or myslice is None appropriately. iN(smyslicesNonesisstepsrelativeToStartsstartsstop(sismyslicesrelativeToStart((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys sumSliceIndexÕs    sSeqOriDescriptorcBstZdZd„ZRS(s$Get orientation of sequence intervalcCs |idjodSndSdS(Niiiÿÿÿÿ(sseqsstart(sselfsseqsobjtype((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__get__ès(s__name__s __module__s__doc__s__get__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysSeqOriDescriptorås sPathForwardDescrcBstZdZd„ZRS(s)get the top-level forward sequence objectcCs)|idjo |iSn |iiSdS(Ni(sseqs orientationspaths_reverse(sselfsseqsobjtype((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__get__òs (s__name__s __module__s__doc__s__get__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysPathForwardDescrïs sAbsIntervalDescrcBstZdZd„ZRS(s)get the top-level forward sequence objectcCs:|idjo|i|ifSn|i |i fSdS(Ni(sseqs orientationsstartsstop(sselfsseqsobjtype((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__get__üs(s__name__s __module__s__doc__s__get__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysAbsIntervalDescrùs sSeqPathcBs—tZdZeƒZeƒZeƒZde e e e e d„Z d„Z d„Z d„Zd„Zd„Zd„Zd „Zd „Zd „Zd „Zd „Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zhdd<dd<dd<dd<dd<dd<dd<dd <d d<dd<d!d<d"d"stop means reverse orientation, i.e. (-path)[-stop:-start] start/stop are LOCAL coordinates relative to the specified path By default, start/stop are interpreted in the usual Python slicing way, i.e. a negative start value is interpreted as len(path)-start. The relativeToStart option turns off this behavior, so that negative values are interpreted as negative coordinates in the local coordinate system of path. absoluteCoords option allows intervals to be created using Pygr's internal coordinate convention i.e. -20,-10 --> -(path.pathForward[10:20]) is&cannot create empty sequence interval!iN( s reversePathspathsstopsstartsselfs_reversesNonesabsoluteCoordss pathForwards sumSliceIndexsrelativeToStarts IndexErrorsstep(sselfspathsstartsstopssteps reversePathsrelativeToStartsabsoluteCoords((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__init__ sB     ,,'  '        cOsCy|iii}Wntj o t}nX||||ŽSdS(s<create a subslice using appropriate class based on containerN( spaths pathForwardsdbsitemSliceClasssklasssAttributeErrorsSeqPathslskwargs(sselfspathslskwargssklass((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys classySlice@s  cCs|i|||dtƒSdS(s6get slice of top-level sequence, using absolute coordssabsoluteCoordsN(sselfs classySlicesstartsstopsTrue(sselfsstartsstop((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysabsolute_sliceHscCs6t|tiƒo=|djot|tdƒ}qPt||ddƒ}nt|tiƒo#|i||i |i |i ƒSn¡t|t ƒo|i |i j otdƒ‚nyO|i|i |i |i t|ƒ|i |i ƒ}h|t||ƒreturn dict of sequences that traverse edge from self -> otherN(sselfspathsothersstopsstartsstep(sselfsother((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys getEdgeSeqsxs&cCs+|i|ijo|Sntdƒ‚dS(s=get seq interval corresponding to this node in sequence graphsseq not on this path!N(sseqspathsselfsKeyError(sselfsseq((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys getSeqPosscCs+t|iƒt|iƒAt|iƒASdS(s,ensure that same seq intervals match in dictN(sidsselfspathshashsstartsstop(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__hash__†scCs]t|tƒ odSn|i|ijo)t|i|if|i|ifƒSntSdS(s-ensure that same seq intervals match in cmp()iÿÿÿÿN( s isinstancesothersSeqPathsselfspathscmpsstartsstopsNOT_ON_SAME_PATH(sselfsother((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__cmp__Šs )cCs‘t|tƒoI|i|ijo#|i|ijo|i|ijotSqtSn5t|t i ƒo!|i|jo ||ijSndS(N( s isinstancesksSeqPathspathsselfsstartsstopsTruesFalsestypessIntType(sselfsk((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys __contains__•s 9cCsw|i|ij otSn|i|ijo|i|ijp#|i|ijo|i|ijotSntSdS(s+check whether two paths on same seq overlapN(sselfspathspsFalsesstartsstopsTrue(sselfsp((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysoverlaps s LcCs«t|tƒo‹|i|ij otSnt|i|iƒ}t|i |i ƒ}||jo1|djo t}n|i |i||ƒSq§tSn t dƒ‚dS(s"find intersection of two intervalsis"SeqPath can only intersect SeqPathN( s isinstancesothersSeqPathsselfspathsNonesmaxsstartsminsstops classySlices TypeError(sselfsothersstopsstart((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__mul__ªs   cCst||ƒSdS(s6return transform from other -> self coordinate systemsN(sIntervalTransformsothersself(sselfsother((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__div__¼scCsòy'|iƒtjotdƒ‚nWntj onX||ijoDy |iSWqîtj o&|i|dtƒ|_|iSqîXn^|i djo&|i|i|i |i |i ƒSn(|i|ii|i |i |i ƒSdS(s+return same interval in reverse orientationsMprotein sequence has no reverse orientation!s reversePathiN( sselfsseqtypesPROTEIN_SEQTYPEs ValueErrorsAttributeErrorspaths_reverses classySlicesTrues orientationsstopsstartsstep(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__neg__Às" cCs¬|i|ij otdƒ‚n|i|ijo |i}n |i}|i|ijo |i}n |i}|djo t}n|i|i|||iƒSdS(s=return merged interval spanning both self and other intervalss(incompatible intervals cannot be merged.iN( sselfspathsothers ValueErrorsstartsstopsNones classySlicesstep(sselfsothersstopsstart((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__add__Õs      cCsq|i|ij otdƒ‚n|i|ijo|i|_n|i|ijo|i|_n|SdS(s=return merged interval spanning both self and other intervalss(incompatible intervals cannot be merged.N(sselfspathsothers ValueErrorsstartsstop(sselfsother((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__iadd__çscCs|i|it|iƒSdS(s.get the sequence interval before this intervalN(sselfs classySlicespathsNonesstart(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysbeforeñscCs=|idjotdƒ‚n|i|i|itƒSdS(s-get the sequence interval after this intervalis%cannot create empty sequence intervalN(sselfsstops IndexErrors classySlicespathsNone(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysafterõscCs||ijSdS(sPtest whether this constitutes the whole sequence (in either orientation)N(sselfspath(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysis_full_lengthûssastscsgsusnsAsTsCsGsUsNcCs_digi}tt|ƒdddƒD]'}||ii ||||ƒƒq*~ƒSdS(s$get reverse complement of a string ssiiÿÿÿÿN( sjoinsappends_[1]srangeslensssisselfs _complementsget(sselfsssis_[1]((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysreverse_complementscCsu|i}y |iSWnZtj oNy|iiSWqqtj o*tt|dd!ƒƒ|_|iSqqXnXdS(s'Get the sequence type for this sequenceii(N(sselfs pathForwardspaths_seqtypesAttributeErrorsdbs guess_seqtypesstr(sselfspath((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysseqtype s  cCs^|idjo|ii|i|iƒSn.|iii|i |i ƒ}|i|ƒSdS(sQstring for this sequence interval; use reverse complement if necessary...iN( sselfs orientationspathsstrslicesstartsstops_reversesssreverse_complement(sselfss((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__str__s  cCsty|ii}Wntj o d}nX|idjod||i |i fSnd||i|ifSdS(Ns@NONAMEis -%s[%d:%d]s %s[%d:%d](sselfs pathForwardsidsAttributeErrors orientationsstopsstart(sselfsid((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__repr__s cCsdy|ii}Wntj o|i}nXhd|<d|i<d|i<d|i    5              r  sLengthDescriptorcBstZdZd„ZRS(s+property that just returns length of objectcCst|ƒSdS(N(slensseq(sselfsseqsklass((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__get__6s(s__name__s __module__s__doc__s__get__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysLengthDescriptor3s s SequenceBasecBsMtZdZdZeƒZdZdZd„Zd„Z d„Z d„Z RS(sObase sequence type assumes there will be a seq attribute providing sequenceiicCs ||_dS(N(sselfspath(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__init__CscCs ||_dS(s(change this sequence to the string N(sseqsself(sselfsseq((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysupdateFscCst|iƒSdS(s6default: get the whole self.seq and compute its lengthN(slensselfsseq(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__len__JscCs|i||!SdS(s5default method assumes self.seq is a sliceable stringN(sselfsseqsstartsstop(sselfsstartsstop((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysstrsliceNs( s__name__s __module__s__doc__sstartsLengthDescriptorsstopssteps orientations__init__supdates__len__sstrslice(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys SequenceBase;s     sSequencecBstZdZd„ZRS(s@default sequence class initialized with a sequence string and IDcCs#ti|ƒ||_||_dS(N(s SequenceBases__init__sselfsidsssseq(sselfsssid((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__init__Vs  (s__name__s __module__s__doc__s__init__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysSequenceSs s SeqFilterDictcBs5tZdZgd„Zd„Zd„Zd„ZRS(s·stores a set of intervals, either on init or via self[ival]=junk; self[ival] returns intersection of ival and the overlapping interval in self if any; otherwise raise KeyErrorcCs,ti|ƒx|D]}t||WqW|tjotSn"|d|jo |d SntSdS(Niiÿÿÿÿiiii(sNonesbesthitsxrangeslenssegmentsisnisnmsjsmodeslsfloats pIdentitys pIdentityMins minAlignSize( sselfssegments pIdentityMins minAlignSizesmodeskwargssnisbesthitsnmsisjsls pIdentity((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pyslongestSegmentÖs&&)/U  cKsQ|ii}t|iƒiƒ}|ii}t|iƒiƒ}t } g}d} x¬|iƒD]ž\} }| i|} |i|}xutt| ƒƒD]a}|| ||||joî| t jo8| || |f\}} ||||f\} }qû| d| |jp|d||jog|i||| || d|| fƒd} | || |f\}} ||||f\} }qû| |} ||}qš| t j o9|i||| || d|| fƒt } d} n| d7} qšWqaW| t j o-|i||| || d|| fƒn|i||SdS(s9calculate fractional identity for this pairwise alignmentiiN(sselfs sourcePathsstartsstart1sstrsupperss1s targetPathsstart2ss2sNonesi1ssegmentsnsitemsssrcPathsdestPathsisrcsidestsxrangeslensisseg1sseg2si2sappendslongestSegmentskwargs(sselfskwargssidestsi2sisstart2ss2sstart1sseg1snsi1ssrcPathsisrcsseg2ssegmentss1sdestPath((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysconservedSegmentîsB      *)  )  -cCsxd}x*|iƒD]\}}|t|ƒ7}qW|t|i|ƒƒ}|o |djot dƒ‚n|SdS(s;get fraction of aligned letters for this pairwise alignmentif1.0s¨pAligned overflow due to multiple hits (see docs)? To avoid this error message, use trapOverflow=False option.N( snidsselfsitemsssrcPathsdestPathslensfloatslengthsmodesxs trapOverflows ValueError(sselfsmodes trapOverflowsdestPathsnidssrcPathsx((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pyspAligneds (s__name__s __module__s__doc__sNonesFalses__init__sitemssget_gapssTrues__iter__smaxslengths pIdentityslongestSegmentsconservedSegmentspAligned(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys Seq2SeqEdge~s     'sSeqDBDescriptorcBs tZdZd„Zd„ZRS(s/forwards attribute requests to self.pathForwardcCs ||_dS(N(sattrsself(sselfsattr((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__init__%scCst|i|iƒSdS(N(sgetattrsobjs pathForwardsselfsattr(sselfsobjsobjtype((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys__get__(s(s__name__s __module__s__doc__s__init__s__get__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pysSeqDBDescriptor"s  s SeqDBSlicecBs&tZdZedƒZedƒZRS(s9JUST A WRAPPER FOR SCHEMA TO HANG SHADOW ATTRIBUTES ON...sidsdb(s__name__s __module__s__doc__sSeqDBDescriptorsidsdb(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys SeqDBSlice-s  (s __future__s generatorsstypesssequtilsNOT_ON_SAME_PATHsobjectsReadOnlyAttributesIntervalTransformsLetterEdgeDescriptors LetterEdges absoluteSlices relativeSlices sumSliceIndexsSeqOriDescriptorsPathForwardDescrsAbsIntervalDescrsSeqPathsLengthDescriptors SequenceBasesSequencesdicts SeqFilterDicts Seq2SeqEdgesSeqDBDescriptors SeqDBSlice(s sumSliceIndexsReadOnlyAttributesSeqDBDescriptorsIntervalTransformsAbsIntervalDescrs absoluteSlices generatorss relativeSlices SeqDBSlices Seq2SeqEdgesPathForwardDescrs LetterEdgesLengthDescriptors SeqFilterDictsSeqPathstypessNOT_ON_SAME_PATHsSequencesSeqOriDescriptors SequenceBasesLetterEdgeDescriptor((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sequence.pys?s,  r &     ÿ1 "¤ PKd—~;zØU\ccpygr/sequtil.py DNA_SEQTYPE=0 RNA_SEQTYPE=1 PROTEIN_SEQTYPE=2 def guess_seqtype(s): dna_letters='AaTtUuGgCcNn' ndna=0 nU=0 nT=0 for l in s: if l in dna_letters: ndna += 1 if l=='U' or l=='u': nU += 1 elif l=='T' or l=='t': nT += 1 ratio=ndna/float(len(s)) if ratio>0.85: if nT>nU: return DNA_SEQTYPE else: return RNA_SEQTYPE else: return PROTEIN_SEQTYPE seq_id_counter=0 def new_seq_id(): global seq_id_counter seq_id_counter += 1 return str(seq_id_counter-1) def write_fasta(ofile, s, chunk=60, id=None, reformatter=None): "Trivial FASTA output" if id is None: try: id = str(s.id) except AttributeError: id = new_seq_id() ofile.write('>' + id + '\n') seq = str(s) if reformatter is not None: # APPLY THE DESIRED REFORMATTING seq = reformatter(seq) end = len(seq) pos = 0 while 1: ofile.write(seq[pos:pos+chunk] + '\n') pos += chunk if pos >= end: break return id # IN CASE CALLER WANTS TEMP ID WE MAY HAVE ASSIGNED def read_fasta(ifile): "iterate over id,title,seq from stream ifile" id = None isEmpty = True for line in ifile: if '>' == line[0]: if id is not None and len(seq) > 0: yield id, title, seq isEmpty = False id = line[1:].split()[0] title = line[len(id)+2:] seq = '' elif id is not None: # READ SEQUENCE for word in line.split(): # GET RID OF WHITESPACE seq += word if id is not None and len(seq) > 0: yield id, title, seq elif isEmpty: raise IOError('no readable sequence in FASTA file!') def read_fasta_one_line(ifile): # @CTB deprecated; remove "read a single sequence line, return id,title,seq" id = None seq = '' while True: line = ifile.readline(1024) # READ AT MOST 1KB if line == '': # EOF break elif '>' == line[0]: id = line[1:].split()[0] title = line[len(id)+2:] elif id is not None: # READ SEQUENCE for word in line.split(): # GET RID OF WHITESPACE seq += word if len(seq) > 0: return id, title, seq raise IOError('no readable sequence in FASTA file!') def read_fasta_lengths(ifile): "Generate sequence ID,length from stream ifile" id = None seqLength = 0 isEmpty = True for line in ifile: if '>' == line[0]: if id is not None and seqLength > 0: yield id, seqLength isEmpty = False id = line[1:].split()[0] seqLength = 0 elif id is not None: # READ SEQUENCE for word in line.split(): # GET RID OF WHITESPACE seqLength += len(word) if id is not None and seqLength > 0: yield id, seqLength elif isEmpty: raise IOError('no readable sequence in FASTA file!') class AATranslation(object): 'customizable translation class' geneticCode = dict(TTY='F', TTR='L', TCN='S', TAY='Y', TGY='C', TGG='W', CTN='L', CCN='P', CAY='H', CAR='Q', CGN='R', ATY='I', ATA='I', ATG='M', ACN='T', AAY='N', AAR='K', AGY='S', AGR='R', GTN='V', GCN='A', GAY='D', GAR='E', GGN='G', TAR='*', TGA='*') def __init__(self): 'initialize our translation dictionary by applying N,Y,R codes' geneticCode = self.geneticCode.copy() for codon, aa in self.geneticCode.items(): if codon[2] == 'N': geneticCode[codon[:2]+'A'] = aa geneticCode[codon[:2]+'T'] = aa geneticCode[codon[:2]+'G'] = aa geneticCode[codon[:2]+'C'] = aa elif codon[2] == 'Y': geneticCode[codon[:2]+'T'] = aa geneticCode[codon[:2]+'C'] = aa elif codon[2] == 'R': geneticCode[codon[:2]+'A'] = aa geneticCode[codon[:2]+'G'] = aa self.geneticCode = geneticCode def __call__(self, s): 'translate nucleotide string s to amino acid string' s = s.upper() s = s.replace('U', 'T') l = [] for i in range(0, len(s), 3): try: l.append(self.geneticCode[s[i:i+3]]) except KeyError: l.append('X') # uninterpretable return ''.join(l) translate_orf = AATranslation() # default translation function PK7“;‹²äÞÞpygr/sequtil.pyc;ò |†Kc@szdZdZdZd„Zdad„Zdeed„Zd„Zd„Z d „Z d e fd „ƒYZ e ƒZ d S( iiicCsÜd}d}d}d}xy|D]q}||jo|d7}n|djp |djo|d7}q|djp |djo|d7}qqW|tt|ƒƒ}|djo||jot SqØt Snt SdS( Ns AaTtUuGgCcNniisUsusTstf0.84999999999999998( s dna_letterssndnasnUsnTssslsfloatslensratios DNA_SEQTYPEs RNA_SEQTYPEsPROTEIN_SEQTYPE(sssratiosndnas dna_lettersslsnTsnU((s2build/bdist.darwin-8.11.1-i386/egg/pygr/sequtil.pys guess_seqtypes$   cCstd7attdƒSdS(Ni(sseq_id_countersstr(((s2build/bdist.darwin-8.11.1-i386/egg/pygr/sequtil.pys new_seq_id s i<cCsâ|tjo6yt|iƒ}WqCtj otƒ}qCXn|id|dƒt|ƒ}|tj o||ƒ}nt |ƒ}d}xDno<|i||||!dƒ||7}||joPq–qW|SdS(sTrivial FASTA outputs>s iiN(sidsNonesstrsssAttributeErrors new_seq_idsofileswritesseqs reformatterslensendsposschunk(sofilessschunksids reformattersendsseqspos((s2build/bdist.darwin-8.11.1-i386/egg/pygr/sequtil.pys write_fasta&s&       ccst}t}xº|D]²}d|djoi|tj ot|ƒdjo|||fVt }n|di ƒd}|t|ƒd}d}q|tj o%x"|i ƒD]}||7}q­WqqW|tj ot|ƒdjo|||fVn|ot dƒ‚ndS(s+iterate over id,title,seq from stream ifiles>iiiss#no readable sequence in FASTA file!N( sNonesidsTruesisEmptysifileslineslensseqstitlesFalsessplitswordsIOError(sifilesseqstitlesisEmptyswordslinesid((s2build/bdist.darwin-8.11.1-i386/egg/pygr/sequtil.pys read_fasta<s(       cCsßt}d}xÀto¸|idƒ}|djoPqd|djo,|diƒd}|t|ƒd}q|tj oIx|iƒD]}||7}qŽWt|ƒdjo|||fSqÊqqWt dƒ‚dS( s0read a single sequence line, return id,title,seqsis>iiis#no readable sequence in FASTA file!N( sNonesidsseqsTruesifilesreadlineslinessplitslenstitleswordsIOError(sifileswordsseqstitleslinesid((s2build/bdist.darwin-8.11.1-i386/egg/pygr/sequtil.pysread_fasta_one_lineQs$   ccsût}d}t}x£|D]›}d|djoL|tj o |djo||fVt}n|diƒd}d}q|tj o+x(|iƒD]}|t |ƒ7}q–WqqW|tj o |djo||fVn|ot dƒ‚ndS(s-Generate sequence ID,length from stream ifileis>is#no readable sequence in FASTA file!N( sNonesids seqLengthsTruesisEmptysifileslinesFalsessplitswordslensIOError(sifiles seqLengthsisEmptyswordslinesid((s2build/bdist.darwin-8.11.1-i386/egg/pygr/sequtil.pysread_fasta_lengthsds(     s AATranslationc5BsÅtZdZeddddddddd d d d d ddddddddddddddddddddd d!dd"dd#d$d%d&d'd(d)d*d+d,d-d.d/d.ƒZd0„Zd1„ZRS(2scustomizable translation classsTTYsFsTTRsLsTCNsSsTAYsYsTGYsCsTGGsWsCTNsCCNsPsCAYsHsCARsQsCGNsRsATYsIsATAsATGsMsACNsTsAAYsNsAARsKsAGYsAGRsGTNsVsGCNsAsGAYsDsGARsEsGGNsGsTARs*sTGAcCs |iiƒ}xì|iiƒD]Û\}}|ddjoL|||d d<|||d d<|||d d<|||d ds iiN(sidsNonesstrsssAttributeErrors new_seq_idsofileswritesseqs reformatterslensendsposschunk(sofilessschunksids reformattersendsseqspos((s2build/bdist.darwin-8.11.1-i386/egg/pygr/sequtil.pys write_fasta&s&       ccst}t}xº|D]²}d|djoi|tj ot|ƒdjo|||fVt }n|di ƒd}|t|ƒd}d}q|tj o%x"|i ƒD]}||7}q­WqqW|tj ot|ƒdjo|||fVn|ot dƒ‚ndS(s+iterate over id,title,seq from stream ifiles>iiiss#no readable sequence in FASTA file!N( sNonesidsTruesisEmptysifileslineslensseqstitlesFalsessplitswordsIOError(sifilesseqstitlesisEmptyswordslinesid((s2build/bdist.darwin-8.11.1-i386/egg/pygr/sequtil.pys read_fasta<s(       cCsßt}d}xÀto¸|idƒ}|djoPqd|djo,|diƒd}|t|ƒd}q|tj oIx|iƒD]}||7}qŽWt|ƒdjo|||fSqÊqqWt dƒ‚dS( s0read a single sequence line, return id,title,seqsis>iiis#no readable sequence in FASTA file!N( sNonesidsseqsTruesifilesreadlineslinessplitslenstitleswordsIOError(sifileswordsseqstitleslinesid((s2build/bdist.darwin-8.11.1-i386/egg/pygr/sequtil.pysread_fasta_one_lineQs$   ccsût}d}t}x£|D]›}d|djoL|tj o |djo||fVt}n|diƒd}d}q|tj o+x(|iƒD]}|t |ƒ7}q–WqqW|tj o |djo||fVn|ot dƒ‚ndS(s-Generate sequence ID,length from stream ifileis>is#no readable sequence in FASTA file!N( sNonesids seqLengthsTruesisEmptysifileslinesFalsessplitswordslensIOError(sifiles seqLengthsisEmptyswordslinesid((s2build/bdist.darwin-8.11.1-i386/egg/pygr/sequtil.pysread_fasta_lengthsds(     s AATranslationc5BsÅtZdZeddddddddd d d d d ddddddddddddddddddddd d!dd"dd#d$d%d&d'd(d)d*d+d,d-d.d/d.ƒZd0„Zd1„ZRS(2scustomizable translation classsTTYsFsTTRsLsTCNsSsTAYsYsTGYsCsTGGsWsCTNsCCNsPsCAYsHsCARsQsCGNsRsATYsIsATAsATGsMsACNsTsAAYsNsAARsKsAGYsAGRsGTNsVsGCNsAsGAYsDsGARsEsGGNsGsTARs*sTGAcCs |iiƒ}xì|iiƒD]Û\}}|ddjoL|||d d<|||d d<|||d d<|||d d 1: name = argList[0] # USE 1ST ARG AS TABLE NAME argnames = ('host', 'user', 'passwd') # READ ARGS IN THIS ORDER kwargs = kwargs.copy() # a copy we can overwrite kwargs.update(list_to_dict(argnames, argList[1:])) serverInfo = DBServerInfo(**kwargs) return name, serverInfo.cursor(), serverInfo def mysql_connect(connect=None, configFile=None, useStreaming=False, **args): """return connection and cursor objects, using .my.cnf if necessary""" kwargs = args.copy() # a copy we can modify if 'user' not in kwargs and configFile is None: #Find where config file is osname = platform.system() if osname in('Microsoft', 'Windows'): # Machine is a Windows box paths = [] try: # handle case where WINDIR not defined by Windows... windir = os.environ['WINDIR'] paths += [(windir, 'my.ini'), (windir, 'my.cnf')] except KeyError: pass try: sysdrv = os.environ['SYSTEMDRIVE'] paths += [(sysdrv, os.path.sep + 'my.ini'), (sysdrv, os.path.sep + 'my.cnf')] except KeyError: pass if len(paths) > 0: configFile = get_valid_path(*paths) else: # treat as normal platform with home directories configFile = os.path.join(os.path.expanduser('~'), '.my.cnf') # allows for a local mysql local configuration file to be read # from the current directory configFile = configFile or os.path.join(os.getcwd(), 'mysql.cnf') if configFile and os.path.exists(configFile): kwargs['read_default_file'] = configFile connect = None # force it to use MySQLdb if connect is None: import MySQLdb connect = MySQLdb.connect kwargs['compress'] = True if useStreaming: # use server side cursors for scalable result sets try: from MySQLdb import cursors kwargs['cursorclass'] = cursors.SSCursor except (ImportError, AttributeError): pass conn = connect(**kwargs) cursor = conn.cursor() return conn, cursor _mysqlMacros = dict(IGNORE='ignore', REPLACE='replace', AUTO_INCREMENT='AUTO_INCREMENT', SUBSTRING='substring', SUBSTR_FROM='FROM', SUBSTR_FOR='FOR') def mysql_table_schema(self, analyzeSchema=True): 'retrieve table schema from a MySQL database, save on self' import MySQLdb self._format_query = SQLFormatDict(MySQLdb.paramstyle, _mysqlMacros) if not analyzeSchema: return self.clear_schema() # reset settings and dictionaries self.cursor.execute('describe %s' % self.name) # get info about columns columns = self.cursor.fetchall() self.cursor.execute('select * from %s limit 1' % self.name) # descriptions for icol, c in enumerate(columns): field = c[0] self.columnName.append(field) # list of columns in same order as table if c[3] == "PRI": # record as primary key if self.primary_key is None: self.primary_key = field else: try: self.primary_key.append(field) except AttributeError: self.primary_key = [self.primary_key, field] if c[1][:3].lower() == 'int': self.usesIntID = True else: self.usesIntID = False elif c[3] == "MUL": self.indexed[field] = icol self.description[field] = self.cursor.description[icol] self.columnType[field] = c[1] # SQL COLUMN TYPE _sqliteMacros = dict(IGNORE='or ignore', REPLACE='insert or replace', AUTO_INCREMENT='', SUBSTRING='substr', SUBSTR_FROM=',', SUBSTR_FOR=',') def import_sqlite(): 'import sqlite3 (for Python 2.5+) or pysqlite2 for earlier Python versions' try: import sqlite3 as sqlite except ImportError: from pysqlite2 import dbapi2 as sqlite return sqlite def sqlite_table_schema(self, analyzeSchema=True): 'retrieve table schema from a sqlite3 database, save on self' sqlite = import_sqlite() self._format_query = SQLFormatDict(sqlite.paramstyle, _sqliteMacros) if not analyzeSchema: return self.clear_schema() # reset settings and dictionaries self.cursor.execute('PRAGMA table_info("%s")' % self.name) columns = self.cursor.fetchall() self.cursor.execute('select * from %s limit 1' % self.name) # descriptions for icol, c in enumerate(columns): field = c[1] self.columnName.append(field) # list of columns in same order as table self.description[field] = self.cursor.description[icol] self.columnType[field] = c[2] # SQL COLUMN TYPE # Get primary key / unique indexes. self.cursor.execute('select name from sqlite_master where tbl_name="%s" \ and type="index" and sql is null' % self.name) for indexname in self.cursor.fetchall(): # search indexes for primary key self.cursor.execute('PRAGMA index_info("%s")' % indexname) l = self.cursor.fetchall() # get list of columns in this index if len(l) == 1: # assume 1st single-column unique index is primary key! self.primary_key = l[0][2] break # done searching for primary key! if self.primary_key is None: # Grrr, INTEGER PRIMARY KEY handled differently. self.cursor.execute('select sql from sqlite_master where \ tbl_name="%s" and type="table"' % self.name) sql = self.cursor.fetchall()[0][0] for columnSQL in sql[sql.index('(') + 1:].split(','): if 'primary key' in columnSQL.lower(): # must be the primary key! col = columnSQL.split()[0] # get column name if col in self.columnType: self.primary_key = col break # done searching for primary key! else: raise ValueError('unknown primary key %s in table %s' % (col, self.name)) if self.primary_key is not None: # check its type if self.columnType[self.primary_key] == 'int' or \ self.columnType[self.primary_key] == 'integer': self.usesIntID = True else: self.usesIntID = False class SQLFormatDict(object): '''Perform SQL keyword replacements for maintaining compatibility across a wide range of SQL backends. Uses Python dict-based string format function to do simple string replacements, and also to convert params list to the paramstyle required for this interface. Create by passing a dict of macros and the db-api paramstyle: sfd = SQLFormatDict("qmark", substitutionDict) Then transform queries+params as follows; input should be "format" style: sql,params = sfd("select * from foo where id=%s and val=%s", (myID,myVal)) cursor.execute(sql, params) ''' _paramFormats = dict(pyformat='%%(%d)s', numeric=':%d', named=':%d', qmark='(ignore)', format='(ignore)') def __init__(self, paramstyle, substitutionDict={}): self.substitutionDict = substitutionDict.copy() self.paramstyle = paramstyle self.paramFormat = self._paramFormats[paramstyle] self.makeDict = (paramstyle == 'pyformat' or paramstyle == 'named') if paramstyle == 'qmark': # handle these as simple substitution self.substitutionDict['?'] = '?' elif paramstyle == 'format': self.substitutionDict['?'] = '%s' def __getitem__(self, k): 'apply correct substitution for this SQL interface' try: return self.substitutionDict[k] # apply our substitutions except KeyError: pass if k == '?': # sequential parameter s = self.paramFormat % self.iparam self.iparam += 1 # advance to the next parameter return s raise KeyError('unknown macro: %s' % k) def __call__(self, sql, paramList): 'returns corrected sql,params for this interface' self.iparam = 1 # DB-ABI param indexing begins at 1 sql = sql.replace('%s', '%(?)s') # convert format into pyformat s = sql % self # apply all %(x)s replacements in sql if self.makeDict: # construct a params dict paramDict = {} for i, param in enumerate(paramList): # i + 1 because DB-ABI parameter indexing begins at 1 paramDict[str(i + 1)] = param return s, paramDict else: # just return the original params list return s, paramList def get_table_schema(self, analyzeSchema=True): 'run the right schema function based on type of db server connection' try: modname = self.cursor.__class__.__module__ except AttributeError: raise ValueError('no cursor object or module information!') try: schema_func = self._schemaModuleDict[modname] except KeyError: raise KeyError('''unknown db module: %s. Use _schemaModuleDict attribute to supply a method for obtaining table schema for this module''' % modname) schema_func(self, analyzeSchema) # run the schema function _schemaModuleDict = {'MySQLdb.cursors': mysql_table_schema, 'pysqlite2.dbapi2': sqlite_table_schema, 'sqlite3': sqlite_table_schema} class SQLTableBase(object, UserDict.DictMixin): "Store information about an SQL table as dict keyed by primary key" _schemaModuleDict = _schemaModuleDict # default module list get_table_schema = get_table_schema def __init__(self, name, cursor=None, itemClass=None, attrAlias=None, clusterKey=None, createTable=None, graph=None, maxCache=None, arraysize=1024, itemSliceClass=None, dropIfExists=False, serverInfo=None, autoGC=True, orderBy=None, writeable=False, iterSQL=None, iterColumns=None, primaryKey=None, **kwargs): if autoGC: # automatically garbage collect unused objects self._weakValueDict = RecentValueDictionary(autoGC) # object cache else: self._weakValueDict = {} self.autoGC = autoGC self.orderBy = orderBy if orderBy and serverInfo and serverInfo._serverType == 'mysql': if iterSQL and iterColumns: # both required for mysql! self.iterSQL, self.iterColumns = iterSQL, iterColumns else: raise ValueError('For MySQL tables with orderBy, you MUST \ specify iterSQL and iterColumns as well!') self.writeable = writeable if cursor is None: if serverInfo is not None: # get cursor from serverInfo cursor = serverInfo.cursor() else: # try to read connection info from name or config file name, cursor, serverInfo = get_name_cursor(name, **kwargs) else: warnings.warn("The cursor argument is deprecated. Use serverInfo \ instead!", DeprecationWarning, stacklevel=2) self.cursor = cursor if createTable is not None: # RUN COMMAND TO CREATE THIS TABLE if dropIfExists: # get rid of any existing table cursor.execute('drop table if exists ' + name) self.get_table_schema(False) # check dbtype, init _format_query sql, params = self._format_query(createTable, ()) # apply macros cursor.execute(sql) # create the table self.name = name if graph is not None: self.graph = graph if maxCache is not None: self.maxCache = maxCache if arraysize is not None: self.arraysize = arraysize cursor.arraysize = arraysize self.get_table_schema() # get schema of columns to serve as attrs if primaryKey is not None: self.primary_key = primaryKey self.primaryKey = primaryKey self.data = {} # map of all attributes, including aliases for icol, field in enumerate(self.columnName): self.data[field] = icol # 1st add mappings to columns try: self.data['id'] = self.data[self.primary_key] except (KeyError, TypeError): pass if hasattr(self, '_attr_alias'): # Apply attribute aliases for this class. self.addAttrAlias(False, **self._attr_alias) self.objclass(itemClass) # NEED TO SUBCLASS OUR ITEM CLASS if itemSliceClass is not None: self.itemSliceClass = itemSliceClass # Need to subclass itemSliceClass. get_bound_subclass(self, 'itemSliceClass', self.name) if attrAlias is not None: # ADD ATTRIBUTE ALIASES self.attrAlias = attrAlias # RECORD FOR PICKLING PURPOSES self.data.update(attrAlias) if clusterKey is not None: self.clusterKey = clusterKey if serverInfo is not None: self.serverInfo = serverInfo def __len__(self): self._select(selectCols = 'count(*)') return self.cursor.fetchone()[0] def __hash__(self): return id(self) def __cmp__(self, other): 'only match self and no other!' if self is other: return 0 else: return cmp(id(self), id(other)) _pickleAttrs = dict(name=0, clusterKey=0, maxCache=0, arraysize=0, attrAlias=0, serverInfo=0, autoGC=0, orderBy=0, writeable=0, iterSQL=0, iterColumns=0, primaryKey=0) __getstate__ = standard_getstate def __setstate__(self, state): # default cursor provisioning by worldbase is deprecated! ## if 'serverInfo' not in state: # hmm, no address for db server? ## try: # SEE IF WE CAN GET CURSOR DIRECTLY FROM RESOURCE DATABASE ## from Data import getResource ## state['cursor'] = getResource.getTableCursor(state['name']) ## except ImportError: ## pass # FAILED, SO TRY TO GET A CURSOR IN THE USUAL WAYS... self.__init__(**state) def __repr__(self): return '' def clear_schema(self): 'reset all schema information for this table' self.description={} self.columnName = [] self.columnType = {} self.usesIntID = None self.primary_key = None self.indexed = {} def _attrSQL(self, attr, sqlColumn=False, columnNumber=False): "Translate python attribute name to appropriate SQL expression" try: # MAKE SURE THIS ATTRIBUTE CAN BE MAPPED TO DATABASE EXPRESSION field = self.data[attr] except KeyError: raise AttributeError('attribute %s not a valid column \ or alias in %s' % (attr, self.name)) if sqlColumn: # ENSURE THAT THIS TRULY MAPS TO A COLUMN NAME IN THE DB try: # CHECK IF field IS COLUMN NUMBER return self.columnName[field] # RETURN SQL COLUMN NAME except TypeError: try: # Check if field is SQL column name, return it if so. return self.columnName[self.data[field]] except (KeyError, TypeError): raise AttributeError('attribute %s does not map to an SQL \ column in %s' % (attr, self.name)) if columnNumber: try: # CHECK IF field IS A COLUMN NUMBER return field + 0 # ONLY RETURN AN INTEGER except TypeError: try: # CHECK IF field IS ITSELF THE SQL COLUMN NAME return self.data[field] + 0 # ONLY RETURN AN INTEGER except (KeyError, TypeError): raise ValueError('attribute %s does not map to a SQL \ column!' % attr) if isinstance(field, types.StringType): # Use aliased expression for database select instead of attr. attr = field elif attr == 'id': attr = self.primary_key return attr def addAttrAlias(self, saveToPickle=True, **kwargs): """Add new attributes as aliases of existing attributes. They can be specified either as named args: t.addAttrAlias(newattr=oldattr) or by passing a dictionary kwargs whose keys are newattr and values are oldattr: t.addAttrAlias(**kwargs) saveToPickle=True forces these aliases to be saved if object is pickled. """ if saveToPickle: self.attrAlias.update(kwargs) for key, val in kwargs.items(): try: # 1st CHECK WHETHER val IS AN EXISTING COLUMN / ALIAS self.data[val] + 0 # CHECK WHETHER val MAPS TO A COLUMN NUMBER # Yes, val is an actual SQL column name, so save it directly. raise KeyError except TypeError: # val IS ITSELF AN ALIAS self.data[key] = self.data[val] # SO MAP TO WHAT IT MAPS TO except KeyError: # TREAT AS ALIAS TO SQL EXPRESSION self.data[key] = val def objclass(self, oclass=None): """Create class representing a row in this table by subclassing oclass, adding data""" if oclass is not None: # use this as our base itemClass self.itemClass = oclass if self.writeable: # Use its writeable version. self.itemClass = self.itemClass._RWClass # Bind itemClass. oclass = get_bound_subclass(self, 'itemClass', self.name, subclassArgs=dict(db=self)) if issubclass(oclass, TupleO): # Bind attribute list to tupleo interface. oclass._attrcol = self.data if hasattr(oclass, '_tableclass') and \ not isinstance(self, oclass._tableclass): # Row class can override our current table class. self.__class__ = oclass._tableclass def _select(self, whereClause='', params=(), selectCols='t1.*', cursor=None, orderBy='', limit=''): 'execute the specified query but do not fetch' sql, params = self._format_query('select %s from %s t1 %s %s %s' % (selectCols, self.name, whereClause, orderBy, limit), params) if cursor is None: self.cursor.execute(sql, params) else: cursor.execute(sql, params) def select(self, whereClause, params=None, oclass=None, selectCols='t1.*'): "Generate the list of objects that satisfy the database SELECT" if oclass is None: oclass = self.itemClass self._select(whereClause, params, selectCols) l = self.cursor.fetchall() for t in l: yield self.cacheItem(t, oclass) def query(self, **kwargs): 'query for intersection of all specified kwargs, returned as iterator' criteria = [] params = [] for k, v in kwargs.items(): # CONSTRUCT THE LIST OF WHERE CLAUSES if v is None: # CONVERT TO SQL NULL TEST criteria.append('%s IS NULL' % self._attrSQL(k)) else: # TEST FOR EQUALITY criteria.append('%s=%%s' % self._attrSQL(k)) params.append(v) return self.select('where ' + ' and '.join(criteria), params) def _update(self, row_id, col, val): 'update a single field in the specified row to the specified value' sql, params = self._format_query('update %s set %s=%%s where %s=%%s' % (self.name, col, self.primary_key), (val, row_id)) self.cursor.execute(sql, params) def getID(self, t): try: return t[self.data['id']] # GET ID FROM TUPLE except TypeError: # treat as alias return t[self.data[self.data['id']]] def cacheItem(self, t, oclass): 'get obj from cache if possible, or construct from tuple' try: id = self.getID(t) except KeyError: # NO PRIMARY KEY? IGNORE THE CACHE. return oclass(t) try: # IF ALREADY LOADED IN OUR DICTIONARY, JUST RETURN THAT ENTRY return self._weakValueDict[id] except KeyError: pass o = oclass(t) self._weakValueDict[id] = o # CACHE THIS ITEM IN OUR DICTIONARY return o def cache_items(self, rows, oclass=None): if oclass is None: oclass = self.itemClass for t in rows: yield self.cacheItem(t, oclass) def foreignKey(self, attr, k): 'get iterator for objects with specified foreign key value' return self.select('where %s=%%s' % attr, (k, )) def limit_cache(self): 'APPLY maxCache LIMIT TO CACHE SIZE' try: if self.maxCache [(source,target),...]''' _distinct_key = 'edge_id' _pickleAttrs = SQLTableMultiNoCache._pickleAttrs.copy() _pickleAttrs.update(dict(graph=0)) def keys(self): self.cursor.execute('select %s,%s,%s from %s where %s is not null \ order by %s,%s' % (self._attrSQL('source_id'), self._attrSQL('target_id'), self._attrSQL('edge_id'), self.name, self._attrSQL('target_id'), self._attrSQL('source_id'), self._attrSQL('target_id'))) l = [] # PREFETCH ALL ROWS, SINCE CURSOR MAY BE REUSED for source_id, target_id, edge_id in self.cursor.fetchall(): l.append((self.graph.unpack_source(source_id), self.graph.unpack_target(target_id), self.graph.unpack_edge(edge_id))) return l __call__ = keys def __iter__(self): return iter(self.keys()) def __getitem__(self, edge): sql, params = self._format_query('select %s,%s from %s where %s=%%s' % (self._attrSQL('source_id'), self._attrSQL('target_id'), self.name, self._attrSQL(self._distinct_key)), (self.graph.pack_edge(edge), )) self.cursor.execute(sql, params) l = [] # PREFETCH ALL ROWS, SINCE CURSOR MAY BE REUSED for source_id, target_id in self.cursor.fetchall(): l.append((self.graph.unpack_source(source_id), self.graph.unpack_target(target_id))) return l class SQLEdgeDict(object): '2nd level graph interface to SQL database' def __init__(self, fromNode, table): self.fromNode = fromNode self.table = table if not hasattr(self.table, 'allowMissingNodes'): sql, params = self.table._format_query('select %s from %s where \ %s=%%s limit 1' % (self.table.sourceSQL, self.table.name, self.table.sourceSQL), (self.fromNode, )) self.table.cursor.execute(sql, params) if len(self.table.cursor.fetchall())<1: raise KeyError('node not in graph!') def __getitem__(self, target): sql, params = self.table._format_query('select %s from %s where \ %s=%%s and %s=%%s limit 2' % (self.table.edgeSQL, self.table.name, self.table.sourceSQL, self.table.targetSQL), (self.fromNode, self.table.pack_target(target))) self.table.cursor.execute(sql, params) l = self.table.cursor.fetchmany(2) # get at most two rows if len(l) != 1: raise KeyError('either no edge from source to target \ or not unique!') try: return self.table.unpack_edge(l[0][0]) # RETURN EDGE except IndexError: raise KeyError('no edge from node to target') def __setitem__(self, target, edge): sql, params = self.table._format_query('replace into %s values \ (%%s,%%s,%%s)' % self.table.name, (self.fromNode, self.table.pack_target(target), self.table.pack_edge(edge))) self.table.cursor.execute(sql, params) if not hasattr(self.table, 'sourceDB') or \ (hasattr(self.table, 'targetDB') and self.table.sourceDB is self.table.targetDB): self.table += target # ADD AS NODE TO GRAPH def __iadd__(self, target): self[target] = None return self # iadd MUST RETURN self! def __delitem__(self, target): sql, params = self.table._format_query('delete from %s where %s=%%s \ and %s=%%s' % (self.table.name, self.table.sourceSQL, self.table.targetSQL), (self.fromNode, self.table.pack_target(target))) self.table.cursor.execute(sql, params) if self.table.cursor.rowcount < 1: # no rows deleted? raise KeyError('no edge from node to target') def iterator_query(self): sql, params = self.table._format_query('select %s,%s from %s where \ %s=%%s and %s is not null' % (self.table.targetSQL, self.table.edgeSQL, self.table.name, self.table.sourceSQL, self.table.targetSQL), (self.fromNode, )) self.table.cursor.execute(sql, params) return self.table.cursor.fetchall() def keys(self): return [self.table.unpack_target(target_id) for target_id, edge_id in self.iterator_query()] def values(self): return [self.table.unpack_edge(edge_id) for target_id, edge_id in self.iterator_query()] def edges(self): return [(self.table.unpack_source(self.fromNode), self.table.unpack_target(target_id), self.table.unpack_edge(edge_id)) for target_id, edge_id in self.iterator_query()] def items(self): return [(self.table.unpack_target(target_id), self.table.unpack_edge(edge_id)) for target_id, edge_id in self.iterator_query()] def __iter__(self): return iter(self.keys()) def itervalues(self): return iter(self.values()) def iteritems(self): return iter(self.items()) def __len__(self): return len(self.keys()) __cmp__ = graph_cmp class SQLEdgelessDict(SQLEdgeDict): 'for SQLGraph tables that lack edge_id column' def __getitem__(self, target): sql, params = self.table._format_query('select %s from %s where \ %s=%%s and %s=%%s limit 2' % (self.table.targetSQL, self.table.name, self.table.sourceSQL, self.table.targetSQL), (self.fromNode, self.table.pack_target(target))) self.table.cursor.execute(sql, params) l = self.table.cursor.fetchmany(2) if len(l) != 1: raise KeyError('either no edge from source to target \ or not unique!') return None # no edge info! def iterator_query(self): sql, params = self.table._format_query('select %s from %s where \ %s=%%s and %s is not null' % (self.table.targetSQL, self.table.name, self.table.sourceSQL, self.table.targetSQL), (self.fromNode, )) self.table.cursor.execute(sql, params) return [(t[0], None) for t in self.table.cursor.fetchall()] SQLEdgeDict._edgelessClass = SQLEdgelessDict class SQLGraphEdgeDescriptor(object): 'provide an SQLEdges interface on demand' def __get__(self, obj, objtype): try: attrAlias = obj.attrAlias.copy() except AttributeError: return SQLEdges(obj.name, obj.cursor, graph=obj) else: return SQLEdges(obj.name, obj.cursor, attrAlias=attrAlias, graph=obj) def getColumnTypes(createTable, attrAlias={}, defaultColumnType='int', columnAttrs=('source', 'target', 'edge'), **kwargs): 'return list of [(colname, coltype), ...] for source, target, edge' l = [] for attr in columnAttrs: try: attrName = attrAlias[attr + '_id'] except KeyError: attrName = attr + '_id' try: # SEE IF USER SPECIFIED A DESIRED TYPE l.append((attrName, createTable[attr + '_id'])) continue except (KeyError, TypeError): pass try: # get type info from primary key for that database db = kwargs[attr + 'DB'] if db is None: raise KeyError # FORCE IT TO USE DEFAULT TYPE except KeyError: pass else: # INFER THE COLUMN TYPE FROM THE ASSOCIATED DATABASE KEYS... it = iter(db) try: # GET ONE IDENTIFIER FROM THE DATABASE k = it.next() except StopIteration: # Table is empty, read the SQL type from db. try: l.append((attrName, db.columnType[db.primary_key])) continue except AttributeError: pass else: # GET THE TYPE FROM THIS IDENTIFIER if isinstance(k, int) or isinstance(k, long): l.append((attrName, 'int')) continue elif isinstance(k, str): l.append((attrName, 'varchar(32)')) continue else: raise ValueError('SQLGraph node/edge must be int or str!') l.append((attrName, defaultColumnType)) logger.warn('no type info found for %s, so using default: %s' % (attrName, defaultColumnType)) return l class SQLGraph(SQLTableMultiNoCache): '''provide a graph interface via a SQL table. Key capabilities are: - setitem with an empty dictionary: a dummy operation - getitem with a key that exists: return a placeholder - setitem with non empty placeholder: again a dummy operation EXAMPLE TABLE SCHEMA: create table mygraph (source_id int not null,target_id int,edge_id int, unique(source_id,target_id)); ''' _distinct_key = 'source_id' _pickleAttrs = SQLTableMultiNoCache._pickleAttrs.copy() _pickleAttrs.update(dict(sourceDB=0, targetDB=0, edgeDB=0, allowMissingNodes=0)) _edgeClass = SQLEdgeDict def __init__(self, name, *l, **kwargs): graphArgs, tableArgs = split_kwargs(kwargs, ('attrAlias', 'defaultColumnType', 'columnAttrs', 'sourceDB', 'targetDB', 'edgeDB', 'simpleKeys', 'unpack_edge', 'edgeDictClass', 'graph')) if 'createTable' in kwargs: # CREATE A SCHEMA FOR THIS TABLE c = getColumnTypes(**kwargs) tableArgs['createTable'] = \ 'create table %s (%s %s not null,%s %s,%s %s,unique(%s,%s))' \ % (name, c[0][0], c[0][1], c[1][0], c[1][1], c[2][0], c[2][1], c[0][0], c[1][0]) try: self.allowMissingNodes = kwargs['allowMissingNodes'] except KeyError: pass SQLTableMultiNoCache.__init__(self, name, *l, **tableArgs) self.sourceSQL = self._attrSQL('source_id') self.targetSQL = self._attrSQL('target_id') try: self.edgeSQL = self._attrSQL('edge_id') except AttributeError: self.edgeSQL = None self._edgeClass = self._edgeClass._edgelessClass save_graph_db_refs(self, **kwargs) def __getitem__(self, k): return self._edgeClass(self.pack_source(k), self) def __iadd__(self, k): sql, params = self._format_query('delete from %s where %s=%%s and %s \ is null' % (self.name, self.sourceSQL, self.targetSQL), (self.pack_source(k), )) self.cursor.execute(sql, params) sql, params = self._format_query('insert %%(IGNORE)s into %s values \ (%%s,NULL,NULL)' % self.name, (self.pack_source(k), )) self.cursor.execute(sql, params) return self # iadd MUST RETURN SELF! def __isub__(self, k): sql, params = self._format_query('delete from %s where %s=%%s' % (self.name, self.sourceSQL), (self.pack_source(k), )) self.cursor.execute(sql, params) if self.cursor.rowcount == 0: raise KeyError('node not found in graph') return self # iadd MUST RETURN SELF! __setitem__ = graph_setitem def __contains__(self, k): sql, params = self._format_query('select * from %s where %s=%%s \ limit 1' % (self.name, self.sourceSQL), (self.pack_source(k), )) self.cursor.execute(sql, params) l = self.cursor.fetchmany(2) return len(l) > 0 def __invert__(self): 'get an interface to the inverse graph mapping' try: # CACHED return self._inverse except AttributeError: # CONSTRUCT INTERFACE TO INVERSE MAPPING attrAlias = dict(source_id=self.targetSQL, # SWAP SOURCE & TARGET target_id=self.sourceSQL, edge_id=self.edgeSQL) if self.edgeSQL is None: # no edge interface del attrAlias['edge_id'] self._inverse = SQLGraph(self.name, self.cursor, attrAlias=attrAlias, **graph_db_inverse_refs(self)) self._inverse._inverse = self return self._inverse def __iter__(self): for k in SQLTableMultiNoCache.__iter__(self): yield self.unpack_source(k) def iteritems(self): for k in SQLTableMultiNoCache.__iter__(self): yield (self.unpack_source(k), self._edgeClass(k, self)) def itervalues(self): for k in SQLTableMultiNoCache.__iter__(self): yield self._edgeClass(k, self) def keys(self): return [self.unpack_source(k) for k in SQLTableMultiNoCache.keys(self)] def values(self): return list(self.itervalues()) def items(self): return list(self.iteritems()) edges=SQLGraphEdgeDescriptor() update = update_graph def __len__(self): 'get number of source nodes in graph' self.cursor.execute('select count(distinct %s) from %s' % (self.sourceSQL, self.name)) return self.cursor.fetchone()[0] __cmp__ = graph_cmp override_rich_cmp(locals()) # MUST OVERRIDE __eq__ ETC. TO USE OUR __cmp__! ## def __cmp__(self, other): ## node = () ## n = 0 ## d = None ## it = iter(self.edges) ## while True: ## try: ## source, target, edge = it.next() ## except StopIteration: ## source = None ## if source != node: ## if d is not None: ## diff = cmp(n_target, len(d)) ## if diff != 0: ## return diff ## if source is None: ## break ## node = source ## n += 1 # COUNT SOURCE NODES ## n_target = 0 ## try: ## d = other[node] ## except KeyError: ## return 1 ## try: ## diff = cmp(edge, d[target]) ## except KeyError: ## return 1 ## if diff != 0: ## return diff ## n_target += 1 # COUNT TARGET NODES FOR THIS SOURCE ## return cmp(n, len(other)) add_standard_packing_methods(locals()) ############ PACK / UNPACK METHODS class SQLIDGraph(SQLGraph): add_trivial_packing_methods(locals()) SQLGraph._IDGraphClass = SQLIDGraph class SQLEdgeDictClustered(dict): 'simple cache for 2nd level dictionary of target_id:edge_id' def __init__(self, g, fromNode): self.g = g self.fromNode = fromNode dict.__init__(self) def __iadd__(self, l): for target_id, edge_id in l: dict.__setitem__(self, target_id, edge_id) return self # iadd MUST RETURN SELF! class SQLEdgesClusteredDescr(object): def __get__(self, obj, objtype): e = SQLEdgesClustered(obj.table, obj.edge_id, obj.source_id, obj.target_id, graph=obj, **graph_db_inverse_refs(obj, True)) for source_id, d in obj.d.iteritems(): # COPY EDGE CACHE e.load([(edge_id, source_id, target_id) for (target_id, edge_id) in d.iteritems()]) return e class SQLGraphClustered(object): 'SQL graph with clustered caching -- loads an entire cluster at a time' _edgeDictClass = SQLEdgeDictClustered def __init__(self, table, source_id='source_id', target_id='target_id', edge_id='edge_id', clusterKey=None, **kwargs): import types if isinstance(table, types.StringType): # CREATE THE TABLE INTERFACE if clusterKey is None: raise ValueError('you must provide a clusterKey argument!') if 'createTable' in kwargs: # CREATE A SCHEMA FOR THIS TABLE c = getColumnTypes(attrAlias=dict(source_id=source_id, target_id=target_id, edge_id=edge_id), **kwargs) kwargs['createTable'] = 'create table %s (%s %s not null,%s \ %s,%s %s,unique(%s,%s))' % (table, c[0][0], c[0][1], c[1][0], c[1][1], c[2][0], c[2][1], c[0][0], c[1][0]) table = SQLTableClustered(table, clusterKey=clusterKey, **kwargs) self.table = table self.source_id = source_id self.target_id = target_id self.edge_id = edge_id self.d = {} save_graph_db_refs(self, **kwargs) _pickleAttrs = dict(table=0, source_id=0, target_id=0, edge_id=0, sourceDB=0, targetDB=0, edgeDB=0) def __getstate__(self): state = standard_getstate(self) state['d'] = {} # UNPICKLE SHOULD RESTORE GRAPH WITH EMPTY CACHE return state def __getitem__(self, k): 'get edgeDict for source node k, from cache or by loading its cluster' try: # GET DIRECTLY FROM CACHE return self.d[k] except KeyError: if hasattr(self, '_isLoaded'): raise # ENTIRE GRAPH LOADED, SO k REALLY NOT IN THIS GRAPH # HAVE TO LOAD THE ENTIRE CLUSTER CONTAINING THIS NODE sql, params = self.table._format_query('select t2.%s,t2.%s,t2.%s \ from %s t1,%s t2 where t1.%s=%%s and t1.%s=t2.%s group by t2.%s' % (self.source_id, self.target_id, self.edge_id, self.table.name, self.table.name, self.source_id, self.table.clusterKey, self.table.clusterKey, self.table.primary_key), (self.pack_source(k), )) self.table.cursor.execute(sql, params) self.load(self.table.cursor.fetchall()) # CACHE THIS CLUSTER return self.d[k] # RETURN EDGE DICT FOR THIS NODE def load(self, l=None, unpack=True): 'load the specified rows (or all, if None provided) into local cache' if l is None: try: # IF ALREADY LOADED, NO NEED TO DO ANYTHING return self._isLoaded except AttributeError: pass self.table.cursor.execute('select %s,%s,%s from %s' % (self.source_id, self.target_id, self.edge_id, self.table.name)) l = self.table.cursor.fetchall() self._isLoaded = True # Clear our cache as load() will replicate everything. self.d.clear() for source, target, edge in l: # SAVE TO OUR CACHE if unpack: source = self.unpack_source(source) target = self.unpack_target(target) edge = self.unpack_edge(edge) try: self.d[source] += [(target, edge)] except KeyError: d = self._edgeDictClass(self, source) d += [(target, edge)] self.d[source] = d def __invert__(self): 'interface to reverse graph mapping' try: return self._inverse # INVERSE MAP ALREADY EXISTS except AttributeError: pass # JUST CREATE INTERFACE WITH SWAPPED TARGET & SOURCE self._inverse = SQLGraphClustered(self.table, self.target_id, self.source_id, self.edge_id, **graph_db_inverse_refs(self)) self._inverse._inverse = self for source, d in self.d.iteritems(): # INVERT OUR CACHE self._inverse.load([(target, source, edge) for (target, edge) in d.iteritems()], unpack=False) return self._inverse edges=SQLEdgesClusteredDescr() # CONSTRUCT EDGE INTERFACE ON DEMAND update = update_graph add_standard_packing_methods(locals()) ############ PACK / UNPACK METHODS def __iter__(self): ################# ITERATORS 'uses db select; does not force load' return iter(self.keys()) def keys(self): 'uses db select; does not force load' self.table.cursor.execute('select distinct(%s) from %s' % (self.source_id, self.table.name)) return [self.unpack_source(t[0]) for t in self.table.cursor.fetchall()] methodFactory(['iteritems', 'items', 'itervalues', 'values'], 'lambda self: (self.load(), self.d.%s())[1]', locals()) def __contains__(self, k): try: x = self[k] return True except KeyError: return False class SQLIDGraphClustered(SQLGraphClustered): add_trivial_packing_methods(locals()) SQLGraphClustered._IDGraphClass = SQLIDGraphClustered class SQLEdgesClustered(SQLGraphClustered): 'edges interface for SQLGraphClustered' _edgeDictClass = list _pickleAttrs = SQLGraphClustered._pickleAttrs.copy() _pickleAttrs.update(dict(graph=0)) def keys(self): self.load() result = [] for edge_id, l in self.d.iteritems(): for source_id, target_id in l: result.append((self.graph.unpack_source(source_id), self.graph.unpack_target(target_id), self.graph.unpack_edge(edge_id))) return result class ForeignKeyInverse(object): 'map each key to a single value according to its foreign key' def __init__(self, g): self.g = g def __getitem__(self, obj): self.check_obj(obj) source_id = getattr(obj, self.g.keyColumn) if source_id is None: return None return self.g.sourceDB[source_id] def __setitem__(self, obj, source): self.check_obj(obj) if source is not None: # Ensures performing all the right caching operations. self.g[source][obj] = None else: # DELETE PRE-EXISTING EDGE IF PRESENT if not hasattr(obj, '_localOnly'): # Only cache, don't save to database. old_source = self[obj] if old_source is not None: del self.g[old_source][obj] def check_obj(self, obj): 'raise KeyError if obj not from this db' try: if obj.db is not self.g.targetDB: raise AttributeError except AttributeError: raise KeyError('key is not from targetDB of this graph!') def __contains__(self, obj): try: self.check_obj(obj) return True except KeyError: return False def __iter__(self): return self.g.targetDB.itervalues() def keys(self): return self.g.targetDB.values() def iteritems(self): for obj in self: source_id = getattr(obj, self.g.keyColumn) if source_id is None: yield obj, None else: yield obj, self.g.sourceDB[source_id] def items(self): return list(self.iteritems()) def itervalues(self): for obj, val in self.iteritems(): yield val def values(self): return list(self.itervalues()) def __invert__(self): return self.g class ForeignKeyEdge(dict): '''edge interface to a foreign key in an SQL table. Caches dict of target nodes in itself; provides dict interface. Adds or deletes edges by setting foreign key values in the table''' def __init__(self, g, k): dict.__init__(self) self.g = g self.src = k for v in g.targetDB.select('where %s=%%s' % g.keyColumn, (k.id, )): dict.__setitem__(self, v, None) # SAVE IN CACHE def __setitem__(self, dest, v): if not hasattr(dest, 'db') or dest.db is not self.g.targetDB: raise KeyError('dest is not in the targetDB bound to this graph!') if v is not None: raise ValueError('sorry,this graph cannot store edge information!') if not hasattr(dest, '_localOnly'): # Only cache, don't save to database. old_source = self.g._inverse[dest] # CHECK FOR PRE-EXISTING EDGE if old_source is not None: # REMOVE OLD EDGE FROM CACHE dict.__delitem__(self.g[old_source], dest) #self.g.targetDB._update(dest.id, self.g.keyColumn, self.src.id) # SAVE TO DB setattr(dest, self.g.keyColumn, self.src.id) # SAVE TO DB ATTRIBUTE dict.__setitem__(self, dest, None) # SAVE IN CACHE def __delitem__(self, dest): #self.g.targetDB._update(dest.id, self.g.keyColumn, None) # REMOVE FOREIGN KEY VALUE setattr(dest, self.g.keyColumn, None) # SAVE TO DB ATTRIBUTE dict.__delitem__(self, dest) # REMOVE FROM CACHE class ForeignKeyGraph(object, UserDict.DictMixin): '''graph interface to a foreign key in an SQL table Caches dict of target nodes in itself; provides dict interface. ''' def __init__(self, sourceDB, targetDB, keyColumn, autoGC=True, **kwargs): '''sourceDB is any database of source nodes; targetDB must be an SQL database of target nodes; keyColumn is the foreign key column name in targetDB for looking up sourceDB IDs.''' if autoGC: # automatically garbage collect unused objects self._weakValueDict = RecentValueDictionary(autoGC) # object cache else: self._weakValueDict = {} self.autoGC = autoGC self.sourceDB = sourceDB self.targetDB = targetDB self.keyColumn = keyColumn self._inverse = ForeignKeyInverse(self) _pickleAttrs = dict(sourceDB=0, targetDB=0, keyColumn=0, autoGC=0) __getstate__ = standard_getstate ########### SUPPORT FOR PICKLING __setstate__ = standard_setstate def _inverse_schema(self): '''Provide custom schema rule for inverting this graph... Just use keyColumn!''' return dict(invert=True, uniqueMapping=True) def __getitem__(self, k): if not hasattr(k, 'db') or k.db is not self.sourceDB: raise KeyError('object is not in the sourceDB bound \ to this graph!') try: return self._weakValueDict[k.id] # get from cache except KeyError: pass d = ForeignKeyEdge(self, k) self._weakValueDict[k.id] = d # save in cache return d def __setitem__(self, k, v): raise KeyError('''do not save as g[k]=v. Instead follow a graph interface: g[src]+=dest, or g[src][dest]=None (no edge info allowed)''') def __delitem__(self, k): raise KeyError('''Instead of del g[k], follow a graph interface: del g[src][dest]''') def keys(self): return self.sourceDB.values() __invert__ = standard_invert def describeDBTables(name, cursor, idDict): """ Get table info about database via , and store primary keys in idDict, along with a list of the tables each key indexes. """ cursor.execute('use %s' % name) cursor.execute('show tables') tables = {} l = [c[0] for c in cursor.fetchall()] for t in l: tname = name + '.' + t o = SQLTable(tname, cursor) tables[tname] = o for f in o.description: if f == o.primary_key: idDict.setdefault(f, []).append(o) elif f[-3:] == '_id' and f not in idDict: idDict[f] = [] return tables def indexIDs(tables, idDict=None): "Get an index of primary keys in the dictionary." if idDict == None: idDict = {} for o in tables.values(): if o.primary_key: # Maintain a list of tables with this primary key. if o.primary_key not in idDict: idDict[o.primary_key] = [] idDict[o.primary_key].append(o) for f in o.description: if f[-3:] == '_id' and f not in idDict: idDict[f] = [] return idDict def suffixSubset(tables, suffix): "Filter table index for those matching a specific suffix" subset = {} for name, t in tables.items(): if name.endswith(suffix): subset[name] = t return subset PRIMARY_KEY=1 def graphDBTables(tables, idDict): g = dictgraph() for t in tables.values(): for f in t.description: if f == t.primary_key: edgeInfo = PRIMARY_KEY else: edgeInfo = None g.setEdge(f, t, edgeInfo) g.setEdge(t, f, edgeInfo) return g SQLTypeTranslation = {types.StringType: 'varchar(32)', types.IntType: 'int', types.FloatType: 'float'} def createTableFromRepr(rows, tableName, cursor, typeTranslation=None, optionalDict=None, indexDict=()): """Save rows into SQL tableName using cursor, with optional translations of columns to specific SQL types (specified by typeTranslation dict). - optionDict can specify columns that are allowed to be NULL. - indexDict can specify columns that must be indexed; columns whose names end in _id will be indexed by default. - rows must be an iterator which in turn returns dictionaries, each representing a tuple of values (indexed by their column names). """ try: row = rows.next() # GET 1ST ROW TO EXTRACT COLUMN INFO except StopIteration: return # IF rows EMPTY, NO NEED TO SAVE ANYTHING, SO JUST RETURN try: createTableFromRow(cursor, tableName, row, typeTranslation, optionalDict, indexDict) except: pass storeRow(cursor, tableName, row) # SAVE OUR FIRST ROW for row in rows: # NOW SAVE ALL THE ROWS storeRow(cursor, tableName, row) def createTableFromRow(cursor, tableName, row, typeTranslation=None, optionalDict=None, indexDict=()): create_defs = [] for col, val in row.items(): # PREPARE SQL TYPES FOR COLUMNS coltype = None if typeTranslation != None and col in typeTranslation: coltype = typeTranslation[col] # USER-SUPPLIED TRANSLATION elif type(val) in SQLTypeTranslation: coltype = SQLTypeTranslation[type(val)] else: # SEARCH FOR A COMPATIBLE TYPE for t in SQLTypeTranslation: if isinstance(val, t): coltype = SQLTypeTranslation[t] break if coltype == None: raise TypeError("Don't know SQL type to use for %s" % col) create_def = '%s %s' % (col, coltype) if optionalDict == None or col not in optionalDict: create_def += ' not null' create_defs.append(create_def) for col in row: # CREATE INDEXES FOR ID COLUMNS if col[-3:] == '_id' or col in indexDict: create_defs.append('index(%s)' % col) cmd = 'create table if not exists %s (%s)' % (tableName, ','.join(create_defs)) cursor.execute(cmd) # CREATE THE TABLE IN THE DATABASE def storeRow(cursor, tableName, row): row_format = ','.join(len(row) * ['%s']) cmd = 'insert into %s values (%s)' % (tableName, row_format) cursor.execute(cmd, tuple(row.values())) def storeRowDelayed(cursor, tableName, row): row_format = ','.join(len(row) * ['%s']) cmd = 'insert delayed into %s values (%s)' % (tableName, row_format) cursor.execute(cmd, tuple(row.values())) class TableGroup(dict): 'provide attribute access to dbname qualified tablenames' def __init__(self, db='test', suffix=None, **kw): dict.__init__(self) self.db=db if suffix is not None: self.suffix=suffix for k, v in kw.items(): if v is not None and '.' not in v: v=self.db+'.'+v # ADD DATABASE NAME AS PREFIX self[k]=v def __getattr__(self, k): return self[k] def sqlite_connect(*args, **kwargs): sqlite = import_sqlite() connection = sqlite.connect(*args, **kwargs) cursor = connection.cursor() return connection, cursor class DBServerInfo(object): 'picklable reference to a database server' def __init__(self, moduleName='MySQLdb', serverSideCursors=False, blockIterators=True, *args, **kwargs): try: self.__class__ = _DBServerModuleDict[moduleName] except KeyError: raise ValueError('Module name not found in _DBServerModuleDict: '\ + moduleName) self.moduleName = moduleName self.args = args # connection arguments self.kwargs = kwargs self.serverSideCursors = serverSideCursors self.custom_iter_keys = blockIterators if self.serverSideCursors and not self.custom_iter_keys: raise ValueError('serverSideCursors=True requires \ blockIterators=True!') def cursor(self): """returns cursor associated with the DB server info (reused)""" try: return self._cursor except AttributeError: self._start_connection() return self._cursor def new_cursor(self, arraysize=None): """returns a NEW cursor; you must close it yourself! """ if not hasattr(self, '_connection'): self._start_connection() cursor = self._connection.cursor() if arraysize is not None: cursor.arraysize = arraysize return cursor def close(self): """Close file containing this database""" self._cursor.close() self._connection.close() del self._cursor del self._connection def __getstate__(self): """return all picklable arguments""" return dict(args=self.args, kwargs=self.kwargs, moduleName=self.moduleName, serverSideCursors=self.serverSideCursors, custom_iter_keys=self.custom_iter_keys) class MySQLServerInfo(DBServerInfo): 'customized for MySQLdb SSCursor support via new_cursor()' _serverType = 'mysql' def _start_connection(self): self._connection, self._cursor = mysql_connect(*self.args, **self.kwargs) def new_cursor(self, arraysize=None): 'provide streaming cursor support' if not self.serverSideCursors: # use regular MySQLdb cursor return DBServerInfo.new_cursor(self, arraysize) try: conn = self._conn_sscursor except AttributeError: self._conn_sscursor, cursor = mysql_connect(useStreaming=True, *self.args, **self.kwargs) else: cursor = self._conn_sscursor.cursor() if arraysize is not None: cursor.arraysize = arraysize return cursor def close(self): DBServerInfo.close(self) try: self._conn_sscursor.close() del self._conn_sscursor except AttributeError: pass def iter_keys(self, db, cursor, map_f=iter, cache_f=lambda x: [t[0] for t in x], **kwargs): block_iterator = BlockIterator(db, cursor, **kwargs) try: cache_f = block_iterator.cache_f except AttributeError: pass return db.generic_iterator(cursor=cursor, cache_f=cache_f, map_f=map_f, fetch_f=block_iterator) class CursorCloser(object): """container for ensuring cursor.close() is called, when this obj deleted. For Python 2.5+, we could replace this with a try... finally clause in a generator function such as generic_iterator(); see PEP 342 or What's New in Python 2.5. """ def __init__(self, cursor): self.cursor = cursor def __del__(self): self.cursor.close() class BlockIterator(CursorCloser): 'workaround for MySQLdb iteration horrible performance' def __init__(self, db, cursor, selectCols, whereClause='', **kwargs): self.db = db self.cursor = cursor self.selectCols = selectCols self.kwargs = kwargs self.whereClause = '' if kwargs['orderBy']: # use iterSQL/iterColumns for WHERE / SELECT self.whereSQL = db.iterSQL if selectCols == '*': # extracting all columns self.whereParams = [db.data[col] for col in db.iterColumns] else: # selectCols is single column iterColumns = list(db.iterColumns) try: # if selectCols in db.iterColumns, just use that i = iterColumns.index(selectCols) except ValueError: # have to append selectCols i = len(db.iterColumns) iterColumns += [selectCols] self.selectCols = ','.join(iterColumns) self.whereParams = range(len(db.iterColumns)) if i > 0: # need to extract desired column self.cache_f = lambda x: [t[i] for t in x] else: # just use primary key self.whereSQL = 'WHERE %s>%%s' % db.primary_key self.whereParams = (db.data[db.primary_key],) self.params = () self.done = False def __call__(self): 'get the next block of data' if self.done: return () self.db._select(self.whereClause, self.params, cursor=self.cursor, limit='LIMIT %s' % self.cursor.arraysize, selectCols=self.selectCols, **(self.kwargs)) rows = self.cursor.fetchall() if len(rows) < self.cursor.arraysize: # iteration complete self.done = True return rows lastrow = rows[-1] # extract params from the last row in this block if len(lastrow) > 1: self.params = [lastrow[icol] for icol in self.whereParams] else: self.params = lastrow self.whereClause = self.whereSQL return rows class SQLiteServerInfo(DBServerInfo): """picklable reference to a sqlite database""" _serverType = 'sqlite' def __init__(self, database, *args, **kwargs): """Takes same arguments as sqlite3.connect()""" DBServerInfo.__init__(self, 'sqlite3', # save abs path! database=SourceFileName(database), *args, **kwargs) def _start_connection(self): self._connection, self._cursor = sqlite_connect(*self.args, **self.kwargs) def __getstate__(self): database = self.kwargs.get('database', False) or self.args[0] if database == ':memory:': raise ValueError('SQLite in-memory database is not picklable!') return DBServerInfo.__getstate__(self) # list of DBServerInfo subclasses for different modules _DBServerModuleDict = dict(MySQLdb=MySQLServerInfo, sqlite3=SQLiteServerInfo) class MapView(object, UserDict.DictMixin): 'general purpose 1:1 mapping defined by any SQL query' def __init__(self, sourceDB, targetDB, viewSQL, cursor=None, serverInfo=None, inverseSQL=None, **kwargs): self.sourceDB = sourceDB self.targetDB = targetDB self.viewSQL = viewSQL self.inverseSQL = inverseSQL if cursor is None: if serverInfo is not None: # get cursor from serverInfo cursor = serverInfo.cursor() else: try: # can we get it from our other db? serverInfo = sourceDB.serverInfo except AttributeError: raise ValueError('you must provide serverInfo or cursor!') else: cursor = serverInfo.cursor() self.cursor = cursor self.serverInfo = serverInfo self.get_sql_format(False) # get sql formatter for this db interface _schemaModuleDict = _schemaModuleDict # default module list get_sql_format = get_table_schema def __getitem__(self, k): if not hasattr(k, 'db') or k.db is not self.sourceDB: raise KeyError('object is not in the sourceDB bound to this map!') sql, params = self._format_query(self.viewSQL, (k.id, )) self.cursor.execute(sql, params) # formatted for this db interface t = self.cursor.fetchmany(2) # get at most two rows if len(t) != 1: raise KeyError('%s not found in MapView, or not unique' % str(k)) return self.targetDB[t[0][0]] # get the corresponding object _pickleAttrs = dict(sourceDB=0, targetDB=0, viewSQL=0, serverInfo=0, inverseSQL=0) __getstate__ = standard_getstate __setstate__ = standard_setstate __setitem__ = __delitem__ = clear = pop = popitem = update = \ setdefault = read_only_error def __iter__(self): 'only yield sourceDB items that are actually in this mapping!' for k in self.sourceDB.itervalues(): try: self[k] yield k except KeyError: pass def keys(self): return [k for k in self] # don't use list(self); causes infinite loop! def __invert__(self): try: return self._inverse except AttributeError: if self.inverseSQL is None: raise ValueError('this MapView has no inverseSQL!') self._inverse = self.__class__(self.targetDB, self.sourceDB, self.inverseSQL, self.cursor, serverInfo=self.serverInfo, inverseSQL=self.viewSQL) self._inverse._inverse = self return self._inverse class GraphViewEdgeDict(UserDict.DictMixin): 'edge dictionary for GraphView: just pre-loaded on init' def __init__(self, g, k): self.g = g self.k = k sql, params = self.g._format_query(self.g.viewSQL, (k.id, )) self.g.cursor.execute(sql, params) # run the query l = self.g.cursor.fetchall() # get results if len(l) <= 0: raise KeyError('key %s not in GraphView' % k.id) self.targets = [t[0] for t in l] # preserve order of the results d = {} # also keep targetID:edgeID mapping if self.g.edgeDB is not None: # save with edge info for t in l: d[t[0]] = t[1] else: for t in l: d[t[0]] = None self.targetDict = d def __len__(self): return len(self.targets) def __iter__(self): for k in self.targets: yield self.g.targetDB[k] def keys(self): return list(self) def iteritems(self): if self.g.edgeDB is not None: # save with edge info for k in self.targets: yield (self.g.targetDB[k], self.g.edgeDB[self.targetDict[k]]) else: # just save the list of targets, no edge info for k in self.targets: yield (self.g.targetDB[k], None) def __getitem__(self, o, exitIfFound=False): 'for the specified target object, return its associated edge object' try: if o.db is not self.g.targetDB: raise KeyError('key is not part of targetDB!') edgeID = self.targetDict[o.id] except AttributeError: raise KeyError('key has no id or db attribute?!') if exitIfFound: return if self.g.edgeDB is not None: # return the edge object return self.g.edgeDB[edgeID] else: # no edge info return None def __contains__(self, o): try: self.__getitem__(o, True) # raise KeyError if not found return True except KeyError: return False __setitem__ = __delitem__ = clear = pop = popitem = update = \ setdefault = read_only_error class GraphView(MapView): 'general purpose graph interface defined by any SQL query' def __init__(self, sourceDB, targetDB, viewSQL, cursor=None, edgeDB=None, **kwargs): '''if edgeDB not None, viewSQL query must return (targetID, edgeID) tuples''' self.edgeDB = edgeDB MapView.__init__(self, sourceDB, targetDB, viewSQL, cursor, **kwargs) def __getitem__(self, k): if not hasattr(k, 'db') or k.db is not self.sourceDB: raise KeyError('object is not in the sourceDB bound to this map!') return GraphViewEdgeDict(self, k) _pickleAttrs = MapView._pickleAttrs.copy() _pickleAttrs.update(dict(edgeDB=0)) class SQLSequence(SQLRow, SequenceBase): """Transparent access to a DB row representing a sequence. Use attrAlias dict to rename 'length' to something else. """ def _init_subclass(cls, db, **kwargs): db.seqInfoDict = db # db will act as its own seqInfoDict SQLRow._init_subclass(db=db, **kwargs) _init_subclass = classmethod(_init_subclass) def __init__(self, id): SQLRow.__init__(self, id) SequenceBase.__init__(self) def __len__(self): return self.length def strslice(self, start, end): "Efficient access to slice of a sequence, useful for huge contigs" return self._select('%%(SUBSTRING)s(%s %%(SUBSTR_FROM)s %d \ %%(SUBSTR_FOR)s %d)' % (self.db._attrSQL('seq'), start + 1, end - start)) class DNASQLSequence(SQLSequence): _seqtype=DNA_SEQTYPE class RNASQLSequence(SQLSequence): _seqtype=RNA_SEQTYPE class ProteinSQLSequence(SQLSequence): _seqtype=PROTEIN_SEQTYPE PK7“;—>º(ààpygr/sqlgraph.pyc;ò ÍÊKc @södklZdkTdklZlZlZlZdkZdk l Z l Z l Z l Z lZlZlZlZlZlZlZlZdkZdkZdkZdkZdkZdefd„ƒYZdefd„ƒYZd efd „ƒYZd efd „ƒYZd efd„ƒYZ defd„ƒYZ!d„Z"d„Z#d„Z$defd„ƒYZ%d„Z&de%fd„ƒYZ'e'e%_(defd„ƒYZ)de)fd„ƒYZ*e*e)_+defd„ƒYZ,de,fd „ƒYZ-e-e,_(d!„Z.e/d"„Z0e/e/e1d#„Z2e3d$d%d&d'd(d(d)d*d+d,d-d.ƒZ4e5d/„Z6e3d$d0d&d1d(d2d)d3d+d4d-d4ƒZ7d5„Z8e5d6„Z9d7efd8„ƒYZ:e5d9„Z;hd:e6<d;e9<d<e9„ƒYZ>d2e/d?„Z?e/d2e@d@„e/dA„ZAdBe>fdC„ƒYZBd2dD„ZCdEeBfdF„ƒYZDdGefdH„ƒYZEdIe>fdJ„ƒYZFeFe,_GdKe>fdL„ƒYZHdMeHfdN„ƒYZIdOefdP„ƒYZJdQeJfdR„ƒYZKeKeJ_LdSefdT„ƒYZMhdUdVdWdXfdY„ZNdZeHfd[„ƒYZOd\eOfd]„ƒYZPePeO_Qd^e3fd_„ƒYZRd`efda„ƒYZSdbefdc„ƒYZTddeTfde„ƒYZUeUeT_QdfeTfdg„ƒYZVdhefdi„ƒYZWdje3fdk„ƒYZXdleei=fdm„ƒYZYdn„ZZe/do„Z[dp„Z\dqZ]dr„Z^hei_ds<ei`dU<eiadtydkl}|i|d(sselfsname(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__repr__^scCs:h|_g|_h|_t|_t|_h|_dS(s+reset all schema information for this tableN(sselfs descriptions columnNames columnTypesNones usesIntIDs primary_keysindexed(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys clear_schemaas     cCsfy|i|}Wn,tj o td||ifƒ‚nX|oty|i|SWq»t j oRy|i|i|SWq·tt fj o td||ifƒ‚q·Xq»Xn|oey |dSWq't j oFy|i|dSWq#tt fj ot d|ƒ‚q#Xq'Xnt |t iƒo |}n|djo |i}n|SdS(s=Translate python attribute name to appropriate SQL expressionsOattribute %s not a valid column or alias in %ssYattribute %s does not map to an SQL column in %sisOattribute %s does not map to a SQL column!sidN(sselfsdatasattrsfieldsKeyErrorsAttributeErrorsnames sqlColumns columnNames TypeErrors columnNumbers ValueErrors isinstancestypess StringTypes primary_key(sselfsattrs sqlColumns columnNumbersfield((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys_attrSQLjs4'    cKsž|o|ii|ƒnx||iƒD]n\}}y|i|dt ‚Wq(t j o|i||i|transform object attributes into tuple for storing in databaseN( sNoneslensselfs descriptionslsdatasitemsscolsicolsgetattrsobjsAttributeErrors TypeError(sselfsobjslsicolscol((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pystuple_from_obj(s  cCs^d|iddidgt|ƒƒd}|i||ƒ\}}|i i ||ƒdS(sxinsert tuple into the database. Note this uses the MySQL extension REPLACE, which overwrites any duplicate key.s%(REPLACE)s into s values (s,s%ss)N( sselfsnamesjoinslenslsss _format_queryssqlsparamsscursorsexecute(sselfslsssparamsssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys_insert2s/cCs |i|ƒ}|i|ƒdS(s5insert new row by transforming obj to tuple of valuesN(sselfstuple_from_objsobjsls_insert(sselfsobjsl((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysinsert:scCsWy|ii}Wntj otdƒ‚nX|tjotdƒ‚n|SdS(s-get the primary key value for the last INSERTs your db lacks lastrowid support?s/lastrowid is None so cannot get ID from INSERT!N(sselfscursors lastrowidsauto_idsAttributeErrorsNotImplementedErrorsNones ValueError(sselfsauto_id((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys get_insert_id?s cKsK|i otdƒ‚n|itdt|}||i|i <|SdS(s=return a new record with the assigned attributes, added to DBsthis database is read only!snewRowN( sselfs writeables ValueErrors itemClasssNonesTrueskwargssobjs_weakValueDictsid(sselfskwargssobj((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysnewIs  cCs|iiƒdS(sempty the cacheN(sselfs_weakValueDictsclear(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys clear_cacheQscCs|i otdƒ‚n|id|i|if|fƒ\}}|i i ||ƒy|i |=Wnt j onXdS(Nsthis database is read only!sdelete from %s where %s=%%s( sselfs writeables ValueErrors _format_querysnames primary_keyskssqlsparamsscursorsexecutes_weakValueDictsKeyError(sselfsksparamsssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __delitem__Us (*s__name__s __module__s__doc__s_schemaModuleDictsget_table_schemasNonesFalsesTrues__init__s__len__s__hash__s__cmp__sdicts _pickleAttrssstandard_getstates __getstate__s __setstate__s__repr__s clear_schemas_attrSQLs addAttrAliassobjclasss_selectsselectsquerys_updatesgetIDs cacheItems cache_itemss foreignKeys limit_cachesget_new_cursorsitersgeneric_iteratorstuple_from_dictstuple_from_objs_insertsinserts get_insert_idsnews clear_caches __delitem__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys SQLTableBase÷sH osc Ks&|tjo |i}n|djo |itj o |i}n|iƒ}|ot|idƒo |ii o2|ii ||d|d|d|d||Sq"|id|d|d|||id|d|d|dt|ƒƒSn/|tj ot|ƒƒSnt|iƒƒSd S( s8guarantee correct iteration insulated from other queriesss iter_keyss selectColssmap_fsorderByscache_fscursors cursorHolderN(s selectColssNonesselfs primary_keysorderBysget_new_cursorscursorshasattrs serverInfoscustom_iter_keyss iter_keyssmap_fscache_fskwargss_selectsgeneric_iterators CursorClosersget_fsiterskeys(sselfs selectColssorderBysmap_fscache_fsget_fskwargsscursor((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys iter_keysns(        sSQLTablecBsbtZdZeZeZeZe d„Z d„Z d„Z d„Z d„Zd„Zd„ZRS(sRProvide on-the-fly access to rows in the database, caching the results in dictcCs˜y |iSWntj onX|tjo |i}n|iid|iƒ|ii ƒ}h|_ x|D]}|i ||ƒqqWt|_dS(sLoad all data from the tablesselect * from %sN(sselfs _isLoadedsAttributeErrorsoclasssNones itemClassscursorsexecutesnamesfetchallsls_weakValueDictsts cacheItemsTrue(sselfsoclassslst((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysload’s    cCsÐy|i|SWnºtj o®|id|i|if|fƒ\}}|i i ||ƒ|i i dƒ}t |ƒdjo#tdt|ƒ|ifƒ‚n|iƒ|i|d|iƒSnXdS(NsRselect * from %s where %s=%%s limit 2iis!%s not found in %s, or not uniquei(sselfs_weakValueDictsksKeyErrors _format_querysnames primary_keyssqlsparamsscursorsexecutes fetchmanyslslensstrs limit_caches cacheItems itemClass(sselfskslsparamsssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __getitem__¡s# cCsÊ|i otdƒ‚ny|i|j o t‚nWntj otdƒ‚nXy$|i}|tjo t‚nWntj on X||i=|i |ƒ|i |ƒ||i |%%s or (%s=%%s and %s>%%s)( skwargsscopysFalsesSQLTables__init__sselfsargssorderBys clusterKeys primary_keys iterColumnssiterSQL(sselfsargsskwargs((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__init__æs   cCst|d|iƒSdS(Ns order by %s(sgetClusterKeyssselfs clusterKey(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys clusterkeysòscCsÁy|i|SWn«tj oŸ|id|i|i|i|i|if|fƒ\}}|i i ||ƒ|i i ƒ}|iƒx!|D]}|i||iƒqW|i|SnXdS(Nsiselect t2.* from %s t1,%s t2 where t1.%s=%%s and t1.%s=t2.%s(sselfs_weakValueDictsksKeyErrors _format_querysnames primary_keys clusterKeyssqlsparamsscursorsexecutesfetchallsls limit_cachests cacheItems itemClass(sselfskslsparamsstssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __getitem__õs+ cCs(|iƒ|id|i|fƒSdS(s1iterate over all items from the specified clusters where %s=%%sN(sselfs limit_cachesselects clusterKeys cluster_id(sselfs cluster_id((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys iterclusters (s__name__s __module__s__doc__s__init__s clusterkeyss __getitem__s itercluster(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysSQLTableClusteredâs   sSQLForeignRelationcBs tZdZd„Zd„ZRS(s7mapping based on matching a foreign key in an SQL tablecCs||_||_dS(N(stablesselfskeyName(sselfstableskeyName((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__init__s cCs~g}x7|iid|i|ifƒD]}|i|ƒq)Wt |ƒdjo#t dt |ƒ|i fƒ‚n|SdS(s3get list of objects o with getattr(o,keyName)==k.ids where %s=%%sis%s not found in %sN( slsselfstablesselectskeyNamesksidsosappendslensKeyErrorsstrsname(sselfskslso((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __getitem__s##(s__name__s __module__s__doc__s__init__s __getitem__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysSQLForeignRelation s  sSQLTableNoCachecBsMtZdZeZeZeZd„Z d„Z d„Z d„Z d„Z RS(sÇProvide on-the-fly access to rows in the database; values are simply an object interface (SQLRow) to back-end db query. Row data are not stored locally, but always accessed by querying the dbcCs |dSdS(Ni(st(sselfst((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysgetID%scCs)ti||||i|idƒƒSdS(Nsid(s SQLTableBasesselectsselfs whereClausesparamssoclasss_attrSQL(sselfs whereClausesparams((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysselect(scCs¢y|i|SWnŒtj o€|id|i|f|iƒ|iidƒ}t |ƒdjotd|ƒ‚n|i |ƒ}||i|<|SnXdS(Ns where %s=%%siis id %s non-existent or not unique( sselfs_weakValueDictsksKeyErrors_selects primary_keyscursors fetchmanystslens itemClassso(sselfsksost((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __getitem__,s  cCsÚ|i otdƒ‚ny|i|j o t‚nWntj otdƒ‚nXy ||=Wntj onXy|i|i =Wntj onX|i |i |i |ƒ|i |ƒ||i|%%s( s SQLTableBases__init__sselfsargsskwargss_attrSQLs _distinct_keys distinct_keysorderBysiterSQLs iterColumns(sselfsargsskwargs((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__init__Zs  cCst|d|iƒSdS(Ns selectCols(sgetKeyssselfs distinct_key(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pyskeyscscCst|d|iƒSdS(Ns selectCols(s iter_keyssselfs distinct_key(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__iter__fsccsx|id|i|i|iƒf|fƒ\}}|ii ||ƒ|ii ƒ}x|D]}|i |ƒVq]WdS(Nsselect * from %s where %s=%%s(sselfs _format_querysnames_attrSQLs _distinct_keysidssqlsparamsscursorsexecutesfetchallslsrows itemClass(sselfsidslsparamsssqlsrow((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __getitem__is"cKs|ii|ƒdS(N(sselfsdatasupdateskwargs(sselfskwargs((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys addAttrAliasts( s__name__s __module__s__doc__sTupleOs itemClasss _distinct_keys__init__skeyss__iter__s __getitem__s addAttrAlias(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysSQLTableMultiNoCacheUs    sSQLEdgescBsZtZdZdZeiiƒZeieddƒƒd„Z e Z d„Z d„Z RS(shprovide iterator over edges as (source, target, edge) and getitem[edge] --> [(source,target),...]sedge_idsgraphic CsÍ|iid|idƒ|idƒ|idƒ|i|idƒ|idƒ|idƒfƒg}xZ|iiƒD]I\}}}|i |i i |ƒ|i i |ƒ|i i|ƒfƒqxW|SdS(NsWselect %s,%s,%s from %s where %s is not null order by %s,%ss source_ids target_idsedge_id(sselfscursorsexecutes_attrSQLsnameslsfetchalls source_ids target_idsedge_idsappendsgraphs unpack_sources unpack_targets unpack_edge(sselfs source_ids target_idslsedge_id((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pyskeyss b>cCst|iƒƒSdS(N(sitersselfskeys(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__iter__‘scCsÄ|id|idƒ|idƒ|i|i|iƒf|ii|ƒfƒ\}}|i i ||ƒg}xH|i i ƒD]7\}}|i|ii|ƒ|ii|ƒfƒqW|SdS(Ns!select %s,%s from %s where %s=%%ss source_ids target_id(sselfs _format_querys_attrSQLsnames _distinct_keysgraphs pack_edgesedgessqlsparamsscursorsexecuteslsfetchalls source_ids target_idsappends unpack_sources unpack_target(sselfsedges target_idslsparamsssqls source_id((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __getitem__”s: /( s__name__s __module__s__doc__s _distinct_keysSQLTableMultiNoCaches _pickleAttrsscopysupdatesdictskeyss__call__s__iter__s __getitem__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysSQLEdgesxs   s SQLEdgeDictcBs’tZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd „Zd„ZeZRS(s)2nd level graph interface to SQL databasecCs³||_||_t|idƒ o‰|iid|ii|ii|iif|ifƒ\}}|ii i ||ƒt |ii i ƒƒdjot dƒ‚q¯ndS(NsallowMissingNodessYselect %s from %s where %s=%%s limit 1isnode not in graph!(sfromNodesselfstableshasattrs _format_querys sourceSQLsnamessqlsparamsscursorsexecuteslensfetchallsKeyError(sselfsfromNodestablesparamsssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__init__¦s  +cCsè|iid|ii|ii|ii|iif|i|ii|ƒfƒ\}}|ii i ||ƒ|ii idƒ}t|ƒdjotdƒ‚ny|ii|ddƒSWntj otdƒ‚nXdS(Ns`select %s from %s where %s=%%s and %s=%%s limit 2iisNeither no edge from source to target or not unique!isno edge from node to target(sselfstables _format_querysedgeSQLsnames sourceSQLs targetSQLsfromNodes pack_targetstargetssqlsparamsscursorsexecutes fetchmanyslslensKeyErrors unpack_edges IndexError(sselfstargetslsparamsssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __getitem__´s4$cCs¶|iid|ii|i|ii|ƒ|ii|ƒfƒ\}}|ii i ||ƒt |idƒ p)t |idƒo|ii|iijo|i|7_ndS(NsSreplace into %s values (%%s,%%s,%%s)ssourceDBstargetDB(sselfstables _format_querysnamesfromNodes pack_targetstargets pack_edgesedgessqlsparamsscursorsexecuteshasattrssourceDBstargetDB(sselfstargetsedgesparamsssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __setitem__Çs 3@cCst||<|SdS(N(sNonesselfstarget(sselfstarget((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__iadd__Ôs cCs|iid|ii|ii|iif|i|ii|ƒfƒ\}}|ii i ||ƒ|ii i djotdƒ‚ndS(NsUdelete from %s where %s=%%s and %s=%%sisno edge from node to target(sselfstables _format_querysnames sourceSQLs targetSQLsfromNodes pack_targetstargetssqlsparamsscursorsexecutesrowcountsKeyError(sselfstargetsparamsssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __delitem__Øs +$cCs||iid|ii|ii|ii|ii|iif|ifƒ\}}|ii i ||ƒ|ii i ƒSdS(Nscselect %s,%s from %s where %s=%%s and %s is not null( sselfstables _format_querys targetSQLsedgeSQLsnames sourceSQLsfromNodessqlsparamsscursorsexecutesfetchall(sselfsparamsssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysiterator_queryäs=cCsAgi}|iƒD]"\}}||ii|ƒƒq~SdS(N(sappends_[1]sselfsiterator_querys target_idsedge_idstables unpack_target(sselfs_[1]s target_idsedge_id((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pyskeysðscCsAgi}|iƒD]"\}}||ii|ƒƒq~SdS(N(sappends_[1]sselfsiterator_querys target_idsedge_idstables unpack_edge(sselfs_[1]s target_idsedge_id((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysvaluesôscCsegi}|iƒD]F\}}||ii|iƒ|ii |ƒ|ii |ƒfƒq~SdS(N( sappends_[1]sselfsiterator_querys target_idsedge_idstables unpack_sourcesfromNodes unpack_targets unpack_edge(sselfs_[1]s target_idsedge_id((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysedgesøscCsSgi}|iƒD]4\}}||ii|ƒ|ii|ƒfƒq~SdS(N( sappends_[1]sselfsiterator_querys target_idsedge_idstables unpack_targets unpack_edge(sselfs_[1]s target_idsedge_id((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysitemsþscCst|iƒƒSdS(N(sitersselfskeys(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__iter__scCst|iƒƒSdS(N(sitersselfsvalues(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys itervaluesscCst|iƒƒSdS(N(sitersselfsitems(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys iteritems scCst|iƒƒSdS(N(slensselfskeys(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__len__ s(s__name__s __module__s__doc__s__init__s __getitem__s __setitem__s__iadd__s __delitem__siterator_queryskeyssvaluessedgessitemss__iter__s itervaluess iteritemss__len__s graph_cmps__cmp__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys SQLEdgeDict£s            sSQLEdgelessDictcBs tZdZd„Zd„ZRS(s,for SQLGraph tables that lack edge_id columncCs®|iid|ii|ii|ii|iif|i|ii|ƒfƒ\}}|ii i ||ƒ|ii i dƒ}t|ƒdjotdƒ‚ntSdS(Ns`select %s from %s where %s=%%s and %s=%%s limit 2iisNeither no edge from source to target or not unique!(sselfstables _format_querys targetSQLsnames sourceSQLsfromNodes pack_targetstargetssqlsparamsscursorsexecutes fetchmanyslslensKeyErrorsNone(sselfstargetslsparamsssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __getitem__s4$cCsž|iid|ii|ii|ii|iif|ifƒ\}}|ii i ||ƒgi }|ii i ƒD]}||dtfƒqy~SdS(Ns`select %s from %s where %s=%%s and %s is not nulli(sselfstables _format_querys targetSQLsnames sourceSQLsfromNodessqlsparamsscursorsexecutesappends_[1]sfetchallstsNone(sselfs_[1]sparamsstssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysiterator_query%s4(s__name__s __module__s__doc__s __getitem__siterator_query(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysSQLEdgelessDicts  sSQLGraphEdgeDescriptorcBstZdZd„ZRS(s'provide an SQLEdges interface on demandcCsey|iiƒ}Wn,tj o t|i|id|ƒSn!Xt|i|id|d|ƒSdS(Nsgraphs attrAlias(sobjs attrAliasscopysAttributeErrorsSQLEdgessnamescursor(sselfsobjsobjtypes attrAlias((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__get__7s (s__name__s __module__s__doc__s__get__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysSQLGraphEdgeDescriptor4s sintssourcestargetsedgec KsÔg} xÃ|D]»}y||d} Wntj o|d} nXy"| i| ||dfƒw Wnttfj onXy)||d}|t jo t‚nWntj onÞXt |ƒ}y|iƒ}WnMtj oAy$| i| |i|ifƒw Wqžtj oqžXnrXt|tƒp t|tƒo| i| dfƒq n7t|tƒo| i| dfƒq n tdƒ‚| i| |fƒtid| |fƒq W| SdS(sAreturn list of [(colname, coltype), ...] for source, target, edges_idsDBsints varchar(32)s&SQLGraph node/edge must be int or str!s/no type info found for %s, so using default: %sN(sls columnAttrssattrs attrAliassattrNamesKeyErrorsappends createTables TypeErrorskwargssdbsNonesitersitsnextsks StopIterations columnTypes primary_keysAttributeErrors isinstancesintslongsstrs ValueErrorsdefaultColumnTypesloggerswarn( s createTables attrAliassdefaultColumnTypes columnAttrsskwargssdbsitsattrskslsattrName((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysgetColumnTypesAsL     sSQLGraphc BsûtZdZdZeiiƒZeieddddddddƒƒe Z d„Z d„Z d „Z d „ZeZd „Zd „Zd „Zd„Zd„Zd„Zd„Zd„ZeƒZeZd„ZeZee ƒƒe!e ƒƒRS(s¡provide a graph interface via a SQL table. Key capabilities are: - setitem with an empty dictionary: a dummy operation - getitem with a key that exists: return a placeholder - setitem with non empty placeholder: again a dummy operation EXAMPLE TABLE SCHEMA: create table mygraph (source_id int not null,target_id int,edge_id int, unique(source_id,target_id)); s source_idssourceDBistargetDBsedgeDBsallowMissingNodesc Osot|ddddddddd d f ƒ\}}d |joyt|}d ||d d |d d|dd |dd|dd |dd|d d |dd f |d via , and store primary keys in idDict, along with a list of the tables each key indexes. suse %ss show tablesis.iýÿÿÿs_idN(scursorsexecutesnamestablessappends_[1]sfetchallscslststnamesSQLTablesos descriptionsfs primary_keysidDicts setdefault( snamescursorsidDictstablesscsfslsos_[1]stnamest((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysdescribeDBTables\s" 1  cCs¹|tjo h}nx—|iƒD]‰}|io9|i|jog||i dictionary.iýÿÿÿs_idN( sidDictsNonestablessvaluessos primary_keysappends descriptionsf(stablessidDictsosf((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysindexIDsqs     cCsIh}x8|iƒD]*\}}|i|ƒo|||ti|ƒy|iiƒ|`Wntj onXdS(N(s DBServerInfosclosesselfs_conn_sscursorsAttributeError(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pyscloseDs    cCs)gi}|D]}||dƒq~S(Ni(sappends_[1]sxst(sxs_[1]st((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysMsc Ks[t|||}y |i}Wntj onX|id|d|d|d|ƒSdS(Nscursorscache_fsmap_fsfetch_f( s BlockIteratorsdbscursorskwargssblock_iteratorscache_fsAttributeErrorsgeneric_iteratorsmap_f(sselfsdbscursorsmap_fscache_fskwargssblock_iterator((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys iter_keysLs ( s__name__s __module__s__doc__s _serverTypes_start_connectionsNones new_cursorsclosesiters iter_keys(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysMySQLServerInfo,s    s CursorClosercBs tZdZd„Zd„ZRS(söcontainer for ensuring cursor.close() is called, when this obj deleted. For Python 2.5+, we could replace this with a try... finally clause in a generator function such as generic_iterator(); see PEP 342 or What's New in Python 2.5. cCs ||_dS(N(scursorsself(sselfscursor((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__init__]scCs|iiƒdS(N(sselfscursorsclose(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__del__`s(s__name__s __module__s__doc__s__init__s__del__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys CursorCloserWs  s BlockIteratorcBs#tZdZdd„Zd„ZRS(s5workaround for MySQLdb iteration horrible performancesc  sg||_||_||_||_d|_|doó|i|_|djo8gi}|i D]} ||i | ƒqb~|_ qQt|i ƒ}y|i|ƒ‰Wn/tj o#t|i ƒ‰||g7}nXdi|ƒ|_tt|i ƒƒ|_ ˆdjo‡d†|_qQn'd|i|_|i |if|_ f|_t|_dS(NssorderBys*s,ics)gi}|D]}||ˆƒq~S(N(sappends_[1]sxstsi(sxs_[1]st(si(s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys{ss WHERE %s>%%s(sdbsselfscursors selectColsskwargss whereClausesiterSQLswhereSQLsappends_[1]s iterColumnsscolsdatas whereParamsslistsindexsis ValueErrorslensjoinsrangescache_fs primary_keysparamssFalsesdone( sselfsdbscursors selectColss whereClauseskwargss_[1]sis iterColumnsscol((sis3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__init__gs.        8  c Csû|iofSn|ii|i|id|idd|iid|i|i |ii ƒ}t |ƒ|iijot |_|Sn|d}t |ƒdjo5gi}|iD]}|||ƒqº~|_n ||_|i|_|SdS(sget the next block of datascursorslimitsLIMIT %ss selectColsiÿÿÿÿiN(sselfsdonesdbs_selects whereClausesparamsscursors arraysizes selectColsskwargssfetchallsrowsslensTrueslastrowsappends_[1]s whereParamssicolswhereSQL(sselfsrowss_[1]slastrowsicol((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__call__‚s    5  (s__name__s __module__s__doc__s__init__s__call__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys BlockIteratords  sSQLiteServerInfocBs/tZdZdZd„Zd„Zd„ZRS(s(picklable reference to a sqlite databasessqlitecOs&ti|ddt|ƒ||ŽdS(s)Takes same arguments as sqlite3.connect()ssqlite3sdatabaseN(s DBServerInfos__init__sselfsSourceFileNamesdatabasesargsskwargs(sselfsdatabasesargsskwargs((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__init__šs cCs%t|i|iŽ\|_|_dS(N(ssqlite_connectsselfsargsskwargss _connections_cursor(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys_start_connection scCsQ|iidtƒp |id}|djotdƒ‚nti|ƒSdS(Nsdatabaseis:memory:s+SQLite in-memory database is not picklable!( sselfskwargssgetsFalsesargssdatabases ValueErrors DBServerInfos __getstate__(sselfsdatabase((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __getstate__¤s# (s__name__s __module__s__doc__s _serverTypes__init__s_start_connections __getstate__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysSQLiteServerInfo–s   sMySQLdbsMapViewc Bs¡tZdZeeed„ZeZeZd„Ze ddddddddddƒZ e Z e ZeZZZZZZZd „Zd „Zd „ZRS( s4general purpose 1:1 mapping defined by any SQL querycKs°||_||_||_||_|tjo\|tj o|iƒ}qy |i}Wntj ot dƒ‚qX|iƒ}n||_||_|i t ƒdS(Ns&you must provide serverInfo or cursor!( ssourceDBsselfstargetDBsviewSQLs inverseSQLscursorsNones serverInfosAttributeErrors ValueErrorsget_sql_formatsFalse(sselfssourceDBstargetDBsviewSQLscursors serverInfos inverseSQLskwargs((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__init__²s         cCs¾t|dƒ p|i|ij otdƒ‚n|i|i|ifƒ\}}|i i ||ƒ|i i dƒ}t|ƒdjotdt|ƒƒ‚n|i|ddSdS(Nsdbs0object is not in the sourceDB bound to this map!iis&%s not found in MapView, or not uniquei(shasattrsksdbsselfssourceDBsKeyErrors _format_querysviewSQLsidssqlsparamsscursorsexecutes fetchmanystslensstrstargetDB(sselfsksparamsstssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __getitem__És$!ssourceDBistargetDBsviewSQLs serverInfos inverseSQLccsDx=|iiƒD],}y|||VWqtj oqXqWdS(s<only yield sourceDB items that are actually in this mapping!N(sselfssourceDBs itervaluessksKeyError(sselfsk((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__iter__ÛscCs)gi}|D]}||ƒq~SdS(N(sappends_[1]sselfsk(sselfs_[1]sk((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pyskeysäsc Cs‘y |iSWntj os|itjotdƒ‚n|i|i|i|i|i d|i d|i ƒ|_||i_|iSnXdS(Nsthis MapView has no inverseSQL!s serverInfos inverseSQL( sselfs_inversesAttributeErrors inverseSQLsNones ValueErrors __class__stargetDBssourceDBscursors serverInfosviewSQL(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __invert__çs    (s__name__s __module__s__doc__sNones__init__s_schemaModuleDictsget_table_schemasget_sql_formats __getitem__sdicts _pickleAttrssstandard_getstates __getstate__sstandard_setstates __setstate__sread_only_errors __setitem__s __delitem__sclearspopspopitemsupdates setdefaults__iter__skeyss __invert__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysMapView¯s    sGraphViewEdgeDictcBsntZdZd„Zd„Zd„Zd„Zd„Zed„Z d„Z e Z Z ZZZZZRS(s6edge dictionary for GraphView: just pre-loaded on initc Cs%||_||_|ii|ii|ifƒ\}}|iii ||ƒ|iii ƒ}t |ƒdjot d|iƒ‚ngi}|D]}||dƒq™~|_h}|iitj o'xC|D]}|d||dtZdZd„ZeeƒZd„Zd„Zd„ZRS(szTransparent access to a DB row representing a sequence. Use attrAlias dict to rename 'length' to something else. cKs ||_tid||dS(Nsdb(sdbs seqInfoDictsSQLRows_init_subclassskwargs(sclssdbskwargs((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys_init_subclassN s cCs!ti||ƒti|ƒdS(N(sSQLRows__init__sselfsids SequenceBase(sselfsid((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__init__S scCs |iSdS(N(sselfslength(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__len__W scCs2|id|iidƒ|d||fƒSdS(s@Efficient access to slice of a sequence, useful for huge contigssU%%(SUBSTRING)s(%s %%(SUBSTR_FROM)s %d %%(SUBSTR_FOR)s %d)sseqiN(sselfs_selectsdbs_attrSQLsstartsend(sselfsstartsend((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysstrsliceZ s(s__name__s __module__s__doc__s_init_subclasss classmethods__init__s__len__sstrslice(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys SQLSequenceH s     sDNASQLSequencecBstZeZRS(N(s__name__s __module__s DNA_SEQTYPEs_seqtype(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysDNASQLSequencea ssRNASQLSequencecBstZeZRS(N(s__name__s __module__s RNA_SEQTYPEs_seqtype(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysRNASQLSequencee ssProteinSQLSequencecBstZeZRS(N(s__name__s __module__sPROTEIN_SEQTYPEs_seqtype(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysProteinSQLSequencei s(vs __future__s generatorssmappingssequences SequenceBases DNA_SEQTYPEs RNA_SEQTYPEsPROTEIN_SEQTYPEstypess classutils methodFactorysstandard_getstatesoverride_rich_cmpsgenerate_itemssget_bound_subclasssstandard_setstatesget_valid_pathsstandard_invertsRecentValueDictionarysread_only_errorsSourceFileNames split_kwargssossplatformsUserDictswarningssloggersobjectsTupleDescriptorsTupleIDDescriptorsTupleDescriptorRWs SQLDescriptorsSQLDescriptorRWsReadOnlyDescriptorsselect_from_rowsinit_row_subclasssdir_rowsTupleOsinsert_and_cache_idsTupleORWs_RWClasssColumnDescriptorsReadOnlyColumnDescs_readOnlyClasssSQLRowsSQLRowRWs list_to_dictsNonesget_name_cursorsFalses mysql_connectsdicts _mysqlMacrossTruesmysql_table_schemas _sqliteMacross import_sqlitessqlite_table_schemas SQLFormatDictsget_table_schemas_schemaModuleDicts DictMixins SQLTableBasesgetKeyssiters iter_keyssSQLTablesgetClusterKeyssSQLTableClusteredsSQLForeignRelationsSQLTableNoCaches _tableclasssSQLTableMultiNoCachesSQLEdgess SQLEdgeDictsSQLEdgelessDicts_edgelessClasssSQLGraphEdgeDescriptorsgetColumnTypessSQLGraphs SQLIDGraphs _IDGraphClasssSQLEdgeDictClusteredsSQLEdgesClusteredDescrsSQLGraphClusteredsSQLIDGraphClusteredsSQLEdgesClusteredsForeignKeyInversesForeignKeyEdgesForeignKeyGraphsdescribeDBTablessindexIDss suffixSubsets PRIMARY_KEYs graphDBTabless StringTypesIntTypes FloatTypesSQLTypeTranslationscreateTableFromReprscreateTableFromRowsstoreRowsstoreRowDelayeds TableGroupssqlite_connects DBServerInfosMySQLServerInfos CursorClosers BlockIteratorsSQLiteServerInfos_DBServerModuleDictsMapViewsGraphViewEdgeDicts GraphViews SQLSequencesDNASQLSequencesRNASQLSequencesProteinSQLSequence(csProteinSQLSequences iter_keysscreateTableFromReprsMapViewsdir_rowsTupleORWsTupleDescriptorsForeignKeyInversesMySQLServerInfosplatforms_DBServerModuleDicts generatorss mysql_connectsSQLEdgesClusteredsgetClusterKeyssgetColumnTypess suffixSubsetsSQLTableClustereds DBServerInfosForeignKeyEdgesPROTEIN_SEQTYPEsSQLIDGraphClustereds_schemaModuleDictsstandard_getstatesReadOnlyColumnDescsRNASQLSequences SQLFormatDictsstandard_invertsgetKeyssForeignKeyGraphs CursorClosers import_sqlitesSQLEdgess TableGroupsSQLTableMultiNoCachesSQLTablesSQLForeignRelationsReadOnlyDescriptors RNA_SEQTYPEsTupleDescriptorRWsgenerate_itemssSQLTypeTranslationsUserDicts methodFactorysstandard_setstatesSQLEdgelessDictsinit_row_subclasssread_only_errors list_to_dictsColumnDescriptorsSQLEdgesClusteredDescrsselect_from_rowsGraphViewEdgeDictsSQLRowRWs BlockIterators SQLTableBasesossSQLRowsTupleIDDescriptorsstoreRowsSQLDescriptorRWssqlite_table_schemas DNA_SEQTYPEs PRIMARY_KEYs SQLIDGraphs split_kwargss SQLDescriptors _sqliteMacross graphDBTablessmysql_table_schemas _mysqlMacrossSourceFileNamesloggersdescribeDBTablessget_valid_pathsstoreRowDelayedsSQLGraphClusteredsSQLEdgeDictClusteredsindexIDssSQLGraphEdgeDescriptorsSQLiteServerInfosRecentValueDictionaryscreateTableFromRowsinsert_and_cache_idsSQLTableNoCachesTupleOssqlite_connects GraphViewswarningssget_name_cursorsDNASQLSequencesoverride_rich_cmps SQLSequencesget_table_schemasSQLGraphs SQLEdgeDictstypess SequenceBasesget_bound_subclass((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys?sÄ  O            (   -    .4 !ÿl O *5 #+o  .   { D 7    *   3+ 2  FAPK7“;—>º(ààpygr/sqlgraph.pyo;ò ÍÊKc @södklZdkTdklZlZlZlZdkZdk l Z l Z l Z l Z lZlZlZlZlZlZlZlZdkZdkZdkZdkZdkZdefd„ƒYZdefd„ƒYZd efd „ƒYZd efd „ƒYZd efd„ƒYZ defd„ƒYZ!d„Z"d„Z#d„Z$defd„ƒYZ%d„Z&de%fd„ƒYZ'e'e%_(defd„ƒYZ)de)fd„ƒYZ*e*e)_+defd„ƒYZ,de,fd „ƒYZ-e-e,_(d!„Z.e/d"„Z0e/e/e1d#„Z2e3d$d%d&d'd(d(d)d*d+d,d-d.ƒZ4e5d/„Z6e3d$d0d&d1d(d2d)d3d+d4d-d4ƒZ7d5„Z8e5d6„Z9d7efd8„ƒYZ:e5d9„Z;hd:e6<d;e9<d<e9„ƒYZ>d2e/d?„Z?e/d2e@d@„e/dA„ZAdBe>fdC„ƒYZBd2dD„ZCdEeBfdF„ƒYZDdGefdH„ƒYZEdIe>fdJ„ƒYZFeFe,_GdKe>fdL„ƒYZHdMeHfdN„ƒYZIdOefdP„ƒYZJdQeJfdR„ƒYZKeKeJ_LdSefdT„ƒYZMhdUdVdWdXfdY„ZNdZeHfd[„ƒYZOd\eOfd]„ƒYZPePeO_Qd^e3fd_„ƒYZRd`efda„ƒYZSdbefdc„ƒYZTddeTfde„ƒYZUeUeT_QdfeTfdg„ƒYZVdhefdi„ƒYZWdje3fdk„ƒYZXdleei=fdm„ƒYZYdn„ZZe/do„Z[dp„Z\dqZ]dr„Z^hei_ds<ei`dU<eiadtydkl}|i|d(sselfsname(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__repr__^scCs:h|_g|_h|_t|_t|_h|_dS(s+reset all schema information for this tableN(sselfs descriptions columnNames columnTypesNones usesIntIDs primary_keysindexed(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys clear_schemaas     cCsfy|i|}Wn,tj o td||ifƒ‚nX|oty|i|SWq»t j oRy|i|i|SWq·tt fj o td||ifƒ‚q·Xq»Xn|oey |dSWq't j oFy|i|dSWq#tt fj ot d|ƒ‚q#Xq'Xnt |t iƒo |}n|djo |i}n|SdS(s=Translate python attribute name to appropriate SQL expressionsOattribute %s not a valid column or alias in %ssYattribute %s does not map to an SQL column in %sisOattribute %s does not map to a SQL column!sidN(sselfsdatasattrsfieldsKeyErrorsAttributeErrorsnames sqlColumns columnNames TypeErrors columnNumbers ValueErrors isinstancestypess StringTypes primary_key(sselfsattrs sqlColumns columnNumbersfield((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys_attrSQLjs4'    cKsž|o|ii|ƒnx||iƒD]n\}}y|i|dt ‚Wq(t j o|i||i|transform object attributes into tuple for storing in databaseN( sNoneslensselfs descriptionslsdatasitemsscolsicolsgetattrsobjsAttributeErrors TypeError(sselfsobjslsicolscol((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pystuple_from_obj(s  cCs^d|iddidgt|ƒƒd}|i||ƒ\}}|i i ||ƒdS(sxinsert tuple into the database. Note this uses the MySQL extension REPLACE, which overwrites any duplicate key.s%(REPLACE)s into s values (s,s%ss)N( sselfsnamesjoinslenslsss _format_queryssqlsparamsscursorsexecute(sselfslsssparamsssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys_insert2s/cCs |i|ƒ}|i|ƒdS(s5insert new row by transforming obj to tuple of valuesN(sselfstuple_from_objsobjsls_insert(sselfsobjsl((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysinsert:scCsWy|ii}Wntj otdƒ‚nX|tjotdƒ‚n|SdS(s-get the primary key value for the last INSERTs your db lacks lastrowid support?s/lastrowid is None so cannot get ID from INSERT!N(sselfscursors lastrowidsauto_idsAttributeErrorsNotImplementedErrorsNones ValueError(sselfsauto_id((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys get_insert_id?s cKsK|i otdƒ‚n|itdt|}||i|i <|SdS(s=return a new record with the assigned attributes, added to DBsthis database is read only!snewRowN( sselfs writeables ValueErrors itemClasssNonesTrueskwargssobjs_weakValueDictsid(sselfskwargssobj((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysnewIs  cCs|iiƒdS(sempty the cacheN(sselfs_weakValueDictsclear(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys clear_cacheQscCs|i otdƒ‚n|id|i|if|fƒ\}}|i i ||ƒy|i |=Wnt j onXdS(Nsthis database is read only!sdelete from %s where %s=%%s( sselfs writeables ValueErrors _format_querysnames primary_keyskssqlsparamsscursorsexecutes_weakValueDictsKeyError(sselfsksparamsssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __delitem__Us (*s__name__s __module__s__doc__s_schemaModuleDictsget_table_schemasNonesFalsesTrues__init__s__len__s__hash__s__cmp__sdicts _pickleAttrssstandard_getstates __getstate__s __setstate__s__repr__s clear_schemas_attrSQLs addAttrAliassobjclasss_selectsselectsquerys_updatesgetIDs cacheItems cache_itemss foreignKeys limit_cachesget_new_cursorsitersgeneric_iteratorstuple_from_dictstuple_from_objs_insertsinserts get_insert_idsnews clear_caches __delitem__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys SQLTableBase÷sH osc Ks&|tjo |i}n|djo |itj o |i}n|iƒ}|ot|idƒo |ii o2|ii ||d|d|d|d||Sq"|id|d|d|||id|d|d|dt|ƒƒSn/|tj ot|ƒƒSnt|iƒƒSd S( s8guarantee correct iteration insulated from other queriesss iter_keyss selectColssmap_fsorderByscache_fscursors cursorHolderN(s selectColssNonesselfs primary_keysorderBysget_new_cursorscursorshasattrs serverInfoscustom_iter_keyss iter_keyssmap_fscache_fskwargss_selectsgeneric_iterators CursorClosersget_fsiterskeys(sselfs selectColssorderBysmap_fscache_fsget_fskwargsscursor((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys iter_keysns(        sSQLTablecBsbtZdZeZeZeZe d„Z d„Z d„Z d„Z d„Zd„Zd„ZRS(sRProvide on-the-fly access to rows in the database, caching the results in dictcCs˜y |iSWntj onX|tjo |i}n|iid|iƒ|ii ƒ}h|_ x|D]}|i ||ƒqqWt|_dS(sLoad all data from the tablesselect * from %sN(sselfs _isLoadedsAttributeErrorsoclasssNones itemClassscursorsexecutesnamesfetchallsls_weakValueDictsts cacheItemsTrue(sselfsoclassslst((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysload’s    cCsÐy|i|SWnºtj o®|id|i|if|fƒ\}}|i i ||ƒ|i i dƒ}t |ƒdjo#tdt|ƒ|ifƒ‚n|iƒ|i|d|iƒSnXdS(NsRselect * from %s where %s=%%s limit 2iis!%s not found in %s, or not uniquei(sselfs_weakValueDictsksKeyErrors _format_querysnames primary_keyssqlsparamsscursorsexecutes fetchmanyslslensstrs limit_caches cacheItems itemClass(sselfskslsparamsssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __getitem__¡s# cCsÊ|i otdƒ‚ny|i|j o t‚nWntj otdƒ‚nXy$|i}|tjo t‚nWntj on X||i=|i |ƒ|i |ƒ||i |%%s or (%s=%%s and %s>%%s)( skwargsscopysFalsesSQLTables__init__sselfsargssorderBys clusterKeys primary_keys iterColumnssiterSQL(sselfsargsskwargs((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__init__æs   cCst|d|iƒSdS(Ns order by %s(sgetClusterKeyssselfs clusterKey(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys clusterkeysòscCsÁy|i|SWn«tj oŸ|id|i|i|i|i|if|fƒ\}}|i i ||ƒ|i i ƒ}|iƒx!|D]}|i||iƒqW|i|SnXdS(Nsiselect t2.* from %s t1,%s t2 where t1.%s=%%s and t1.%s=t2.%s(sselfs_weakValueDictsksKeyErrors _format_querysnames primary_keys clusterKeyssqlsparamsscursorsexecutesfetchallsls limit_cachests cacheItems itemClass(sselfskslsparamsstssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __getitem__õs+ cCs(|iƒ|id|i|fƒSdS(s1iterate over all items from the specified clusters where %s=%%sN(sselfs limit_cachesselects clusterKeys cluster_id(sselfs cluster_id((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys iterclusters (s__name__s __module__s__doc__s__init__s clusterkeyss __getitem__s itercluster(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysSQLTableClusteredâs   sSQLForeignRelationcBs tZdZd„Zd„ZRS(s7mapping based on matching a foreign key in an SQL tablecCs||_||_dS(N(stablesselfskeyName(sselfstableskeyName((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__init__s cCs~g}x7|iid|i|ifƒD]}|i|ƒq)Wt |ƒdjo#t dt |ƒ|i fƒ‚n|SdS(s3get list of objects o with getattr(o,keyName)==k.ids where %s=%%sis%s not found in %sN( slsselfstablesselectskeyNamesksidsosappendslensKeyErrorsstrsname(sselfskslso((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __getitem__s##(s__name__s __module__s__doc__s__init__s __getitem__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysSQLForeignRelation s  sSQLTableNoCachecBsMtZdZeZeZeZd„Z d„Z d„Z d„Z d„Z RS(sÇProvide on-the-fly access to rows in the database; values are simply an object interface (SQLRow) to back-end db query. Row data are not stored locally, but always accessed by querying the dbcCs |dSdS(Ni(st(sselfst((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysgetID%scCs)ti||||i|idƒƒSdS(Nsid(s SQLTableBasesselectsselfs whereClausesparamssoclasss_attrSQL(sselfs whereClausesparams((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysselect(scCs¢y|i|SWnŒtj o€|id|i|f|iƒ|iidƒ}t |ƒdjotd|ƒ‚n|i |ƒ}||i|<|SnXdS(Ns where %s=%%siis id %s non-existent or not unique( sselfs_weakValueDictsksKeyErrors_selects primary_keyscursors fetchmanystslens itemClassso(sselfsksost((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __getitem__,s  cCsÚ|i otdƒ‚ny|i|j o t‚nWntj otdƒ‚nXy ||=Wntj onXy|i|i =Wntj onX|i |i |i |ƒ|i |ƒ||i|%%s( s SQLTableBases__init__sselfsargsskwargss_attrSQLs _distinct_keys distinct_keysorderBysiterSQLs iterColumns(sselfsargsskwargs((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__init__Zs  cCst|d|iƒSdS(Ns selectCols(sgetKeyssselfs distinct_key(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pyskeyscscCst|d|iƒSdS(Ns selectCols(s iter_keyssselfs distinct_key(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__iter__fsccsx|id|i|i|iƒf|fƒ\}}|ii ||ƒ|ii ƒ}x|D]}|i |ƒVq]WdS(Nsselect * from %s where %s=%%s(sselfs _format_querysnames_attrSQLs _distinct_keysidssqlsparamsscursorsexecutesfetchallslsrows itemClass(sselfsidslsparamsssqlsrow((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __getitem__is"cKs|ii|ƒdS(N(sselfsdatasupdateskwargs(sselfskwargs((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys addAttrAliasts( s__name__s __module__s__doc__sTupleOs itemClasss _distinct_keys__init__skeyss__iter__s __getitem__s addAttrAlias(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysSQLTableMultiNoCacheUs    sSQLEdgescBsZtZdZdZeiiƒZeieddƒƒd„Z e Z d„Z d„Z RS(shprovide iterator over edges as (source, target, edge) and getitem[edge] --> [(source,target),...]sedge_idsgraphic CsÍ|iid|idƒ|idƒ|idƒ|i|idƒ|idƒ|idƒfƒg}xZ|iiƒD]I\}}}|i |i i |ƒ|i i |ƒ|i i|ƒfƒqxW|SdS(NsWselect %s,%s,%s from %s where %s is not null order by %s,%ss source_ids target_idsedge_id(sselfscursorsexecutes_attrSQLsnameslsfetchalls source_ids target_idsedge_idsappendsgraphs unpack_sources unpack_targets unpack_edge(sselfs source_ids target_idslsedge_id((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pyskeyss b>cCst|iƒƒSdS(N(sitersselfskeys(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__iter__‘scCsÄ|id|idƒ|idƒ|i|i|iƒf|ii|ƒfƒ\}}|i i ||ƒg}xH|i i ƒD]7\}}|i|ii|ƒ|ii|ƒfƒqW|SdS(Ns!select %s,%s from %s where %s=%%ss source_ids target_id(sselfs _format_querys_attrSQLsnames _distinct_keysgraphs pack_edgesedgessqlsparamsscursorsexecuteslsfetchalls source_ids target_idsappends unpack_sources unpack_target(sselfsedges target_idslsparamsssqls source_id((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __getitem__”s: /( s__name__s __module__s__doc__s _distinct_keysSQLTableMultiNoCaches _pickleAttrsscopysupdatesdictskeyss__call__s__iter__s __getitem__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysSQLEdgesxs   s SQLEdgeDictcBs’tZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd „Zd„ZeZRS(s)2nd level graph interface to SQL databasecCs³||_||_t|idƒ o‰|iid|ii|ii|iif|ifƒ\}}|ii i ||ƒt |ii i ƒƒdjot dƒ‚q¯ndS(NsallowMissingNodessYselect %s from %s where %s=%%s limit 1isnode not in graph!(sfromNodesselfstableshasattrs _format_querys sourceSQLsnamessqlsparamsscursorsexecuteslensfetchallsKeyError(sselfsfromNodestablesparamsssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__init__¦s  +cCsè|iid|ii|ii|ii|iif|i|ii|ƒfƒ\}}|ii i ||ƒ|ii idƒ}t|ƒdjotdƒ‚ny|ii|ddƒSWntj otdƒ‚nXdS(Ns`select %s from %s where %s=%%s and %s=%%s limit 2iisNeither no edge from source to target or not unique!isno edge from node to target(sselfstables _format_querysedgeSQLsnames sourceSQLs targetSQLsfromNodes pack_targetstargetssqlsparamsscursorsexecutes fetchmanyslslensKeyErrors unpack_edges IndexError(sselfstargetslsparamsssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __getitem__´s4$cCs¶|iid|ii|i|ii|ƒ|ii|ƒfƒ\}}|ii i ||ƒt |idƒ p)t |idƒo|ii|iijo|i|7_ndS(NsSreplace into %s values (%%s,%%s,%%s)ssourceDBstargetDB(sselfstables _format_querysnamesfromNodes pack_targetstargets pack_edgesedgessqlsparamsscursorsexecuteshasattrssourceDBstargetDB(sselfstargetsedgesparamsssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __setitem__Çs 3@cCst||<|SdS(N(sNonesselfstarget(sselfstarget((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__iadd__Ôs cCs|iid|ii|ii|iif|i|ii|ƒfƒ\}}|ii i ||ƒ|ii i djotdƒ‚ndS(NsUdelete from %s where %s=%%s and %s=%%sisno edge from node to target(sselfstables _format_querysnames sourceSQLs targetSQLsfromNodes pack_targetstargetssqlsparamsscursorsexecutesrowcountsKeyError(sselfstargetsparamsssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __delitem__Øs +$cCs||iid|ii|ii|ii|ii|iif|ifƒ\}}|ii i ||ƒ|ii i ƒSdS(Nscselect %s,%s from %s where %s=%%s and %s is not null( sselfstables _format_querys targetSQLsedgeSQLsnames sourceSQLsfromNodessqlsparamsscursorsexecutesfetchall(sselfsparamsssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysiterator_queryäs=cCsAgi}|iƒD]"\}}||ii|ƒƒq~SdS(N(sappends_[1]sselfsiterator_querys target_idsedge_idstables unpack_target(sselfs_[1]s target_idsedge_id((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pyskeysðscCsAgi}|iƒD]"\}}||ii|ƒƒq~SdS(N(sappends_[1]sselfsiterator_querys target_idsedge_idstables unpack_edge(sselfs_[1]s target_idsedge_id((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysvaluesôscCsegi}|iƒD]F\}}||ii|iƒ|ii |ƒ|ii |ƒfƒq~SdS(N( sappends_[1]sselfsiterator_querys target_idsedge_idstables unpack_sourcesfromNodes unpack_targets unpack_edge(sselfs_[1]s target_idsedge_id((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysedgesøscCsSgi}|iƒD]4\}}||ii|ƒ|ii|ƒfƒq~SdS(N( sappends_[1]sselfsiterator_querys target_idsedge_idstables unpack_targets unpack_edge(sselfs_[1]s target_idsedge_id((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysitemsþscCst|iƒƒSdS(N(sitersselfskeys(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__iter__scCst|iƒƒSdS(N(sitersselfsvalues(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys itervaluesscCst|iƒƒSdS(N(sitersselfsitems(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys iteritems scCst|iƒƒSdS(N(slensselfskeys(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__len__ s(s__name__s __module__s__doc__s__init__s __getitem__s __setitem__s__iadd__s __delitem__siterator_queryskeyssvaluessedgessitemss__iter__s itervaluess iteritemss__len__s graph_cmps__cmp__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys SQLEdgeDict£s            sSQLEdgelessDictcBs tZdZd„Zd„ZRS(s,for SQLGraph tables that lack edge_id columncCs®|iid|ii|ii|ii|iif|i|ii|ƒfƒ\}}|ii i ||ƒ|ii i dƒ}t|ƒdjotdƒ‚ntSdS(Ns`select %s from %s where %s=%%s and %s=%%s limit 2iisNeither no edge from source to target or not unique!(sselfstables _format_querys targetSQLsnames sourceSQLsfromNodes pack_targetstargetssqlsparamsscursorsexecutes fetchmanyslslensKeyErrorsNone(sselfstargetslsparamsssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __getitem__s4$cCsž|iid|ii|ii|ii|iif|ifƒ\}}|ii i ||ƒgi }|ii i ƒD]}||dtfƒqy~SdS(Ns`select %s from %s where %s=%%s and %s is not nulli(sselfstables _format_querys targetSQLsnames sourceSQLsfromNodessqlsparamsscursorsexecutesappends_[1]sfetchallstsNone(sselfs_[1]sparamsstssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysiterator_query%s4(s__name__s __module__s__doc__s __getitem__siterator_query(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysSQLEdgelessDicts  sSQLGraphEdgeDescriptorcBstZdZd„ZRS(s'provide an SQLEdges interface on demandcCsey|iiƒ}Wn,tj o t|i|id|ƒSn!Xt|i|id|d|ƒSdS(Nsgraphs attrAlias(sobjs attrAliasscopysAttributeErrorsSQLEdgessnamescursor(sselfsobjsobjtypes attrAlias((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__get__7s (s__name__s __module__s__doc__s__get__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysSQLGraphEdgeDescriptor4s sintssourcestargetsedgec KsÔg} xÃ|D]»}y||d} Wntj o|d} nXy"| i| ||dfƒw Wnttfj onXy)||d}|t jo t‚nWntj onÞXt |ƒ}y|iƒ}WnMtj oAy$| i| |i|ifƒw Wqžtj oqžXnrXt|tƒp t|tƒo| i| dfƒq n7t|tƒo| i| dfƒq n tdƒ‚| i| |fƒtid| |fƒq W| SdS(sAreturn list of [(colname, coltype), ...] for source, target, edges_idsDBsints varchar(32)s&SQLGraph node/edge must be int or str!s/no type info found for %s, so using default: %sN(sls columnAttrssattrs attrAliassattrNamesKeyErrorsappends createTables TypeErrorskwargssdbsNonesitersitsnextsks StopIterations columnTypes primary_keysAttributeErrors isinstancesintslongsstrs ValueErrorsdefaultColumnTypesloggerswarn( s createTables attrAliassdefaultColumnTypes columnAttrsskwargssdbsitsattrskslsattrName((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysgetColumnTypesAsL     sSQLGraphc BsûtZdZdZeiiƒZeieddddddddƒƒe Z d„Z d„Z d „Z d „ZeZd „Zd „Zd „Zd„Zd„Zd„Zd„Zd„ZeƒZeZd„ZeZee ƒƒe!e ƒƒRS(s¡provide a graph interface via a SQL table. Key capabilities are: - setitem with an empty dictionary: a dummy operation - getitem with a key that exists: return a placeholder - setitem with non empty placeholder: again a dummy operation EXAMPLE TABLE SCHEMA: create table mygraph (source_id int not null,target_id int,edge_id int, unique(source_id,target_id)); s source_idssourceDBistargetDBsedgeDBsallowMissingNodesc Osot|ddddddddd d f ƒ\}}d |joyt|}d ||d d |d d|dd |dd|dd |dd|d d |dd f |d via , and store primary keys in idDict, along with a list of the tables each key indexes. suse %ss show tablesis.iýÿÿÿs_idN(scursorsexecutesnamestablessappends_[1]sfetchallscslststnamesSQLTablesos descriptionsfs primary_keysidDicts setdefault( snamescursorsidDictstablesscsfslsos_[1]stnamest((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysdescribeDBTables\s" 1  cCs¹|tjo h}nx—|iƒD]‰}|io9|i|jog||i dictionary.iýÿÿÿs_idN( sidDictsNonestablessvaluessos primary_keysappends descriptionsf(stablessidDictsosf((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysindexIDsqs     cCsIh}x8|iƒD]*\}}|i|ƒo|||ti|ƒy|iiƒ|`Wntj onXdS(N(s DBServerInfosclosesselfs_conn_sscursorsAttributeError(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pyscloseDs    cCs)gi}|D]}||dƒq~S(Ni(sappends_[1]sxst(sxs_[1]st((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysMsc Ks[t|||}y |i}Wntj onX|id|d|d|d|ƒSdS(Nscursorscache_fsmap_fsfetch_f( s BlockIteratorsdbscursorskwargssblock_iteratorscache_fsAttributeErrorsgeneric_iteratorsmap_f(sselfsdbscursorsmap_fscache_fskwargssblock_iterator((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys iter_keysLs ( s__name__s __module__s__doc__s _serverTypes_start_connectionsNones new_cursorsclosesiters iter_keys(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysMySQLServerInfo,s    s CursorClosercBs tZdZd„Zd„ZRS(söcontainer for ensuring cursor.close() is called, when this obj deleted. For Python 2.5+, we could replace this with a try... finally clause in a generator function such as generic_iterator(); see PEP 342 or What's New in Python 2.5. cCs ||_dS(N(scursorsself(sselfscursor((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__init__]scCs|iiƒdS(N(sselfscursorsclose(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__del__`s(s__name__s __module__s__doc__s__init__s__del__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys CursorCloserWs  s BlockIteratorcBs#tZdZdd„Zd„ZRS(s5workaround for MySQLdb iteration horrible performancesc  sg||_||_||_||_d|_|doó|i|_|djo8gi}|i D]} ||i | ƒqb~|_ qQt|i ƒ}y|i|ƒ‰Wn/tj o#t|i ƒ‰||g7}nXdi|ƒ|_tt|i ƒƒ|_ ˆdjo‡d†|_qQn'd|i|_|i |if|_ f|_t|_dS(NssorderBys*s,ics)gi}|D]}||ˆƒq~S(N(sappends_[1]sxstsi(sxs_[1]st(si(s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys{ss WHERE %s>%%s(sdbsselfscursors selectColsskwargss whereClausesiterSQLswhereSQLsappends_[1]s iterColumnsscolsdatas whereParamsslistsindexsis ValueErrorslensjoinsrangescache_fs primary_keysparamssFalsesdone( sselfsdbscursors selectColss whereClauseskwargss_[1]sis iterColumnsscol((sis3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__init__gs.        8  c Csû|iofSn|ii|i|id|idd|iid|i|i |ii ƒ}t |ƒ|iijot |_|Sn|d}t |ƒdjo5gi}|iD]}|||ƒqº~|_n ||_|i|_|SdS(sget the next block of datascursorslimitsLIMIT %ss selectColsiÿÿÿÿiN(sselfsdonesdbs_selects whereClausesparamsscursors arraysizes selectColsskwargssfetchallsrowsslensTrueslastrowsappends_[1]s whereParamssicolswhereSQL(sselfsrowss_[1]slastrowsicol((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__call__‚s    5  (s__name__s __module__s__doc__s__init__s__call__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys BlockIteratords  sSQLiteServerInfocBs/tZdZdZd„Zd„Zd„ZRS(s(picklable reference to a sqlite databasessqlitecOs&ti|ddt|ƒ||ŽdS(s)Takes same arguments as sqlite3.connect()ssqlite3sdatabaseN(s DBServerInfos__init__sselfsSourceFileNamesdatabasesargsskwargs(sselfsdatabasesargsskwargs((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__init__šs cCs%t|i|iŽ\|_|_dS(N(ssqlite_connectsselfsargsskwargss _connections_cursor(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys_start_connection scCsQ|iidtƒp |id}|djotdƒ‚nti|ƒSdS(Nsdatabaseis:memory:s+SQLite in-memory database is not picklable!( sselfskwargssgetsFalsesargssdatabases ValueErrors DBServerInfos __getstate__(sselfsdatabase((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __getstate__¤s# (s__name__s __module__s__doc__s _serverTypes__init__s_start_connections __getstate__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysSQLiteServerInfo–s   sMySQLdbsMapViewc Bs¡tZdZeeed„ZeZeZd„Ze ddddddddddƒZ e Z e ZeZZZZZZZd „Zd „Zd „ZRS( s4general purpose 1:1 mapping defined by any SQL querycKs°||_||_||_||_|tjo\|tj o|iƒ}qy |i}Wntj ot dƒ‚qX|iƒ}n||_||_|i t ƒdS(Ns&you must provide serverInfo or cursor!( ssourceDBsselfstargetDBsviewSQLs inverseSQLscursorsNones serverInfosAttributeErrors ValueErrorsget_sql_formatsFalse(sselfssourceDBstargetDBsviewSQLscursors serverInfos inverseSQLskwargs((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__init__²s         cCs¾t|dƒ p|i|ij otdƒ‚n|i|i|ifƒ\}}|i i ||ƒ|i i dƒ}t|ƒdjotdt|ƒƒ‚n|i|ddSdS(Nsdbs0object is not in the sourceDB bound to this map!iis&%s not found in MapView, or not uniquei(shasattrsksdbsselfssourceDBsKeyErrors _format_querysviewSQLsidssqlsparamsscursorsexecutes fetchmanystslensstrstargetDB(sselfsksparamsstssql((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __getitem__És$!ssourceDBistargetDBsviewSQLs serverInfos inverseSQLccsDx=|iiƒD],}y|||VWqtj oqXqWdS(s<only yield sourceDB items that are actually in this mapping!N(sselfssourceDBs itervaluessksKeyError(sselfsk((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__iter__ÛscCs)gi}|D]}||ƒq~SdS(N(sappends_[1]sselfsk(sselfs_[1]sk((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pyskeysäsc Cs‘y |iSWntj os|itjotdƒ‚n|i|i|i|i|i d|i d|i ƒ|_||i_|iSnXdS(Nsthis MapView has no inverseSQL!s serverInfos inverseSQL( sselfs_inversesAttributeErrors inverseSQLsNones ValueErrors __class__stargetDBssourceDBscursors serverInfosviewSQL(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys __invert__çs    (s__name__s __module__s__doc__sNones__init__s_schemaModuleDictsget_table_schemasget_sql_formats __getitem__sdicts _pickleAttrssstandard_getstates __getstate__sstandard_setstates __setstate__sread_only_errors __setitem__s __delitem__sclearspopspopitemsupdates setdefaults__iter__skeyss __invert__(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysMapView¯s    sGraphViewEdgeDictcBsntZdZd„Zd„Zd„Zd„Zd„Zed„Z d„Z e Z Z ZZZZZRS(s6edge dictionary for GraphView: just pre-loaded on initc Cs%||_||_|ii|ii|ifƒ\}}|iii ||ƒ|iii ƒ}t |ƒdjot d|iƒ‚ngi}|D]}||dƒq™~|_h}|iitj o'xC|D]}|d||dtZdZd„ZeeƒZd„Zd„Zd„ZRS(szTransparent access to a DB row representing a sequence. Use attrAlias dict to rename 'length' to something else. cKs ||_tid||dS(Nsdb(sdbs seqInfoDictsSQLRows_init_subclassskwargs(sclssdbskwargs((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys_init_subclassN s cCs!ti||ƒti|ƒdS(N(sSQLRows__init__sselfsids SequenceBase(sselfsid((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__init__S scCs |iSdS(N(sselfslength(sself((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys__len__W scCs2|id|iidƒ|d||fƒSdS(s@Efficient access to slice of a sequence, useful for huge contigssU%%(SUBSTRING)s(%s %%(SUBSTR_FROM)s %d %%(SUBSTR_FOR)s %d)sseqiN(sselfs_selectsdbs_attrSQLsstartsend(sselfsstartsend((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysstrsliceZ s(s__name__s __module__s__doc__s_init_subclasss classmethods__init__s__len__sstrslice(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys SQLSequenceH s     sDNASQLSequencecBstZeZRS(N(s__name__s __module__s DNA_SEQTYPEs_seqtype(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysDNASQLSequencea ssRNASQLSequencecBstZeZRS(N(s__name__s __module__s RNA_SEQTYPEs_seqtype(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysRNASQLSequencee ssProteinSQLSequencecBstZeZRS(N(s__name__s __module__sPROTEIN_SEQTYPEs_seqtype(((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pysProteinSQLSequencei s(vs __future__s generatorssmappingssequences SequenceBases DNA_SEQTYPEs RNA_SEQTYPEsPROTEIN_SEQTYPEstypess classutils methodFactorysstandard_getstatesoverride_rich_cmpsgenerate_itemssget_bound_subclasssstandard_setstatesget_valid_pathsstandard_invertsRecentValueDictionarysread_only_errorsSourceFileNames split_kwargssossplatformsUserDictswarningssloggersobjectsTupleDescriptorsTupleIDDescriptorsTupleDescriptorRWs SQLDescriptorsSQLDescriptorRWsReadOnlyDescriptorsselect_from_rowsinit_row_subclasssdir_rowsTupleOsinsert_and_cache_idsTupleORWs_RWClasssColumnDescriptorsReadOnlyColumnDescs_readOnlyClasssSQLRowsSQLRowRWs list_to_dictsNonesget_name_cursorsFalses mysql_connectsdicts _mysqlMacrossTruesmysql_table_schemas _sqliteMacross import_sqlitessqlite_table_schemas SQLFormatDictsget_table_schemas_schemaModuleDicts DictMixins SQLTableBasesgetKeyssiters iter_keyssSQLTablesgetClusterKeyssSQLTableClusteredsSQLForeignRelationsSQLTableNoCaches _tableclasssSQLTableMultiNoCachesSQLEdgess SQLEdgeDictsSQLEdgelessDicts_edgelessClasssSQLGraphEdgeDescriptorsgetColumnTypessSQLGraphs SQLIDGraphs _IDGraphClasssSQLEdgeDictClusteredsSQLEdgesClusteredDescrsSQLGraphClusteredsSQLIDGraphClusteredsSQLEdgesClusteredsForeignKeyInversesForeignKeyEdgesForeignKeyGraphsdescribeDBTablessindexIDss suffixSubsets PRIMARY_KEYs graphDBTabless StringTypesIntTypes FloatTypesSQLTypeTranslationscreateTableFromReprscreateTableFromRowsstoreRowsstoreRowDelayeds TableGroupssqlite_connects DBServerInfosMySQLServerInfos CursorClosers BlockIteratorsSQLiteServerInfos_DBServerModuleDictsMapViewsGraphViewEdgeDicts GraphViews SQLSequencesDNASQLSequencesRNASQLSequencesProteinSQLSequence(csProteinSQLSequences iter_keysscreateTableFromReprsMapViewsdir_rowsTupleORWsTupleDescriptorsForeignKeyInversesMySQLServerInfosplatforms_DBServerModuleDicts generatorss mysql_connectsSQLEdgesClusteredsgetClusterKeyssgetColumnTypess suffixSubsetsSQLTableClustereds DBServerInfosForeignKeyEdgesPROTEIN_SEQTYPEsSQLIDGraphClustereds_schemaModuleDictsstandard_getstatesReadOnlyColumnDescsRNASQLSequences SQLFormatDictsstandard_invertsgetKeyssForeignKeyGraphs CursorClosers import_sqlitesSQLEdgess TableGroupsSQLTableMultiNoCachesSQLTablesSQLForeignRelationsReadOnlyDescriptors RNA_SEQTYPEsTupleDescriptorRWsgenerate_itemssSQLTypeTranslationsUserDicts methodFactorysstandard_setstatesSQLEdgelessDictsinit_row_subclasssread_only_errors list_to_dictsColumnDescriptorsSQLEdgesClusteredDescrsselect_from_rowsGraphViewEdgeDictsSQLRowRWs BlockIterators SQLTableBasesossSQLRowsTupleIDDescriptorsstoreRowsSQLDescriptorRWssqlite_table_schemas DNA_SEQTYPEs PRIMARY_KEYs SQLIDGraphs split_kwargss SQLDescriptors _sqliteMacross graphDBTablessmysql_table_schemas _mysqlMacrossSourceFileNamesloggersdescribeDBTablessget_valid_pathsstoreRowDelayedsSQLGraphClusteredsSQLEdgeDictClusteredsindexIDssSQLGraphEdgeDescriptorsSQLiteServerInfosRecentValueDictionaryscreateTableFromRowsinsert_and_cache_idsSQLTableNoCachesTupleOssqlite_connects GraphViewswarningssget_name_cursorsDNASQLSequencesoverride_rich_cmps SQLSequencesget_table_schemasSQLGraphs SQLEdgeDictstypess SequenceBasesget_bound_subclass((s3build/bdist.darwin-8.11.1-i386/egg/pygr/sqlgraph.pys?sÄ  O            (   -    .4 !ÿl O *5 #+o  .   { D 7    *   3+ 2  FAPKd—~;öý‡¬pygr/translationDB.pyfrom seqdb import SequenceDB, BasicSeqInfoDict from annotation import AnnotationDB, TranslationAnnot, TranslationAnnotSlice import classutil import sequence import UserDict class SeqTranslator(sequence.SequenceBase): """Translator object for positive or minus strand of a sequence. Slicing returns TranslationAnnotSlice of the appropriate TranslationAnnot representing one of the six possible frames for this sequence.""" def __init__(self, db, id, reversePath=None): self.id = id sequence.SequenceBase.__init__(self) if reversePath: # create top-level object for reverse strand self.orientation = -1 self.start = -len(self) self.stop = 0 self._reverse = reversePath if self.id not in self.db.seqDB: raise KeyError('sequence %s not in db %s' % (self.id, self.db)) def __getitem__(self, k): """get TranslationAnnotSlice for coordinates given by slice k """ start = k.start # deal with [:stop] slices if start is None: start = self.start stop = k.stop # deal with [start:] slices if stop is None: stop = self.stop annoID = self._get_anno_id(start) a = self.db.annodb[annoID] # get TranslationAnnot object s = a.sequence # corresponding nucleotide region return a[(start - s.start) / 3: (stop - s.start) / 3] def absolute_slice(self, start, stop): """get protein slice in absolute nucleotide coords; perform negation before slicing """ if start<0: return (-self)[start:stop] else: return self[start:stop] def __len__(self): return self.db.seqInfoDict[self.id].length def __neg__(self): """get SeqTranslator for the opposite strand """ try: return self._reverse except AttributeError: self._reverse = self.__class__(self.db, self.id, reversePath=self) return self._reverse def _get_anno_id(self, start): """get annotation ID for frame starting at start """ if self.orientation > 0: # positive strand return '%s:%d' % (self.id, start % 3) else: # negative strand return '%s:-%d' % (self.id, (-start) % 3) def iter_frames(self): 'iterate over the 6 possible frames, yielding TranslationAnnot' for frame in ('0', '1', '2', '-0', '-1', '-2'): yield self.db.annodb['%s:%s' % (self.id, frame)] def __repr__(self): return 'SeqTranslator(' + sequence.SequenceBase.__repr__(self) + ')' class TranslationDB(SequenceDB): """Provides an automatic translation interface for a nucleotide sequence database: slicing of top-level sequence objects will return the corresponding TranslationAnnotSlice for that slice, i.e. the translated protein sequence, rather than the nucleotide sequence. """ itemClass = SeqTranslator _seqtype = sequence.DNA_SEQTYPE def __init__(self, seqDB, **kwargs): self.seqDB = seqDB try: self.seqInfoDict = seqDB.seqInfoDict except AttributeError: self.seqInfoDict = BasicSeqInfoDict(seqDB) self.annodb = AnnotationDB(SixFrameInfo(seqDB), seqDB, itemClass=TranslationAnnot, itemSliceClass=TranslationAnnotSlice, sliceAttrDict=dict(id=0, start=1, stop=2), checkFirstID=False) SequenceDB.__init__(self, **kwargs) class SixFrameInfo(object, UserDict.DictMixin): """Dictionary of slice info for all six frames of each seq in seqDB. """ def __init__(self, seqDB): self.seqDB = seqDB def __getitem__(self, k): "convert ID of form seqID:frame into slice info tuple" i = k.rfind(':') if i < 0: raise KeyError('invalid TranslationInfo key: %s' % (k, )) seqID = k[:i] length = len(self.seqDB[seqID]) # sequence length frame = int(k[i+1:]) if k[i+1] == '-': # negative frame -0, -1, or -2 return (seqID, -(length - ((length + frame) % 3)), frame) else: # positive frame 0, 1 or 2 return (seqID, frame, length - ((length - frame) % 3)) def __len__(self): return 6 * len(self.seqDB) def __iter__(self): for seqID in self.seqDB: for frame in (':0', ':1', ':2', ':-0', ':-1', ':-2'): yield seqID + frame def keys(self): return list(self) # these methods should not be implemented for read-only database. clear = setdefault = pop = popitem = copy = update = \ classutil.read_only_error def get_translation_db(seqDB): """Use cached seqDB.translationDB if already present, or create it """ try: return seqDB.translationDB except AttributeError: # create a new TranslationAnnot DB tdb = TranslationDB(seqDB) try: seqDB.translationDB = tdb except AttributeError: pass # won't let us cache? Just hand back the TranslationDB return tdb PK7“;ê­  pygr/translationDB.pyc;ò |†Kc@sŸdklZlZdklZlZlZdkZdkZdk Z dei fd„ƒYZ defd„ƒYZ de e ifd„ƒYZd „ZdS( (s SequenceDBsBasicSeqInfoDict(s AnnotationDBsTranslationAnnotsTranslationAnnotSliceNs SeqTranslatorcBsYtZdZed„Zd„Zd„Zd„Zd„Zd„Z d„Z d„Z RS( sÒTranslator object for positive or minus strand of a sequence. Slicing returns TranslationAnnotSlice of the appropriate TranslationAnnot representing one of the six possible frames for this sequence.cCs‰||_tii|ƒ|o/d|_t|ƒ |_d|_ ||_ n|i|i i jo t d|i|i fƒ‚ndS(Niÿÿÿÿissequence %s not in db %s(sidsselfssequences SequenceBases__init__s reversePaths orientationslensstartsstops_reversesdbsseqDBsKeyError(sselfsdbsids reversePath((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys__init__s    cCs“|i}|tjo |i}n|i}|tjo |i}n|i|ƒ}|ii|}|i }|||id||id!SdS(s;get TranslationAnnotSlice for coordinates given by slice k iN( sksstartsNonesselfsstops _get_anno_idsannoIDsdbsannodbsassequencess(sselfsksasstopsannoIDsstartss((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys __getitem__s       cCs,|djo| ||!Sn |||!SdS(sYget protein slice in absolute nucleotide coords; perform negation before slicing iN(sstartsselfsstop(sselfsstartsstop((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pysabsolute_slice(s cCs|ii|iiSdS(N(sselfsdbs seqInfoDictsidslength(sself((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys__len__0scCsMy |iSWn;tj o/|i|i|id|ƒ|_|iSnXdS(s*get SeqTranslator for the opposite strand s reversePathN(sselfs_reversesAttributeErrors __class__sdbsid(sself((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys__neg__3s cCsC|idjod|i|dfSnd|i| dfSdS(s.get annotation ID for frame starting at start is%s:%dis%s:-%dN(sselfs orientationsidsstart(sselfsstart((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys _get_anno_id<sccsBx;ddddddfD]!}|iid|i|fVqWdS( s=iterate over the 6 possible frames, yielding TranslationAnnots0s1s2s-0s-1s-2s%s:%sN(sframesselfsdbsannodbsid(sselfsframe((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys iter_framesCscCsdtii|ƒdSdS(NsSeqTranslator(s)(ssequences SequenceBases__repr__sself(sself((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys__repr__Hs( s__name__s __module__s__doc__sNones__init__s __getitem__sabsolute_slices__len__s__neg__s _get_anno_ids iter_framess__repr__(((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys SeqTranslators      s TranslationDBcBs&tZdZeZeiZd„ZRS(sProvides an automatic translation interface for a nucleotide sequence database: slicing of top-level sequence objects will return the corresponding TranslationAnnotSlice for that slice, i.e. the translated protein sequence, rather than the nucleotide sequence. cKs—||_y|i|_Wn"tj ot|ƒ|_nXtt|ƒ|dtdtdt dddddd ƒd t ƒ|_ t i ||dS( Ns itemClasssitemSliceClasss sliceAttrDictsidisstartisstopis checkFirstID(sseqDBsselfs seqInfoDictsAttributeErrorsBasicSeqInfoDicts AnnotationDBs SixFrameInfosTranslationAnnotsTranslationAnnotSlicesdictsFalsesannodbs SequenceDBs__init__skwargs(sselfsseqDBskwargs((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys__init__Ts ( s__name__s __module__s__doc__s SeqTranslators itemClassssequences DNA_SEQTYPEs_seqtypes__init__(((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys TranslationDBLs  s SixFrameInfocBsXtZdZd„Zd„Zd„Zd„Zd„Zei Z Z Z Z ZZRS(sBDictionary of slice info for all six frames of each seq in seqDB. cCs ||_dS(N(sseqDBsself(sselfsseqDB((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys__init__escCs´|idƒ}|djotd|fƒ‚n|| }t|i|ƒ}t ||dƒ}||ddjo||||d |fSn|||||dfSdS(s4convert ID of form seqID:frame into slice info tuples:isinvalid TranslationInfo key: %sis-iN( sksrfindsisKeyErrorsseqIDslensselfsseqDBslengthsintsframe(sselfsksislengthsseqIDsframe((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys __getitem__hs  cCsdt|iƒSdS(Ni(slensselfsseqDB(sself((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys__len__usccsCx<|iD]1}x(ddddddfD]}||Vq)Wq WdS(Ns:0s:1s:2s:-0s:-1s:-2(sselfsseqDBsseqIDsframe(sselfsseqIDsframe((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys__iter__xs  cCst|ƒSdS(N(slistsself(sself((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pyskeys}s(s__name__s __module__s__doc__s__init__s __getitem__s__len__s__iter__skeyss classutilsread_only_errorsclears setdefaultspopspopitemscopysupdate(((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys SixFrameInfobs     cCsXy |iSWnFtj o:t|ƒ}y ||_Wntj onX|SnXdS(s@Use cached seqDB.translationDB if already present, or create it N(sseqDBs translationDBsAttributeErrors TranslationDBstdb(sseqDBstdb((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pysget_translation_db…s   (sseqdbs SequenceDBsBasicSeqInfoDicts annotations AnnotationDBsTranslationAnnotsTranslationAnnotSlices classutilssequencesUserDicts SequenceBases SeqTranslators TranslationDBsobjects DictMixins SixFrameInfosget_translation_db( sTranslationAnnotssequencesUserDicts TranslationDBs SixFrameInfos AnnotationDBs SeqTranslators SequenceDBsget_translation_dbsTranslationAnnotSlicesBasicSeqInfoDicts classutil((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys?s   D#PK7“;ê­  pygr/translationDB.pyo;ò |†Kc@sŸdklZlZdklZlZlZdkZdkZdk Z dei fd„ƒYZ defd„ƒYZ de e ifd„ƒYZd „ZdS( (s SequenceDBsBasicSeqInfoDict(s AnnotationDBsTranslationAnnotsTranslationAnnotSliceNs SeqTranslatorcBsYtZdZed„Zd„Zd„Zd„Zd„Zd„Z d„Z d„Z RS( sÒTranslator object for positive or minus strand of a sequence. Slicing returns TranslationAnnotSlice of the appropriate TranslationAnnot representing one of the six possible frames for this sequence.cCs‰||_tii|ƒ|o/d|_t|ƒ |_d|_ ||_ n|i|i i jo t d|i|i fƒ‚ndS(Niÿÿÿÿissequence %s not in db %s(sidsselfssequences SequenceBases__init__s reversePaths orientationslensstartsstops_reversesdbsseqDBsKeyError(sselfsdbsids reversePath((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys__init__s    cCs“|i}|tjo |i}n|i}|tjo |i}n|i|ƒ}|ii|}|i }|||id||id!SdS(s;get TranslationAnnotSlice for coordinates given by slice k iN( sksstartsNonesselfsstops _get_anno_idsannoIDsdbsannodbsassequencess(sselfsksasstopsannoIDsstartss((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys __getitem__s       cCs,|djo| ||!Sn |||!SdS(sYget protein slice in absolute nucleotide coords; perform negation before slicing iN(sstartsselfsstop(sselfsstartsstop((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pysabsolute_slice(s cCs|ii|iiSdS(N(sselfsdbs seqInfoDictsidslength(sself((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys__len__0scCsMy |iSWn;tj o/|i|i|id|ƒ|_|iSnXdS(s*get SeqTranslator for the opposite strand s reversePathN(sselfs_reversesAttributeErrors __class__sdbsid(sself((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys__neg__3s cCsC|idjod|i|dfSnd|i| dfSdS(s.get annotation ID for frame starting at start is%s:%dis%s:-%dN(sselfs orientationsidsstart(sselfsstart((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys _get_anno_id<sccsBx;ddddddfD]!}|iid|i|fVqWdS( s=iterate over the 6 possible frames, yielding TranslationAnnots0s1s2s-0s-1s-2s%s:%sN(sframesselfsdbsannodbsid(sselfsframe((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys iter_framesCscCsdtii|ƒdSdS(NsSeqTranslator(s)(ssequences SequenceBases__repr__sself(sself((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys__repr__Hs( s__name__s __module__s__doc__sNones__init__s __getitem__sabsolute_slices__len__s__neg__s _get_anno_ids iter_framess__repr__(((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys SeqTranslators      s TranslationDBcBs&tZdZeZeiZd„ZRS(sProvides an automatic translation interface for a nucleotide sequence database: slicing of top-level sequence objects will return the corresponding TranslationAnnotSlice for that slice, i.e. the translated protein sequence, rather than the nucleotide sequence. cKs—||_y|i|_Wn"tj ot|ƒ|_nXtt|ƒ|dtdtdt dddddd ƒd t ƒ|_ t i ||dS( Ns itemClasssitemSliceClasss sliceAttrDictsidisstartisstopis checkFirstID(sseqDBsselfs seqInfoDictsAttributeErrorsBasicSeqInfoDicts AnnotationDBs SixFrameInfosTranslationAnnotsTranslationAnnotSlicesdictsFalsesannodbs SequenceDBs__init__skwargs(sselfsseqDBskwargs((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys__init__Ts ( s__name__s __module__s__doc__s SeqTranslators itemClassssequences DNA_SEQTYPEs_seqtypes__init__(((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys TranslationDBLs  s SixFrameInfocBsXtZdZd„Zd„Zd„Zd„Zd„Zei Z Z Z Z ZZRS(sBDictionary of slice info for all six frames of each seq in seqDB. cCs ||_dS(N(sseqDBsself(sselfsseqDB((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys__init__escCs´|idƒ}|djotd|fƒ‚n|| }t|i|ƒ}t ||dƒ}||ddjo||||d |fSn|||||dfSdS(s4convert ID of form seqID:frame into slice info tuples:isinvalid TranslationInfo key: %sis-iN( sksrfindsisKeyErrorsseqIDslensselfsseqDBslengthsintsframe(sselfsksislengthsseqIDsframe((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys __getitem__hs  cCsdt|iƒSdS(Ni(slensselfsseqDB(sself((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys__len__usccsCx<|iD]1}x(ddddddfD]}||Vq)Wq WdS(Ns:0s:1s:2s:-0s:-1s:-2(sselfsseqDBsseqIDsframe(sselfsseqIDsframe((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys__iter__xs  cCst|ƒSdS(N(slistsself(sself((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pyskeys}s(s__name__s __module__s__doc__s__init__s __getitem__s__len__s__iter__skeyss classutilsread_only_errorsclears setdefaultspopspopitemscopysupdate(((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys SixFrameInfobs     cCsXy |iSWnFtj o:t|ƒ}y ||_Wntj onX|SnXdS(s@Use cached seqDB.translationDB if already present, or create it N(sseqDBs translationDBsAttributeErrors TranslationDBstdb(sseqDBstdb((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pysget_translation_db…s   (sseqdbs SequenceDBsBasicSeqInfoDicts annotations AnnotationDBsTranslationAnnotsTranslationAnnotSlices classutilssequencesUserDicts SequenceBases SeqTranslators TranslationDBsobjects DictMixins SixFrameInfosget_translation_db( sTranslationAnnotssequencesUserDicts TranslationDBs SixFrameInfos AnnotationDBs SeqTranslators SequenceDBsget_translation_dbsTranslationAnnotSlicesBasicSeqInfoDicts classutil((s8build/bdist.darwin-8.11.1-i386/egg/pygr/translationDB.pys?s   D#PKd—~;eGãÈ È pygr/xnestedlist.pyimport cnestedlist from nlmsa_utils import EmptySliceError, EmptySlice import sequence class NLMSAServer(cnestedlist.NLMSA): 'serves NLMSA via serializable method calls for XMLRPC' xmlrpc_methods = {'getSlice': 0, 'getInfo': 0} def getSlice(self, seqID, start, stop): 'perform an interval query and return results as raw ivals' try: seq = self.seqDict[seqID] nlmsa_id, ns, offset = self.seqs[seq] # GET UNION INFO FOR THIS SEQ except KeyError: return '' # failure code ival = sequence.absoluteSlice(seq, start, stop) # GET THE INTERVAL try: myslice = self[ival] # DO THE QUERY except EmptySliceError: return 'EMPTY' except KeyError: return '' # FAILURE CODE ivals = myslice.rawIvals() # GET RAW INTERVAL DATA d = {} # Save index info for source seq. d[nlmsa_id] = self.seqs.IDdict[str(nlmsa_id)] for v in ivals: # SAVE INDEX INFO FOR TARGET SEQS id = v[2] # target_id NLMSA_ID if not self.seqlist.is_lpo(id): # Only non-LPO seqs stored in this index. d[id] = self.seqs.IDdict[str(id)] # XMLRPC can't handle int dictionaries, use a list. l = [(key, val) for key, val in d.items()] # List of aligned ivals, list of (nlmsa_id, (seqID, nsID)). return nlmsa_id, ivals, l def getInfo(self): 'return list of tuples describing NLMSASequences in this NLMSA' l = [] for ns in self.seqlist: l.append((ns.id, ns.is_lpo, ns.length, ns.is_union)) return l class NLMSAClient(cnestedlist.NLMSA): 'client for accessing NLMSAServer via XMLRPC' def __init__(self, url=None, name=None, idDictClass=dict, **kwargs): cnestedlist.NLMSA.__init__(self, mode='xmlrpc', idDictClass=idDictClass, **kwargs) import coordinator self.server = coordinator.get_connection(url, name) self.url = url self.name = name l = self.server.getInfo() # READ NS INFO TABLE for nsID, is_lpo, nsLength, is_union in l: # is_lpo is automatic below. ns = cnestedlist.NLMSASequence(self, None, None, 'onDemand', is_union, nsLength) self.addToSeqlist(ns) # ADD THIS TO THE INDEX def close(self): pass # required interface, but nothing to do def doSlice(self, seq): '''getSlice from the server, and create an NLMSASlice object from results''' result = self.server.getSlice(self.seqs.getSeqID(seq), seq.start, seq.stop) if result == '': raise KeyError('this interval is not aligned!') elif result == 'EMPTY': raise EmptySliceError id, l, d = result for nlmsaID, (seqID, nsID) in d: # SAVE SEQ INFO TO INDEX self.seqs.saveSeq(seqID, nsID, 0, nlmsaID) return id, l # HAND BACK THE RAW INTEGER INTERVAL DATA def __getitem__(self, k): 'directly call slice without any ID lookup -- will be done server-side' try: return cnestedlist.NLMSASlice(self.seqlist[0], k.start, k.stop, -1, -1, k) except EmptySliceError: return EmptySlice(k) def __getstate__(self): return dict(url=self.url, name=self.name, seqDict=self.seqDict) PK7“;ÕŠ ¾¾pygr/xnestedlist.pyc;ò |†Kc@s[dkZdklZlZdkZdeifd„ƒYZdeifd„ƒYZdS(N(sEmptySliceErrors EmptySlices NLMSAServercBs8tZdZhdd<dd*ss Bio.MSA.UCSC.c sÛ|tjo d„}n|tjo‡d†}ndkl}dkl} t||||| ƒ}xC|i ƒD]5\}} || ƒ} ||ƒ| _| ||d 0scs ˆ|d S(Niýÿÿÿ(s resourceStemsx(sx(s resourceStem(sAbuild/bdist.darwin-8.11.1-i386/egg/pygr/apps/catalog_downloads.pys2s(s NLMSABuilder(s SourceURLiüÿÿÿ(s worldbaseN(sfileDocumentersNones fileNamerspygr.nlmsa_utilss NLMSABuilderspygr.downloaders SourceURLscatalog_downloadssurls fileFiltersdsitemssresIDsosnlmsas__doc__spygrs worldbases add_resourcescommit( surls fileFilters resourceStemsfileDocumenters fileNamersresIDsds worldbases NLMSABuilders SourceURLsosnlmsa((s resourceStemsAbuild/bdist.darwin-8.11.1-i386/egg/pygr/apps/catalog_downloads.pyssave_NLMSA_downloaders*s$            N(scatalog_downloadssNonessave_NLMSA_downloaders(scatalog_downloadsssave_NLMSA_downloaders((sAbuild/bdist.darwin-8.11.1-i386/egg/pygr/apps/catalog_downloads.pys?s 'PK7“;€HzÞs s pygr/apps/catalog_downloads.pyo;ò ÍÊKc@s%d„Zd„deed„ZdS(cCsódk} dk} dk} | i|ƒ}z5| i| iƒƒ} | i |i ƒƒ| i }Wd|i ƒXh}|ddjo|d7}nxV|D]N} || ƒo;|| i|| ƒƒ}|| ƒ|_|||| ƒ*ss Bio.MSA.UCSC.c sÛ|tjo d„}n|tjo‡d†}ndkl}dkl} t||||| ƒ}xC|i ƒD]5\}} || ƒ} ||ƒ| _| ||d 0scs ˆ|d S(Niýÿÿÿ(s resourceStemsx(sx(s resourceStem(sAbuild/bdist.darwin-8.11.1-i386/egg/pygr/apps/catalog_downloads.pys2s(s NLMSABuilder(s SourceURLiüÿÿÿ(s worldbaseN(sfileDocumentersNones fileNamerspygr.nlmsa_utilss NLMSABuilderspygr.downloaders SourceURLscatalog_downloadssurls fileFiltersdsitemssresIDsosnlmsas__doc__spygrs worldbases add_resourcescommit( surls fileFilters resourceStemsfileDocumenters fileNamersresIDsds worldbases NLMSABuilders SourceURLsosnlmsa((s resourceStemsAbuild/bdist.darwin-8.11.1-i386/egg/pygr/apps/catalog_downloads.pyssave_NLMSA_downloaders*s$            N(scatalog_downloadssNonessave_NLMSA_downloaders(scatalog_downloadsssave_NLMSA_downloaders((sAbuild/bdist.darwin-8.11.1-i386/egg/pygr/apps/catalog_downloads.pys?s 'PKd—~;UÑ Ñ pygr/apps/leelabdb.pyimport MySQLdb import os from splicegraph import * spliceCalcs={'HUMAN_SPLICE_03': TableGroup(db='HUMAN_SPLICE_03', suffix='JUN03', clusters='cluster_JUN03', exons='exon_formJUN03', splices='splice_verification_JUN03', genomic='genomic_cluster_JUN03', mrna='mrna_seqJUN03', protein='protein_seqJUN03'), 'HUMAN_SPLICE': TableGroup(db='HUMAN_SPLICE', suffix='jan02', clusters='cluster_jan02', exons='HUMAN_ISOFORMS.exon_form_4', splices='splice_verification_jan02', genomic='genomic_cluster_jan02', mrna='HUMAN_ISOFORMS.mrna_seq_4', protein='HUMAN_ISOFORMS.protein_seq_4'), 'MOUSE_SPLICE': TableGroup(db='MOUSE_SPLICE', suffix='jan02', clusters='cluster_jan02', exons='MOUSE_ISOFORMS.exon_form_2', splices='splice_verification_jan02', genomic='genomic_cluster_jan02', mrna='MOUSE_ISOFORMS.mrna_seq_2', protein='MOUSE_ISOFORMS.protein_seq_2'), 'MOUSE_SPLICE_03': TableGroup(db='MOUSE_SPLICE_03', suffix='JUN03', clusters='cluster_JUN03', exons='exon_formJUN03', splices='splice_verification_JUN03', genomic='genomic_cluster_JUN03', mrna='mrna_seqJUN03', protein='protein_seqJUN03')} def getUserCursor(db): 'get a cursor as the current user' db = MySQLdb.connect(db=db, read_default_file=os.environ['HOME'] + '/.my.cnf', compress=True) return db.cursor() def getSpliceGraphFromDB(dbgroup, loadAll=False): """load data from MySQL using the designated database table group. If loadAll true, then load the entire splice graph into memory.""" cursor = getUserCursor(dbgroup.db) import sys print >>sys.stderr, 'Reading database schema...' idDict = {} tables = describeDBTables(dbgroup.db, cursor, idDict) if hasattr(dbgroup, 'suffix'): # Get a set of tables ending in specified suffix # and create an index of their primary keys tables = suffixSubset(tables, dbgroup.suffix) idDict = indexIDs(tables) for t in dbgroup.values(): # This table comes from another database... if t is not None and '.' in t and t not in tables: tables[t]=SQLTable(t, cursor) # ...so get it from there # LOAD DATA & BUILD THE SPLICE GRAPH return loadSpliceGraph(tables, dbgroup.clusters, dbgroup.exons, dbgroup.splices, dbgroup.genomic, dbgroup.mrna, dbgroup.protein, loadAll) def localCopy(localFile, cpCommand): 'if not already present on local file location, run cpCommand' if not os.access(localFile, os.R_OK): cmd=cpCommand % localFile print 'copying data:', cmd exit_code=os.system(cmd) if exit_code!=0: raise OSError((exit_code, 'command failed: %s' % cmd)) return localFile PK7“;q~ ½i i pygr/apps/leelabdb.pyc;ò |†Kc@s1dkZdkZdkThdedddddddd d d d d ddddƒ<deddddddddd dd dddddƒ<deddddddddd dd dddddƒ<dedddddddd d d d d ddddƒ 0: if (rev): align[-(lpoStart + len(ival)):-lpoStart] = \ seq[seqStart:seqStart + len(ival)] else: align[lpoStart:lpoStart + len(ival)] = \ seq[seqStart:seqStart + len(ival)] seqStart += len(ival) lpoStart += len(ival) + 1 s = fh.readline().split() maf2nclist(['chrX.maf', ], 'testdb/chrX') PK7“;}ݹ¬¬pygr/apps/maf2nclist.pyc;ò |†Kc@s4dkTdkTd„Zd„ZedgdƒdS((s*cCsöt|dƒ}h}xÌ|D]Ä}t|dƒ}|iƒi ƒddjod|‚n|iƒ}xu|om|i ƒ}t |ƒdjp|ddjon*|ddjot |||ƒndS|iƒ}qkWqW|iƒ|SdS(Nswsris##mafs(Error processing %s: Invalid file formats#sa(s NLMSALetterssstemsalignsseqssmaffilessisopensfsreadlinessplitslslaslensstoreMAFrecordsbuild(smaffilessstemsfsisalignslaslsseqs((s:build/bdist.darwin-8.11.1-i386/egg/pygr/apps/maf2nclist.pys maf2nclists&  $ c Cs‹|iƒiƒ}|idi}xbt|ƒdjo|ddjo=|}t |dƒ}y||d}Wn%t|dƒ}|||d 0: uid += string.letters[cum % alen] cum /= alen uid += string.letters[cum % alen] self._vid += 1 return AnonSequence(slen, uid) def _dump(self, alignTab, sequenceTab=None): for row in self.mAlign.repr_dict(): alignTab.write('\t'.join(map(lambda x: str(x), row.values())) + '\n') if(sequenceTab): for s in self.sequences.values(): for inter in s.known_int(): sequenceTab.write('\t'.join(map(lambda x: str(x), inter.values())) + '\n') del self.mAlign del self.sequences self.mAlign = PathMapping() self.sequences = {} def parseIntoDB(self, filehandle, cursor, alignTab, sequenceTab=None, update=None): """parses the .maf filehandle into database using cursors""" c = filehandle.tell() filehandle.seek(0, 2) filesize = filehandle.tell() filehandle.seek(c) l = filehandle.readline() rc = 0 count = 0 if l.split()[0] != '##maf': return else: self.setpar(l.split()[1:]) l=filehandle.readline() while l: la = l.split() ## print la if(len(la)==0 or la[0]=='#'): ## print "skipping" 1 elif(la[0]=='a'): ## print "reading alignment" count+=1 self.readalign(la[1:], filehandle) self._dump(alignTab, sequenceTab) if(update and not count % 1000): cursor.execute(update % (int(filehandle.tell() * 100. / filesize))) else: ## print "end of records" return l=filehandle.readline() PK7“;p)Ϫëëpygr/apps/maf2VSgraph.pyc;ò |†Kc@sMdklZdkTdkTdkZd„Zd„Zdfd„ƒYZdS((s generators(s*Nccsád}d}d}xvtt|ƒƒD]b}||djoK||jo&|||||||||!fVn|d}|d7}q%q%W|djodSn|d}||jo&|||||||||!fVndS(Nis-i(sbeginsgapssendsrangeslenss(sssbeginsendsgaps((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/maf2VSgraph.pys refIntervalss &    cCs½hdd<dd<dd<dd<dd<dd<dd<d d <d d <dd<d d<d d <}d igi}|ddd…D]}||i||ƒƒq“~ƒSdS(NsastscsgsusnsAsTsCsGsUsNsiÿÿÿÿ(scomplsjoinsappends_[1]ssscsget(sss_[1]scscompl((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/maf2VSgraph.pysreverse_complementsrs MafParsercBs_tZdZhZdd„Zd„Zd„Zd„Zd„Ze d„Z e e d„Z RS( sð Parses .maf files as defined by the Haussler dataset. The results of parsing are available as pathmapping between the sequences in the alignment. The sequences themselves are assumed unknown and use AnonSequence class. scCs+tƒ|_h|_||_d|_dS(Ni(s PathMappingsselfsmAligns sequencessvbases_vid(sselfsvbase((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/maf2VSgraph.pys__init__(s   cCs7x0|D](}|idƒ\}}||i|ss (sselfsmAligns repr_dictsrowsalignTabswritesjoinsmapsvaluess sequenceTabs sequencessss known_intsinters PathMapping(sselfsalignTabs sequenceTabsssintersrow((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/maf2VSgraph.pys_dump}s0 # c Csi|iƒ}|iddƒ|iƒ} |i|ƒ|iƒ} d} d}| i ƒddjodSn|i | i ƒdƒ|iƒ} xÓ| oË| i ƒ}t |ƒdjp|ddjodn„|ddjon|d7}|i|d|ƒ|i||ƒ|o |d o)|i|t|iƒd | ƒƒqTndS|iƒ} q’WdS( s6parses the .maf filehandle into database using cursorsiis##mafNis#saièf100.0(s filehandlestellscsseeksfilesizesreadlineslsrcscountssplitsselfssetparslaslens readaligns_dumpsalignTabs sequenceTabsupdatescursorsexecutesint( sselfs filehandlescursorsalignTabs sequenceTabsupdatescountscslasrcslsfilesize((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/maf2VSgraph.pys parseIntoDBs2      $ -( s__name__s __module__s__doc__soptionss__init__ssetpars readalignsparses_vseqsNones_dumps parseIntoDB(((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/maf2VSgraph.pys MafParsers    &  (s __future__s generatorssseqrefs pygr.seqdbsstrings refIntervalssreverse_complements MafParser(s MafParsersreverse_complements generatorssstrings refIntervals((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/maf2VSgraph.pys?s    PK7“;p)Ϫëëpygr/apps/maf2VSgraph.pyo;ò |†Kc@sMdklZdkTdkTdkZd„Zd„Zdfd„ƒYZdS((s generators(s*Nccsád}d}d}xvtt|ƒƒD]b}||djoK||jo&|||||||||!fVn|d}|d7}q%q%W|djodSn|d}||jo&|||||||||!fVndS(Nis-i(sbeginsgapssendsrangeslenss(sssbeginsendsgaps((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/maf2VSgraph.pys refIntervalss &    cCs½hdd<dd<dd<dd<dd<dd<dd<d d <d d <dd<d d<d d <}d igi}|ddd…D]}||i||ƒƒq“~ƒSdS(NsastscsgsusnsAsTsCsGsUsNsiÿÿÿÿ(scomplsjoinsappends_[1]ssscsget(sss_[1]scscompl((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/maf2VSgraph.pysreverse_complementsrs MafParsercBs_tZdZhZdd„Zd„Zd„Zd„Zd„Ze d„Z e e d„Z RS( sð Parses .maf files as defined by the Haussler dataset. The results of parsing are available as pathmapping between the sequences in the alignment. The sequences themselves are assumed unknown and use AnonSequence class. scCs+tƒ|_h|_||_d|_dS(Ni(s PathMappingsselfsmAligns sequencessvbases_vid(sselfsvbase((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/maf2VSgraph.pys__init__(s   cCs7x0|D](}|idƒ\}}||i|ss (sselfsmAligns repr_dictsrowsalignTabswritesjoinsmapsvaluess sequenceTabs sequencessss known_intsinters PathMapping(sselfsalignTabs sequenceTabsssintersrow((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/maf2VSgraph.pys_dump}s0 # c Csi|iƒ}|iddƒ|iƒ} |i|ƒ|iƒ} d} d}| i ƒddjodSn|i | i ƒdƒ|iƒ} xÓ| oË| i ƒ}t |ƒdjp|ddjodn„|ddjon|d7}|i|d|ƒ|i||ƒ|o |d o)|i|t|iƒd | ƒƒqTndS|iƒ} q’WdS( s6parses the .maf filehandle into database using cursorsiis##mafNis#saièf100.0(s filehandlestellscsseeksfilesizesreadlineslsrcscountssplitsselfssetparslaslens readaligns_dumpsalignTabs sequenceTabsupdatescursorsexecutesint( sselfs filehandlescursorsalignTabs sequenceTabsupdatescountscslasrcslsfilesize((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/maf2VSgraph.pys parseIntoDBs2      $ -( s__name__s __module__s__doc__soptionss__init__ssetpars readalignsparses_vseqsNones_dumps parseIntoDB(((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/maf2VSgraph.pys MafParsers    &  (s __future__s generatorssseqrefs pygr.seqdbsstrings refIntervalssreverse_complements MafParser(s MafParsersreverse_complements generatorssstrings refIntervals((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/maf2VSgraph.pys?s    PKd—~;"²G¤s s pygr/apps/seqref.pyfrom __future__ import generators from pygr.sequence import * #from pathquery import * class AnonSequence(Sequence): """Defines a sequence class with unknown sequence, but known length""" def __init__(self, length, id): s = '' self.known = list() Sequence.__init__(self, s, id) self.stop = length def seqsplice(self, s, start, end): (begin, stop, step) = slice(start, end).indices(self.stop) if (start < end): self.known += [(s, start, stop)] elif start > end: self.known += [(s[::-1], start, stop)] def known_int(self): for u in self.known: yield {'src_id': self.id, 'start': u[1], 'end': u[2], 'seq': u[0]} class ReferenceSequence(Sequence): """Defines a reference sequence class that is subscriptable by other sequences. If sequence ids match the resulting sequnce will reference this class. This is useful for coordinate transforms when an unknown sequence intervals are transformed to known sequence""" def __init__(self, s, id): Sequence.__init__(self, s, id) def __getitem__(self, iv): if(isinstance(iv, SeqPath)): if(iv.id == self.id): s = self[iv.start:iv.stop:iv.step] s.orientation = iv.orientation return s else: return SeqPath.__getitem__(self, iv) def mapCoordinates(self, obj): m = PathMapping2() for ival in obj: m[ival] = self[ival] return m class UnkSequence(SeqPath): """Defines a sequence class for pure interval manipulation. No sequence information (i.e. length, or seq itself) is needed. """ def __init__(self, id, start=0, end=0, step=1, orientation=1): self.id = id SeqPath.__init__(self, id) self.start = start self.stop = end self.step = step self.orientation = orientation if (self.start is not None and self.stop is not None and self.start > self.stop): t = self.start if (self.stop >= 0): self.start = self.stop + 1 else: self.start = self.stop if (t >= 0): self.stop = t + 1 else: self.stop = t self.orientation = -self.orientation def __getitem__(self, k): if isinstance(k, types.SliceType): (start, stop, step) = (k.start, k.stop, k.step) if k.step == None: step = 1 elif isinstance(k, types.IntType): start = k stop = k + 1 if (k == -1): stop = None step = 1 return self[start:stop:step] else: raise KeyError('requires a slice object or integer key') if self.step == 1 and stop != None: return UnkSequence(self.id, self.start + start * self.step, self.start + stop * self.step, self.step * step, self.orientation) else: return UnkSequence(self.id, start, stop, step, self.orientation) PK7“;¨Ë6±±pygr/apps/seqref.pyc;ò |†Kc@sZdklZdkTdefd„ƒYZdefd„ƒYZdefd„ƒYZdS( (s generators(s*s AnonSequencecBs)tZdZd„Zd„Zd„ZRS(sDDefines a sequence class with unknown sequence, but known lengthcCs2d}tƒ|_ti|||ƒ||_dS(Ns( ssslistsselfsknownsSequences__init__sidslengthsstop(sselfslengthsidss((s6build/bdist.darwin-8.11.1-i386/egg/pygr/apps/seqref.pys__init__ s cCst||ƒi|iƒ\}}}||jo|i|||fg7_n:||jo,|i|ddd…||fg7_ndS(Niÿÿÿÿ( sslicesstartsendsindicessselfsstopsbeginsstepsknownss(sselfsssstartsendsbeginsstopsstep((s6build/bdist.darwin-8.11.1-i386/egg/pygr/apps/seqref.pys seqsplices $  ccsOxH|iD]=}hd|i<d|d<d|d<d|dyti||ƒSWn#tj oti||ƒSnXdS(s>both parent classes have getattr, so have to call them both...N(sTupleOs __getattr__sselfsattrsAttributeErrorsSeqPath(sselfsattr((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/splicegraph.pys __getattr__Gs (s__name__s __module__s__init__s __getattr__(((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/splicegraph.pysExonForm@s sSplicecBstZRS(N(s__name__s __module__(((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/splicegraph.pysSpliceOsc sýtƒ‰tƒ‰tƒ}tƒ}tƒ}dtfd„ƒY} ||}|i | ƒ|t j o||}|i tƒnt }|t j oAdtfd„ƒY} ||} | i | ƒ| iddƒnt } ||} t|df|df|d ffƒt_| i tƒ|od | GH| itƒn||}d tf‡‡d †ƒY}|i |ƒ|od |GH|i|ƒn||}|i t"ƒ|o$d |GH|it"ƒd GHx(|i#ƒD]}ˆ|7‰ˆ|7‰qØWdGHxT| i#ƒD]F}||i&}y|i'|7_'||7}Wqt(j oqXqWdGHxJ|i#ƒD]<} y|| i&}Wnt*j oqdX|i!| 7_!qdWdGHx(|i#ƒD]}t+|||ƒq¶Wn|| ||||||| ˆˆf SdS(sL Build a splice graph from the specified SQL tables representing gene clusters, exon forms, and splices. Each table must be specified as a DB.TABLENAME string. These tables are loaded into memory. The splice graph is built based on exact match of exon and splice ends. In addition, also builds alt5Graph (exons that match at start but differ at end) and alt3Graph (exons that match at end but differ at start). Loads all cluster, exon and splice data if loadAll is True. Returns tuple: clusters, exons, splices, spliceGraph, alt5Graph, alt3Graph sYiGenomicSequencecBstZd„ZRS(NcCs|idƒSdS(Ns length(seq)(sselfs_select(sself((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/splicegraph.pys__len__ls(s__name__s __module__s__len__(((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/splicegraph.pysYiGenomicSequencejssYiProteinSQLSequencecBstZd„ZRS(NcCs |iSdS(N(sselfsprotein_length(sself((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/splicegraph.pys__len__€s(s__name__s __module__s__len__(((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/splicegraph.pysYiProteinSQLSequence~ssseqs protein_seqsnextsalt5salt3s Loading %s...sClustercs&tZeˆdfˆdffƒZRS(Nsexonsssplices(s__name__s __module__s SchemaDicts clusterExonssclusterSplicess__class_schema__((s clusterExonssclusterSplices(s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/splicegraph.pysCluster—ssAdding clusters to graph...sAdding exons to graph...sAdding splices to graph...sBuilding splice graph...N(,s dictGraphs clusterExonssclusterSplicess spliceGraphsalt5salt3sDNASQLSequencesYiGenomicSequencesjun03s genomic_seq_tsgsobjclasss mrna_seq_tsNonesmrnas SQLSequences protein_seq_tsProteinSQLSequencesYiProteinSQLSequencesproteins addAttrAliassexon_ts exon_formss SchemaDictsExonForms__class_schema__sloadAllsloads cluster_tsclusterssTupleOsClusterssplice_tssplicessSplicesvaluesscses cluster_idsexonss IndexErrorsssKeyErrorsbuildClusterSpliceGraph(sjun03s cluster_tsexon_tssplice_ts genomic_seq_ts mrna_seq_ts protein_seq_tsloadAllssplicessYiGenomicSequencesproteinsYiProteinSQLSequencesss exon_formssclusterssalt5salt3s clusterExonssclusterSplicesscsesgsClustersmrnas spliceGraph((s clusterExonssclusterSplicess;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/splicegraph.pysloadSpliceGraphSs~             *                N( s pygr.sqlgraphs pygr.sequences pygr.seqdbsbuildClusterSpliceGraphs loadClustersTupleOsSeqPathsExonFormsSplicesNonesTruesloadSpliceGraph(s loadClustersSplicesbuildClusterSpliceGraphsExonFormsloadSpliceGraph((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/splicegraph.pys?s - PK7“;œ ‘,òòpygr/apps/splicegraph.pyo;ò |†Kc@sldkTdkTdkTd„Zd„Zdeefd„ƒYZdefd„ƒYZe e e d„Z dS( (s*c Cs8h}h}g}x{|iD]p} | i|jog|| iyti||ƒSWn#tj oti||ƒSnXdS(s>both parent classes have getattr, so have to call them both...N(sTupleOs __getattr__sselfsattrsAttributeErrorsSeqPath(sselfsattr((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/splicegraph.pys __getattr__Gs (s__name__s __module__s__init__s __getattr__(((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/splicegraph.pysExonForm@s sSplicecBstZRS(N(s__name__s __module__(((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/splicegraph.pysSpliceOsc sýtƒ‰tƒ‰tƒ}tƒ}tƒ}dtfd„ƒY} ||}|i | ƒ|t j o||}|i tƒnt }|t j oAdtfd„ƒY} ||} | i | ƒ| iddƒnt } ||} t|df|df|d ffƒt_| i tƒ|od | GH| itƒn||}d tf‡‡d †ƒY}|i |ƒ|od |GH|i|ƒn||}|i t"ƒ|o$d |GH|it"ƒd GHx(|i#ƒD]}ˆ|7‰ˆ|7‰qØWdGHxT| i#ƒD]F}||i&}y|i'|7_'||7}Wqt(j oqXqWdGHxJ|i#ƒD]<} y|| i&}Wnt*j oqdX|i!| 7_!qdWdGHx(|i#ƒD]}t+|||ƒq¶Wn|| ||||||| ˆˆf SdS(sL Build a splice graph from the specified SQL tables representing gene clusters, exon forms, and splices. Each table must be specified as a DB.TABLENAME string. These tables are loaded into memory. The splice graph is built based on exact match of exon and splice ends. In addition, also builds alt5Graph (exons that match at start but differ at end) and alt3Graph (exons that match at end but differ at start). Loads all cluster, exon and splice data if loadAll is True. Returns tuple: clusters, exons, splices, spliceGraph, alt5Graph, alt3Graph sYiGenomicSequencecBstZd„ZRS(NcCs|idƒSdS(Ns length(seq)(sselfs_select(sself((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/splicegraph.pys__len__ls(s__name__s __module__s__len__(((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/splicegraph.pysYiGenomicSequencejssYiProteinSQLSequencecBstZd„ZRS(NcCs |iSdS(N(sselfsprotein_length(sself((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/splicegraph.pys__len__€s(s__name__s __module__s__len__(((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/splicegraph.pysYiProteinSQLSequence~ssseqs protein_seqsnextsalt5salt3s Loading %s...sClustercs&tZeˆdfˆdffƒZRS(Nsexonsssplices(s__name__s __module__s SchemaDicts clusterExonssclusterSplicess__class_schema__((s clusterExonssclusterSplices(s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/splicegraph.pysCluster—ssAdding clusters to graph...sAdding exons to graph...sAdding splices to graph...sBuilding splice graph...N(,s dictGraphs clusterExonssclusterSplicess spliceGraphsalt5salt3sDNASQLSequencesYiGenomicSequencesjun03s genomic_seq_tsgsobjclasss mrna_seq_tsNonesmrnas SQLSequences protein_seq_tsProteinSQLSequencesYiProteinSQLSequencesproteins addAttrAliassexon_ts exon_formss SchemaDictsExonForms__class_schema__sloadAllsloads cluster_tsclusterssTupleOsClusterssplice_tssplicessSplicesvaluesscses cluster_idsexonss IndexErrorsssKeyErrorsbuildClusterSpliceGraph(sjun03s cluster_tsexon_tssplice_ts genomic_seq_ts mrna_seq_ts protein_seq_tsloadAllssplicessYiGenomicSequencesproteinsYiProteinSQLSequencesss exon_formssclusterssalt5salt3s clusterExonssclusterSplicesscsesgsClustersmrnas spliceGraph((s clusterExonssclusterSplicess;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/splicegraph.pysloadSpliceGraphSs~             *                N( s pygr.sqlgraphs pygr.sequences pygr.seqdbsbuildClusterSpliceGraphs loadClustersTupleOsSeqPathsExonFormsSplicesNonesTruesloadSpliceGraph(s loadClustersSplicesbuildClusterSpliceGraphsExonFormsloadSpliceGraph((s;build/bdist.darwin-8.11.1-i386/egg/pygr/apps/splicegraph.pys?s - PK7“;“×2€EGG-INFO/dependency_links.txtPK8“;ÍÒ11¤<EGG-INFO/native_libs.txtPK8“;“×2¤£EGG-INFO/not-zip-safePK7“;ˆ™>É‘‘€×EGG-INFO/PKG-INFOPK7“;@vØ €—EGG-INFO/SOURCES.txtPK7“; ׃™€ßEGG-INFO/top_level.txtPK%“ˆ;$büúGG¤pygr/__init__.pyPK7“;‚s`‹’’¤pygr/__init__.pycPK7“;‚s`‹’’¤Npygr/__init__.pyoPKd—~;Æ.X¯lHlH¤ pygr/annotation.pyPK7“;Úïç])p)p¤«hpygr/annotation.pycPK7“;Úïç])p)p¤Ùpygr/annotation.pyoPKd—~;ržbVTVT ¤_Ipygr/blast.pyPK7“;Mv“gg¤àpygr/blast.pycPK7“;Mv“gg¤pygr/blast.pyoPK7“;‘‹ ¤Dlpygr/cdict.pyPK7“;wû¥t77¤‚mpygr/cdict.pycPK8“;wû¥t77¤åopygr/cdict.pyoPK“;®½àL@à@à ¤Hrpygr/cdict.soPKd—~;9ôÈ[_[_¤³Rpygr/classutil.pyPK7“;ð†`e%%¤=²pygr/classutil.pycPK7“;ð†`e%%¤’3pygr/classutil.pyoPK7“;Èå¤ç´pygr/cnestedlist.pyPK7“;séII¤1¶pygr/cnestedlist.pycPK8“;séII¤¬¸pygr/cnestedlist.pyoPK“;G_<8,² ,² ¤'»pygr/cnestedlist.soPKd—~;t¾…Ýݤ„mpygr/coordinator.pyPK7“;÷ÎÄúÁøÁø¤ÃJpygr/coordinator.pycPK7“;÷ÎÄúÁøÁø¤¶Cpygr/coordinator.pyoPKd—~;)Ö­*  ¤©<pygr/Data.pyPK7“;Jð‚¹ ¤RFpygr/Data.pycPK7“;Jð‚¹ ¤•Tpygr/Data.pyoPKd—~;’ ÉɤØbpygr/dbfile.pyPK7“; L\úÒÒ¤Íypygr/dbfile.pycPK7“; L\úÒҤ̗pygr/dbfile.pyoPKd—~;sÒ)'#'#¤Ëµpygr/downloader.pyPK7“;¼t@Æç+ç+¤"Ùpygr/downloader.pycPK7“;¼t@Æç+ç+¤:pygr/downloader.pyoPKd—~;…¹rRE|E|¤R1pygr/graphquery.pyPK7“;e&Õ5â„ℤǭpygr/graphquery.pycPK7“;e&Õ5â„ℤÚ2pygr/graphquery.pyoPKd—~;ä 4//¤í·pygr/logger.pyPK7“;Å×Ëœ œ ¤HÀpygr/logger.pycPK7“;Å×Ëœ œ ¤Ëpygr/logger.pyoPKd—~;ì𕕤ÚÕpygr/mapping.pyPK7“;c4SÐSФœUpygr/mapping.pycPK7“;c4SÐSФ&pygr/mapping.pyoPKd—~;00|55¤žöpygr/metabase.pyPK7“;Ƹ›ÈMÈM¤ýpygr/metabase.pycPK7“;Ƹ›ÈMÈM¤øJpygr/metabase.pyoPKd—~;«B_ KKKK¤ï˜pygr/nlmsa_utils.pyPK7“;r¹mFlFl¤käpygr/nlmsa_utils.pycPK7“;r¹mFlFl¤ãPpygr/nlmsa_utils.pyoPKd—~;ˆÝ|!!¤[½pygr/parse_blast.pyPK7“;œ¯!'!'¤ßpygr/parse_blast.pycPK7“;œ¯!'!'¤n pygr/parse_blast.pyoPKd—~;ÔwÖ””¤Á- pygr/schema.pyPK7“;ÄÏœ¤C pygr/schema.pycPK7“;ÄÏœ¤=^ pygr/schema.pyoPKd—~;Æ‚eZ¥Z¥ ¤ùx pygr/seqdb.pyPK7“;Îk!ˆ Û Û¤~!pygr/seqdb.pycPK7“;Îk!ˆ Û Û¤·ù!pygr/seqdb.pyoPK7“;“H¤ðÔ"pygr/seqfmt.pyPK7“;Æ{::¤0Ö"pygr/seqfmt.pycPK8“;Æ{::¤—Ø"pygr/seqfmt.pyoPK“;X÷²0°°¤þÚ"pygr/seqfmt.soPKd—~;iÍ*bë€ë€¤Úk#pygr/sequence.pyPK7“;03œh›h›¤óì#pygr/sequence.pycPK7“;03œh›h›¤Šˆ$pygr/sequence.pyoPKd—~;zØU\cc¤!$%pygr/sequtil.pyPK7“;‹²äÞÞ¤±6%pygr/sequtil.pycPK7“;‹²äÞÞ¤½O%pygr/sequtil.pyoPK¨nˆ;0ÄÇ(ÅvÅv¤Éh%pygr/sqlgraph.pyPK7“;—>º(à़ß&pygr/sqlgraph.pycPK7“;—>º(àà¤À(pygr/sqlgraph.pyoPKd—~;öý‡¬¤T *pygr/translationDB.pyPK7“;ê­  ¤$µ*pygr/translationDB.pycPK7“;ê­  ¤pÕ*pygr/translationDB.pyoPKd—~;eGãÈ È ¤¼õ*pygr/xnestedlist.pyPK7“;ÕŠ ¾¾¤µ+pygr/xnestedlist.pycPK7“;ÕŠ ¾¾¤¥+pygr/xnestedlist.pyoPKd—~;ï…Jqdd¤•++pygr/apps/__init__.pyPK7“;á…¶òò¤,,+pygr/apps/__init__.pycPK7“;á…¶òò¤R-+pygr/apps/__init__.pyoPK¨nˆ;á`ó/å å ¤x.+pygr/apps/catalog_downloads.pyPK7“;€HzÞs s ¤™8+pygr/apps/catalog_downloads.pycPK7“;€HzÞs s ¤IF+pygr/apps/catalog_downloads.pyoPKd—~;UÑ Ñ ¤ùS+pygr/apps/leelabdb.pyPK7“;q~ ½i i ¤ý`+pygr/apps/leelabdb.pycPK7“;q~ ½i i ¤šm+pygr/apps/leelabdb.pyoPKd—~;lDì22¤7z+pygr/apps/maf2nclist.pyPK7“;}ݹ¬¬¤ž€+pygr/apps/maf2nclist.pycPK7“;}ݹ¬¬¤€ˆ+pygr/apps/maf2nclist.pyoPKd—~;A¯+º  ¤b+pygr/apps/maf2VSgraph.pyPK7“;p)Ϫë뤤¦+pygr/apps/maf2VSgraph.pycPK7“;p)Ϫëë¤ÆÁ+pygr/apps/maf2VSgraph.pyoPKd—~;"²G¤s s ¤èÜ+pygr/apps/seqref.pyPK7“;¨Ë6±±¤Œé+pygr/apps/seqref.pycPK7“;¨Ë6±±¤oý+pygr/apps/seqref.pyoPKd—~; פR,pygr/apps/splicegraph.pyPK7“;œ ‘,òò¤ˆ,,pygr/apps/splicegraph.pycPK7“;œ ‘,òò¤±J,pygr/apps/splicegraph.pyoPKff·Úh,