From bcf0f38eca04c2c08f1675b852a47fd7d5ae532f Mon Sep 17 00:00:00 2001
From: Manax <paul.ripault.etu@univ-lille.fr>
Date: Mon, 8 Mar 2021 17:29:19 +0100
Subject: [PATCH] =?UTF-8?q?c'est=20presque=20=C3=A7a?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 webserver/Makefile     | 125 ++++++++++++++++++++---------------------
 webserver/client.c     |  21 +++++--
 webserver/client.o     | Bin 12288 -> 12936 bytes
 webserver/http_parse.o | Bin 7344 -> 7328 bytes
 webserver/main.o       | Bin 10832 -> 10816 bytes
 webserver/pawnee       | Bin 30880 -> 30928 bytes
 webserver/socket.o     | Bin 9976 -> 9960 bytes
 7 files changed, 75 insertions(+), 71 deletions(-)

diff --git a/webserver/Makefile b/webserver/Makefile
index f33aa73..abfe81b 100644
--- a/webserver/Makefile
+++ b/webserver/Makefile
@@ -1,65 +1,60 @@
-# Ces variables servent à préciser le compilateur que l'on veut utiliser
-# ainsi que les paramètres de compilation
-WRAPPER=$(if $(shell which clang), clang, gcc)
-CC=$(WRAPPER)
-LD=$(WRAPPER)
-CFLAGS=-Wall -W -Werror -g -I../../parselib
-LDFLAGS=-lpthread -lrt -L../../parselib -lhttp_parse
-
-# Le nom de l'exécutable à fabriquer
-EXE=pawnee
-
-# Les variables HEADERS, CFILES et OBJS vont contenir respectivement
-# la listes des fichiers .h, .c et le nom des fichiers .o à fabriquer
-# On utilise la directive particulière \$(wildcard ...) qui permet
-# de construire automatiquement une liste de fichiers
-HEADERS=$(wildcard *.h)
-CFILES=$(wildcard *.c)
-# Cette construction de variable veut dire: remplacer la chaine ".c" par
-# ".o" dans la variable CFILES
-# Ceci nous permet de construire la liste des fichiers .o à fabriquer
-OBJS=$(CFILES:.c=.o)
-
-# Même utilisation que précédemment. On précise les règles qui
-# ne fabrique pas de fichier du nom de leur cible
-.PHONY: all clean mrproper
-
-# La règle par défaut déclenche la fabrication de l'exécutable
-# par dépendance
-all: alldeps $(EXE)
-
-.PHONY: alldeps
-alldeps:
-	make -C ../../parselib
-
-# Cette règle permet de construire l'exécutable. Elle dépend des fichiers
-# .o et effectue l'édition de lien. Rien de nouveau ici
-$(EXE): $(OBJS)
-	$(LD) $^ $(LDFLAGS) -o $@ 
-
-# Cette règle permet de construire automatiquement les règles
-# de compilation pour chacun des fichiers .c
-# l'option -MM de gcc analyse un fichier .c et
-# affiche sur sa sortie standard une règle compatible
-# make pour le compiler.
-# Ceci permet d'ajouter automatiquement les fichiers .h aux dépendances
-# des fichiers .o à construire. Ainsi, en modifiant un fichier .h
-# tous les fichiers .c qui incluent ce fichier sont recompilés
-# Après votre première compilation, regardez le contenu du fichier
-# makefile.dep généré afin de comprendre exactement de quoi il retourne.
-makefile.dep: $(CFILES) $(HEADERS)
-	$(CC) $(CFLAGS) -MM $(CFILES) > $@
-
-# Cette règle efface le fichier de dépendances et les fichiers .o
-clean:
-	$(RM) $(OBJS) makefile.dep
-
-# Cette règle effectue la précédente et efface en plus l'exécutable
-mrproper: clean
-	$(RM) $(EXE)
-
-# On inclue le fichier de dépendance qui va contenir les règles
-# de construction des fichiers .o
-# S'il n'existe pas, make invoque automatiquement la règle
-# qui l'a pour cible
-include makefile.dep
+# Ces variables servent à préciser le compilateur que l'on veut utiliser
+# ainsi que les paramètres de compilation
+CC=gcc
+LD=gcc
+CFLAGS=-Wall -W -Werror -g
+LDFLAGS= -g -pthread
+
+# Le nom de l'exécutable à fabriquer
+EXE=pawnee
+
+# Les variables HEADERS, CFILES et OBJS vont contenir respectivement
+# la listes des fichiers .h, .c et le nom des fichiers .o à fabriquer
+# On utilise la directive particulière \$(wildcard ...) qui permet
+# de construire automatiquement une liste de fichiers
+HEADERS=$(wildcard *.h)
+CFILES=$(wildcard *.c)
+# Cette construction de variable veut dire : remplacer la chaine ".c" par
+# ".o" dans la variable CFILES
+# Ceci nous permet de construire la liste des fichiers .o à fabriquer
+OBJS=$(CFILES:.c=.o)
+
+# Même utilisation que précédemment. On précise les règles qui
+# ne fabrique pas de fichier du nom de leur cible
+.PHONY: all clean mrproper
+
+# La règle par défaut déclenche la fabrication de l'exécutable
+# par dépendance
+all: $(EXE)
+
+# Cette règle permet de construire l'exécutable. Elle dépend des fichiers
+# .o et effectue l'édition de lien. Rien de nouveau ici
+$(EXE): $(OBJS)
+	$(LD) $^ $(LDFLAGS) -o $@
+
+# Cette règle permet de construire automatiquement les règles
+# de compilation pour chacun des fichiers .c
+# l'option -MM de gcc analyse un fichier .c et
+# affiche sur sa sortie standard une règle compatible
+# make pour le compiler.
+# Ceci permet d'ajouter automatiquement les fichiers .h aux dépendances
+# des fichiers .o à construire. Ainsi, en modifiant un fichier .h
+# tous les fichiers .c qui incluent ce fichier sont recompilés
+# Après votre première compilation, regardez le contenu du fichier
+# makefile.dep généré afin de comprendre exactement de quoi il retourne.
+makefile.dep: $(CFILES) $(HEADERS)
+	$(CC) -MM $(CFILES) > $@
+
+# Cette règle efface le fichier de dépendances et les fichiers .o
+clean:
+	$(RM) $(OBJS) makefile.dep
+
+# Cette règle effectue la précédente et efface en plus l'exécutable
+mrproper: clean
+	$(RM) $(EXE)
+
+# On inclue le fichier de dépendance qui va contenir les règles
+# de construction des fichiers .o
+# S'il n'existe pas, make invoque automatiquement la règle
+# qui l'a pour cible
+include makefile.dep
diff --git a/webserver/client.c b/webserver/client.c
index 3003183..86a9585 100644
--- a/webserver/client.c
+++ b/webserver/client.c
@@ -11,7 +11,9 @@
 char* rewrite_target(char *target){
 	char* ret = strchr(target, '?');
 	char* rep ="";
-	strncpy(rep,target,atoi(ret)-1);
+    if (ret!= NULL){
+	    strncpy(rep,target,atoi(ret)-1);
+    }
 	return rep;
 }
 
