diff --git a/.gitignore b/.gitignore index 6d2df0efedb9d789eac7c74169882779ea2afe7f..624dafd73262b40f7ab37576ba20f783ad090388 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,10 @@ *.jpeg -*.nist -*.an2 *.pyc NIST.egg-info/ build/ dist/ NIST/version.py NISTold/ -sample/ doc/_build/* doc/version.py *.orig diff --git a/NIST/core/__init__.py b/NIST/core/__init__.py index dcef32fe6199937b91c0fda9c2879f4741c6bbb8..ad875249f7e736ad2c274cbef2fc32cdbbf4022c 100644 --- a/NIST/core/__init__.py +++ b/NIST/core/__init__.py @@ -84,6 +84,7 @@ class NIST( object ): if init != None: self.load_auto( init ) + self.clean() ############################################################################ # @@ -127,14 +128,14 @@ class NIST( object ): Let `n` be a NIST object as follow: - >>> type( n ) - + >>> type( sample_all_supported_types ) + To change the type to `NISTf` type, use the following commands: >>> from NIST import NISTf - >>> n.changeClassTo( NISTf ) - >>> type( n ) + >>> sample_all_supported_types.changeClassTo( NISTf ) + >>> type( sample_all_supported_types ) """ self.__class__ = newclass @@ -156,9 +157,9 @@ class NIST( object ): >>> from NIST import NIST >>> n = NIST() - >>> n.read( "./sample/pass-type-9-13-m1.an2" ) + >>> n.read( "./sample/all-supported-types.an2" ) >>> n - NIST object, Type-01, Type-02, Type-09, Type-13 + NIST object, Type-01, Type-02, Type-04, Type-09, Type-10, Type-13, Type-14, Type-15, Type-16, Type-17, Type-18, Type-19, Type-20, Type-21, Type-98, Type-99 """ debug.debug( "Reading from file : %s" % infile ) @@ -186,9 +187,12 @@ class NIST( object ): Usage: + >>> from NIST import NIST + >>> n = NIST() + >>> n.read( "./sample/all-supported-types.an2" ) >>> fileContent = n.get_field( "1.003" ) >>> n.process_fileContent( fileContent ) - [2] + [2, 4, 7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 20, 21, 21, 98, 99] """ try: data = map( lambda x: map( int, x.split( US ) ), data.split( RS ) ) @@ -402,9 +406,9 @@ class NIST( object ): Usage: - >>> n.is_binary( 13, 999 ) + >>> sample_type_13.is_binary( 13, 999 ) True - >>> n.is_binary( 1, 3 ) + >>> sample_type_13.is_binary( 1, 3 ) False """ if tagid == 999: @@ -432,8 +436,8 @@ class NIST( object ): Usage: - >>> n.format_field( 1, 8 ) - 'UNIL' + >>> sample_all_supported_types.format_field( 1, 8 ) + 'ORI' """ value = self.get_field( ( ntype, tagid ), idc ) @@ -464,20 +468,26 @@ class NIST( object ): Usage: - >>> dump = n.dump_record( 1, 0 ) + >>> dump = sample_all_supported_types.dump_record( 1 ) >>> print( dump ) # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE NIST Type-01 - 01.001 LEN: 00000136 - 01.002 VER: 0300 - 01.003 CNT: 1120 - 01.004 TOT: USA - 01.005 DAT: ... - 01.006 PRY: 1 - 01.007 DAI: FILE - 01.008 ORI: UNIL - 01.009 TCN: ... - 01.011 NSR: 00.00 - 01.012 NTR: 00.00 + 01.001 LEN: 00000349 + 01.002 VER: 0500 + 01.003 CNT: 117204191010213114315416171751813191620620721821998119912 + 01.004 TOT: A + 01.005 DAT: 20120726 + 01.006 PRY: 9 + 01.007 DAI: DAI + 01.008 ORI: ORI + 01.009 TCN: TCN + 01.010 TCR: t15 + 01.011 NSR: 19.30 + 01.012 NTR: 19.30 + 01.013 DOM: DOM1.00 + 01.014 GMT: 20120726111545Z + 01.015 DCS: 0ASCII1 + 01.016 APS: ORGAPSNAME1.0.0ORG2APS2NAMEversion three + 01.017 ANM: DAI NameORI Name """ d = self.data[ ntype ][ idc ] @@ -514,29 +524,41 @@ class NIST( object ): Usage: - >>> dump = n.dump() + >>> dump = sample_all_supported_types.dump() >>> print( dump ) # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE Informations about the NIST object: - Obj ID: Doctester NIST object - Records: Type-01, Type-02 - Class: NISTf + File: ... + Obj ID: 45300b86cc63923a015d9d99588953c5 + Records: Type-01, Type-02, Type-04, Type-09, Type-10, Type-13, Type-14, Type-15, Type-16, Type-17, Type-18, Type-19, Type-20, Type-21, Type-98, Type-99 + Class: NIST NIST Type-01 - 01.001 LEN: 00000136 - 01.002 VER: 0300 - 01.003 CNT: 1120 - 01.004 TOT: USA - 01.005 DAT: ... - 01.006 PRY: 1 - 01.007 DAI: FILE - 01.008 ORI: UNIL - 01.009 TCN: ... - 01.011 NSR: 00.00 - 01.012 NTR: 00.00 + 01.001 LEN: 00000349 + 01.002 VER: 0500 + 01.003 CNT: 117204191010213114315416171751813191620620721821998119912 + 01.004 TOT: A + ... NIST Type-02 (IDC 0) - 02.001 LEN: 00000038 + 02.001 LEN: 00000023 02.002 IDC: 0 - 02.004 : ... + NIST Type-04 (IDC 1) + 04.001 LEN: 104277 + 04.002 IDC: 1 + 04.003 IMP: 8 + 04.004 FGP: 0/1/2/3/4/5 + ... + NIST Type-09 (IDC 10) + 09.001 LEN: 00000548 + 09.002 IDC: 10 + 09.003 IMP: 20 + 09.004 FMT: S + ... + NIST Type-10 (IDC 2) + 10.001 LEN: 00069624 + 10.002 IDC: 2 + 10.003 IMT: FACE + 10.004 SRC: SRC + ... """ debug.debug( "Dumping NIST" ) @@ -618,15 +640,9 @@ class NIST( object ): :return: NIST object. :rtype: NIST object - - Usage: - - >>> from NIST import NIST - >>> n = NIST() - >>> n.from_json( "sample/mark-pairing-nobinary.json" ) - >>> n - NIST object, Type-01, Type-02, Type-09, Type-13 """ + #TODO: Add documentation + if isinstance( data, str ) and os.path.isfile( data ): with open( data ) as fp: data = json.load( fp ) @@ -738,8 +754,8 @@ class NIST( object ): Usage: - >>> n.get_field( "1.002" ) - '0300' + >>> sample_all_supported_types.get_field( "1.002" ) + '0500' """ ntype, tagid = tagSplitter( tag ) @@ -766,7 +782,15 @@ class NIST( object ): Usage: - >>> n.set_field( "1.002", "0300" ) + >>> sample_all_supported_types.set_field( "1.002", "0300" ) + >>> dump = sample_all_supported_types.dump_record( 1 ) + >>> print( dump ) # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE + NIST Type-01 + 01.001 LEN: 00000349 + 01.002 VER: 0300 + 01.003 CNT: 117204191010213114315416171751813191620620721821998119912 + 01.004 TOT: A + ... """ if value == None: try: @@ -821,8 +845,8 @@ class NIST( object ): Usage: - >>> n.get_fields( [ "1.002", "1.004" ] ) - ['0300', 'USA'] + >>> sample_all_supported_types.get_fields( [ "1.002", "1.004" ] ) + ['0500', 'A'] """ return [ self.get_field( tag, idc ) for tag in tags ] @@ -882,17 +906,16 @@ class NIST( object ): def add_ntype( self, ntype ): """ - Add an empty ntype to the NIST object. - - :param ntype: ntype to add. - :type ntype: int - - Usage: + Add an empty ntype to the NIST object. + + :param ntype: ntype to add. + :type ntype: int + + Usage: - >>> tmp = n.get() - >>> tmp.add_ntype( 18 ) - >>> tmp - NIST object, Type-01, Type-02, Type-18 + >>> sample_type_1.add_ntype( 18 ) + >>> sample_type_1.data.keys() + [1, 2, 18] """ if not ntype in self.get_ntype(): self.data[ ntype ] = {} @@ -1017,8 +1040,8 @@ class NIST( object ): """ Return all ntype presents in the NIST object. - >>> n.get_ntype() - [1, 2] + >>> sample_all_supported_types.get_ntype() + [1, 2, 4, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 98, 99] """ lst = [] @@ -1032,8 +1055,8 @@ class NIST( object ): """ Return all IDC for a specific ntype. - >>> n.get_idc( 2 ) # doctest: +NORMALIZE_WHITESPACE - [0] + >>> sample_all_supported_types.get_idc( 4 ) + [1] """ return sorted( self.data[ ntype ].keys() ) @@ -1049,8 +1072,8 @@ class NIST( object ): Usage: - >>> n.get_all_tagid() - [(1, 0, 1), (1, 0, 2), (1, 0, 3), (1, 0, 4), (1, 0, 5), (1, 0, 6), (1, 0, 7), (1, 0, 8), (1, 0, 9), (1, 0, 11), (1, 0, 12), (2, 0, 1), (2, 0, 2), (2, 0, 4)] + >>> sample_type_1.get_all_tagid() + [(1, 0, 1), (1, 0, 2), (1, 0, 3), (1, 0, 4), (1, 0, 5), (1, 0, 6), (1, 0, 7), (1, 0, 8), (1, 0, 9), (1, 0, 10), (1, 0, 11), (1, 0, 12), (1, 0, 13), (1, 0, 14), (1, 0, 15), (1, 0, 16), (1, 0, 17), (2, 0, 1), (2, 0, 2)] """ lst = [] for ntype, idcs in self.data.iteritems(): @@ -1068,13 +1091,13 @@ class NIST( object ): unique; if multiple IDC are stored for the specific ntype, an exception is raised. - >>> n.checkIDC( 1, 0 ) + >>> sample_type_1.checkIDC( 1, 0 ) 0 - >>> n.checkIDC( 1, -1 ) + >>> sample_type_1.checkIDC( 1, -1 ) 0 - >>> n.checkIDC( 1, 1 ) # doctest: +IGNORE_EXCEPTION_DETAIL + >>> sample_type_1.checkIDC( 1, 1 ) # doctest: +IGNORE_EXCEPTION_DETAIL Traceback (most recent call last): idcNotFound """ @@ -1115,28 +1138,34 @@ class NIST( object ): """ Return the printable version of the NIST object. - >>> print n # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE + >>> print( sample_type_1 ) # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE Informations about the NIST object: - Obj ID: Doctester NIST object + File: ... + Obj ID: d42ad80daed390c357667d1e85164298 Records: Type-01, Type-02 - Class: NIST + Class: NISTf NIST Type-01 - 01.001 LEN: 00000136 - 01.002 VER: 0300 + 01.001 LEN: 00000264 + 01.002 VER: 0500 01.003 CNT: 1120 - 01.004 TOT: USA - 01.005 DAT: ... - 01.006 PRY: 1 - 01.007 DAI: FILE - 01.008 ORI: UNIL - 01.009 TCN: ... + 01.004 TOT: A + 01.005 DAT: 20120726 + 01.006 PRY: 9 + 01.007 DAI: DAI + 01.008 ORI: ORI + 01.009 TCN: TCN + 01.010 TCR: t15 01.011 NSR: 00.00 01.012 NTR: 00.00 + 01.013 DOM: DOM1.00 + 01.014 GMT: 20120726111545Z + 01.015 DCS: 0ASCII1 + 01.016 APS: ORGAPSNAME1.0.0ORG2APS2NAMEversion three + 01.017 ANM: DAI NameORI Name NIST Type-02 (IDC 0) - 02.001 LEN: 00000038 + 02.001 LEN: 00000023 02.002 IDC: 0 - 02.004 : ... """ try: return self.dump() @@ -1148,7 +1177,7 @@ class NIST( object ): """ Return unambiguous description. - >>> n + >>> sample_type_1 NIST object, Type-01, Type-02 """ return "NIST object, " + ", ".join( [ "Type-%02d" % x for x in self.get_ntype() ] ) @@ -1162,8 +1191,8 @@ class NIST( object ): Usage: - >>> tmp = n.get() - >>> tmp == n + >>> tmp = sample_type_1.get() + >>> tmp == sample_type_1 False .. note:: diff --git a/NIST/fingerprint/__init__.py b/NIST/fingerprint/__init__.py index 4812ae83288261fd770758ae5bc661ca269e1f81..01b237fd03a8df01b5646f8137e6ab7d276912cc 100644 --- a/NIST/fingerprint/__init__.py +++ b/NIST/fingerprint/__init__.py @@ -104,8 +104,7 @@ class NISTf( NIST_traditional ): Usage: - >>> mark2 = mark.get() - >>> mark2.clean() + >>> sample_type_9_10_14.clean() """ debug.debug( "Cleaning the NIST object" ) @@ -278,22 +277,60 @@ class NISTf( NIST_traditional ): To get all information, dont speficy any format: - >>> mark2 = mark.get() - >>> mark2.get_minutiae() # doctest: +NORMALIZE_WHITESPACE + >>> sample_type_9_10_14.get_minutiae() # doctest: +NORMALIZE_WHITESPACE [ - Minutia( i='1', x='7.85', y='7.05', t='290', q='0', d='A' ), - Minutia( i='2', x='13.8', y='15.3', t='155', q='0', d='A' ), - Minutia( i='3', x='11.46', y='22.32', t='224', q='0', d='B' ), - Minutia( i='4', x='22.61', y='25.17', t='194', q='0', d='A' ), - Minutia( i='5', x='6.97', y='8.48', t='153', q='0', d='B' ), - Minutia( i='6', x='12.58', y='19.88', t='346', q='0', d='A' ), - Minutia( i='7', x='19.69', y='19.8', t='111', q='0', d='C' ), - Minutia( i='8', x='12.31', y='3.87', t='147', q='0', d='A' ), - Minutia( i='9', x='13.88', y='14.29', t='330', q='0', d='D' ), - Minutia( i='10', x='15.47', y='22.49', t='271', q='0', d='D' ) + Minutia( i='1', x='21.95', y='20.3', t='101', q='00', d='D' ), + Minutia( i='2', x='21.49', y='20.3', t='96', q='00', d='D' ), + Minutia( i='3', x='18.59', y='24.0', t='96', q='00', d='D' ), + Minutia( i='4', x='20.83', y='23.55', t='98', q='00', d='D' ), + Minutia( i='5', x='21.44', y='23.19', t='104', q='00', d='D' ), + Minutia( i='6', x='21.29', y='25.32', t='112', q='00', d='D' ), + Minutia( i='7', x='19.56', y='25.53', t='112', q='00', d='D' ), + Minutia( i='8', x='20.57', y='25.58', t='111', q='00', d='D' ), + Minutia( i='9', x='23.32', y='23.45', t='107', q='00', d='D' ), + Minutia( i='10', x='21.23', y='15.06', t='193', q='00', d='D' ), + Minutia( i='11', x='17.98', y='12.22', t='201', q='00', d='D' ), + Minutia( i='12', x='16.76', y='12.52', t='203', q='00', d='D' ), + Minutia( i='13', x='14.78', y='13.34', t='203', q='00', d='D' ), + Minutia( i='14', x='11.48', y='15.01', t='210', q='00', d='D' ), + Minutia( i='15', x='19.61', y='14.0', t='210', q='00', d='D' ), + Minutia( i='16', x='17.73', y='12.93', t='211', q='00', d='D' ), + Minutia( i='17', x='13.61', y='13.49', t='211', q='00', d='D' ), + Minutia( i='18', x='14.88', y='24.21', t='218', q='00', d='D' ), + Minutia( i='19', x='20.22', y='14.4', t='215', q='00', d='D' ), + Minutia( i='20', x='13.61', y='14.61', t='224', q='00', d='D' ), + Minutia( i='21', x='15.65', y='23.85', t='220', q='00', d='D' ), + Minutia( i='22', x='18.59', y='14.81', t='224', q='00', d='D' ), + Minutia( i='23', x='20.32', y='16.03', t='235', q='00', d='D' ), + Minutia( i='24', x='15.09', y='17.4', t='239', q='00', d='D' ), + Minutia( i='25', x='14.88', y='22.63', t='244', q='00', d='D' ), + Minutia( i='26', x='15.29', y='21.82', t='243', q='00', d='D' ), + Minutia( i='27', x='16.46', y='20.55', t='249', q='00', d='D' ), + Minutia( i='28', x='18.29', y='20.45', t='250', q='00', d='D' ), + Minutia( i='29', x='19.2', y='19.23', t='256', q='00', d='D' ), + Minutia( i='30', x='18.14', y='21.36', t='262', q='00', d='D' ), + Minutia( i='31', x='21.34', y='24.05', t='290', q='00', d='D' ), + Minutia( i='32', x='17.53', y='22.48', t='290', q='00', d='D' ), + Minutia( i='33', x='23.32', y='15.62', t='329', q='00', d='D' ), + Minutia( i='34', x='23.27', y='15.16', t='350', q='00', d='D' ), + Minutia( i='35', x='21.79', y='14.61', t='16', q='00', d='D' ), + Minutia( i='36', x='19.2', y='13.39', t='30', q='00', d='D' ), + Minutia( i='37', x='15.44', y='23.75', t='45', q='00', d='D' ), + Minutia( i='38', x='16.66', y='22.68', t='56', q='00', d='D' ), + Minutia( i='39', x='14.63', y='22.43', t='52', q='00', d='D' ), + Minutia( i='40', x='16.1', y='19.79', t='58', q='00', d='D' ), + Minutia( i='41', x='16.36', y='22.23', t='59', q='00', d='D' ), + Minutia( i='42', x='15.95', y='17.96', t='57', q='00', d='D' ), + Minutia( i='43', x='16.97', y='21.87', t='72', q='00', d='D' ), + Minutia( i='44', x='18.9', y='20.55', t='71', q='00', d='D' ), + Minutia( i='45', x='21.44', y='17.81', t='77', q='00', d='D' ), + Minutia( i='46', x='20.22', y='21.41', t='85', q='00', d='D' ), + Minutia( i='47', x='21.13', y='21.06', t='89', q='00', d='D' ), + Minutia( i='48', x='19.71', y='22.23', t='85', q='00', d='D' ) ] - >>> [ m.as_list() for m in mark.get_minutiae() ] - [['1', 7.85, 7.05, 290, '0', 'A'], ['2', 13.8, 15.3, 155, '0', 'A'], ['3', 11.46, 22.32, 224, '0', 'B'], ['4', 22.61, 25.17, 194, '0', 'A'], ['5', 6.97, 8.48, 153, '0', 'B'], ['6', 12.58, 19.88, 346, '0', 'A'], ['7', 19.69, 19.8, 111, '0', 'C'], ['8', 12.31, 3.87, 147, '0', 'A'], ['9', 13.88, 14.29, 330, '0', 'D'], ['10', 15.47, 22.49, 271, '0', 'D']] + + >>> [ m.as_list() for m in sample_type_9_10_14.get_minutiae() ] + [['1', 21.95, 20.3, 101, '00', 'D'], ['2', 21.49, 20.3, 96, '00', 'D'], ['3', 18.59, 24.0, 96, '00', 'D'], ['4', 20.83, 23.55, 98, '00', 'D'], ['5', 21.44, 23.19, 104, '00', 'D'], ['6', 21.29, 25.32, 112, '00', 'D'], ['7', 19.56, 25.53, 112, '00', 'D'], ['8', 20.57, 25.58, 111, '00', 'D'], ['9', 23.32, 23.45, 107, '00', 'D'], ['10', 21.23, 15.06, 193, '00', 'D'], ['11', 17.98, 12.22, 201, '00', 'D'], ['12', 16.76, 12.52, 203, '00', 'D'], ['13', 14.78, 13.34, 203, '00', 'D'], ['14', 11.48, 15.01, 210, '00', 'D'], ['15', 19.61, 14.0, 210, '00', 'D'], ['16', 17.73, 12.93, 211, '00', 'D'], ['17', 13.61, 13.49, 211, '00', 'D'], ['18', 14.88, 24.21, 218, '00', 'D'], ['19', 20.22, 14.4, 215, '00', 'D'], ['20', 13.61, 14.61, 224, '00', 'D'], ['21', 15.65, 23.85, 220, '00', 'D'], ['22', 18.59, 14.81, 224, '00', 'D'], ['23', 20.32, 16.03, 235, '00', 'D'], ['24', 15.09, 17.4, 239, '00', 'D'], ['25', 14.88, 22.63, 244, '00', 'D'], ['26', 15.29, 21.82, 243, '00', 'D'], ['27', 16.46, 20.55, 249, '00', 'D'], ['28', 18.29, 20.45, 250, '00', 'D'], ['29', 19.2, 19.23, 256, '00', 'D'], ['30', 18.14, 21.36, 262, '00', 'D'], ['31', 21.34, 24.05, 290, '00', 'D'], ['32', 17.53, 22.48, 290, '00', 'D'], ['33', 23.32, 15.62, 329, '00', 'D'], ['34', 23.27, 15.16, 350, '00', 'D'], ['35', 21.79, 14.61, 16, '00', 'D'], ['36', 19.2, 13.39, 30, '00', 'D'], ['37', 15.44, 23.75, 45, '00', 'D'], ['38', 16.66, 22.68, 56, '00', 'D'], ['39', 14.63, 22.43, 52, '00', 'D'], ['40', 16.1, 19.79, 58, '00', 'D'], ['41', 16.36, 22.23, 59, '00', 'D'], ['42', 15.95, 17.96, 57, '00', 'D'], ['43', 16.97, 21.87, 72, '00', 'D'], ['44', 18.9, 20.55, 71, '00', 'D'], ['45', 21.44, 17.81, 77, '00', 'D'], ['46', 20.22, 21.41, 85, '00', 'D'], ['47', 21.13, 21.06, 89, '00', 'D'], ['48', 19.71, 22.23, 85, '00', 'D']] The format parameter is used by the :func:`~NIST.fingerprint.functions.AnnotationsList` object to sort the fields returned. @@ -337,48 +374,65 @@ class NISTf( NIST_traditional ): To get all minutiae for all finger stored in a NIST object: - >>> pr.get_minutiae_all() # doctest: +NORMALIZE_WHITESPACE + >>> sample_type_9_10_14.get_minutiae_all() # doctest: +NORMALIZE_WHITESPACE [[ - Minutia( i='1', x='7.85', y='7.05', t='290', q='0', d='A' ), - Minutia( i='2', x='13.8', y='15.3', t='155', q='0', d='A' ), - Minutia( i='3', x='11.46', y='22.32', t='224', q='0', d='B' ), - Minutia( i='4', x='22.61', y='25.17', t='194', q='0', d='A' ), - Minutia( i='5', x='6.97', y='8.48', t='153', q='0', d='B' ), - Minutia( i='6', x='12.58', y='19.88', t='346', q='0', d='A' ), - Minutia( i='7', x='19.69', y='19.8', t='111', q='0', d='C' ), - Minutia( i='8', x='12.31', y='3.87', t='147', q='0', d='A' ), - Minutia( i='9', x='13.88', y='14.29', t='330', q='0', d='D' ), - Minutia( i='10', x='15.47', y='22.49', t='271', q='0', d='D' ) - ], [ - Minutia( i='1', x='7.85', y='7.05', t='290', q='0', d='A' ), - Minutia( i='2', x='13.8', y='15.3', t='155', q='0', d='A' ), - Minutia( i='3', x='11.46', y='22.32', t='224', q='0', d='B' ), - Minutia( i='4', x='22.61', y='25.17', t='194', q='0', d='A' ), - Minutia( i='5', x='6.97', y='8.48', t='153', q='0', d='B' ), - Minutia( i='6', x='12.58', y='19.88', t='346', q='0', d='A' ), - Minutia( i='7', x='19.69', y='19.8', t='111', q='0', d='C' ), - Minutia( i='8', x='12.31', y='3.87', t='147', q='0', d='A' ), - Minutia( i='9', x='13.88', y='14.29', t='330', q='0', d='D' ), - Minutia( i='10', x='15.47', y='22.49', t='271', q='0', d='D' ) - ], [], [], [], [], [], [], [], []] + Minutia( i='1', x='21.95', y='20.3', t='101', q='00', d='D' ), + Minutia( i='2', x='21.49', y='20.3', t='96', q='00', d='D' ), + Minutia( i='3', x='18.59', y='24.0', t='96', q='00', d='D' ), + Minutia( i='4', x='20.83', y='23.55', t='98', q='00', d='D' ), + Minutia( i='5', x='21.44', y='23.19', t='104', q='00', d='D' ), + Minutia( i='6', x='21.29', y='25.32', t='112', q='00', d='D' ), + Minutia( i='7', x='19.56', y='25.53', t='112', q='00', d='D' ), + Minutia( i='8', x='20.57', y='25.58', t='111', q='00', d='D' ), + Minutia( i='9', x='23.32', y='23.45', t='107', q='00', d='D' ), + Minutia( i='10', x='21.23', y='15.06', t='193', q='00', d='D' ), + Minutia( i='11', x='17.98', y='12.22', t='201', q='00', d='D' ), + Minutia( i='12', x='16.76', y='12.52', t='203', q='00', d='D' ), + Minutia( i='13', x='14.78', y='13.34', t='203', q='00', d='D' ), + Minutia( i='14', x='11.48', y='15.01', t='210', q='00', d='D' ), + Minutia( i='15', x='19.61', y='14.0', t='210', q='00', d='D' ), + Minutia( i='16', x='17.73', y='12.93', t='211', q='00', d='D' ), + Minutia( i='17', x='13.61', y='13.49', t='211', q='00', d='D' ), + Minutia( i='18', x='14.88', y='24.21', t='218', q='00', d='D' ), + Minutia( i='19', x='20.22', y='14.4', t='215', q='00', d='D' ), + Minutia( i='20', x='13.61', y='14.61', t='224', q='00', d='D' ), + Minutia( i='21', x='15.65', y='23.85', t='220', q='00', d='D' ), + Minutia( i='22', x='18.59', y='14.81', t='224', q='00', d='D' ), + Minutia( i='23', x='20.32', y='16.03', t='235', q='00', d='D' ), + Minutia( i='24', x='15.09', y='17.4', t='239', q='00', d='D' ), + Minutia( i='25', x='14.88', y='22.63', t='244', q='00', d='D' ), + Minutia( i='26', x='15.29', y='21.82', t='243', q='00', d='D' ), + Minutia( i='27', x='16.46', y='20.55', t='249', q='00', d='D' ), + Minutia( i='28', x='18.29', y='20.45', t='250', q='00', d='D' ), + Minutia( i='29', x='19.2', y='19.23', t='256', q='00', d='D' ), + Minutia( i='30', x='18.14', y='21.36', t='262', q='00', d='D' ), + Minutia( i='31', x='21.34', y='24.05', t='290', q='00', d='D' ), + Minutia( i='32', x='17.53', y='22.48', t='290', q='00', d='D' ), + Minutia( i='33', x='23.32', y='15.62', t='329', q='00', d='D' ), + Minutia( i='34', x='23.27', y='15.16', t='350', q='00', d='D' ), + Minutia( i='35', x='21.79', y='14.61', t='16', q='00', d='D' ), + Minutia( i='36', x='19.2', y='13.39', t='30', q='00', d='D' ), + Minutia( i='37', x='15.44', y='23.75', t='45', q='00', d='D' ), + Minutia( i='38', x='16.66', y='22.68', t='56', q='00', d='D' ), + Minutia( i='39', x='14.63', y='22.43', t='52', q='00', d='D' ), + Minutia( i='40', x='16.1', y='19.79', t='58', q='00', d='D' ), + Minutia( i='41', x='16.36', y='22.23', t='59', q='00', d='D' ), + Minutia( i='42', x='15.95', y='17.96', t='57', q='00', d='D' ), + Minutia( i='43', x='16.97', y='21.87', t='72', q='00', d='D' ), + Minutia( i='44', x='18.9', y='20.55', t='71', q='00', d='D' ), + Minutia( i='45', x='21.44', y='17.81', t='77', q='00', d='D' ), + Minutia( i='46', x='20.22', y='21.41', t='85', q='00', d='D' ), + Minutia( i='47', x='21.13', y='21.06', t='89', q='00', d='D' ), + Minutia( i='48', x='19.71', y='22.23', t='85', q='00', d='D' ) + ], [], [], [], [], [], [], [], [], []] If the NIST object does not contain a Type04, Type14 or Type13 record, the function will rise an notImplemented exception: - >>> mark2 = mark.get() - >>> mark2.get_minutiae_all() # doctest: +NORMALIZE_WHITESPACE - [[ - Minutia( i='1', x='7.85', y='7.05', t='290', q='0', d='A' ), - Minutia( i='2', x='13.8', y='15.3', t='155', q='0', d='A' ), - Minutia( i='3', x='11.46', y='22.32', t='224', q='0', d='B' ), - Minutia( i='4', x='22.61', y='25.17', t='194', q='0', d='A' ), - Minutia( i='5', x='6.97', y='8.48', t='153', q='0', d='B' ), - Minutia( i='6', x='12.58', y='19.88', t='346', q='0', d='A' ), - Minutia( i='7', x='19.69', y='19.8', t='111', q='0', d='C' ), - Minutia( i='8', x='12.31', y='3.87', t='147', q='0', d='A' ), - Minutia( i='9', x='13.88', y='14.29', t='330', q='0', d='D' ), - Minutia( i='10', x='15.47', y='22.49', t='271', q='0', d='D' ) - ], [], [], [], [], [], [], [], [], []] + >>> sample_type_17_iris.get_minutiae_all() + Traceback (most recent call last): + ... + notImplemented """ if ifany( [ 4, 14 ], self.get_ntype() ): if format == None: @@ -415,7 +469,11 @@ class NISTf( NIST_traditional ): break else: - id, xyt, q, d = m + id = m[ 0 ] + xyt = m[ 1 ] + q = m[ 2 ] + d = m[ 3 ] + rc = m[ 4: ] d = d.upper() @@ -436,7 +494,11 @@ class NISTf( NIST_traditional ): break else: - id, xyt, q, d = m + id = m[ 0 ] + xyt = m[ 1 ] + q = m[ 2 ] + d = m[ 3 ] + rc = m[ 4: ] d = d.upper() @@ -487,24 +549,23 @@ class NISTf( NIST_traditional ): To get the minutiae '1': - >>> mark2 = mark.get() - >>> mark2.get_minutia_by_id( "1" ) - Minutia( i='1', x='7.85', y='7.05', t='290', q='0', d='A' ) + >>> sample_type_9_10_14.get_minutia_by_id( "1" ) + Minutia( i='1', x='21.95', y='20.3', t='101', q='00', d='D' ) The format can also be specified as follow: - >>> mark2.get_minutia_by_id( "1", "xy" ) - Minutia( x='7.85', y='7.05' ) + >>> sample_type_9_10_14.get_minutia_by_id( "1", "xy" ) + Minutia( x='21.95', y='20.3' ) If the IDC value is specified instead of the 'format' parameter, the format is set to the defalut value: - >>> mark2.get_minutia_by_id( "1", 1 ) - Minutia( i='1', x='7.85', y='7.05', t='290', q='0', d='A' ) + >>> sample_type_9_10_14.get_minutia_by_id( "1", 1 ) + Minutia( i='1', x='21.95', y='20.3', t='101', q='00', d='D' ) If the id is not found in the NIST object, the value 'None' is returned: - >>> mark2.get_minutia_by_id( "1337" ) == None + >>> sample_type_9_10_14.get_minutia_by_id( "1337" ) == None True """ if isinstance( format, int ): @@ -540,10 +601,56 @@ class NISTf( NIST_traditional ): To get only the minutiae with the type designation set as 'D' (unknown): - >>> mark.get_minutiae_by_type( "D" ) # doctest: +NORMALIZE_WHITESPACE + >>> sample_type_9_10_14.get_minutiae_by_type( "D" ) # doctest: +NORMALIZE_WHITESPACE [ - Minutia( i='9', x='13.88', y='14.29', t='330', q='0', d='D' ), - Minutia( i='10', x='15.47', y='22.49', t='271', q='0', d='D' ) + Minutia( i='1', x='21.95', y='20.3', t='101', q='00', d='D' ), + Minutia( i='2', x='21.49', y='20.3', t='96', q='00', d='D' ), + Minutia( i='3', x='18.59', y='24.0', t='96', q='00', d='D' ), + Minutia( i='4', x='20.83', y='23.55', t='98', q='00', d='D' ), + Minutia( i='5', x='21.44', y='23.19', t='104', q='00', d='D' ), + Minutia( i='6', x='21.29', y='25.32', t='112', q='00', d='D' ), + Minutia( i='7', x='19.56', y='25.53', t='112', q='00', d='D' ), + Minutia( i='8', x='20.57', y='25.58', t='111', q='00', d='D' ), + Minutia( i='9', x='23.32', y='23.45', t='107', q='00', d='D' ), + Minutia( i='10', x='21.23', y='15.06', t='193', q='00', d='D' ), + Minutia( i='11', x='17.98', y='12.22', t='201', q='00', d='D' ), + Minutia( i='12', x='16.76', y='12.52', t='203', q='00', d='D' ), + Minutia( i='13', x='14.78', y='13.34', t='203', q='00', d='D' ), + Minutia( i='14', x='11.48', y='15.01', t='210', q='00', d='D' ), + Minutia( i='15', x='19.61', y='14.0', t='210', q='00', d='D' ), + Minutia( i='16', x='17.73', y='12.93', t='211', q='00', d='D' ), + Minutia( i='17', x='13.61', y='13.49', t='211', q='00', d='D' ), + Minutia( i='18', x='14.88', y='24.21', t='218', q='00', d='D' ), + Minutia( i='19', x='20.22', y='14.4', t='215', q='00', d='D' ), + Minutia( i='20', x='13.61', y='14.61', t='224', q='00', d='D' ), + Minutia( i='21', x='15.65', y='23.85', t='220', q='00', d='D' ), + Minutia( i='22', x='18.59', y='14.81', t='224', q='00', d='D' ), + Minutia( i='23', x='20.32', y='16.03', t='235', q='00', d='D' ), + Minutia( i='24', x='15.09', y='17.4', t='239', q='00', d='D' ), + Minutia( i='25', x='14.88', y='22.63', t='244', q='00', d='D' ), + Minutia( i='26', x='15.29', y='21.82', t='243', q='00', d='D' ), + Minutia( i='27', x='16.46', y='20.55', t='249', q='00', d='D' ), + Minutia( i='28', x='18.29', y='20.45', t='250', q='00', d='D' ), + Minutia( i='29', x='19.2', y='19.23', t='256', q='00', d='D' ), + Minutia( i='30', x='18.14', y='21.36', t='262', q='00', d='D' ), + Minutia( i='31', x='21.34', y='24.05', t='290', q='00', d='D' ), + Minutia( i='32', x='17.53', y='22.48', t='290', q='00', d='D' ), + Minutia( i='33', x='23.32', y='15.62', t='329', q='00', d='D' ), + Minutia( i='34', x='23.27', y='15.16', t='350', q='00', d='D' ), + Minutia( i='35', x='21.79', y='14.61', t='16', q='00', d='D' ), + Minutia( i='36', x='19.2', y='13.39', t='30', q='00', d='D' ), + Minutia( i='37', x='15.44', y='23.75', t='45', q='00', d='D' ), + Minutia( i='38', x='16.66', y='22.68', t='56', q='00', d='D' ), + Minutia( i='39', x='14.63', y='22.43', t='52', q='00', d='D' ), + Minutia( i='40', x='16.1', y='19.79', t='58', q='00', d='D' ), + Minutia( i='41', x='16.36', y='22.23', t='59', q='00', d='D' ), + Minutia( i='42', x='15.95', y='17.96', t='57', q='00', d='D' ), + Minutia( i='43', x='16.97', y='21.87', t='72', q='00', d='D' ), + Minutia( i='44', x='18.9', y='20.55', t='71', q='00', d='D' ), + Minutia( i='45', x='21.44', y='17.81', t='77', q='00', d='D' ), + Minutia( i='46', x='20.22', y='21.41', t='85', q='00', d='D' ), + Minutia( i='47', x='21.13', y='21.06', t='89', q='00', d='D' ), + Minutia( i='48', x='19.71', y='22.23', t='85', q='00', d='D' ) ] """ return self.get_minutiae( idc = idc ).get_by_type( designation, format ) @@ -559,12 +666,11 @@ class NISTf( NIST_traditional ): :rtype: int Usage: - >>> mark2 = mark.get() - >>> mark2.get_minutiaeCount() - 10 - - >>> mark2.delete_ntype( 9 ) - >>> mark2.get_minutiaeCount() == None + >>> sample_type_9_10_14.get_minutiaeCount() + 48 + >>> sample_type_9_10_14.get_minutiaeCount( idc = 1 ) + 48 + >>> sample_type_17_iris.get_minutiaeCount() == None True """ try: @@ -584,14 +690,14 @@ class NISTf( NIST_traditional ): Usage: - >>> mark.get_cores() # doctest: +NORMALIZE_WHITESPACE + >>> sample_type_9_10_14.get_cores() # doctest: +NORMALIZE_WHITESPACE [ - Core( x='12.5', y='18.7' ) + Core( x='16.66', y='22.78' ) ] The function returns 'None' if no cores are stored in the NIST object. - >>> pr.get_cores() == None + >>> sample_type_4_tpcard.get_cores() == None True """ try: @@ -649,25 +755,20 @@ class NISTf( NIST_traditional ): :return: If the value have been set (without double check). :rtype: boolean - Usage: - - >>> mark2 = mark.get() - >>> pr2 = pr.get() - The cores can be set with a simple list (or tuple): - >>> mark2.set_cores( [ 10.0, 12.7 ], 1 ) + >>> sample_type_9_10_14.set_cores( [ 10.0, 12.7 ] ) True - >>> mark2.get_cores() # doctest: +NORMALIZE_WHITESPACE + >>> sample_type_9_10_14.get_cores() # doctest: +NORMALIZE_WHITESPACE [ Core( x='10.0', y='12.7' ) ] A list of lists (for multiples cores): - >>> mark2.set_cores( [ [ 12.5, 18.7 ], [ 10.0, 12.7 ] ], 1 ) + >>> sample_type_9_10_14.set_cores( [ [ 12.5, 18.7 ], [ 10.0, 12.7 ] ], 1 ) True - >>> mark2.get_cores() # doctest: +NORMALIZE_WHITESPACE + >>> sample_type_9_10_14.get_cores( 1 ) # doctest: +NORMALIZE_WHITESPACE [ Core( x='12.5', y='18.7' ), Core( x='10.0', y='12.7' ) @@ -675,14 +776,17 @@ class NISTf( NIST_traditional ): With an AnnotationList object: + >>> from NIST.fingerprint.functions import AnnotationList + >>> cores = AnnotationList() + >>> cores.from_list( [ [ 12.5, 18.7 ], [ 10.0, 12.7 ] ], format = "xy", type = 'Core' ) >>> cores # doctest: +NORMALIZE_WHITESPACE [ Core( x='12.5', y='18.7' ), Core( x='10.0', y='12.7' ) - ] - >>> pr2.set_cores( cores, 1 ) + ] + >>> sample_type_9_10_14.set_cores( cores, 1 ) True - >>> pr2.get_cores( 1 ) # doctest: +NORMALIZE_WHITESPACE + >>> sample_type_9_10_14.get_cores( 1 ) # doctest: +NORMALIZE_WHITESPACE [ Core( x='12.5', y='18.7' ), Core( x='10.0', y='12.7' ) @@ -690,15 +794,15 @@ class NISTf( NIST_traditional ): If no data is passed to the function, 'False' is returned: - >>> mark2.set_cores( None ) + >>> sample_type_9_10_14.set_cores( None, 1 ) False - >>> mark2.set_cores( [] ) + >>> sample_type_9_10_14.set_cores( [], 1 ) False If the format is not supported, the functions raises an formatNotSupported Exception: - >>> mark2.set_cores( "sample/cores.txt" ) + >>> sample_type_9_10_14.set_cores( "sample/cores.txt", 1 ) Traceback (most recent call last): ... formatNotSupported @@ -749,27 +853,17 @@ class NISTf( NIST_traditional ): :raise minutiaeFormatNotSupported: if the format is not supported Usage: - >>> minutiae # doctest: +NORMALIZE_WHITESPACE - [ - Minutia( i='1', x='7.85', y='7.05', t='290', q='0', d='A' ), - Minutia( i='2', x='13.8', y='15.3', t='155', q='0', d='A' ), - Minutia( i='3', x='11.46', y='22.32', t='224', q='0', d='B' ), - Minutia( i='4', x='22.61', y='25.17', t='194', q='0', d='A' ), - Minutia( i='5', x='6.97', y='8.48', t='153', q='0', d='B' ), - Minutia( i='6', x='12.58', y='19.88', t='346', q='0', d='A' ), - Minutia( i='7', x='19.69', y='19.8', t='111', q='0', d='C' ), - Minutia( i='8', x='12.31', y='3.87', t='147', q='0', d='A' ), - Minutia( i='9', x='13.88', y='14.29', t='330', q='0', d='D' ), - Minutia( i='10', x='15.47', y='22.49', t='271', q='0', d='D' ) - ] - >>> mark2 = mark.get() - >>> mark2.set_minutiae( minutiae, 1 ) + + >>> from NIST.fingerprint.functions import AnnotationList + >>> minutiae = AnnotationList() + >>> minutiae.from_list( [[ 1, 7.85, 7.05, 290, 0, 'A' ], [ 2, 13.80, 15.30, 155, 0, 'A' ], [ 3, 11.46, 22.32, 224, 0, 'B' ], [ 4, 22.61, 25.17, 194, 0, 'A' ], [ 5, 6.97, 8.48, 153, 0, 'B' ], [ 6, 12.58, 19.88, 346, 0, 'A' ], [ 7, 19.69, 19.80, 111, 0, 'C' ], [ 8, 12.31, 3.87, 147, 0, 'A' ], [ 9, 13.88, 14.29, 330, 0, 'D' ], [ 10, 15.47, 22.49, 271, 0, 'D' ]], format = "ixytqd", type = 'Minutia' ) + >>> sample_type_9_10_14.set_minutiae( minutiae, 1 ) 10 The parameter 'data' can be a list or an AnnotationList. Otherwise, the function will raise a minutiaeFormatNotSupported Exception. - >>> mark2.set_minutiae( [ 12, 13, 14 ], 1 ) + >>> sample_type_9_10_14.set_minutiae( [ 12, 13, 14 ], 1 ) Traceback (most recent call last): ... minutiaeFormatNotSupported @@ -810,46 +904,48 @@ class NISTf( NIST_traditional ): :return: List of minutiae after clean-up :rtype: AnnotationList + >>> from NIST.fingerprint.functions import AnnotationList + >>> minutiae = AnnotationList() + >>> minutiae.from_list( [[ 1, 7.85, 7.05, 290, 0, 'A' ], [ 2, 13.80, 15.30, 155, 0, 'A' ], [ 3, 11.46, 22.32, 224, 0, 'B' ], [ 4, 22.61, 25.17, 194, 0, 'A' ], [ 5, 6.97, 8.48, 153, 0, 'B' ], [ 6, 52.58, 19.88, 346, 0, 'A' ], [ 7, 59.69, 19.80, 111, 0, 'C' ], [ 8, 52.31, 3.87, 147, 0, 'A' ], [ 9, 53.88, 14.29, 330, 0, 'D' ], [ 10, 55.47, 22.49, 271, 0, 'D' ]], format = "ixytqd", type = 'Minutia' ) + >>> # Note that the minutiae 5-10 are outisde of the image + >>> sample_type_4_tpcard.add_Type09( idc = 1 ) + >>> sample_type_4_tpcard.add_Type09( idc = 2 ) + >>> sample_type_4_tpcard.add_Type09( idc = 3 ) + >>> sample_type_4_tpcard.add_Type09( idc = 4 ) + >>> sample_type_4_tpcard.set_minutiae( minutiae, 1 ) + 10 + >>> sample_type_4_tpcard.set_minutiae( minutiae, 2 ) + 10 + >>> sample_type_4_tpcard.checkMinutiae( 1 ) # doctest: +NORMALIZE_WHITESPACE + [ + Minutia( i='1', x='7.85', y='7.05', t='290', q='0', d='A' ), + Minutia( i='2', x='13.8', y='15.3', t='155', q='0', d='A' ), + Minutia( i='3', x='11.46', y='22.32', t='224', q='0', d='B' ), + Minutia( i='4', x='22.61', y='25.17', t='194', q='0', d='A' ), + Minutia( i='5', x='6.97', y='8.48', t='153', q='0', d='B' ) + ] + + If not idc is passesd in the function call as argument, all the idc + are checked and returned as a list: - >>> mark2 = mark.get() - >>> mark2.checkMinutiae() # doctest: +NORMALIZE_WHITESPACE - [ - Minutia( i='1', x='7.85', y='7.05', t='290', q='0', d='A' ), - Minutia( i='2', x='13.8', y='15.3', t='155', q='0', d='A' ), - Minutia( i='3', x='11.46', y='22.32', t='224', q='0', d='B' ), - Minutia( i='4', x='22.61', y='25.17', t='194', q='0', d='A' ), - Minutia( i='5', x='6.97', y='8.48', t='153', q='0', d='B' ), - Minutia( i='6', x='12.58', y='19.88', t='346', q='0', d='A' ), - Minutia( i='7', x='19.69', y='19.8', t='111', q='0', d='C' ), - Minutia( i='8', x='12.31', y='3.87', t='147', q='0', d='A' ), - Minutia( i='9', x='13.88', y='14.29', t='330', q='0', d='D' ), - Minutia( i='10', x='15.47', y='22.49', t='271', q='0', d='D' ) - ] - >>> pr2 = pr.get() - >>> pr2.checkMinutiae() # doctest: +NORMALIZE_WHITESPACE - [[ - Minutia( i='1', x='7.85', y='7.05', t='290', q='0', d='A' ), - Minutia( i='2', x='13.8', y='15.3', t='155', q='0', d='A' ), - Minutia( i='3', x='11.46', y='22.32', t='224', q='0', d='B' ), - Minutia( i='4', x='22.61', y='25.17', t='194', q='0', d='A' ), - Minutia( i='5', x='6.97', y='8.48', t='153', q='0', d='B' ), - Minutia( i='6', x='12.58', y='19.88', t='346', q='0', d='A' ), - Minutia( i='7', x='19.69', y='19.8', t='111', q='0', d='C' ), - Minutia( i='8', x='12.31', y='3.87', t='147', q='0', d='A' ), - Minutia( i='9', x='13.88', y='14.29', t='330', q='0', d='D' ), - Minutia( i='10', x='15.47', y='22.49', t='271', q='0', d='D' ) - ], [ - Minutia( i='1', x='7.85', y='7.05', t='290', q='0', d='A' ), - Minutia( i='2', x='13.8', y='15.3', t='155', q='0', d='A' ), - Minutia( i='3', x='11.46', y='22.32', t='224', q='0', d='B' ), - Minutia( i='4', x='22.61', y='25.17', t='194', q='0', d='A' ), - Minutia( i='5', x='6.97', y='8.48', t='153', q='0', d='B' ), - Minutia( i='6', x='12.58', y='19.88', t='346', q='0', d='A' ), - Minutia( i='7', x='19.69', y='19.8', t='111', q='0', d='C' ), - Minutia( i='8', x='12.31', y='3.87', t='147', q='0', d='A' ), - Minutia( i='9', x='13.88', y='14.29', t='330', q='0', d='D' ), - Minutia( i='10', x='15.47', y='22.49', t='271', q='0', d='D' ) - ]] + >>> sample_type_4_tpcard.checkMinutiae() # doctest: +NORMALIZE_WHITESPACE + [[ + Minutia( i='1', x='7.85', y='7.05', t='290', q='0', d='A' ), + Minutia( i='2', x='13.8', y='15.3', t='155', q='0', d='A' ), + Minutia( i='3', x='11.46', y='22.32', t='224', q='0', d='B' ), + Minutia( i='4', x='22.61', y='25.17', t='194', q='0', d='A' ), + Minutia( i='5', x='6.97', y='8.48', t='153', q='0', d='B' ) + ], [ + Minutia( i='1', x='7.85', y='7.05', t='290', q='0', d='A' ), + Minutia( i='2', x='13.8', y='15.3', t='155', q='0', d='A' ), + Minutia( i='3', x='11.46', y='22.32', t='224', q='0', d='B' ), + Minutia( i='4', x='22.61', y='25.17', t='194', q='0', d='A' ), + Minutia( i='5', x='6.97', y='8.48', t='153', q='0', d='B' ) + ], [ + + ], [ + + ]] """ try: idc = self.checkIDC( 9, idc ) @@ -905,41 +1001,50 @@ class NISTf( NIST_traditional ): :param args: Positional arguments :param kwargs: Keyword arguments - To get the list filtered by designation, retriving only Ridge ending (A) - and Bifurcation (B): + Usage: - >>> mark2 = mark.get() - >>> mark2.filter_minutiae( d = "AB" ) # doctest: +NORMALIZE_WHITESPACE + >>> sample_type_9_10_14.filter_minutiae( d = "AB" ) # doctest: +NORMALIZE_WHITESPACE [ - Minutia( i='1', x='7.85', y='7.05', t='290', q='0', d='A' ), - Minutia( i='2', x='13.8', y='15.3', t='155', q='0', d='A' ), - Minutia( i='3', x='11.46', y='22.32', t='224', q='0', d='B' ), - Minutia( i='4', x='22.61', y='25.17', t='194', q='0', d='A' ), - Minutia( i='5', x='6.97', y='8.48', t='153', q='0', d='B' ), - Minutia( i='6', x='12.58', y='19.88', t='346', q='0', d='A' ), - Minutia( i='8', x='12.31', y='3.87', t='147', q='0', d='A' ) + + ] + >>> sample_type_9_10_14.filter_minutiae( d = "CD" ) # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS + [ + Minutia( i='1', x='21.95', y='20.3', t='101', q='00', d='D' ), + Minutia( i='2', x='21.49', y='20.3', t='96', q='00', d='D' ), + Minutia( i='3', x='18.59', y='24.0', t='96', q='00', d='D' ), + Minutia( i='4', x='20.83', y='23.55', t='98', q='00', d='D' ), + ... + Minutia( i='45', x='21.44', y='17.81', t='77', q='00', d='D' ), + Minutia( i='46', x='20.22', y='21.41', t='85', q='00', d='D' ), + Minutia( i='47', x='21.13', y='21.06', t='89', q='00', d='D' ), + Minutia( i='48', x='19.71', y='22.23', t='85', q='00', d='D' ) ] To get the list filtered by designation, removing Type undetermined (D): - >>> mark2.filter_minutiae( d = "D", invert = True ) # doctest: +NORMALIZE_WHITESPACE + >>> sample_type_9_10_14.filter_minutiae( d = "CD", invert = True ) # doctest: +NORMALIZE_WHITESPACE [ - Minutia( i='1', x='7.85', y='7.05', t='290', q='0', d='A' ), - Minutia( i='2', x='13.8', y='15.3', t='155', q='0', d='A' ), - Minutia( i='3', x='11.46', y='22.32', t='224', q='0', d='B' ), - Minutia( i='4', x='22.61', y='25.17', t='194', q='0', d='A' ), - Minutia( i='5', x='6.97', y='8.48', t='153', q='0', d='B' ), - Minutia( i='6', x='12.58', y='19.88', t='346', q='0', d='A' ), - Minutia( i='7', x='19.69', y='19.8', t='111', q='0', d='C' ), - Minutia( i='8', x='12.31', y='3.87', t='147', q='0', d='A' ) + + ] + >>> sample_type_9_10_14.filter_minutiae( d = "AB", invert = True ) # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS + [ + Minutia( i='1', x='21.95', y='20.3', t='101', q='00', d='D' ), + Minutia( i='2', x='21.49', y='20.3', t='96', q='00', d='D' ), + Minutia( i='3', x='18.59', y='24.0', t='96', q='00', d='D' ), + Minutia( i='4', x='20.83', y='23.55', t='98', q='00', d='D' ), + ... + Minutia( i='45', x='21.44', y='17.81', t='77', q='00', d='D' ), + Minutia( i='46', x='20.22', y='21.41', t='85', q='00', d='D' ), + Minutia( i='47', x='21.13', y='21.06', t='89', q='00', d='D' ), + Minutia( i='48', x='19.71', y='22.23', t='85', q='00', d='D' ) ] To get only the Minutiae id 1 and 5: - >>> mark2.filter_minutiae( i = [ "1", "5" ] ) # doctest: +NORMALIZE_WHITESPACE + >>> sample_type_9_10_14.filter_minutiae( i = [ "1", "3" ] ) # doctest: +NORMALIZE_WHITESPACE [ - Minutia( i='1', x='7.85', y='7.05', t='290', q='0', d='A' ), - Minutia( i='5', x='6.97', y='8.48', t='153', q='0', d='B' ) + Minutia( i='1', x='21.95', y='20.3', t='101', q='00', d='D' ), + Minutia( i='3', x='18.59', y='24.0', t='96', q='00', d='D' ) ] """ tofilter = [ ( key, value ) for key, value in kwargs.iteritems() ] @@ -978,8 +1083,8 @@ class NISTf( NIST_traditional ): Usage: - >>> mark.get_size() - (500, 500) + >>> sample_type_9_10_14.get_size( 1 ) + (800, 768) """ return ( self.get_width( idc ), self.get_height( idc ) ) @@ -995,8 +1100,8 @@ class NISTf( NIST_traditional ): Usage: - >>> mark.get_width() - 500 + >>> sample_type_9_10_14.get_width() + 800 """ ntypes = self.get_ntype() @@ -1022,8 +1127,8 @@ class NISTf( NIST_traditional ): Usage: - >>> mark.get_height() - 500 + >>> sample_type_9_10_14.get_height() + 768 """ ntypes = self.get_ntype() @@ -1050,7 +1155,7 @@ class NISTf( NIST_traditional ): Usage: - >>> mark.get_resolution() + >>> sample_type_9_10_14.get_resolution() 500 """ ntypes = self.get_ntype() @@ -1085,9 +1190,9 @@ class NISTf( NIST_traditional ): Usage: - >>> mark2 = mark.get() - >>> mark2.set_resolution( 500 ) - + >>> sample_type_9_10_14.set_resolution( 500 ) + >>> sample_type_9_10_14.get_resolution() + 500 """ ntypes = self.get_ntype() res = int( res ) @@ -1111,7 +1216,7 @@ class NISTf( NIST_traditional ): # Compression def get_compression( self, idc = -1 ): """ - Get the compression used in the latent image. + Get the compression used for a particular image. :param idc: IDC value. :type idc: int @@ -1121,8 +1226,12 @@ class NISTf( NIST_traditional ): Usage: - >>> mark.get_compression() - 'RAW' + >>> sample_type_4_tpcard.get_compression( 1 ) + 'WSQ' + >>> sample_type_17_iris.get_compression( 1 ) + Traceback (most recent call last): + ... + notImplemented """ ntypes = self.get_ntype() @@ -1159,10 +1268,21 @@ class NISTf( NIST_traditional ): :param res: Resolution in DPI. :type res: int + Internal use; not interessting to use directly. + Usage: - >>> mark.annotate( mark.get_latent( 'PIL' ), mark.get_minutiae(), "minutiae" ) # doctest: +ELLIPSIS - + >>> img_input = sample_type_9_10_14.get_print( 'PIL', 1 ) + >>> data = sample_type_9_10_14.get_minutiae( 1 ) + >>> data_type = "minutiae" + + >>> img = sample_type_9_10_14.annotate( img_input, data, data_type ) + >>> img # doctest: +ELLIPSIS + + + >>> from hashlib import md5 + >>> md5( img.tobytes() ).hexdigest() + 'a816e558611786592fa5bdcb67e018c5' """ if isinstance( data, Annotation ): data = AnnotationList( [ data ] ) @@ -1326,12 +1446,19 @@ class NISTf( NIST_traditional ): Usage: - >>> mark.get_latent( 'PIL' ) # doctest: +ELLIPSIS - + >>> img = sample_type_13.get_latent( 'PIL' ) + >>> img# doctest: +ELLIPSIS + - >>> raw = mark.get_latent( 'RAW' ) - >>> raw == '\\xFF' * 250000 - True + >>> from hashlib import md5 + >>> md5( img.tobytes() ).hexdigest() + 'bd5641d4006e395c4e5d7459d2485891' + + The format of the python object returned can be specified as parameter: + + >>> raw = sample_type_13.get_latent( 'RAW' ) + >>> type( raw ) + """ format = upper( format ) @@ -1363,12 +1490,9 @@ class NISTf( NIST_traditional ): :return: File correctly written on disk :rtype: boolean - - Usage: - - >>> mark.export_latent( "./tmp/mark.jpeg" ) - True """ + #TODO: Add documentation + idc = self.checkIDC( 13, idc ) res = self.get_resolution( idc ) @@ -1392,12 +1516,9 @@ class NISTf( NIST_traditional ): :return: File correctly written on disk :rtype: boolean - - Usage: - - >>> mark.export_latent( "./tmp/mark-annotated.jpeg" ) - True """ + #TODO: Add documentation + idc = self.checkIDC( 13, idc ) res = self.get_resolution( idc ) @@ -1429,10 +1550,16 @@ class NISTf( NIST_traditional ): :rtype: PIL.Image Usage: - - >>> mark.get_latent_annotated() # doctest: +ELLIPSIS - + >>> img = sample_type_13.get_latent_annotated() + >>> img # doctest: +ELLIPSIS + + + >>> from hashlib import md5 + >>> md5( img.tobytes() ).hexdigest() + 'bd5641d4006e395c4e5d7459d2485891' """ + #TODO: Patch the doctest to use a real latent image with annotations. + img = options.get( "img", self.get_latent( 'PIL', idc ) ) res = self.get_resolution( idc ) @@ -1469,9 +1596,17 @@ class NISTf( NIST_traditional ): Usage: - >>> mark.get_latent_hull() # doctest: +ELLIPSIS - + + >>> img = sample_type_13.get_latent_hull() + >>> img # doctest: +ELLIPSIS + + + >>> from hashlib import md5 + >>> md5( img.tobytes() ).hexdigest() + '4310f5bbe5987c485b91586f96d949f4' """ + #TODO: Patch the doctest to use a real latent image with annotations. + img = options.get( "img", self.get_latent( "PIL", idc ) ) img = img.convert( "RGB" ) draw = ImageDraw.Draw( img ) @@ -1527,9 +1662,16 @@ class NISTf( NIST_traditional ): Usage: - >>> mark.get_latent_diptych() # doctest: +ELLIPSIS - + >>> img = sample_type_13.get_latent_diptych() + >>> img # doctest: +ELLIPSIS + + + >>> from hashlib import md5 + >>> md5( img.tobytes() ).hexdigest() + '366a3937ace2204c9c99ae06609ed178' """ + #TODO: Patch the doctest to use a real latent image with annotations. + img = self.get_latent( 'PIL', idc ) anno = self.get_latent_annotated( idc, **options ) @@ -1575,14 +1717,25 @@ class NISTf( NIST_traditional ): Set an PIL.Image image: >>> from PIL import Image - >>> image = Image.new( "L", ( 500, 500 ), 255 ) - >>> mark2 = mark.get() - >>> mark2.set_latent( image ) + >>> image = Image.new( "L", ( 800, 768 ), 255 ) + >>> sample_type_13.set_latent( image ) + + >>> img = sample_type_13.get_latent() + >>> img # doctest: +ELLIPSIS + + + >>> from hashlib import md5 + >>> md5( img.tobytes() ).hexdigest() + '23f9d5b5ad8e962ed093fe287e8e5276' Set an string image (RAW format): - >>> mark2 = mark.get() - >>> mark2.set_latent( chr( 255 ) * 500 * 500 ) + >>> w, h = sample_type_13.get_size() + >>> sample_type_13.set_latent( chr( 255 ) * w * h ) + + >>> img = sample_type_13.get_latent() + >>> img # doctest: +ELLIPSIS + """ if image == None: image = Image.new( "L", ( res, res ), 255 ) @@ -1618,8 +1771,7 @@ class NISTf( NIST_traditional ): Usage: - >>> mark2 = mark.get() - >>> mark2.set_latent_size( ( 500, 500 ) ) + >>> sample_type_13.set_latent_size( ( 500, 500 ) ) """ width, height = value @@ -1641,9 +1793,10 @@ class NISTf( NIST_traditional ): Usage: - >>> mark2 = mark.get() - >>> mark2.changeResolution( 500 ) + >>> sample_type_13.changeResolution( 500 ) """ + #TODO: Check or specify the target ntype; here the behaviour with multi-ntype objects is not clear. + res = float( res ) ntypes = self.get_ntype() @@ -1693,8 +1846,15 @@ class NISTf( NIST_traditional ): Usage: - >>> mark2 = mark.get() - >>> mark2.crop_latent( ( 500, 500 ), ( 12.7, 12.7 ) ) + >>> sample_type_13.crop_latent( ( 500, 500 ), ( 12.7, 12.7 ) ) + >>> img = sample_type_13.get_latent() + + >>> img # doctest: +ELLIPSIS + + + >>> from hashlib import md5 + >>> md5( img.tobytes() ).hexdigest() + '9a23b71585867d11d6a5929a9e004072' """ if 13 in self.get_ntype(): return self.crop( size, center, 13, idc ) @@ -1719,8 +1879,7 @@ class NISTf( NIST_traditional ): Usage: - >>> pr2 = pr.get() - >>> pr2.crop_print( ( 500, 500 ), ( 12.7, 12.7 ), 1 ) + >>> sample_type_4_tpcard.crop_print( ( 500, 500 ), ( 12.7, 12.7 ), 1 ) """ ntypes = self.get_ntype() if 4 in ntypes: @@ -1760,10 +1919,9 @@ class NISTf( NIST_traditional ): Usage: - >>> mark2 = mark.get() - >>> mark2.crop( ( 500, 500 ), ( 12.7, 12.7 ), 13 ) - >>> pr2 = pr.get() - >>> pr2.crop( ( 500, 500 ), ( 12.7, 12.7 ), 4, 1 ) + >>> sample_type_13.crop( ( 500, 500 ), ( 12.7, 12.7 ), 13 ) + >>> sample_type_4_tpcard.crop( ( 500, 500 ), ( 12.7, 12.7 ), 4, 1 ) + >>> sample_type_9_10_14.crop( ( 500, 500 ), ( 12.7, 12.7 ), 14, 1 ) """ idc = self.checkIDC( ntype, idc ) @@ -1806,21 +1964,22 @@ class NISTf( NIST_traditional ): self.set_field( ( ntype, 999 ), PILToRAW( new ), idc ) - # Minutia cropping - minu = self.get_minutiae( self.minutiaeformat, idc, **options ) - - for i, _ in enumerate( minu ): - minu[ i ] += offsetmin - - self.set_minutiae( minu, idc ) - - # Core cropping - cores = self.get_cores( idc ) - if cores != None: - for i, _ in enumerate( cores ): - cores[ i ] += offsetmin + if 9 in self.get_ntype(): + # Minutia cropping + minu = self.get_minutiae( self.minutiaeformat, idc, **options ) - self.set_cores( cores, idc ) + for i, _ in enumerate( minu ): + minu[ i ] += offsetmin + + self.set_minutiae( minu, idc ) + + # Core cropping + cores = self.get_cores( idc ) + if cores != None: + for i, _ in enumerate( cores ): + cores[ i ] += offsetmin + + self.set_cores( cores, idc ) ############################################################################ # @@ -1846,8 +2005,13 @@ class NISTf( NIST_traditional ): Usage: - >>> pr.get_print( "PIL", 1 ) # doctest: +ELLIPSIS - + >>> img = sample_type_4_tpcard.get_print( "PIL", 1 ) + >>> img # doctest: +ELLIPSIS + + + >>> from hashlib import md5 + >>> md5( img.tobytes() ).hexdigest() + 'e9ed876ab9de5ccc5b647eafd37b9162' """ format = upper( format ) ntypes = self.get_ntype() @@ -1925,7 +2089,7 @@ class NISTf( NIST_traditional ): Usage: - >>> pr.export_print( "./tmp/print.jpeg", 1 ) + >>> sample_type_4_tpcard.export_print( "/tmp/print.jpeg", 1 ) True """ ntypes = self.get_ntype() @@ -1962,7 +2126,7 @@ class NISTf( NIST_traditional ): Usage: - >>> pr.export_print_annotated( "./tmp/print_annotated.jpeg", 1 ) + >>> sample_type_4_tpcard.export_print_annotated( "/tmp/print_annotated.jpeg", 1 ) True """ ntypes = self.get_ntype() @@ -1994,11 +2158,13 @@ class NISTf( NIST_traditional ): Usage: - >>> pr.get_print_annotated( 1 ) # doctest: +ELLIPSIS - + >>> img = sample_type_4_tpcard.get_print_annotated( 1 ) + >>> img # doctest: +ELLIPSIS + """ img = self.get_print( 'PIL', idc ) res = self.get_resolution( idc ) + img = img.convert( "RGB" ) try: img = self.annotate( img, self.get_minutiae( idc = idc ), "minutiae", res, idc ) @@ -2030,8 +2196,13 @@ class NISTf( NIST_traditional ): Usage: - >>> pr.get_print_diptych( 1 ) # doctest: +ELLIPSIS - + >>> img = sample_type_9_10_14.get_print_diptych( 1 ) + >>> img # doctest: +ELLIPSIS + + + >>> from hashlib import md5 + >>> md5( img.tobytes() ).hexdigest() + '1c7c69848bf554759733c8f71eeb58d9' """ img = self.get_print( 'PIL', idc ) anno = self.get_print_annotated( idc ) @@ -2072,8 +2243,14 @@ class NISTf( NIST_traditional ): >>> from PIL import Image >>> image = Image.new( "L", ( 500, 500 ), 255 ) - >>> pr.set_print( image, format = "RAW", idc = 1 ) + >>> sample_type_4_tpcard.set_print( image, format = "RAW", idc = 1 ) + >>> img = sample_type_4_tpcard.get_print( idc = 1 ) + >>> img # doctest: +ELLIPSIS + + >>> from hashlib import md5 + >>> md5( img.tobytes() ).hexdigest() + '7157c3d901362236afbdd84de3f61007' """ resold = res @@ -2124,8 +2301,7 @@ class NISTf( NIST_traditional ): Usage: - >>> pr2 = pr.get() - >>> pr2.set_print_size( ( 500, 500 ), 1 ) + >>> sample_type_4_tpcard.set_print_size( ( 500, 500 ), 1 ) """ width, height = value ntypes = self.get_ntype() @@ -2167,18 +2343,21 @@ class NISTf( NIST_traditional ): Usage: - >>> mark.get_image() # doctest: +ELLIPSIS - + >>> img = sample_type_13.get_image() + >>> img # doctest: +ELLIPSIS + + + >>> from hashlib import md5 + >>> md5( img.tobytes() ).hexdigest() + 'bd5641d4006e395c4e5d7459d2485891' If no image is available, the function will raise an notImplemented Exception. - >>> mark2 = mark.get() - >>> mark2.delete_ntype( 13 ) - >>> mark2.get_image() + >>> sample_type_13.delete_ntype( 13 ) + >>> sample_type_13.get_image() Traceback (most recent call last): ... notImplemented - """ for f in [ self.get_latent, self.get_print, self.get_palmar ]: try: @@ -2218,8 +2397,9 @@ class NISTf( NIST_traditional ): Usage: - >>> mark2 = mark.get() - >>> mark2.set_width( 13, 500 ) + >>> sample_type_13.set_width( 13, 500 ) + >>> sample_type_13.get_field( "13.006" ) + '500' """ if ntype in [ 4, 13, 14 ]: self.set_field( ( ntype, "006" ), value, idc ) @@ -2244,8 +2424,9 @@ class NISTf( NIST_traditional ): Usage: - >>> mark2 = mark.get() - >>> mark2.set_height( 13, 500 ) + >>> sample_type_13.set_height( 13, 500 ) + >>> sample_type_13.get_field( "13.007" ) + '500' """ if ntype in [ 4, 13, 14 ]: self.set_field( ( ntype, "007" ), value, idc ) @@ -2270,8 +2451,11 @@ class NISTf( NIST_traditional ): Usage: - >>> mark2 = mark.get() - >>> mark2.set_size( ( 500, 500 ) ) + >>> sample_type_13.set_size( ( 500, 500 ) ) + >>> sample_type_13.get_height() + 500 + >>> sample_type_13.get_width() + 500 """ ntypes = self.get_ntype() @@ -2295,8 +2479,9 @@ class NISTf( NIST_traditional ): Usage: - >>> mark.get_diptych() # doctest: +ELLIPSIS - + >>> img = sample_type_13.get_diptych() + >>> img # doctest: +ELLIPSIS + .. seealso:: @@ -2338,8 +2523,13 @@ class NISTf( NIST_traditional ): Usage: - >>> pr.get_tenprint() # doctest: +ELLIPSIS - + >>> img = sample_type_4_tpcard.get_tenprint() + >>> img # doctest: +ELLIPSIS + + + >>> from hashlib import md5 + >>> md5( img.tobytes() ).hexdigest() + '8da4bdb447bfd07380e382e14d90453c' """ maxh, maxw = ( 0, 0 ) for idc in xrange( 1, 11 ): @@ -2391,8 +2581,13 @@ class NISTf( NIST_traditional ): Usage: - >>> pr.get_tenprintcard_front() # doctest: +ELLIPSIS + >>> img = sample_type_4_tpcard.get_tenprintcard_front() + >>> img # doctest: +ELLIPSIS + + >>> from hashlib import md5 + >>> md5( img.tobytes() ).hexdigest() + '0eed7645e6ca37b3c8ee4106dee3f225' """ Image.MAX_IMAGE_PIXELS = 1000000000 @@ -2548,11 +2743,16 @@ class NISTf( NIST_traditional ): Usage: >>> from NIST import NISTf + >>> from NIST.fingerprint.functions import AnnotationList + + >>> minutiae = AnnotationList() + >>> minutiae.from_list( [[ 1, 7.85, 7.05, 290, 0, 'A' ], [ 2, 13.80, 15.30, 155, 0, 'A' ], [ 3, 11.46, 22.32, 224, 0, 'B' ], [ 4, 22.61, 25.17, 194, 0, 'A' ], [ 5, 6.97, 8.48, 153, 0, 'B' ], [ 6, 12.58, 19.88, 346, 0, 'A' ], [ 7, 19.69, 19.80, 111, 0, 'C' ], [ 8, 12.31, 3.87, 147, 0, 'A' ], [ 9, 13.88, 14.29, 330, 0, 'D' ], [ 10, 15.47, 22.49, 271, 0, 'D' ]], format = "ixytqd", type = 'Minutia' ) + >>> params = { ... 'minutiae': minutiae, ... 'cores': [ [ 12.5, 18.7 ] ] ... } - >>> mark = NISTf().init_latent( **params ) + >>> mark_nist = NISTf().init_latent( **params ) .. seealso :: @@ -2583,11 +2783,16 @@ class NISTf( NIST_traditional ): Usage: >>> from NIST import NISTf + >>> from NIST.fingerprint.functions import AnnotationList + + >>> minutiae = AnnotationList() + >>> minutiae.from_list( [[ 1, 7.85, 7.05, 290, 0, 'A' ], [ 2, 13.80, 15.30, 155, 0, 'A' ], [ 3, 11.46, 22.32, 224, 0, 'B' ], [ 4, 22.61, 25.17, 194, 0, 'A' ], [ 5, 6.97, 8.48, 153, 0, 'B' ], [ 6, 12.58, 19.88, 346, 0, 'A' ], [ 7, 19.69, 19.80, 111, 0, 'C' ], [ 8, 12.31, 3.87, 147, 0, 'A' ], [ 9, 13.88, 14.29, 330, 0, 'D' ], [ 10, 15.47, 22.49, 271, 0, 'D' ]], format = "ixytqd", type = 'Minutia' ) + >>> params = { ... 'minutiae': minutiae, ... 'cores': [ [ 12.5, 18.7 ] ] ... } - >>> pr = NISTf().init_print( **params ) + >>> print_nist = NISTf().init_print( **params ) .. seealso :: @@ -2619,13 +2824,18 @@ class NISTf( NIST_traditional ): New latent fingermark: >>> from NIST import NISTf + >>> from NIST.fingerprint.functions import AnnotationList + + >>> minutiae = AnnotationList() + >>> minutiae.from_list( [[ 1, 7.85, 7.05, 290, 0, 'A' ], [ 2, 13.80, 15.30, 155, 0, 'A' ], [ 3, 11.46, 22.32, 224, 0, 'B' ], [ 4, 22.61, 25.17, 194, 0, 'A' ], [ 5, 6.97, 8.48, 153, 0, 'B' ], [ 6, 12.58, 19.88, 346, 0, 'A' ], [ 7, 19.69, 19.80, 111, 0, 'C' ], [ 8, 12.31, 3.87, 147, 0, 'A' ], [ 9, 13.88, 14.29, 330, 0, 'D' ], [ 10, 15.47, 22.49, 271, 0, 'D' ]], format = "ixytqd", type = 'Minutia' ) + >>> params = { ... 'type': 'latent', ... 'minutiae': minutiae, ... 'cores': [ [ 12.5, 18.7 ] ] ... } - >>> mark = NISTf().init_latent( **params ) - >>> print( mark ) # doctest: +NORMALIZE_WHITESPACE, +ELLIPSIS + >>> mark_nist = NISTf().init_latent( **params ) + >>> print( mark_nist ) # doctest: +NORMALIZE_WHITESPACE, +ELLIPSIS Informations about the NIST object: Obj ID: ... Records: Type-01, Type-02, Type-09, Type-13 @@ -2675,14 +2885,20 @@ class NISTf( NIST_traditional ): New fingerprint: + >>> from NIST import NISTf + >>> from NIST.fingerprint.functions import AnnotationList + + >>> minutiae = AnnotationList() + >>> minutiae.from_list( [[ 1, 7.85, 7.05, 290, 0, 'A' ], [ 2, 13.80, 15.30, 155, 0, 'A' ], [ 3, 11.46, 22.32, 224, 0, 'B' ], [ 4, 22.61, 25.17, 194, 0, 'A' ], [ 5, 6.97, 8.48, 153, 0, 'B' ], [ 6, 12.58, 19.88, 346, 0, 'A' ], [ 7, 19.69, 19.80, 111, 0, 'C' ], [ 8, 12.31, 3.87, 147, 0, 'A' ], [ 9, 13.88, 14.29, 330, 0, 'D' ], [ 10, 15.47, 22.49, 271, 0, 'D' ]], format = "ixytqd", type = 'Minutia' ) + >>> params = { ... 'type': 'print', ... 'minutiae': minutiae, ... 'cores': [ [ 12.5, 18.7 ] ] ... } - >>> pr = NISTf().init_print( **params ) - >>> print( pr ) # doctest: +NORMALIZE_WHITESPACE, +ELLIPSIS + >>> print_nist = NISTf().init_print( **params ) + >>> print( print_nist ) # doctest: +NORMALIZE_WHITESPACE, +ELLIPSIS Informations about the NIST object: Obj ID: ... Records: Type-01, Type-02, Type-04, Type-09 @@ -2900,10 +3116,10 @@ class NISTf( NIST_traditional ): Usage: - >>> pr2 = pr.get() - >>> pr2.migrate_Type04_to_Type14() - >>> pr2 - NIST object, Type-01, Type-02, Type-09, Type-14 + >>> sample_type_4_tpcard.migrate_Type04_to_Type14() + + >>> sample_type_4_tpcard.hash() + '6ef09a994a4ebcdbd4810bddc1fd22d8' """ for idc in self.get_idc( 4 ): size = self.get_size( idc ) @@ -2939,7 +3155,7 @@ class NISTf( NIST_traditional ): Usage: - >>> mark.mm2px( ( 12.7, 12.7 ) ) + >>> sample_type_13.mm2px( ( 12.7, 12.7 ) ) [250.0, 250.0] """ return mm2px( data, self.get_resolution( idc ) ) @@ -2956,7 +3172,7 @@ class NISTf( NIST_traditional ): Usage: - >>> mark.px2mm( ( 250.0, 250.0 ) ) + >>> sample_type_13.px2mm( ( 250.0, 250.0 ) ) [12.7, 12.7] """ return px2mm( data, self.get_resolution( idc ) ) diff --git a/NIST/fingerprint/functions.py b/NIST/fingerprint/functions.py index c19a0856e580672c6480e243637df4b9842df0de..f53d4f9df4903e3d60f6f5e31038405c66769672 100644 --- a/NIST/fingerprint/functions.py +++ b/NIST/fingerprint/functions.py @@ -69,16 +69,16 @@ def lstTo012( lst, format = None ): undetermined) is not always well supported). >>> lstTo012( - ... [[ 7.85, 7.05, 290 ], - ... [ 13.80, 15.30, 155 ], - ... [ 11.46, 22.32, 224 ], - ... [ 22.61, 25.17, 194 ], - ... [ 6.97, 8.48, 153 ], - ... [ 12.58, 19.88, 346 ], - ... [ 19.69, 19.80, 111 ], - ... [ 12.31, 3.87, 147 ], - ... [ 13.88, 14.29, 330 ], - ... [ 15.47, 22.49, 271 ]], + ... [[ 7.85, 7.05, 290 ], + ... [ 13.80, 15.30, 155 ], + ... [ 11.46, 22.32, 224 ], + ... [ 22.61, 25.17, 194 ], + ... [ 6.97, 8.48, 153 ], + ... [ 12.58, 19.88, 346 ], + ... [ 19.69, 19.80, 111 ], + ... [ 12.31, 3.87, 147 ], + ... [ 13.88, 14.29, 330 ], + ... [ 15.47, 22.49, 271 ]], ... format = "xyt" ... ) '1\\x1f07850705290\\x1f00\\x1fA\\x1e2\\x1f13801530155\\x1f00\\x1fA\\x1e3\\x1f11462232224\\x1f00\\x1fA\\x1e4\\x1f22612517194\\x1f00\\x1fA\\x1e5\\x1f06970848153\\x1f00\\x1fA\\x1e6\\x1f12581988346\\x1f00\\x1fA\\x1e7\\x1f19691980111\\x1f00\\x1fA\\x1e8\\x1f12310387147\\x1f00\\x1fA\\x1e9\\x1f13881429330\\x1f00\\x1fA\\x1e10\\x1f15472249271\\x1f00\\x1fA' @@ -138,15 +138,15 @@ def lstTo137( lst, res = None ): >>> from NIST.fingerprint.functions import lstTo137 >>> lstTo137( - ... [[ 1, 7.85, 7.05, 290, 0, 100 ], - ... [ 2, 13.80, 15.30, 155, 0, 100 ], - ... [ 3, 11.46, 22.32, 224, 0, 100 ], - ... [ 4, 22.61, 25.17, 194, 0, 100 ], - ... [ 5, 6.97, 8.48, 153, 0, 100 ], - ... [ 6, 12.58, 19.88, 346, 0, 100 ], - ... [ 7, 19.69, 19.80, 111, 0, 100 ], - ... [ 8, 12.31, 3.87, 147, 0, 100 ], - ... [ 9, 13.88, 14.29, 330, 0, 100 ], + ... [[ 1, 7.85, 7.05, 290, 0, 100 ], + ... [ 2, 13.80, 15.30, 155, 0, 100 ], + ... [ 3, 11.46, 22.32, 224, 0, 100 ], + ... [ 4, 22.61, 25.17, 194, 0, 100 ], + ... [ 5, 6.97, 8.48, 153, 0, 100 ], + ... [ 6, 12.58, 19.88, 346, 0, 100 ], + ... [ 7, 19.69, 19.80, 111, 0, 100 ], + ... [ 8, 12.31, 3.87, 147, 0, 100 ], + ... [ 9, 13.88, 14.29, 330, 0, 100 ], ... [ 10, 15.47, 22.49, 271, 0, 100 ]], ... 500 ... ) @@ -282,8 +282,13 @@ def tetraptych( mark, pr, markidc = -1, pridc = -1 ): Usage: >>> from NIST.fingerprint.functions import tetraptych - >>> tetraptych( mark, pr, pridc = 1 ) # doctest: +ELLIPSIS - + >>> img = tetraptych( sample_type_13, sample_type_4_tpcard, pridc = 1 ) + >>> img# doctest: +ELLIPSIS + + + >>> from hashlib import md5 + >>> md5( img.tobytes() ).hexdigest() + '3779a044e5a56b56380a895a9a5297ea' """ markidc = mark.checkIDC( 13, markidc ) @@ -809,6 +814,10 @@ class AnnotationList( eobject ): Usage : + >>> from NIST.fingerprint.functions import AnnotationList + >>> minutiae = AnnotationList() + >>> minutiae.from_list( [[ 1, 7.85, 7.05, 290, 0, 'A' ], [ 2, 13.80, 15.30, 155, 0, 'A' ], [ 3, 11.46, 22.32, 224, 0, 'B' ], [ 4, 22.61, 25.17, 194, 0, 'A' ], [ 5, 6.97, 8.48, 153, 0, 'B' ], [ 6, 12.58, 19.88, 346, 0, 'A' ], [ 7, 19.69, 19.80, 111, 0, 'C' ], [ 8, 12.31, 3.87, 147, 0, 'A' ], [ 9, 13.88, 14.29, 330, 0, 'D' ], [ 10, 15.47, 22.49, 271, 0, 'D' ]], format = "ixytqd", type = 'Minutia' ) + >>> minutiae.set_format( 'xy' ) >>> minutiae # doctest: +NORMALIZE_WHITESPACE [ @@ -852,6 +861,10 @@ class AnnotationList( eobject ): Usage: + >>> from NIST.fingerprint.functions import AnnotationList + >>> minutiae = AnnotationList() + >>> minutiae.from_list( [[ 1, 7.85, 7.05, 290, 0, 'A' ], [ 2, 13.80, 15.30, 155, 0, 'A' ], [ 3, 11.46, 22.32, 224, 0, 'B' ], [ 4, 22.61, 25.17, 194, 0, 'A' ], [ 5, 6.97, 8.48, 153, 0, 'B' ], [ 6, 12.58, 19.88, 346, 0, 'A' ], [ 7, 19.69, 19.80, 111, 0, 'C' ], [ 8, 12.31, 3.87, 147, 0, 'A' ], [ 9, 13.88, 14.29, 330, 0, 'D' ], [ 10, 15.47, 22.49, 271, 0, 'D' ]], format = "ixytqd", type = 'Minutia' ) + >>> minutiae.get_by_type( 'D' ) # doctest: +NORMALIZE_WHITESPACE [ Minutia( i='9', x='13.88', y='14.29', t='330', q='0', d='D' ), @@ -871,6 +884,10 @@ class AnnotationList( eobject ): Usage: + >>> from NIST.fingerprint.functions import AnnotationList + >>> minutiae = AnnotationList() + >>> minutiae.from_list( [[ 1, 7.85, 7.05, 290, 0, 'A' ], [ 2, 13.80, 15.30, 155, 0, 'A' ], [ 3, 11.46, 22.32, 224, 0, 'B' ], [ 4, 22.61, 25.17, 194, 0, 'A' ], [ 5, 6.97, 8.48, 153, 0, 'B' ], [ 6, 12.58, 19.88, 346, 0, 'A' ], [ 7, 19.69, 19.80, 111, 0, 'C' ], [ 8, 12.31, 3.87, 147, 0, 'A' ], [ 9, 13.88, 14.29, 330, 0, 'D' ], [ 10, 15.47, 22.49, 271, 0, 'D' ]], format = "ixytqd", type = 'Minutia' ) + >>> minutiae.as_list() [[1, 7.85, 7.05, 290, 0, 'A'], [2, 13.8, 15.3, 155, 0, 'A'], [3, 11.46, 22.32, 224, 0, 'B'], [4, 22.61, 25.17, 194, 0, 'A'], [5, 6.97, 8.48, 153, 0, 'B'], [6, 12.58, 19.88, 346, 0, 'A'], [7, 19.69, 19.8, 111, 0, 'C'], [8, 12.31, 3.87, 147, 0, 'A'], [9, 13.88, 14.29, 330, 0, 'D'], [10, 15.47, 22.49, 271, 0, 'D']] @@ -886,6 +903,10 @@ class AnnotationList( eobject ): Usage: + >>> from NIST.fingerprint.functions import AnnotationList + >>> minutiae = AnnotationList() + >>> minutiae.from_list( [[ 1, 7.85, 7.05, 290, 0, 'A' ], [ 2, 13.80, 15.30, 155, 0, 'A' ], [ 3, 11.46, 22.32, 224, 0, 'B' ], [ 4, 22.61, 25.17, 194, 0, 'A' ], [ 5, 6.97, 8.48, 153, 0, 'B' ], [ 6, 12.58, 19.88, 346, 0, 'A' ], [ 7, 19.69, 19.80, 111, 0, 'C' ], [ 8, 12.31, 3.87, 147, 0, 'A' ], [ 9, 13.88, 14.29, 330, 0, 'D' ], [ 10, 15.47, 22.49, 271, 0, 'D' ]], format = "ixytqd", type = 'Minutia' ) + >>> minutiae.as_json() '[ {"i": 1, "x": 7.85, "y": 7.05, "t": 290, "q": 0, "d": "A"}, {"i": 2, "x": 13.8, "y": 15.3, "t": 155, "q": 0, "d": "A"}, {"i": 3, "x": 11.46, "y": 22.32, "t": 224, "q": 0, "d": "B"}, {"i": 4, "x": 22.61, "y": 25.17, "t": 194, "q": 0, "d": "A"}, {"i": 5, "x": 6.97, "y": 8.48, "t": 153, "q": 0, "d": "B"}, {"i": 6, "x": 12.58, "y": 19.88, "t": 346, "q": 0, "d": "A"}, {"i": 7, "x": 19.69, "y": 19.8, "t": 111, "q": 0, "d": "C"}, {"i": 8, "x": 12.31, "y": 3.87, "t": 147, "q": 0, "d": "A"}, {"i": 9, "x": 13.88, "y": 14.29, "t": 330, "q": 0, "d": "D"}, {"i": 10, "x": 15.47, "y": 22.49, "t": 271, "q": 0, "d": "D"} ]' """ @@ -904,7 +925,11 @@ class AnnotationList( eobject ): Usage: - >>> tmp = minutiae.get( 'ixytqd' ) + >>> from NIST.fingerprint.functions import AnnotationList + >>> minutiae = AnnotationList() + >>> minutiae.from_list( [[ 1, 7.85, 7.05, 290, 0, 'A' ], [ 2, 13.80, 15.30, 155, 0, 'A' ], [ 3, 11.46, 22.32, 224, 0, 'B' ], [ 4, 22.61, 25.17, 194, 0, 'A' ], [ 5, 6.97, 8.48, 153, 0, 'B' ], [ 6, 12.58, 19.88, 346, 0, 'A' ], [ 7, 19.69, 19.80, 111, 0, 'C' ], [ 8, 12.31, 3.87, 147, 0, 'A' ], [ 9, 13.88, 14.29, 330, 0, 'D' ], [ 10, 15.47, 22.49, 271, 0, 'D' ]], format = "ixytqd", type = 'Minutia' ) + + >>> tmp = minutiae.get() >>> tmp == minutiae False @@ -928,7 +953,13 @@ class AnnotationList( eobject ): Let a the objects `a` and `tmp` be defined as follow: + >>> from NIST.fingerprint.functions import AnnotationList + + >>> minutiae = AnnotationList() + >>> minutiae.from_list( [[ 1, 7.85, 7.05, 290, 0, 'A' ], [ 2, 13.80, 15.30, 155, 0, 'A' ], [ 3, 11.46, 22.32, 224, 0, 'B' ], [ 4, 22.61, 25.17, 194, 0, 'A' ], [ 5, 6.97, 8.48, 153, 0, 'B' ], [ 6, 12.58, 19.88, 346, 0, 'A' ], [ 7, 19.69, 19.80, 111, 0, 'C' ], [ 8, 12.31, 3.87, 147, 0, 'A' ], [ 9, 13.88, 14.29, 330, 0, 'D' ], [ 10, 15.47, 22.49, 271, 0, 'D' ]], format = "ixytqd", type = 'Minutia' ) + >>> from NIST.fingerprint.functions import Minutia + >>> a = Minutia( [ 11, 22.67, 1.49, 325, 0, 'A' ], format = 'ixytqd' ) >>> tmp = minutiae.get_by_type( 'A' ) @@ -953,6 +984,10 @@ class AnnotationList( eobject ): Usage: + >>> from NIST.fingerprint.functions import AnnotationList + >>> minutiae = AnnotationList() + >>> minutiae.from_list( [[ 1, 7.85, 7.05, 290, 0, 'A' ], [ 2, 13.80, 15.30, 155, 0, 'A' ], [ 3, 11.46, 22.32, 224, 0, 'B' ], [ 4, 22.61, 25.17, 194, 0, 'A' ], [ 5, 6.97, 8.48, 153, 0, 'B' ], [ 6, 12.58, 19.88, 346, 0, 'A' ], [ 7, 19.69, 19.80, 111, 0, 'C' ], [ 8, 12.31, 3.87, 147, 0, 'A' ], [ 9, 13.88, 14.29, 330, 0, 'D' ], [ 10, 15.47, 22.49, 271, 0, 'D' ]], format = "ixytqd", type = 'Minutia' ) + >>> from NIST.fingerprint.functions import Minutia >>> r = Minutia( [ 8, 12.31, 3.87, 147, 0, 'A' ], format = "ixytqd" ) >>> minutiae2 = minutiae.get() @@ -1040,12 +1075,15 @@ class AnnotationList( eobject ): Usage: + >>> from NIST.fingerprint.functions import AnnotationList + >>> minutiae = AnnotationList() + >>> minutiae.from_list( [[ 1, 7.85, 7.05, 290, 0, 'A' ], [ 2, 13.80, 15.30, 155, 0, 'A' ], [ 3, 11.46, 22.32, 224, 0, 'B' ], [ 4, 22.61, 25.17, 194, 0, 'A' ], [ 5, 6.97, 8.48, 153, 0, 'B' ], [ 6, 12.58, 19.88, 346, 0, 'A' ], [ 7, 19.69, 19.80, 111, 0, 'C' ], [ 8, 12.31, 3.87, 147, 0, 'A' ], [ 9, 13.88, 14.29, 330, 0, 'D' ], [ 10, 15.47, 22.49, 271, 0, 'D' ]], format = "ixytqd", type = 'Minutia' ) + >>> from NIST.fingerprint.functions import Point - >>> minutiae2 = minutiae.get() >>> p = Point( ( 12, 12 ) ) - >>> minutiae2.sort_dist_point( p ) - >>> minutiae2 # doctest: +NORMALIZE_WHITESPACE + >>> minutiae.sort_dist_point( p ) + >>> minutiae.get( "xy" ) # doctest: +NORMALIZE_WHITESPACE [ Minutia( x='13.88', y='14.29' ), Minutia( x='13.8', y='15.3' ), @@ -1096,6 +1134,10 @@ class AnnotationList( eobject ): Function to generate a string representation of the AnnotationList object. This string is similar to the `pprint.pprint` function: + >>> from NIST.fingerprint.functions import AnnotationList + >>> minutiae = AnnotationList() + >>> minutiae.from_list( [[ 1, 7.85, 7.05, 290, 0, 'A' ], [ 2, 13.80, 15.30, 155, 0, 'A' ], [ 3, 11.46, 22.32, 224, 0, 'B' ], [ 4, 22.61, 25.17, 194, 0, 'A' ], [ 5, 6.97, 8.48, 153, 0, 'B' ], [ 6, 12.58, 19.88, 346, 0, 'A' ], [ 7, 19.69, 19.80, 111, 0, 'C' ], [ 8, 12.31, 3.87, 147, 0, 'A' ], [ 9, 13.88, 14.29, 330, 0, 'D' ], [ 10, 15.47, 22.49, 271, 0, 'D' ]], format = "ixytqd", type = 'Minutia' ) + >>> minutiae # doctest: +NORMALIZE_WHITESPACE [ Minutia( i='1', x='7.85', y='7.05', t='290', q='0', d='A' ), @@ -1160,6 +1202,11 @@ class AnnotationList( eobject ): Usage: + + >>> from NIST.fingerprint.functions import AnnotationList + >>> minutiae = AnnotationList() + >>> minutiae.from_list( [[ 1, 7.85, 7.05, 290, 0, 'A' ], [ 2, 13.80, 15.30, 155, 0, 'A' ], [ 3, 11.46, 22.32, 224, 0, 'B' ], [ 4, 22.61, 25.17, 194, 0, 'A' ], [ 5, 6.97, 8.48, 153, 0, 'B' ], [ 6, 12.58, 19.88, 346, 0, 'A' ], [ 7, 19.69, 19.80, 111, 0, 'C' ], [ 8, 12.31, 3.87, 147, 0, 'A' ], [ 9, 13.88, 14.29, 330, 0, 'D' ], [ 10, 15.47, 22.49, 271, 0, 'D' ]], format = "ixytqd", type = 'Minutia' ) + >>> len( minutiae ) 10 """ diff --git a/NIST/traditional/__init__.py b/NIST/traditional/__init__.py index dcc87f14420db5ebef9b41c8ea010f83cc2a128c..339f3552fe4f46c775a3fccd82643efe23e20d44 100644 --- a/NIST/traditional/__init__.py +++ b/NIST/traditional/__init__.py @@ -190,8 +190,6 @@ class NIST( NIST_Core ): LEN = int( LEN ) else: - debug.critical( boxer( "Unknown Type-%02d" % ntype, "The Type-%02d is not supported. It will be skipped in the pasing process. Contact the developer for more information." % ntype ) ) - if data.startswith( str( ntype ) ): _, _, _, LEN = fieldSplitter( data[ 0 : data.find( GS ) ] ) LEN = int( LEN ) diff --git a/doctester.py b/doctester.py index f58ec068ee9d3208d5ac03d7900de0394d4c4450..9066310ab9f5e214220f7533c540facf094be2ce 100644 --- a/doctester.py +++ b/doctester.py @@ -1,123 +1,45 @@ #!/usr/bin/python # -*- coding: UTF-8 -*- +import copy import doctest import sys import unittest -from MDmisc.string import join_r -from NIST.core.config import US, RS - -################################################################################ -# -# Import of the modules to test -# -################################################################################ - +import NIST.core.__init__ import NIST.core.functions + import NIST.traditional.__init__ import NIST.fingerprint.__init__ import NIST.fingerprint.functions -import NIST.plugins.MDD.__init__ -from NIST.fingerprint.functions import AnnotationList - -################################################################################ -# -# Tests -# -################################################################################ - def NISTtests(): tests = unittest.TestSuite() - ############################################################################ - # - # Test for empty NIST object - # - ############################################################################ - - n = NIST.traditional.__init__.NIST() - n.set_identifier( "Doctester NIST object" ) - n.add_Type01() - n.add_Type02() - - tests.addTests( doctest.DocTestSuite( NIST.traditional.__init__, { 'n': n } ) ) - - ############################################################################ - # - # Test for Mark and Print NIST object - # - ############################################################################ - - lst = [ - [ 1, 7.85, 7.05, 290, 0, 'A' ], - [ 2, 13.80, 15.30, 155, 0, 'A' ], - [ 3, 11.46, 22.32, 224, 0, 'B' ], - [ 4, 22.61, 25.17, 194, 0, 'A' ], - [ 5, 6.97, 8.48, 153, 0, 'B' ], - [ 6, 12.58, 19.88, 346, 0, 'A' ], - [ 7, 19.69, 19.80, 111, 0, 'C' ], - [ 8, 12.31, 3.87, 147, 0, 'A' ], - [ 9, 13.88, 14.29, 330, 0, 'D' ], - [ 10, 15.47, 22.49, 271, 0, 'D' ] - ] - - minutiae = AnnotationList() - minutiae.from_list( lst, format = "ixytqd", type = 'Minutia' ) - - ############################################################################ - - mark = NIST.fingerprint.__init__.NISTf() - lst = [ - [ 12.5, 18.7 ], - [ 10.0, 12.7 ] - ] - - cores = AnnotationList() - cores.from_list( lst, "xy", "Core" ) - - ############################################################################ - - mark.add_Type01() - mark.add_Type02() - - mark.add_Type09( 1 ) - mark.set_minutiae( minutiae, 1 ) - mark.set_cores( [ [ 12.5, 18.7 ] ], 1 ) - - mark.add_Type13( ( 500, 500 ), 500, 1 ) - - ############################################################################ - - pr = NIST.fingerprint.__init__.NISTf() - pr.add_Type01() - pr.add_Type02() - - pr.add_Type04( 1 ) - pr.set_print( "\x00" * ( 500 * 500 ), 500, ( 500, 500 ), "RAW", 1 ) - pr.add_Type04( 2 ) - pr.set_print( idc = 2 ) - - pr.add_Type09( 1 ) - pr.set_minutiae( minutiae, 1 ) - - pr.add_Type09( 2 ) - pr.set_minutiae( minutiae, 2 ) - - ############################################################################ - - vars = { - 'mark': mark, - 'pr': pr, - 'minutiae': minutiae, - 'cores': cores + sample_all_supported_types = NIST.traditional.__init__.NIST( "./sample/all-supported-types.an2" ) + sample_type_1 = NIST.fingerprint.__init__.NISTf( "./sample/type-1.an2" ) + sample_type_4_tpcard = NIST.fingerprint.__init__.NISTf( "./sample/type-4-tpcard.an2" ) + sample_type_9_10_14 = NIST.fingerprint.__init__.NISTf( "./sample/type-9-10-14.an2" ) + sample_type_13 = NIST.fingerprint.__init__.NISTf( "./sample/type-13.an2" ) + sample_type_17_iris = NIST.fingerprint.__init__.NISTf( "./sample/type-17-iris.an2" ) + + var = { + "sample_all_supported_types": sample_all_supported_types, + "sample_type_1": sample_type_1, + "sample_type_4_tpcard": sample_type_4_tpcard, + "sample_type_9_10_14": sample_type_9_10_14, + "sample_type_13": sample_type_13, + "sample_type_17_iris": sample_type_17_iris, } - tests.addTests( doctest.DocTestSuite( NIST.fingerprint.__init__, vars ) ) - tests.addTests( doctest.DocTestSuite( NIST.fingerprint.functions, vars ) ) - tests.addTests( doctest.DocTestSuite( NIST.core.functions, vars ) ) + def setUpfunction( test ): + test.globs.update( copy.deepcopy( var ) ) + + tests.addTests( doctest.DocTestSuite( NIST.core.__init__, var, setUp = setUpfunction ) ) + tests.addTests( doctest.DocTestSuite( NIST.core.functions, var, setUp = setUpfunction ) ) + tests.addTests( doctest.DocTestSuite( NIST.fingerprint.__init__, var, setUp = setUpfunction ) ) + tests.addTests( doctest.DocTestSuite( NIST.fingerprint.functions, var, setUp = setUpfunction ) ) return tests diff --git a/sample/all-supported-types.an2 b/sample/all-supported-types.an2 new file mode 100644 index 0000000000000000000000000000000000000000..2ec3b237ec9e5286a3b3de5137983ff84d372d64 Binary files /dev/null and b/sample/all-supported-types.an2 differ diff --git a/sample/type-1.an2 b/sample/type-1.an2 new file mode 100644 index 0000000000000000000000000000000000000000..2bdb97bb60c22fbdd292d7d50522d32596bbbcd0 --- /dev/null +++ b/sample/type-1.an2 @@ -0,0 +1 @@ +1.001:2591.002:05001.003:11201.004:A1.005:201207261.006:91.007:DAI1.008:ORI1.009:TCN1.010:t151.011:00.001.012:00.001.013:DOM1.001.014:20120726111545Z1.015:0ASCII11.016:ORGAPSNAME1.0.0ORG2APS2NAMEversion three1.017:DAI NameORI Name2.001:172.002:0 \ No newline at end of file diff --git a/sample/type-13.an2 b/sample/type-13.an2 new file mode 100644 index 0000000000000000000000000000000000000000..3508723315ef8844908e09fa9deda1e4c99f0a46 --- /dev/null +++ b/sample/type-13.an2 @@ -0,0 +1,714 @@ +1.001:2601.002:05001.003:111301.004:A1.005:201207261.006:91.007:DAI1.008:ORI1.009:TCN1.010:t151.011:00.001.012:00.001.013:DOM1.001.014:20120726111545Z1.015:0ASCII11.016:ORGAPSNAME1.0.0ORG2APS2NAMEversion three1.017:DAI NameORI Name13.001:61467113.002:013.003:413.004:SRC13.005:2012073013.006:80013.007:76813.008:113.009:50013.010:50013.011:NONE13.012:813.013:01913.014:0FV113.015:FV1NA10010010010013.016:100013.017:100013.020:Comment13.024:090000011995FFFF6553513.999:ǽV7**/Ux~mxrdtj]N-&*73Gv`D9:6!)+4LD#  + )"*    +  + +  + + +  +   + + + + + + +  + +  +     +    + +   +  +  +  +   + + + +  + + + + + +    + + + + + + + + + + + +  + + + + + + + + +  + +  + +  +   +   +  +     + + + + + + +  +  +  +    8OL6'!""  +  + +    +   +  +       8^<6@EuѸuE>8[ǶbNY¸t7 "/2,'&(,98(0"% %   !",-1")" $-).+9A=C>8+#$$*&0-/ %" )&"23+!""'!#'7-,)++:/-QS91' #$/L; "1GK4*-( '&@8288+! $" 2]:49GٹqG:CpǕibsʞX- "&8fþʸhuRufn}xnq{frkih_zf{xaKBaW14dpzjLB>-2>) %/1,%"%!$A=20%!#-NV)!!% $$""#!"&&".$$*(+(4*(*0+('')+()&1-6+-2..42255269663:9?'.-*8>44''(!%)0)"-&5EKGPWfzvi>"/.6LWslM<\hKQpzciznREisfcw`WOIHBIIs»vW@?@87422/13//./00/21,/./41-//+,-/0/-0/)(+'),-../).,2-&-+3/2..123=Gc}|J04N>EWXdlxgYdyNGNKmUq~zdQp}oZ>P[\Bl|O90C\~i]^zzTRer|t|^`fM++9adB6Zh}}wex|j|rrI*>^|sp|ssXr}PTywCGkS@@QxceeUhZzzgTXUlmelG;4?Pb<::PޱiIMlҾʼŶļ¨ø原}ZIB@877421116:0/6/53+.1//)/2/./0-00.,,/0.(-++-+0-/-1//1,.584>QevS@?eԛ\F?VץzzNj[IQn̸iB, #--%&((("$.&&$"&+((-,<41+(++/('(+,-0/0124<96<;6<;A@DIIm»̵zeMD?975:6464.3<.62+./-/+,-/0451,0+,0.,.,.6+-,4522.104<7258>DZҮN5:\̌UEF]֞x㺖ѹY@7*#$#&0"%$)$( ''')&+,--))/++'*4.+/-24/216:457H?QkhE@846866204231646./-,3-146//+/,-/+)./,-.--4.3323874477;DMڳL-@\~SIAeџҾD:/,&#(#$*,"#%!"#20',)0/12)*+-.),+,)116/28087986997>79822C<=:=HnʹwkTG;=:996474/<7//0480:516;200-2:-///*/.-4/..07247488>HyĒ{ڧvƝrF54:0*,/*!$'%!0)&4.&*)0.*-/+**+((*1.-4*..231169:>79>GBU]yͼbJIEA:531234<42532+006,'/08110.(--21-2-3//0523/717=<9Gt_EPbA?Q޷~ݞx˷O:814.18,*%" $$'*&&&(%*,.4-)...)*)/-1/01.2.5625;99:<=ER^ҳmVJE@7620;7257/0/2.020/46.,,+-2/01-+20025/012/1589>G]ݻмaCI{ڢXB7<6>FTdcLF@758864233342.33.1:.1)*.,,.22-/+0170/0..126>89=K_Զc:Ds՘VD?Pҙ}‰F74.2**,*$','''(((&*+(*/,)-.(/,/-/<9...2634234667876@DZ΢ȵyRB;;6::741/02285-011,20.,51/1-.)0-420.0./367<34:EVθa9=rԏTFBb~ԻL0/.16''.(*(&(%('*0('(1,*)*-3071383640./235488:79:?EWd=?jʂOFLo߼ѨvB?/1/054#)-*(%'.0&6*+**)$1,(->.1,.;6--148322288@98:?Ix̯ZGB>=853262..,-00..02,5/,.0,1/,20-10&(-/7.036:AJif31./655+-+"%&)0+.&'&(,*-%-*,0,9,*/7322>87324<9<>=9>QYսiPAD?6763734/2/.)+-.0,,7./-+-/,40.-210478277?TtHEd֚XF@]ֱ٬kKItҳJ<;1--/-'#.,)(..+-)+&),+.().*01-1,7*(,,121D<7J:7>@LJe|׻}[E?978750.456))-42/1+/.')-.6./,000/01/259:AF\IDV֏TFCbٶόK?Gsˢ^E33))+/*,('&.+)&)'/+((1.)+)..,-0/-3/+(&)-/43:795:EDJt£aB:72992027:402..14()+'(.0+26-,+./..224>>:?DY}GBQɆRFFeѩߚZLf̧_C1,/+0,('%!+/.!#)2-)*1)+(*4*///0;1>5/)--../27:59:?724-0./..-..1-...*+++2/*,-,,,22/1218:BTmIHKXroȃN?HpʲdE202,.-&##&#''%,0-*((.&))-....004//0513-.015778=P{մ{z`D8732156-1221,.0.+<;)..0+5.100-43488048.-('+*-'+%),.+-(),)*,&-'**-*/*,2,/5012276889<Nnw@DRKM`ݥ^C@Yәil{ÎK45,.*+*"'$&3.)()+)1+')+*+&)1'(+.0///52*.39<659DENtҰ̮aD=D7?0-,-6/-+-,/(.4-*-/4./.0-02,,/543@=AMcɋLGSOYe֞\DA^ϖmpؾ̯ѿO5.-6-((% ('&/)'&',(*'#%,+'*-)*-.-/.0),.44487;6;GUv̱O@=9/.-+5/2-/410,-3.,.+0-12+*(/-2/2506;?EaіNVcoӔYFBfʈm̫ǤêvJ=<().''*%#.)(%(%&,)&%(-*)',+++,-...100/41.67;=B\zÚ^B>91/410.-..,.*+.+),/0.//2---,23/0/257>GhܡfzdžQ=Ew㽀qζɾʯó{P@;8+),-'&"&!$'$%'+('-(&')(,').-,+.0-.4677481:?@CXڳϥkN?941///.-.2---'(+,/4020.0-0*/6,-/4645>LTx֞ouuR@KzvqpC41(,($&%+(%$##$(%#&,+&"$$,4+*10,1.621>65047167@FdὝǒ}Ҵ]H>1*0//1-3-,0(+)*.12/200,/.6...7.-425=DP{եozhBFM|ЉM7=[ݞkhԼ¾̼Ȧa71*%#'&%$7+&%.$&&(*)*).+*)&(*-0--/2457676344:AJfۿzL>5//0./+,00,(),(+30,06+(0')(403-4/469?@RvxF5;dՖdeɡս{ſϼؿP82.,'%(,!!'$&$*!",,,(/+(,,0(',-.1-.01:465888EDDY|øR@8330/2/-+))/,*(**,-.0++-)((*.--14087<486GRܷV^ު\<:5/7-,+(,.-,++2,-,/)-221220-1647258ACU~޴SZڟS:9@z֛`^zԭlm¼һ[=2745&""(&')&&&+'$)&+1(2,,-*,,/1/2-0/-334989C@DVzϻвVM;620,,*+'0*.0+-.*.+0+.86.0401/.2208?GLjԷYWՕO94G٘]ZxұovͿUB>2-.23)%"-$*&)',(*4/*$(*2.70',.,//3-43169478?>I]溱ǖ\B<;32-+,+890--..-/,,.+52//5--0//0448@DLsҺ_SԊK<4P͋WSvͳw}Ź\=6779/)&#$"%%(&*''4-9-)+&$&-21469A94/131435679>MϙcLB<522.+0/,.20/.,0,+..-0/1//0--/<56B?DQupS̀H67\ɂW\űǤǴV7/1=.))#&"$'-,%.%&)*&',,*(%'/,--,/251/4L57689<;UѳvL>6/,,+0.-,,:0-+/+),3/+.4061/.222457EMlںyJ<62,)-*)(+0/.,.-0.--(--.3+44105288<@DMa`VlC9Bs쿆rվwp~÷ša<3++--)(,'""'1+)&(")'.+-)''&(,4,/224A7456657?CGXٺ߾}Q>72-,.***,,*+2.,,/.)+---,3,.250666=?FJlh_eF=EٳpxűúղqG5+,+4-,')&! &+*.)&($'$5-*,/(-,./,-02551>67989ARkȲĐ[B82--.-+,-&&(.2.,,,02-,-+(+3//586:>@FMmsdeA:M乁zΕ]Nk¿շҸkF83,).+&)),((#%7'$'%'&&(&%%'+*15./0107615B7259F^ֶѣ[G954.20-+/.*.,-+,,*<,-2+'+.20>96>BE>@Madg`=9W{nќcZxûѱao̪zF79.*(*/(%$2*&+&$#%&(/+'3-(&'+,521.2572564577:?oϪҨoF757406.,-)+,--1/*-'*)(//-,02>538>9FBEchSݥ[6@78563779=DV}ŹڳkE601-&'*+.446*-.4.*+*++-1-,.2204.28>BNcЀ`ωN;B{ɋevֺŤswֽϽN7,,-((*((('#&'$#))##+%'%*+.'1(,3=5/2449=;9AJWôҫںpG:536,+..-+0-*..+.-*+--//3,0627.5589>Loׂ[vQKjݏaiI9Q}buʵ˳hLNiӵ^C9.1-+9,-&#% #&*(&'%1++%$*(,.,/1,1./70402435<=DU͡ȑS973--3,+),.,-...,,,+-.+/222+0..8::^߱o[wʶx`TSoĜ΢Y<@:,.&&*-)'#$%$$%$&+-/-*(*(.,4424384:7:95:@9=KgѾΔP>6/.+-*2/,*,,-+-((+++,,-..-+/.4<::?CL^߈]ߤ`E@_ڟdZ~IJxtn~ĩǕc:7/+*(*&$))%((#&&&$''*.+**)2.30,3+34:1566;<;=?Odèұ˒R::6.,430+,+0/--++/,00-./0/,20/3444:DGjߋgךYDCjю^^¾õɕZ=-/-7%)&$!%1-#$%'-0+-4+54%,*751,,,/./.57727>:>M˽ϺΝ[K55-666./)*.++(,-,.2//21/.2/0433=9>AKncύSCG|ʇ[bʸ¾ȼͤZ;411,+$ $+$'')'&'+**0-1,+*&7.*-73,.;9223487:AD\âѼϚ[?81012./)+*+)**-,)*+-4.1,.435655:=?DKxݒi|RCT|Vaǹλ˻Ƭɲ˟_:11+/71*'/-$%+*'$,!%2/)*-.4-+1,,-91-01355;;9@QήƲԸ͟d@76030-3+&&(+6-*+(+-2-*,*/03450.28=@KsuODWePdŶ˶y̗W8-)2&)-(&'(2#(%%,%$'%&)%)&54/))10431-024;479=L}η˾Ч]:31-..--'(+,+,((+*2-///%.0023:225AK:/0-,(*',+1&*%,2%$+)(&%',*,--)013-,0.462168=CPŻڻⳚЛ`E;2/-,*+.++&+*,-,,-+*.-14-3./374:=>FRҮZL^mާbNQՙimکĶŢϿѧhD1+,2*$)-&*&%%#&+*+**$*1+,04-,/,/1065945;AHS~حⵏЬf>72--,,--*4-.+-.---(0//2,332474=<::@Qvج|R64?ho۟bL\яem١üǸȺ˪ط\953:*0+&-%#%!"&&&%%)-+''$'-++0=0+36.+02:14=7>JwŢӦbB3.-/2-*)+*0.-'.-&(.7,,+.+127678:;>FY{M2(+7ZlޝZReʇ]qɾνñӶu:2-50).,&$#$*$(%%$&3*'(*+&'++,-.,34/24632727:L{֫oG402/-)*,*-2/,-(*+.,.0+,--04488228>DYӗT2&'+1OxݏXVną]tǸίԯl@31-*&%&&%$3#'-*+'$+%%&*,'+*+,.,,.10-7744457>Pװe>212.*..,0))/((-1/,-+*-2-,443>426;AJXɃF*%$(-D}xȁZWx`wįΨ̩dA81/*0& $$$&*%&''),)&'%(*/*,*)0401-<33A6.6:@BSɹ׬]@5-1-2.0,*%+'((),..0+,1/,.211,5>9=@OzxC&! 0Z}|YVqYv̾üɳ̣^>=030.'$()$&&'&$#&&-/)#&,++-/))0,-.-4/3;:75>DUנ^@2,.,+*-(+,)-+*.*-*+.470233-10C?>>=Pw޵n@%!#B|sSa١gQxγƛɳģ^=1004+*#".'(%*))+)(&#)+10/511*./,*,-0801757=JgŹԩf<4/,+*)))&**(*-)/.+/-1,/3,+0/4?8<=DPڰm?%+TsTiڟhNrعƥ¯V?70+,)($13%!&*$'1&%&+&'&.930.6,2330246015527JڸӪbD821/.*-),+,+*+,//.+,,/2/-03357:<=FY٩b8%#5WāݯhUoԙbS°ǼZ:21/+''&#'%("#$"%%%&(+(')2/.--,.-048320::8BDeʸ;ͯԩcG50-.-,6)+*,.-+,.-..+..-2,4375<8:=FV٩h:$!0IhƊdUq֙\d÷̸I:;4./2'+1*' $$*%&,&(+)&,''+*,4120014:37437;BcҲļĠҷʬМU::2,*))6)()-'-.-,(*/,-7.--,6246=GcɬξϦʐN7/++,,*&,+*((+-1*++*--+-++-529?;@CHXʐL2# !*3>A@COfx|ՏadleǼ×V70*-,4'$(((#!(%%#'(&$$$&&*./=00194367;,:F5=T߶˶Ӽ̶ܹxF;31,''$++),(*++,(.,1,02),.332;:8?CLĂF-&! '*%$'5D=AP_~xӒZiڟdgƾ̳zR730+2)-%%"!&#")#$&&&$$/&*++,5=8+8?14342?:8CgݱȶĻۥܵeB1.,+0&*+,./*)+,+,--,/1,,,+-,767:>Dlu;.#!"!" "#%%%*/EjtӆYmטjԹԷ˗H;+,3)1,((%#)-*#"$#,-%$%%)##)),1=207/35-8588=Ekȿˮ֟R=0/.***+))(&+*.((,,,.0./,0B438:\z|o^J97/%&&+CwٞٗjlԖZGDhΦ¶ny^C3+)++.&""#")#+%(&1((03'%&-3-2-.15/3133;>E̺شФ_0#!)H|N7.,(+++(,),+*,+&&1&+/2-./03488=?SɃI5,-6]żdWH?>COrܔ֍`rӉQBLuײǯ{D<91*+%&&!#!$$"!#)$""&&&1)*)+'*03260437:;Ldȿș˄L4,2\ڶiA8-+'+++*('*,(&0')()./.260/4588Fp᷁`Vhߜj_u`wַ~РQ6/-/+*)+"!###"#!(#"(*"#&()0*03,,132/-*1@Wâù֮c71('%"&!#$%*+*.,.)+/1-/...36769?P۹۫ibޥgStͦ}ӳd7,*-+*)'#8" $"# "##"*#$+(+++,,,/11167=Hq׮zμk̶ҝH0++*))()&))(,*+-+,+1..A144:97=O۝_kۢfUlҢe:0-,+" ! $'&!#"&$&#%#$+*$&.,+,*-',,*+,09Ce὏ɿպӰȫͿبW6,((-5,'&+'&&++,**/0/+-/14687;:D[ז`qؗbSqر_I5--($!$#$(%!"#-/#"")$+*(&(+)-7+()(,34=6=]ʞήξϞrrûԗI5+(+)+*,'*/&&,+(&-.2/31205369=&(44160.+0,/127B\ͭɈaW{ԼwetyدW0,-+,/30+***'),&(+)+0244053676:Bsv^Αt|O4/+(('%%'%!$#&&#)""(!#"*-&*,42/3+.35289?j۴Ϲ־qag^r;2,-*+22'')/)&(+%(&,-30*/548<78AN浻meƋuݿxI3-)(&"!/$%#&! "%$&&&&"()())0-+-)+,26?=B_⳺۪hitkԿ@4,))-,$#'&$! !*5#"&%-+-**',63+++016@Qʼ~B4**(),,**'*0.3.&&&'+/3.356;879=Mآesٛ`ZȉSC(($)&"0(!%%!##!#!#"'"##"%&+1,0+6-/1/138AWηƸ漥ģذ\<2*%)$()((.,03)*,44--.-0-654886Ep֏cpՙ]T˔M62.*$''#&#(&(#"!!""!#"#&)*(,,010+4-34723=PͻٺͳŲБF8+())+2((*,(**%&(',-,6+5377@88BLwʹZx֒XTɏW003-6)#"%&$&#'+"""#"$$$%'%&*-491.-,.4/.49Wձк̰v@/(3)&%+*(&(*.+(*+,,)./,0877<<8>Kְr`ZaoqWɅRZŌI5/1,.'$%#%&$(%$#&! &)$&(&-*+138'-21444NǀL7/'$&)0/*)+/7BE:<[hfjovRbɇW`ʣ`8.1+)&#'+#$!  &""#$!!"#$)--*0E036123;2:S羗тD.-*($(,*&'*'.++/(8.//-557957=;E`ܬvP>55,25-++,*4GI;9OPKQTRQUhlڥeMiqNdƈU:4()$.&"$+"#$%&"-&"#$'&)+(/3)*,14=69Tľƶٶ]4,.&&+/((,&&,.,,+-+60,045377B8@QֲiUH52;84-,(/FKDGVWPIE@9>LKYػӒTIsnLl۾љU6./.''2 &&*"" "$%%"(*(,'(.-.10,.43?DKɽı¾ýқH1(%('(%%(%#*'+0,',--//44:48;=N¬s\RQH>=<1,4aqG\lHMݿЕX1,'*$#*!$(#""$!'#&#)/+,7+10510-3:`кɱȮvet¸ͻܼb1+%('%%+)+&/.(-+,*/.0,-/13866aߤZSxDžXeۼ}I,,')+A+"""%"$.#")""$!*%#&%&,)0--,-=7=JʥɩөqcκʿlZNTgڿ޻ƛξ`2((&)"')-)$.*(+%-*//++.556<98Erըa:*" $'.>PdvpWC93/-7BIf۟ZRˈezІG?*3'%$#&""&& +"!"# #+%*()(/)5.53336WĢľص~k\^x¸õܺqʫøɽщ8+&&(+"!(&)'%,&.--//0#.4?7576:PăE' (.6BN\fRC:7:G^s֔TRćgxΣV4.)(" % !!&#" $%!%8&#()+,&)(/.,/389SñȱîxrΣ²IJ͹ܳ[/+&&)##(&-%%-.+-../5,#+1676966Anٰr<$,5hϷ{޿׾ϛ?((&(#*($-,$)(*&'(*-*-54263879m޸r>)!&-8AQhdQ{ϱf<09iʽИN6-)(%'& !"#!&!$%(')$)3-+11)-.08E|xuոȳżâP(%&($/(*(+&&(+&%'()//10517<6E}ݷl='!-75?XܨcWۺd9,8vկS93+(%$#!"#!"!"')%*()-+/3,.--/5A߿¬q_j¹ȶд{N$ $%#&),,/''($#"$(&+-242<47:8<[߷n?% +1-/Alڠa_ў^>6GɶμĂ?)&'&# !#/+!) "#&$#)*-+,.-3)-+04=XѿΘw̪y{]Tbtxx˧ԩvRA2 "&%'+*(()+)*(&',3124469yĞ}t^NNYftvgf~ϼ٨pN<7HS2!  + !.-1357687mȘM6,(#*%'#(!""("#!&(',)+&,&--.39;lƸpbTfx}pָ˿Ǿ˽έЏ7,)*'.)*&%#%!"#(%%*',+0//266:9=csaSH>??:1*,5PfM|߾vB7Izж^2''0)(#$#%!")!!$ %#%&'20)*0%*/-09Uҽz~xsp|ƫpiϯyjþڰQ,+(((&')'*-&'"(##(',2,.91/5778Nùyja]PGJX~ߪdRݵl@4RÎ>()*5(%!& !&'%# #-)0./0*$$,*/>ʾ½kZYiѿ}urҹǥͥ`2+*$'-&"#+%))&$ #&&*(+,/98459=DżaY֬f>?e΢X,'($* %"""%)$-!&'"!!# (&&(*/+.)$.-:tĶǹ̿|_JJ_źrxx~ɸҿǰǻ浨m1,+%%)'**(&(*+%%&(',-,.3661572;qޠZa֣bGEt۽p5--$("!'!")3)!"% #"""%%$)+-*+*+(+06;rʼѿiPCKeƿŽszà׽Ԍ6(.$#"$#)%'(+((+('&'*.560.13429QוUdЖ]EK̩S,')%#"#& 0*3')"& "! #'$$'%(+*,**)/3=cὭȱvRDJ`}ɸµƼèݬG.'%%#$# "&&)&.++&&$.04222776:=JϋQlɉUZ}̵{zƣzˮ¼s4*%!$###$%0/*,,',%++/38065278D{KmtB7VC8+%")!!!!! %#""&"!'#"$))0.*30*-/Rœð׾òaJOmĶ̿p]_Şudt¹տоזA*" $!"$'&(*'&''*&*(.-1233859?ilKzګ]46aʺϟD3+(0" .!  "1+(##"&# ##))0,(*)*-6pլuzʽؽ|aZbǺ~^P\}¾ίyʫxxƦ¸ʷ߮N.&#!/.%$'('1)%(&&'+)'..2256669I|ĻcLןW8Bvòֳf4+)$-# !+"&!(7'!,))'(.!"#$.'(&'+)-6NԳʽǬvqrs}YRkϿçɾXQXațr{Ǽѡ{b1(%$ %&')''/-$#%%%'(*/..367584@ewmo~ܨZRҔR:PŇB6()!# &# $.!#*##$)'#('$**&)45+''*)/5Hɹ{}}}ҿifλλԱ}glˮ}Ӓaiw2***.(((()%&(++(&-)**+-2497386>eeH838?ITo{חUUDŽM=Vķ˩[11##$) $$/-'(*$"+,'&$''/)+-1-+(/+.3N\ZdvwsQmحi@9Bq¾Ѿa4("#&#!"# #&+/((!$)-(')*,&()',&%&4?9hŸûƼļԻԾʘipz2%$#$"!"+--&(&()**&,-.12745:6;BolK/"%((,-,6@CFY]]i׹_Oz߫eI?Lx̽˼ɱA-"#!%$'$*("!!&**-)0-(*+)*+-.6>YʽȾây}¸ЮФrqיH*"$)%" $(&$%(&((+(80//-/02798?oY8""%(*--/8W޲ZSإeH@T¾żÍK:5*$!& # (/ ""$(++)*($)(&',(17Mʬ¸}im»þ¹ʱk.$"#&$%'$%&#*$$'&+(//-6-,25534?nW5 " !"$!%>ȈiӑRTɐ\AD^ӵi5'# %% #(%4)%$%'(,*'*'*(/3+,1>qԸƳ¼zt|uzĹs{Ǵľh*%##'%!##&1'$$$%,*++,4./52.866A\[4"!$ # "6oܴs_шM\vOi۾حϬyifzzqxoTWɽ̸ij΁4" "($&&%",+&%&$%,.(+-/20//487BY÷lE1)$!!!+]ڥph~Ncݪb?>SȦ^=*'&! #!!&-($$"##(()(&)(+-0Qռyq̢wddtaUXl|un[BGxûһƮŹĸ֮ڴפ>% $&$& $#%$$,%%$')()13060024>Pűp]SI>*%(,'! % % &Tج|q|Wu۫\;A]ζkE/)'#&%("(!!!#'#'+$'&(&))%&)+15Sʵ漉΅Ȩifntuxuttv}aNRcu{xydWIOϷķدŘ۱I%$ !$##$$&&%(&%&*,(.24312365:Foǹ{bYZTL?2-$#!#"*Y࿓uXݠX;:XK4-'&&" $ #"&/(4'#(+*(&'&$)-:P÷ѻºdgtkdnwwzuqwm_S\jtyz|x|eSUkƣ¸߯Q($%"!$%$$*%'&($(+()++./4.36588DnŽoXC;:/((&%%*:oѯk[ҏQ:=Zѻñm7.&-&" &$  '#(0"&(*!&#/+3I̪ν·xqwnSSqyyqd^Z[Y_fxskgku}}~{]HV~ոk[{Ǹ෯W)$" '($%(''',)(0,++-.//31/579?i}jSEGDBLiϵޥa`N;DhϥƸ=0,%#""!- ('#% (  #$'",#$(*% "#/-9g߳~Ǽ~iGOrzp\QOW`kwnf_dt}}vontzr_Pbһ|e{Żu2$%!$!"!! &(&''+)/0,++-/00--04+'$!%%! %& #)+'*($,072?zi}õxkacaSPZrttڼʾĶgϰĦv.%$"!%$&&+&%%'$*.*-**2/00162.6LhgߺrW_ê]/($#')#!'"$&##*/%+'()*64Xդuy}rfd^QA?Ur{~zpy–ûķnYw׾{ɹٞ<%#$""#"!*#%%%$'(0*),+4/2,6/.-1EުigޱkUgѾ=*$$ $'% ! %$-+(%%)'++05>BvịôxmmcWMM`nrq}ytx|Ԭ˳´{}uսʻ۬E&$# "# #'+,'%%'4-(2-/02)2/--,5[ڞ_s؟^Ol̠L6/"!"! %!! #&&(()&(/),0;Gwҵɶu}~vncY]dhl~zvmlnrv~βϹ{ܵX+$%+"  &'&$#$&'3+(/-+/..-,'/DZֺ[@Wɽþj-# ! #!%#&)%%&,&(0'$"-WeK?96852' !'?k̈x۲]@FpټҴd5*(-+.## "&$#&'#%)*))$)+/8P߾ԼԸ}yÚjad\TP<,%(>U_lhZLLXqiKB9/1DTTRTce^UG8-,8U|ſuԺǺ͹վŵӈ7(#! !#)#%&(*-(&""(0T{S:4/.,% "(*&"%.J{~ث[CHrԮD5&#%+&!!" !! "$$*('*(&+&+,/4:cƺɽrkȧ{`b˲hkqjV?'$9Xei^H93?Wmxt]C0%.@PQHBLY^TD6((6[ƺȵ;ĸɼëٰO($ %#"#!!%#$$('.(%#&,1Lʿ{E/,+'"$(.3538Glv؝[GPzӭЦX4//# $" "*$""')(&/)#$-)()+/8PְƳu`jֽmY`ӶvkutaD+#5O[UF5+'4CHSaowukV>,,6GKE<4=FNOE934Beɹuyy}ػԽëo0% "$&#"#%#"&&+,*&"*.3@–V2+&$$(3DR]gvڝoΌRG\ܾÉC,(/!""!"$$%/)"%).(,-3A{ۿ۵ïh\vոr_lǣuqqaD+%6@KC1%&*74.2H^lj[D2.5CJ@8/,.7DHJJJLYlϸ\dfiy~ͫϿҼ˽э8&"$(#!""'%'$%''&*'//2@ʩnB2*,.:SwՒlȆQNjàO6)&%$!$%#"&-,&)*0&"%0,7N̶±}vθv|ǵuh_F,+9:;6) &1/%$=Ye^G5/.5DIB5+&'4BEO\bgkqrp{κla^am|}v{ҽ°¥Ͽͺ͵ٟ='#!## #$'##$#%%&$,00>iλ]>6+%))!'!  "$$/(&+*)%+(+/G~¿εǶȼn^M4##+1;<;. *1* #6RZK8,*-3581&$/885?WijgeYUdx¡}]S[k|~v~ÿ|̾w|Ġȱ׶۳L*"#$ % "%%5$'&'&& '-,27Pĥ{ZLZyLjsvSRk˷]/(),$""3' !#)'&,)*&*0+18qżĿͰϿƴ|~lU@1"&.9BFA0&".1( !4IK@.*-,,,&"/5+'.?Ya[UFEZyDZ[O\r|ovȷ׾ʲ{ɰν÷ѷ`)##$&#!"'+$#'+)$$-01ANƧl]r{ujUTj=,)+$#"" % !!*$($'(*%0)*3JºŰyWWdnaMA3$+5DWTE.$,475.',5B=2(&((+&$$ &:R^ZI8=^̸n_j}ͿϹŠῌʻ|ͷӴn2 !!#$%'#()'2 +&,,/8LȳzaUtv؟[HIh˱n2*++&&#!#$!!"-)'%%&-&)/+6PϿƵaEDV\TD7-!)5:J]\E.-5@HD<6:AF<-)''&%*CR`_H8@dɺ~}ýչ|VsϿēπ5"# "(!*0.$&'# $&(06Hôs[IGcڢpՌNCOp…;)"##'&!& .'"+$#&&+*($.3AյɲȨǺsZJO_WC4,"#-68ALRE66BLRME?DIK=/&$'&$7KU_XK>?b¹ʾſ׾ZrϬǼʹҴɭҌ9' !##! %"$$$#$$"$(-5:^fE912GyԗpɄPGQwҮU4*!!)' #$!#!%'&**)-)5@Z|{Ĭ«ȟ˱Žηܧ}ڣ?&!! #!&%!( "'" $'..FlcP@,$$&1bðԏn~VQ`ő?.($$#!! $ "% &)(&*&/),/,:]ɶݼμ̰i^TRPQZh^@)$-,+)%&73' + +0@JG<9BSZRRU]tu­̻ƥ͗jQIOfܸ[("%#""&%'%&  "(,(-# ;mʌXA6309=BOl˅mݬhYhlj@.+)$'!!"##"2&($(*)&')*/[̭ʮtڧ_P~ûɬfH53DcoM.!$-5:;2-.77;;=;7629EQVC2+%$  + + &8E>;.3EZefjlmquuot}ury}{ǸԼԹɐbG89=R߸R* )"$%&&#&%# !+.*% ,G]rڧ`>5/&$&*+0:GztnڨdVkѯY5,)(*$!$/!""###)(,$*+18uΰàreveĴϿS97IhsY<14=?>:1,4=IKE8-+-,5CPSF4,,/1' +9960..+)($$ (!$$!""(#&).#(-03NǼƧҴïʿmLRd~hRHBEH=4,+29EQL<,!*7EQK>8>B8'$19<=:AS`gjpy|sjgcdfig\TZZI:1Dfxejúἁ]wĵ¼ſִv`^anu/ #"#!! #"$&%("  +"4F>2./-%$-Lm?3-'#!!  'Iۤguё[FQϮ]2)*&2&#!!"$ # ##%$"$$+27iű̶ʲw|q`UMPVH7)'(5=FDB1"4KTPNPI4% *169AFYhrxruxrffke^YWVMCC?31G@22=B6%-Tߩ^D<3+$"! 'Oڞe~MBSĄB2&&&)&#!!""#- #$$"#$$#((,1JӨwjcb`Q:)&)078><.(DXY^_N4###!%'&(2EZky}q_RZ^\PB?C@5/.0>YpʼͱҺëzYnǖzԆ5% !! $!#%&%$#""   !:<1(0?MJ8( >ڞ\E=2.*$%! #%)Jя`sH?_اL.3'#$" &#!%'!5##(#%!#'%/)-08^پƆYdƪvkeU<,(-5<<>6('E_fieV;)"!(02)$9G]rq^MCCLH;.-6;4/7HYiv|ƴ~ж˵ȷ~ΝzǷܣ@'" &%" %$$$$$$%*!!  $)+'/>IPI. :עhRB>5.,333235JʈbeDHkˀ7,3"$'&( !!&!$"!&#!(-%&)/3O׺ջĊi{ؼqr˾ź|k`PA,,.3@MH8$/PgwpdP7%&,4=8( .IcspZK@76;60&'.88@Pbmkivrrʸ}~ǽw`pƫķįճиc("#$""$("!%,'$$"'(&#  "&.4BIMN4!#-PװdJB>9H]idYPKY}g٨`BOrӷe5-**-& !# "#$'&,!$($%,/DoھٿѻDZn_VM7,.2:ITJ0! 5ThtkT@-'/=CF7" 4MZUK=2./0/,(&/:CVlupgdnponuuyʱnxðrboȭԼϪt-$#"""%!&')*%&&'-'(#$!"".5?FRcaND7+&-8LˮqODDTxzvuoڜZEV{Ɇ<6, )0.,(-9EUn~{nlhVHNhü|torv}н̺ϻȟԟŻ{2*$##"! #*'((&&'',+*.,-(*2--KpeVG:IWcǣiTKZIJlrӓZLW׫P2((-#$%%## ")$#&%&&'*)/DٸWNadUKLJB>9/3'!1CJJA4,,3:@7,'"$+0-+&&  %'')2BO_u{y]@4DfŽhh`QUdͼȸ͸’߷Ս>' &! #"))&((&(&&,%+,/,)')*/7`ôsޮxre[fܥk~ljUMZ};+&&%&"" !$%'$)(0))+2R®}cLRjsc\YJ63,'*&" -74371().45'$! 13.% "" $,9FNZkqO55LmŽij}vtx|zeJGVtĮèíآM+&#"! "&&&(/&$&%&.(+---,.1/07UúלrbgguۙfxNGUͤV/#!$"&""%+#$&+4:sɿȣjOJHOgui\TC3-)+,+'+'#'.53++//+(%)$(56-%,63('% $*//-% (6FKLOcjTDJcr¾˻bUVirotz}{¾ϾqZ`Ͻÿܼb*"" $!$&%'%$.&&$$'$)4-.12.-08Oܦs[\pԒk߸mGCTs?'$!%*#!!""#$$&&,,%/4H¢٪Ó\EHFK\g\KG=33443147:6>>?@@>ESbpnjkxuy}wrtuyu^Pe\Thxӽ«og_i}Y+!#!"#!##&)'$%&##("&0-)/0-/3H͚~perDžrڪhMLiȈ<&&" !)%$%&#"%%)/*),+2VƬȿ̹zYMKWijXC41953?HHB@><:1!!4:2,!)?Sac[LB;=DJPNPNG=>BUi|{w~|v{{xeI6=Maxyu{|jO:1;RljYWq{lgevɷtwĺԝ@% %& "$#%%" + #$%(2Aཕldz̏WPb}7**'#%!&'#$(%#+##$$&+,3M޳XDWqF/*+,3GRNA;0'-.# $-*& !!.EXks{zdM@@Rery{vreYZee_ae[B/&"&/:93)!(+,$%3>NZ[X_pypcUH:9=>EM[_a_bmuR919K^o|tffbUYdidjmfQDFJ?2/8?TmȶͻȾĿ½ǰҼ٥A$! % JѓѕWQl{H1)(*!! #&+&%)-/%&,8U̫ηһnI7287+#%(09FSO8(!!(2;<4*"&,&&3?Rbjeer}saYMLEDPanvfcWRcw}eB31;J^p{{qZLJJHTelqrpeYSTM;47==H_ƿŽδƽŵٲH('!##" 6ÑӖ]_~ٜF/..,$%"* #'$*/&(+&'&.:lr|ɿkSDDB7&$,7GXbV>-# #'1;7,#!%&))017D\ea_oxqicZXYVfl_XYcjt||sfTB97:GU[fmaE215>L_jomd]Y\XI=?GPOGA<@LMC92696/3/+#&*:K[^e\PVUP\gbXasƵɻųЄ6% +"  "]؞ݶqe˃=,*)&- !""  "#$0$#"&())17_пʷ׶pL*!)>@A=3(*/;99Map{xlejr~yt~ѳ}pʾƼ¸¿Ϸ̻ڮM,$# "%%$"///.%!(dć֜el͗E1*#""!"#6# #),'%'#(-17jϷŻӺjS@',6B9+ $"$%()(')%'..203," %8P]o}|x|gJ319A8(!)6FJ?::?=91('-8>CL]n~xgpɱ}Ƚųƶþ~ztrǸͽ޴N(## %"&&)*)+$-aϐcgݺd3)%$)$%!""$!#*',$#+$)-2HΜwmeVMP~ȯؾŸ\B5(%160&"  %+('%#!"*+(+10" %'.:JQ]n}oW@DHJ>335>DE756=8/%",5;DTbxwyīesƮʮŽxtuxðe,$# !%%%(.)))#-LⷂʋX^Β:*%(!""!!*%.(!',&-).#%&*/C\U@712GwyƹεųV8)"%11&!)+% (04.,)#!&)))05'#*18FMUYeupWGJGA@BCEEG;.,471%%,16KjyǿaIZѽŧyinƴ¾wvxŴ΄8'" $%%.-((.&->ߩQTz۸]0.*)$% #' !!%!&"%*%5&#',0K“kI9.3M{ƱyaqཤʲzR4%'62)&50'(19>=<5." $%&+08=/'.8ALWXV_mymL>>=6@KLIKE91,/+%''%*.5@\x»»ѻ[DXͻռwp}ɺ}}x~žٰQ) "&&&'*(+(& + ,9x٣sKSsˏ>+#*&-#!'%(#),*&-'*18iϲqWHH^ɼͲjwӹrR5"!*88.)%')7F<08EJKIHC7%%/*+/=FHB>DLSWXOO_ysjjTC;58GFDDDGB<4.&$/10()3Mlsipx~μjWd̹ͱǵwsrx¿yz}j+  #"%&(,*'(( +)5eқݵlNWqڵc6)$7*'$"""$&'(&%)'&(,)+3Aͽzt˿ֽym[G3"%(789=FJNYbPA>CLXZTI9$%1<;99COWbaeif^SELl_]jaP>=HPIABAIOG<,,1<@:0*/Pv{|upd_]aiü±}`aȤȭsmt{yĭqjglyrw,##"$(-%-( -9T˓ԜbSYvʼn=+-(:%$")!$$ %&$"'',2aθӮҽ˳¡}dMC6(#!&)06EWfwztnVB79BV^\P9,0DSQHAFRfx}uXJ]vy]V_bVLO]b[RNMGFF?97>JJB8.7Yog_filcca\e~ƻwxս}_ƩnhmwҽhTVbnx{|/& +%($'#""! (7G潉ˆUL]ױR1**$/%%) $# %#%0$&$)//Bзxt§«ƽ¿DzhMML>-&)-3AUbv}pfS9-)5FTTH<5B[kgUKRcvnjr~}pdaWVUZjorl_UF<=BFPQVRKABOakYUbuyuroϽ•׬нjdoyɟiOO^kyȼv-#   ".=u㸌zSOdώB+()$$!#$""$"%&&$))456bjQBBaç}ֿŶx[clbH55<>Pkv|^PPN9+$,5B:45=Mbh`OPbxztlhu~}~|}|nTPYXTVduwgVC79DQX__]UPRVYWOTiu}ҿxfisȾ¾ƯɹĽ|w{}̲]XZguʸʶ|/"  "4]䱒rGLfؼ_8*&")#!%#!"& !"$%%&&*++,CʰT310LɻdzDZx|cKFGGQcs{gG=DF>20122,-2@Q[]OCRnxsld\dkv|yw|tmpaML[YKBWrxfQ>UZTF?Litjjljgmx|ggpk^VL?GSZLK]vycF8EV^`hlrrmbNG<>Latv]cp˽wiuyyͻļͼyoPWb}̿ʶ|ڭH+    >ᩣ۪iLVm8*&#&$% %""#% (-+6sÜoE/)1Tθ˿̿|XC71)5HjucG5/:CD>1(+5Jb]XHI[pvljty{w`[jbG<741?MOWhrpU@?QcmjesywhUMC9=SjtaLUlDZmh­±Ⱥ{½q]di|¯ƾilλ۶O+!    + +#P~ڦӟ^RmҥD,-$$#&" %"0!%#0"#*,-AָP1(&3_ιxr´ʾiJ<5.-?\wU8-/565)$-@W_ZSMP_n{tnr|vd]jaF6/(#*D4((09JVagnsdN67KYRJM[p~rb\YOWp{u³ĿrjnyuadnǭͱwcPScu|z|ڱoNfҚ@(#  + +A۰tSFDEIJOUJ?=:@QcmӰˀPMj~<3*,#" "$#$# #&2BȫraLOzؿçƥj^v|]?1/.+.1@RbsynV?+  (9DPWYUO\gh_\r}udRKGB=IUZG1$ %06.&%.9FOS]f]B2.=Qa^RSf|l\TQgĿ}}ɵгʶ\NHRbio|hjklsymq¾׻{LQ۴Q("  +;}„H2,+(07653.,,,.45IjҼyHDYۭM3'&'$" " " !$ '*5Wz}ͼϸƶúϦy~tms^C+ %',,3;IbvqV9''4L_ca`_d\UXnuk\JD<9@Q^[I2&#%''%&%0R|υ7*$$$&#"!$ $!$*.8fǺźƮęu~k[<(!%-1) .MmscF,  !$" $*5NbmsqlgZYesqgZM@9DS\YNA-!! (2BVY[bljYC/).BTo~zy~}}~mOEPy̾ºúӶÛwyxq_RRhscPPdotxd`]ZVNKKR_\ezžv-$"! !  +  'WόG.' &''&%$+9Y٥Z:?ZسM--(&"!)## '$-344@uøʿ˸ŮƲ\HVɯôtwP:37FH6#9W`YG8//-*(+*&)./>M^nvuymdm~~nYJ8;WkhXF5(!#7MahifswgRC817J`ytxõçqklmy{cGE`ȼö۽Ͽrigh^SVr~hM?BL_wXNOPPMHHNW_qɹ|1%## %$")/!%$!"  OΉL/% $##(,,'',2Cg֟W6Ad̊F(**#"&! !$-0-8kŽ¨ſлɲP7>:2((()..+1?UlyviuyeL?FSlɿϙ@)$$ #!"$ '$")(*#"!'$$2zДV7& &+)(-//7;;:747>QkҙO5Ap߷X-*,$!!"#'# ! $#$*59XâγeZeƸ·”kJ=_ǿôupro^B0&-95'!$2BD<-! !'.& )5Nl~qy~mOFL_op_N1&+?Pc{xgdi`J:58=L^uyz¿íjJD\mo{zxo`Xaa\byxtz}zw}ûλԿV>38NsmI>DPg}\@1&!+?^x̷ڻ[,"!$ !!" $*)+((-*(&/1..0/2-2A\ỂR5,#&3WvqVFMkǁA3F~2,#!& &""!#&!*,9`׬uqǩg9+=q¼Ȼ̵ƶнȚƪxrrgURW`]H0)0940060,)+%*:Qn~wqu||h_pvpsrngT>,# "8Vh|vlaRLA;?@GSgw~{|¼gJEEK_kbggooVGJGHTozngijpμƮͻ~}T8-1@i`QJENoeB.*?Xq{۶l0" !$'+%&%(3,(,0./02/46@YџfB2('.Gpoett@6Jظ^.)%!%!"#!"$"$#&,,Azٮơc5,>vzzÿ̺Ż~t׷xyvvpoeTPf}~gL?HF4+19<4-. -=Ytwql}|t~qr{}o]F.#",B\n}zndXE86?FHKVl}||y~rWKKT`g]runfchfTFFCBQwsdfmnor|}{qod?/0<]saL?@ZrL.)>Qfxo|̼ʳܸw4$ #"$%*)('%.+-0/4/./-66:DŠZ@2-.6O}ư۵f?6MқF.)##  !  !"""+-1EݺfA=V{~bc¶Ʈzp~¤̿|{wuuiTQozhh]C18CF91+&4Gk}zkjy{qnwteN9*$!8TktutqdV>,%.L\lhpŲܩj0"" "'&&()'&+./-.1/2-778Fjvqeabhgda^fyxvnoqr{Ų˶Ͻijxc`qa=4Ie|a<)!",9EJP_yhlʹݱԸ~8!#$$(%#$+.-,102120047=kӨaI8329SқV74F{جN-)!&""   "$!&%+39YϾн\AUuqRHVm}ø͵ǹrefhrjabY@(!!*6@VftxlWVn~qdahfN<,&'!"*1DeuunfZF1$#-6bthggemmjpr}xmtvphmðɶι~mlqH:=VlO@@I[{a?2423@NOON\nyhnwȨճf) +""#"##))+/04,-.5469eԱaL<9;A\ˈF65NȌ7+$#!!""$",$'&8̩mA4OuZPfy{~ɰʺȳ¸pjlusźureA& (9B=EQ^e\OPb}y_RU`VA-! (04E^oxs`G6/-*.668APWY]aj}ml|wlmmmwe^gjaJ4=b{unhf^[kxxz~opwyn^R^zž˻Ͼ|xV=C]~VB?IYvhODCAFS]\SMV`tqgnsռ߬wǔ\6 + $# "%)*...1257668JӨ}jYJCEK]ѷwA2F_oyztomh_QOmtdiwwlZKMh˶þbKNhdNIIWmjXNGS`hgYQNVexxmjnsʽӺΈTTТ^0 +  "&%+++.-1042/5>Lʝj[NNR`|ԣh:1EfΜ?# $!#$"$0j޼uB9Ov˽̼Ƴocmw{}~tWHE@=<41,4?EHQo}_J@?<2%)4DPVbh_QLJLD<:< +$$(*,0608:;Kbsxrwƽ͹ҷàީ[2*2Wݼn2  $,0028Av¡shfl|ɛu{߷d4.@iٯM1&"$'* " 8vضx}ι˵Ľ²ȹÙuöpVXk~{}{eZWbyvptk\\^WL;.,2>CPmyY<(!"&"1>K]`cbQ@?Rc]M<4;N^bM=FZ{¾¯~uuxrlgZF?8=^yzodb|ufWPJIJQ]cb^YWh~tsmpDzžùqvdWWYlcLWdW\w]GABJPJ:426Ikyvrs{«ijʥӽؚT4*+;`߷f. +#(//4>_ph`lٶnܯ^2+9f˗;0* %&&  Azʲ¬Ƴ̾įлαkptPL_{pjttI86F^aRLTfrróͽypwznULTVMHG\xu^IIFCA>ANV\Z_qtxxtžyw˭}xbF(.@Zfsvy»ȭ˻wh_|ͤƈA"(  +  &.67CsЬZNGDEINR_{Z@9Ch㾮k:7:V˚>%"##  + !!Fkm_^wȶιƶоմzqƸ|uuoa]UIK\l|{maNLPLC]귱ݻqKDI[п7-!# ! # 4gpohvǽƲӼüʫϵqwȽt_JDOble^VMVaSA53?Ti{shf]\dgVE=624GULHJPLQ_jZ@# + !.55/-670#(4?Pkz]FGOUWcv{c_rukrtoXB>B@@AJiqjbejlnnñŲt]^{•Q1)4WɶbYtäy`RRXctqeO<1/,.7Qt}ЭŶtd\Ѽ߿z:!#DnA!   %.4659@UmuhUG7,7I_{}sbN9*'Fjwp]QNPRG4   '+%).1026DXkkYFCQfqqfrztrZ\jvt|{vpXNF:8@LOGDMd}yzzy}İǯɴֽqp¨aUiμs\Xeuxy{yhVF;9Ke~vٵdz}{sv֬oD-(GRez}l`WA2VڳsNC4.15>AFHHL[efixЖR1$ %/GZm}qV9) 1ӢymflwڻrBFcʩH%$##$#"$"5kɻʺ̯нӸz­ū³ûü\;9V|jhzie`Z_jobVJNQON[mb=,/?D6.4>@5/1EWP@57?HD:?@81*0DbxcZpi]emgpzu}vne_clrgdc[NJKMWZXQR\adtxnWDKZfjkĸþ|Űļ¿ͺtTXpʫ{WGGSekmiSP^jzŨ^OZhw͕M0#':XvQ& %%),342--44427:Eқ`>'#!"#+1..6ERWfګ`4%! %/05@IZb[SH?7,$)߱ܤqYVjׯ`>IvȢB'$)%!!!!Sս®Ϲͤ}tͻ|̻mOQp}cpuag{}dV\ZZbmqiba[QDVsd<,6MG92@KE4*1GWVNGFFB929D>2-7Ql~ggy}~mtxfVXd\PQ^aZZZZfmaLEN\iurfSMX^gipÿ»ͼȿ¾жĿɿ~edlt͹pXT`jmviIJe}sɷ{VThz|x:#4K:  +!&+./-0/./46238E֞[5" $*.1?VlF.$&""(($$'289/,)$%ٯ}p^\lרW3=d9+$!" "!&gҾɳȡ~ϻ´Ľ©[TwwDZoqmZU\qxjsrihouvojU@8Kta:+9G>:9JXH,'8LTSQNKF<45CHE:7ETl}|ud^VD=J\cjqoib`N<7AXpuo_Y\_UTe~ɬϹƾƯͼȱpmadħd[hxpgle}̹jl~w޵f0!$ + +%%)++000004238Rڲp<$"+/=Mj٭pJ0'%#" !"#%$%"! $ֵɉiei{أU0.N{2$#""#'k˭ѵʳ£¾õ}\V}wkqtllŵ}tcM?;R{rvzuiRDD_r^@2>H97?U`H-(J_mun]F79HZbrnWC5007OnudX\jhSQfjoåսŸӾʨͼvhh̹zlq{ɧǽy۳b0    + + %)+,012.113646EƎK.%2LױXA:3($$""" !"$$#'ѵؠ~rwӢV/-FF& "$&!A}ӷнӺſѴƽ÷{į|nTHKRP_~lu~|bF78WoZRZ|}o^WE:AF>9HZaR:12::?9;=2-.6<215?Ob{}d^yy{µiL83>715<3,-2:LexiXZt{pzütW>5;FQ_jvvZ;& !-A\vue]f|~hZKHhĬëзϼy˾ɻ}ł@# + !&)12./.4243:UÛtP:-)#1^ǸhPCCEIMKJHD9/*(&$&%%,)ξʍQ=;J|m,$)  !!7iopɧɾƯѷƻ´պĽƳmd`gaV_pr[i|w}pRJfeZrpa`_Zao`TSXVVadea[]ggbVD<>JHEF?7?A6209?Kj{kmjl}n[[ex}ƹs]@1*,-3IdqvpmkT701@eͱõƠx¿»ϾʵúwlxČX;+#!&-4.//.2126E;~hLA8<1+%#-]Ļr߻u@44Cl~:1!)!>?6496CoúɏnŹ̿ɻж¬ôξtuȱ°hHHHTdqorpo|jN;:NatlQ82@MReoiWMSeu}{pmjWD<61419G[itpQAJRMWvŸroe\K;>Sbkptn\?10514@Renmlpv}hNDCMhìѿƷѽȥȺɿͽɵoųrv⸮ؾnR@60% #/04//.444DŻvsdQ>/&$&+&#"9rٯa8-4Nn+"# %!  +39:=@BKrʰҭúéиɫдȺϹsrǸȻrZEFWgtmo|z}xtrywupZ>/*3IfyaD(!/BRaiZJ8;To}mXB4..0.4H`ylyiDwƿoP@89<:9.* #@ԟQ-*;\f, % ! %  0AJMPZY_~üͳɰлռĿgSDDQXo^bx~qwwrjk|`<,%';`l]=#*GW^cXF0)7\uw}x]D0$$,((3D]~aMi{U?ASagfqǻ~md\H;>FTeszb@/2IY]cjjjpu|rgyoWFCWľƸƩƹϱ|°Թ˸zruȸfTI#  ,./5;0025AwöyW>?L[ftzaB11CYnuxp`guttxP3/?eҶѽſƫζ̻tlDZŷpnv|ȺS  + *--472044>oŰcD=7./% ,fʅD-+=j@%    + %GWjttkR?>]ԹŴϻҸfH2,-126Mxmlr}yƝx¼idew`<)(?ms]]O1+Leg^P?&%G_XXadQ5&%.*")Faqt|cbô~pZDIdʾ{nXJN[lqvkH81>Th{k\atwu}}T71A_{uǧ͹t}ueqɪ˸Ͽ|cZpíڶsZZp}knƺw(   -41.-4249;^çcIE@0% *`ȅP42Hmu4$"$!!  + +)#1`lhfd[LFSrƳǯŲx|ĸгdD,"%(-Mdy_\h~ð;ʵʺhViõͺ|^VkijգuhRWlzlTaň1" +   %+42.+20466I̽z[MJ8&%;oʏU=9Nug9$! $#3d^LDFGM[vλ~¤IJtJ0!'&.Q{wmyl|hpbc˷}iviNI\y}{xlT9$';^uoL<@HWpp`TY]RA1''#%0Hg}nYaŨZ::Oiwtq_T_kQP[ghoqdbrtquzeQN]n~tQJQg̿Ƴǿnz´¦bVg¼˿ڰ{qiios]Pfʅ2%! !$-(//6:5.0156FjúmMA4%  6]˔`LI`{K$#" 6g[A48GRr͹ҸαZPożY4)24>h|yz\Ih|jqÿ§pu{ggw}rhk{s_H49Vo}V?QkyygQFT]XF94-()2Be|M2:Vtqmh^VffV_lqu}wor{pq|uaZgpzvNAFZpʾʵþŵŵĨŽʳtblŽɻtlka^͔ͭ9$$  !"%"%&%'-.-70.692767TǰT6'&AzΘlYXp@% +Bh\E9>Hcδ޿ØvglʼȸɦvSMk´žaA?HDQxv~hDDPukZ[tl+!'#!%  '$+Uϳ{lrxrõξεм~g\b_cr{g_c_WgaIDFWnY<4NbcdaO:5PoucZ[drywg`ejkeUQM77DZrƱu]Wd{aNMYxue`ryjelxwvxphVNfgQQTMVzǻzȫǵîzhahylgpjTWŸε}ƽǴԿ{{t{ܳɆ5$ %'&($#&'+$%.0+)+.472228-27=AfĬl8"&1.'%&*-),-)**/16>Ii}~ٵw\Yho-#(%,!  ! !-'1YƾmVYpluŽнŸšfdkmmq^Ul|l]Q[f`\bH56FZjps|rXVbcVQWTEAPo{vrw|ohrukf\_^RQ\lƵuin~lg`_dlf|bVavphre]^W]okcn{g_VJLry~ϺľҾeWMV{p_a{dPRsĸȭpoӽ̻ϾΓʤˎA'$$%#%#+%'())-,))(254724>0228D^L,#!)4C?10/66:>>CEHIKQiє[JToa'"&"+;wǿ̲{QH[rj|ɿǮ̤Խ|o_m}yu}|ogxdIACTktvž`G4:H[gich{{|ttlR@DS\RMQmuourihmmsy{ȵs]XitjrpqtZRbz|mdiygD;>>WqxuqkdXHMm{yξҿsQKPeu_bbW[rÿưjk{Կ̬tͱĹyvע`HKe͛@'"$#!!!"&&++(,)+,01460.3226<;id8$+?HWWHGM\ijqz~OHKk[&  &!%"*7|ѻ̿xXRl~̷¿ΛֽldhixhE>FZslN:.:Nemjjiibd}t\;7?O_XNObq~xyjcpҾqTINhxsȴcTSj|dY_i{x]J@?AVw~fb`UZrooԺҺoQNiíonƻp`fƾĺuoͼrixͳپq_nsü֟b]džD2/HΖ:&!$%#$%$#'-.& %,4202642,04137=_H+)7NZilkxüսzP@=UwE&!! 1 $%+BʯµywrtƮպvbR_wUNSbqμdK>50WU*!%-5C^康߯g=++FR+####!#%!!! #" '+1[aLOhŽ{pcdtлʹqSO`fW~λнô{xάtH@FRX`w|kZIGP^zȻȭ{U]fp{jje_R[{{bL;6HQ@A]y|iL>Fd̺pQL]va9)&>evo_Zitz{{t¯f`ҹ|ѷ×uɺȞδȳ׾ȳޤqZv٫lHDX{ə`Xwt.$!" %*0.4155.020017T{O( (/Ku޳ԟY6,+;1( "!"$!!$ !$-'-UYP[ʾyrmq̮ƟvQ@DV{gaʴǻϼäyO:6G^subWPPOIPtĺ˴rv}n_WTWjwedryXF;8@D1.AZhx̰wYL@?Qh©P9:QutT7.-Bgurnt{u~˷ʟgZҺϼ£|̻ս±Ͽƺಁr͎P6;T}ֹNGc0,$ &  &,+,6410-040,/7JtQ)$)?av{ԬїT7++A8#! ! !(-!$!#"&'-9iriqòxqmvѲǜ|xsH9:Nsp^aʸƵgN?ATrigx{rZMR_Q=DjȶwdUHOepP@DUltREFB<4()1>WxҼxxzW>539I`y˻|J88OxtdZC46?Ypt{}yyչı²roŶŨɸöռάs<)&8]ϣgA@Y7!" &# $*-.23/40-0./02DqR,"4L[]SRRUd{ļбѬ͐U6,/J?" #!"!#"&,4Zϻp\\|³ÖulwlB33Jr^JSyŹ¶ªӻrZIAMmmW\pukUDO[J8Ahƾqwľxgbb]OUp|]>7AV]uzZRPC3)(-1BiôuYfwI7424=Xr~³aLGZ}pXJ;07Iety~uzz{¹ȽȺǸdXuǮȼ||´ֶѺһx>) &@|ȓT88TF$"!   &*--/09573.-/22=lT+'8IE4--+1:I]edZKHIIKZtɟ~qixܶ~vĦɍM1'0L9& %#$ !$.$*-4a§|tdPU}øʻϹmgqlC14M{U>Flqyïxοʳ~cTIFWkx[TcogT@@;7TѤrTUn൶zD,+9P,!#"$!&%"/g¾ʫtydiǸŦ{YRezlI4%/W|Z>4DrdKRtq\jͲηy\KDLWgh]KF\^N>:24>Rarſ{tfaaSRh~errWBCYvqjjseG50Dj|żwmWMQRHEKU[VJLhľ{}{sbVewp`XOVq}dOKXdsyqbX_oxqo}ywxʾþ˳r`c|ε³γtq}ɶĶyϘذe5'$-Gkomj`eW'! !  $&&(11220122,04:HdTNRaqtn]H0&$!" #''%,c̟hC/-3FL_|a(  &')+/317/2104235MgN<61)"##"(YֲlE5,.6LmȏZFBKqحb:'.J]3#$   %SzƹlÿlMQq\7+4WrE()P^ITveQOaûiEBTy̴ÜeTKCLapyiF8BRWPKKDGarjdWRKYwzp_D6/6BW_d^abWUh~q^OA?@DDJ]qιW0&-9=Twyi`XPVlʼ}paJ>1&.Pp}d]grwl_SLZux]@0+1=EUthQNUbrdQJMFD@>Pqo\Ua{̹{nruu}Ҽ˶pboýͿiblgTEQaΑH$-Tr. "!&+,/.024--22228Oĺ}\:-*$#%9f٫\4)%0MצZ2-/4GtɋF*(4`Q&##! &Uͯ»³­]7,>rZ6+8atX]{ƹnagy˼ênH9=L_jhs}uuyVYfX:-2@C>Lchf^N>DRhle^L=Ka|}dUQYpqaH70.5Fd||sk_\f}˼гǵwjmwŹ{jjn]KTn͍C#2\n9  .'(,./27460-13115Eķ{`QMLWm֡P3'+6WҎI+&*2ErÀ=%$6]N($$&&$ !$#*1k̻°´lG=T|zW76Kqorjm{ǴƾòjTMSeyztyžvjggT@77:FO_c[`]I?CS]Z\\P@?FGA7;C@:D_ȹěa9.49@Pineo|~p_@! #>Waxolipu}ygQG@CIQJC2'(1EVtm\SW]tjI7*)0BbxnfcbdvumƮűµұŽ}km}ūžseoogj΋E$1A!%').//560-02/036CͽʐN3+,8`Ā?+$'0E}ٶk5$'@^3#&&'"$ " '2DȺƿƶswoTIZzwVDHbsvplyıų``jurec|k^eif\KA@LXgmealePGLRTRVUG<?:>Vym\XVS\ӾYC@BGO[q}dTOdw[:*EZb|{x{wcN@HUYN@90(*/:Sv}aRLHR`ueE0*(0Mpxicafrxȩ{t­ǽͯtpݸ˪zj¹|rvz|ϚW* !(%&,04,23//100159eÅK2(.8bؾ|D.'+1Mղ޳c3(,F^-$&!!!  !!$%+9xqkrθīxtzfJ@Mp{]QUqsWHLeŻ}qz{̽ĽDZ{Yc{s]M^ùwPHQ[jmeX\_lxkhwmWV_a_YWO@69F=,%,:DFHYx|yyrkyȽԻhXS_emw{{eK77OtR6 $:RaljYHDWom\J82/-1+'.;mH3+)2V¨ث]2)3L\0%''!%$ "&/9qtgXTaxʶĢ}y^@:HjePVqe?/4_ʵϻĴɼƱjqntjTIgôiFDNayzoiuukv|i`gwun]LA:8BH<(!&6FPW`rȺ~vVVq|gV@24R}~eC)##,5/8H`ru`JOTYaogD64;BXztsr}qmoosο}϶پӷ}sjlžѫŽ٥]4# --&'*0.-53242/-5-.0HņE*%%(:{ɍQ8/.5`ԤW2(/O[/(()&$ #"#/IX_gb]MB@BX}ܿyxrR>9Op_IMni=.8eʼͶþ|pXYpw̺dFKbx~yus`d{xbO?;CPO:)!$7JX]edtƳƣ{WZ~p\WJ<@`{yhwyymbkxsV1,0X|yXCQx|RCM{IJʼ~}dhqVeweP^ÜmQa}{u}|j]d|q^LENVK9,'*=PVWQKV|ñŤ}itl`^UIVrrxm^be]RHOblW/&4BN`ortvvsxz|gOIOe|sVA@D[zubLDTh{|iUGCGRdfK63AVh}Ƴ˭ѼsxȰwYOmɷȳʶڲ۶`H<,"   + (&),/,20144705/-//BأN+ %Eџ\6-/:e}ˆI+(7T@&(%(&"%!! +#,28BHJLP^|ŮʼƸdHIiyTI\vguöʶĻ|o|kQ]w_Kc|eQWâ{orxkpmgej~qYPVXND=8?IRRIB*0I]hugbhosr\RR]ktwtl]LFOmyaMLXk|q]G86@L`kF,#*CZs¹Լȗ}“lpɱsͽʵʜ¦rUG7//,$ +#$-//.,/242/10//,)$+Fdk}֘E% 'JѢX/'1@htw>+'9L.-&&%' (!    8HWgw~վʼr]e}kP]}oPEZĸǸrnqfO]pwl]Wr{hi¸ƾxii_]aq|e_`f_YXRPOPHB92Abƹworqwx^abbmspyungVA/'7XdTKJZrZS]juxi]_huuja`cfZXe~e[W^g}sS7/5@Qh[6##.AXtżͶtͩέtʹƼ}´Ƚ㻋ƵzlZG7/( #-*)/++234200-0.+%&-8H\l{ҍE'!"3Z͔P-)0?hpݸl9%&=;'')$&!   + +-Tn³Ŭ|MAOjd\meEWdggei}]RWip`_kwtjWRT_loysj_V]rY;5^sخ`4 %<.(%'&""& +   !D{ǽ͵ȿ`=8Ia~}]ITl\A1+9Vzyù˸fdf_TOXZeu{iK@FYdlrytugZTcqbhsyeTENXgs{l\LToXFFGPkT84>BFNeżijȭ}|ͶèƹȽȁLBZskcVL?0 $*((,*+/.32000-,* +#2;726AN^{̎N6+%-Fuײe7*(08Z|ըV-%)<(!(&#"#&+! " -_Ĩuz}¤ñY<9ATmutY?7Fb`DFX}̪}YPa]LN]sĺȬ~mN5*2CWi|WHPq~wusl~gWgypVLGA<=N[Z]q{yt{rgVI>9>G:6$ '&&-+..,-+1413/.) #%(&$&+1=AFTUK;4/;[`OceI9=D_¡a6(&(+4ZіI,*00 !#!# ! $!"! %0TǺưhdsyyʽtQ<>G^~oN1.=a]W}y}jlqǠ϶sO0 ##!2\X?DQb{y^DLmraY\b\H:GJQ]^O<,-;iŬ}W@3,,1?l[5((+,6b͒K/,4/ ""'( """',cʱʾŴjJFN_rlI1.9[lh|~ξíˢҾa>*##' )KxtN;BLQi{twkPK\u|h[\WZ_YIDNg|yV@57=PiwrdPD?Qd~hKB>IvʱɳqZ\ípK=CKX\trr|qW<.&+*(<{˯^<-#"2DSH0$##"4`ƊR@<<&&!'$$$,F´ƵȺ^SYihD;>G^tgtjoijyiĸӿX:263( %9P`bYF8/16Yyb_`e^RWdkbPBDFKZ^NDOkb?) 3LPMB<>CAHb~S6*'1XüújVQJFP\guf@($.8FWY`}yUD?A9FSf|iRJZxpQVlörWGf¼ͻzP;9?3"*MZahqTFGH;>GME8<>CDLNC6Beywpmkicded\TD/" &89+"")4KXqw[PQZĻsT]bZW\^etgD:?JV_howaLBJI@GircYV^dnoYMNQi{p`YYYcx{qyŽtRHRsҿνȩofijytĭusv̻kb`zā4'""! "&#,&*.**(-,/-,  +!8oʾf[Q;4Hҩ̛j[SB8)!DܺuD24%#$!!!! " #)8zVA( 5m۬c<04%!*% "! !!%'/JǷwO93>Yuȭsnwg`pʴ_@A^jD+"*EhzeG9J~RBN|i?1?_ʼ¤y_PD3((7IYejb]]VOWfmpmQ4#/7+&3?>/+/14BB7-/H^[F1*2Eaki]J7,&(2;:/&$#!#5Qe{{h|¼ÿɹ|f[[f{|l~½oqllvxkaa]N<59FYpoaXUV]gixĬxg\W_kpga_TKGWyjWXa^dlpuɸj\]pӽxųѿkciyÿ}||žog__]róٱfPHVbt|ghx3,3Icyyrjh`ICXltnY>(*-&#.::32967FE906BND3&"2Onyr_D1+(1AJ>*$'+$ 3Nmvn}g_r|l»{iTPXTGGPPE=;BQkrXPRTVajpĹp\ONUcvwljh\IH\_NQUX^aalǷ|miȬgjé{ı}jbfzDZõ}yxh\Z`lŰۼU@.(.5:F_vvYBDQV@34;Sxn/! ! ""(&&&,,/,2/-+ -A͵ʭP3*!&8SrdžC(%!!! "#"&(2MƲQ;>Lqֹslu~sPRoždQ]kI;Ir{^QpuF/Awr<'&1TǪqL65>K`|yjhj[A7I`kaC*##"+7938B?=HJC>@>A8(3`gF4./8II7$#+1)"#3Mu|}h_wȽ˿pbwy|bO?44,(19=>GPaq}^NNTW\hy½zWD;?JOQHBA6&8ekJ2-1>IB0&)12)"$7RvyN>SewżûyousyxT?,(37:Pm|bLCHT]bmølN?6?Vryyzwmae{we`dtxnpw{yȶůp\fqgrøxTDNlʹqbeelþxL3:K_¥ã֩ٳwK7+.-))$#+-(%% &% !"# #$&&$',+'+-,) $1>dӱ^Oeɫ\=#!! &*18?X~դ_2&%! "  !"*Dȳʶ|ŸiL>>Oowkoya\bd>99Gt{iPBG_ǽȸN4>`{sZcxoL44@M@*%('&-*!%7?25GRRHD>2' 7biN5,6EI<.-/1/+*/E_usL>EXrõujhgwmnytR4.I_x||yv{ulgcdpuhg~}ѽwjvtrzdNL\¿jh`dĿpE5;BHjְů鿊ˈL2($)-/0'+0.#$$$$ " "''#%&,),-.-+# + + +"-8KĐ]?2DtԾtH/' !%$$$%%-5C\ˍH/(! # !"&/UԻýƹǹ˾Q82+4S|okqLET`@:9Bl}s`YhkP^|}yN32BG6$# !&*"&;KDDQOG=70(!&@bqrdRG6/7FE8.(*226430/,./%! + '#! )+&$'*&,-/0++ -0D׳m=+%/Sϴ`NB;320(((%"%$$%,8GkŀG1(!#!  # ((:FQKP]irƶwi]Xoûž~}zn\JJYp{uT@EP]p}wmD$!+6EOPZorYTVbszzmQJGI\¼qkx}M>N_fk|il{ȻðuphagŹsckkuĽxmwtqĶkQ??SxƼ丂ԜN* ,6IVZr~fQB?==<3)  #$#!%%()('',&/.,5+7JРZ-"!%B¯shQ@3,(+..'#"#1D`ljO4# " !&3nǽ{b¸įt~ŶhBDNFGYrucRVsRF[i\RZxaeƶpajfE'&!#*7?01Pfph\G3)";QL?80*/6A;6+'$ !)3BCHF>KX]hxȸwrpźz|~ue`dkZK>AOTOB:@Tdo~|xg@'&/>Paeal}jY[_mvws|aSTT\wpZ^svD;NW[dxxʴź}oijpʸsXXct¾vgg¾_FFaŶÜЍE% $2GnoTPVNGD7'  &&&$(*,+(*),//2'"*4JŊJ) #AĻ|^G:996.%!""/GɐR6% !%2vũ|l°ktolg\ceGP_^gv}wYJFbka|xa]xu_gվ¾vL(&#$1:CH4"4QeaZXH5* 3M\F2)&&-3?=.&(("#*;KOI?50, " &&&%'(-*/+/22-." )60:ͧj;' .gj[N?0(%&$(8͚U5$  "':|Ŭϵs`KLNHYlMQ`gwRB>^Ȼë|k~ȽʼR+*.#".>HQI3!2ISRPQG6)#"1QhcK2*'#'3>?41792.9DSTF69GHXluoƿķz^TIGLGE<5.(*299CHDGH;$ + !"#'%*+&,((+24/2-,&# ,)-;cսL+"%[Dz}^?/&*(,4̔\6 & !!#,WȤss{¹_HNTTkoMJYpWLNr¯ŴżȶͿrzX,&,**,:CNV@)*;GTWTO>021@Yr|jK3.&&&09<@D>1)$)5@N\lxweM;320Eh|iUNLOQUarp]_hjjt|`XRNWhzyYXbui\`}xx_b~ɾͺƩZKNQYjufousxy||_Wq㺓ӤݰjNGQwΥ^<.+8JNWP@,  +"$ #('&)&(,+.-.40610/-('%'4dƮq>( !/zҾnM;204>ÊR6"$%!!*]žvehxĽqXWdonLDW{cZoĶ¦ùԴȲm~iya6),(",6BISX@%"%,CVcebUFCLdzjI3)&+0456DWgiVHIRQ+&'E̳s[OO]ۻJ2!""!! !'Pչlr{{ZVlnMHYqpƾyµӶƨy|zP:."#4IPRWV<))'#'>_ty{oa`nx}zwdG8+(7IB67G`lfUHPZC+#!1G\uzN2/8Qiznjl|¸ŵrtmaZZ^Z^V=('8EVepjF88BGNNLRjyR>9>2874.%&=|לbG.!$!!GӶлygmzwVRpvl}ƾygA"5JJA71*-7827RxpYJC=6:Nqo\Zcsoa_g`F0(.02Ju`>.$&:\ðsuh@/3EZry\A6@O]_WT_ui\Y]]_hyoMAGQZ]YXkjI;>@;7, !%..2A]}bN<844Bf{pis{xt{}kTC=BBHexbN9*,B^Žãreg}|aH;=DYuzniXE>K\aXNQcyjJDO\_ggOFL\jnigyx]G?GJIK`{opzfQLZldQKOZdtͺ˹ÿ;wÿɷl\WcŻzum{qce[TYgz_Xbxy_Ǚi^pʫuE/!#(&*(')',./33534005/-&09cXA74.*)-.'+VS8" "*]ηywcRZmüwsbko|ĻʹðƺxbU>&*FSL>*!!".E`jYH:.(+Hp{njp|vj^\`i|{klmkeZD?KZzȨs_[wtaes_SJG?Uq{cVWQGFT]WNIO_|bIDP_gwcRG>C[qyy{\KFHT]equjnvpXW`paJFLVeytj{ȸïɿ¬ws{¯mdq¶ijzxe\J@@Fcmhn̶Ĉ|޸uHHZγN6" "$$%(-+'((.02044411010.4Cf\H94.)*&! !$>x}S8  %Iqi}VEGbļühTkpfxŹ˿ѼƯnaS9!*?_qqZ?.!"0H^yi_WHD<-$+Ltwgbhn|{z}ycPO\t~hYXmĶza]o}yjZOG>:Po|jQIJOSZaWOLGM_|gWQYdseOD>8;VsiMBDJWjjYZgweiy{a?;FLVjsheyҽȾŶ|{{tjqwȼʸqOU|l_F;::O{xuƚۦd>8Df̮U7" " "&(&()(-)20/24352302039EldWA::=:6'" "!#.>i޶zR4!# + !L׺ʵrpôtZJKkƸ\Qshk}¹­ŹɶvWOJ5%&9Wm|fF1(&2@MW`lnzʸʽr|tobg{lvsZmøëmGIoópj[L?BPsȞϬۥX5++AsśaF5%""$$"#&(+(.+034441451.0569Bww`PZc\Q9,&),27:F]ڳsM0(!$!  $PϾ¸ãyqsvĭtfVRZʯ]_u]jѳǼĺcIAC80;IbxxkYH>BHDF^zaagYD9A>7AYiqfamwe[XJ@A]ows^VfƧ{wýurcPFGBBH\jaL?>DNPJFFPYXZlug]YambJB>7;Lb{aG@IRaqn_^ck{rljB69?INUep{±±kV_}{|{wfe|nqoXhȽ͹bG@Y±{{tcQMa}պ٤U-"+QѾP5,! #%&+&(%+,--041131/4-/46LhLDBJcxթgE!!" !&Pζ˸ŰbevxɼvdUOeƺǡum~ƺfThϷ̼weUC7>CHTanuhSRTRPPXZRM`|pW_eXK@BAOlxjixze_aQPZx{reG3<\ųrh]Yr{uj^JHPSX\df\H;@OWI;AIWdlwzxlgb_^gu}\HF>;CYqtS>8AMcxk`RNVg}qM<:=DHReqѸ̿ǾdOSsti|o{}ikʽɻxZKGTvbV`x־Ľ۱`3"%:Ri̸^5"  &"!!)$*%&+,/0.21322/2320/5Zǹќ]<!!" &*eå´ƽxt]Rlʶ;fmͽpXmſƹh^]RD51@VbgmpeF37=:?Q`g^]kl\_a\RTVTs|{ymmkceqyb@.0OyľgB@DKeybgeZVS`ntuoe`QGN^eSFO[hx}h]_b`et~l^PLDFWq|ZE62>Rj{n^PHH\}w|~jI<657DZpzyyűʶ}_TepzlZjzƿ}kl}ǻw_SSVy{iYTby¸ŽvD,"#&-4>MjɾZ;% !"')((,*,-.208351603043HϒS,!!! #$9˻űĸztʺɼhtǴ}ȾƽžƱǶaZ\L:.4HasxtjT2),.2;KYafkxhXbbXWcpykmrrwuz}lVFDUr˽S138B\}dTUZ^^blyywqg`WYaqrfcfo{mWKR\_l}sacc]UPXogJ;68I_w}gPBG`pitssZ>2,*0@YrymcfxŴ¢flzafŰu}dLVs|ɵsdi·iXQRpsk[TYhyĿĆM4&  !(/BZo|^H9,"!!&('&'#*---445234230358BrȄE#"#!' 0UȽðȶǵĺʽѼʲa\YG77GYirurdI3)*/8EQX[_rjeojW]rlaj~zahx}}}}woebjx˾\@67ATrkQFBN]ejrzxob]W[etxrlmrwoN>7=FPc|}`\ljb\_jrZC;;DXsoO@NqmoqikzT<2*+1;Wj}qXKRb|~jsp}Ů˼gR]xĭb\nĸm\UVk±wobZT^l}ϷִύH2%  -:BDDLYj{vjT<6/&(#!$ $#&((*&&)-+0545446143356 ' # /p´к˸¼˼gLVxɲ׾˽·tc\LFQeqsdI@AAA7*$.>Ub\NNh{aH>GVXZ]Y_py{|q}}ofs͸uYGQlt]A:Lhqh\VQH?BL`ok`]\]opH2((,03cqgbfrnXD:Gzʸ{xws_INds`QQghD6./+3>FGL]dsmF20&!$2;MhxZRRTZk|mXPHG=@axi`QGCIazzlbimRFACHLWk{w`?*#(-4HsoXVx˾tttκƮpqXbmkxyuypZLLWiĭϱʤoJ8' "9N+"#$"" %+%'*+--0.+/.,+,,+//17Sתd5!.ɮzźѷý¾ȵмϾmWScmghwoXD8:;=@GMNPKEFLXiýpj`C-0It}hTP[rjN??N{Ŷ|rkhUIP_epwurg\WVliF;62+1136DXgx]B;6*")9Oe{xkf^MLPT`rdUPKOT`zkefd\UVdlkzyrcXR\q\MILRW_o}}iH1%((*7Y|\DIoouϼͳøpQVtrglxqp}fOHQiɸЯiN9.&$@hh/& $$ %%##(%*/.+)( *#',.,/6B׫pJ#$-yʠžřõýǰ˵WGTjsr}xZHC=723AOH?>::CP_hwƿƽhN@Igra_i}|x{gKAH]~÷ykjbZYQKN]`][\aiz{XED@95,,4>Wm}`KC<4.1Ljs]XYSPVXj}bROSevtjeqzwpkplbnqdRKLY|xbRHGPW_k{pP5*)**-=imQADlsbyͺɵ¸ùzzƼjDAYpb`i{wagx}kVKRrԿƱraT>.,*$$8g3&""#%$"$$&(*-*', "$/RͥzH'"& $" #*c׿x}ɾĿ|zͳͻìʾ]\n{dG==3.*,>M>*'(/@Wa`brþeRScwqjvyhp`IIXoŹw{zkKXsxpj_N@37EVrnZTcnmhfowdYVF>BUqvp}fPLOWa|lZVTPMQ`w}Z:(!#*>SupVKC?IlybRS`|̿ìþü´zoijbIIhs[TQS]wy_X`]MOILhҼİü̼^KCNTOPWc{B& %*$"(*'#%*-'&$ +'16=Ldnrtz“c( "#!.nˮϴuvŴѾɫ{UNrγ˶îym}pWB45::;BRptRLVgeVQZle]^eit{}xW>.''-HofVNDAHZy{j]]^ewνɹ˻uq̹gC;FX`qqgghh_PHPj}n_PQWV^xУK,&&)##" $%*+-+*'!  (;tШi4 )/" "=Ⱦɣfi}whoȨv_>W`ZW\`kwjOLYorWJ^ʻnX87e`IS|÷ɽ{ijwaU]cea^esymaQTfw{l_W]ofNB>:;9D\tjPKLF:7?PogJHT`bTVdw|i^aoynXE845Edv[QMHJVnr]QSU\nɵʭȲxz}w´\;3@]u|gOdx{gPGPd{bYWUXalŲҫK-&"#%##"'(+-/'*(("  *SԤb&+=,!Dȴų\JUpmJBQtʰu{V5H\heflt\DEVhttcVHWʾrS26_znaoihum]iwi_cp}{vneqz{si^TWc{kN@:4236Hh{ycGFKKEGSlcPQX^WLTdqbYV^ozhTH?CSh|x]NHLOR]pzu`IDJNSiƶʳȱzuuk}vƼ}Q52BYypYm|aH@H\wtro^VYaiʸҬK,(%$%#%$%++-.(',-," + + ""&JϪl,$! .gʹsI>Gk`@8DeпleL39ZȯʾɺqfbbZE411:IOZikqtO=?P[W^||e[]\hƶnI'!BjŻsiy̿˽tiwsgspciu{yx~zt|{iWVYYW[l}|xeRFB<:528L`iljZHEKTWhkZX`cYIVjrVJGO]l}uiXPQ\twZE;Oo{fSEBO_xpUW[]˾tܶЩF+(%#$###)('/5&+.00.#   %,( #Eֳ{4#" =zɿuG9ImdE@IcʬjqŴ}F2=fjYeҿ˴ԽŻǹpWIG@3++.;PX]hp~zY:,4EOEHlyYRhôuV4  4Vw~{Ŵo]kɳ|pejmorw}|qR@DXadkqxwspdQGEEEFCA=BMTTZYVGFR_lv^\beYSdutVE@HWcysph\\ar]D947G\g`UPD9@BHKKNMQ\\VXYQJHShehrp]Ymu_I=BTapyrvtlbbl{zaD8526E_oo\I=:NdlkxʽoY]{dI?BTlwbXUQXkxqйٺY("%$(%%'*'+0--(,.40021.++(*#&Q`n|re^TE<6-+,:kˢ]# $'#" (>|ſ¦r~YGLNR]¨ʼ̿jjØeITƿʧeC7;GB8698FR`ivwpvycM2%)6NOPg{ittaN2$5GYgkncVI8Gqzdqåzdmnijxxyzrhikq|}r`^iwkI24>FHLQQTW^heVRTXVR^ty\o_UepcP?<8HZl{ziixzpjjt}aF93125AWo}nVDF\s{|{w{gHDYroZOJSby{nfYVZgkzȼٻkXRO^myػ],(&%$'%,-/052..-.43.10/--.4+--?veWRXkɓI("  '(>øŮfB8>GRaʵȹu¥z^dŵtƵ˺ƽrOFMa]G=;BOYajy{`MO]TE3/3K_dlxeH,#6P^e_TSNC<:Lu}vŽw\T\stp|}{ijr_;*2AOPPRPVZ]`WKGN\deurWn}\PZV@1*,7G^r}iWZhlhelxtqjTB60,-4@Vs}kRCH\jqxprt|}vlZ;2BYmk\VRQeyjg]PQ_l|¹ƽN3*)'+/7F[rָZ+%'""&%-4/2@=0,22:137232.-3264IϿùŃ>!"   -VûüL.'/A[ȶȶõ{ʳ{ŸVCT˹¿Ⱥv]QXnjUHGR^gpwqZA;DJ?8JYnº¼[LVsshbvubbix|R618GVOPQMVWRI==BOenrpdw|YOP?.)%%/D`|xlYKFT`bgswohXF?:1+-1CexwY?75FXkv{qg]]qtpqvyeTD4*))(,Eis[PNBAPZhu}xjYJ?:?8524Kn|hF319e¦ʺeYbklzu]NKXs}zt]B=5*6Yywa]ahU?.!%7Wrxxôtv{{{zZLYspaYRTWicPPWY_bcdaekdRE=@L^opaYbxoTNiygC1,*.+.HqwWD>DEGO_p}qYC;56:>=:?Uqt_@6?Sitq_NTpgOI_xuq]a}xWB56Yw\HIcjZYZ`o|ʴvnujo޵}izٞQ+!!$&&-.4544;?DFQ`z}lT?539;><@L_smYEB@EVqo_VF:@Z|XC@XȾspiQ>=VbJHWqrqjejptȩ|yғ]LNb߸r:""(6Lzйf)##$!#$$#,/+*)(/-.273024/,,-57=_˒N  'RɸȿWFHelI;GyʽƜfNEIb´XAB]ƺwnN77Dbtxrnwu]H:/*>i˼}_?*"7O^[KSkƾɸwz}wscT^s}]EBLlw`WXak|lYLBHQ\hstgXURRT_gdezsqNPvS.'%1BTjwzgYKECDCMioTB66;:9?GViujUID?@JazcK@4.8NulI42Hxêzw`G>NnhKBIWj|mehihγȀO:5=QyҠa<($ (D˷Z5,"$#$#%',*+*&.*/456,32013167JɎG " *./`ͭ¿ýnW\|S:E\|tb_el{{cP@8;BLawoO;;BO\oxtuvr|}X/$)7Peu}j\TLJMKXtx]F<;<<9:DWbji\JB@@FL\ooSA4*(2GexqP6*'8cƿzxoaNABVuUC>?JjtlsrnázxvC.-.6D[tʣwRB0&!-jƶa/&" #"!"$%('"! 21140.0104325N}8 !* %#/r־ռȺuƼɼ_f°~K>QxӻQDK[xʿrkϾַϿ}_H:8:KTTXk{qUD@?EJ^}jf}°]9##4GQL=,(6_ĽyOFbqNGR]as{dD=Kqmilkry}fQ?4/4@Ohyb>,.=Nbz{x`6(%7QmweQBBIQYiyzbO@:;B>9@OcicYI:68>KX`q|T=:7114Lgt`@+! +Nsc\nucK?9D_aI7..M|t|{ˮzzD0)&+.358C?>L[d]M@7//4BRrm]PE9-% ,fȿs3("#"#'$#%! $+/31.40-15:K֡X( " 1{ƸηocX`tǭ{`Yui]tźп|be·wغiF@Mp͹ͼcVsŮ|õƿªpvZEAPWels}kF0).4BXqzobjap`>)#/;HK;$ 3Mvöz|˶ss~m`[fvx{z}ie{eORhtL:?C?55Fg}wpxoƨКn\LD@DIIG>77;H\qtfr˿lP4% 6uȽl7(#%$#"("'  $+1420/-/.06IԝW'# !">кøų~iglwðjP\wý¢oqڿ{]R^~پκdWvīϸ̹{v{^LK]hoyz]C+&*/=Vwq\Sipsxq}V4$#7P\M1!(>[{eWkrZSc}zo_hw}{tP=D[{\7020.02:Rt{WB<<;<=EOgriP4+)*.1:HebE3/4@IVoiG6-+-<`{O:7Ce|R0# &8]{s^H>?HWquypz˳ٰ}eTMQXessjwzWKVwɼyS6&"" =i.%#&#$$# "!   .0263/2-369B֦_+$ ""% $@µǶwf]{Ž|ҸȨ•lcžٿλ±kzzZOXhs{zdJ3#"+3>VvxfTPis^QZoV2#&CfmV6$!0Kf}{iVPsøĵz_XluZHP_glw_>4;Nl];)$%1NwwiXOIGJR]aowzűڽkG?NĵxN4-'$(+&#% Iŏ8#($%#$$!( + ++.244246/46B}ң`/& !DĢyzżq|Ķ̽Ǻͺw}Ѻڸξñ}caxnNK^teI3$&14Hbn`^W]v{aICRhZ7&-Ov{hF,"&4L^wpj`VR]ķol|n^SNOR]hyzyoN61;Pp`J>;;JfyyskcY]dpxeffdnİcD9;B_zeO>54>IL^wsY@64:@IPUgvq\B1()(3GVewY9,*.hyh]RQOKIMLGOo|loӾνĜnOUļcB4*(..(,4. 'Yʼn7%#$$!#!! -2223/./69Eӡ_%'%YÜtcpƻDz°̾ɵĢθܿ˼źmbnu^DI\}wT=+"*+6HhpYVY`oz}t]GF`W9.(!&8\qg[ZZWRJD>52HxiZbzĶˮŽqVB2((&($%.- ,hĈ6&"#%#!"" &./..,./07>}Ȣh,"  Hú׻Ǻzljɺ}sxjxíücdʺĺȴѺʹDzï|h^ettywRIIbrQ>+!%(0@Zrr^MJTgog`^^`]QENttK78Mj|jG/.8GW^\J>6ERjpWNNIDSo||liikjkbertfhx|aQLLLTpëko|w`HDPgtU;26BHPY^gwwcH;-$$*@_swaG9.&,4@Ugd\XC-#&,=[tobMENlhI1&):]~soriaWJC;1.2;IWiztXDAKZhcK4,+8Mcr{hZjýpgjsxlbalgRHGWtlOD?HRX[n{{gXW\]atyunjhim}wpm\PNMR_ƾuZZuzYDE]yzkUB:?IS_hq|qV?81,*4Kg|mL4+**6BQcrm`O:+&*>X|pfqü|_NGI]wzV<17Ha{gZPGA86FmycfrþŻoUB772*#!Iƅ5&%#$&#"$  "#&)-14kԬz](  "!!$8~ɾƿƷǪ{w{wlhhru\D@frZmj|}ͬ̾ƱncpudJ@K\bqsfohbelxiT>,!#4EHHGIRXSC:EZ]SG<62.7QpW5+-.7Ofwu`PQ\hh`C/##4SsjQ\þ`V\ryvphihlz`SNIWx_GBBM`c^`ec^X]l}rffiw|pmrzypcZPIIRhZKKiwYM[oj`ZXMGGTbupWG@<52:Olzv_>+&',9H_uxgRA62;Zz¾pgesrTIEL\lyT>;GTgnc`XQF?Prt`foýȱtcRG>4*#+aƉ3%! !!## #&H۶yE  $#+bǸͰŸͻȿzvuszwn^D>aw]ddzw^uҶquȢóiZ`bO?@Q]]ffaaex~p\H5$&@TVK>9@LOFHLYa^PC4*'1Kc|ytX7* !"6PehWIOVVWRB4($7UtfUarTFL]hilgjkktwfNDBFUzqOA>FQegXLFKTVcttkkwme]_qh``]ZPHWqnF~Ɍ8$ $#%$#!  + +7Fbg`^VXflv{aP;(&CWR@/(.;BHPTR]a]M<.+.#(?WYOCCC?:CD9.,8Qup]]f}hXIIRXbkmppijlW>37=Ow}gRHGN]i]J912@UlwkryaZX`tr_XW`d`[i}`;:JgrWKJNXt}`OKEB<@ShpeL6)"!!(7Op}iZZ_rż}ibkxXD:Qryia][RYo}zjTG8)!" '0870( 2CF>32AEKK>4576BWkdRNLOR]jx}kN6)#$.Inypgafyw_OLUepc\RR]zXL^srsϿ_;,!&2Ilm[XcxŻolq|w\D9>Mnw\PVbpw{ƶı۲j5  !!!"%.8@?CRl{:+'$!#$'#  +(4CsNA$!"! -  ,nŦsfxzzwzéʷxY[sü||ۿ̿Ȼ}]EG\txpcWKFThgjtp[J8((.23-)%%#/?7,*,2;>.$"3M\R?80(# .Kb]GF]rr]^ksgcj~|utiR8()07;97?HILQQB42:GVlkM7*).9Or|xnjq|v`VH=EWpv]TNFIb~bgjpȚV8?V}uogZRKV`bXF7,  ,+'$!$ ! + &Hi@7 *$!!3xмaavrsv̵ĢpMXָŲ}k`j׾Ҿɫ}cS\rvhYULFKTceTSa}oXA417?:*!!$!+4,'*6@EFGEID8.15<5.+/*#$(4GZ]L7/&!;]rnZausmtrXPWbsž|jL- "(-/2:I`d^K>/$*6HbfN@88@Pcy{|}ycIB=:Gbx]JF?)! #3Ppw\D=KcĹpr~qhq|tYFDK\~zhZVWa{ĸ~rłA# -FW`moq|͊8)%("$"   # <޷qG/!0 !# " 1|Ūxtzv̲в^j̫ϾbUlѷkiɷqlwrT<8$ $ !/ <|ȼ~xÿһսxƫȱriÿæƸƤw[^{пjD1.;WrwYDCTxtdYVXN>.$ &%"$(,-1/-:QUOH>=CQPIGFC=0#*Dh·fD3,*7ELV^ceh\OF??K^prgkpsyijznXJINW]h{mO<--8G\{nUQwI=_jjtwwzxtN/!!#)/-2C]xoP;3@Z}rmwz]VfyeYd{ʿmXSS\p}pmfWV]sŃ:!$Kx˄6(*%#$!#$ + *$&LҬvbO'"$ "2wų¿ùͬ~Ťξ͸Źļɰ{ҿp\\tĮa=18RvhE9CXqsc]`]M:-$"%*(!!(/0088ANI@5/4EY]UOE93.##5QafZH6"ClqbX^n{VT_]YVVYVMIO^ùgQD;7ATkvvnbWNNOS[nsbapqwpO7:H^n~nO;0),9Ote`{LIqzp{vW:)*+0;@G[jrlT:/6Mgi\g{zZRamr|i\k³lXYU\jwpb`ZX]rƈ@.\͓:'&$"$%" "''+%#$#" 1E2*""CC;2++2Icj^L?2+)$#.D[haL6).VojOBJYjwwbTGCEGJV[YZkŽqbXPKJSilVFCGTbtmZWht{sYA46Ljz^B3-+6Ie~pqz¯xvRZ}kT@545513@Vh\KTjo`fb_jpiSLFJZfssa\]`]`rʹĮƈ>(O͑<*))'!#%   1-1./.*',((,2Nm[RJ;.($$+8bֱ}Γgts3$" # 'VʴǾ~ͮԸɶŢlnи{ǫ~kVGL_sQ80LcyrX45AYvpaTDIB3.-+27O_v{hB)%2=F^wrc^[WMUeptWC>GRj||saXhmL55DVbofKAELc|x]IEHTn|}shtyiN:4644@DN\mnaPC86=OathK?>Kdr_ewjYRO\rtdOCBHIKLOjse\XKCIYqʵƼАD"!'36FZt֤E'%&&$('#&,/.13212442635:cھjZZONbٷrOQD("#! $!(NƿoXHHTesǯwwǦŪɮͲe|ҺȦ|p¾~cZx|aO?@Ke{pRA>Lb^I:<<1!"" %.;8% ''$%"%,4??<9/&!)PjriepwcQC<:CKSjԦB+%&"&),! &(.-+.2222513/.25;jǏaXUULLhխd?B?&#$.-  -bǸ{S9.2JWizŤynkp}иȼԴӴɪ̦þϴ|po^B:>Kdz{cNKYrudVPG3!$"+<5+"#+(#)%&.54+" .BGAMejdTEDI`yvjm|c_pzgUD67IU\mpmfgi_Zcrwmbossv{y\E<77F`|rlr|cSPHA@??Qi}ŧ{jpruseL@FUtvQ8/.6ETlrZL?::>HXlnLABISip_]vzS:.)&$-AV_jk]P<9;<27BVgzk]YWUZahbp˺ȎP/*! "$"#  $*5S՜>)%+&&!*#$&(&+/.3134230431//14:[ҨpNUSGCNhТ]=GI( %&&$/v̰eB.+7HSiéph{̹ũٿõеҾθolznR=8;FQ\j}qbY^bhjcjúڽaK7+*$#$!"5jΘ>(&%&!"%&'(+*(.//4426244:2/225>SֹeTVMA=N^WYwɽxvPDHTsmWD@HRZlsjsVB=>==@BLd{yg_ejnxyjO?<:>I]wz[@3.2Hf}bMD@@@Kfv}|xhUIOb|{QAFTcyrG-"&4K\jmcRNPPIHJLQYerqc`fmjlp©oXPIGI=.!/_Δ>)(&$$&(.'(+-+,-01417254440507>TȽl^QD<@PuƋTH]e5 ! $!$!$6׺¾{^HHYwο}\hϿzs|ջӻ½×ow»νkSPjm]baRNey`^pzlN?FQe}`E82.4789<4*! %%21%$.596(&25)#(.6EkjB6Ktsk`[X_|^IJPOI:5L`X@69BScizŹ}V83@V|cQGDL[kƾwop[H<:;=FQ_jppgZVZ_dkytX<123;LjpL:47?]{tcTLHITi|wojqq_TOWq_=/3?UkuqI-&'/>QbaTNQ_b^^YWTV_`eycckpu{ɷybA.# 0^͌8,&$*&$%+-'++-,/052274623332/2?Q~~NF]Y/"#$/©µxjo̹xŲod\oâͫ{üκα}^|ūĵɵ~gY`rhOKX]jrbXdh[D?H_r}[C;:6=DHLB3" %$.845885*"$+%"+6G`t{cD=JlnegaZ\j]POPNLLYhcF52=Q]iɿ{T=.0A_{fba\aqiZN=7>FN^jgX^YNJQ]_`q`G7+-/9PwgI@BKYwthgd]VYaqzkbeeZV[kqf]G3#%7WkijywY8"#%(/8IZ^RKObmmib``\YPVuz`hv}ƺhN8,%%+6/"$8nm6/)(+&"%'0((*+1+/10262633452708Q}ju_G;=<=MײhD:VV)###2{Ǻƻ½ȼǴt[V]yŽɼʩ|´|uśeXֵĺ®|sxrcewt\Ucz}pqnf\C75EbiN;5>DNQQI<, '+,6FIE<2( #.8MahcXX`XJGRexZOQZW^nmVB>CIQg}jB3=Reiq¿÷\@:6;Qrnitws~zbPON@:CWfw|jWYQDGS`acr{_H;9366AY|{bOLUbv|e]aa_bn|xeUX``_ieLB>7-"#?hpcT_vjK4+,./2;K\aZRSe{vhjka\V^z}fwòh[SYaWB1.+-.7Vp6,(*''"!&&(*(+-/+/0363731.54/579?BDRj|tk`ap~p\Zcdkwm\OSdryfI7/*-,*1SyzePRgm[ID>>BFNXcdXOShrxykfep{cy̾nbabhsώ>.(%'($#(*-)//.,.//23660141344={OLcziRD>7:\ӢY9@aV'## !%*jĽȶ¶Ѳvdbu˲wwwpdlüqDFtzas½ķ˴Ӽpgt}|lbfyyZRlxpxv]@/0Fcvm]F65=Xi||gU:!$.AOTRI7* ")#   &,/4:6.&#+8?DN\myzq^A+(4M`oyrT?84BYfnfJRlĿͺ{e^^hv{`E<=AGHPa{tja]Z\bsqS=3/.4BTiwkovw{{re_eovtcODPlhJ7*#!(13In}_IK\lrsqh_XXSQRZa_Z\[QII`rnzzguӿøМ>,%'%*)(%%)*,-1.4232:692022248>h̄XP_z{iVKAANҙW>Hp]( $#,jҲrlwt̳}{t{dzQ7>mþɮέ{[WoriwhMKat{pa^ao|tY<-.-#1I^ltwu[@35@\x}x`QbĽzvz}vT=6:>EO\ryd]]afmvaD5.*(,?Yuh_XYms]Z^dq{pbWI>Px}\B4)#!")2C`[GGXa__eYHLPV_dosfXXVPHNfzroƖ̄8)(%#&((&%--**/.0-406952321035BpݶhQDET}͈O?L|p.%"! %8|¶ͱ|ȼ|rǩ h:*9møĴ˱d^vyr{]IMY^f`YR\fp{pS9,,8KZYRID@Law}eI)#+/1,*$#/82! + +0'#!.459CXirfJ2$!5GXee_aP@>G]wwdZlûĿ}{}wxuisxreP<;@@LYlzzq`OOW[ev~aL;2/)+7Ie~}_JGGLcz]PRb}|zrbTTLKexaF3)"!!%/;OnjVT^b_dm_CDIWl}vg`WQHPg|ŽphÌ|t8()("*,&(,),+./427264221./1/8@bѼ~eE9Bl~F7Qv/*( !*:nŶ˰ɬǸL*$8r|wʼ̻xxoiRN[__bYUPV`jrjJ2-,9IPPF6/3GamS7'"# %453( + (.$'-% '38@QbiiP2 #2ERYRNQXZ^_pyuǷǾ~fjp]UW\eswPIXovf]UOBHIBRi|}jRJ@;EQTc{zYA621120+.04>Vo|ylbN;92-*/7B?<1",?A8../$ +'6AKPOF72*!&/-+-1:LeuxpptqluznkwyhM88@TewrT92Hg}ƺrlbVVU^pv\@/*(/@PVg{|lR=.&'-4;KfuzujZP>5mµɦ²oY_ea`_XWXWG>.$+BVWLD81.,-2/*&%#'3:@EQRH87=<3,  %APPI7,'&/565+*11' +&388=:.# ++# &%  .Haia\Z^^brttmsºaWRKLXk}k\WDDVnȶ{tnfilq|uYB2-+,2DTanpaL8+%'+4=D]qgYWOE>65BBBBHWgt{~tk`RB738<<::Kbqg\^joszshgryt]TQHGPe|ucTSTcĽξk0,(,%%#($*+,4732301/305AsԞcH;3-,4Klٱuiz1"#4b±̽̾fD8Bd{ķtvŧdbmoolhb\QC:40@ILGDBFRh}xqmuvo_NB>EKQZamppmg\MF;:;8?FOYcdTTikhotogb`SLOXkxxkZRLPXewohZSNFRxóɿp5*((&$"  *0255850.131/6>bΗlWC41-2=NeԬt|3& $&*#'4ĺǢȷft|RCFctuǹ|λɺǶ{v~}z{vkaVKKINQQC80+)+'$-+*'((3;9/(-=HC6!#:DI@2%#'+'! !&'081#*3::94+ /<5/(!%4GTB/).1.05;Iip]L?735:D\l|mI<>Qef_]]iyqfegc_XRQQXepwsuwrcYPD=9=@DNXdipjI+ !.987AZr|o_XPCCHTctkYPZhpz}hYTTHOg˽Ɵrot{{7(($(#!   -142444022/1447FzШ{[D:614=EV~ѧ|Ă0#""(.jƷҩygŵmmȼnSP_wsȺʸǽŰ³vi\[bcfZB0%!!$ $)./0-.3/1/(*8C>3$%/EN_ovxxkK,")7@>;GYowi_UJKU\afyxhdowug_XSOVm˕Z=434;>DOZo\2)'&&#  &.23753/30225504>RT\kɾ\C:0+27;;EIOQQJ9-%"-a}paMETnx{_TWbqk~yaazcE3-28?IZv]KNTVXexs]JFWoyz|x{{}wxzrik_JCKSQPPT`r}}oYD8@KNMKLU_yp\YZ_b\Yk||{moyxnaQHXܰa4$$$+/7EQbq|l8)&$%$ + &)12068:241/24/-'&67:BaʬzG4+((020>[˔nm0# %/YӴۺPIajIKlzpȹڼ{}˾ӽogbejneP7 $+'!%&***)*+032.38=>;3'$+272%%46'%49;ET\YQH4%%&,5=KD9.1:DISdnfYE. ,Mtxf\WU`t{^[ctyzw^F7,*5JVez]PVb_gvyeTKIUgzwc^bep}g_^VE>GYgknqy{sk^RPTYa`]WZdk|nlnqn^R\x|ikuy`MQvԐH) #+-/59D[p~}7-)+"!  +#-),./447422.00-)*-.4J|˛Y7*&&+)(,4Cbuݹfg7&"!!$ $1HŦ׾׷[OesW>OsaQW{˽ۻu¯ǻi^\^b^]VE,%'%!!!#%""&,3BGEHHF>.%%)*+!$.2."&8BELQKB:-"&?EFD@7,0DTesxpX>/"$*Aet_[QP[tn[bpƸiTF71,*:Xl}h[blsv}vgbXLGKT_gzyiWKKNZrtcXWVMAJdtnaSG?ZêŞ̼uSLQUSEEG8%%'$ ! ! &6NYXQLB2 ! %,,&'7216Hkpp}}h]lr`VNRNFELUREQirjaYRFEFTpxvv{obXW^ZYg{}fXTI83/6?CKUXWLCIW^hzt_\i|qa]h}kTQqʈB&! "%$!#*,& #&,7<>CPpҌ:*'$" %()++/652503.1147/$ &#"'B|ٵN8,$ ! "$ܳzb]=+$#!   2GӰԼzd`lͺ[JOe}iG4;^²~ƮƶoNEHHB::>3!##!"%%#!&4MYVH7.#"$"%""&,+'!%;QZL3""5B:($/5>Qk{tR6&&.E_s{oa]Z\^fntvt|wnxxuĺmRD?@?ERc}~hVXnxjewt^TMKNOTZbg[BBC99>(&' + $/+++.24/8334/043.0/3HN@.4NغnH/$͒XHVͱR2#"#!##-%H;ǶгW_g]frH32Y|]]ηǻʳµy]PJLHECH?+"""$"!&'$+41&"(*%#"" ""!(+-4;<4*#!!%+2:9/"!+//(!+G^qk\G=6646Kesl]TT]gnvtfZNEECNhwv|xnrrTOZe]Y`kppx{yp^E0(/D[glrulYNTeoibdkykXL;38FLTfrwzvk_N<4138=CELYitxyxoV<26:?CBG?0-=GB605CH?;34GXgy}udYhz|stwnXHHSjrbjDZ׷iVF:7><:HADP7/("&'""%$3Oэ:#%%  '/*+,43456885/.07421?hqT:8[ȩzJ/#njTG]ʷ^*)%#$""<ýѱ|drwhp{M8:lw[SgűѼƾbPLQWTQLI9(" " %&%'034638=>AE?6)"(+1/*%%(&)I`ZC2(&,/7H_pp`NLNZfom]QNLPI@HatxsibotYcvjL@DR`efnx}wj]TG7,%.BU`]WQF<6?Pdc`kveWM@7BE@0+?RF78CT]PE=8=IPYhytg]MG_xygjvrYDBO__RZuȴεsjptjbP[a?7.$" %(*5VҔ:&&& "'*+0/21464799.,.2658KeF@XаL1& ̓^KjͿ]+4# !.?ĿϰdQ[TERvȻѯƴfQHR^d`ZQH4#!*/-4:=?==CGFE;0& !./- ",1*",IQ<%&+8Mfor^NIJP\d[E=?HPROTcu~mkljzĹjFKgĿYF=BQ`ozlQ>:4++/;QhcN=2//,0?QTWmiTIF<;BMWdqoYB0)**((&%(6Nek`O@>DIA3+*2;DONOL?;N`ZMQcprbWI88>?DLXfmwlYPFI_lrtmqu{t\GBNRVSXl˼tg\E;2-+*$"#&-=]Љ8%#) -,*/00152646/0421279ZeOF]ӷ[?0'ɗeTwѽm.+%%!$>ƯͻxOAVӾʟmWKGP_faZPB2&%$"  &19:4550344787/&%-*# 3:5& #3D?' *8K\gncREBN[cYF98BLW^eko|xxé{VTlŹmTGCPibB43/+/>Vmx]?2++./2?OQVm}zuj]NFGGGKU`c^R=+$#&%&*.18G_ljYE61264435@OajjgdVQbyvnsxgYKEHIIHIN\tiXKIKZeg_gzy`NLHFIT]jļzi_TH;403Daʃ9'$'! (.+,1/4432400072125:lhRFHjæX?/”]S~Å4(*"%#2ɨ˿{QG`˰δʿeQKPSRVXUMC;6.252,$ "! !%+/==7+(##(+$# +%-("*33- + ->?-$-7=DXigVKIR]ebQ@58HUdt~jVgu|Ųsj}dVXg}~^F=:94:Qexu]H97229@NZ]Y^c]TUWTQR[\XY]_WI;(!&'(,9EOT]f`[QGB>=<>DFOXj|}ztqyvlkedif[RWd{hXI=?Nb^bpxeZUK?>KZnĽyjcgl4)(% + ),,-/24066414202555) "$*//.3J`bTIHR]c`TG;9K`u{cSat|`Wd~ûqsro_RJHE@Ierq]NJB<69CXehZE>CCBIPT^cjjed]QD7) $,1=RekkfULJJKOQX\\\fkr{xsmkns|}}xxtkft}seR>Sa_A-.2886568/'""#$.,$+7?:3    ""!!*7ILB4-(&(((&$#-M]`K30;S\QFBADYm|z}}ti`hws\Xiƽø}tica]RPQWgvq\E=@?DAIZowgF-(18@P[bmqqnkbJ8-%#+:FXo}}tcLFIT[]blx}}wqjb\LGGEISRV_nyp}zl]Xioihsvfb_QGLZm̈́<,*$ + &102424264:12//3126QmQ85aڷwXL[s1%$'" -( dԥtf˴սӵxcqŮZE<7@YfS/#+15<<71+# #"$382&   +  $$2DNPE<6/'&)$  ';UfdG+"*DQK@AKUflh`^hjmrtóxzŽķwhaij]SXqx]H637FXcit|sX=3068EViv{wpgcP7+&"!)1>O`pzwsg]TQXgomq|jZLFGI@3/,03639CYo{y|slkjy~iabZQWl}r9*)(  +%)/,.0426322,--<3-2Fm[AJMD:-" $&    %6ENIB5&$5@L[jpcM?827>@IZikaYOEBEL[l¹ͼ˾wr|zYC;?RsgWRPKJLPWgtvgS@.##0FV\]WQIC>:DLR\sxg[RH=42.))***+./,/.0218?C@CWgoz}þqj`WINZdbKF[ddy{5*+%$  +&''*-120.///././.6T^c|ҡv\X}зi/)$'" (.Jᨐ“w|¶оǴla_ht|rYB-$#'6BNNH=0%%#($##!"$ &7?9/%! 2FU_ebaWLB8:JPPT^ej`]VRRQZi{ĸξxe^ctzeOGHOT\\cl}|lTC:1' !,;OTHB;8>?9GOQLObowv1)'&# + "(*-(*'-/-*&-%16IvΙsffҾg0&$)%&!%)@˼Ԭxl˼ufѾĬtrzuW<-##,>CGJB4)$%&#'  &#"#./-&$&(( +*!&.+! !#->KQSPEAE@?:AR[ZTLMVZYYX\_k}ŵʸ{x|zo^VPNLMXhw{ybI6-($" !$+9MVK;8.2<@>ET]jdSF=4-,2:@HK@3365/)0>DDFHDFNRVY\gq}þuxzdL@DLNLLXhvϖ>.*%$  ""$"&*%"!%;rզzako0%($#,#"#2ƗlrϷ[X̵jN:+(%-8<=?7+$$()% !)0- +"#%5<5-&&###--% -20346453,/8=:6?JLJ>79GPTTPQ]sϻ{skbcaXSTX^]]dwj_YH1%$!#&(,.8DOK@;8/1?ILVbo|z`SIF<24G]ejhYJHIC806LVZ_]W[chb^ajqzżgOGOTWROWhxћA*+'(   + + + 4uӧt]gպ\1(%+# $$(z۸uŢsLPz°åcG8.+*-5655/&%%()%%# #/4- "'12*""!(+& $$$ %070&#(*/6AFQJKYw´¶qqq_VRLNPNOZaovxylH9:5*! ",6;BFB=98=<36BT]hsqYTVVTFE_xpok`RFIbpqtuqqzsmzɻgLFLRXYPRatΑ>.%""     + 5sӝfPaպW,%&$#(wˣĥz]EMwťƩ`I<84/49;52,'#'''##,+  "'*'!*/+#!(4:?<7/$  &27(#+.4:>=.#&5;:49EJJ_}úg`uj_RGD?BFJRds}lP3+,-)#!$(2AHHB60,4AB@EUhtw{weVYiqidjyglȳjVRV\ZWPIYmuɭω>/'&#"" + +  +  #<{ΛaIaԷQ-&##! /m׳~ͮZIAJ}ϨͲt|sZFDA??=BB;0'""# &# #!&$ &52+$*:GLG@;,  %+2<3$17:?>7%+6@>7?JPTlζ{s_VTLGB>;?DN^wxaH:0+(),+*2=HLI>3.,-5?GVeqwztsu}xn^WZeuɻwspjmj`QN`qyЩ´֠kir9-'(&#"   ,SɓcM`ָ_/''"#6iėvŘ];69Mʠ¿Լtr°^LHKKPRKF=7.&#" !"#"!!#(54/,2DJD5("  $(/6=A?/&9ELJ@3"$*3@DFP\dk{Ưq^QKEFG@ABFOVawt^@.-2.,+/26BOPH:2,+/8AJYm{wne[V\bXLFDNcvIJ|}ypdgt}ߴmKF`̪ȅLHz~9+#%$$#&$%"    0J}zPD^Ӵf-.#!#'/m͟neӸzA'(8^Ұ{r~zPANVUZ]R;.+)&%$ + +"" " &'&" #-2660/77-  + ".59:BE@8)/L]aWG2%%*06?GYivö˭`LEA;=GKQXbp}w]I8.$&+.34:BEHNH9+'*+3ETarxhYREDGG@97:EYixyvkƷnp}ӓK1,8Zܶxu@;c̅<,&#%# %')(+%  LݰfC?XҥF(&! $  'jݽQ]ͩh7*1K}͸ĩ̮{uRR]d`]WC/"%##  + !$(%$%$#"#-:?:41/0.'#%! + + + "2>A=<:70*"8VecXF5,%" %&*/7?J`uūǺѽw_PE@>FWjs{gL5)# "&/7?GOZYQE6*$#+4=Nct}}xk^RD;;?=776=ETcrufYZcuuøegv<*&+8IXyӧ|ci߶n?=_|8,)&%#"&-*,-)*)(''$%#" ,xբ]B>bϛE('% ()!'hܲvNZƖV88HoӳվwfoywqaO:)###$$    "$&##" $$$$/B@9/%!#=QRKEA<8:3.)()07>E[uǷçyj_RNYd{bB-"".9GVchg[K6&$.:FR`lsj^ZUSF:AHGDGIHOXapo[G<>K_o~ŽoWVlc6(*)2:>Nm཈gOQڳmEDfu6,#$%%*+,(,//+1-(+.-,,&"$-6IΗXEDn͏>*$#" -dڦx`jӼfUWhȰŨ¹yvyjN8.,(*-.% $',259@CGB7.,*" + + )5?D?80( -:C87?EKIJF=535:@IWpƯtppr|{dC,!!',6GYo|s_I7'"/:EIFGZbYMIQWRR_igcihfehouscQ>49DYl{u|xufONbjapvz۞S2)(*3708DOURIE@<;BGLZvýſ{h]I2#!%/7=IXk}tR8+#!$/=KMLDDO\PFGWakzxtw}}wfI95>Roqhqliv{_O]rl\gxmVZxՎH.)0;EJ`{ÃL9.3]aHFb̓:.+(%(',+*'-.-,---437-55122157@TtD:S̛;&%%! &*!+aοüǻҵɷ||eWKG@9:8-     (5<;7*%!!"#%)*%# %&(-4??C@7."*5668>658CRWOEB>JPNH@GTYPLVejzxkdjovwiN;6CWqr|zpoiht¼v`]sz{\KPqٖO66FYp|ѳwN8)$6`ʦoB47Ht9,+&#(+-+(*-0..2-.558/43352289C{c93Rɗ7&#"$#'4e͵ia^XNH?>8+"   +  #',//&  ,7;6,)(*..*+./'#'-9@CA9(%./5<=537648CLRJE=;=GYgmyŷɲŷlTIE9+"#-D`vl_O>477/5HQPLDDLX`_^lzaNDNZjo`VLKUasõx{zzþzltr`UXrܪcMc˪pB/#"8eʸK,#*6cd7+(*&'++,)+--.//./56515266557:K`76Zp0%#!$&&2eðʹε`LHNNKIFA6)!   +  ! #!6KRI:578852('% &/GKIA:99:2,/=^}jNA>89;74Qj|vrsz}ʿȿȴ|en~odpὅĠe7##5Qwp@*"!(K|6%%(&&*+(,''-.+/0771;685222588M[88k֯L3&" $/eˮnư˯iD45BIILH?6( +   ! *AZ`O?69:8.#!"#(5ED4'!,:@BD=EC?CLTZ]_ZY]ciklp{r[Wajus`VHE]ʽȹʴgVdxS*%8Pj{sZ>2'#!5lb0#"&'('*++'+0..,-;6355650/6479J̭U9=vնY-$$  !/bպ^Ph־ʼúnT7*0CTQNB7+&   "*3?QSD6-11,##$$%&1:8+% '5@GJH?:CG?79>@<22446E^npp]KNY\es̽Ⱦt]READGIG?9?RnpM;:?ITY]cptvvpha_^b`bih]MRet{}wkiaawϼphvŵܾN)%7EH@4/&"!*Rl+ $''+(+-20.,-254864404056;Guw|vsڈU>GհG(## '!0cȦpIHd|dK=751=KLFGH?."#*6D^toUJSWOVgyvagtuxʽʽmUDCCGQ^cYE=F_w_SQWamzy`TRVWTTZWOL^wwpqw|ɾº̗R*$)*'$$:nݽ_!"%%)(++01/+3685864454036(%#1lӷX@IiaWXW\d_UB." &    +%& &).& %%$# %+6>72//36:-  '6Mh}sZNPac^gpĽwfmy~tYF<4-.*&'$",7NhukQ?DQhx¾yntqYH>9@Wr}x{xyxdI76?IR]_[VWk}{lgk{|vĽݷk7# 'C^{ԟ8'&'()-,+,/.424464524434_qYQgbUe̕9'$'*#' !1{˦uK8@^¢qUWöťw{pS8(!",1-(#  + + +   (&"$6HJ@4.*+,0460)! '4>DIQRF5% .:DR_\O67Hc}zsxžʷslhvthUFAVxg]k{taWW]e_VIHPZkyyob`o}|~wkdmvoj`NN\u|e`ȇO6++'.?HDZ͔4 &(''-,-(,-0855776441522;GўcE5;`kXe{hz{/&"%% 2׸Z<:T̿wK@T͵hE2+'(+3."    +   + !%'&(,8@GE?=;6/()*$# $,7+$5ELORWQB69S{xXQdqofeje^ejnzкǾjahwowiKBP`mrlpg`PEEKU`hkhlns|uxhcrxcPHTl~|wkaX[QAFXyj`ݷcH,,$ !*-(4S|̓9 +$),..,&$#(,2578865615888Bҏinm`rsh^U}ηjk|j_-!!" !0ƝoMFP]gw{{wwaR\viK68I`no{uqysj\VTL?FX}§R6%$; "%4IZ~͗< !#+-20"(2576867442379Dw؜eYVEF_rӳm`پd*#!$&8Ѧnd_nŰN:CnĬú~Y;)*,+%"++ "!$+4?FFCCAA:($%!! $"'6ET[QKP\ijr{h]^SC85>GC=DTZW`]VV`imv|ɮeQD58A@7/+/7@DHEEIOOW\hr~{kj|}rwqZW`^8,4H\dkw|kh{vk\ROKCNcԿuQ;,,4H0"#'3En΢N + #((00& +3535401145045>tlGA54EpҴdYմO)"# %&;ݴsǺ_M_Ư¾ĮeB)"'*&" &" (+(!$1=KOG;54.(-!$!"-5@HF?7>LbjnxwiNHD?@<9FU[Zbssq{xiYKBIWeyuacxzpjqtjbV[p³n]UIB>315401142:VҦJ!!&(,/%%(-1225-42/2,%%m͎G78:HqՃ]`d/%#!  )9̶ִŢrXNF6-644>Rwycqּb.%  &<ĴȻ˷ѲaUQMILY[N<(   1:>;2' $%!##$ %#   %-.(#$ !.299868@GIC@KY]bszr]SG@97=7+"*=Ws~yhefsvpdmtjo|hi\ZjoZQIB38OkohյR'"(;ıǺ~iihdgjnjXB(!#):>HB2    (,%  "$)4CDGIHCCBGROHC<677427J`srobaɿ{xna[\tv]L>@OY]atxtqoɹԮb  $'$')"!&-1/52..+" lLjO8544N\oėP( +Fж”į¹kXE5%%4B9-%%&''**   )-  + "(),/..$ + $,.) !$,38BSagli^WWada]foiVB72.*'--.+,/57BX\TJCHF;746;BKTdrvme`aZP=306?DMhyd^X]v{{}W;-+,3;A@DMD8:=FMNMKG<8853>Wo|qq;w\ONZYWIAJh|l]LKMA/!# "&& + -&  #"&-06?CO_pvvn]J91;HJHJOK?/''&"#&+6DLUV\dbXF;:6.,/27>EVjz}t\HE91("!+6DWkow|le{oSB8;<=7CewaYOBDLROT`wnd[W\`itƬǐG + "$#  +%,320-'$ +^ܲrE986@sXw}3# &!%/#,J׸̴Ǯqm|»r]M<1*.Uemnhd^XTF82/.-124=Kft|wn^I9+%! (-:Q`cj}{wwy|w{y|{cRLJIE?5;:FVREDP\^cnplZVWUZpnd^_x{{hox|eI8666;B98Hb}k[]XI>@DGRdvylYSNNScot´޻z;  +',-++' QʏaG82;_Pzz1# "!/PƸǸz`NVrpOF;2/2DVdf\F+#' "$'$%%%)%  + + + +  + '.+&36:JXbnrcL1 %(+,47525>CB99F\ntobYM@;GI?<=62<@GN\hnljc_I:0($"%./6CYeu|z}xpmntl]YV[]dhbQFDJLD7/26DXXPYnwztrrvm\SXr}vxc`dsk]MED=25<=@L\igZT^^H77?J[nxwaPPUY\n}ۻl.  + $$$ cڳP914PTm."$"*.bн»_HMfhL>96;K_hfbS9  !"%) '2>@6,##.52,  + + + +  + +#*.0/)"%'*6>ELK9+#'+/79873.,6Ka_[ioWNd{yvw|waSYlzmZQTSB536ETejhr{seSF;3--0HX[ckc[`\PC@?>KOND?D@79AJXcjt}rgoxvpkrufckaTMI>ASbb\QD<85>LOB>BJevvp||}lVWr]O_xubU]aL<33:BDEBGI]uyv߿x5  Y޷wJ=8:Be`ϥE*)$"$,3mĮİeRaʽnhqwtniUD1 $.6CV^fr~yohsx{utvhMFRLOTVKUo}uaQCFOQYjrjekr}tjjfchqwxnbiniiWl}f\fnaQCBIMLD96CZqlP<=K[pҬϕM]̒\H?68GxZ˕8%+'"  *8}ʴֹƷz`XlÿzbZH:(!# (.0/,$ ! +  + 0@JH4+&&)2668?AGR`fijjeXB?IW\\XTOD866:;?DC?740446:>:78?GRSKQf]BOisljaYaqxm`YYI=@Q\dox}wa]bchjotvc[XSLLVrxnaWTOTVMB<<==CahXbtxs}xp}ybQLVbeaQJK\߶װR+ + + + +  wƕ]<-*1?ecv0!!   &"")@ַkejw~Ÿ`NKNW^[XWSRRSH?5/%$#  ##*# ! !% !  + +(6CWceda_YTG@@>4/40($(/32,,*%)2>GA47GVfcXe|oV^zxiXEH]hcYLE6,.;Pbhiyznkni]UPTeol^\^`\\iŹp^QICGHFLUN??AABGYx|kTVo}zpxyeXSZ\ZX[[Vc|ƼѡتH.+'!  &sٸ}H2+*0AbҿlմS)"# &C׻sgp{v]dxƺŻZBBDNZad``bZUTH:/1+ "%%',,+8A4('# !"(-.'    .9EZde`QD?852/35:80&"#+/-()+#*:MZTDDZjricozn`IENWZZLA9321)-0;a}ֲ^+!!%%=žz}SFTp̾}vǼjJ;:JYeh\UVUNHE>/(.($#%#",/4@OL>40.)'*163, %/42-" #*3;IOK=1//+&$)6j~XϨU%"   =ͷ}qIAQxϼxnszȺs_L@DP`gZJGED<765-,40.()(&..4BKH<2200+,.41($/67.($%&!*4AJG8)$,-%  (1/*# *41%"'5DHEEHLNQKLJC<6?VjkaTSXZO6,9Pbl{wdieXSRMGGLS`jrvwx|nid\SRQQLNQNKUdk||\UfwmR<0*-A[\MFLEFUbjyztzy{wlf]WVXgwylhtՑfנI/+%&&((+(((,%(++*(-/+%"#3HػV>-('/AKM@.Ɏ8(  7yȨЯvMOq˷|qsƽf[THENYbbSAP`aVG1 !%**'$"!  %""''&)/=JJJ?1(#&580( !#!%'""*684/,4CKYfjrz~sgTEJRPQUND>=9>;5Lakupb[PD?>ESYflmtxemü{zysibcqrb[fzw[TRFK[j||pk`]aYNV{{nilqssjbfw՛xՠA.)("$%),)+'---.141430/1.))+-3;]˝jP>;4,%&&"p0% !&G}ɸӱzWenzXNR`msvh[W[]YL8*%1-.?XjgP>* &-.)"%)'(-478:4,"$'&&%)(*/.++0LU\fhZLGDKVYOXypfbcmutsru{óקբE.'&#'(+,'&*,1,202352-.11/--179RŞvZL@3''&(Һi7&"!)) &Uvtİѭz^kŹvhm|sdZ_c^M9.-*).;@KIDEKF758GZ`T^y}n`XSZhltvvƼΤБA/(%$&)(*)'&..-,./20/-,/21.126=aΰw]B2.+5вN.' "!&^~fdhhyɯ}z̻u[czwk[W][OA4-'%(9CG=*  %*/(! *-% +)022., &058:?@ED>2+5CNVZ^TYpwseVMLWqmWLJD?96:KOONRWar{yvaL>54=Yilf\\ULTVHHNJIND77?B:69L\YQ^xo`WPN`v{}û㽇vЀ6(('(*'(*(',-0..-.34101.010.09:UưjUGGQΘC'$ .vvkjgq˜wdcwԾÿɱVAKnxĴygdVLQWQF;4'#'1/+( !###"# + + '29872'&-5987>FGA60.)&#&)"$0DT][L5-.249BFKA5=PTLK_ytkf^]rÿƻ٤ldt9*(((')++'(+,0/,//3552/-2410029PŧɃ4!$!"$7{ɭėn]_rرƗbCAOy}egIJeWdb\`eSDDA1(#"%&!  !  &1:9793-'#+560.+2:=1'&%""'%&1DOWSB3/+((/86..9@COaldatskeZQH=Fiw_MEB:1.-)/8@BCKYj{xxjR@?<78>FLQacM<>MVWVURUTTT\WB:ERPGH\vkmǽǴȊbeȊ<'(,*+#&,*&'120.,,//74/.+-28227Hҿ|/$!" &CǥʛvdjkvʣwbhɏxҴXGUmich}üqk}{[DH>3&"  $%&)" !'-1/1/2.,%'.+$ #+.% #$%$!&,,,09=>:21/)% $**&(2BNRcqszxpaNFEJIE:=Yvv`KEC@92*&+/7;=BM]i|ztnpthPAFQOC:?Q_jdP>:CKOSRW\aclwiOOZ]O@D]u˵tYiֿ~4)(%)&'(**+,0.*%%&*1//.-.,33/3=YҺ_-&!!)KʿѭzZKLNZi״wpƒΧ|iprVGMbeLD3'##())" !"  # "&"%$ !#%%&#"%)&$#""$&+& ! "#!+C]iqvxg]QA:AS_aVN]{~zuoeWF=;940*&*06:>I\n}~~{qqxe]eaYLO`^NACR^hcUC?FMOW_bnwzsvtjXHNepal˻xijmt\sμ\*#(%&&(*))%$($"***+-,,1208GѩK,# ""/[ԼiNFCG[jֵ׸ӻkK8:AZ}{espU@3&  ! ( "  # %$ " '@`sywzsfaNIRiz{mZc}eUMNPSM<3/3/+++,,2:ETg}k\SV_eqyyzgWelicdiaYTV^hqhUIEO^fpyxjns{Ŀve[k{ƹsa]eŒt˿ʩx>#&%+')&% + #')1246Csɑ<'!&"$3qɧz[MKOWfq˻ŹpK8:FXrrel`D/$$'$&(("$& #')$#  %"%$(%%&%#$(6J]eek¸uoe^j}wbLPdvxjD/.22,'(.112--3AWm~ye_]WRQZlx~z{opxmloz|eXYgxs{¾~}xkbr|{мylhqӨڰqˡpYO,"(%(#  '/2/4AWʔ=*!&9ϹlUU^l|ɬW=AQigE-!*/-$"'.950)'&# + &,1.&  +  "$ #*32.-,)+,,4@LR^z|tzuQ74CZbfxzc@-,,-35/+%&.8;;75@Rss\W_a^X[iwpz{mhp}|Ⱦ}vqmĸUHXЦe?3-  $ " ,.047/(   &.5.&   "2;?@D><:3/1337T{XKR[\jsZ[ZLBDJH?>HYc^_hyuvshW`kldXSSQLGEIQYbdeo¾úƾ}|zu`QHQew}uuǸwrmmگtG5?sѥa9   (26>lznii|v1!&$)Lxh]jƤܽȷ˼{^C4( (/)" !)1:;>CD;/" + '-2/% $ ",/:RQEFD;778@aŽ{vsvrjit|mdc`SIThmbV]\RIA@HT]hjiyľ¹ugkvtaVT[mw}˾{qe|ӡlC/2e†I)  + +(25:dղt_XYUYnպ\8$ (*JԶɷ|fasģʪ̼gQB2498+  &.0/;GG=1)#$$$$ %./8?9-&"#&,#  ,?adW\d\QRXiƽlY`[PKYqtiippi_RQXiwý}xqmjt~xz~}pgeehktĿȹ{mT:'/]ٱl:" )-26c׼}dY\mg[nغ[(!&,+2]ѻϬt{ȴ̰lTHC>4%  #-/06CG<2,-5785-$ -68BPTQH<3,)$##-41/%$'>^x|zkiwȿ¾svupjyz~spz°u`]zphb]_l{xxtvwpiixxtƽŽߵm?+$2[ўZ.,! (/27R޵muzpt|sccvطS&"&)#(9fּºƴõw]K@1!!%(-017<5;:CBHG=4*$ *29<>I[hmjcRB80(%"-.+-((&$(-27A<66BOkvaZjŽº˹lWX{zlcY]oth_hǻɽ侙۳l8#!7Y{ɉI%#6$!   +  &,90( #"&.0-/+'  "#*'&$&(,39B>8HX`fkjfju~}pX@6TŽ¼Ƕoqyh[^s¼xj_WYlzĹګ{ݻn6.FNk߼w8!+J4"#&%  ,0>p۟^>9Nқ;"""!"(;ʽϼʾĿ}dH4-$'$#&182-(#%&--+&%4BOUVRNH<0+'%&'-69;78E[z{l`TD<;;?FIHA9-'.8>=;@JPVTRNQT[cf`]jyl[K7'(FsĹu÷Ϳü}qvl_[LHWz{}žӝjwܮa/"27@Ywڱg1 2\E','%#%#)02>g\FJ|Ƽ}2" #+=Ҽ}ɰпùtW<42($$2/""&$"!+-*'#$"&+/,-/7FQVQK@;2+##""%)5D@=9?Xtujf_adjmeWLGM\ca`hu}|{{~|~|z~pX@5-"!6\x¼ƾp`rǿǸ|rcbUGMnƺ{̒``פT($*+6FS`ep{٫a9'!DEGB90#% '0BMH@?L^wxpns~wxlekm]D4% "*F`vÿsoyzZIHTl~{ÿǽϾwgUVsȿɾõڳxOGgמP&%$&)9<37HPV\\jxڱj@,-Lzc2'(%#  #'.-/,*$%.79LǬq,&!$+QůtpwӸη´{ziW]heJ6&& "*1.##"&*06AA;69>EC=:44>D80$  %8KTLEITi{xpm_jtlcc^[NBMTC."(*$'-Iixl`j{pst}pgns`G?Plu`@48?Rdafs˼oeqǹİȊN41?f֤[1&&$*/+&$++&$.4474:BOey۴m<(%4[h/%"$!!**-/.,-#&05?Lh/  %!)2oνϰwf^l˥ýxxxqsx~xX@1+).4@HB6.3:;;DPOB>>GMC:7.3:/(&2CJIIITeiolP9.28BH:678ABDXaWD=EUeplhs~nmyznbaispdjnb_gw|{zU:4:>957:RonZZdp|{r\POOX^YK>6?e~}­žñިY2%"#'.>VpΣhE41%$"$&" !! #+&"%,-,-0Beק[,&DgP-!"  #*-,0.01-'&+/7U̮ʴٿc)!&!&-HͫeVpǯϻtsd`pgRR\jjmͻϸµ|ojUOTRUZ`heky~{oaXTMJIC<11AJ@3*'+("#27'%0.-.-5?DHWt|n\Y`ggn}|tsfP8(!%*+0.*.4GUevxjMJYn}r|y^QVduxj]^i|{zwry~bW\m|]A68@?AHOe{sv|xm[G832:@@<615H]c^ULQ^ñĿնýܦV2,(#$(/:I]{ˏQ7,'"$! ""!*$ !)Ihvs|xbD/"$-Henc\`dlwsmp{re`frcA45Ho}qws^\hv|rcTD:50($%.=EF;898=7/(*.:Toy{fW\ϼ|זK45=Tk×oZH;8BVoo]XYD:<=>==855.&!%7pةY,  +''-.-..*! +-2570+'/8;755?GO@2&'.=Qdpo]RTs˱ȴ}ܦ_@Hmҭ_Z`ckz{wgQ?6-)'! 0Sܷm5  )-,(-)' +$-36Bݬs__a_pἉwЏ.% #&3m÷Ѻzwvijzrl`N>76=T°zga\QFEJISjxww{rǽ̨øùoWYypZKJQ\onT=-)2GciU>1/2181%" !-7;3/%$,++/A_xr_VQOHHT`U@1//-3PhgSA7476>L^k{{T5,?]jc^VOI?,! )?^tvhWPXnpT6/6HYj_IBMfte`sn]][J:5:CEFKJG;5-14443U{Ҿvm_Wbnd]`^f^]`ecahsĭʫs^k;tnh`XQQW_dxv^alfTMT]]MFC=40(% '8B:.)&#&'4\{gaa^OEGERalto<"&28?Qg{noqhTQ\NAJQJNNTSS]ltvqdP?57?NYUF4%#2::89FSYK;Pal}oS76EQI>?AAGKLIGN\ltz|n`]VJ=45::;?84/39BDMTa}tlnrzyonidds}w`Xm]Z^]XSTSKNnȴö|ݷqzͶz6#&%# + -2/15BڼT9/,029H\͢fB948Fټ[!"+;Թwuqpps}}~{xr[MGM\c^V\̸lQB72377IlǯlV?/%##.Ig±zrfZ\ce\Z_]YXY]gfhqǿsͮ͵ɻtbenmhonhaYZskQLNPD=HUVLEA<20*!'4GJFDB>9:Rnifqyzvvyrmw}xvvtopx{wk]J:,!%-73'$#$,20'"'('%+5HZfszgbaZQ@>Qfi]XRGEGB5/4@TdqyveR?952-+,.015/-/457>GNZkt|thfq|v]UTXahsyeNKZWY]]_`VB8HkzŶxyũU-# !#(**,.&!-40/7A׸}J0*,+15;GwĎL.'#)6ԳM"0B㿙onrkvydTPPW^him̻uRB73/,/2@aȾ`A1)&!$/AXrĭvbW\c_XUQLNTWYbem|lbiͳëqb]i||z{hSKasuXIFFA:3+$!#0CU^Z]\TQWcxʾ~VD?A=>GNXmiE0"#4IdzsurrmaPB4* $ &:ShnidXIMLKTPOZilh]J6++&%3F^jaL?/'&$%&(**-214245/7>AHSTYemjbdswcTIDIWi|iNLRZ_ccb]O77QhnļpwԿ7/0%),.*)+.+% (..013Eӧi?/+'073:Hh̴p8& (5Ѧ>  #0P߹smlkYLQWTXläYE710,,6BIZlyĻmR@3)"(4D[lxwsqsŷwacyrfa`SQMD=ES[ZWVa{xld\W_zӽòqf_]]opVBAMTdr}}l[NFBCHZhneZPIB9/++).9Ohx{vtǷoUMKIMVao»{__g^I.%$''(;Xtvz~vi]XUI>/'%  +$.A`spZLE@DDGRONJILOB0 !0K[Q=0%# #*%&-0/07<9658@GEHThmmrr\VLGKXlxe^^_ace`QDRb_`p¼jWI91+5FUdt}nifffsrVTjzzk\SJGAA:CXc^PEKiwqokd`_iuƷȾǯe`bZUsz[D72.5E^puw||qi_OHLYm}okg_VQJLP]pɳwb_[^l̼X@G`eZ@0,)& &;Uqv]LPcz~uea`b[NC844+$  #*-7I`nnZKF?617::0+&'(%%:KC4'  "'(!#..06>JD;67FE8>A>8KbzkUD720+.8COZh}rec`dki`bw}xvpnrnZH>BGP^\ZagcXG@;>B?@R[epҶ^NLLWuwuZF8++)6Rpx~ijǤpLSksqncWY]a^dzb9(-3:AD9*!  !%6GUUI726>R]]WZ_[TRPM@.!%&$&*-*$!#,?QX[Z[\^^ZWZeiidiyĽjiv`PC98:8>=AMZdxzɾnYJFPjļtP>9722;Ts¼Լ|pp{wlG+"%%)195%  (.7<882'! *8@CNap|{o`UZ_r}znfknjf\NC5+$  $#"(,573(&7Neopnjkmpz}úɿwscUND745:HUWM?33Psѹzs|ywpnxs5-,,/-.**)+*.1030154544///04::Hϵ`C9<912/('((%$%.LB !  + "$1XùпydRFHVvϹ_E647Ii²veVE8.)$##'(.08I\^ZafijbQE<9AIM_mqpzwaJ9;Lfzwid\QFA645@JKQWbwmhhl||w¼®T?@E>:@Ssźɷξzhvzi]I0# $,9<2($+4657.(-39>IRZWQWTLF<:AVbkpt~wjik|v}x`OB:0 '5853./02;GLJ:% %6DWqwtvzwzĻŹub[SD968DZnofWOXzһ{|xqq:/),/,,*-,-1232//361521/-/4768GƤ{XA;<71)'$"*+%#(EJd׬E #$1HϯŦ`G;;Ig^F:43653/-*)*-4444:>>951)+-16BIII]~_TYfx}nXE7+!!'1=FThȼbI:125LdʻogdpĻx|zhULAAJT^__`mupjhdN7226BRVQRMG:/+,7>>5% .J[\L5,4976>JQ[ZM>57=5/5EhxzwƸvuruxy}~ɺ޿h5+)((*2-+-1101655203724.020467Akϵ}movqjm{};!$#2_׼ǴeJ?=AWɶ`J=9:940.++.-,43/0560)%!$&'-7FMPTnt[XZev}qaM7)"%.5?>I]~|]E73443:LhʶwYHOVgѲqXNZsϸlVQQKJT_injjzx}{»sskXQQ^o}tiVF<5(#.440(##*/0-""1><0+(%(,%"&')16:986* #-00..9?8/54.,-,-3.020543-$(-4>HMTavkb][ev}{rcT=0,19>Nglp|r]QMP^{ʾƾ˼ydNJWm|m^Z\S?1,#$%"$$$!0><2+& #-4324:DHSZO:+###$*./)5D?86:=95IkbX`rss{mYh¸֝@50,+)'+-+,..01.10045741160026:W/ "*'B˹и}ZF<67D^ísWA94343634:835200+%  &+6BEFO]hkowutnaezs_KGHGMMGCDKY|zla_i{snx̹_J>2*1L}ƺ̲wɸqWD@;1+4@GLXS?506D]wºɷr`SP^n|m`K:7=?7,('# ! 0?90(!&+056:;=CKD8,'(('./,(,6<;>EGIL`}w]Q_pxpowrdwʼѼ֚@/-(+*'(0*+.,22--4245:52250226:u.$ ! ',M̽ʻhS<2.6F\ҺnYF6.49=;9A>500,,*# )5?<>EMT\cswse_s{WEJanneSKKQc|qoy¹wQD<31@iʼwdL=2.(,46,$  ''(.0/2FHQ]hpxukkaS]xueYW[o{tƺpVOIDPj¸üz\A1+()1?B<3'"-=QVH73Klwp`WVd|ºzpc[ekecgklfTG>60.4DMJB960($$)##(*!$3=8/'"#" !   %(+,'" ',26?A71/259CIIEDB@AK`ty~}rtvs^OSbh_``[gwhadktĸϚa;,'%#$+138@MXakxڶX0+++.),(--+..2/02677:854//464GQ`lz¶{vn~|bJBHLA7;>A:.'" &-//12/%!#$#('%& "-+%!-6862..262-.*#$&-251*%,:HLH9.,18AHOMPV\XWe|{z{i]_keUXdjup]Xb}ɽ|E(&#$'*08>?@IOX\h|ڴR3(&$-.+**,/0244424588;622.476:Yt# &""(?ƻѽo^M?6323:NeϿm[RTWSJDCGQYRF8.)(#! !! "$+/276;Jfpwt\bĵppminyuysnhejqbB1.14APQQC-$%)4IYQA9ATVPHD;8:=GOQSN<0(#+26K\]QKQTQNDAB<@AB@ESfuzvtx{h]XSPVh~rlaVZjlQ1!#"&$!.BD:/$#&5?A3"&+4IZWH4$")+$$&7P]jqnf^YODB?@72-'! &3>>826DPJ>1)+2AXlso^Itf"("#1_׾}wԶ{hd^PA78=FRZd|dZfkca`ekprsuj_SQWci`N>1(#!!$'*)*,5BT`b[WSNXn|xr^\mwv{ikqpv}pcl~lZMCETthJ:>HDAEJHFB9-#"(3:GPTNQV_ZVLGB?=90-+2:EWbjphcZZW^e^C:<60/;J`pv|{xl`]]PKPM9" ""(%(.&/LXUI8&(3GT[F,#-?IT\\XSI?<ERlz|{vg]`fghxuWLXj}|wݹ`?& 4bڶU3..+.((-46.0213222475534324168AV );˻puο|lZME@EMUZ^hzlZTJ>AM\iotwqg[Z[^^^WH:+$ ! (-0./.0=AHQOF@<;;5-%,5:ALL761(%%*3AV\bjrqdZ^_VSTLA81+! #&(+(#0:62-&#4TefcN=>PetxcI;E[dhaXV[^SKEFEFKRRSPPas{{vmh`VLJGFINMMPYelmjgkrxxtjc`cjt|trttw|¾dD-%!!!$.562.,4@C?B?9546@MWglhkVAg{m^\YQ^nw|z}sjpvwŸkH2)+242110)!$*0.+/4CL`d^QG=4+&% "..& %(3>BC<6987=HTUUVZVI>FFDFJA81(%$" $(-1282(' +?G<+%&,-&"'=_rwwj`fv{m_\XWVRQWZZM=0-3@VcdYI@LZ`^VTND70+)*29=AEPXY\_horpvytlgnrlcSNU^mz}tzvubD9>ITdjeakxʤ̯bG7.'#*b۲P-/,-1--2520/420324643478052557N8 %5mѳwpȾ|}oN>BELU`dokcgu|o`RIFBFQW[]\\fmia\TRTQC7,! "$*)))+.23,)-:HH<922,/8?FReu|X@ezl^SSZU]ksxx~̼ycF5243.((.+%$& +;ENQNC>;1)$# '631'"$),14;AAOaidbc`YRWTPB4/3>J]jnlrsZR`pnZIFLZk}oPIWeqx`JB??BKNIITcjin}Ӹƫ|hZN@7.) !&)&+ZګI,,,27/..1/00603315462356352257R?  #'9ЮٿrgUC:AJRXgs}qp}zpg__WTPUZWSV^rwneaXRNGD;.!!!!(.,*)++*'*-8IRM?6+**2;@FUjw~kqcXK>FVWZ^cek{}xpbTPNI8((-+$ )4;89672/'$&8HT^SMKNQNF<71342*&'" #&&-8:8:4.'%""*6DMKMSVYRF77AP]RC<>EQWZVPUftpedi]D4)&$%)5:-#6FB1-,066*""'+.@R\SHC>611./+%$#&/AMIEHT\ZI=;@HC7+-/9COcie^ajsjG37BHP]^REB=8=BGGDGX\RZxǹɽraN<348:4+#,_ܰH(%*,0/.-.///2152244564665/1258FL    !+AԷԶ}fP@:HQV^gr}uptri^VV]`Z\evukh^PHFA9, !&&,/-()*$%%+5EMNK>/'(0=?AHUfpq{\[XP>CMMHLY_l{cPPqº{vl_F,%%  !.320/-.(!'4GVTF?ENRJ?;3*),+( !$,9A@?:."!2IX\YXSROMMOY\XD/"$$(.//)->?GKT_YF4.5=<=HHD>:42:DNXUMSWXf÷Ƽu`V^aYMD7-# 7zܴR+(***)(/.,50/22236546554204238LC$1_Ưr_LIS`eeefq|naVY^cku{qh[PNJ=5%"(*,00,(+'%+/5AGEC>7-+/6@EJJWsſ]\ibPGH?9AMWm{uvznP80:eȺrM/#%+/'!%03611)(#!$"%.AV`S@@MYRD@;2($&.($,63244&0KZVK>524B=9=<9:863FHA9974237=FTSTdȶojupZJE=9@DS_\LIPB4('9gǸ|zpK/%#+5=;8*$&%'-440)%"!%'#!).1;KZ^N99DPG94.&$!#$ $$ #!0AH<-(-.+$  $'5L[`VK<+/?:(!'"#"#&)-+ !#!'$"!%++(% %/1(! ##','#&6ADA9699;>>>>@@HRTOVnǵȸzX?0)+=qԜC/,,&.).-0-4.//0/3224830//20037Mo\izr$,Cƴv_RRftvi[X\ptpqwupm|qZTRWWQC2'" !&*-..137;?DLPI@;=;>==9@OflqpvƶcKH=;?CDEGA540)$"(:d¿ƺnYRUhzqY@/'# (38>JMKE>0*1,-0.)#!&#!$(,+.;>@7-)092%"#..%   !'8DGC9.$(=B9&% ",-!"%"$#! % '+-,' !&(% $$!$,9A5.259AC@?CCBELKNbŶtT;.*/K{:4*-&(,,203/+/0.0.365700,*),+,3Fcrvr&!2eҸr_XRZ`^QHKXxzulnw}}xpWJHKUPD7*" !#,/.*).39AFNPIB@=;;BHC;Je}{eLMlѾaFB;:?A;32**0)&#&3Hp|uu`NIP[qk^P>123..7L[`ghaTF<2//)!#!"  %#"  ""%  $& !#$%+4=9.)#/7+&-0-("! "#073,/6<@D>;BJJINKVqŽú|a?.'&2X^4.,/(++./13./.00)(*240'-+''&(-5Cs+&=ִm^ZORNLFDTkupim~~zkV@?HIMJ=.$"!##+1/,((.7>EPWNB;>B?AMUPM[{hPC67K{rPI@:>=4.+&++-29AVvɯgNJQNHRgv|hSKPNFEA98>GLVhz~ykS>1)& #'("!# !$+'   %)#  %('(1CH=.%#&2?B/$!-,"(0+ #/4/+%%''&"+9?5'"#.<0#(BX\[XQ:''6B@4+%%%*7:405<>@C>9CLRNNOZu¿þ˿{pgYB,$ $;oo6,,./-,/,,(,,*/.&-25*$./-*)-.4R·ħð/*NکϬfQIILNQNQc{xxs_H>CONJD5)%""%*230,*,6;ENWWPB;?CHN`icdq~|eI51/2Fv¢rSI@=985-((+2>Qh|̩}WF>8?HSZlgTKD9*'**)0=FWap}u`K8/("$#!&))'&$ $ "/;DJ@, */' &%$#%&&,5) "" +<<,"#)"  %4FLE8//><53>R\P>5+% !#'4DSA-*9]x{rcN6&,ALD843'#-218=;6..5B^ԶQ1%(1=PcviG.%" &9VudD6.**' !%)-,*$#!# !# %+0656:K]iqdH3& !/63$#'/)&#'%!"&9TieH,%(3>DE?>:;<0*('&->WT@0(* #0>LY\\SJM^aVWbqyn`TI>:88@Vem]MN\|saQ9($):ON>57B>NH:4DVdki^Ycsi}ɨɿz׺waQDCIRPJLLhxgD8@B964+  -\úB,)))(+%(*+/0223224041/202.444;vωXNNJSċS:Ca &<ټаjUICJYoǽraX\vqd_X^c\TG;.%#!&.3427?ABHQ`f^WUTXV`vrn[C80&&/8F`Ǿ}_TNIIPLA?CMgƷǞi?)"'3@SeziH*#(-4Ce|rtgH-($&)+&*(*042-(.,-(.,/1+$$$%%!'30-/:ENOONXexgH7*   0<:+$$%++.,""'#!#(7VrwZB::96AYpubL@8+'+*;KVZ_fjnjp|}xrib[S\ny|xrtqcVG88EVYQ@6=NUTNQ\gn`G515DQH4,:WvrZOWomԾv׵|J6-*#$*18=C?LhoxnQ>76277+"!&CɝH*(+(.*(-,-./22502319744110458CjOU]Z_¯xD46T ,\uTECCQkøx_T_icacedZPI>2(&%'(3;:89BFKJKW^WMNMLUfxxlYB2(! (,8Pbr{pmlwuaVZf|ĺ]>459>EQdzwK.!6MQZd^JBEA0$$%'(,/'$7B=<=:35<=769=BED=<;;3/0;76>LXbdhjlwuS>.)(!  +)" &--#&(&$&*/2(" -Ccq]RVj|rdUEBTgaWSLRlveUB.&%#%0>BHZd^HI`cipx}~uf^fuzxz{~zt^J>:9HXd`WK>CMXXMJSafWA58?GOB/+8\w`ZdŸŹzxňG-!%)-32.&(./1@LKEDFJRQGJE>7:8?Pags|xp`C.#!!#-4IY\c}znuļ¶wTNZ[USZzd9"3UtzT5&"(%!$*)'030' 0KWPNLE@DHE:29FPXWQMD?<9464:DT_dmtx{}aK;88-  $,'!%-0+,,-5@4,#  %3KnwnlycNHPl|wnj^`s}pcVPIFELRX`llX87EBDN\ahffjt{zucRQai^VXciqri]WPG5)&+9R_[OB98@LK:4>NRG717BGC;20>czifν{|ҤZ,  #*6?Jek^Zadjhfbeos׶ǁ<*(+,,./++42//26427568424/-.05AiتgygU\m#Eý|[NNV_rƿxma]aVUH6+(+.19NWXSRSTY\QE=8441?LSYejecO5#!$*2?NQXk{vifwIJɾ̻ʺlk{z~vbE+'GutM0 '&(/9:81//5F\aYRRKLQQKA26FOQWYSGDGD9/.8AMZ^fntt}tdVH>9/#'& &08.037AJA<:5/'#+8FYsn`^o}{g^hiivvnmmjc]YPIERa[F/14(%(/3879:GSXarmVF7:MSH<;@FW]VND;1(%$"+@N@0**,.76+#'16/,*+4:5245Db{mq̴tzā9!&;J^{}Ѝ<0(*--,0-.00114344327434./+,24:Zեjdmv~}%&Qǹ{kfcjqxlc_YSB0(*.08FY\WVUURS_]QF@=??LUU_a[UL8&!%&(,4+$&%/6BUUB<42?DB8-(.EWVLB4% %/2' "%%! #&+('*)7\{w}ųypװ^*%?dþʰΈ<2,*(+--./537038212359242.0124>l…_QO[qvipz1.yƽŴ}¼}qi[H80/125AS_^UTUQRU]\OHHLT\`dgicUL9*$--/5=BB>89CMSRKNuĬĶɺp[qmYC1*($#4JfdXWL1 (347?R^dhc`giaN;669GYdcPCCDCAGMA6209A6/0.07AEBBIVvzrhRGGLF3#+1,$28@BB?=;?KUTWeqn`KHQZ^ivwn`_g~{]8,0BQ`g^E4+&->A8/*""#,-#%.=GA;44>@A7& (;LKA2&%'"!!$0QrȽynmӞL" #.,'+GǰϺo5-)()+,/+..22032436887142.2326?qٵ}P>>HVds€[V^P !(@ѱʶ|żǼrXA72=BA>GUZ[XYZ\a`ZN@=?M\fdlmm`Q>-! (./7ACC:-&(2@OTR]j\}ƫlpzsdfzsfxǼ|YRkrP<0*$%/3327Fbw|W8.1+%3@OVR]gmnlkqtlT8% &3DZaUNLNMIKH<(&'095.*(,5<@6,/;^ocZL:9:B@5*)**&#.71'%'&!$3FLGB>:64>KUXXjzvhMA;::CTVE86Edw`WcroS916DR[XA( $"1DKG<9>>;1% $473.%#)%! &0D`Ϳvgbkx̋@*7629cͼɼ:0*(**-+.-./135735657556504324:]֧cAB>8+ "0BPOQlSM}Ƭ`U\^NCR`_[Xgv|ŽzZPUizpvz_cfD+# $5N\`kw\2 $:Vgu||ursssdA'"'.;KY^\Z\`[P;($&).,-))-049.!%>`gSC:9.+003/&%-0.0:C71(&+*#&:SR@87,& ':KLGWeaT@0&"$,=@.%'4KhiYB:DRR?78@HQRF- +:HI>:772'&#$./(! '%!"*8OqƺgY]iٞy7"+238Oz˱ѐ:0'+*-.-(*2.///4126667521.77748@WnkkeQ9' !2PppX?#1Puuri`YI2 (-+$$(2KbkijlcP=( ! "%&'&+'&%$.EK<,')('((# ,27?JH@?<97.!4LRGB910+#!#./'  #.@\Žĥ³b]ctɏܸj4+//.07Pt΄DLkôimѷfb[P@52/+-3:?Peq|xwbLJMNA1+5No{~mM6*"%)5PstV=2$ ,9Knujc]E4/*$#,44)  '8WsxqkZH9( ")31)$&%%29BIVNFKVXN>+':MNQB,&+%((%",) !#/4;@96'"!,.61+) !,2-#  &8HaͶuigqōܸh/ .23/24();JWngE+! -FZi{jQ>A9("*035-'$ "-AbwveQ>2.&!'#0;BDGDDTad^M9%&4>=0 )$%(-.+""$/-'%+&" (+$  &8ERn¹llr|Ţeֳh. &*.445@_̈́81)*(+.,,//02/312457:6421/0335AлeTeÕV5+)+1DΨ`/."!&'%#""7*''+.6LzÞôʴqtz}}ljbUYbfVOKLJ?84-)&$&,*.0++& (+//6?TvvduνxXA46-$$)0=H>/,22/2>ORIFKR^cU;3Dgw\>1*!&4Mew|scC(+JnxcD)!#"$(''((&#&(/D\f^QA:8/%".33122:N\d`WG-%(&  $$   ''94.' #'#!$ "$%$ ,DVd~Ƽ}fhr؞հd( &+-0;Pg{xz{9//.'+/-2123,/125678:963/22546B~ͩw\LUnL7/.).>zаf:/+-..,*+5-.16BuӻǽҸzuvjfpn^GELUM?5.&#"&+1:=8+&!&*+*4HeŽzWG?92'")5GK4!"&$-9A:=SsuWMb~~cTI2"(B_}m^WUM2!$)+0CdhVTL9% &&('$%'*).:FDB?@B6+  "%$ %0COX]_O6(! " $''5.'%&,,2442+ $$ .31'&$# $5Vr|ýohii{⮔״m/!"(.@RY]TMJI>9>Llˀ:,+&&-/.2-//04/4243/756473245;?Ш}cSGI[|d;,)-0-<}ğ`F=946648FSgŴȯ{γw{tUACPYP=2,$!"(1BTXD3)! #%" $0Mr½fYI?2&"*6JI0!&-9CBJl{|hP7,'!!(1HjbG;@F?,!':DHUlX;--*! (2686/)'+30'''(+1=G@4+     + + +$-6}ݼaOIDJ]gf[SPTPA0(#)-4@}оc\ctYlʼϷ|spl{ӿpVKU]SC92+'$%,>YkbM92&%*.)! #6\}zkVC4*&)5AB. )5M]kzy]G8* ';P\u|jW>0)-30(%$",A_r{Z6" +AY`XPE634:9-# +:MSJ86/%  + + + + $$'.:NUA1(%    +    +  &) #$"(-(&%,:J\fibQ:--$%0417<<:>=;AKSVTTJ<2,,)% !$! #:VoŻijxtn`^yәwڠ0"'6EZidWSOC0  '$$8LP=&   +    2:40,"&6860''+6FUhvxr`MB>6-*2;FD=<<745719EN\lj[H30881"#/-*'))260&/Nj¿ξ{rlgeuZr7*&/gŴdD2-+(#! '+)##%"';iz:0.***+),,-1/2435656752301/377CԱ`LPI;20/41/)##(8[ʷ²»ҽqihgimjjhsu~{fPF=4*$'+6Qml^WOMQTJ=6.08P}mgcbdlkku}z[J:43.5144,"%-:ITtlXF1"#044@Z|nJ3)"! '1=FTwwY:%,R~wtpbXF3&(=Zhv}smfV<#! #%#")%%5?A/   !$ /IVJ@/"#2CB:5439BIServlcXPG;97@NWL;-&#$$$ (5;RqtfSB<<>4'$7DA7/,9LXP?KsǶ|rkc٢W>HkX064ZҴëyj`XONIDAIA2))"##(% *Or:.,'-'++,,+.0,0448565432,/2489>yٷgTG81/022.&##(*3OϾĻùj`dimkaZ\bvux{`RJ;0*&&-?\jd]Y[afaRGBCIWls[NHHLNCIXcfu}pUJ@=:653570'&.NaeXLD?5/++7IRI2 '*0LjpeXI;:9-%!'BRKB42Fd||pƻxha\ҐF06Ő]M=W}ʾx_F;:<>=4&,QT3,+,,)(',+./.,0335554202223579=nsXE13?LMU`nxt`^XTJ?97AI?5//;Urxz|zxwf^QA4$$7Rnwa_[P=-' *9B^ɺvaC1 !'-$2YsqytXA.(29@B<2'#&9?3/-*&*.31/)"&31.(%# !%'-269-'' $$" "$""%' '589@JI>HRPJGFABEJKIHIJD7.*);LD8/*+)'#",AH>) ,.0Gad[K8/20,"+IXK604Kpʵp\]dȂD/4@aôrt|{yjV>-#&:m\0+,/-*((-+0.2/112582402207146:Bwϵ}ojlgTFACECSpvps«½yt|oaP=22:LRONKC4*"#2EU^]hmu}|gVWhzp]V[\S?4,258>FSWj~sksrm_NIK]j`N>311+&%'+'(,/47;;1'->NX]aWLRVG81+/5764558:VWI:'#&('# 4NT<)';Stƭ}wkZYn߹p>014CeɫwR>1,3Acl4,+*),(&*--.3305/5317503/40/5EIEFB.$*:HS^ckmz|cRa}tZA2+*,-2;FO^ilfjxwsqv|fG:I`rsW=541*'+-) &1HgwcWUQCACKNE6+'%&'2H`{ɿx\E4) (;3(&+>W]VUat}`@22/46BPROG@4#"-/5=@IV``VF7(&# )+-48^|Ϲȶq^LNhަZ8258Gi̻rgol3.+***,,+-*1/51421045348144.5=M˾˿ӳÛx۷}jVIFO^iv}ovƽt\E6,*.7CKH?:6+# )4AJVceqxxe_qeD3/-+.46BPY^]_jzkHASepubE-(& !()"+:ALkkR@658>DGNMJ=87>FENdƿmSA4) 3JQD7=Wx}rowx|p^QKXl^=(#)DHE@?7+"?`pi[POSN=*!,/)&.5?BB?EH6$+7;4,)!!"+7?8+# /KM8""<\|ǻþpVFMmڢ[CGMRpǾj2/+(.000+*.,.4.1322983/5:5507:L׹̨ƢȩjdWSU\dclzmeack»t[?2.8DLKC740("%&.4?HRS\mrkelx~}hI;73248:?KRROXlcC?MUZZO6(" ")2.&$.@\_nkQB1)&).=KX[TSRS_ovibyƹoSG<4(&7OaXGPnple^ZgkW<0+;MC+ &05Nbwƽxm]Vit{u`C/*'9Q\gilo}hC$)9GIC:2/%8]aPC8>MI:$"-0- #*.9;78CM7" ,61&## &.8:1$"&&$%>QG+ 5Ji´qVGR|ܦdSfzk5,0*+..,*,/-,/00247754110/5259TɲֻݾwpzȰ~pjov|zqmzodZ^j|ÿuM75:CPMD?=6,')()1BEBBJ[`_diokl{cNA:7:=<:;BHIDQqV816<<==4)#%'.<@95FY`dg`[OWgz¿jRE>;=>>9249GPO_~uE*#!%(.63,"&15>SeaW\ziE/' (;Qhuzy{ucM;62)'+5D\pvxaC+&$.>8$$!%0.-?[sý}kYOZʥܸY.-++..0-,0.//21/24668533023358Aŷi^vԺ~Ŵx|q]YbfkoplleQ?45;@FOK@;0*.9FVf|Žn>& #*/20$ 1ISXqrN4)# %&7Le}úzwhZPH=:29NlqQ71./:;404?>DP][PIVbm{p\OQl}rj_[cܶN+.*-.00/,.//13/525578521-/406:H̲t{ʻ̽w|`Zfuu\J==@IRPE@@ITQD?;9:@Qeokl||_ME@?>9;3-(.6Hb{ɿcA1'""&&(06,"&=a{c>,'('*3PdngUZ\YS^xnVIISaXD?L[`k|j``noVPmjX[{{s}ξö|}wk`XW`ݰJ/+.,.0/-,.-.13132267530/21629;Kپû÷ù}{zt}o]al{{ridVMMSUMD?HUUI;8439>HV\[Zg|wp\E>EMPJ95//-79SrĝkK>70)$"'/>>24LsZ9+*-.7JawŮ]X~xjbWN[jswulX;. !'/4(*8Lalľ`6$ #'3Q|iG70(&)/Gt{M*&9V|tL0.AlpRNZp{|ny~^_yl]}{vxͱý|dMDFX῭۽ݯI3,,,*,,)*+//55244243750116425;QĬȸǻIJ¼g_nzxbbffbRIGMSQRXaUB:87;DHKMIHKXmqk\G11@U[P=/-16:IeĨ~\NHA6,'(2MZST_yw[B558=Pk{x¼bb¾}fXF;EXdg[I:1+%" $-3*''2MkwJ63::<\zi]XV[gxk@14749IeaBDcûĿηaG<=TҞ޹}XVtܴR4,/+*(++00.24//100355824779437R֥ʺŹٿͿļqq_IJWWM?4-=Zmutr[GDIT]c_XIA=FQfmeN;*.C\cYE4-3:E^{ʿsb^YNB6,9_wypilra]c_ZTSPOP[o|vuwuqȵ|aN@69999@PZchpu{zlZMMZglqzIJĽ_RB:8AKK;0.17;>8..7GQ^rҷòýþƾǼƿdz|g]ODIwÌ{C0,>yԖ?3,((+'/..//412311658622492552=d۾Ϸ¸ٽżĶȿxcSJKFFLIEK^xr^awcNIL`nyvbE35J^a]PE=HSc»}slxn]Zm}|hMA7-*+*(0>K\c\YXRE;08JbhnqzŲþs\G8./631+0>P_g^QGLbmyӰĹƾŽǺvbRHJXÚ߸l>./Dҽνы;/.+)'),/,/222/2238887/01/42129fü½ǯijîƱudflpo_MGA>;CU_guvZNcn\\hlLBQkxjWIETp{^MFQUZTB3,&$)(%),9KUNLGB50,2E[kkmrzwwhJ9.)&'&'2LlvdgrϾϼûn_G;E]ޱݳh=/3Oڭ}n|ÜzqӘA7/+,**''+/0/012/265792600244/9a۵ǽн¤ŷ}`TcrtdI83379E^p~jRUzjbnolz^MTpzrþmI<647@KA4+$"%$"!"*=JQQJB9338>N`iowxwwmP:3.$%&,;[zwt|ø±®Ȼƺs`L?@\јp{ݱh>3;\ґZRlϕcIEhϒF8/,+)'),/--032.25528601117532?Zőhdhd^[]pĽzºŽȸDZǻp`av|lO2+(,9FXvbZn|rn|qZ_txy}rgl}Ŷ`<-)'*1A@7.)$ #4IY\XQF=988>O^fovyu[ICaʼnj٪iA:LsΐWOnݷn@24VΌG2.*,/'*+-+//52,/5656655427427:V\S^]RFWmsgXF=4,*08JVXduq|ȻoWNK>23>T~ҸɴӼľƷoVJFQ}޴{xќl]nȒmzNJO1&,HןD.--.(,.../10524236885/542.2498oΡs^`jiZ@//6TŭjgpθɼĹbA,%$,@:0*.,&$(08AM`rtkWC81)"(2EU[j}}rrcnȼ{gaaK84C]ʲ·ӱ´ƻƼ¸kODFUҙoyˋZO_oܶtF-*3PۦI40-+,//.-0425100368563621/557>>=EWnvyvmU?1#*;EFQ]h|zuXID?Os}Ļvҷmcdwƺ}zƺüpmwzʽ¶yaO?@[ܧ`Ljܰc4&(fߵU526Ccξ~~}ɽķŸþW=0079Ei|nIJcLIHP^jvȭp_SQNNF;-,-.4<;>>;:LetqnfTA0!!,6BGNV`uzf\Z^dbOEEHXwyuvzƼ¼ɢ}}~bW[h{y{srv|h[TSOMOV[mx}{|¼lZXlȶŸ¾zhYL@@[ס[Kmשb1 !*HѻƊP3(-Kْ=2-($'(((*/1327456267822443448>^ʵĽxC37;6AT\XZTH<)!+9DNTZmjNABHKGEMaoyuls{|üsr{¹Ǫr}`VWczuSK\zi]]ahrwh[UF61279868:DGELZga^usdTQZ`diu¼cB8Pl~{hwͿǿwkXLEJfס_KrҞW-! 1OŽhhܾJ.)0Rՙ@-/-(&(---.254300456870224202:9Pɠb:46?N|ִƱ~^D;BTkļk[\kLAATiz̭vyujptfP?=?FKTLC>BFEFC><725?GGIB<2%+8@JKUorP845:>DWvuq|n{fbpȺƸ|vdZ_|hC5>Upr_]^_ba`N?91%%%),*)*%$''+8>?>Wpo\E>:64379:L]]Yi|µy{nJ-':Xj]HUƹο{s\LLW͕YNÄC* $2Lzw[HDXճt?,)2Zל@-+-+-(,,/,023.-5288862---264;;ZպG4,.8ZˮɳŽtXHL[u̼t`UXw~~nbVYj}бr^[VNA615>CIMPS[[XZL<5-)-6==850*%"+267CWrsUB968;AW|{_Qdsg]c~ô»w{kbkd@06Kanxukge^ZWSE84,% !&&)($$-24:Shi\EB:1+,1((,550>V\SNHN]jtķhOHThwzrmfT6UjYL[}}n_mvukhtwknnyϿw}rZKK^vMRڬa3' '4TptfQG7..4Rǡb8*'5`Ԡ@-+-.-+-,.,0//304887964/237208@eѼK2,*0?pþջʹǿw^Zcyϼym`bvwgeiwwrndbmϸtZQK@:507BFGS`lx}}lU9+$&(*/.*+*& (+))5Jexn^UNMH??Srh[hue^[mƬvktyvyhZZge<28IV]iqqpneUNJ>5-*#  '())$ $(16:Nmrj`M=;:.)(+++0:<67>FLMQhʿĶs[Z[J0)0>VZFAHF4+.Ci{wq{tULP@6GZ^PKerw{kVQWjź|{{}gQD?Y׬eH\֛P*!!*BQVVD6+##&2RõZ;))9kӝ?,+++,++...611145677>835301339@TR4(&%-Iй­xw̸}snnldX^iyzyzzpedqgZXMDBHRaegnxuQ6&"! *&%&#$ -GgwmgedcZC9F]r}zupȶpRBIXl~u|aQMQcub;4?IGOZg{qZPH=0& $.67204>;59ANTTUi¿tQ\ų~u|rS<9:4%!.BG1,:JGDQfwxcXVG4-.+'/>>13OcrxhNFPhɹoWIB>`ǍVD`ϐE(%8?APK5-*#"#/GbuzW=,+;Gc|u]LI>. $4HUMCQ]hoq|tjVKNWZRW]][adkv~ɼWAGhƽzUEKUiztaPC5+%"!(=@22DcqugJ4/1+%#$$$'('%-E[r}p]Ycr}ʽwfQFAGtݯhC>cΊC'$17V`SJWfnsw}vv}wi|ý|xwp^A9>Qh|Y:26AUdZK<41+"$%'&,Rezsiegsƾ|tn_L??NҗP7:aҒF*  #-17>GG=3.(%#$,1;HUG2$"(Bψ8-,-,+-/),..2-3546578646224459@pܵsB)##%%2Mtn<$#2[ֿǼĢ|dZVTRX]]cv}mwɿ~jdlua@*" #'$ )=SekS<16JQL;1CP]_^^h|zbSI;8Ju}aSMG8) !%/E\_NES][ZV_iĮrTJQPICF?33=L]lq{|Y<.-08NWM@;46207ACA;DVn~wmiXB58KchX<% +0/+*+)&$$*6G^xhdnſ}sZG>BXȅE16c٧]4(#! "$(+-5=93-)%!!"(,34-% .Tw6...--++,/,2004547585758:64319AЋC'%Bc`9$ ,G]qڿĨutrqmmiiqttxsq̴\IP\WC0$ &&!!%&#(1CW_a]?)$)>HH<3=Q`lz{u{}{nhs~ze?-(*.25AXvrcccQ?8BT]bXNYjy|xvm]G6/?h¹o^]ZP@,# $-E]]MDAGC4.6DVn{uomphgkr\Sfr`B4../('.-(0@LTSSawjE82/.6OeaSGFGJM]nndXYrp]OD9+&%.@DA7' (:GJD?@82,,-7KnvtsVGBFcw=/;oƑV7+)$#"!"!$*,4.)%#"$&## ";md4+,--,++1,-/242442377524499667Dm1(EN8%'6>GZuױӪƸ̲zuoin|tcog]άſ{T=?HM>2( "%,-)$*1>MZ`aP4$ %3;=89>HSexyogiliceglkhiinthUK[w}U<563,'1JfvlVPVQA32BWcYLDFT_cbmiZA0)5[pc_c_T@2++'-BWUG6//*%2BKI@>>?85IPD81'!(/31'&08BHPWG.',433:EMT_q{shbZOD>@FNTVVWWUNF>GdyqYKD<.%)9Q_YQJOJ7,-?NUM<67@HLN_bXC3/7\cTT^[VKD<4./;JB5$%%!#*8P[Wcwp~oZaaXMFOZ\J2$$+16BSTLP[oxtswxhfkxp^KA775.*&(,9KPLD85ATlzlhipospw}u|bLBANwڭ^70HɭqeXNA;@@=:6.)%##! 8{r7/-,(&-322/36464127573.2344456Br> $--'&$)4B`´{vz^\b`K:=\пǹ}aMSajbTF5+3==6( ",24AN@($**,9JYdiknhhaN:2*'-6?HOSH>8229JcxhWI@3(.:JQOJJNE4))3<@:/+*.8>IX`ZJ<64564016AQadd[PSfwn`cxqor{x[KE?SәS62Lùwtwy{qYE4+),0,&$&$#*K}:00.+(-12./52326436:8344203544Eګe1 -0+ #%*+7ZɺfXURF;7FjƻƷwnmu{}k^RCAGG8)  '0>BO|z9-//-*..104025256666755842216DQ̛Z0 %3CD7+#! !$8[ָĿ{bZPE;7:MjǺǺnuxxb\MIQG9( *491$)9IV_]YWWWE6* $2EU^R>,!!*9JNNLD:;ELV[SG@>CPdk^NCGH;40.+*#"&/7??BBFIH@@QZizG$+KUG=3.)*&!#8FLPW^[TK:;KUU\[G;=<;GOV]chfkrw|ha`ar{cH<701?T_WT]jpWHLSaxC30BϿzzٳd5..,.-,-./1132555754<53620:37KP˙fF1-+..1>Tuq_G1%&$$ !.Bbֽ˻|x}ħ~eb]RB@DQd¾ȾhWhĿ}jZNKQI6" )+.*" ,:KTNHDB?6.($$*0=PalgP6$!(2>D=3-+)+24-'"!&.258Ll\6&BJ<4010,(" %8HTUXXRG<./@NQ[]NAA:8;@Nav~aD7?Snývm^Xh}`QXcXUk}qZV_eUA2,-/:?@?@IPVW^ccgltoRAEKZ{~jK734.*/?QX\frnTEERlݵk=0,DΤ\5/,/-0,+/--02462668775427443:7@pϲxnnnmw[;.-.22-(# &6DXvDZwv̳VLPMKLNd{̼nŻudUIHIE5"!)''#!,=EA7334*)(+.39<6.0=Zlw|lZNNWu֡Z9+,Es7.02-//../.0/234785573/6854468DvüȰ]EEMUTF4+&! )2A_|ŵusqǝfFCBBJWkkWNB>?=4((+&"&.3/(*)&( (1>A78SsueJ2)%&)+))% !#.:EZgljdci}{iSD94.&!!&*1>CNXW[]RIHFJS_ouqx|~wmZJDHE=4;QclifkbQGNdspngmpsmh^TE6,,2:@?EMNNQV]^akifdZ^oxmjf_SNLJLJJKPe|sbWR]ʌR7++I|6/.,,-0//..103537666:764422869KάU\q}rW<, #%2Kdxcdps|Ð^FEBERhȦy||pZIB;>A=3("$#+5/&#%)&  ! &2@@=@XooaSE>51*(%'%$%'-6GRQMNVewzscZSHB<6-'*2=J_eN9(%)6>FE>1,$$""(+,%!.32.-5@@Obec]LB@?AJN[`c`TD?BCNX`blrxsd_]\]elmnme^fwyqfe_UIB?AED;6:M\lxqVO[uzt{xeI4&''/68:BHGIR\]QYnzwrvw[PU[RHEHPZ]ijfcq|x|jXP^Q9+-P}65.,*+/+-//3544266777651/45778DË_hdA($"!%+6NmϩuYbv׷ZIDITfίxjV>227DG?3+#,7?EC3"#!"!$%0;<=AT]^[WROKD9,*,,-*% %.9@>;:>LTZ[X[]QEF=2+0ELXebV[sjRFKRMDADRckwsj`gyxt{|{kXPa῁T@39cŬm9/-1++/-,//235743655654125576EQTH?@9/)+6BJV[QG960)*,.*%## %##'-+/66;CDIE910;KIB>@>6/%$'(+*((-./06?EFC?70-'$',.4:>>?BBGP[bXND@==:87>P]n|voJ5./,.258:BOXfwxljz|lQ@AAB>?DRexxi`gwthsupwzsbRTj߼\KBK{عe[ba6--0.4/()1./315685475954632080 $..+  (.//31-*,00./6=?CB@AGRUSI:,&%%$,4<<71.--),16AE9./0*%&06AL]fh\M:*'.330("$" +  %(.2470(0.$):DC4.+)$  $%#"%),-00/*%"#&/379<<;ER]fe[QC86401;Tl|ŷ~V;002079CN]fmr{nWC<>?BDIVfz}xj`hlc^hlgoohRHR|۴y]QM`ݽN717N۾^/.-/3+,,,11/24564255:723264/7>Cz¯n\HHRbfV6$!&,0Eбrsϸc?-',?BSh|qdSGGKQLN]mwpiiaVWcnqok\HBT٥iWUZrʑP-" '3Xd2--..-/-032402265436:543232358795534176A;211-$!(*((+(%6E>0*$#)3AJG<+  '.0;@HPPF94% %)./44/*$#%%+1.&&$$!$'/>ahO@AF@-#  +  %4=8(  !!"$%'+.( )44-.1107@BBJJGTesxvx|{n][ZUV_ss\MEGF<;KpswwgPHJT\aml^XTPZgmkbZWqנbTa~נS*2lױN0.+*(./20/0345562543789824728;<800DghVLGKOQ_}|paRNPU_ml^[|֢fZsӖM*%RʳR2.),+-1001.345>4477:962825769;Bd׫i?2./+(,-($$*4UҶĻoRB>>=95." ).+/** !0;:5/*+'(+022+#'''" ! !" #!!%+" ,=NZZ`]ZMGD6('#&$  &6FLB61'! %)& !!(*'+.59DZhmhWD79BLLD?AKQPMLQV[]mvq\E97972-0@\ufTKB>=9@8277+(4VįԶ¶iF14AC:5-! " %.0)%%)3;8.('"! $! '/.) #'+$ );NYZRE@8/*# ! ! %0A@5.)+"!"&('#"#$(&'(,18BT``QA=>CJT]j|{s]I;58982,.8MplXMB877A[jlr|zlnrcWVacaaϗ]QgΗO'<{ܺZ7-+-/-/),./537669459;842545669DvеnacXJQSEC\¾Ƽ]9(-:<8.$ !$%&+,0/'##,793)" !%'056%%4;8/$#*60*$%+9EJE6.()"  ##.:B@3,$$"&/60+)+.#''%"#&%++08BLE8-%&/7:83/5679@JXcm|}t{cQE?8::61,,1Bcpg[K>89>ORSjvkt{iVLLPYo̔aPjȍD&/Xܽb6/.,,.,/0/.267877697980545435:Eʵx|ɸX7-6@=7-!$$'.21("%  %)6@<3,(#!(8HNF..>C<3& !$&/83+& "(./&   + &1@JLC7,#!+252/,*-,$*+'#$%%((&*17:4,''.8@A<3-049;K]chr~mtu]TQI:7<62/22@Xxvne`XE<8IRJ;,$'&(++#"+$!(*&)4;8///&$ '5HPD/.@C?:4+$#$#"')(!%    )2@KPK?6+$$&# %:D8+(&$#"%'#%&#"%',2871+)0>FID8-.34<7448C@1& %%&!     "#'29@@<4-$##$#"7IH6% #%$$ %(/6AI>2.5DGGE:.-.3?NV[^hpzicrrcX[fg`WH>:8BN^k{fRP]_[VS[]ZRJ<347AVix|wpfgtpZD=;6=jܤY;>bڱg2!2DTm߿c4,-../+(/20768112579;7775464<9Kҵ{x`TXe^G/ "''",1&&09;4'   $-33(#'% /469;5.(   !  + + +    !$$%%,/+(,+#  !! -?LC1  "#$#!$/6:AGGB=>@AA@90+.0:ELSZaer`Q[mtjYJN]pxsaMA>FQj~|r[GDNV]][ZWRM>.)+.>?:@kנ]ADgզZ.")>VZP^^T]zܸW4/,/--*(0-25?6464857;96734278=Jɬ||z|ӲɿUMPZQ:%!+,%#,2*!$/698-"(6CA3& &(-/+(*/+%%()(#  + +  !&'%&(&#"%&#"  (<<4& $)&))!)>;777<@<>FQWe|cJBGX_\OA>Jbtzr^KAANi}tiR?8FYgnkaSLKD4(()1>LYYXRWdi[F;7:@O͖cMRqɖN*%9:28602BLLMW_qݻ\3./10,,-/17035272678<763156499JԺҷvx{ҼĿ\PLL>.(3-#!+32((),1*!)=NPA4% %,)')&%*1/,+*,( + + + + +  +  ('$$%&##%&''%"!   )20+$  &&*,+$#5IVYSKB@CFHDDDIPPHJIA935BQ_wgR@42;DJGG939K[honXIBHey|w^G83BYjpqaQHBD<1)'*09?BDIKTXOB746@]ZNVx?$&%(,%%'+*)-/2>iݿb/2010-02-331422567959874258569GΪpezɠ~uplnдȿʻxj_L6((67* &/*$!#(# #0ASWRG6% -300)$#'*)()))%   +#"#!!"$ !&%+,,,+% ("%+'('  $#%)(-0+'##.CU`e[H2,/5BGONV\^\[XQF96A[n{{lO;1+,167960**2@NYc\SKNgvjeirgR?31@Tcnm[KA>>;4*&),--07>>ADF>:67AeݰqO?Ecۻs6! !$&0OݸY4...0034110352243767985305;68=Q׿̲P>BS}ؽ|urnsͺοmN3( $*10'$&" '4FR\WQ>* "*/0/)" ! "#%   #%'&#$%*-/61*$*&!  $$!"%'+,-/2*$$&4GSZ^WA''7DJQW__\ZX]VIESu}jVA6.*+-/.-&"#(3A:3-',+*+,4?B?ELOE?CLq٤bB46Ge۴g3!#+HzګH3...--03/./56733646987621:977=VϷϾP4-7GqƩ{strwƻĴiJ3#%&()&%''!(& !,8CTWSKF5% #$%'*'#!   "% "&.22+ "#'.151/121&! $'%(,+./,(&"$0@FGKD2! 5EHLQUUNGIT\TXm{mVB6/----)"!)/8AKWej{{ncXRLOTQ?9CR\e\JA?>@;/++-+(+27@IPT^_SIGTۢ];/.2?Z|٧Z+&=rפG2/.++,-,./.2433235869755888888LùȱV1(*1CqغvopvǼȷƸĸqU=/%&$&+570'!#-;6*" "#*2?T^WC60% "&'(!!"(&&$#$$ !!! *( +27;>7)"&+31/4:<;3*"+0/,,+*)*%$" $098880##:GMMKMJD;;ENWj|iO<642+&$ &0>ISeow|xld`TP\[POZ]ZYPE85:=6+%(+&&/:ELZgdhaTB?Nګi@0)&*6CWrՠP& #('$ "!!3s˰ئF52,*&/+,/7152003078:885767796TWE3*$! %*4@D9/++)&'#  %$#"$&'#  ''"*(&(0;CDF>/# %-(+-9971*"#  """%&&.;EF@:2++&#%05310*)DTXQKGC;79?IWsv[EB:3&#1G[crz|}xyymf`Wbkhimf[RH>2+/52'#'*%&3HZbinkgYH>HLF=5/4?<.&)8KO;.(& %.@PP?2.120*& $#'(''%%(++*(&'')$    "%3@ECMOPKD7-%!$"#')+++()%$$#&&!!$&)*)*)+),2GZaUMB7,%$! &/61./.(#&/@Zjj]LF?508ALWludTG7*"(9Tdktxsnbew{lgeajrtz{paR@/(##**((--+.64545235:R÷sA4IZXM7($$.G˭{pccvƷi_\dizǾiK9* !")$)2<>:3&%**2=P[_ZQE>?HB0$)4KO>40+'$)1@JD5)-3460+%!"'()($&'+/1236531$ +  !&,9KYaac[N@/$! # !"$),,+++()& %.444.+&%1G`l_QKA3,,(&')/5430378CPdwydNJG=68GU\p{jWE5.(!!)6K_iokhc\UYfhe^^_dmrrwxudO:*" !#)/5BGC?IameWQUTNI>8L֦jD3(#"""$',3?B>?CCBGS_p|?#$R_gR5(!#/S׺zrldm¹wnf`cjĻxaE4(!#,:FNLH8+ ! +@Xc[WVQDEF=-#';QXNC>71.16>=4&"*.13/)'$$'+0,%%#'/588:50& +  !$19HS[ac_]O>,!$ &# "#(+),+'(&%#.4-%#:R]TKH?6.16521/379:>DNdsiWMIA>;ATjsdSF;2+,5BYijf\PNMHLRPLPSQYdhd^^c\H6,())0=FN^lhZ_nkZLGINOJ@9RʜoK7,# ! ##&(+())((&)/26BT{w=%!)6`ɺxsyΠlOL`٦L3/.,0-56-0/00222B:88<=4346494=ZݭsWSRQ<))4NqsI0#"5j۾x||п˻ѷxrnecgrϾxl\VX[TK=0($*/("$3EVad^L5*''#!(9RUNKSPEFD;(!(=W^YOJF>57<@8) &'+021+)*12*$!&()''#!  ",6?J`c]WSI?2)#!#(# #$%%'--%"#"&"*:DDA@:6329=>737>DHR\h{oaTKA:87JjubSGCB:/2;HZll`RIA@@DFD>DHCEPTQHCKH;767%)8TžԫfB:D_ܴT53.++2-2-444-/568969:<636:228>^TD<5,%#'CgyvV5#,K}vZHKQSj̥z|óѼӽ{mjdeoóvv{pZI@==ACJIC<9985.%)5HTZgp`K=871+,5DMMJQPHJE:' (;TZWNJEB<8==3' "',3772/02.!     !! &/=JZimaSH8+# #%'#!&&# #"&%%**$  +5=<;511:?E@98?JXgtteUI:0++9\gJ6./350/7GRai`VLD?>@C:56:99@ED?>>9/566:=BIXi}tcR@1+#$0Q~z]A/&$'')+2:ARchbTNKFEB>754766::<><4-09DEA92//.MTSX[VX_b`N:42303::MȻsca`dt_PN]˛W8*+6aرN/-+-/10./1.045885539877866355>NǖdNC4( '  $"+;`˵ũлtlqĽȼwqmoxzrooaI=BP[_bZOOWYI>?9'$29?M``XRTbcWK?91,,4;@@:202:EY\M>96++3;>=DJ=0&  $$$ "6KcqvlZ>,#"+2488>>6-%  '*1:HTKA:::97/ #,22.!+0;BGDDD<66<@GKXn|cH8-'$$,Cmtia`YVSH6+'$(4;@DKSZanqfZTLLKB731*&''&%&()*/6FPKJIGDJVchT<37>@@<=X˽ܼͫi@//6TةJ/+(*.22123/225698779<7552534=504669>=50( !$&'+30/074+"#1@Ydc[L>0)!#(2:>DNTQE:.&!%#&26>CQ^[V[a_[Q?0$ %#''04-& &4?DGKKE848;<@EMR\jlSA70,-4Bd}]MIHLXeXA/(',7AGHHLJWs{l_\XVRC82/+(()((&# )7I\a]WF6LQK>>`κK5-2G٭G42,1//2/22125259:88<:5468653=8EϷZ8* $$%& #7`ƶŶ|̾uu˼uq}gblqg\K8($)0+*(+)###.;LXUJFWq{bG693)-9HWUUZ\ZZax}sfO=2231430./.) %''(/29@HEBC@>8+ %0AReeUE8.($#$(/6>@JU_]PB6*$!(/546CW[eowvm]P=,%&-/1--286*$#!'06<;=<78>Pc|cTLHB>ANmtO:68?YoiR9+$(2>KSRRSZrwjde^ZQA50-*-/41+##:Tnx{jT?>Sl{u`MFNLF.$%%+0.&%"0SǨ̻nj~¿IJ{kgnj\L=+ $$"")'&$ )6ETZQWqwUGD;4;N^egmuzvkl{lSA422/1.,1163'"#&)*)+4>GW\WWMD=;2#   #$'-0@WirdP:+$&"%&.3222?SXXQE<2% #'''&2BK\n{zn\H8+')-9AA@??5,)'&%  '.78<<@BGHNKB<68@Sjulle]TUbstK3+.:VqucC.'&-=L[eiefoohee]VI832-,.14.%#9WvhTKZj{zn^NDB<6B|ʹzH5,/EyקH0((-,----005?45567747486455:<@L{ؽsWA1*'%# '+2CRN>/#!!$6[̺һu}ûtkbbXJ;.$"$ &()$ !,>Pdnr}vf\JCL[elq|zc^g~xZM?534323/-266//341+)1ASalkg\ND?;."!#',**% %$ (,.))/28CTdsmZB.*#%(/96+&'2FSRQJA7'"#&$*49J[kj`Q>-#%+/ANNNLD2'%'%#%/7406>HSajj\QIBAH\wzsvrdadot}zS:++4JepcE2'&-9N^hlottne``[PA63004253.%+Eip\\kw}wpeN?40/Bɢe<15EqڳX0-.2-,2--.,055426885776666988@WͻnZPE<0#$7GFPimL-" &>Ǻ޾ѸҾ||ǩvure]SOD:,(#!)+&!"&(%&-;P_r~sbPEGIP^ku||iUMSllTI@4259<7)!%/48;?B<004,$!-3661($&&''% !,882/6:CN^eeYB-%)&%!)14/"$3ENLC<4+& %',15;GPOD6.$"-6IX[WO>+##%$"'68127?M`tvm`TLQavzrk]KK[idhu|vY>-/8G[e[B/((-8K\ceerwl`]ZP?211666886-%%&4Wp`afipseO=0)+B̳E46E^׳O0--.++0--/6.32556665867866657?SŴ|hC"2Nfd]d|d<'" %;xȷηѼɵ~dZis{i`TME=6.'''"!!,-.04<>;9@N^m~~plmfVD8;9=Mbqwn^QNWl~mTJC9688;AHTSJ=+$&)&%#)+("&9FG@7.'&%)06:;>?A;0*!$/ARacXE5& (*'# ):<678EPhq`QVp|yqpeL65JUKK[`^WE87:CRWRA6..7?Tfld\crzui^ZP>1.027:A?=4/.1Bh}bWUUhoaQ>/&(FśZ<57@a۵V0./,-//0/33433565548759:83435>Oĸn8 1WshNGNVaP4.'$/?w̸øɼv||]QSVfxsd\MHE;-+)*-+$#$&#&)2=CHORNLJQW`gxq]KLQTI:444:JanzoeY[l{~xsyxmYG@@ADKC4&%;PcmrraMC@EMSabL4&!/DRSG93:DE@9,$'2DLH<1048<:5)!(-,.()$ #4AC93,& %*.7IOHFC60'&"")4BRejV@.!'--*'$.AE?9BDCA>>/+*,21,% $/92*%! &2:=80'$$')(**+3D^e[N?3+&## $/5DSidS;.$./.,% %0?EA>BCHQV`zzsqnkfnmZDAKI?67:=;649AA622144HNMIQX[fvmgflmf_bgdcbQ=65D\py}{fB+'(+2<:4+&&',49DLNOKFCJOJC90+# &0>JF;1),+-+((5>81+($ "&)1780)%$&1868768@Sil`M9,%%#&&0>GU^kaK4""-43.+$"'.6>DFJNJGFFMc|ufUT\fqteWMONJ?ADGNkmox|t]J;637:>834Kбg:-&&4ZԭP2,.//-+-/2526437975:7;8309948:]ɨv=&&)/295;HZιŻ¶ict{}}}zrghjcXSLMRMJ=4&"$.06BHG=628?EMV_a_UJDJMHCCA@644=JQNCHRWdxwpnlbagligih[JB?ER^eionX9($ '09=82003;FMNMIGCFPXWJDD=3)#-7963/,))%!!+8@<561)$$),14)$#!$/8=?@CENXgmbSB1('''+4AS[cfjaE4( *20-&$"(+/5>HV]WSPKJR_ee`]XPB@I\szuh_ag\KFHH>0'%%'% $/9BPexjamol`NLI>4029<61--2:AOhzs]\^ccVB7743;CG@CfŹԻ}A/'&:Y׶X4.+--,--+.0540686482866569987:LĻP-()28:;Lp¿Ļ̮ĿķĽ}|vxqi]WYWWRI9/#"##,8>;867CDEJQTQW|þwa\bdfmP1,-9Nvܼb4-,%//-//22225678667976543:75CMXbg^JGJVbv}pkaTE;6>IPXabcq}qYTNIGDDELUUG4*"&)06;DFA>CFKQVWSI?ES[QA:BFA- )39<8.-//04AMND972*''-/551+'$(27;>EKPZhsoc[RB/*6=?=?HOIHGB:66+%!)20,($""#&#""$,@QWWWWXYZ]`_VKFBBJ]u|vfev|nbZVOA4-+,('#!"'4>GQk|mmphQ?<>;5.(*.-+'&)(,5FQQQMHEFLQUV]`bb]Z{xrgWF6+(*,,-:_Ϋd7,+.:NֶX5-,-/-..243335565296744566844:F̪ojsɱķ¶|iZXZYM>0)% %),5>HVbmtwfIGVmzgVSU]kvwSIIFC?=>BMTQB4)(+016=>7566>GWb_UJEMPH:15;4% (;DHI==?=26@LKB:7/..4?GMF;2.//+/-27=BCCNgwvnqiVE>O]WMMNJEHC@:@B=2,/6;5/+(&')+'"+9DJPSW\_\]dool_XWWaq{p_Xfv|vnnnhYH:/.--+(')1;EOo|zw]A6475-(%(*$$%--.7DHORMHGKZgiahkmpha¾tT>543/'" 5wмE,((.9^ֱN7/+),)4334233355/5697766567757JǻΦ˻v}½ü|ueVSZTH;6-)" $(0=GXm{tZ]wƿ|sx||wSFC=@A>>>EPVM9/.242/0-(()-9G_ihZJ>?D=4+++$ 0FVZWKFC;46:<<7;8264/+,---+&%&1953./13425;GSrnL91223,&%%"#%,.6=DIRUSQQZhqqh_aglfhʹvjga`h^LIPJ9( (aǟ[1%')/FҳX1**&+,2/54.422374457::6227768>NϣĶ̼ieqƻ}rù|ka[UQPPK?;852-%!!%,6FP^tɿp_`vqq}]PI?@6,*("$)3FYkldUA212/,(%#7KZ]ZSMH<8478<@GKEDQcr}{iK8.04571264/+0AT_l}j]Y[OEGS`ZKITVLC>52..+')*+2679AGMPOJ?:?Vqzytnmpqvpe]Z[Y[i}yeQ@63/27=GKIIR^w}pYD6/2770+&%%*4:<@KR\cba`hqqh_RLSWWbڸjXG>612-/54*&'% )cдp8(*-2>aϭP.%,.,/0.../335799465775866276?Nźò©ujpƺtw{wzug]UOLDBGCAAFKF<4,))0:HXltr}ľxnYF@U{}kn|wjbQFKMFDGJQZTNMOND;3,(*4H^psgQ>30)&&''$+>OY^^_\UF:88?EP_ifcn{bB2+-.28;B@4-+-@S^mpd]ZSHEQ^bTTac[PKB7.*&$%%)006;@AACHD;69I[bcaXWZ_icXPQQQWgz}scYK:0/5?Ocpminntxl[K@-(3<70//37?GIJP^mxxj_ekbSNI==??X}K7.%! '$1oӴŒK,'+/4CkǮ^3&+(-//212212866766:86578427JaszsZ?0*,'&&%'$$#2EQ_a_cb]J<8HQUJ2,-5Kes|rc\RGEL[`]^decc]K:-&  $%)29:<<=<>989GTXZSJC?HRULINPX^nxpa^]UD77BQd}wqw{kTJ?.&-9525bxshft}a3+)+-..342321453479986664478<>G~ͶͲɷÿ»Ⱥ}z|k^UJINRTX_YTQUZZcwpZZjzl`ƶgOB=?CELXdebmzuvuid{shchpw|vohhg`UTMMMO\gpteJ4)(('&%&((%" !%.AVeje`[^YPGEJT`vwi\O?0#!(8MTVPC409Ic}ļti`RIHQ[WSS[``daSB4* !%-878=>??<=@IRZ]VL:259AAFIPWchgZQQ]bXIIRd}ujo{t^L@3//868<;70,,436d͉G*$  &OֿiǛW0#$6F=64??GOezn[]j{}iK71//*&(34Eǀ@& !&(#(@{ֻoҷx<#!('#"&(,@Wi>-)+2+(.3421152787957883:6;6599OȺǶӾ˽ŭtlhc_^[^jlggf]WOWlsmr}ʵpe]anqmpu{znorrmrwqlipnZOONKA>:6:AJQPOOPPX]]O5% %&!',3:>=<4,%)6FXe{{iXPLM]hs||_K=2*#''%',.EHB:1*%! # "(/8ADHQWWSX]^\ZN?2+%')09:>CGD<1/;Rity|u`RbshTD<7>GCCHPnolrpS>0-+*).15Q}?%(15/($"!&CvΫxxǗQ+!#&0G:'+*-*,/.//1353565746763:577;7;Pŷƨqe~вǴsmf__egkgbcc_UIETnrkjp}Ŀ{uxumw||qjebdksn^PDDA:2//06DU]a`YTMPVSB/$!$'$)3=ITTOD702@O\gtztocVFCMdyw_C0-&!",/35861/-/Bhqdgz}l]PE=2)+(+/3541*'&%%+&#  (592,)-1242;@?:.(2BXemntnTDLom`RMDPͻƭ÷c[tδŰi`YUVW]c^X^WQLA?Qlz|xpkbafrry}zvxtmdZTZ^^\UJCA=3+*,/6EPZlrgWPPKF=2($!'*-2?:7469770/6AGNRNOgpTGFcĽdQJJEDJG?DP_|vf\XVQL=6>en2!+5AJLMQNB71,%"/@Q|ͺsi~ƙX70%!$(+--116204485877;<<8554468F͹ĩõlZRNPTRVVMKIDCE@?Rftplcc_ckylT^Ÿ~wdRIILJKPJDCF90,.38Q[_WNFED=6/..369:==JVNEILJNTQJB9,'),/:NocG@<;:60-)((1H_`TA78;67B\nSDBC>>:?BGJHE>9<973+(+.20,&""!'+/5DPPORTSQVVSNLbom\KD;4669=BEEEJEESpwu}^IDEC?DEGI[pǾxge]MDTڰd3)I{qU:+# $3QجvQI=5IҺO/%)>>+#  %.2044567859:45487987579>GoעiLMcӾɴƩϼĺºo[OIELKPKIFHFMV\_[_iqohdghj`[mt¦mr¼yjmy}eUSUNC<9?MZ_WLMDC=<>CF?944:DM@7=GOXXN=30&&)-2DZ{q[ICED@:50/07DdzxcKCGMQUd|ʼx`H>AJNLQVXZ\^XSNKGC:4/-.+(&$$&&+-08EQKGJPTRT[befy|l]QB:46786=AKWWZi}jL?>HIHCFS`wıwjt{t`ZWLDV٥W.!!6bʾY6)$(ByأeJ=-'6hмX3%!9`pWB7&   */22223449:66457895568:?A[Ԣ`<7>KqζͻĺľfVPNFKPUTS_a_`juwqp|z{sXPk̿y[X_kw˼½vcRPXcutiYJFKSXWTPB848>C@4)2AN\YK7+((+,/6F`~q`TKDEE?7289BKbywcXWdpzxudQCDLSYZaehlsyyofc\RHD>6.)$ #%%*/1:CG@@EPVZ`lw|scP@84366<@M]jw»|`J?@FLONTh~ͷndVPYefYVXLBV֤V."*?oƯQ4+2VݲvO6(#,OŨZ<$+N|jI, + '.2525543966779;9<95:88=IjدnE982D_|ɮٹi|įǿo`pr`XZRQ\kmmkr|}v__}[HKUcv¼{Ŀ{fX_gqpdTF<47>@=4)%.<65>JTZixwdQD>7:<@EKZsϽyw{zkWPPRS\jw϶kRF@@ELTRW]RDT٭b4  ,6P{šl@08aɐU7.(,@kɮ^I1 3_wF&(-2236756:77766:885488:?Ka@4..6Cc|ֺѿηyc\zůtv~zg^qsokf^k|y~|ngrqr}mRJRh{v`wľspxrU>2-29;93,(%0:JUN:/('''+18DWgvr\EBDJLICAFPYdipvpmhgacjxnVQ^h{w]E?<;=BGPXdjnnor|{utwyyoeVK9+"$%$(0762.+4CLXivhYOB>:>BJ\uվtr|}yqojgsúзbI?:;<@GPW\OBX߶q?#"0;WyǦo@1=oқP4/-.8W”^B6&!7cl= &-.0347676646999744567:?MΰzK9-+(.8@Oj~ʺZKjп̽Ǵlgr¦zhQUjp~}uuxzqr|ukooeezzk]Z^p{f\fu{Ƚ~v|}wv{|hI4)'-36314315=CD:/($#%&+16AN]eeXH@DJSWVW_ilnrnj\QIDEM^n{~hKIPU_zeO<52227FS[cjtpjrrzp_W\hmmj_YPG8*"$,+&)/0.(%)/8DRfxxxzzyvl[K?78=Jb|ƭ||жbQF?<@DMX`]KAgǎQ/"$,?\qœ`83Fzݱa6+()1Fjȱ}M9+"%;aa*  $)/41379:53/66:9667869=>Lͮͳ]<(%$(((+4;CH[v]=7HxĶ˳ǻw_OUgkt|tu{}{nbac]`tqmtwfUKN^vyo|mu~zƸzwqkgks|wlignupeQ;-*..0146-'*-,#$(%""$,2?GQj|xumjdei_J@<;@ANb|ǾzѾo`XNFHPZbg^OPܺO5(! !'4?KYpÿW4.MʍL1'&+5JrbB7/%!"/@Q__edfv{@  !*.35366:643669:898=<999@gܲtwyoʳ[9&! $"$'(0?TijYIA23Bbĵ̿xuymeccgit|~mdgllmomklrv|yvmjc]cpyzl]cp{vfVOXgqhpz{}jdg_WT`p~iZTPT\egcVG:.*'*39@C<1-%###$')/5<@APpx]Sb}hZW^gkhYA76/.29AJaw{zw`K@CLVX[WPEDHNXbc`]\ZRNJHHMPD957BNSVQC7321,+./(  %+6GT\]pnihia[RHGA6/.7@IRatΪ~ig_QPWcrs`UfڹaB,# #(*2>avN1.Cq۷tF3.++7NjrH31.,.:LH>?>B@>LjwH .134445987436977885::8MTRA1,*(-:Zt\?86<<>HW`@  &-036675436448:<674948>BEXםW=740/=]{Q2!&0,'%).9I{Ŀ«z|rx{|ƸrVKIPIGQ_x||wiXU`r}uebpr^dfMKR^`nuľl]PRWW[[_luZJ<4/2ATZSJHG?3-.8=@A?<.#!%07>AGSXNV`srb]XYTNSL<-#$(-/6?GSag`QFD?>Jg}{j]ZY\XQE;60,//48DUlmqxp^J><>>>7+# #(4>O`noihicLBCDD@<5448758EUdmpwɫphl{ϼpR;*%%##$,3/37;>8-"!2Xе^<.-*+32)#&(#%.H|zL849DNTPI. + %00.1583523745<:896769?>Glު^>.'&%'8[vG/$ %''%-0<]ʸϮ´ȱɾkWMLKMUtzsuzc]cqumºhf~iVQVfjfamȷµxbSGMWZgzmP:/)).@IQG6./;JKJFC7+ $+28;EICCHWq}ichl[D;EPA+$'))*06EVir]RPLIE:+#&(0;CQ]iolb``XNCEHLSczȽå]H<7)"!"(DrؼV8*#!!#$+CϻjG "-0/24668653=57:9:8:.%%.:GP^l|s^SNNN=0,++)%!"$+6<>@=;APkm_buqliV:12890'(-69CKOWXX^\]`XQPRNOK>94178;HQJ@9@GNYiy|shWH1$ $/AN[mxjd]UJPVULHDA>IWkâ`lxaG/#! !!!,ByָO2&""#&)2Wýn, '..600368<7:75:=<8;89:9=@HhͦoF.$"%2R}kT43DU\YQNQLPSaɾķȹνxpbRVh|{zoxͪv\klaixynW@1.4AM^zo`WL>/$$%'((%''*.6BHJE>AVqoa\ljN;45:A8/'&)/279>BIPPWWLCEDBB;4454335BHC;:;AHS_iplhiozufZG5'"$,9L^r}{ojfdWX]TGB?68IcyֻXaʸ];,"!!##,QԱuG3+$%&(2=SʵC&#&*-/-313368766547:868;9:8<>Cd˥k?+"!&:dg:5Pw½ͳǯͼqegg\XWauv}˳zο{q|zhSA=BJSand\RD4($!%&((&%(03@MUSPM[kzn]ZbwaD4219GC3,'%))123:CHKSSLEDDAC>89>:627DJNHB><4,++-269BLRZ`e^PMJQUQKIJG?>JV^h^OE=894/13>MarxtfcieR:-,/212566159878579:879<<<9:;>=BDYġpL6(+665>KjvK-$)HοofWPcƶzf\SJHHYhnxpjŹɪ{_^wȺt\YcihYNS_wweH4-('()08862+&17;@=;=J[hrxth`ZUTXrjLDKUevtdUMFKV^dmxzvg][OB<;;8:=Ocon]NIIP\_VA;@KScnjSGDLW`akvul]V\^^a`^e|Ȥּi?* !3l~@20.2532:;7499856558=<=;8:=>A>R©b9)*'*,3H^_E."!4gɻòqdVTn«yrg[VQQPTeuŶŻŸt^bĸmbk}~d]jwkG2+)--26230/,07ACC>9:K^s{|umihdevſxecotc\UVZekp}o]KHGDCGE@AKbxr_MEGOZd`N>FQYckhZQPSWZ]evtiVORPU]^_hطŦwM0  &?̆?75144328>64:8;88;57:9;<<=;==?KνM+" $-982%*HŶϽrb\iϾnfXSY`lwüìƮոnao¶vzurwV>2/012/+**-48>EMPRKGRgzsd[[nƾygdd^WX^`kv|zzzpth[RQNIPSPLMWl|gVMNQ[hldVTWWbjpmhlid\Y`prj_LB<>GS[d}ɠzsͱT2$#%%-;bΉ?74/56883468:998=97;89:=<><;:CO{Ƚ}K,! !/Vɹĵͷ|g\ezɷujdjxÿɶ}w«׹z°s{mO90--+'#(4=BAGP]de_^rjOB=U{jY^e]OLNNRZbccadlofduxnfd^XSPVU\d^Y_p}{hZUX[]dllfb^W\l}}|ndais|{mWE9=EQSbϱwѷ]F:7588==>9<;@?BNxϿ|fP6""9tźırZYf~Ľɽ{uĺιtgcw׿̵˿mm¶qM:333, !+;HNKJWhzX<25LivR>HZ]QLNNQQPUSQPVaadq~xi^Z[YVPHLUXchkejsrmcZSU^bZZ\VRTTT_oxtx}jREGPRZi̭wvտ|לH7677854667;;9<=:8548@;>><>@AFNrfTJ>7+ #1`þtegxvuƼvxľȰpgnǼůp[RdĿgNB==;0( /CU]\ZgwvJ72;UeguhE18LXUQSX[VNNKJMW\abjy|qXEB@HD@DN^mcSLR_gvԳaTaٳV=2487349697>87::<@66;=@>B>@BEMsϱ[>1)&%% $4[ɬ|xx{odl{½Ŀy}Dz}ʰ§qr}gO=979777<>@A?@>A>GrƸƾwJ0%"(;cĩſsoqynTNO]elr̿wq{ռо±idotYH@Hdùq`\XXQPNJG>88CXp{}|{ydSNRa{qca_bfzr]C.+:JXXVSPSQPPVZcb[]huxsT:07>>6-)--./-..1478:;EZf[E7044:BL^kwij~ظ\D=Gh>575:88476368<8@:=8=>?;<>?AEFHN]peP>:=>BIXkvе_B>QẈVERuxA74668045<43::<=<8<@=A:<@DBADLr⾓p^ZVROB1%&8WܾĶza_ly}͸x^KA8;Mby̼ҽȳпǾsuķvcWQMLKQYcknswwnccnyqttwzu[KL^zs{raP@73AVrqmkijmjachiih\ZUMD4+  !&.+,09FRVVVcwxbNEEIR[n|u|мhFEjʌY<26IzԕG7137522:7:==89:;6;;:>=@ADGCGPj⼁O@ADB=0'#&%#'+Ceɰ˻xkq|ǿt\`Ǻ~eG75EdпǶο}ǼumidUQLEEMTg~wmjfrv{|{}}nWFAQgnllxtWC9::FbytsmjdigeejoqgT=) #'15123=HSYY]nu\KFN\j{{txƣtSWjB2(*7XզM744756576><<8<:989@B;>@B?BDCLl{E5004.&!#%+.2,)-?TUPQPZʺz~~tTHOmǹiF>PlʾǼӿžwkfdaXTOKJLWl|ijlssgt}wvlVGBGXgk_`q~hF87:B\{|xrpphc^ZcnpcL4%#'2EQVXew}hSNQ`kz}·ǩ{Z`ưܫ]8+%%*;iֲU:768647::;;>:>;><6?==@CE@DBGDỶJ2()+$#/AIR]onjenɺ}twgRNTf|`PZn|ɾѾĶļvjee`[ZWR[hweclqtsrousf^esiWH?BYtqUKOUK75;CXw}}sdXKHS\_XI6,(,4>M`gbPB76EX``kv|yoic^ajptwôţpT]ۺg[pۨ\7&$"#-Kܺa?976:767:9=>@98=A>=DFEBB?DPڭf>140#  ;ZsȾyqkdYNYu;eUZerŴ̷©zqmnllllrz|nfjjjvzxpkXNTj|iWD>C_k_N@9=:29ETqp]SD9>KSWUMDADN\jx|tYC35D]ijlmd`gtxrrpty}pzīŜiQ]޽V;2>i۫d=*%!"%3dmC<;6:987;9=7?AE?>;?>=?DBCGEBGQСsPC8*#" %@fļ}rr~iQTxȹ}XQ[^e}Ǿͼ½ſʹw{{}||{{o~{jfhhrrlg^PGNjrcUIBJTXSG869CGKZjyfSK?8;EWdnkdejps}fI:>K_mrqgQCRt}{|x^IS|аɼǾΰѸi\s֛V:)#&=}۳pG-$# !)E}D;97879::<<6<@CD@?>B?AGGDEBDIRдhO8,&#"/Lx¶ihɸ{\Xa_cxʳĴsruw{r^il`gjfa_^[PMXwyf]YQPWacVJEGR^kqudWHB:9@Ndx|v~vP<@K_w|ZEU{ztQ=@B@@>@>CHIHFFINVĩcD6+"#0DfǸuxʺ|xvqvоͿǹҺ~z}sstl\`nntvi`cfZOQ[[\^oo]\][[_jna[^i{}wh]RH>89;?WxwjzhH87Iep~y}TGZĹþغiaw~<$)]׳`:($ %3T۸aA66489<9DA?BA?GGCGJKIHJRxS:,"#&4Mo÷ldr¹óȽȿȼ|Ȼzlqsjcckmqwvngb]``TKP\djuzcUZ]_Z]hmlko~xrqh[SJ=4128?Y~wqmM807Mpw{riͼº¢̶ca|ڸq4,aԼU4(#+?sjI<:978:==BBABEGDEDBGFEHHLLHGRϳZA0&!!*:Vƿr\LSbwͿ³¢θtnpofdemwslf``]TW`XVWeiswqi[UXX[[Waimmv`dpsrx}seZZXUPC4/015>Qow]H84<:>A>?1-$#%0EcضyiXPMIHTjĸķҽhNL]xycZWTRPQWcilfhv~wxubQKMTX^m{|qeisshXJFHMF>=@DDEJQ^qVHBBIQb}Գˤ}źngt†D(#:{Ӭi<,&!';r֞O?@>?=???@@BFGEFJHJKGLHJKKIISxιzZA/ !%/8>L^sƺ¶}pl^W\^ZTWaw۽̼lM63Fiw_TTUJIQXge]OYo{n`XTV[gwrioz}wiZSNGCEJQTSY`gq|\K>?BD<=DKLINLLOKKPHIKNMLLTjͶdA/.041-&%+5Sƹ~|~ɭ|yxug[fozz̤~ν˳z_ECIR`ljH.  =ƚO+" &-L|F>CAD@?=@EGKMLNNQPOLJLKLPLMRhĨvL840-+'%4Ihľ̬wvwmegljv|˪żξzlclz}|oTD@==LZaZjvuzz{~}sVKNS[bdmzh[VSU`t|vldeis}÷Ĵom}ſH3*  $&+3:BAGTbixpV?*#!&G”Q1"#'-GѐLA@B>A@@CKONRQRTWOOROPMLMJPSiηeK?1+$!",4Apz{Ğ|xpt{|vxɶyxqYJA=EVdgez}{{s]W\\XZ`jzwjfhktùvrqtιrcmIJxD,"#)(##'.2;NUNHHG7* "#/]ɳƺO.$&*,?wڥYFEFEDBAGJKKPOQOPQQSQPOPOPQXrūwX>2+'(+2>iķwv~ܽ{z{}~̿veSHFLXdomp{wqv~wcQS\hqqlls½ż}toqxs|Ͽ|cg|ŸudgDŽN3$! &(&'**&! :w٦skck|hQ7)#'',:hnJJEEGHDGKNOOPPPPSSUVTRSTTVZ}ʸpSD9458Fuʵtopnz׿xppy»ĵr^SGJWcjks|}|qlout}dOP[ahhiqĹnefgoxƽ{iivƽx`MNjѕZ=,#6y֛eMA=AK]`YH9.%#" $1NԜVIHJJJHIGKQOONPLTRQRRMRTTW]ů}m^NIVϵti_el|¢xfgs~ĺxh_RN[cjq{wrr}yqrwyeVRTZbjwvk_X^mzx|{ï|htx{nWGLiܭnH6(!;کeA62047-$$$5]ڵcKMPLKJHGLPKDKOPNNNOOOQQPZeܼäqf[[gowοrnrzȼĴ}uiaejs|uqswz{zo]NLMXdtʽ{wuqwlXXeotvmgdcozǾ¥vgSJRoʙa@1)$! !C|J3*++0443)&' #9pvMPNPNMGHINKCHGJGFIHHQOPSUewml\Y\ns|¹|Ĭг¼y{}xt}|wucK?@JWiw}}xw~s^OV\c[SJINa}ͽ¬ǣztcSPSrœcE80+$#$LӪtI4,,./34.,&!(EԏXPOQJHA?;B=<<@CDDCFFHJKRRjr_ͻymlƹ͵ïż{nvq`nuWG7;DUfnmhdooWNSWQD:52:OoźýʲncVKLVrȥdOC8,(%"*[ұX>8=:7:743+! -UܱhWSO@::9447679<=B=BAFILPRmزǿͼټyɵ÷ǨzwînkxkHNx¿jOB?DKZfcWQN`vbSV\WF5,)')=ZҷĽýùjVMHLY{ƭhQFD<7-%!  %=|{fb[TUXUNA- "6RrʄZTP8230/.,..44469:=@ALLUsə®Ķɢյ{˸}tHGp{TA:DJT]aXLJJ[{ÿjTXccR:.$""%/Bhʭƽ}sλs`URVb­t\D."#&(,.343BlŴmF. (?Qj٣`PJ<3-./+-,,.20.08@>=EJRʒgVRpϾŵͿϰĽιĵjjpQB>CLPRURLKPa]OZ^UC7*###%(9Zλ{ƼfzŨla`bnS3%&5DPTSZgjl|M* %:N\izߺoQA3.(+.*),++,.,07=:Yuҹ}}ɸ˼ľa\v|p`WQLHDKQWXYbrIJpRLTVK@5+''*/6EfŰmjƽƦphhoyƬwD/0MwδJ*"2CS]axϏM>3-))+-,(,+-,//35I\xr`cʷͶqgmyO7;]Юt>(###%*4>IRctٲ]@4-*((.-+..,-.1429=A\׷N3-005>YѾƽ}οuwúƾľüȲ{|ĪWJ^vwj`VMCBDTbxiTLABCF@=<97;?K[rѾȴy]fͼȶlgy͚[CFg͞b>.+%%%(,4;GYj{τH40-*/.//.--++564?GSˢcB5--.,0?_ϼ̻·ļrlxŷnJD[u}lZMA87CSj}gPGC<:9625=@9@KZl̽žȿ¬reyѢcIKgd@3,*#$$'+2;J_ܵd80++*,-,,-)(+/3:]ڻT;+((&&'/B\|ڿȽǹŸ|yĹfPFSmlRE4,1C[rdSF>98658>GH>EZr»ڶͻ¼­ukҞaEATھ\>96/+&%#&)/Bbz֮b3+*'-+/-+./25JvҬvH4-'!! !&1?EP]qucemrnqyzvv{vhdrŰȨþ|ӜT:7F{ؽvxwX@-)%(/:N`ȈJ821+-../5T̬R.#"/KjͲ֖xļsnkd`cv²|f[`mw{tv}xcTNTY`esvqvsminvmjĤȸ}lvڨ_<\|lWKKOQQRQPLS_vuq}ϸtϸy^Y]viA:7FͩxykR8-$")8VעkhèW0""#%#*5@DGHHFGM_snbh|Ŭʽh`ar}ĀI;8Drij׳vb\a`]T?+#!&3Ekۥ_FX{ʱ`;("# %%# &*)#$-Adϲૈ̶նȿŽþ̲pcff_Y]hvYB@_¸mV>578?HHIIEDGMSUWRYtʭqhbeu}onϕ]G<@mŜ}hlٳ~fXOQNGE=.$!%0=\ÁLDQWVTX\axͽ{[B5-'$ #%" !#((3LȨҿپӼŮʱ~pghjrdSYhʿpS8,-4?FKKKDEGB96=Nh̫ld][epj^eԦjO?Bqz\NNcȞ|j^[NE?73/,-5>^ٲsPC>:458:Jjǵl]J9.($$$!#$(2Mĝȷģxۿȸìüžͼrfchzǹ}`D3/3>FGD>9AC9/+8Qxټ{ø}qYNIIX_c]_٨eI@DntQFJKTwоp^QFA@>@CFrֲY=/'(,-8Har_M@2*$!%&#%(.8WŽȯ˩}Ͱïл̾·ϾrenêvV@65?EEB<223/+,3FjȴmYqʱz`E:8?JP[\]ڪbC<@jŁVDEB?Isλ{lcZWZcu[7)%$(37DZmO@743--08Mqַ|м߿}̮ĮɵƯŻź|hvŪ~_G>>GHEA91//+/28B\ս˳t]OeѾs[B727ENY`oܶrH0.3Mv׸~I2+$&"$,8Vιzƺʝ[ЩpRX|ºҿĿλܿĹҺʹwc]lô}qjlsur\QSNFHTSOG@?QhζͶzwxózdD7>NXV]{ϕ]JIeҴK/(+6Hpմ_B,'""%,9^̳{]iƐLֲ{T[ɽкǭ˲ֹľʽȼͶq^]fy̽ynt}}pckshSA629SsŸrQDHLSQVrҚ]KLeСW2)*,->SgҺtE0)$"",@m`VSuػAػ]fоùѶȲþ׻Ȳzw~ý{mjt}cJ<54\Яn;ͥĻġַͲ̿ǿΥ{vm`\pƷx]I<;@I`}ʿjceNB98HuՙO66KҪo@*"##$)5OģoD, )8Jɟ`7'""#%,9ZȲpN.$<_ēT6ɳþysod[era>)+8WyùmOC>+$!"'-35Gr}M?PɤpE/&'&'/<^zaN=,%#$' (D[wL>Rϭ}N6/*%,.:[ҿwoon\H>7+#"! #$0nβs;+ĺȸܴſƲ¸¼ukkrvzpa_babͽ|nktͤͼsaSR`zpD:WҷP7+&'&*;\̭ZH@:8@C5(%'  $2oݾo;)ѻýŵķ;~|}´xskitȭ‘pƭmbi{vK=YԵP6*$!".=XϻpH.%&&&,+&"   "';Ơd<-Ǥ{|ž¾þغ{e_eoݺɵƥyou{N@Yֺ^@+# %+8KkƠzQ:-  "#"% "&'&(,073%#':`ƛ_>.ԻeaػоºѴƼzadtٰͰzsHGkf:($#&(/>Z÷͜`=*"!" $&.2./>GQ]nx}s^S?.&*3ErĘX@,ҽl^tſ¸ŽȴѷǸǾrx³DznMQ}W6*)&#%+5Loڸv=%&4AVgain`ezWA'ȧqͿĿμɾͿκܦeMS}ؽY:/'#%%*4APkПW.!'5Da|ŻӼUC%кͽʴDz˿ŹʿɯڢbGLvڽfD/&$##)1"Ǹ˽Ĵ̾ǫȶƫźʿܦ`DMyŢqK3'$%$(.37?OfԥX2!$9\vѲzQ<˾ʰʿįƵͻξ̻|}ܳmIO~ͰX7-($$$((,7I_ΒD()@g̫uT8ĥζмҽs̵ɹǰzsv|NLjI6+(#!!'2>VΐE&,DoɡlR4ǫɷ{ɶ˯xv¸ƴ{xߴxML̯]A3*%#(,8^ڮj9&(?dƕcQ0̪Ƹͽ~slhoͿǤwŤϺڱpIIģ|V=3444DuΫtF.%#" &7NsXL/ͽĽ˾ºξ{kggnиϼ˨ۨiHQѽe\WYsγaNIB1#$-Ewֵ}VF%˯½wqsθwnɺ׾Ĭ٣cL`ðî~V;+! ,Id}ѮqT@"νȲųͽɹtsԺsxưȰwjoמbPiƸlB0%$ #07Aj͟hT:ܰDZǸɱɵٿxzؽ¾½վfZ]֜]LcмǪ\A2("$(.Afȓ\P6Ķ˴}{ªŵǢ{|xzƶлpYTZؠeRnѠ}|Ѿ|\G4& &+-4Ov̵qL=2/.+++-8T|ǢhK3 ǹɷzz˵ů{s{Ĩy]^vĻ~μۺϸl^[eԛbbоcG:767FwǰkN:40+)(.8GZdK( ɝ©ԹҼȶu}йrqϻźʮj\]pԜhf͹gJ950/HyĪfN<-#"&'1;V}dI& 侉yοĢ{ι˴¿з̷m]Yl͖di|xzֶ̻pP<1-3K\k[7)" $+7CNlֿiM% ˢĦ´vrxÿĸϾºr`Wdā`nsirԹæxQ:2/6>DPa}μ^<&!#089>SsӻkH ɾӯʱƬȰr\[\acixŻŶp`h۹yerkcy϶ɫ}T=4/147>G\x־c<,'$'-/.8?XӼgE ϼֺ̨šΪ|bTQOONUiǺźɺzoz֮qeleaƧʬ~V=.'(,,,/9NrÝoM5&$)',,,2AgѽqA ͳƼ¿մϺЫi]TKFJZo´̶wzzϛdZVP\Ұk`ȫzM2%#$" ",:XǮW6+% $*("'8KȭY4$""%'5T˻tL7%!&/;K^и_- ò}{Ϳ̾ni{ҲxI3/50/2>MŨxD + Ͷɾʼÿɻ´͵¸˿iZ^ƽȶĵľʿð½d6("#3Wt¼õo\M97IbYF8.,2/%!##%2KgþƽƾĽzôȽiteTE7785lƾŻh5 + + ģīĽ¼r`vw{}v{~ppo`ZYhx{ojseWIHfXBEb|whicV]l}zNHfstvsRU^dE@k{|dPV]zxh^^JIiylwzutmrl[XH?M:"/FJUispbzqehWxx~fG>-"$ 2^qzxO?F;(,(/2(&6>NaYK\nhuxctoh\n|Ybjy]l^@0ImmZflPIHRvLIXn~j_vJ"2KYPF560-)2/ -Kxd[H@Fq|stks`Kio\[rp_pO$ + ¿ǽ¶¹ýƽķ¼Ǽ¾¼ǽ¶µľaGXks}{zp{u{zlUk4:=e}fezje{zppqpKdmeK40DQor\]QG+%"*8F?(&"8:?OSHC?DRGAEiX::@@GTetfc[:1&0B<9NcmcN:6@93ETbhL>EVEXdhspo\VA97[Q:6&!(")&04E54<9DR8#% # +=D=6.,H:926(+3DVeO* &-7( &"-:,)"%  )6%(". # ',(&#"$).+$,,)!  !!"$ &"$,3/(&63&  !" + + + *%!!'* +" .-'>H:-"52 + "'.'#&#% =_Z,$ $+/%"#!&'") $%0D($/! ´¿½Ǽ}~p{{ozlv~}ZU`Kqs}ldjL_GUUNdml|}pxu_n|f]MWQiXpdK[k^ZqWp}jzhXTwlouof{uwvrsrPTgraZk{zr|ojS[gd|kcaZ^umfri^XnkpmiaR_noiS^x^i}aKwbCacHVkSQWGWIIE>JWb^[SI>ZX:AC\lkO( ##+3*,&(#!(&1KklAK>2.!!-,*KeaXMNZ<'::/+*,4%#1&(*$%""#&#&'!    #AUB          +  +   +     +       + #&ſzbK/%DvbL7>8:((CPR=419HNEf~yiUWyYO;Vcfd{ce\baQR]TH$%- (94%)"!! #01!$('# ##$2K7(3E>7@6,*.8:E-!+#"!#$!)"$&)&-)!'>8)!%(#2##"$,<.1BY83*# #(($#"!%$#! !$!!$))#!)$,370('! !& ##"2F@!"!!!        + + +  +     +  + +  + +  + +   + + + + +   + + + +        + + + +  + +  +  +  + + +  + +  + + + + + + + +  + + + + +  +   + + +   +  +  + + + + + + + + + + + +  + +    jfRVL5*))>.# %!.$,:31'('        +           +    +  +  + + + +    + + +  +     +    + +   +     +  +  + + + +  + +    + + +  + + +    + + + +  + +      + + + + + + + +    + + +  + +   +  +  + +   + +   +  +  + + + + +F;1:8*,     + + & +  + + +   +  + + + +  +   +   + +  + + + + + + +   + +  + +  + +   + +        + + + +            +  + +   + + + + + + + +    + + +  + + + +   + +  +   +  +    +  + + + +  + +      +   + +   +    +  +    +   +  +  +   +       +       +   + +  +   + +       +      + + +  + +   + + + + + + + + + +  + + + + +  + + + + +  + + +  + + +  + +  + + +  + + + + + + + + + +  + + +     +  + +   +          +     + +      +   +   +    +         + + + +  +   +  +    +   + + +     + +  +    + +  + + + +   + +  + + + + + + + + + + + + + +   + +  + + +           +  +       + +        +  +   +    + +     + +  +      +   + + +     +  + + +    + +         + + + +  + + +     +   + +  +   +  +     +  + \ No newline at end of file diff --git a/sample/type-17-iris.an2 b/sample/type-17-iris.an2 new file mode 100644 index 0000000000000000000000000000000000000000..c4a830adf77acc27de41964422ee393a4a76b903 Binary files /dev/null and b/sample/type-17-iris.an2 differ diff --git a/sample/type-4-tpcard.an2 b/sample/type-4-tpcard.an2 new file mode 100644 index 0000000000000000000000000000000000000000..eb499369ce4cc1e541742ab84dcdef21e946c7ee Binary files /dev/null and b/sample/type-4-tpcard.an2 differ diff --git a/sample/type-9-10-14.an2 b/sample/type-9-10-14.an2 new file mode 100644 index 0000000000000000000000000000000000000000..26ae6c06cda43795a39862739bfcc839c3e60cb7 Binary files /dev/null and b/sample/type-9-10-14.an2 differ