From 63fd346c866853e480b7adb929db120dd1c8b75b Mon Sep 17 00:00:00 2001 From: jdg Date: Wed, 8 Sep 2021 21:41:03 +0200 Subject: [PATCH] First commit 01/01/1993 --- COMIX.FNT | Bin 0 -> 4096 bytes ESPIRAL.BAK | 330 +++++++++++++++++++++++++++++++++++++++++++++++ ESPIRAL.C | 330 +++++++++++++++++++++++++++++++++++++++++++++++ ESPIRAL.EXE | Bin 0 -> 41194 bytes ESPIRAL.OBJ | Bin 0 -> 7275 bytes FLAT.FNT | Bin 0 -> 4096 bytes HELVET.FNT | Bin 0 -> 4096 bytes MODERN.FNT | Bin 0 -> 4096 bytes README.md | 9 ++ S.C | 361 ++++++++++++++++++++++++++++++++++++++++++++++++++++ S.EXE | Bin 0 -> 56381 bytes SPIRAL.FNT | Bin 0 -> 4096 bytes 12 files changed, 1030 insertions(+) create mode 100644 COMIX.FNT create mode 100644 ESPIRAL.BAK create mode 100644 ESPIRAL.C create mode 100644 ESPIRAL.EXE create mode 100644 ESPIRAL.OBJ create mode 100644 FLAT.FNT create mode 100644 HELVET.FNT create mode 100644 MODERN.FNT create mode 100644 README.md create mode 100644 S.C create mode 100644 S.EXE create mode 100644 SPIRAL.FNT diff --git a/COMIX.FNT b/COMIX.FNT new file mode 100644 index 0000000000000000000000000000000000000000..95b19cd1aa2ad7e014461ad9cb9a3d2014eacf0f GIT binary patch literal 4096 zcmZ8k&x_ke6rOk&)dk^fOAewdyqmOy97O_-N`#zEOWQ-qt#^Tg+=J?DS#S&ya`uw{ zA(!5I>HiQg*|^4mqyH}B2+HE-UG_xGEmRB`;{ z@$t(S$H#@zRIFF)^~w2q%~+|d1m)q5;VZQh=5^>r(fRqg=S9r-q5_jEjA4j)hP&2u zenJL_^k|emc#xXudhq1M%a<=snBVPubbGP@O^k*p1w|eV7~H?p4?u?(X9iCP(*bCB z{$^$dJZ}}9M=O?pHaokxEH5w4X3sRc<#f7n8FxEQi^U_T_6l)WkvS0FhCf}cR!?_{ zG|uNqn9b)|=+1K^pr4d71Cb7+kMn6ThS-1l0#yc)F1K`PQ7t8E6UPv^OoYuk@(n?0p(UU1yXB z;?%3T>jlaDIq}0R3&*EeuQBU@ep@;;)b?n-h`cu89nWQAId8QtP=z)FP%tgwBnj7O zCkXZ}?AvO!LlV!{mgBgt2dhb9n4Yd76cNjM;e>J!%L4jwiYcDexz~4GzvEawN~V_< zh2!x2y>1Z2PA8f$?)U*LjPj6iTtHiJDCSl7&fP8v$d2)QX<9^Xc*ydo0Jv5Un7$>C zEmD>Qo+}lLS#Z^QdtdWN=DyY!6<=<>*YTl(HTv<h_O@ z#dI(%I3Jz8dvG3@<^A{xZLm?!@phxbB%dUS$P1Qu_55Kq|H{XM!BlTjV^0cD0&Y2m z9&!S&ldXI-91M*7equ=M9sKofy*eQ>{Od>6EwzU&^neNx!=dmOk?Up;lZMd4H< z@i3ewVyqA9e}kV*9*I2mns4Ia1YtUnoTBIB~Q5`((?K-Mt)Z-i(N7(@)*?)h<|`OJXFAaGei8dJId|e zri@#Ceu%XBl8<)R51aOHkhMy`0!ACG<{wZ2Ou3$*weLmJ}k;%nB6{T3f$aVDgAbt6~oXzC8oT~;VeGNX66jE$_zo4wu zG0E5Q+=N>qVhWDjq3{KxE2=V0a(GlFWHIg)%jL)f*8cEKU8=Pm8|a-~HTFZ+GFO=k;{(WsQ+SM|KzZZ+%M4Ia`KGV<>A zX20FJb&V>=Qu|ulw?HY^#lIgOCg1nFJdARf&1xbg9RLQ;X0PT8tlH^w*NZX4IDP#? zEF$pRxNq(gO7*g3)~l%l%9aLy@Oks^o1dD0zdvdIvEt3wWneq5>^=@Onm1n+{*K+SFdF{`-(#LwNyv!H>HAegm zd%d3ZSK?zi^Qy(mCW`XGk||oW4pd&`p{yO^iFc)KNF79zXg~A$M)9b9{=Fvv&G<#GkcS)p~i*6XsQY e75Y2NA`{P2uZ3`xI$Q?HFU|7F4OKF=um1sk8aO`y literal 0 HcmV?d00001 diff --git a/ESPIRAL.BAK b/ESPIRAL.BAK new file mode 100644 index 0000000..5899332 --- /dev/null +++ b/ESPIRAL.BAK @@ -0,0 +1,330 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +char far *VidRam = MK_FP( 0xA000, 0); + +typedef struct + { + int x, y; + char ndigitos; + char AX, AY; + unsigned char C1, C2, C3; + } p_graphics; + +char Reverse = 0; + +void Letras_en_espiral( char *Frase, p_graphics *FA ); +void writepixel( int x, int y, char color ); +void asigna_modo_video(char modo); /* asigna el modo de v¡deo indicado */ +void LeeFuentes(char *file); + +char *ptr_char; +double grad, pi; + double ia=3; /*incremento  ngulo*/ + double ir=0.3; /*incremento radio*/ + int key; + +void main( int argc, char *argv[] ) +{ + clock_t tiempo; + char up_down = 1; + + char Texto[255]; + /* .. */ + p_graphics Text1 = { 0, 84, 48, 1, 1, 0, 15, 15 }; + + pi = 4.0*atan(1.0); + grad = pi/180.0; + +if( argc != 2 ) + strcpy( Texto, "<-- ESPIRAL --><-- ESPIRAL --><-- ESPIRAL --><-- ESPIRAL --><-- ESPIRAL -->" ); +else + strcpy( Texto, argv[2] ); + +if( argc != 3 ) LeeFuentes("comix.fnt"); else LeeFuentes(argv[1]); + + + /* Load Mod, and begin to play... */ + + + /* While Sound up, J&D down and up until BOOM!! */ + + + /* When 2nd BOOM!! will sound, J&D was join and change VidMode */ + + asigna_modo_video(0x13); + /* Swap to graphic mode and show TextSpiral while background is flicking */ +/* + tiempo = clock() / CLK_TCK; + while( ( (clock()/CLK_TCK) - tiempo) <= 15 && !kbhit()) + Letras_en_espiral( Texto, &Text1 ); +*/ + ia += 30; + + while( 1 ) + { + delay(50); + + if ( kbhit() ) + { + + if( (key=getch()) == 27 ) break; + else + { +/* memset( VidRam, 0, 64000);*/ + Text1.C1 = 255; + Letras_en_espiral( Texto, &Text1 ); +Text1.C1 = 0; + switch( key ) + { + case 'r': + case 'R': + Reverse = !Reverse; + break; + case 'a': + case 'A': + ia += 0.5; + break; + case 's': + case 'S': + ia -=0.5; + break; + case 'z': + case 'Z': + ir +=0.5; + break; + case 'x': + case 'X': + ir -=0.5; + break; + } + } + } + Text1.C1 = 255; + Letras_en_espiral( Texto, &Text1 ); + Text1.C1 = 0; + /* ia 3 __ -3.5 */ + if ( up_down==1 ) ia -= 0.1; + else ia += 0.1; + if ( ia <= -3.5 ) up_down = 0; + if ( ia >= 3 ) up_down = 1; + + + /* Letras_en_espiral( "abcdefghijklmn¤opqrstuvwxyz ABCDEFGHIJKLMN¥OPQRSTU... 0123456789", &Text1 );*/ + Letras_en_espiral( Texto, &Text1 ); + } + + asigna_modo_video(0x3); + printf("La fuente utilizada fue: %s\n", argv[2]); + getch(); + free(ptr_char); + +} + + + + +void Letras_en_espiral( char *Frase, p_graphics *FA ) +{ +static char vez_ptr = 0; + +static char FraseBit[110][16]; +static char Frase1[100]; +static unsigned int Flen; +static char Flen1; +static char RLen; + +char cont; +int i; +char j, j1; + + char c_elec; + char bit_s; + char *Frase_seg; + + char FrBit_tmp[16]; + unsigned seg, off; +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ + double r; /*radio*/ +/* double ia; */ /*incremento  ngulo*/ +/* double ir;*/ /*incremento radio*/ + double s,c; /*seno y coseno actuales <2>*/ + double ca; /*coseno anterior*/ + double isin,icos; /*incremento seno y coseno*/ + int x,y; +/* + ia = 3; + ir = 0.3; +*/ + isin = sin(ia*grad); + icos = cos(ia*grad); + r = 0.0; /*parte del centro*/ + s = sin(0.0); /*con  ngulo 0 grados*/ + c = cos(0.0); +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ + + Frase_seg = Frase1; + +if ( !vez_ptr ) + { + vez_ptr = 1; + /* Now, we going to get 8x8 Font dir. */ +/* + asm mov AH, 0x11 + asm mov AL, 0x30 + asm mov BH, 0x03 + asm int 0x10 + asm mov seg, ES + asm mov off, BP +*/ + } + +if ( strcmp( Frase1, Frase ) != 0 ) + { + strncpy( Frase1, Frase, 99 ); + Frase1[99] = '\0'; + j = i = strlen( Frase ); + Flen = i * 8; + cont = 0; + + if ( i < FA -> ndigitos ) + i += FA -> ndigitos - i; + else + i += 5; + + Flen1 = i; + +/* // Almacenamos en la Frase a Bit's la FRASE A BIT'S */ + while( cont <= i ) + { +/* // Descomponemos cada caracter en un patron de BIT's */ + if ( (cont - j) > 0 ) + { + FraseBit[cont][0] = 0x00; FraseBit[cont][1] = 0x00; + FraseBit[cont][2] = 0x00; FraseBit[cont][3] = 0x00; + FraseBit[cont][4] = 0x00; FraseBit[cont][5] = 0x00; + FraseBit[cont][6] = 0x00; FraseBit[cont][7] = 0x00; + } else { + for( j1=0; j1<16; j1++) + FraseBit[cont][j1]= ptr_char[ ( *Frase_seg ) * 16 + j1 ]; + } + cont++; + Frase_seg++; + } + } else { +/* + // Rotamos la frase + // Almacenamos el 1er bit que vamos a perder... +*/ + for ( j1=0; j1<16; j1++ ) + FrBit_tmp[j1] = 0x01 & ( FraseBit[0][j1] >> 7 ); + + for ( j=0; j> 7 ) ); + } + for ( j1=0; j1<16; j1++ ) + FraseBit[Flen1-1][j1] = ( FraseBit[Flen1-1][j1] & 0xFE ) | FrBit_tmp[j1]; + } + +/*// ndigitos --> m x. = 40*/ + for ( i=0; i < FA->ndigitos; i ++ ) + { + for ( j=0, j1=0; j1<8; j+=2*FA->AX, j1++ ) + { +/* + // Analizamos el patron de BIT's y lo imprimimos + // FraseBit[cont][0] + // ^ ^----- N£mero de byte del digito ( 8x8 ) + // |_________ N£mero de digito alfa-numerico +*/ +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ + if( r < 250 ) + { + ca = c; + + c = c*icos-s*isin; + s = s*icos+ca*isin; + x = 160+(int)(floor(r*c*1.2+0.5)); + y = 100+(int)(floor(r*s+0.5)); + + r += ir; + } + +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ + for ( bit_s = 0; bit_s < 16; bit_s++ ) + { + if ( FraseBit[i][bit_s] & ( (char)0x01 << (7-j1) ) ) c_elec = FA->C2; else c_elec = FA->C1; +/* writepixel( ( FA->x + j + i*8*2*FA->AX ), ( FA->y + 2*bit_s*FA->AY ), c_elec );*/ + + if( !Reverse ) + { + if ( c_elec == FA->C2 ) c_elec = r; + } else { + if ( c_elec == FA->C1 ) c_elec = r; + else + c_elec = FA->C1; + } + if ( FA->C1==255 ) c_elec=0; + /* writepixel( x,y+bit_s*2, c_elec ); */writepixel( x, y+bit_s*2, c_elec ); + } + } + } + +} + + +void writepixel( int x, int y, char color ) + { + if ( x>=0 && x<320 && y>=0 && y<200 ) + *(VidRam + (x + y*320) ) = color; + } + +void asigna_modo_video(char modo) /* asigna el modo de v¡deo indicado */ +{ /* en la variable "modo" */ + union REGS ent, sal; + + ent.h.al = modo; + ent.h.ah = 0; + int86(16, &ent, &sal); /* funci¢n para asignar el modo de video */ +} + +void LeeFuentes(char *file) +{ +FILE *fich; + /* Reservamos 4 Kb. para cargar la fuente en memoria */ + + if((ptr_char=(char *)malloc(4096))==NULL) { + printf("­­ No hay suficiente memoria !!\n"); + exit (1); + } + + /* Abrimos el fichero de la fuente */ + + if ((fich=fopen(file,"rb"))==NULL) { + printf("\a\nArchivo %s no encontrado.\n",file); + free(ptr_char); + exit(1); + } + + fseek(fich, SEEK_SET, 0); /* Nos colocamos al principio del fichero */ + fread(ptr_char,1,4096,fich); /* Cargamos en memoria 4096 bytes del fichero */ + fclose(fich); /* Cerramos el fichero */ +} + + + diff --git a/ESPIRAL.C b/ESPIRAL.C new file mode 100644 index 0000000..586be8f --- /dev/null +++ b/ESPIRAL.C @@ -0,0 +1,330 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +char far *VidRam = MK_FP( 0xA000, 0); + +typedef struct + { + int x, y; + char ndigitos; + char AX, AY; + unsigned char C1, C2, C3; + } p_graphics; + +char Reverse = 0; + +void Letras_en_espiral( char *Frase, p_graphics *FA ); +void writepixel( int x, int y, char color ); +void asigna_modo_video(char modo); /* asigna el modo de v¡deo indicado */ +void LeeFuentes(char *file); + +char *ptr_char; +double grad, pi; + double ia=3; /*incremento  ngulo*/ + double ir=0.3; /*incremento radio*/ + int key; + +void main( int argc, char *argv[] ) +{ + clock_t tiempo; + char up_down = 1; + + char Texto[255]; + /* .. */ + p_graphics Text1 = { 0, 84, 48, 1, 1, 0, 15, 15 }; + + pi = 4.0*atan(1.0); + grad = pi/180.0; + +if( argc != 2 ) + strcpy( Texto, "<-- ESPIRAL --><-- ESPIRAL --><-- ESPIRAL --><-- ESPIRAL --><-- ESPIRAL -->" ); +else + strcpy( Texto, argv[2] ); + +if( argc != 3 ) LeeFuentes("comix.fnt"); else LeeFuentes(argv[2]); + + + /* Load Mod, and begin to play... */ + + + /* While Sound up, J&D down and up until BOOM!! */ + + + /* When 2nd BOOM!! will sound, J&D was join and change VidMode */ + + asigna_modo_video(0x13); + /* Swap to graphic mode and show TextSpiral while background is flicking */ +/* + tiempo = clock() / CLK_TCK; + while( ( (clock()/CLK_TCK) - tiempo) <= 15 && !kbhit()) + Letras_en_espiral( Texto, &Text1 ); +*/ + ia += 30; + + while( 1 ) + { + delay(50); + + if ( kbhit() ) + { + + if( (key=getch()) == 27 ) break; + else + { +/* memset( VidRam, 0, 64000);*/ + Text1.C1 = 255; + Letras_en_espiral( Texto, &Text1 ); +Text1.C1 = 0; + switch( key ) + { + case 'r': + case 'R': + Reverse = !Reverse; + break; + case 'a': + case 'A': + ia += 0.5; + break; + case 's': + case 'S': + ia -=0.5; + break; + case 'z': + case 'Z': + ir +=0.5; + break; + case 'x': + case 'X': + ir -=0.5; + break; + } + } + } + Text1.C1 = 255; + Letras_en_espiral( Texto, &Text1 ); + Text1.C1 = 0; + /* ia 3 __ -3.5 */ + if ( up_down==1 ) ia -= 0.1; + else ia += 0.1; + if ( ia <= -3.5 ) up_down = 0; + if ( ia >= 3 ) up_down = 1; + + + /* Letras_en_espiral( "abcdefghijklmn¤opqrstuvwxyz ABCDEFGHIJKLMN¥OPQRSTU... 0123456789", &Text1 );*/ + Letras_en_espiral( Texto, &Text1 ); + } + + asigna_modo_video(0x3); + printf("La fuente utilizada fue: %s\n", argv[2]); + getch(); + free(ptr_char); + +} + + + + +void Letras_en_espiral( char *Frase, p_graphics *FA ) +{ +static char vez_ptr = 0; + +static char FraseBit[110][16]; +static char Frase1[100]; +static unsigned int Flen; +static char Flen1; +static char RLen; + +char cont; +int i; +char j, j1; + + char c_elec; + char bit_s; + char *Frase_seg; + + char FrBit_tmp[16]; + unsigned seg, off; +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ + double r; /*radio*/ +/* double ia; */ /*incremento  ngulo*/ +/* double ir;*/ /*incremento radio*/ + double s,c; /*seno y coseno actuales <2>*/ + double ca; /*coseno anterior*/ + double isin,icos; /*incremento seno y coseno*/ + int x,y; +/* + ia = 3; + ir = 0.3; +*/ + isin = sin(ia*grad); + icos = cos(ia*grad); + r = 0.0; /*parte del centro*/ + s = sin(0.0); /*con  ngulo 0 grados*/ + c = cos(0.0); +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ + + Frase_seg = Frase1; + +if ( !vez_ptr ) + { + vez_ptr = 1; + /* Now, we going to get 8x8 Font dir. */ +/* + asm mov AH, 0x11 + asm mov AL, 0x30 + asm mov BH, 0x03 + asm int 0x10 + asm mov seg, ES + asm mov off, BP +*/ + } + +if ( strcmp( Frase1, Frase ) != 0 ) + { + strncpy( Frase1, Frase, 99 ); + Frase1[99] = '\0'; + j = i = strlen( Frase ); + Flen = i * 8; + cont = 0; + + if ( i < FA -> ndigitos ) + i += FA -> ndigitos - i; + else + i += 5; + + Flen1 = i; + +/* // Almacenamos en la Frase a Bit's la FRASE A BIT'S */ + while( cont <= i ) + { +/* // Descomponemos cada caracter en un patron de BIT's */ + if ( (cont - j) > 0 ) + { + FraseBit[cont][0] = 0x00; FraseBit[cont][1] = 0x00; + FraseBit[cont][2] = 0x00; FraseBit[cont][3] = 0x00; + FraseBit[cont][4] = 0x00; FraseBit[cont][5] = 0x00; + FraseBit[cont][6] = 0x00; FraseBit[cont][7] = 0x00; + } else { + for( j1=0; j1<16; j1++) + FraseBit[cont][j1]= ptr_char[ ( *Frase_seg ) * 16 + j1 ]; + } + cont++; + Frase_seg++; + } + } else { +/* + // Rotamos la frase + // Almacenamos el 1er bit que vamos a perder... +*/ + for ( j1=0; j1<16; j1++ ) + FrBit_tmp[j1] = 0x01 & ( FraseBit[0][j1] >> 7 ); + + for ( j=0; j> 7 ) ); + } + for ( j1=0; j1<16; j1++ ) + FraseBit[Flen1-1][j1] = ( FraseBit[Flen1-1][j1] & 0xFE ) | FrBit_tmp[j1]; + } + +/*// ndigitos --> m x. = 40*/ + for ( i=0; i < FA->ndigitos; i ++ ) + { + for ( j=0, j1=0; j1<8; j+=2*FA->AX, j1++ ) + { +/* + // Analizamos el patron de BIT's y lo imprimimos + // FraseBit[cont][0] + // ^ ^----- N£mero de byte del digito ( 8x8 ) + // |_________ N£mero de digito alfa-numerico +*/ +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ + if( r < 250 ) + { + ca = c; + + c = c*icos-s*isin; + s = s*icos+ca*isin; + x = 160+(int)(floor(r*c*1.2+0.5)); + y = 100+(int)(floor(r*s+0.5)); + + r += ir; + } + +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ +/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ + for ( bit_s = 0; bit_s < 16; bit_s++ ) + { + if ( FraseBit[i][bit_s] & ( (char)0x01 << (7-j1) ) ) c_elec = FA->C2; else c_elec = FA->C1; +/* writepixel( ( FA->x + j + i*8*2*FA->AX ), ( FA->y + 2*bit_s*FA->AY ), c_elec );*/ + + if( !Reverse ) + { + if ( c_elec == FA->C2 ) c_elec = r; + } else { + if ( c_elec == FA->C1 ) c_elec = r; + else + c_elec = FA->C1; + } + if ( FA->C1==255 ) c_elec=0; + /* writepixel( x,y+bit_s*2, c_elec ); */writepixel( x, y+bit_s*2, c_elec ); + } + } + } + +} + + +void writepixel( int x, int y, char color ) + { + if ( x>=0 && x<320 && y>=0 && y<200 ) + *(VidRam + (x + y*320) ) = color; + } + +void asigna_modo_video(char modo) /* asigna el modo de v¡deo indicado */ +{ /* en la variable "modo" */ + union REGS ent, sal; + + ent.h.al = modo; + ent.h.ah = 0; + int86(16, &ent, &sal); /* funci¢n para asignar el modo de video */ +} + +void LeeFuentes(char *file) +{ +FILE *fich; + /* Reservamos 4 Kb. para cargar la fuente en memoria */ + + if((ptr_char=(char *)malloc(4096))==NULL) { + printf("­­ No hay suficiente memoria !!\n"); + exit (1); + } + + /* Abrimos el fichero de la fuente */ + + if ((fich=fopen(file,"rb"))==NULL) { + printf("\a\nArchivo %s no encontrado.\n",file); + free(ptr_char); + exit(1); + } + + fseek(fich, SEEK_SET, 0); /* Nos colocamos al principio del fichero */ + fread(ptr_char,1,4096,fich); /* Cargamos en memoria 4096 bytes del fichero */ + fclose(fich); /* Cerramos el fichero */ +} + + + diff --git a/ESPIRAL.EXE b/ESPIRAL.EXE new file mode 100644 index 0000000000000000000000000000000000000000..98cd50e9bca4654fb81aa8862ead0efcfce15f19 GIT binary patch literal 41194 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 literal 0 HcmV?d00001 diff --git a/ESPIRAL.OBJ b/ESPIRAL.OBJ new file mode 100644 index 0000000000000000000000000000000000000000..edfd13c6d721812be461937481e42a455cb06cb3 GIT binary patch literal 7275 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md new file mode 100644 index 0000000..f778269 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +#SPIRAL + + +*01/01/1993* + +ToDo: wwtcf? + + +![screenshot](/SPIRAL.png "Screenshot") diff --git a/S.C b/S.C new file mode 100644 index 0000000..d67e8a1 --- /dev/null +++ b/S.C @@ -0,0 +1,361 @@ +/* + Este programa forma parte del Curso de C + Copyright (C) 1991 Grupo Editorial Jackson + Todos los derechos reservados +*/ + + +/* ESPIRAL: dibuja espirales poligonales aleatorias */ + + +/* NOTA: tambi‚n este fichero, como REBOTE.C, contiene dos programas + distintos, el primero escrito con las funciones gr ficas de Turbo C + 2.0 y el segundo con las de Quick C 2.0. La opci¢n es autom tica + con una instrucci¢n #ifdef. + + Este sistema comienza a resultar demasiado inc¢modo: en la lecci¢n + E5 se explica c¢mo crear una 'librer¡a' de funciones gr ficas + port til, parecida a la librer¡a Jconio, empleada para las funciones + de consola. +*/ + + +/*========================= Versi¢n para Turbo C 2.0 ======================*/ + +#ifdef __TURBOC__ + + +#include +#include +#include +#include +#include + + +/* constantes y variables globales */ + +#define PAUSA 3 /*3 segundos de pausa entre espirales*/ + +int maxcol; /*l¡mite de colores*/ +int centroX; /*coordenadas del centro de la pantalla*/ +int centroY; +double cuadra; /*factor de cuadratura*/ +double pi; /*n£mero pi*/ +double grad; /*constante de conversi¢n grados/radianes*/ + + +/* prototipos de funciones: */ + +void Espiral(void); + + +/******************************************************************** + * main + ********************************************************************/ + +main() +{ + int driver = DETECT; /*elige autom ticamente*/ + int modo; + int dimx,dimy; /*dimensiones pantalla (n£mero pixels)*/ + time_t t; + + initgraph(&driver,&modo,NULL); /*inicia gr ficos <1>*/ + if (driver < 0) { /*comprueba si ok*/ + cputs("\r\n- No se pueden utilizar los" + " gr ficos de este ordenador."); /*sale si no puede*/ + exit(1); + } + + maxcol = getmaxcolor(); /*color m s alto*/ + dimx = getmaxx()+1; /*y l¡mites pantalla*/ + dimy = getmaxy()+1; + centroX = dimx/2; /*calcula centro <2>*/ + centroY = dimy/2; + cuadra = (dimx/(double)dimy)/(4.0/3.0); /*cuadratura <3>*/ + pi = 4.0*atan(1.0); /*n£mero pi <4>*/ + grad = pi/180.0; /*constante convers. <5>*/ + + srand((unsigned int)time(NULL)); /*inicia random*/ + while (kbhit()) getch(); /*vac¡a buffer*/ + + while (! kbhit()) { /*sale con una tecla*/ + Espiral(); /*dibuja una espiral*/ + t = time(NULL)+PAUSA; /*espera o tecla <6>*/ + while (! kbhit() && time(NULL) < t) + ; + } + if (kbhit()) getch(); /*vac¡a posibles teclas*/ + + closegraph(); /*vuelve al modo texto*/ +} + +/* Notas sobre main: + <1> El paso al modo gr fico es id‚ntico al de REBOTE. + <2> Dado que el n£mero de pixels es par, no existe un centro exacto. + <3> El factor de cuadratura se utilizar  para corregir la dimensi¢n + horizontal de forma que la figura aparezca con las mismas proporciones + tanto en vertical como en horizontal, independientemente de la forma + de los pixels en un determinado ordenador. Las operaciones con + (double) son necesarias para evitar que dimx/dimy sea una divisi¢n + entera con p‚rdida del resto. + <4> Aprovechando el hecho de que 45ø es ã/4 y que la tangente de 45ø es + 1.0, se puede obtener el valor de pi sin tener que escribirlo. + <5> Es m s c¢modo disponer de una constante para convertir entre grados + sexagesimales (una vuelta = 360ø) y radianes (una vuelta = 2ã). + <6> El tiempo de espera establecido (PAUSA segundos) se interrumpe si el + usuario pulsa una tecla para terminar el programa. Si se desea una + mayor precisi¢n, se deber¡a utilizar clock en lugar de time. +*/ + + +/******************************************************************** + * Espiral: dibuja una espiral poligonal aleatoria. + ********************************************************************/ + +void Espiral(void) /*<1>*/ +{ + double r; /*radio*/ + double ia; /*incremento  ngulo*/ + double ir; /*incremento radio*/ + double rlim; /*l¡mite radio*/ + double s,c; /*seno y coseno actuales <2>*/ + double ca; /*coseno anterior*/ + double isin,icos; /*incremento seno y coseno*/ + int x,y; + + rlim = centroY*2.5; /*fija l¡mite*/ + ia = (double)((rand()%3600)/10.0); /*extrae incrementos <3>*/ + ir = 1.0+(double)((rand()%200)/100.0); + isin = sin(ia*grad); + icos = cos(ia*grad); + r = 0.0; /*parte del centro*/ + s = sin(0.0); /*con  ngulo 0 grados*/ + c = cos(0.0); + + setcolor(1+rand()%maxcol); /*y color, no negro <4>*/ + cleardevice(); /*borra pantalla*/ + moveto(centroX,centroY); /*va al centro*/ + while (r < rlim) { + ca = c; /*copia coseno*/ + c = c*icos-s*isin; /*nuevo coseno <5>*/ + s = s*icos+ca*isin; /*nuevo seno*/ + x = centroX+(int)(floor(r*c*cuadra+0.5)); /*nuevas coordenadas <6>*/ + y = centroY+(int)(floor(r*s+0.5)); + lineto(x,y); /*traza l¡nea*/ + r += ir; /*incrementa radio*/ + } +} + +/* Notas sobre Espiral: + <1> Una espiral poligonal se obtiene girando a velocidad constante + alrededor del centro y aumentando progresivamente el radio. A + intervalos regulares (en t‚rminos de  ngulo) se fija un punto y + se une con un segmento rectil¡neo al punto anterior. + <2> La funci¢n Espiral usa un truco para no tener que llamar a dos + funciones trigonom‚tricas relativamente lentas (seno y coseno) en + cada vuelta. Es posible calcular una sola vez, al principio, las dos + variables isin y icos, y utilizarlas con simples multiplicaciones + para calcular la posici¢n sucesiva a lo largo de una circunferencia. + <3> La rotaci¢n se obtiene aumentando en cada vuelta el  ngulo actual un + determinado valor (en realidad utilizamos el truco descrito en la nota + 2). Ejecutando rand()%3600 se obtiene un valor entre 0 y 3599, y + dividi‚ndolo por 10.0 se subdivide el  ngulo de giro en d‚cimas de + grado: el valor de ia resulta entonces comprendido entre 0.0 y 359.9 + grados. El valor de ir (incremento radio) estar  comprendido, sin + embargo, entre 1.0 y 2.99. + <4> Extrae un color entre los disponibles, excluido el cero. En el caso + de un monitor monocromo, extrae siempre el blanco. + <5> Este es el atajo utilizado para evitar el c lculo en cada vuelta del + seno y el coseno del  ngulo actual. No profundizamos en la t‚cnica + trigonom‚trica empleada. + <6> La coordenada horizontal se multiplica por cuadra (el factor de + cuadratura) para asegurar unas proporciones 'cuadradas'. Utilizamos + el sistema habitual para aproximar un double al entero m s cercano: + a¤adir 0.5 y aproximar con floor al entero inferior. La utilizaci¢n + de (int) no es estrictamente necesaria, pero muestra sin ninguna + duda que se ejecuta un truncamiento de la parte decimal pasando de + un double a un int (la parte decimal ya era cero, de todas formas, + por el efecto de floor). +*/ + + + +/*========================= Versi¢n para Quick C 2.0 ======================*/ + +#else + + +#include +#include /*para definir NULL*/ +#include +#include +#include +#include + + +/* constantes y variables globales */ + +#define PAUSA 3 /*3 segundos de pausa entre espirales*/ + +int maxcol; /*l¡mite de colores*/ +int centroX; /*coordenadas del centro de la pantalla*/ +int centroY; +double cuadra; /*factor de cuadratura*/ +double pi; /*n£mero pi*/ +double grad; /*constante de conversi¢n grados/radianes*/ + + +/* prototipos de funciones: */ + +void Espiral(void); + + +/******************************************************************** + * main + ********************************************************************/ + +main() +{ + int modos[] = { /*lista de los modos en orden de preferencia*/ + _VRES16COLOR, /*VGA 640 x 480*/ + _ERESCOLOR, /*EGA color 640 x 350*/ + _ERESNOCOLOR, /*EGA monocroma 640 x 350*/ + _ORESCOLOR, /*Olivetti 640 x 400*/ + _HERCMONO, /*Hercules 720 x 348*/ + _HRESBW, /*CGA 640 x 400*/ + _DEFAULTMODE /*indica fin de lista*/ + }; + struct videoconfig v; /*datos del modo de v¡deo actual*/ + int dimx,dimy; /*dimensiones de la pantalla (n£mero pixels)*/ + time_t t; + int i; + + i = 0; /*inicia gr ficos <1>*/ + while (modos[i] != _DEFAULTMODE + && _setvideomode(modos[i]) == 0) { + i++; + } + + if (modos[i] == _DEFAULTMODE) { /*comprueba si ok*/ + cputs("\r\n- No se pueden utilizar los" + " gr ficos de este ordenador."); /*sale si no puede*/ + exit(1); + } + + _getvideoconfig(&v); /*lee datos modo v¡deo:*/ + maxcol = v.numcolors; /*color m ximo*/ + dimx = v.numxpixels; /*l¡mites pantalla*/ + dimy = v.numypixels; + centroX = dimx/2; /*calcula centro <2>*/ + centroY = dimy/2; + cuadra = (dimx/(double)dimy)/(4.0/3.0); /*cuadratura <3>*/ + pi = 4.0*atan(1.0); /*n£mero pi <4>*/ + grad = pi/180.0; /*constante convers. <5>*/ + + srand((unsigned int)time(NULL)); /*inicia random*/ + while (kbhit()) getch(); /*vac¡a buffer*/ + + while (! kbhit()) { /*sale con una tecla*/ + Espiral(); /*dibuja una espiral*/ + t = time(NULL)+PAUSA; /*espera o tecla <6>*/ + while (! kbhit() && time(NULL) < t) + ; + } + if (kbhit()) getch(); /*vac¡a posibles teclas*/ + + _setvideomode(_DEFAULTMODE); /*vuelve al modo texto*/ +} + +/* Notas sobre main: + <1> El paso al modo gr fico es id‚ntico al de REBOTE. + <2> Dado que el n£mero de pixels es par, no existe un centro exacto. + <3> El factor de cuadratura se utilizar  para corregir la dimensi¢n + horizontal de forma que la figura aparezca con las mismas proporciones + tanto en vertical como en horizontal, independientemente de la forma + de los pixels en un determinado ordenador. Las operaciones con + (double) son necesarias para evitar que dimx/dimy sea una divisi¢n + entera con p‚rdida del resto. + <4> Aprovechando el hecho de que 45ø es ã/4 y que la tangente de 45ø es + 1.0, se puede obtener el valor de pi sin tener que escribirlo. + <5> Es m s c¢modo disponer de una constante para convertir entre grados + sexagesimales (una vuelta = 360ø) y radianes (una vuelta = 2ã). + <6> El tiempo de espera establecido (PAUSA segundos) se interrumpe si el + usuario pulsa una tecla para terminar el programa. Si se desea una + mayor precisi¢n, se deber¡a utilizar clock en lugar de time. +*/ + + +/******************************************************************** + * Espiral: dibuja una espiral poligonal aleatoria. + ********************************************************************/ + +void Espiral(void) /*<1>*/ +{ + double r; /*radio*/ + double ia; /*incremento  ngulo*/ + double ir; /*incremento radio*/ + double rlim; /*l¡mite radio*/ + double s,c; /*seno y coseno actuales <2>*/ + double ca; /*coseno anterior*/ + double isin,icos; /*incremento seno y coseno*/ + int x,y; + + rlim = centroY*2.5; /*fija l¡mite*/ + ia = (double)((rand()%3600)/10.0); /*extrae incrementos <3>*/ + ir = 1.0+(double)((rand()%200)/100.0); + isin = sin(ia*grad); + icos = cos(ia*grad); + r = 0.0; /*parte del centro*/ + s = sin(0.0); /*con  ngulo 0 grados*/ + c = cos(0.0); + + _setcolor(1+rand()%maxcol); /*y color, no negro <4>*/ + _clearscreen(_GCLEARSCREEN); /*borra pantalla*/ + _moveto(centroX,centroY); /*va al centro*/ + while (r < rlim) { + ca = c; /*copia coseno*/ + c = c*icos-s*isin; /*nuevo coseno <5>*/ + s = s*icos+ca*isin; /*nuevo seno*/ + x = centroX+(int)(floor(r*c*cuadra+0.5)); /*nuevas coordenadas <6>*/ + y = centroY+(int)(floor(r*s+0.5)); + lineto(x,y); /*traza l¡nea*/ + r += ir; /*incrementa radio*/ + } +} + +/* Notas sobre Espiral: + <1> Una espiral poligonal se obtiene girando a velocidad constante + alrededor del centro y aumentando progresivamente el radio. A + intervalos regulares (en t‚rminos de  ngulo) se fija un punto y + se une con un segmento rectil¡neo al punto anterior. + <2> La funci¢n Espiral usa un truco para no tener que llamar a dos + funciones trigonom‚tricas relativamente lentas (seno y coseno) en + cada vuelta. Es posible calcular una sola vez, al principio, las dos + variables isin y icos, y utilizarlas con simples multiplicaciones + para calcular la posici¢n sucesiva a lo largo de una circunferencia. + <3> La rotaci¢n se obtiene aumentando en cada vuelta el  ngulo actual un + determinado valor (utilizamos el truco descrito en la nota 2). + Ejecutando rand()%3600 se obtiene un valor entre 0 y 3599, y + dividi‚ndolo por 10.0 se subdivide el  ngulo de giro en d‚cimas de + grado: el valor de ia resulta entonces comprendido entre 0.0 y 359.9 + grados. El valor de ir (incremento radio) estar  comprendido, sin + embargo, entre 1.0 y 2.99. + <4> Extrae un color entre los disponibles, excluido el cero. En el caso + de un monitor monocromo, extrae siempre el blanco. + <5> Este es el atajo utilizado para evitar calcular en cada vuelta el + seno y el coseno del  ngulo actual. No profundizamos en la t‚cnica + trigonom‚trica empleada. + <6> La coordenada horizontal se multiplica por cuadra (el factor de + cuadratura) para asegurar unas proporciones 'cuadradas'. Utilizamos + el sistema habitual para aproximar un double al entero m s cercano: + a¤adir 0.5 y aproximar con floor al entero inferior. La utilizaci¢n + de (int) no es estrictamente necesaria, pero muestra sin ninguna + duda que se ejecuta un truncamiento de la parte decimal pasando de + un double a un int (la parte decimal ya era cero, de todas formas, + por el efecto de floor). +*/ + + +#endif /*fin opci¢n Turbo C/Quick C*/ + \ No newline at end of file diff --git a/S.EXE b/S.EXE new file mode 100644 index 0000000000000000000000000000000000000000..13f87719b3506057881a0bd68f3d7efac963b340 GIT binary patch literal 56381 zcmd44dtg&V_6I&UH}@t@)6ha29%6V$q)@vpR3x-?MN<^55ws7`;#(FKu}xZCOB*)3 zl;jpf{eD%dtCX(0Du2pI`C3{D644HC4&y~`1D29DtgiG>>pHv#TRI86*8_c99&jc|Ur_u#g{ z{Sj_6+(-i2n zLbwOv&cjU|M@RjgzUjP2JcC5-)R>b&coev7usPlA#cJxwTO^A;fBL)xfAuhn~%nc=FJ6T-voe-!Nr_w^%$)WWTX+xIXbbDu;TmlARlToRlH?wAYkaQ_Qe3ReVY zhf9G=g4^K)&B1BmPM3flo+d<$TWB~1hZ_9<_;2SzLyFhDlW9n8pCF`Yh+vscHXN>7 zO{)24iPus_yeZFEv0ttQz_Orq@$@j6EXX&>V?dx+QcJ0hF4COM;o$Qe(;Jqh;&++#%i z8*zx8xhWegI~j2)L28XjIMr~Q&#q~ou){<)?!1l!tBA!eNgrC z@IFet0ovT4w?ISoE)4<#J1oE?lc;D0Wj_n7ZFHX{WTJ-I+O`p+dGossX;PINB@g)tgAb=t+Zd!$G9isd3n{JX= zv1z$@VMT0{t6Q2a-l^0~e3}AqEb$y9-n_8aJ|GeC0EICt=?iJJEiYVt(#6^A1I5S0 z_YvvbBW|NFR$RHfCJF3zS&{I~y#b{O7hKkawNp)MmFkrW0^t+DujoK~rg-tOUGXL~ zh|qjFM8+8k(FBMikL}t=o9ssr-K2dsAEsdYXvOVK$k$>*_aS5(68hq3QJ3Wvu6fJTUF#2!Qd6$JPZfK(<>#%!KvF4g@JidoGVa7y7U3j`vt$oVp`d6&R? z*sQ6h{Jff45GpWL6WI5mD1Wplbl449GeJ~7>nzjj;3sMFkS^EURbXpzrMD+c(GcfD z=}jlj9y#{vA@S8iXI}lX_tis9uO8}p^~*!A{-+`=*u$^8IKPHSnHYG|Y!$Z69)|R+ z2=7QFM=8jZdBZa2vFHldNJPmp5-L$4dw93s#bT&YYWx2x2OMcYtbY87%_qhev}-=e z=WFs}2=ULHwIi17eu8VCkm9{MrTS)#r%juE^n1Sx>?abUTjt3E&vxHIUN>@bkMc?0be zvXA!rv!?9L>uH~`;fRurb9C)$vbHNTo-H4iNertEe%BP!xShWTa_!e2Lr$q9+Gni{ zqxR$W*E|L6Ey!-y6C7%gvUg>2)|rjcwDuc1<%~o|&KM3C4`*U17XateIxK!O1LB{U{yX`_yJj=O zZ3gchyl|V*dxu`QjrZPR5N^|Z?=Y@;)JV>{ztOqdJH2;k+j2DM>)Z4Q5DvMIHM#r2 zbKGCgRvYW;KXXn_T**j@f7Za0MWoa}k8h_GjJ&zfGsI3LE7b1qxcJC$`7 zW;QX-yE2b6&O0*WiSyRXQN($3X1vy!ojFSDv}GP3&Wy}X;`~MCA>KJXGoE)|lR1ia zPRxwgIIqqerE!jGxyO*1N?Zxz52StWA)RO?;PB!_639%|x<-g!5wzETbmA}?Tp)f! z0^$oqEFyvSS>IsvO=sFOYo{|)NX}a%+sVHL^q9a~DZws;;XXSq+I)~(9!P; z3X#oGhfnK!NMp>N*yTQ6x$YrN`>e?Y?U@0!4?dzjv^MB9y~2pQWN{L)?7hcO^D<@| z)^3Wm8=Yp`r>lp9h+;o-vhB0F+W1P$TqP~d2Z%K%QXPpl zglC@C1-Zg6(12ij!Zh+aiZfy`>fwOG##S)uY_x#XWmu{i$P}v1ZPrp)J%tEzeQ}gn9!EVZ&N=kYERN}Rp&;`Ccz5D1_?moLKHq==W zpWK9CDJHh5QfZ?YL^!qCvfU(?4wp;gGYP3+A^X5=iv|{(*Owlkt>+L;+>0$0hJiKx z=yCm;{&1x;Nt)tMzQt29K%AQF?6>{7_P2w5#Gjly7*zkuw}T>aQwX+x##RN9Wwg9u z?!KFyPk8z-mM^yznJORj^iQoUiak;}%%7U__6~+PW9n14&UX#$z@%%Np~-33y3o~K zpR)Cr(pglG%?;c3l*T3R5%#g2^{MB#E_9j~I!CxGc;bpfAwsU9>MQY|;i`UHg~7!l zE9t?F8SiYZPca;KUcJ@VvXy4)>b)Yt?~$N>{6xFnc=J|&@{EP6wQE~KN4CDWBQ-Vi zK~g$8^INvmuxXdbhR$pDY<=PVhq~!|ZObd~8@kW4d)`iK+Nx8Ok>>cwI2)Ch-)cWi zTJ2|;R{M8&pN0D#Li!w))E5{6>gm$7UtiJPp2;^7_ipGI_H%NnK`zzHdD_B4kR%&i zLtc5YJK%Qdx~paw7}tMZlyi;c%jYILb#rI9W`*si!}jlJ(A}4(byu8WTxNI0cf=V# z_ZBBVH`mEYe6WiNj?(}mGB?GUHur|I;0B=5p*U!O6-H7XuQrB5&f`5T zyqtTEj^Hry$YJMU1r?1D@>ZPmmWs*p+?$=+xevP*(YCnv^0tUHmN{%cOJnC<5qm?~ z)zedpN51m%PSoQl+p|UnhxjaAMrSe7Keee>BGHX(oLuOu?xOF7qLZ;l6viSg-zemY z!XCEGUGY8RjKx!SO#!~rD8DSzcCn+@Xo3OgPvJ^1vu@NA8ffZ9A>ipBUdrwoPS`!k z``O-h+sbaC4fC2L%8?wRt-l~vUd=%qODy<;yW%tk6c}Smg-IwnXJxK#sTeL4U9ftu z)&;z53Z7Fm^kjRcoROlDGp55$gPW=m z%X`7j!P>`xv)hnLPn^SO3MKT&JcLex^t>z&Xq9wkiW%oTHSr-NrfMQB|7XIgP4ze#Au7PR}V*UOoo1f$%LA@qW2dpwc_WI)Uks@b6fP z{3jvd`Gl7fexCq6i<3;K3P)M?l(X$~kIYCv((!f2r(mk+H$}CI$Yl5N9QQ!B)9fDL zoJRKmQjYWQ|w2TZ0OK0J-t&)*&S2KKuZOGek)iInmTwD z(>|+7Wh>z1Gvs+Y<8Ke0e6itnpZ(&2uI}S(0JH2+Cm!IY5CnXvlWi`4GjljtzkfIp zI+L4)vr*z}>?w%tt{f!3#o{|X1?@8rwckL|?Y94LvorC=`Jmr2-cw;B70K;$O3y8n zCJTWD4)HgagZ|PLck4n03fbkJn@<&TTWL2?XZ!Qhnl5f#U)sGxOQ1U(ap^OB)7?KX z(p4Egt=-pk@YLjCTx#l8gSgPC2M5R7_03ZEH^W@I8|PbFZ)Sd>wuv@$i2XR)DAraT z5dz6}K6ziM-rA;1CG(H=4CsXBD4SMP91G-|*M796h_A-Pxac@$5>P^1Iw%%7tfXrx zGEj9G3X4cprolM75=Z-##$kpp*hfLy3U)JwxL{AjSQqTWG3YUCIqDD>hA2CCWr9W) zb{y+CCV$wYkw5I#P*z{cTl_b$5!J2lE>BCmr$Wm*(V$u_G#ThVtbYQjtAwFJQOzhV z=j96(+Qufnm2cunE-X0)l729B-rbzKE>UQsUZE#ec6}qXE-SjXSwmH(ynM^vQf*6x ze%scGO|HIiLY_ge>uIz;5+>N;v;TSxTN1c-zR;W^hHufQfpFm zQ6J{(`MO{yQN8!+g6$FSYF)57;(bjg>DBmMy6U1ZCi~0S;G2=iPF=7j;_cN1pNn`C z^}*jpys3IARZVTzORH4h!+Plv)%ToUx<~cBu9p_6zIRa?EhUeYvel5idMQKo9nwqF zRo?}@G*R`LVx&>3Z(0mUUHs)mq0^$Pwuik%7$*a<_ONq`#UJ1ua%rDj+9Q{S<_*@&}FDTVms`@oG1Mtok)0fR&Txr zeSeHup!6^e6m-_u9F23NrvlaROtueTUXxg&k$w}Yq#{IUEeDD4@2o<3F5MbTMVJyjCCMLT2~#q@?(ZxmO{G<$ z4MIhd!XmOWV@X+YggZ2j9y8{eF`td@8XZ3-e#`|t`7vFiPmbotv=kYULQAB4)yEO( zcGU+ha(+t@&5uQ!Q79NSf1&!&VArTV%!se9c^{@>`svk4@oExTR-d?QQ5{j zl;?8g`H1q&Q=WGz&wG^T5~8$<8lh!HSe1dJE2`MkF7du{9i zXHpwKv;hi$fAD`nk`ymBKYsy6<$&xEuaPk-i{y*~&f>p|13&BsAp`4J@k9@$uzp#} z2JRF<&d7tiixbE8BF$CNPm|ctUsz~sb&eI^SCS0Km$JKtW`}BBHHdA?8~@;{(W_p| z_gbiMs4iqUPisrLQDi);l&&?2&-VeqAy^i0U=(15v>9tUu=3z(G1Ry~ZR&Ck(&_e= z4y@1G#O+8R;Bq_!r^UaCbJT3P20Xa1W(i<3>D(VV)a25zR(=&nlyxkJvZPU{`Yrxz zbO-=J0CP2nqEOR5h2}%O3J#<334p=x7!VKr)+q5c`>+aKSV+rim;s-Xgszbk76P$B z{)L6OAu^px_a>`gUc{=tS_jLGCn_ILZ}OVI)7G8VQUbg|=UO7!p?oV0R_GL}_HnUQ zA9K#@E``Z&?Bk#+#x|9YL15i&9OuT!B7XUU zI}3r%UnqfM8m94>tM;@M^(?fy=go1B7CNct9%sDJX>HZrBSRA{>VZ$edCfdGsfa-# zQz{8+B4^wNVnycS5!BCRtbK@6YZmMvln@4X>$we<$GIKzNLthRt<_B%I+uaM|IS+c ziJ{vkA5LIHxmBdvT4hlhnDEtW*k>^+>T^zq56t zxVkj1+Ak49UI{RXh98r82g%9noxXxaQYSG$6v`o|Bje8qHw zl2w?iucIm4SwCR@8n^ieZ36)V5eNFDnQgqv?G|u9XcZn?_W)PRsx0b0F8-Q&c1sQi z@G{OMelS4mg?%nV=qxJbRiPxle_=sn6%>lY0BvPC7c>F6K5x8BCj@MEzT`v%_Mr=q z>sji@P%cD`#-jBC+J8J%H|&NhMEJ)L;rlqDHCuXEmEM2zWHoSxa=j|wq&qCN4Vo9IVn5XiLx=1l=M>?QT|45>!OnS#Q;TR_1rJ2p>c= zD%eYT%I!4Hm9~rrxC%wAcgxa!wGJ*8;tdNb76*v#J21@C+Mxo^n~}@q)pS$BqFm<+ zx_b9K=&FsU6r)nlP#LMR0Kem($v6 zVC4l)L&fp9{ZUS)W)`Dn7F>t%gE3(e-^KW%18@lj;D{eEzH0A6_3}99luNRr{{jua zO{EH2AqIwrq4{qY= zL-9ey%JH-g^T>(C`!F1$HM$YwY$!ukw5$jt7Ao{YDIeQiZjF`8CsMg1;lOYP7Yjjw)dp-i+0pH>(mn&``GqPh*{j^255{Q7WeT0al(rMpvOz zh8B&v9W6bov+-CpT+LY)W9_u&F6=2%RVK(q6+kdQ$JMUq)Um5%qY9;350}hWa*o`H#9=7i!pYBo!8QG&oc zqWZA1{H3C1@n5Gy+wwIpK(ZGua)`hF4j}*;f>{LpQU!hW!z4~n(fb+nYgFJX>vSrt z)M+pgqz3w`iuM&hw6CJWK&UW)jyz#)8RwDN(kPvb_GVNmE$9Wc2wc7+uO>H5Q5-;@ z3gVYCpoEyOQqGHNUq&biVKtXR^3>31NIw0}i+)9Oy^MYoVTt*TSEshs5JnV^9Yl46 zH)Fkm>T?{h{2Q=D3tWz4UVh{A9G!6KsmisiC|X*y4vO}K!815lNpIuVb4JX240X?O zdHL1Yowc`=-~BwN=Ag)Fb$tT;`Z*X6Ms_sQ+WR={pnj5w~e+Va@Pa+7(R&nqXsz}vf7G{80@m1AuTWYw?HQXzX znolUfqinUVn^!{eM@P=)Rmum*)N^V~v>SkRwf&U0=%lJuv(jozaZf_n$Cq;ccp_ou zb<*n7HDEJfWj92E z%2Q*zi>F7x%O@!WQwDo1rO3q*B71lyrAO#s(8en@AoR<4uUe_CKN1JgIw|wa3>Vbl z60YWy!bS9+ta^^PCV8^9;WbvKv5Ez_W>Y#Hzbs$EfkBV!i!!rlWe3Hc$rIL8#z6Lg zZD~|x1U7~QZ$>>B)_WYJm;vpFB>?vF5SxPCC?a;wWnr@$bF zT3y<5sPxaF(qA#K+^mhgnRl|m&#;Fmk4~f8I0J#^{YT88_XU+ngc1Szyx@Rg$RUnA zi>bi~Pu4@+MWp)x#)XHt9yz!TOzQ#{Pv|b8Zii^01q0A1HU%j}NDlglkk=#FySZVP zrfhjwoa_Tjxd8F>Z4mH@m*rxhxk!t|@*r%Iuuq!Asi&2h^yOg3Bnmb~&E9*r#tSw> zaq-@)_oB&K?uAOW94gr(oD@fqIWMQfpk-i)7wt^N^)@^Wb=wt%IH)(0`N>w0(A zUF@4KtR{RALjn!M+T*u;5aZ7#8=7{-6L6j_e~ocxZI9ucCi>Djb(23aj<>GUQS+un z*}@7*!xI_GCxpzs`)NM%kht_FU&>$9EL@roSfA+~I-6}^z`y9WlCN?N$a5%7#Xx+YyBENl zx5uO%pDVjGzAmIfx2f5CxuGO0l8b0EFDRm#fB)yGqEY)ZEk?<)QUBi}4gV!lCFDlq zPlM$0FwXjU(rEf`@w%UlA2L=NhyQdILqKeMikatahf6e7hwoezsnXH{tf&fk@s08S zC3yrE)FTubBk+m;SNO(J3MBT|?pn@7n&bbRI8vDTCkwOCQJ`ieoae`Z90o86IR7R% z>J`HXy4*_6hmjN+Mppu)H8svriV*hvd{p4dsCp)ns=8VDaim7b#cm%ZR~n!F6RFi$ zVb6jq<9tPY8npm4j`_)ogGYiX4zkIghe|t6iT9^7!H}5WIQHlA-|`fPq`q9kI#Yd2 z+UdrLKL@B{(E`S670QiP;VzSvEsytnr|GNuw))>24)*8Y-8fxIytJTi!>2-5|BovB zi2iaWM^*1)&e!!b91gXowNi&9bT*+stqDs_SZESHN#1`;qxC0IZGpT2w~k+Ptg_OV zXYjRk9~Jib0(f?!Jl`YwiP(tKk_905YKC^Ns77hvK3?7jP*b`^c?P^JHjDY-z7$a3rQF2H-?!&tK<&>@hpni?1KZ$fp z5f&kN0lVi)4MK&{_RnHX)%Ui~@$5_f-s-(RxsPhVjWd5Hu|ZAjvzr<-E`eZcJi{;= zR?Bd_P9|E8p_}D77=rMJF9xR(m9NT(wAdaI8RBH(vuuxX_sdRI7AP_Rvf!nekP}ha zpeQPHbSy3B0U=1a1+-S97?}d^s;3vc1kN;497iy8a*SOl~mYGVOyPvJp z^agsAytN2&ri$sLc-q7xPAg5uiZe;^$X%pqLtxhp1Z$s5X1e06YbrG}Z&34%QBraN zcdw>6#@);RP{O)<^(bsid;Hun*t*xR!$!$|z0=_Ck1a-d#xkY6w5Gt$oow2XQap7){UFYR#S434o1Ir%HXITT z`*Jknu$x0WSK~77T*sXHv(`z^4+YYjt~k^%o}}XJ<nq69;FsD@{_@pdO zAtF1xBvIjks|Zw;m=?>^blX6$9CXMcPsHO1B|ijMpvt2B01Y{;3C@y5Nq)ZSu=ovq zqDtS%;>v`Qe*`jR+4ViR#05<-K^8j`g0ZqYYZH!q@?u9~FdTMgJ&BKD!k&=zp%E1Q zM@9t2aA2MFfe~9C91;9a7=wWUO};>&v6W-p&aw(;-ipbVCt-^f&dT`oTATPU30BqP!Ld4I^LJE}_M~C7dSNfqk=IM?wwO(9G<* z|0T7RWH8LAguP6b>Vk{Ij>UH_;;llCF+01i4teC5>fWTU`1FI2fhD7or)~GRV974F!#J&So1#9&?u5O{HK>mE({(^D)Ye738BFT^fa!OI? zNvzQnn>k#Ut)qBE{1Z=->4z>(xO{VE+W&MRAATn~(D~MsKCbn-lM? z9PTG>Z%(2&#|+gL7DYw7MX6#lQ#`_*^#)-};>6QNphMMS8Zi?`7L$81;rL28pL`DQ zFKuBVtIJR_EV(WD6ETT&e9N}6pGa}ZUnPHz5rWUJ*v~2bsk$HMbgyE$L2fu z#W>d?ekd0%(}`z^c<+GNMJ9dZI$toc3Ea~;uEj!WRtKFzqh=u5!#HK;&Z@!qV-|?3 z<$ySYNCo0lQd_IF@o#8LMrUeCaUxA9nBGt@h_($an?NYIg-%hvsD7=pjj4MJ^ZB>6Qiji5L&Onr=vu0OplfaXTUysR8zNn!DKO(q z!;vFDLo2F_w!DlE5VBB0cP>J- z*TS<=*6TG9)@#}lmQ9jfoOlN|*yLji_hE;) zk!HrT$%hw?SicXQR;ClmNRNd zx|}a$f%o(XAgKJj{5&y-qvAsclB5lzsrnd4u`e%`4L+wyKe*2Pyv}Q05BD4#`peA2 z>ER5lcz|&%2Af|3HZSxD0qkV`o(>KcBS<*Aw7?c}S{6I}OGr-WTddtKPVcq_UK1Z9 zzefX`n1ZF!9yO#;2^k;}E-IK%oC*D@6v?wdQAeC(*nRA$X!44F%yvzB#2Q!{BtFqE zKFS25wBtY~br&?XV6xqs0!VfA8AwX4CeJM)p1=~JKe@-7^&$Zwu)*CpcB>AwI~UQW z+AYiZd5afgS9&7>eHMrjg{p492_`YWk3utnGap=IR^9!}3sgn% zmWRi{y5iQLh$5zBf~O@>GI;QzDM^CA7Pwo0dqfrl|J^I@WHBO9Ntd2>XH378EN<)l zF>89e7Y!?(>;os7!IEOWu2w7lz2BYnJW?jK^3UsJAW^qo2Mp?-(*>4^AMv#QVgixB zRX;GcwAf89e=8gi0>U8?{nQ+Qm}w3jdp>lG?ZBAav7Dj(xX5{4vz<&QuGBlmHg-*QJ;=Qj?%f7<~-hKy1YohM}(!{O_EN3K6Nqu<_(2-8N z#-za;1DT!z$d&7iXyLnLp|jRF*goP1Jp~0zvu%Nj!vRoRlX$WhwEwm&`g(@6koa5= zmhFT8#0gAXW-*lK(#4xmnP@JnH}|X;I|l7N9bFw=Y$vv~(*71dWlCbf&BSC)2@7sk z;At5Z{8fk_Cmx|zY8(b>!wDQBUPr`U1e|hLh?-@Q;W`oO9bqF*dtdIo+U=ytURgt9)NazMBvEQ~}VZPh=kJ{R^R_c`N`XL57$_n|W( zncWjWhn8ZCZlBG5wq&Ag?}L((w193?6!h7)kIQ4I*Q;OPk`zxou)82v($h_D6-C|r z`R)O?i<`?hzsHu93#+jo^8&5RF|Ylc^d&NfVwu}_%u3Tc@+^11g`IV%Ubkr+xM?D` zy^9mbz2k}svTgRh;=>AO^JLu=htn@$=XH-7y_R1Y1JRJ(MA261 zWb;N6-q-W=9ctd1v?gEYfnx`bX*$#7HG!>0;rzCBc5z!84%eUD7E0+d;E+AOR7%w= ziJZ(faX8^Oze-@qpw`<}1d@wjD^yfffhF5>Y8rMYh{YP5)`JeKSlIMp5`Z^CjKFjnpd_(GuZ@t|q3g%S4vIBZybh7rdBZ|%;Wu=<3j1^}S zF`tC6E7bXMmjj zM1uVsN>S3_LWC1anll0HxWc^%*HVb1qbWp}l81;-C6AKf`4_=kdSl;|QBB=2S*a%MI3?S0;+C z$*TE(6|oBA3Z&s`;4o!%gN7~B(9`NrzxJzB0Gp;v`yPK(bY z+L--gLzeLq7EF44%KB@zUE7xY)r|Akv1!9*j>;H2d+eN%b4^(!`_wQ0HUF5Nz)0=uaKJ7T*&O#1OL+I1c0Z)KQqAPhg z1~52J`jMxV_Yi1l(3o5|i07CRBc0oyWbiCu0(CPJyq1gvuW5FI*E}ZyGX{5-2f9^4 z?aTxL5dtCvMDzye8cZih?*Pq@^aOUzOb{;+pSWvw0&Ws8?8V9a+Sv)o{LF+^|Efz( zsGS3UM#8Fnb!iC{^rHyq9^yNo08jikwTvOFz{JxoR{S@ng&v~uWThq$m!&o%!N&W@ zYQEM->M{~)HxL^#Tg}2Rm2UK8r71u&0kn<+ts|&MZ8d;qQlOa$(w!So0VOsLu@3Py zEZ`t`P87)C5WQ;9HPN!-P!_g^A{2!T7O8hY>!v{pmblpG7joJ`L8oM`d5^L2)ucl6 zo`x=$QiNG|GbUUcaL&!$toJnsfJGHQJAtB?0pFYi)F40`CX|wzfXh@87@&oKnFvTj zKq>+Np>|gWoo0$z;bIOwc72%6HA^N5S?h?9QBB0r=Rvj)awHw0H+70b$Nz)Z!w0Ez3txNRS}1 zqlP8b@WhIDk=px42<8VO0i0-Oq|rFt$L-P+jF^KecDe{=Q3NnrAaz-ojTtS=u^I*+ zjF!Rl9=QcsMnHLWq+~I>COV;pxZl0f%5g3^0k~q z%^^|ii3+Dj!bwffFaaN0HSKgQ#TOPZmmyM*pq*6~4=`=5rIovX1mlc%XFV{2IFmLb z#c^s0h?}8-h7hcPaNNq>zo8T5CxwC$mgz3CsSwnWjUt>E| zGA#5pju>_#KW07!78l~|#)>4t^mtNlpmsUU3jBlO(Z)Xl>e-v|NYajYvU^dINq7Da zrg849MM=r6d|?vlbuvE$aP+C$>YkhI(t6FylLDKUBu(S*Ny2h^$a-T^DC4H2x)n(U zA*&t!1xa;}Cj}rc1gd9ri@jNoB(Xi|2aj2>Z()AQG(ImWWe&eM zslfeK+CInagtVNf!SG>^P_q-|u*$l3>zFdmY8rWc6&YsQy? zu4;GbCw_#ZL)Q?{_nv+nQVvOi<)(ZU1VyJL; zDuxKr34;o4Q$4ICYg@!QCkvPA(1qYPMp)d$`@;C1fAn+#E;>8;9RE5A+$nNl*t}rK zDh$-FR7upSt9?9)!8F*NwF-HSp)Yk%s`ca;7_|b|Qma-piHk)Nch*w?A5CA%;2eYo zppqnXgn`AB<{WTret}G8e01owxMC+Z6*x_y&d?#rSny)i$J7@(5;`1hOcqN3EL{RH z_gpe-Lch-wO10Q{mFNi;6jJ-&bPK z9c&0}fZa1CEDHn4J;nD4-_k=H)dw~--FeITKj7T?hW}KZt2zV&z=8P?ePz1hY|L@W zdgqRJ>gUE`i7Cb1=oX-&PylD6G4eWG)icH-Q7TsrsMi7w5y zTVlHd!LRBI*^jaM8Rzg?9wYPFBkU33f^aHXDn2fJ<4t*jRGXh9#}d4yq&iQ7{Ur2C zkFGu^=-X?@+(wfkTVoxxCh0OSXFNm10w`h{p;K4)6qad92##CEHp5g?R-aDSh`sZw zb2OMCpW9AvH~bz(Y^;sZw)SL=HH=rUlSzVJs5ZQ}D#Il6W3f?OQjd5>Hob~xa5q3C z2z$bnDPc_t8l~vLrZOynm2p1gEnTqLV8*jyvp4Ovl8hZ77r+P}W#bU+2 z!+f|Ly?_jAt;%T-FS7LJL@&QWIqE@fn!&X?>*#!qQtlmCiNO(X9;nr{+#NlJrGjE| zi^Ko)JPFRXT5;e=0aL$m04WDYo3WCv70i=h z53z#5ZCO1Ym@sfEk!Djj4PA3t4x=P9ZVzQ~(}8dRW8VBcse2CVloF=ckqZX|lNTxi zM5@vq3g*QV1ry4&JU2A33@0s=UYJV{TIwjPs3heF@! z6V)?|zP-L13th0Rmd4V<0EUUq|v!R4d5sP8GEjrJ1^Hn`jY zWkuRQ%n9E>J}AYl!u3ClYc$OZCyp!PBOo4m)3tW}=sZdd)-{i6mMMkPz&QDnjv9Ga_;GhE2i+L~Rl*z8@&uLsKwBk6t0ZuRG z#Zg9~wDx(N6sNZvUGJ|~*6rDRX`sjF9ZW06a}nj$4u zx{7i!R0n(0VKwZ*azVaoS99sLyGsyk>l z=?9Yop2H;eV0i)VG;x#SJAV|1n+475*H+L&ELs>&fFqX9+Hm0894q6J6b#>3;Fb*B z*tX47UT^fZ>rFscXhe_SlATdlE8rPGEKFm*@)!=nY@xSc`CobF_gjBeV#m)cVA zjE|hXR?wUVg}~B~P1THC!`?ieUb-^Op@6S>4ox3lAn^|IUl$^yLXA*byx~S4-EWF? zV3h&kywpg zyY=Xqda@Pj6FpuVWogR20GL85LnX#TI z(X)Og8jKOhtevWA+Z;7 zPw2n`MNZQG$;(HSUI;}ZLmd{nUsj7-NYo)d1W>v1Mvu1lbq$2tu+u?%EN1I19l`T& zmoQr)c4>A>B{5(W{Nc<2g8AO-Tc-ah6H;~|L+yOw#jHKL%b%lsmLtIK|6whFs0*X(fcs!LDEVC&v zB%E_(q>RNw%J_mv!x0ZI0|Cq@H&a-zE;vud4MnPua$v!CMdDc2f6 zl*S^Q(;l=N!uzo8w1 z`y|vz917A7iF`N`NxLgjAnh((Q4{ShozifF!kSLkE&dy09eLssdXWsBjjO{47l0^K zqISqMNh9GpF0f4JSalR&AF^!6xdt7&c^pkj^^POKI)$u}2x?OCC^yg3?$8d~H6?Dq*LqO=e5+Rc<={0HF9XL&^ z90<*er)ijqt?Mhc)7^amegHmiHVsN9@``4#s z>o!DvL*dgu@}~zpo_6_r|O^A&@ze z-q)3?rOVQ|#Lsd6tM_~E|Kk4V?$q2Y&rP#RI>2VCsWkKUneL z<_8x%T&Dcne!u_z;04xwk(Bj#Hmr~tsfPMbQNKpoK>c0rMwguI)UJEUB?q6CJ%3yw zfAs+e6CH&a58tCQ1dT=pMIat{eG*;+A7LoQ-{E_ASn<(7H^KK`!XN4-!-obb_QUx1gPOywYh5yF zUHha=*1fb+RuNA>C=LJ6Km(aeftzx2yrp_tU#y*BH+~YnE41qypQTf>^w@*0>pYFc zGI7nI-7jodB_F%W(DoOQ_<(N;Y^k6P%_XfO6M2{#wy&8snh_<5Dl>+pH7Wi}iE1 z;@v-x(aNbcqBZYdzv0(%a&OfqG+SForAFuowh-iasb;jF%sN^V<@ge;Y{4&vK&WM5 zW4Mq>AuT!x^H^&O{m@o7#kRRPi*C0iPTVtK+fWScPQWwx>W~a*0F)XQ`(m+2&%FNi zXXV97Zzjr1y0ja5V@%4LDegmmWWHft9tfSnUoocCCsm z#S85^LU;)TbFd;-%pOSYsL*;}Dutrzk}>!at?tYjPLpSQsmyo~OzyC*&J_&{kZtJvYUp1aT@DWakY_e?MhjEr(XaPK=qpBkCPAMn!>p= zV0j!5%VV-jXWb^Q@4sbX)yKzlNb#HgqrLDBPd;Sb7UdqS=;}XuHugwGjIbZYECWdJ z<$m-eh&Iwk*z_3bBS{zOA-{u6v%kaIx8jId@S%PIoM!`6Q`EnHig;B&Wm2w?yW$3NR2uyjZiAXU6skW9p#Rxb!pH|hWh+$AQ11jbXI@^g_ z3YBRlW%N-)VbpXuI8&2mAi5gnN3UYpp?azcubLVoIbO;@ohm67O?|`+Md2BpH37G& zC`Q05ZH34_Vk?|ZuNe~}=12pkf|r>i)v_t_ioHeq=)+{YccL7km+y15GqQchahs7ur;+DQyZva4kKF zJ>V*cOcCw0T+?`zW*KVna*h4@{3WPQ)Lu4N;Ye2HI4CTQk~1a)$%zK>348)D+A4#U zQ>+!9>tKXircqRaXiL$C8DeXq?fqY?aPuX+m88_h>`bM})XGvUBOMkYke+CxQ@rdv zIG=>6vZA>^rC0}he$-C5rbNA?QGq&1?TnF{09$GU)krs}Bnn}_t4F@fG)&R5!K92m zE$Aog@ERW;Ebv@7l8^tv8U^*W%bxBYo+hzp7KTEpNoN^1qM6(h?0FzmuHxpTup77XP2(9O85;-;9_F;x(9H zvyzbx0i+(c%@KcH9ZrqcV((c!+46GSmY3o-zaFQRx4eRkH^q%o?>2^+vekZ(h2GDAl)c~W*$M88R0k+tIX6_2fW1n#jF_pE3z z)$7E6g>hLhW)26*=9f@Yo4sc>E9dq|k1C%iLBbu|eNqAT7snA-iYM#MIO4p+zNLHE7W0kB5C0B~3%jhxFWqxHOEb z#U!%%l}M?v(E?H2=1odq-|DgTxGpr~r8qg`Ww=-1HpO9DEpF1vxiGuxS!?JJ|cgTKms{ii}9M_@dz zQ1lz;_9>1L?u{d^gH?lj0oxIQ;U`nDVF=423>0=M#Cqj-mAEw3@ z*Vx#D&lnI3=x#aU# zUCciE?b1*Hzly|TkKgAVQYZj3Z?t1krH}O_bUxGu0FBTL4gC}-&2x$eT8cctY*T5s zNm`7m@rqF$w`}Q??OGPx8E7ZBvUZb0WD&2l>pk953`5v?>1Fo}v6Y%u(`&it{r9Cb z2+P_PebP0^Nq|98N!y3}>Cj2};`j8TIwf=Pj#8GTzt%K>`&(>nu1_LeKxM^Z=lu^p zHvY-dhl?M1{K>KjafZp&`!;m$Jid}%8yzGspavMwT7~IQ6M}fCFG8yrYv~8Q=J(?2 z>f`PW2=LU_$L(0c?3$IU+*hQo`9%O~-;0}qd)Jk9cif|b%aCAL9Dvd5%@H3dmp{|C zLs`C*nz(nz)8!6527$+}*T^`HY{zy@ZH07ivjVf`)Ml))gI|I(Wx;?CmWdVUnT)#v zr(f7$G848N!*)a1t`FlJcZG@Giy{yh+#0YE!){cbyzKA_)7y_fl(u~A;xcz5nLN)hGnTT-^^v0l9MI~CKQp^IBHi%3Vmpv3bn&nXB zFZpruWeCg=T;2~~p72MRub~O0(Y`E5jYmw7(7u%hU#`(t%HyX$#H;B~*EB0vh|`;b zV72KuBeeR=ugCqB2#4vl=vJD*KEur5#bJ%V5uQZKDaDQfFT%Fb*f zopB$M293Boq;R*9;bvd+9RBsVVr{tfJqTBH`N&8g_GT__jS|*v`)5 zHHm)N`O2$kwVTW6`W0Sr^vkYQf09OBk5h+CUPCgybzU&y{s8=ZW5npzFyqI8P=HYF z0b1=ISo)M-M8XVS{5O_tK#T~4wpLiEz=%8GqpN-qr4x4~A^d_voY|{D05&`7QzP!9 zYaZ%qA25cdi+fOq%(K)@6qHd7=6T7mPOrw;e{Os7Axm}JhOZ#_s`j7%f7<)@uqey5 z-)9aC!vKPUilR6InnjYSsih?dGe~lhlUfQP2cE*FB~& zyup%aZ{y+=oGmV6uYU2HWRGb|KjqE?SORma(B3x9uT1TcOyM&f)lsrn%x!UkGOqgB z&pcm|-NF?QIER}i6Q!@rmEqV|IgaL$Nz3>eT_=u{rp4Qa-F`S$n~Hn&0?Fr0_AUB( zm5*FUdltwQqaz?ZDTi>?V!yC)TR7H?G-ffb!Ijcw z|HP?r=6akUCu{ckPLg(eFgD{Ois*5Q185TJmXY|lx_?UDt(A{R#mqg{b}#{t`v7La z6|t}K+6VdKxz}r>WCJzmXgb^Wj6b)4Z5{m`8esm`T89UuPE%?wU((0~GvKh+Pn-M~ zy`huiO6Qj2kZ^fIVDapV0=z2I6ucR+lC2qm0~{sSBu?u6T;u6K2iE)sMmAxf5(SSs zu;iL8YyKfc)+jO4B&keQP;xoBKnb}v3SVyZ*XWDB-6FZjOUN`HvmxblZ^f))Rb>Gj zM!bXoepa3zsT#3TphWJ-ut$mB($PY)O$Fah65=JZxq1ysC6@Zd{8WzbjgmQQVoyuy z58|Gd2GWBO2m?ZEqr~1P^)mx@-M}!b>ZX0C5ytwm)^#{&n_n_;_S~XH__$Cn6IN}c z@i8Xp&CPVpl7}Ie^HCCq!a`9&>QIOx1yquW2ENt|6k-@G8bamb&Pb_Zz*(woqJl9- zRFFFqW;Q6UdrB~M(dJ1L7*{+Ka4vJFCx$l`3~MfUS{9u{(-W|(o0NWs(j`xemXums zaceElQ-}I$QpY||6ncuE!-+yHcc}IST=1l%$J#wLRJdyuXP)hDM?>hSl~t%tZ(qS+ z6Lp$>jU%F;5tD^EBAqK*mK}iIch4gA=p#5pNp=dc>`N>kyOJZhFf;HFg{;rMBh*b; zxEs*|++? zQQ5bci68bh4GYDMGSsD6@WvaEs%UuwaB0NZ$Iu%^pR{LYr(T8Qg76Juo9xyd>Ma=M z?e7XRcORFntHZ4p^@hQ>e{Vdf>&8Rh{ciV}Yr>d*3Ya}@?$b8c*LI)zt!IpVvQou9 zLxXJDdj+Sx;+y-Oz=FRiq6_0|dyy~%aO#Om{kh-2){1(<$@BNI`rq}P3SbRq>5LG{`tKB8R&2|#fK+$`o znZa5WUJ9IH&QFxWjc)^W0-!Z$j7<~gO_A=jW+p0B0XdY`m);N$Sc6h13ZJh~5LEaGHRSWnQcZsWUfLcCpoRd|h|k-Pb)? z>YglzLYV?L6g8f?tvaPTzQZGM(9aCV-WcvNbuq&*X^hI$B{z&Vb-5Y*I!|D${EAw^ z>k~;}qw07?y|tVaUc(X4*hSshjA?PiUyOTt+M3SwxH@o_q^`^h&#=`hs|U{MYmnnJ zGCb-UG)hl)K;vo>+92GKY+~S*xao?5J_wUyx_sATpq&Suh z#WQTRmu&CDV1_*m?20oOY0SP;X_@7Z+!T~My)Bc0>MW98;rw{>DC${;)O~@ZJ-pJb z^Du_g$E`agRk133u7H&%`I_T9@HTjayjZFlrCKa8N6O8~3RA0hiMOg=)v#rA$YDgdtljjR*V)mjUt6t5zCBWhEtEe5 z9h|Z^==zjn?gv!As#>b=r1fRkM9MH9TZXAA!~8o>=sbj>J0yVzRV}vM!Y0*~veuPW zo|LYLKjwOHyNAnoM65m~73FR`0yW+ogLkq5lSH`mjrs(A`?vK+B6&kCtCwN5G-rrP%zb8j$r!@y4=mnmg0BV{{U410L2x72Q~eW|wcsuD3yU9jc~_A*s=g{{69k=BTj7X6jRp}NsM za9v7+Ysd*o>A_!17!KhOQ2%zSEzA6b!E~i3Bm%w-mRI38!(wIYc7}s7gRV{aq3H_! z@j<}>2su|H#`M)vL28zUoG|ysmnu~LYiA0byRG;@#r4P~^X;ghMx$JH!tgX)_Vkl0Sh38Tkz4MwHx@XVi!FA55J>wc}g z;#%q^YgjwSwd17VC2OdfU>=|9s95ODi)f|m{M7a zg+I3s%8f1^`y>W0X`SgP6)e3AvZpzsvc9ZrGA<-#tA{t8X>4sg(R93eU-g;lW7X|Q z-O8)-`ifE|ngBP{{jlL7hePW2SebB?6zj@d&3UfjLrQE|r;MT&j~@5y8)8fo-a(M)?Oy!(j9rDsenZ z6Eh)Zvc}^P74^NcvN?#D>*_~?Z#AB25*m-I8mimPzcyWMYDUysP&OS%6{+fD(t8jr z3LHvSJ*0&gSD&5Uf`^zELwBFHB026Krb<>deHU^F2iffv4(+kJ3NPWX?{)PXPHd<{ zH4mwy4XJn5uU6IWa5-|x@C0u9bu~nO>RoZESGKvf!CDp;(Y2ct9dGUkV&27Xo7sa}d@q;Y*`;0x2*hG7@`psmH3*Q)n7&i+ zaMW!$aR;IZvD>xzFZ4wOL6+-XqEw$uQk1I)T$cS3X?Alu4N@6Nf1v~l6?PAh6 zwi1Wa`BmWFs<6_**!aXXhr2J3x-XC$HMi0p!=;{9!y}@B=}ra=)RxX%pePB@jYQKl zbAi0XSLcn=hg+;lR62#(cjj<>vERM`ZP|0a=pOX6zuT2Ae6&L%NO#b5xbBUNj0;b5fFyabz`!d5?6(T(S#nf0rclVep|)^rLoRI0Uc-H@tPak$18 zRRAA`KODx&(#*VRj3I&3I!ThW0H3gz$t@n%^v89x$(hpe)sd>n+S?ClRMpzsSkev> zeD_$b)$nyMR{LT0bgynGJfJXiHk^94dA1T-bQ)5S3?@gZupI?1`^!XWb zN!76;ILA;c>JBcf)cR`0BV`%k>)quIwCsb4{mZ$W2Qmt5h^I zzjXJ*E8OF8A2v@T)b9)E;5j6`Uez((8^2(FIk+2Pw^lhE7y_4qcPTc&|vDI&vmqjIJpAz6T>@mSf4^?j#Sp> za~lERMimZb5ZSZq41qlr*%K8)4yBr}Vf$}qjzV_J=Qvtghtu*t1=7V_Q{^$}k^{ly zmuOs6BOe?F$TWg!KK622I$!EqpM(35l(<7qyamfTJ)|yyG8XkSN`(rFg;z6%*^lB9T&dG5E1QrYKPgVn0dWK7IG{cN6&P243)4U|6Uu{ zL+76Jig|XhIYo|RE=HtXACY=vL~+NN>uH@Aa01BYE!ahj7@IYGJ23?B=B=IC3fTdm zkhC`cxauH6sSU7s zb!9|a+lbWbBZ_Zuum0EmT=9=<^VeSYPrXrcjkM>UO*=kOa zZZobh3l%P6Ig)q3>!g~22hnhtk% zZ0YQvvqu_FVTsawt(v;HjUA_Mq89k1b@;^H@+rPOB(Q~wIp>3*C94=cyq7C?HWc^Xn}qcN3Ybb zq$rS|=2&S{x85}Zt!#5sOXcle{ph6m=I_uhUGHi-)!7j@v#ofDR@T;Z3J0Fm3s<_R z!zB#Y&TP|5wk~>{=dtV>V%&_3KGqX*Xp_B9gs)jh=rU>89EmJE0xcXqwGpLNpA_^tNnz;jZwnG@ujz$a(cw>gU?}||H>;flNAt(7iY%EOFVU_XD*hOD0D3| z<+`8H1ovy?-L2*IXrw$1k@0rhD{sn5l~|zdu(e7U+-rMZsWpxNiGBHvE9!TTsjQa| zP=juTR=;%JOF0aEaz4i-j#RFCW7P5y;mWJtYnt!?|JpZ_I&>lrg`7ZV;!Oz4{@nq? zR3!Nck6lbdW2U)ICLRJSU72N3_KXWP6{G-oqRBCUfJ=dTbp$g0fLpHWOm{ zp;%REbos+*^rx23!eDo%Mq!+=Qx+KdGc!DbPV!8R+~{YHl+M&hjo#SVX_#l0&vc>v zB4L7W2?h)}xnLKQ2uea7$dR>(In6ZTD&0{bqcITjhdf>^_g^9}al?4`tjVxXI7F|n zgzw1&shTeK82%xAO0V~Y&*8MKFDdpT2g7|D-59Vxg*#vGoFJ!=Am6zoL4?zPVp-0I zMlw$(rLf_ALzh3;rx>)*$~Yv5S&L(#u+t15m?|JmiZQ>|20@1N;n0EoF640K0dH-& zhrQ3x^s8{K>Ebu2qBe0)!=p55Rh%3%@aWxeVFUq$4@B@$pA=QS2_D$mcb`sb^L#qt z@DCwaoRd1MlSwWr>?WJeqD$d0FYi2Ub3m&g5yBnor^3aXkJTa56fh4tRh7o7;-po@ z@~Sd)l2q8AiNijqQuC4%pxExwk)xRC!M4h<(6;Wf8NDJ!Ss9;`s@4pfq)}Nm-@=te z7)4|9Cqycwr$?_^0sX> zyS1h>#5zl29PDtAdRso7!VokoVsB0CfcbPrz1hrO76&U^QBSGepk6l>Qhv+{&D-(c z=O6LkJ#=)JEI5#UGzG{$J;yv7878WsUZ9-UFca6F(ClOvF)kXisV6)t?JTc$kBGsO=lUYN^zD;f?Dh3&gw+oo;4Zj-UJUX11a>#exn?sT~;Bz)G(W40eOx(z+$!^!WTT^Z_}U)BW;k)FCOE_ z|NZy6+m-naB(xUm%lMqMrOrZuPj9cHwzpJSX+4dmrf--Sg&7yy_$;cF`a+HoK_x7B z^iYD>WG@Y%(H0?HbfvE(9CSjU%>f+Ke7TrM0g78jn83-txjl zVIqy3_!oS&3nzG1=f8)`qxp^Madn)jvRi=xhJ*rKq$xVO)?w`IK%*ETJ% z3~s|GF}QiC$8z`@C6}MrO%b~jot9kg3XTOMCyP0gy58V{)P4IJHf>=Mu-EeHA1tEq z)|F}dd|Q3NszDkou)KYho|D=wi!Yi3u-Fl$lv+w}A@A<>+ZF1UV9|9^g+L9`T(d^< zey1%wJD8x@fr-T(@(m5x$%X`|&R5M(s9cR&g2_TDPGa)A(7KyJAq*cAyn3NQqZrFt zKg4{$imf-^;G(0~a@U15y_I?JwBcs3>soD3by}~fTW**sP3tk8bzPg*(t>)f*GEcRvfN)58fY1Xw%RNRyE^@tu)z_xT_i9Bx`rq7_x zdgu;jJ~g-0)iUFP`PUtio$UES)qKmS?nS09iE+?;OZ0hbtdi>0j4O-Q=BX&o^=8a4 zsx0@Ne<4zZp1dFobpOHgLf}A^!{-F=fhzLzmV@U_t1&_tVb<_LgC`9dJRo1V4?E=; zLrN^OafC}4PIbZgkLQI8yTX_-$l;DKYS(?t!BI@Djnq!2UnLjJze6@BP( z`Eyyg1N2lEuKt|T-Vmvf?-WAJy_ke}M}nXsU{9YD5JJnD>3 zJtbO?;6krnB)i?RrG=-Y435}MikV_D-5_f=W;+hD98~}Gs1HYZjUG1o^r$PN9vrP5 z{o9E1BU(p%H}W3;S^jbUoBX%>zv?jv6^LRTD;YM;JpL3Lvj`L0OCDeN*pDbVI92@8_rk@5`2oYm zym6FO4??d0HrsSA>G6pYGVFG)O(v&+avNd6?ch$^!S!QX4(TELvC}Tn?7N zF6jgR9y_fnppi{mr#Q?8dNR!#+Q{%7;12mte2_b;y5X>;*X?Kr=?jRhV# za!K|r-=>V2V_7|Y56Bxp%uBkBGqJ|HDvfFf_AW&#kDNYi`APMS_g$SAx2(s-2On5z zpR@TmSRB)RQFd_1F=V@C6O_@@9day{v^JTqLx0Wf&NH%8KDW}yKoO3=^*Qcy`)jy# zfvjHG%JqNnxrMm{9Quiag=NjuS;ox$VTS4iLEt$NAFtiJ=I1qCYyKr%UEw~L1{O^} zQ{#`LZmULB#Yn44xNZ!>+R!g*Wqyq@OHYI6xVc;zT2*oTy3_xL2;aU*p19q z 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 n-ZK24a|rqmDs9x1 literal 0 HcmV?d00001