@@ -49,12 +51,14 @@ void send_status(FILE *client, int code, const char *reason_phrase){
 }
 
 void send_response(FILE *client, int code, const char *reason_phrase, const char *message_body){
+    fprintf(client, "entree dans send_response\n");
 	send_status(client,code,reason_phrase);
 	//transmet la réponse complète (la suite)
 	fprintf(client,"Content-Lenght: %u\r\n",(unsigned int)strlen(message_body));
 	fprintf(client,"\r\n");
 	fprintf(client,"%s\r\n",message_body);
-	fflush(client);
+    fprintf(client, "sortie de send_response\n");
+    fflush(client);    
 }
 
 
@@ -70,9 +74,12 @@ int traitementClient(int socket_client){
 		perror("Error opening file");
 		exit(1);
 	}
+    
+    //fprintf(fd,"pas d'erreurs d'ouverture\n");
 	fgets_or_exit(str,8000,fd);
 	int parse_ret = parse_http_request(str,&request);
 	skip_headers(fd);
+    fprintf(fd, "avant if parse_ret\n");
 	if (parse_ret == -1) {
 		if (request.method == HTTP_UNSUPPORTED){
 			send_response(fd, 405, "Method Not Allowed", "Method Not Allowed");
@@ -81,14 +88,16 @@ int traitementClient(int socket_client){
 		}
 	}else if (strcmp(request.target, "/") == 0){
 		send_response(fd, 200, "OK", motd);
+        fprintf(fd, "fin du else-if\n");
 	}else{
 		send_response(fd, 404, "Not Found", "Not Found");
 	}
+    fflush(fd);
+    fprintf(fd, "après if parse_ret\n");
 	//partie 7
-	char* absolute_path = rewrite_target(request.target);
-	fprintf(fd,"test - - -  - - -  - - \n%s",absolute_path);
-
-
+    fprintf(fd, "avant rewrite\n");
+    char* absolute_path = rewrite_target(request.target);
+	fprintf(fd,"test - - -  - - - - - %s\n",absolute_path);
 	fclose(fd);
     return 0;
 }
