From 48ca0d406d2be4e6915dda6f7c8851a0efcbf414 Mon Sep 17 00:00:00 2001
From: PEDRO MARTINS E SA <pmes18@urquell>
Date: Thu, 5 Dec 2019 12:12:05 -0300
Subject: [PATCH] def final

---
 bin/meu_malloc.o    | Bin 0 -> 5424 bytes
 lib/libmeu_malloc.a | Bin 0 -> 5672 bytes
 pseudoc.c           |  19 +++++++++++--------
 src/meu_malloc.s    |  29 ++++++++++++++++++++++++-----
 src/teste.c         |   7 +++++--
 teste               | Bin 0 -> 12872 bytes
 6 files changed, 40 insertions(+), 15 deletions(-)
 create mode 100644 bin/meu_malloc.o
 create mode 100644 lib/libmeu_malloc.a
 create mode 100755 teste

diff --git a/bin/meu_malloc.o b/bin/meu_malloc.o
new file mode 100644
index 0000000000000000000000000000000000000000..ce939d96bafc7a2eb880f48333d4c1b07336ca72
GIT binary patch
literal 5424
zcmbW5Uu;`f8Nk0=x1ATZ<aS#nM3HdlA8mu#PP<M;#UWmr_FDHQshVb5vj*?Rxk+5?
z*x0^>0o^KYL9!yyp7y}T+a88MY|_LF1*u~#7D$K(URog}CIobHfuad1s72xX&iy|7
z=Gc}Hr}FvpJKx`P?!D)vuS_{7cNhjpF<>0JBcTB4J>C9<>P~<OBQS3@|7^8dL~c{X
zeXDitAsmhDvYI;&D!$9yiL)|lwz?7<EYVVqbFCXBnG61AI?c8C;`_>j$ON0vIAle&
zTcLL7yW4LAYc@Bn;F@U}>}2EfVK@>WO9gl0x#s;`a3B2LR&X8NS`nB2t}wTaPln3P
z#Z7BtadW!)r(E#9X&n#oD;KTcxZ&rW&%F?T`9LnXZaPmC;?BmG;<@0CnG0^1j?uPS
zF$&db7UJzA78{&y{xy46xyYXH2z)(mHE%h_2UhT&X*C~Gp4-sgV+E6O)7hAdJI3!m
zypFc4=1rBN3R|rfx^p%jQyNZl9%G%tAIDAs$DT*qi+3gPOHZl5_gcX*!ygGvpN?C>
zMBHrS2HtE#n1o88{VQA_Qx^B0)tbCZ&x?w_vzVs1b2@JCf&a+12Sr&?VQh3m8Trm@
zlu>JH6B~5vZQ`Dom$qr*${Ow4@}O<h<KgDe+8>H)I>!s~ewyw7O)8r7hv&DpwtAzd
z7^7t-JDZq#J~wxEDls*8Iy*U=$U3u=*%Py)L$Dv7f+rz2lbg(CXHLu}I&)`ma%$%6
zne2&dA~*9~*2$g7A{v5&%P^bkUxtQ;U<*C(fG4mvjC;cmW366e+zca`s@DntWzWx-
z-BPJiNY=xb`oSF%ZY*Jpj{6I~pAJ^9WU%&q+ZjDDIv&_59A3RTMuUtU1b!NO87E_>
z?9u%=yKu#JGSfi{$0?gi#<$Z!CUq|5I~i0+r_b4$7c!2m)B@WHY@5X$dm)_}v+eOQ
znjFsr3!w~J_0QR(pGMi$z)^!S-(Ij&JV=jqI;ec!U$94a7?|*rY6&Q%c)xF!<f>ZZ
zvatuu-Fu8jjM(tL;e*4E?jrtK{Dq4WS7K8Ar?XN*!d5M9YTL@D)+%K$wNxmis%5V}
zb}TjbY(xM~&CDmVbBV*rBkAp?dPcFnUtWM1{_9s_fFDY&gzL~N|1l*OgY8)Y>}76h
zc0R$J)+bs%r3NubMj`eOFxPXW=aVuxtlDlB>c=40MXGm1)iF4)@p0x~)c7QGSK}wu
z_@7&JmPE@ebNzXlXC9TM{-Oc~d{3KLW`0ZKKJz;o|2FfO=J<8yfyUovUeow5nP)T}
z#$iBJ<Hyw4fK%G@{13MCGflqD{3DHrR|Eq-(D+`q{}+uv&io6S-=~?kHGYb@tMN(Z
zFKK+9`A;;y%KUYW7nr}R@h>y~y~e-E{5_4o%>0(dY1v}%fLcAhiot_AQsWq?Pf*WX
z4CwCETVi-9=;gZ@kJ;zD@qOk?n!=BnzoGG~%zvTrf8m(yzl!tGa)agnt?}P5AJNw5
zmf}$h+^-hvmHe9LR-xfFxL0q~#sI6sR2`w}X{wG=^$b+~lACvm>uWBol-yOQ6oHS~
zGvMT&J2M5dlk=zX)P<E|IbU2+P1Rd<mq|xJaV78K$>`?GUKzf!RxEk>Ql(OjK++B;
zx`Ls_9_*Fs9vbc{A7<Y=VSBZjUv|T+JE{@JUff<(cB`0mCoqaw4Oc3)e8FAv3T|nw
z0%B8n>&%ym7i*rxwSB5m@T=}}1&Zs%Leb6Ax-3^}D7)^KieKx3a3Q>U)h$%$dNHkT
z7t}jh^E@b)tF>a;o2DSKx87Lkyb*N%&?6z|fIQ*Ej^gh=Ua+Wy=Lmqv<CH3*CtS|4
z@H^ite}VNxo`-Nn<6`Gkjf?ybH7@e+4&Z;#xY)VP9m<!^KFRkkb3M)n_`MP?ezOC(
z&7ADh87%fM43K|A;~WP3XaK*aafwH6l(M(tcOL;P5`Q=X*spQ1lh(M&3P+h!6Mar>
zO<wF=(74=RDg*3%Lz9>L#kU5?zp2T~J?IAm<bSQn)80_|?Ev||Yw~gr`e=asGod+k
z0`L|ovYR=b7<5gRBJUmX&j`d;)|+fZ?R=bNgv-4+!JO>K8WWQDSNNkW_c*u0<$aFE
z8Qv8`!9nprvi?%J;Vxm@sD<sC^lDzoO*Xu*HXym|He5(9)$5Q{blF?-SM#Ofy0;A!
z*H<bitR~&1rJ8qf+q7GA*H=BX5lWyR&f@=X5~xaRDS3;f3GT@H3Xkpuv3>a4iN6W_
zMazr4u`lw~|6!aYU3o8L9}h9t|3b(xxD++YvQb2PO*VD?pXz{>^!Vv{)ftJ3zJ5Q}
zWyesqU;fud$O?euN%_<5O3(ikGTkO3_&FKHBJXoJ>Xm&KC;Iun$^PGBMe<L#LEZlx
zvVQ*C?Ef*=mqwRe8K5s$N%_8rzPv{=cCphh{>v;V`V>FCt9tzO_YK7)a@bWR%~#p*
z?=+#^TqO@``BT;v!d{j2O>T#g(O&5O=_cLpQM*jRV)>&u3Wq&wP5+JAPyZdx|1#@I
IqnU&M0_~RKJpcdz

literal 0
HcmV?d00001

diff --git a/lib/libmeu_malloc.a b/lib/libmeu_malloc.a
new file mode 100644
index 0000000000000000000000000000000000000000..a69e3386e51bac527bc95fa6fb801c186eaaf3d8
GIT binary patch
literal 5672
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

literal 0
HcmV?d00001

diff --git a/pseudoc.c b/pseudoc.c
index 3947440..96faee4 100644
--- a/pseudoc.c
+++ b/pseudoc.c
@@ -7,6 +7,7 @@ short int livre = 1
 short int ocupado = 0
 void* piso_heap = 0
 void* teto_heap = 0;
+//variavel local
 int alocador = 1040
 void* endr;
 
@@ -15,11 +16,11 @@ void iniciaAlocador()
 {	
 	endr = sbrk(0)		//endr na posicao corrente da heap
 	piso_heap = endr;	
-	endr += alocador;	//soma 1024 a posicao de endr
+	endr += alocador;	//soma 1040 a posicao de endr
 	teto_heap = endr;	
 	brk(endr);			//aloca endr.
 	endr = piso_heap;
-	(endr) = 1;
+	*endr = 1;
 	8(endr) = alocador - 16;
 	
 	return;
@@ -42,13 +43,13 @@ void finalizaAlocador()
 
 void aloca_espaco(void tam_alloc)
 {
-	teto_heap += tam_alloc;
+	teto_heap += tam_alloc+16;
 	brk(teto_heap);
 	
 	return;
 }
 
-void* alocaMem(int tam_alloc)
+void* meuMalloc(int tam_alloc)
 {
 	
 	//se a heap n esta inicializada
@@ -62,12 +63,14 @@ void* alocaMem(int tam_alloc)
 		//endereco livre		
 		if((*endr == LIVRE))
 		{
+			//verifica se tem espaco
 			if (8(endr) >= tam_alloc)
 			{			
 				//8(endr) = valor contido dentro desse espaço de memoria				
 				8(endr) -= tam_alloc + 16;
-				endr += 8(endr) + 16;
-				(endr) = 0;
+				tam_atual = 8(endr)
+				endr += 16 + tam_atual;
+				(endr) = OCUPADO;
 				8(endr) = tam_alloc;		
 			}
 			else
@@ -88,7 +91,7 @@ void* alocaMem(int tam_alloc)
 
 void arruma_heap()
 {
-	void *endr_ant, endr; 
+	void *endr_ant, *endr; 
 
 	endr_ant = piso_heap;
 	endr = piso_heap + 8(endr_ant) + 16;
@@ -105,7 +108,7 @@ void arruma_heap()
 	return;
 }
 
-void liberaMem(*void bloco)
+void meuFree(*void bloco)
 {
 	//bloco livre	
 	-16(bloco) = livre;
diff --git a/src/meu_malloc.s b/src/meu_malloc.s
index 51b0ac8..5009c1a 100644
--- a/src/meu_malloc.s
+++ b/src/meu_malloc.s
@@ -7,7 +7,12 @@
 	str4: .string "*"
 	str5: .string "INICIANDO O ALOCADOR!\n"
 	str6: .string "ENTRADA INVALIDA!\n"
-	pula_Linha: .string "\n"#
+	pula_Linha: .string "\n"
+
+	####APAGAR ESSA PORRA#######
+	flag: .string  "%d"
+	oi: .string "OIIIIIIIIIIIIIIIIIIIIIII\n\n\n"
+
 
 .section .bss
 	.equ ALOCADOR, 1040
@@ -110,13 +115,17 @@ meuMalloc:
 
 	movq %rbx,-8(%rbp)
 	movq -8(%rbp), %rbx				# endr = -8(rbp)
+	
+	movq %r12, %r11
+	addq $16, %r11
+
 	while_loop_aloca_mem:
 	cmpq teto_heap, %rbx			#rbx = endr
 	jg fim_while_aloca_mem
 		cmpq $LIVRE, (%rbx)
 		jne fim_if_while_aloca_mem
-			cmpq %r12, 8(%rbx)
-			jl else_if_aloca_mem2
+			cmpq %r11, 8(%rbx)
+			jle else_if_aloca_mem2
 				addq $16, %r12		#8(endr) -= tam_alloc + 16
 				subq %r12, 8(%rbx)				
 				movq 8(%rbx), %r13
@@ -127,13 +136,18 @@ meuMalloc:
 				movq %r12, 8(%rbx)				
 			jmp fim_if_aloca_mem2
 			else_if_aloca_mem2:					
-				movq teto_heap,%rbx
+				movq teto_heap, %rbx
 				movq %r12, %r15
 				pushq %r12
 				call aloca_espaco
 				popq %r12
 				movq $OCUPADO,(%rbx)
-				movq %r15, 8(%rbx)										
+				movq %r15, 8(%rbx)
+				
+				movq %rbx, %rcx
+				addq %r12, %rcx
+				addq $16, %rcx
+				movq %rcx, teto_heap
 			jmp fim_if_aloca_mem2
 			fim_if_aloca_mem2:
 			jmp fim_while_aloca_mem	
@@ -214,6 +228,7 @@ imprimeMapa:
 	subq $16, %rsp		#coloca i na pilha
 
 	movq piso_heap, %rbx
+	movq teto_heap, %r11
 	cmpq $0, %rbx
 	jne fim_if_mapa	
 		movq $str1, %rdi
@@ -238,6 +253,10 @@ imprimeMapa:
 			jmp for_cabecalho
 		fim_for_cabecalho:
 			
+			movq $flag, %rdi
+			movq 8(%rbx), %rsi
+			call printf
+		
 		cmpq $LIVRE, (%rbx)
 		jne else_if_while
 			movq $0, -8(%rbp)		#i = 0
diff --git a/src/teste.c b/src/teste.c
index 9e0ce49..bc62845 100644
--- a/src/teste.c
+++ b/src/teste.c
@@ -5,10 +5,13 @@ int main () {
 
 	void *a,*b,*c,*d,*e;
 
-	a = meuMalloc(100);
+	//iniciaAlocador();
+	//imprimeMapa();
+
+	a = meuMalloc(1008);
 	imprimeMapa();
 	printf("\n");
-	b = meuMalloc(500);
+	b = meuMalloc(10);
 	imprimeMapa();
 	printf("\n");
 	c = meuMalloc(200);
diff --git a/teste b/teste
new file mode 100755
index 0000000000000000000000000000000000000000..1428d7393e9a7b05afc183155a2bf00d2c6fa685
GIT binary patch
literal 12872
zcmeHNeQ;Y<cE3-OZCQ?G#ZHJx0>~s`62Ow}gkT6xB!7e_tbA<Z&?FF^W$D=x(N`tC
zkgzP9BA{qY*ld^Grj(Y@X?OUCHgu;Yl<tyD0%nK(1KRG8?QUniEi7gOOIS)KB@p*_
z?z>l(pOqPAc4q(Ldi>5gzkANP=YG8V-nmcT90+f;DGHOt#?~_~IRYFquZ+FEN@_3`
zVBM@9*K1iDs|D=9ztjr|PSOj)wWLnr#xCr-Z6?rd3vfo#r6$ZIl@SuH5p^aB2+5>J
zU8X20V_puB9mVQ#a}jiyGm`$5h~ucB(vC#3^9nn!u#@yn5tyX1e>5iaKP3DO*#eMA
z4iI7e{5nHPm&(?63o+tj^;`rEa7NPGOqfY3?Y;)PI#Ks!h({=G6YX7YT+WI9Nh(C<
zPbNmzuJI>h?a4&i*x$atdu{vLHNJet*Twry{z>=t%{zEYG~aS)Ddq+ECyeTs{r0=v
zEeFCkzBKu2^L>vkd$hT9@E^!l{)7F}r2(4FRkR7KhIat>R?%nZUzEDDmSuB^bYYZf
z8bMmV5Xlv^R3wpRw}(T$eOi~V%XbrM$5NTJsMW}!jrUhUFQ^}Kyp6>P%&d(q7j2$v
z8s;3WF*!a2T&TcloMdVB40D#|n*7S57C&&R<25Vhd71jiiGpqVO|^L1d5TTnbS<Fi
z70YpLx+VaQ<T#nVKRG=;-T7gt^wvFU>A%(DJLk3zg(gmH#fnoWPEI<BOuXlS&BE6j
zyzGCQuIXp&lT)L<rfVMN&62+z$B!W*wTE9z?-mvvrz#4eanCCRPET^XJ*P%F{Sje1
z)Ia&HFi=lkva6+Y>dC1Ms`8rp)}_M2vWJEl4@}x0>^YBEn6YSwT6%ZtLG<9Yns<OG
zdrpb?D5{wlNo~*B5)llM_mvo;n|c-_r<MjLc}r818249RC%k0hQzrg8;Wq-B`ePG6
zXX3{QKTP;86Te{MM}Vv215;{gVrn0F6McxZyU6<urnc~Yuc>{GwAHdUZ5Qw{NoZFY
zU2me?^U^Z9(nK$iZfzND26y<!r+9}aCPpyYQ_f4%)0j%cfEhh852UF^Ejd<n(9G3%
z9DpHplT@0R(HIvR6MUhCCSE1YQ1L@gxD<EpF<X#2#S5%(-7M<~)1%p_>52HWm`NU6
z>4I83;ZYUQ@c3<J05U$Ig;gCYeI6=)&Wu`G(0fj)6-^p7Qwy*H)bXWeUrKu}sN;Js
zY%2XvsCdewu3O4|esiB%T&EaX_?Ekz4=xWCPkX|vqR#O6UT3KIfhSaa)e~0EsuTP!
z3zwqKv#ZG=4acU^d%>ZpO=u!`cUj@<PPO#2u<|Rlc+#Vm=5fWd?CgBC*yr?w$G1Df
z%D=yV8eLUOXLuKR*kS=fVF8adT-t$H2k<Xqr-1D{;d{?H8TdEadEg7xVz**6nXb1w
z)ndTuIg1HAbC#K%;2k*oV~meS4(>&DqK|LcQ$<8y9!!sHE-ZSe7B4cR8H*!83+0y=
zF__#74`X~Ll%_-9qaIBRT%bt|kLwpOC!TMR<=tfYcd*3BDrcvFJV7gIJnx+P7Wap-
zzpm0Uye{hGmiLh5-m>M{>RQ93H87)9+3EN1rs<!Uc${?FcxyBUGq?ZY;2#C=43*vv
z?g$Qr53RVm#*5A8P&?7>!O|C@()sWz+8CVb$uI0vFMbAZk9=70cK%%MapBTu;nMm3
z(nrDR1;0>>rxf*;|1y3<OYyEf!MlTdg7*ZqQ-^07{NxmdiTv^1m-c8IQ<m7*bz|6Q
zkADD7JPG<V=n&{nKo5cz5&XY`K7bDW0`vpW<=8OjIY~vie;ZTwdz2;f>YRs_IuAWh
zmf}AE`x{6BrMj;9>>=HL=wf%^WjU_&?3?_*>1i(^ZqG({>m5xE_c;%;4U5-Zzk2z#
z1e4uP{J#R*j|m96J&)S@8f$GIAQJQaWk28}*kg36?{#~=W$SgfK4Bkldk;B!-76oj
zQQaMn)~fFAV%;WpAm{E5x;ujImA!5+^q}ACcJk-r37DUN9~mRL`>K330$+{5A8rID
z@xDjpn4s8#c#)Le9;m!-4{+MZugGgeo^qv-WnQ&J$TBZlEaX=AFz0B0p(5))y)>O6
z`G_q*q@3%uiuPy^rE=UBAi`Yy%Gd@$>HVKdt4Y{GK_w}_OXG<_Mea3HU+$qYms-TN
zFdm|Pi60cQjGOjSDk5zww~y_N_h(q>V_WC4Vyd%qLf$Fr1^fpiGLN-3c>YVqvpKlM
zJFqjfeQ3ZtuzhQ=Z;Lk=-qIKB-_qt{%UC<Ro`p7t`a;3Y{ad`{x^1W&*gUi?*dO$U
zHs2Wxhx&tnTx>;*Z3$H`E|-hl-q&}lcjb-|BV91OH~ZH3I@&u8E_FWG+3o9C<Lg{y
z;^pq#2+o{ibEYVtp~9bKoSS_y_3ywkG4;>X1h~Q%a-qytXB(mE;FwdPSEP9(nA!Wl
zRBOoAjSAZty4sy}lhCv)&H*B}x@U+u>fYsG?d=?_@j=t!s6qY-gPKcZ?Lr{-#}mX-
z$LxoQt#Q^mp8&NhwVPpCN4)bkaAzE!E{0b9CIF7}Be=5qKLhT#_!z0w-%I%C#Cz&{
zpy>F5_}2RSN#_#r-g>&V9Mi<Fbp4KSrjXF#qW2ev!i8>rA3AJY2)K5WD+d=;*OesH
zaAB*fjcjVUu+tSG!KrM6!mx`H7l%vP2@-b|NSLRLKq2e$li=Y(!9^R8qgly<?03~s
zI9DheAsloKlG-ALqI$@crJ7dd9$-b+1+rPHq#-=!qBkeU3gzn{hh0A;wRYuE2uEC}
zN$_#usOt?9{9Jg>^=~9}aN(HiXC!nf?XWrSx|teX&0{;^qWsZulS09tW)0t=s;8VE
zLa)_vlsZ}eA}KseEURBj{NGS_o%Nl>e}4q9ht)dUfYmymf;5jNlEQAJHA5)PCPyEZ
zXbW>MgL%_-^07f7ys3zbBVh6^ga<ia>-;X9)IE<{&njGM{*;>cJV5MYoc%TGYf7AL
zrS=w&;5zRIQ1}S{^I6?HAf7lbwMz(T{zrIM9M;9IJlzsuN(~LG?b};hM#}uomS~wD
zZi$uoIKxgsOPWT@sr&|4dFTDq8GyvtU!ys?v0eaG4l47N74DV>yL*XyzS3Oh!9H!f
zg4x}-Hmqw1wct)z&KerlqaK|XtP@>p0*cs)kXGGwjEJ*EvAY`@$X0<^-&l6k4Q-bY
zYeFp~Hppf$Fp3gtA&bT~`0=CC-2&6w@DOZTWBP#6hARp12mtMx!2C9JrrD=#xYCT8
zx)EsoUN3Z8pzAbyVxwtL<}*(%>JjA<H@Zy+pfpo9_AgYcTy!_$%1?1=I(+_oF3S8y
zK1Zi?{;_D(kK;LQ?HX}bH<mX1H~SOmXwr!3rk)Vy>Ww4{`B^HA74&>T_hB9x%NJrX
zebg7Hov3gitLMRDLqw~IjLAZSv)Ci^2lASp%Ow-}f?0==w#k*V@R7HlG5=mZ`u5S6
zpE3VzcJynS_jJ|ed&*L}ffKo8GJ_L43X2@e<zx3MZR?HQhS5<Rd$<Qz!x#*=EpJ<2
z9P~qc`Q=U$dIpO{qXS$|xM$Em*tQI{yB{75_iQTqA^QiZ^caI3#UB4IzY*?%K}W}~
z!JfN%!h_tbI2bMt4hr?~;O>r|&cVU;om9ELr?}hHfmdVKVB59O9V>>p&}j_r9`p;L
zqqEGw_-<qOV4Dr+hl&>3qKz1%nx2j^Et8CCnbFa_Uf@HT#+Wiv$Vc|+Tq7UP<O*JT
zXyg<3>so==-j_=hbS+ze?r1VHmggY(9Es$0hT+TY)pI7A(<3qN$RE$7bpHs}Pd26J
zJG=ecd;K$GO=q{>zRphbiR*1o6^yjrGo~Y;L=<8q7mfFr=fd9hF>m{5I@6v_=wNV$
z8r|ET&1DLDw2;ZQ=L@+^dW=?+?28!=(=erbSrV1JJ6hDpY0*s5NTqrBU0NqjT**k|
z^2ShjK+7f#bR(O=C6E4<E0~eaC&tox%o~kI%n=jziL}P}J>!>4TjN70t<9k`$H_<=
zc|F#}z4CFQ5j6+A?4L%S9}sJ4eLqHD%SK|ICV?SIt4*@TBsZBooMlfFYPQSgoF;tj
z8k$Pth@ulXg60bYgK1>Vd8FG7D4$`pmCE1-CmkND*@JzB$VgI`E2zA1cxA;c3MYxA
zp3cy$WDGP2FJinPn&VBggILV5n^_pR32A8rw|l#MtL2L^-IbRqxXD?!Eik9nj%{VA
zDsE?ms<@+^H&i;aBa1j*Rlk<WykfR~9jo>}ZpS;}usu+z%6U89`VUscUFE!?(#Xyl
z%K6i5d>)&u>Zg$&=as6Qw=;J+@2ae{vnDoNUrpar{+={je?B`}Rlm9Xoou##3zPZV
zY<vN}lMPowoVOzjlixWiEA8wGJQu6!FJj)Rcq@CpDlW6mO7D0FU^3gZ;xa3>;xZex
z;#bWEgk)z|&%x>G<6s}tGiz3%*H#;AWC6=O;{Al<Sqt7KaG8foXE%dUkX_1gp!TS2
z#J|Gk&Pxh7wJY;_(xq|${|df{$vmBdxE#TMwfK)-27ewnV~ZGlOQ<X_a$ympWAw^$
zQs4m#{+ht)G`X_8A#ge?t}Jf~eAt5jRN(aCqq6*`zz<mPUkaQ~kShzlfl|NdEW5IN
z#Dzud+ZOzH9RGNlzL8XxivpMPB<svi?sL~kJy&dGx!QnK<<uka7c6+2z)xH7E`k5t
zf>UCN_f>XRU4Z+Qm%9XhhXv0Ge4zz@MBu6ge@Ecgh_`m>|1Smpq(%SF1^$Kwe_r4(
zS@4qr|B(g%4}mYTv^y#AQx^Oaf!|`mKN9%YEVzO<TpG7S7Q98^c?;eo@No-%mB4>s
z!F>Y%3k!a|z+bT76lS&i^j7FANYtKo1t{QIrJ6o{dZaJo*8O}J_cM1t9})W2eZ%1R
z+~><<+|S&7p0c@Sj3<3<rozoZn~^?vao<_@|7X!*5A@@fdH;JDdY~`&L+%Whf8uy!
zIg6C|bG+TT&&|^ums&IQjPO&i+(++TM&E(>DbDvSae6pDw_jKB{?4=~xf_Acw=H5T
zE&I$ZgjYP@9l}86{u|j_mUg!Sr*Wpw`BZd%#d(X+f6CG?`T*_0^MyXoSC)IpkFAk)
zi02g4c)3FOm+vPx2>c=Lf95$QVD^O2mwBH&hx-oKZ)CSx;`v+PG!E8yc5^>f-lL+q
zLcU;(jv_%tVxW&9+thPfA*Dr;M(9Wiv{*(POJ+tQNiBxtBd<k_{VbYEWs`bAkNIw1
zd&|w$mGDBGPH2%_E^+|bQ6YDLjpiaLU5gp1)B%`ONE$Q?vs7hfQSp|XVcA4Jqs8?|
z7CCi6aL9!^@y?y=qRVQ!tf9+Ibir>?jATR$C(`i<qj!9kNicEVx{ZZHcWxVCTl#iv
z#qlc}O{BEMC?{EcEP}Kk9+5y|REyx<J)))b6uU2u_k1K;nQR3})@H?wqUmuCtS9q2
z9M2eciMFkX@R!ROsfgL@vS|e-TEQ@v)dZA^WYOz#U=%SIM>9wYBO`h=l8k4V^vPQ*
z*C!MEa=MIbc2y>7AS26Q0yl08ZW_=AHuq~tZ)Q&+((e9Un}eG|eY0!$uYmv|-_ZtC
z;X&=+#<bhRTY7_GZOg`u+XsfUp<pjkQz-J^5JmF_UrbEXW069HVYNgPkswV;ERz#I
zI0^(Re_v!ygPzYuq7*83GxJlV*}91oezKI(H_>=uxuXU1cS#Ut{YVLQwEiOLSklZA
zdG@GLf=fp#8*@6~nTTmk6TXR`v@k7}L|REP<6Hru6cSMl={+n)@_Er9&w_E=M3Ra7
zXZojUL!0`<I5S`VKnfWtXd!3Pxa5#W>$xoRrEyN+3-*TE3s~`{gd;59h>^h0&k`}_
zBPkxq$C)p7APs*eMPklt_TgM3kx9=IG}IyZ2pI@2n?xqd`{*lB+U}#<9d#K#MLs<)
zZt!>vwo)=J%sbt*kUShmQi&*9&A=BfKHh-o3?syR*mF|YM-Z$&VvNBqk{-hbCB#H}
zG$Z-Q$Vg7#CnfygPM17}O75(`AEk_l-YMk1F7xqj0a!C5(yc7ZAkeolX)p73dY(}6
z^6Sh+KDQ*&38vCs=J#}#PGz}C%2%s>KWfh7TbgYDh%LZ%j|f1<U&B!x`3fq@W-tx-
zm-h0!;J5&Wg<>rz^<CPx3j9t`Jd(=x@?4>nKot6jQdz9ycMmG*+n{V;o<Hmq_Od-0
zztod-FYM`Cqm+m30p1)v=c#!46-VEomGKLh-4BMwRN5aD_6LQ%JjRjj%Xnn}9~Sn#
z!r?Jte@xg*J+jB!;GFTJ4;>U2#YaVcUw&QK<9vTsvCe-9wUzdhqWwur|D_Z93PeTH
zC&5?R%l8>RD5%>eJ5EL@($16^dkRdYz5E_NRBvhsBGskavV0UA*~{Ok%JZ9HVQB5I
zlqG#m*vt8ozZaIjBfbswl||Y~?4Q9<`_f*X2OX7xQ)NYw^Dm(jVCXDE40rilLH@4T
zsxM_pe*)X43VWH4w31U4sb@+vvc%7zg4T{~-z(0c<nOlM6!FXTCGF%q{tC9FBJJgQ
z)j0|ZMe3Q--1dKsib{JX-=Bq{R~iZ`+n1Ei6)Npz{^J$)hc06;;ZMPkFB!kghn^Sq
z5|{eaR%Q7N0%0AMAb4pn-|J<yw3pNlM)FdJ=%i?WxDo^};4<2L8T-I|Q)R!U1J<^#
zzKs3x1*W}u-coLEPOS7hU#m~jeo6d*<U>oPMP%K=-a3BY7aP|P<&7mmkoJ|-qQW)f
zi%o;L%cNcqde+EwBllIhO)WzNgt0f5bAoedlgg`XSIRWZ78PD~aHXlyXECsd?Ee96
Ckznos

literal 0
HcmV?d00001

-- 
GitLab