diff --git a/webserver/client.o b/webserver/client.o
index d124f3cc86bedbf2cde2f5b4f691d68f3f19bcd1..066d5262986b302f03094657c64a67905db02f24 100644
GIT binary patch
delta 4371
zcmZoj=t!NQ!Q`PkQOlXFx%LM`iR#82dq#HGA0C|tcS%it%P2m14P!aq!Cevz3=I1i
z85kHmdTl3*Fs;<{=yv@8QY4Hd!N9=4@B&0M*S`5*8qnQ3;m-g6%|94RRVJTfl4pH6
zhk=1%@_Qx)#_Gue%(9Gjll7S8C13{eqZu^WgIV1HY{_x3nJ{%CXzEZT`OqXMXEMk7
zr{<LurKT#RB<2+>6sP8;#22L&7v$#^r*bhk=jWBA=9TFBq~@h(lvpXKmhy5j@NzMz
z7V~m36z3O}WTq;lq@wDY{E*pDII%1-uS6j;O`#yMs5mvgD7A!ZvLK6LL|SH^LQ1JZ
zYEE&gZe|)6gI|7$f?IxRUJ65ELDAtA#i&{sAjTA>mKSA~q;fHoq!yPb=z<}b&{Y6a
zs>NKB(^!<4ELb*ovCLzscVcx1g)$U#GeH=PbG%s@7(fxl!003eQo%Cu&yIRYkSwDM
z$1w&52BwJ_QpF`j42-VqAhpaBCpbc+-T2qDFfg!8Y}i>Zm6pQ5=+42+3{su|kq%%3
z8OJm+2Fzt<Oy-`vic`MclnrDy2wwpa3=9m6bGF0XU@8SMBLm_jQ#FVgDNwG3AJ{<=
zP;M}U8^9n9GK$dvZnP<g4>p>a4dy)q36Rm6OcSAI8>pa|ZD0m5ECOnn>f}N$StV6T
zkS6AdE1-T>hlarhM+O;?9gGT-H*hJ&D@Z~#XE2C^MMc>`AqQfDuq%iFyXF$yHKH;g
z6-*PMUJ=!RI3`3E6q2GQAX}LxdPo(emM}1iO*Y_`WsKYG$F0c3WWh4IkXMYcXmbZ|
z86)3XR>@LUrCqFSHmsZ+QIom(%j;P=(pi}}cC%V=_^>kV;+V*>o0XMgEyr$F#@(zM
z4y+s;BCPBiSXnqqS(!_BvobAW72+smW#U-N%DS6lH!EK{D_a^XOC&2ZlZpr{562f)
zZjK48%-*b=9M@TyIc~7Ba@^R>v4>TfV>c@kM>@w^R-WCgjFC)C42+EV1tpnzlV9?S
z@}{MymK4Y57saPmWR`5!6NqEnJWKE&qpE&Jer~FMZem_yg?>R%etLXyWwCy)iJ^gE
zvVM7LQgLcgS!&Vd>B5YRj0}^fi>UI)fr8GFPoRy-nU{?za`I`BiN@e`0~b5b!_L6~
zj*L4XwG0dl;Is{sXJ%vKVdt29P)l<125pwjYeZcb8RI5@6w7Cfo17@_F1Z-0$r?(>
zGcYg+F)%XRn|x4QoKa=+O>uqBNKhHZz`$^2vY<q`pe{7)fURL*VAwKQP+WZS1c`UN
zY2X~mP+U@!lbScVTe4OXW-1E<1A`y~1H+&H5D+q1QA%9032G-u7F0sPWamx}loFR@
zhuR8~1r?YuS+U8DQsR=XP+5>;SQ!`?{z44?A2fNRl(=LInk=Y@16kHN`Jt4!<UFV>
z$YfAXf|<N(vZJ)P<aVem%w$cFMg|6kBVd#7pvl@nWgmh~{(vUy2$lT{(pxVIG7^-5
z85kHqZgzvpN<qaz?g8awn0wTa#AT5}&k-sPqCn<=;tXU|5J&*Y{0fjD0|P@OM11mf
zX+g<s2%7;!f%H~G)f7x-lo6M#0tquPFo0Ylie%%Y$%ZoGlB<zq6_I3jO-_^%PrL+`
z1yLZA`=BOY2MIvUME2chs5poMsb2(D{|h95<O`TM`{Y1baYJ!th%%5Okglx|E`uDJ
z_(7<+Hb|GJJ(}!UsH{6w9OPdmBp<~>#bLIbhpNv4nU>guCVL4g+YS{6nTG7sDNu2k
zX^)`lXX6lG0kWlj3se?l8glHPfr`USdjmD?B2*lt9@+MnP;r=gMray+2Ng$G&j=D=
zU~mQ}0#L?*B}Wm61U%^oKn+raii0RnT?bRI%QE?wtexZskj2pa4{|CO0|NsH%S{fH
z6K85>o}4A;#uz(!qnx;>0#vCpNF7ueNa<aucnq5O5~z3vy7**4d2z}AQ1_Lg$sU;O
zC@(Hq4VCRglMS9+C@(I#2P!%XN`qVh!iy&_loyvwgX&$2CL2EaqP(~yEV0278Au-p
zpPkI8;4Uc&)yo2<K{6n$GC5H}Tyi#4R2E8uWI%Y%<cSL6lHpMQnxn~DOg^X}E_n+Y
zp@C?!=951vh)cq<V>X(s>tsbmamoEqy{%}ng_8pn#U;5wQOm%<Fdt2J<>W?1aY+kk
zDC|U&y*_!PqPS!{)a1)(vf7g$DvC3nnfy~x-!mU7#}4%$$j2c38>&|XP5diVy&{_U
z@yUfs;*xDp_gJIJo|(K*NnCOpR5TPygX{s}gOe{RiF<y5>di-!JrCvAKxvQ;5WWI+
zVJDin+hjv!aY<unxGhGLt)85yEH23d6@?X?AoD=DVe&*}amj3`$v>c~Kr$e_bMirD
zamh-k$zo7dAQ=!=nfy^%Tv8wE3p+GfiOGs8;*zieAPh}bd~%?QxaS*a*cPD4UWJO6
zqls%n#aq$D114`&5tnp<%FacTeKGl=inwG7)Sb`KWMw7`s)|dhLq*x3eg*jtgu5m?
zs)~E2K*PlZP4)rQOh+_vPN++Q(Zpv@UZ^TA84VT9g3=&+Kv-k)MOAT0OQ_x!G+Ecl
zjB4VNU!d;XfF_$W*-%Z~vli;k<4{?UQ6M2$GwL2x9Ap~^=R)289!<P;@<cUpNq>-5
z1_lOQP~C@ALRL;bs3tDC4yrd6O?K1dk80wQux4B}nr!@JMRjpWBdEzU(PTX*2daxp
zu7t|&K$A6|+^8-tsRHs80|Ub~G}-vc8<9-@f+p)Z`JuYFWFORIZfNHPWE4o~-ef@y
zanE=Vmw|!72r3H-ArQU>Qo_K%;EX2z1{wl>P;roUkkZAI3pK<grJ%A6XtHsW7ix%0
z!pvL-l?B-Y!fBH)YKSuiOn#}M&-i7sq-Hr|+~kRx;_#+(1JqQIJs^B<@<B~Rm>fWp
zjhy^ZQ=CbcX)~9W7$c*_WJNvk$v!$9lO41rxHLfZHUk4g0qf)>Z8N3{a93yY25k)(
z^MkeqX9YB2=udvABR|<eM}lcN>*OdMJEj>5lV|DJF&*QXd`riUX*%CzDP23J721=d
zbnQ5ggDP?c28Oc93w6zzZfH-wrEAA&3u=-xFfjB?R@5_RIw?9iO3#kznJB1#HF<-c
t2Ga}C$+z_Em_BGvmeRLldLTAAO5cvjL2B|WeLKz>IuL(tn7mM19sm$G&7uGR

delta 3827
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

diff --git a/webserver/http_parse.o b/webserver/http_parse.o
index 201d5634e46c81fa7db63169a55f2cd59abb0c03..6d49f80407ace1f2b89d7c6a08a031e63df2bcf6 100644
GIT binary patch
delta 1106
zcmdmBxxjLQ24liTO(V|9J)Gex`WgATsrtEzd5IPJ1x5Mk@x_(J`ne{C28PM{1&Kw)
zsX3WRn;&tmV%j``M}e8~`Q(lK;*#o23}7G%CK(vG7$7)*@<V=i$pomV4U~q-icWSE
z5SQ#_gb2q#D7fC0lM4mJCGDWHg=n(UlNSnzOKL)8>(OMxCSMc~m;4JA?S|4Yd+jDO
z3W`gbK;66&O;%{Kp`f_rBB<zLC=JuwFga0BTyj5D^e&W!$+k?MC@3zO0Cm-OG}$SW
z4+@G)dO$@5p{ihdS5E#YsL!~2vZ9c<WCGM}u4rnkCkG0NOKyXj5RWG7Hn~wqT=FVZ
zZzY;++2oBv`iyLo9}0;}u7Rpqi>4-QvY@cIB+T8%(PYynI|_?SnnFb%LTQ-$*G(=I
z7MI)!75xpRVX|i?FBBG+gqbJ`wI3#1H~FHlxMV(5j{%zO-N}q1;*vtl5O2Gn$$C#V
z6cLv^2i04KCL1(4QAAv_04ll|O2h2so;*=ReDVho4#C}MGDedRiik^|go-|f(lC8D
zCw~+Xms|j~^EaC8+sTTe;*tsw=Q2n_-3`<GW^$mYxa1?K9%D4wrIQ;)#U=kiW#iCf
zCr#ccs?T_9@<UN^$qK0L^U%~Roh&FOE~yT+eGi(f?_@_YaYl*Fkz(r^882++l(1)H
zteEU6xt}p$GN)8MW5eW5DR)NM$rq)}851URO4~El@=Ok77n__QtpSphwr89%`J}Wx
b<BrLkGWLuOlRahZIX8$wY}+t7P(mI6`;e1o

delta 1122
zcmZ2rxxsRR24lfSO(RYN{fzwFRQ>eCq|}lkeW%i*)WlN#fTH~L_~Odq_{1{(ToXeB
z!({#P)TH9nqO#PY$x)mUo3C@OWZGQAqr%MidGbPjaY<t)1~3o>lMD=83=k|a`69o&
z<V2{b4U~q-Do!>O5SN_E2oa8fP;k9lCnpMsOL{?N3(;iNCr=a*mo$aS)}zU`Pd+Fh
zF3Aa%?M9RJn*32fT+#vR=9Or&a+4JW#U<B4MGr%1n45bh2MUTyo`#Cvh0-wD36mQI
z#U*o~_I^i`T`+m0ptxiuR8$bE3Z{4K<cEU#jK?Pn3W-bRK;7nwrY2{yqma1dA*c!Q
zXtF_*3x&ibA42t3qRBQ*UMQr`C^Y$^khtUysG7BCYLX^13X4lJLq(56X_yOVOg0o2
zmvn@RK7`UR*<F(pg~cV0LPdW=X_)Md$rFXeB`-roMWOb?WV<FG6c(4PhRPbC$-bQY
zQCM73jv3-@7c|-M$%-Q4lDD9G%g|)wCI^a$OV&U|7ei^7z2cJ_MZ_gPLJVfujV7Bs
zd83H9<W;EXV<-*N`*iX{5pl^iP<wx)$^M)yC@L-)2sK#}>UNmkACnzL#U<ZC^%$ec
zZk${wDlW+d6^(<^Fun68FBH{hd^Y)_sJLVc)b@F3YBo-06cd+>fZDzXO*V3}p_n+M
z=Vni_^^A-UHvbg2XJqV{Y$>^)F=6sg$$G{KlPjg%88s&#lrm?`nfz1Ao~e^(av;0d
q<N#?6kfgLd<BG{UrR^C{O#Uft&p2VSrHno20WpYe8zwtS$O8a3;+xL^

diff --git a/webserver/main.o b/webserver/main.o
index 069932ca1a8d105bc2eeebc17a2c1ee144b6ed54..43a7c9df27260246aae85e79fc077fbb8043f425 100644
GIT binary patch
delta 2014
zcmcZ*av)@a1|!2pO*3B3_~Oj;w8YY!lFj|Rri`1<@%b{T>SyHVrt0S=<|S6>7Zl~E
z#}`)?>*tyn8W<+)m!~Ebrxul^7HyUi<Ye5eA@qWkQE0NDgt)2$GXofif=LDjE(QqR
z0~MD9iBAqx6P}zPp&?lZ;xRBV*g$ERYQM<~CB*AhnIOVG5DISAEk=kyFoc4O|A(rN
zLKFW3RiB6^UIOLkLTQ-odm;SE=8}SvsZhNQ5HYx2K9dtA#U)=reKiA3wsi7DNpZ$m
zlUGXWOHPNn>KvLH>&YJ_#U-~vMPEQ^m>W7KD@ut=`a$(FL0tipm7g3aB`!G`Dk=k|
zVX`YGH%f_1rbFFkh9=84d83rLWIfd605sW<$q%K(B|kv*W}(TZPZpFGm;4NMYYUp}
z^2v_U;*8ysBc=5vk3i*iKxvrU@+L2o7MC<(ff#WKP1bhuMQL%#2&m{AC=JuwI+;;M
zoY8r*q>R4geyIBupfpU4z~n?3ammY2Q7b47lYKOKqKvp?0#q~<O2cIHCLfd$m)r(*
zTPB*U(d3UZ;*!Ep+1Y5a>n1D8ic2y;Wlx~VE}a}GD=z5__0Iz|*|^D#vf`XcP`xsf
z8Rf($?~oPnJO~wWgT@BToo}G}gVDr`q3Yw&#OF*FloOY%g~~Rf$tFy8loOZKg~~2P
zlXah5C?_rnOP%}CWGyEzloOXsfQmkb(lB@GPQEB7E@=t%H9OP>m~6siMtOw2ifFPI
zCmYI(OBz7+TBFIHn4Bmt?l~1I8V{vmCf|l6E`~BR@m)~Un$W}-O+F|u?#Tg_U5Y0A
z85-J~(8OJ!wwy#0@1CrvATG%P)%6xlcFW{I1#!tLs9o%=5JO-tUo^Q<LELi^RIe7A
z>?4R`1~WAAIH+lUXyS7wKU5HxG=%C(LzCS&Sx`}2QUj`Y2Ab@O$&QNRlCV6m2~D<n
za-pJly*t#MXV7FXK+U{`CcXw57SGVc-$K>%utA&(3k_MQxCEMbFGSg7b|pc{TTnLy
zqp6uZ*-%Mb@(ENn7fp8c<U}QL$$DsdU4kZCG<l+uxa1#*Eer?HWW6RIR1%lugPME>
zO}2aTM<sp6Ws?<^^(9|G-7m}zF$(6d=*gMN?u<U0H!6Q;WIVBXrK&w6<BiEL)%G(U
zn7mTGp6P?~WGxLh#xs)(HO!fQ2~J+6VaFscG<l(r*d$F2Mv2Lqn)ZwwlQT8#87E9$
YscFw>F!`mXJ!gOl#Fh<{KdQ<D007(GUH||9

delta 2028
zcmX>Qav@}b2BW}6O*38t{fzwFRQ>eCq|}lkeW%i*)WlN#fTH~L_~Odq_{1{(ToXeB
z!({#P)TH9nqO#PY%^AF=jO@jk>1m0jIh$wk1u$(E5aeKFW?*30EGG1dmC<=JqlCC>
zAxMCMfkBi30=O6$7(mz%!ex*I(UTq3geM0`Xh<#v@fa8wY@jqqB?#9~o+u$+AI1a`
z_JL4fb3n4(Q1M_iaRaE`QE1}2Q1yvu;<KUrTqq4P8-$-g_><Ko1tohJA)E#X1$RUE
z<UmPr$<I(5XQ0V0o7^ZV&UkS0Oi6vo6HwdFp{Yrl{7_O{@-9^L1(XKa55kit3rdMg
z)<g9&L0tio0b#Alj#A>1N1&oIP#Poy!sjO!N{LI(fV#~LO;&L7LMd^{4N#K<&}8E$
zUz8G;{0-Hcg(llKnNeC?QVJ^C0;NHAg7A&WhSK7UdnS8I>q~xx%I$#CAbAj;KY60G
zxTHM`#JiW!Wb-B;lopq)hl;*|(ja{xyk_!8X>mrs$(%C!k{_V%SAfzWc@Q?A94I3$
z$pUr16`JhZ$&E7Nk`tk#p->v64}>cxZ<G<2JP37LCYo&W<cBiil5$Yl*=Vx&Ckx7o
zOL9YHVQ~&J6@)iTc9a#DgoWk<G`+2p3uVP6bD?@=pl%201L1#@7s`rTo`K4`p~=cZ
z`N2>cqyvQOpz7l%Pm~p(%poTr*#Q-4L{m9&vZ0)~qy<!VDVl7><U~1fNq%Td>_?ML
zm^@KVTyi2*^f8nM*$=`NlMl*?OC~_|vO{eE$$;?0$sdvIRYa5hF<DVwTrwQ0*BVXs
z{p3J-anA)%(Re5gG8KejxupzE{590HCN%NOlQ+tXd+I}Fm!iq4Kz+3dO*|Wtgc(kv
ziSL;#s30zB360~oXtGZyJ1U4vu7=vh&I&OE<Z2K;Ik`|l-19J0uNImtCsdains_Tz
z+z(BB`Q(cV;*wLLvT10tk0vuJic9)KWoMwt-kfZxC@wh*>XJ=pvRfu6DvH-vKxNOM
z$udI4Z=s2Ahla&7G;ukodLA~^&~SmeO#)4P3q;xE?}~zw+|bwwMpJWSvZ9i>q$pH2
z7ftrg<Ul2H$qi81C1|pXCpRjIODaQcKY%7%IC-OzxTHPQ&1cYL_e_4Mq|bPLvY@iQ
zq$E_0FgwJ-pcn?>p2?BQ?u^Bo7b<^eWW2F?rm8(7<BQ2R)%G)9m^@Rxo{2$avXq7!
z<Mqjj8s<!_LX&4{*fA*yO`a$uHu-~w2BXGgNlkl3iOG?g_KXWA&(ySMbeMco)1EUy
M1!B#H$q!ZK0TWZ<1poj5

diff --git a/webserver/pawnee b/webserver/pawnee
index c3585590cefcc0ba0ce2a1c494f02c734cccb5cc..31cf41fdf96cf65c5704e25bfb80e00d06621ed6 100755
GIT binary patch
delta 8118
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

delta 7831
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
LG(B(fszNmY!h|-1

diff --git a/webserver/socket.o b/webserver/socket.o
index 0df2fc98e5debf3f76433bd18a7dccc2fec6200a..02a2d23ceca50a003abc28b9e641d79a42a5ea7a 100644
GIT binary patch
delta 1789
zcmez2`@(mE2IGp2n$6ss?{bGStLkUu=celCCgvqp=ob{_r^gpp7VGDl7#bKR>zAh{
z6{i-Jr50^A<kw={oFJgUW_gi`0SpAeBm)B%0|c*uii@I&7cfHvBqtwK5TATOOvBR&
zBEVn+rC}!ghnnDwCT<TkAqGvne6pjsxMw>fL^vNp!QJy3Dqe;rz6L5@jVA6ed7-$t
zqy<#84@$$_Hf8cfadF8`sOSnP4U<)v%qSr)X%2PgPBdBF$%Yc*lJlXW51=$m@6ySM
z68eVsp`t8M*TH1nSRfJtXyQea4@!tjHbEpAw9sTNCV!L=mlTGErwf|wt;vd#;*ttb
z**G-W;K_lK;*#=Ezf_>fu9@5@DJ~fU)jJ7IR%h}?NpZ<(P`$8_hWSN%@<T~+$(2wy
zA4Ag{G+9teT+$cn-v?;2hbB8p=`)&4E|e1Y`~o#!1nLTy`46Fb6w$<`pyGOH;@Oig
zN{LG{Lv8dxldYM|C@n784i!y;(lEPDO*WJkmz)PRxdu)4%H%|8aY=os=yWIz(;GT@
zqO`bY0yG>}qsjh&nt2ILyb0>gyJ+G`lRrv}OD=<k2^WlJfaJ=;$%-=Kl0Tt#DWS<K
zO%9Y1ueXAl?1d(K9jYq~O`I9(f+RHY8&H?Say-nx2chESXzCdt;*+1t2ukjPn%Re@
zMq#p`thl5mL?y#4G}#lA9c9HOr$S}nVF2}e#^gd-amfm(?>3?7-8Xq5NH5ghgJ`l-
zCSQ~lm#l`Gd=*W0=VV4XamiCq(f3dq=3j})hH~PJiza)@=}YoJ%{PI%0;a}w@<cgt
z$tb93D3pfD@=ZP{CocH{YVJHVS<lHI<-{dFLSttink>&`MR{?_M5xQJp~<FB4wM&{
zd<NC~0Zle?a-+Psq!&~#7b`>=%vC!kZ<H68^oRP$3r%*@<cIR&jDnMY%IiyRg{o;m
zQ&T+IQ9)c%8e%NNA~e~)$%P8yj6s__6^=79PS_l%WY5UxF?pi$e#RM-16Ar7PfWh3
z;?B5evZSgxqw(ZGReQ#O$rHikMOAyo2a^TW>=`>I2dddK3QV4;X3zOU0b<dH$qNO9
JC+jHj003>p!JYsB

delta 1783
zcmaFi`@?sF2IG#6n$6q>`WgATsru=ONvS18`c9=qsfnff0Y&-g@x_(J@rh;nxh94N
zhROQnsY%7DMP;c)n^$v(F>hAq*JNa2U|?X_>@T3mX34}1VlyxZLMR3<1_m&`%LEY+
zg-~EIkeoD>FFARmg81YEVj7CYP!Ss_4N?Wd22hioCr=a;7mPuZT`}2ET-<X9BSbhK
zLcwj3f!bb%CVm&Hz8X!uaPmZPamh@mXdjdYxdMcbPCh6uF1ZUTx&lgrWI#A@@<(xT
z$qcA#ccRJ0O;(f;m%IQKeE_9F`at;F<Uk31LjkC(SfDgW2808_;mp7QlLv``@Z!lE
zCB!8+L(S4c)0H{-p@g`k3p4~=&}5%Z7L*j141~(Yp~<#Pc9ayC41oHj0!?=N<U&bt
z$zG`5Noca>lNU;gOD=@!U4teYGx?&Vxa2LUn~$N%Hcw`h5|@mC`u72v?AghNQu>Uk
zlM|)HJ^w?^7lFD06doWf1m!D2X^<EQdqd6ALld7f`Jj}zBp=j94>Z}elRrv{OYVS*
zCP8VCc_93IvZA!O<awycHE6Q;CkIN4OC~@?r$cFwJ`hfr+$b&XIT0ETtI=dNq5Mlw
z8l(e+d!g=x<tmUE2v45;P+DAaBQ#97U^Fxj)=U<Z5toFe4<$6&;K`0M;`OdjlfBSn
zIiS7^LlZZFx-1DzoD(WufF}M4YEC(txFJM*@^u+O$=6W5eQ0X5Co{^5OGZIdGR#7g
z{W;lCR$LO6l9r*#&YYYmD=yg#_1z{k+4qwtg7iY|J%}bdfAT?DaY<MTzKSM$Wb#K@
zaY>lydo)?)$%=B~jF%@{%IQnmLd`dUx&jnqAY3-NQBHiagFJ^|D4LA@<c)ITlAobw
z&O?)}n*2~sTv7=d9{bQ_#U~5Oi%Y_C<ux?fg2|5Z;*#P}y&uqIyCxUPi%V8RWw}@(
z$rI#O5Pms%p}e?c1JpNOXtIwdUz8VTbejB9USIMVR80$-nkADB6~rZdAjUE*LX(|2
zIZ;8Jv3YZ)!f{5%1)Cj}>=_v&CO0bYXIwGaQKg>o#^i%4?u=_EbE=v%+D&#;wP%c;
v+^A~Lm@xUEsy*X}$&70Dj58)Xs@XFtOm0-O=j2d?ShQjCL;>N+GD<uES>egi

-- 
GitLab