From 070025b403bfcb09d6971686b51a9fe8ba45e0f2 Mon Sep 17 00:00:00 2001
From: Joshua Saxby <joshua.a.saxby@gmail.com>
Date: Tue, 3 Dec 2019 17:42:24 +0000
Subject: [PATCH] Implemented the create() system call Also wrote a basic
 implementation of the *nix `touch` command so it can be tested

---
 Makefile.build            |   1 +
 examples/Makefile         |   5 ++++-
 examples/touch            | Bin 0 -> 37028 bytes
 examples/touch.c          |  12 ++++++++++++
 userprog/syscall.c        |   2 ++
 userprog/syscall_create.c |  15 +++++++++++++++
 userprog/system_calls.h   |   6 ++++++
 7 files changed, 40 insertions(+), 1 deletion(-)
 create mode 100755 examples/touch
 create mode 100644 examples/touch.c
 create mode 100644 userprog/syscall_create.c

diff --git a/Makefile.build b/Makefile.build
index 0810c23..30d709b 100644
--- a/Makefile.build
+++ b/Makefile.build
@@ -66,6 +66,7 @@ userprog_SRC += userprog/syscall_exec.c
 userprog_SRC += userprog/syscall_exit.c
 userprog_SRC += userprog/syscall_halt.c
 userprog_SRC += userprog/syscall_wait.c
+userprog_SRC += userprog/syscall_create.c
 
 # No virtual memory code yet.
 #vm_SRC = vm/file.c			# Some file.
diff --git a/examples/Makefile b/examples/Makefile
index 41a663d..f224327 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -4,7 +4,7 @@ SRCDIR = ..
 # To add a new test, put its name on the PROGS list
 # and then add a name_SRC line that lists its source files.
 PROGS = cat cmp cp echo halt hex-dump ls mcat mcp mkdir pwd rm shell \
-	bubsort insult lineup matmult recursor my
+	bubsort insult lineup matmult recursor my touch
 
 # Should work from project 2 onward.
 cat_SRC = cat.c
@@ -31,5 +31,8 @@ mkdir_SRC = mkdir.c
 pwd_SRC = pwd.c
 shell_SRC = shell.c
 
+# Joshua Saxby special additions!
+touch_SRC = touch.c
+
 include $(SRCDIR)/Make.config
 include $(SRCDIR)/Makefile.userprog
diff --git a/examples/touch b/examples/touch
new file mode 100755
index 0000000000000000000000000000000000000000..0d81b3ea3dccb90bf0a39ad1b64cfed65f0da0ca
GIT binary patch
literal 37028
zcmb<-^>JflWMqH=CI)5(5btUO3x^2<1H+YGh>Qt?0s}LH27?d-KUf|t+Q7oW(7?hG
zs>Z+o!mJ=c0S2&qgc<`w#5NWV5SCzIV31^BU|@sF2R<!H0Wr}rNM3+}fuYw&g{Aq)
zhyR6tLOY)ZHosx%c4TR`WGdlme#4W+_#%vffuZ>gM;62X0+tu8AkGIy{%r@Ej|g=8
z{yEv3_~&r*8<GDdDl#DaV*UUB|2tV!UMPSRzTwGYIBU>+ge7CfVit~!EwfoTvRpD6
zmauTV@L&X)%JaWOMIeh2q=o~cW(`P<H$;sJBLl<#5*3y#Ca{9TU^X*^-5sLB(e0wb
z5)_cd0uteAJ-|Qp07MBZNPq)LfDJ4Fkz|LkyM0u6x?NN_x<gc00t14wI6%SzhtY*O
zp~48;xIiL25VN>JYz_#U2f{{j7cWQzs*(@HhN|QTvyq%9fFyvVUl1gW>@OjZ0J6V?
z!2*Yy-+;nV;(v(>7-#HR%);?vF)IT@uZxO7^AV1K|0OCKFL)Ul7>={3a4|42yhsNT
zdJq9n@_SME@Bjbc<~JOjhr1mdEN_$vHNRoeyb%!mzu4o&i+}(BHy;t`jCN=~!V!HK
zq^vteMWox=p*MiBGuWX!L`9%Opx4>K(%GSiz4OM4&Hw-ZZ+3QJgejNlj!{wRh*1&F
zV(fKM5f8{>d@<$U|NosgnvZBi9}aJR!_yt2BC-RNK6m~HrJw7c)_uR&{E{&+D2wq$
z=D+{{VeST{F0i`hBNFi-mqhf&sIYX#sJI+=QSks7(Cwm<(CMP$6P$6liG|~TiAn(o
zzc|Ihz|eW)h2;PL|GQmOBASn6L?3Q`BLEAsEJkp`Z9XCc3d~*?6^Z6IETCY6B<jf^
z4;_&?9NPIb7!=s0EE&^4iP)ZnfuTE=q4|hF<M03c3=C!J&DIPhO3iOL{ui@kECeZ$
z0V$D2s9<fjW+=Va{Dvo^X(<cGi~o?YZLlra#=^l+Dt?R=#9#!;KLN$!eTaN_?4Of|
zgS%tEX`ZJ$fTh=qvD1UaI)I~=vs(bf;pmWxJ{%ez26A6_jfz6+r4q5uvz?du_kC!7
z!x0|#|7!CQf#%nYr5~G*@I=SO$3hj?bRO%x-rb@yfq{YHxQhxX+cLDAEOF?bqB4Vl
zfuURI+aabB0UJii1I-WqH6PIJbWu@wt@P~>3rz4cOpq6(==+7{2VgbbEfD<-oh~XG
z%?~&_T~u^BKXLvl5otY8BGBEUG6iJ114vxuHOFxm6%|nIb^hS|z~8bKBn4B!(&?fi
z0aFh$jbmnKhzieckn-Lf6@zXU6^(;0SeqX(cDSg>zt(Q3QITgTQE0tgC)3>nwx#pN
z%<q*vt(Qu<dtI42T~tJlxiac>=ctJEx-x>e|4URr`G+Sw?8OaH22gBv`>06pZ)0KX
za0Qh=Fv<B4Nl<__A7<>l!1<wc5-20QX6cPlF@SkEfTQ)&4p5%r_qfnoqhio`L-U8_
zp*s0q7nOX=!^PsAKRb^#A7(t}{2wHB!tziZi{<B{x6L&wIt(QWP>(iSaFmLGa<Ap#
z61Ilw{{|&&$CwRzqZu{tL+xR%VCnqVT%)4GD0u)B=uDc&nrl=P82G0i;NNyY^B6dn
z@Oymt=Axn@SgHU@wOdryfC9D$Om%+R0gCGvC;x&oH&}0p1SsWhQCYzNE_ZeQPXQ|h
zC7c=+6^0UBgmjhxT$1BIL<j#q7Zrm5xG*S=K`H1PgFp#Z>kU9<kQc;yh*!&WI*)gj
zsBm;|QJDjB=^B*<pjzZLWAhu1Q2u?)0spTx9}%$pUHYaQqzaP4zA-RjHy`Z1SAQVh
zJ5qy`=4CpMc3$fQRRA?ACf$K7mY?c!zA-YECTf0ae!~;q?W5uV37j<$-L2p1WWnhT
zl#}@PxyUjE{0~uaXg<sca?ZW_7u_x@piF6btyTl%9A$KKQXuBM=4$;`zwPzI)^GJ2
znvckUUDW)Br`JVAr1=d8xVU+d{u|_ASTO`De!yiqM3My*9H4RtoX>r_OH>lNb5v6J
zx3RSx;BWC{V_>jREs+GpQi)0l|GontXI6lU?$0lU*ccdk;}{$27*$I}p(?Ue|A(l6
z<X?Va1?PTHlrZcE<*a=m;x&8c>HVOj-0RKAzs>P~Z@`0wUjpSC{M#=5SDCtJHVa4d
zImXwwo6j-5zSew><@Lqpa~!YFG@lcAeZ2Xc!s|nwzgjMp2zQpK7<@klGNy#R`Pq9A
zw>w0|093B9H$VE_8KPov+(iY{_+hZoDiPw}ccJ-}!A_9<&A&Ly1YSFIyMnU4NpCJo
z=jqq-y&|3b`wsN_1YBr7%*elu8KNGf^l7J$ib=PNib?B%O78DBI$cyuntfCZ7>~QC
zSb(aP25UY3R%uoS2L5f%j5b=O{LP1%AZA<i=CZuDYCa5B3bGk)Xt^cWCHO71==M>u
zXgyge1heVoRu%>Zu*T*T6@&N3T~utCK@F{9kb`>zW;FZ~;%{eT1i1thk_>ZLIKXbo
zC{^t(W&$Y(1sDG|XQtkO-3`Bt`P(g6V2XX_uz-q78zzu}P+2Lstjt`9EGVUbjD+d`
z!3@*?W-ipS9Jpnmh9I(Kr{RkC%!3#QYHGraS__x$nGca=X8;-Q%m`D_4ObDf0HT5e
zO+_YLh0a124w$|`xagmSEF7Kpnrl>SIQZL-fXV_F6`TJmt!EaoaPaT*W#~LHv(ra~
z15^?8=CZs5WlsM67{W_H8ZkusK%%Y;-JzhG1!@Gx>*{WFg|9QZF;s<Os&eXeW$CVE
z*b7QFoi!>PojEEzoktr%39i0Owb@05gP}P@h3EfkNk{|t!y*=rj5`br3>j-c?E{Bz
z|NnRUsBm=0sPJ^&I`~Vz^Sa^r&Kebg&g;fCDm<MvDk9xJDgvN-M)RWN<<1kGw?Jii
ziAu%)5|xVH8WorD44uU+9Nj)D8V6s>2kr!=oEHi|K&6O6=jWGFObiU&rI1YBS)wA*
zS)(EY3bMK27zt(Q3{jCd?xG?CcK&COOfyJkI~JMOIo-Yt-LWj4J}MHOF)A{hpL=sT
zUWa%4GJwLL0a=*kwF5S_+TFDboi%6{z81x5f=zyjwM~9Kn@vQC@M{U1(h@eCiV}m@
zd^<qCeXX<O&mtC%*Q!WiD#8d0(>GuK|KB0An1$mt>kgj9EF9<o7LWzWoZT)e7TqB#
zHZMMY0|(d3w+svno%eccS-M>rI$Turq2=WN5|xr(9~FmPps?+AQL%rq<tIpkK<DSq
zzb`>GEksi+L+kAwOP8>4@Vne-e!~$M{Ng4js67E{hL*q#={(eV<3$NV|LbaqW>--2
z%K(&7c7fso+08yGE`b>!k3il1!V%(LkoB)^I`4r?dT2{GV>c*O?Sq;BS{6<EB1n2Z
zOu83TA~`d*9N=#~^z;A!*PNh|?4=L54)OulPr=P^B)VNxRJub{G`f9Mbh=|y6gp#6
zSdN1dHUk4g>wyxL<`<xL6sR6!3COT%Vc`f2dJ*{(+|m{~1_}Uy*D}XlRCqxC>UB{;
zC^CV#1Jn;|J|Y2Xk%J780atdQ-XsXWsDd@V!Ihp2|27vDn+_Kh{^lAL3kLp{(~JxZ
z-6bjp&CmFEfO@l<A39xBIILY%Ecn~<7#SEkzcbgUSb%!9p!(p!2XN>H1!TMc1w<V<
zp9r*mD^UX_29Qp0S_ZYhKY$d(f)qgO`SO>qxnQa~KU>}}GwIGzG12_m{F@!zT-d1#
z$~i6vL0t#_ZJ<^{#utzok_a<?7hP(oQQ>FcZ&?Sb%762hOTexA^!@*TNRy)Zw?OF&
zQ0Kem#lBDAgx30vzvVIm10<t?WE5U30m(pJR{F;BU$I%|XNY_D>4Dq<asdCf3(c<-
z__rNs{uRgXeysToPr!>DgudTJH(xV#es2EFUoHwU)E_R{{F}e*HAt}Lg%wEfhyaMg
z^+Na4|Nq@CDiVw?Dh`Y;DlW}O1T;Zm-CFVQ|NqyHIKo*B<hLUN`#}-Z`5EM!ga7{j
ze>nlv3;f*rpTE`V|Ns9lD<ClqPIuv9AfrlD1iEWfL^?k-e_-VNQKHoRpP`(0CuoqP
z@!x-D28J>>FsIoz2HbrTd2I#?&cC2gUkuJ80<TRwKXm@$U-N_O;43b0)BPYz^Dl;S
zc3ZH1w&qF}hSEF#4a37SSU?@J9Ei5&BP?<8hr@zFj&M;C=q^za>5fs6XuZup<xuN^
zQl*wlrE(yvLYA^{WaNT~35!`cvUoCDK!#+0`2WB4TPaJ+r4nv%dTYI1s_<F|q+tq3
zEkXk?M1$3b|Nr^7@rZTs2s9sJw7gaNsrd*?bll<au;6Zx^`P!{jfzC;f1K8LfUK8=
znD*xV|NpJG5spOI305TsQFZM7|NoXZiltlsmso%u$-j+980vsurJopoyjJWrvFHu|
z-}=8qwDW`J519Nb#^zuDOW(d`>iiHL7Y}x03^a&bR3ustfZT{=`&zh<8$fQfg4pf>
zaw8;&Bzi0Uw;m`7<KHICzm3o0RH-SbNM(3!1q!btsJg8oy1Cwi!YhQCvH1Wa|27^r
zi&G^$78gN%RHo(^jIRYOf0RCe7{UssK<)$$Gk|K+5EYTulaScE4L7_3<TO8s;cMUh
z|KED4gqMFCW6OaOQ!Azth1dEZw>(8v?hjF3_wN7y=7WsQhZrFmSge>z-t%u0vN%-E
z!9VE$|F#3KS$BY%1I<TxKtmRwVJiX9fCs3T*?GD3Kq*V>$x{B-lO=Xm0wwmn0gQ|X
zU#o%adk?p-0OY)6h<$t@`wlT$Mg1=k>bziis`L}si?1O*g^jtuZD~DF!rgh1f18BG
ztx|>84j^;6mcbHj2FTn}h`HO|{{P={yOiy<0I1at4p;$;i>04l^I(_{N|w;93GRE8
zs6k6j4p3DT{-Oq)kp)^0lnQ|x=`3<B2TC8lW(BM2ya9?0NY;X;8~$y=Etf#OI1c`O
zmx97x*ueD*gY^ryTq=F^niJv<CeXMMD02jZ#>)7&#i;P`Z{un?St16Ow>Zu3atIt5
zTrDR{KSF~g8k|h=x%tFDNJ)F31gD!}!z(c=3f(0tDy`p26+yu%2@lQ~&?x77P}>e%
z45YmI|G&9LMS}sNP6t)p2e>+$H{ks02pY=hmT0|QY7R11303(wxN_b%|NnRXXgN^I
z3)0Xj0rvLm2yjSQgU0ZFfMOx+#WzUby7fTm#m@W9#~Jyzff_WOFCelvV6r7oI$yLL
zC=ocu&d_|E5p1MI=Z)8(1f<bv0Sau$co8JVV5LzBD5saQw0<k)?&UG)Jk<KFRQa_w
z$lZt{F$5GG(x7G;I5<LI|Nq~7h_NH;zvac!Z;%2Glqo}01X?eZaCTm3uwp3DeGLv%
zL=yD@8KMa{MBw%R|D6|_4=^@ZFqHn#ya38nka&>+)qcA{84VmDoj1E{R181^iM@gU
zJ8yQr|Fo|2#P<um75^=N6&Y*(0`(mr>G2*jsQK`QB|J3jg+93HBhY%FM7;Shqjii5
zPuYF2afsCS0oHW~4IP7;?jUDNw4N-1j9`MCX2Zl#!fko5{PX9-V9lSQgKa$BB`ONt
zIgr*AEcw{N<Jkq|RWG<#RbT!8-})Akc05rPdBYVky!!tiYzJiI^gY<ak)ZNRruh}4
z<>k)n{BFOSA)eFy`Tzeh7CX=g7b03Afd?9aRRIqILF_{~$_C`947hz0UV;ioh$4ie
zz=|^Ain3q+|Gy6r6CXRl1G>GL|2sc|#wMXL5dp~@B|6qIDjLP02AD=~!GFzrmS6eZ
zzINVcu2E5Fe!~(L6#k;*2gu>(Acyz5$TFagV9Io|sC0&?uz(tY-8CvEt^Z4%K{Erp
zK+VnX-#U+XUg$go4x(-z6>y9*o)EnC{afeH&hy}54zNPTV}jQ~V^5tmDm*V)LG8w0
z-8?GYF)A#U_xanOFfcF_aaf+?Z@&fVB3uCX_8Ncv|Iffs&T;U8z+O<p#`gdJ{|x19
z%||&7KHvax_(2?&gAZ6h9D5Ll>EHt<TLuP(hUTjb-7KI+H4Fcm3yc?Efm)uR6bWjq
zbiU+Y`swn6ZwD1hm^u%2UhWQoOjUgUyi=ZmfkE@-<rkfYz@rPDE-C_@J}M&3hyFKT
z{NH)HGem`>6V#FX%fJ3r=MDb##~6=xe)#@~@fFlBng=B>Ti!3%C}OcZSFQwZT7;;G
zz$||)0BhC5TI-;eImmigk_R`zIS>IZ(Osh=(|W0r{ripPOAOy{b$;yp-TJ?h{rk=4
z%M9Od2M4~002iyE?kUUniw9rIcm6*3THfMjDNF~bzKV-K-28^+e~Aic8c77^su%s>
zT7U;!aziQ#uyx^Koj1BeRAgS{gXKB+*MI1|q4{AZs8+#d%r$U9hufHKV0oA^;KTqj
zih&`uBC`aPhB6X!!1T=y7LK=2d=E;)_%G1-SD^g!P#UD}aR&>BWETsEXg3Q-3Y2bx
z(jYNx_#zJZ&s{7Wp?xeIC4C4Q#3mQ__CU-cM*ost77pERh`k^;fG|iONDM?HV~`xk
zY%!=?L2@^HA$EbpL3|Jfu|aA<Y#0q<lZ%(r&_5uvvH1ri4s$Pv4f6+#hRKmb@1voA
zKxSj}4@ey5RuCKJ4;T%TBZq!PL;rxx#^xW8ILxgeHq0L|8YV{$eVK;-0hx`>KOk|K
zTS07?KVURWjvV?w4gCW$8=HSX;xM;@*f4*<XqX&1v?#R9Ax1B$<r~OsZ2kd>!|VgG
zgZo%GiuzbMU^IwLE-vkXm_>~KMZGK>+T9R)L3V>MNFPWHL?dI69LQ`Ds9QmD*Lxv$
zfy6<45C*aTbhB_cce8Lrb+d33cC&D_ce8NJ>Sp0s+s(pppqqu`ayJV{e0*6!QD$CA
z8Uq6ZsEs7Il!YULfq?-uKLO(FFJ<AVfbv0OpAJh|KokRLx&*XR!4rvJTvC*ioLIsD
zrVA>;bZQ<0LvCtracT(zh+mSQ9bW{hvx`fLk~50Ha$p+7&n<xPp>%G3St>|xazQ1i
zu1`%aElEvLNX%0x%_~YxOwLG5%1KoyE=ep&%}vb%H2^}3Q;QS|it>|Fi;EQ;o&1AB
z6cS4mREw=tQxr1u6jX~fG_63Bjv*PT3JFPx$=M}EiOH$zAT8-diMa~NiFpdSiP@<N
z$%#2RAd{1`ixo<XQ`1Uw^tggj6H^qFoM5_&l|V+8WTYx6xuhnQrl)7-r7MKw=jRkF
zDI{kk7L=qGapk8efD{B|=9T0ZE2QKnmx3IcSdy8ar;wIkq>!6ml&X-KmzH0Y3l;<o
z3+n0V=VT`7mlmfM=@(ZPgIuDQ%-{@nkd=aJ0fR<fX-<wN15|BsNlIqEUNVD?O<ul&
zs;X)-$Yt57MR}<?c6Laj$@zI@sYS(^`FVDB45|heSrrNj3<?Sg45|i385tF-$qa@H
zNtGq345~Rfr3$LW3?NQ1L$(uxuM>m26GMm-gMp!uv5BdfxrL>ple3Gf8<Id`QgTXa
z8e9O*u&`uEDK1e^v{mp6_3=@tsZl7-tV&g|wN)@+NGvW+EdmEef@-n4LRw;GPHKuC
z!e2$1dFgt|48=vsIP_x|PQosn2oq+2D_}^<$xqIPiK9BMxCCT9OpYNXH77GSvm~{s
z7%o(tSe6=JP*MaJK=LTEqe1DNXDJJZ&{7r-(WNXL5=&V)q@nr7-PzenK_fJ&G_Ryo
z!Bo#g&p_9#6wEWMGc?mPFwrwK(u7DT7#SFv8JHPZGJqz7K+}tmY|6kerGbUR5o8M#
zL*(y4vn>MyXz?0o(HT@4s=tB}rvGgN3kRqNi7L;^0h14HV&QOyNir}%^#^dm<mWW8
za43Q1UZ83q_Pg-F<o7kRaMVHNKomsYi5Dghnvy8u1<61#MBYpSCckbX3&(uWBql@}
zYJZOcOx|}U3r8#@K)@<MeLzqF#=yYBsKvm*!1JGhfdRCh1v#LY7}<_8FfcH)ux93!
zFfg&O%Q7%9Ffp=$x|~c*tZzU(4$!<R0}~_19uSX-{XB@`U>633EFS{{10#nH$Yf~n
zGtL3^URh7UC732Mus#CwKoU$7S=c~>M2uVq!LDRrVBg-r!f~8|fr0%<0}IC`kSGTW
zNRop^m4ShQ^Em?p0|+xoaBgK_U;tqzX@+Sa+Zj4RB*b@oj1b?!qB#oWN{F|Z*%=ua
z7};SmjB^S=+Q2Sk2U)>1k%0y5LUxb@(?k~5rwuF|pczJ1P@(`$#WJw5lz|p2vebYa
z3JEk0kmo^|k(mSJKoDk<VCZB6#Rv;1T|r#773wmOS)c^A66CU0CI$v34$x8tSlBm%
zM0h|VEG(elU}gi6tSO)<Wqkqi0c#E;0|OK51V#o1X4X|83s_~D7#LVt^_UnK*jTqQ
zF)*;Rwlgv?aInr~WMJTAb!K8<;9})uVqoBA&1GU>;9<33WMJTBy~xPGz{fh1iGhKi
z^)M3yg8*wVBLjmVYakN?gAl7Z69a=V0~;hQu<L?sb_BT{RBJHK5e1oF%E-U~GK!TM
zv|5t$Ljwy3C}napGB9v;GchnQI)nVdz|Gsp!qEttxaTouWMEJQSq>stK&D5791RIc
zJ{^#QKqj+;0+G=Jqz|;zigC^)(E5XwAR|3MMlwxg-~d?;5@uxvEyLs#Xk_8wW?*3G
zfLrbbQpvz=2(z3IWU>GY$Pj-}e1jxF(|n9`u7ON{4Dz8rh{-gOK@cPfGENBWk3f)7
zi~$S`!Ym*k2>b`B4Fw6>HnMO)43TDHU=S(DOkrRQ1(^;q1SE+tBpjq3WQYJL@iInd
zF)=WBHnMPtgL1_j5RV`1hG?i8_~SvgM1!KAX(EdtNU0zL1A{2oMX?~mL_oQOfsK*L
zh>?Lo;0{Q6BFLPCMivf`QpP!(K#>bJH4$p6AV?DAD2O@9Aam5g<_Lg_Eyi?^Kq1^$
zAK?b1!wdjPf((EJO(sY^*jIHR`*T6uTDW$7W(Ee4v=jzLusA48KynD(`5@(B-5)`^
zi$UB@c$jp;bc4m2CNl6(0>xf2NStXR3;zZd1_s7rNC0sNg7k?oFfc&eRSGf+WU?5G
z0BG8ku@WS(0B-hEnAu=)xY?B;ak$x)Ftb7W5N20{i~^Z0%<`I<fk9lt2jr~!?TsuP
zLg2_WVu5<Q9;6av_&1RE>LJFl2*OlCa!Dgd5d(vOBS=jvNX<!j02aVZY6U3*1t3Tc
z5rFL=VUSZKHh|pFeHE^A1x#l*NC`+MOb%jeFG!eyK|lzkZ=yK^1H(hO`@g{SP6R0e
zx!(=swu#Vy7X+yUB``=(PX;LhyJ0a%)%4GBH|T;EFo}aKm=3Z4<OrA~#1S(=S{WDw
z)Il2Og3|7Pc-qZlWnd6V$t+@EoC`~OAW4wlA!&C$NV63r?P`E5Sqw5jpb3`v*TW51
z3^M>Ei7;R($N*o60cSx5tOOaL*aXXye?bO-QtwKTLQpXL0!8mikT@tyf>eTn0pgt1
zAVmpa(}Y<-MVY{2keTa2W?H}<<;(_68tXyIK_LQ?L%3-pNVphmiU4TjoN+5iz_STf
z%z(;KaE=0tgY<*sK>8t(u^prw6d97`ObiSl%p$<x4yq*>qL|=~fcH$0Y7*9($puv@
z&q1{aJ4in>%Uvc022jwlK#FEoNEONgsSQ{lEdv%v%YX&aGGKwU3|Js70~ScjfDPmT
zMlP5&jB`L0B0IQ1;sP<5CNi-90OevXP@9cuA`3e+GXn!7RE~rFDkucGAu4$|IQ2l1
zyrAN>je&uIE3b)#gCA7h*Eg|nNP!sLO)MOss)cJp6AOn4NCea#vj?@uxLLRu85np#
zp5ooe%D@1^Ov1eB%nS@5%p}UE#>~JV!wlMs0Alg-Ff%ZKFtZRZs5$~+772zApg?4h
zW`+l)7c(R%K^B2Z(BH72WTA3UmNGLi_%Ir70X036O4Aq^jX_KX_5ub*lhX_g3=SNi
zwQP*0ppbOo04?HUGy}0c7&t+mJ^~6c5Mj^2!om)!cDY$V;yn4FK#c@BA5;%8&H*(L
zc@s-37#Jf#%w-G=417D9SU5mQf`OZ*64Z!n0_pJsty<Ry<%l^Upc*upfzc0SBGW_$
zfdsGukT58tfK3YknFeau3B7D$;kd}az#z;RzywO_A}pey5NFf`Irmc&3x^`uP*Cm8
zpUeOeW}3(#mTbhps130ppO2>*>Lk&5AiLy2dWD-=I6(4@b3jEtZ!rU-Jc#iT<OOr6
zdOqi77LG7TiU75M#6cQFjX`EOfXwi1X5p|0+wTNw6M@4KECKSCGgukOOs0t}0^sE6
z07{Nb6FJ1do^%2Q5A(z&^?WtWEF3RDEve>aRNsn%k{cr@$gZAd77kFg!Z@c9WEa?U
zPKfCY5Yss!rnB(PYi8j9m0}E{CLlKmfV3}aX5j$!4;bfw;zj`MRImixso<)QX(Ee+
zB-pJ&Ak#n-MpEELgfPeu#sI!uFtepWc7rgJf^;e~0|N*%%QJvVJr;%z7I>OJ08R6-
z&de-OqZLw8z}m5pl7fgn1Pf@5CX<vgs5uNNG*}ihGcYiz#4<22u!1rmBQMMz#yM9&
z&F^iX5a0(fS(!mw5ZKRy1O#p~KpK}Emzr5P9y2g7aD0U^L|Rxl-ho6+pbQ2kNUMpH
z<sm3vuyBKl0}y5w<^iRrDWD9_0AewG-~zSe%~;{SuV8`Xcvx4B6XaZo)1kg+0Trc8
z>~<g@fQwQOknbP?#PXM!fq|I|(lNo((PH@uvRa@Dqyt*A%78*%qz5DdDP)<Tg)AuO
zSfoHkv3vpPk_E*tIQUppW`TM)&p<lW^Fhp~Ag1<GQ26<?GBEHka)LHvfl3c<5QBkZ
z1uFvsBM+z($HK7$#O4LDIT$!uK(6Ov0a?SCWX{OIz`X+`&0WmGz`(@47i2ECCo2O3
z2e&v21A_oJs0pRO0M$@h0@4rxD&x6(SQ!|Ycs%_=7?`;gLE*`5#LB?H%B{!Bz`({0
zs_)skb6FS|I2hO_u`)0SFve{Jbu$iwG-rX9ATw|{fY`Yphp}+%1G%CQ#OC0L2UQgH
zAjk1Au(gAn!PxW$q`4oYp#`Lffg=sXZUqUmuvaiJwt+-BI9NcU?I1P}11HNTQ11lf
zVZOV}3=FL7AaQ0vP%AhY%46U&2f11ZETavT0rMCH^g(9nff9xixCjB&{esCE42*gp
zBbg>L2!RVmJ&-ulL>6IinPHFv%03fW7(`e&SwQ8Ys0zp!b*8u$77oxlJ;pi5nHU(v
zK<213feZq5y2O(6N*EZ`nfw_T7*ZG+7{psa!J*D{or!^AH6sIq1lVkKCWuuG43Z!T
zDUfa{kPrhW3&>E>lOU_EF?P4GaC`xU;T$Ix1_p5rkXhFlk1;SXTnCwL58;F4<e3;4
zq+=nvKzyc&3=&BUjMo`GLCIkvi$pR5;|<0TFo#1L?5LZJAiJ3+@<7~llM&<qrilVF
z;A-qPV>}B31M|cM^|HwY42-uKLCG<aiGe|;f`Rc4BRH5RPN|oB53=(vnE#oHfk6%&
z{rA9p5oQJkIew7*eK21g#1{v-`2m<8&dk6dKedg8qlk%t;RQ1Tg92j!6NiEVV-Qmr
zg92k9^F$st2E{FHEF2(~;zbza1(YE#(hkuJiWsn715~|AB~S%mNi>5IWsN@z0|PH8
zO>?qDftaAYp$v+Wd=>@<6%b($8hrs(&Z6ZY=NmHBx3h3e0;eTORt5&~I*2GJ4fle&
z9^g!C$OH-`P$4Lm%)n^G1XB5%nSlWk`o`cS0g5JYiZF(z2o~8)21Zk`PD2(32Kh};
zA26~af+vu9A_E(P(l4kK%yST722K```&B`uCZj*d1%e$c9H6l^#yPpH3=Bfx>dYVH
zRHlgxYU<z`C=gW6$FMLkXn<>=Adoi308P~n7LLQ9F?20Zqn*)_Nwb5612hQ5IOjAg
z1A{c!C`Tr!SrC6YLH)%7NmWize{rbEfo*bO0$EkV!oZ;E)WO2R3mSjWjs*o@2qVZG
zMs_v^1|6`$5CPp}2F4IZP}u2!4G0CR&~pPNs}e>AP8N`P`k*S2ajshj3r98^0|Von
z7wilS24GX>f=r#m!oXkv);<@c{5cB)gAh0m%!6bB4nc4v%!A|r9z)P5#t(J|23BU!
zT6-f<yI(k&fpHNiWSJ%g7=wI28y2ivcCj%qn0#VoVE6`NykKQusAFefFuB9Z!0?Wp
zfx!qA_@@6@85q8IfTkwQK(pL-j0_C#*%%nq!FhTwX!PwG2LpqqXb%g=IW7hUrR*L^
zLrQ@$kkOEV!3;EA0%}7WvcojJ0+j>7oD2-+NeqmyLHYbDCj*0KW-ru)S-l7o3>X+J
zK%Jlzb_NC+P>ChS2uk2g6aAG=_p)%5u|QJSM1KXwAVxz4#z3Zt0SpWlpm~+q><kRD
z#SDyU;P_$XVqnnx+{?mo6XZzlK7`(4P?m*g1MLJn1kzT(z-S6CRwO{Gz4}lbq*&Ym
z%Gn%jij$!X&FnrF4p1W1?1C~F7?eRpKPWE18IhBL7ZkOsET9x41xltHK`OyHF`t8h
zK?pn)Aq6U{K*c&}9Dq>@R2DN$WPzl7DNuS~n#dspP7aU;&O{zakuM7>=9wm@Xuj=(
zBu!1Beh7m>l@(;89mqzxepn{B3AfP>#YQ_68||PrLi3sfC<SVB!Sb3T$VkQjP4j*h
zj=!LBIxRksO@U0-{VW{sKppTo?>HG4B=XaW85jeZHh`KN6B(qrK<Ph_2_(fdkwqLl
z<`M|5b-cM47^H7Nq#-o{52Qp7X8Ov>z`!(-#S%1-z!<{Bz{S8IU<BH#C&vM@C<3g%
zhKqqgHZ?DWff2(02;%3#c<S5?44@(^60A0un}I=daz6`)JSzi(<`x*^2aF*<0V-uO
zfraA<DCzjY7;P}dVi;owjBymk_zl(0z`)7!g_D87ij(CxCj$d-BLf2iFDQ()W`q3M
z#H2Zqg#)y&oN-Pj7Xt$%G@6(|t*Xb|3=9?r7#JAhxfmF%L7S==JD5O<SeZd<z-7}4
z7#KU5D!CXKjCmLsG?z|<IG8~*55`gkMIT53I03RUaI$~|Gy*|3cY&%7R%XzC5{-Kx
zfo_NZXy=H=Uywi#L;$q)LSqU@pcf(l+IwOH>T-ZEo2U(_M-Ia50ybBf85lsAL&_G^
z{{r=WIT=7Kh9K~KM>U9qj9%NZLE5~q=?5n^1_ma`pa3(dLCeGi8sLGB53n|YibnQB
z3=9k)^`JmxoCD&q`N1WaCNi*n1EoK9P@fdk^9QFaaC<9^hk=13rMQHFkrULh-45aw
z7bP<=a@_#!7T{%I;4EciU;woUS(!m=*|}a#WZ`h+U|`^qo&;eqaI^5RfX4QDdB9C7
z=;#Cw3uq>Y50v}(K_?r022J&X2sT)!7&_p=2kP_ifjSYaCqS;006AZO5(@`tpBCes
ziHr;k>|oD;C0uwJ7}&wSkpTH-3y2H$jsz&r-RFgQM+)Sf06qo=4zPEmLEhozhk9or
zBd8hxt$OFmg!+Q3AIe|=yB4HE0OVSB20oArSf7KOW(sQbU!KIm0m@&Db5xiZ7z7jJ
z85m7LP5})NB_TL0>|ke^f}AyppMilRk%7@1<O*&91_q8K21W}ICsqLJB#>FG%%G+4
zT)dMZ0n6nLWiUWOry3Nao**YwPljcU889b!f><yoKshWRJH0{HtcTj^1LAyu**On1
z3dIas<Ic4LY8BUYD1(8A1r%!#n+-rV$ARL7VG0WeXwsf>jw~|+16wdy0_OYVjCcmd
zIFJM3i7XD}eM3P81|cSp(gcwGdjuI6I6(DPA}Dci3PD2vWFRXuXh}Pl`xHnBKs|mF
z6!wL+%nS@^Q&>1aRUYFU5RV<)L@NaOJYI-_K`=R<fw2&3Jx4MFV=*XYt$~@}4C-Vs
zgO;{)&4-!K!vazQ@g!&(iLn{v-eXf(IGn-N&kbe<28b=qAX~l*F)*-8gFFJ}DhV?%
z2!Wf0tsrf_!VC;tucokYD1nwKuxfzRO$51<b1KX{2^N@n6G7%x2s1FSfz1PRnI^Ju
zX-$RcKMm3k_NUKO77oxXJ>#5oxc)gH{nLe^zMcd1HK;)|59B4Li7Xri42<(Zs<we9
z4p}FHj9UeAXBFHz+u_Eo0x5hb%)r1N1y%>*@`%8^w+5umT!evvYaZNr7eJBn8sxpb
zQ&~9vfrHBtG>Tiyzz7yj5@BFq69Ad^8e|%19x@)x1F2$~$RWB0#Cr=e0bIs}gSvXm
zptbT`AE!d%pG$HYl;Htm6ikDJ4_6<Q!N9`;G6I}yK}LXcEe8XiJ1YZ&*bI;r;*6k_
zyL%c7M=02pXF;udaEStuVVVf-g^4plgHZyUb;ZFQnk6C(43gjyQj!r=rtpYD(<{gr
zR%Xy*b}okL5NATttJrT)(5QlS3ruI>a0T0{#0KkAs4_yrgF&)@fl(dIF@qTjQpL*b
zvzUd0%N4~?)=eO<>;QQ+bUF)1IoQmZYzz$SJHZklBSS<P7}(9>+ze3$2BG;N?k-UL
z)quDKAntAuca|svgA^z`a%3_v?gxpi6=h)HS~8u5V;N}3jzJ7mUojeky>Vtb3wX|%
zan2Jq1_lXmzB2~9{JJOugTw=nhaoDzi83%qgY$$bSf?mx&`pd3WUU)m;Ky_p4$y!J
z<D6DdyA>R=Zj2y*F->HU1sB$CV3QrhV6{F(Bhy3<>31NDJiz9Jh(Y54WDF}aXpy{J
z&I}gtC|wad1B0{z$j$(;+9ELq2Cl{#EF3<dRYY6{Ga%8$6$)iQ%6PF1kd73vj!83E
zI6&=p#yK_|3=FbhSEhhnIYA86bOu$CDPU(VfjbkT6Yk73ut7V-U`~PXPs5xIGMAOv
zW-$wgob*f<4mHpcZVm<p=|dn#<b(Cz13BAjCd}DKp|0h61!X{-Ee~p9fH1Rw0;n|r
z!VI8(CJTcBXgm$ls$gV?v?^eW7C@aACdfz{>c}DUI?xy!4=B;HKwBN4VKOFxa8N51
zGE9cLG=Uj3HpV0cN|Mm^49uV*GA8g48S7_|f249iYaT!&(rkGQj8dRg8Eh#Gj9_8*
zJVORX8IS_@JOc(sSum@Rfl&_3D1tH=IP!9;7#Ouc?qd838d|GhVAKLD$zxzN1PL>6
zin22>F#3T^2YIsy)c&0V8s6Z_g9?8XV_@J;fpVB8GVr9&gyhdHps}bV2F5Iq=16e{
z240Y>vO(sTf_VlEj5#3Q6c8`PfPpa=#9JZGz`zGu6VW-7g#)y1fH9wc5$MPiaRvtd
znG6gJx5OD31YnYas~H#=K8Z6h2!f`iStS@4gg~b%2%P}+MHv_bj?QG^04*ZnO)+F(
ztOS`aA;G{PT+F~&1@a$bC~qMHV>QTyJ`xNJBB0<rK9hyR1ymMP34?~mK#M9;Bp4V3
zVB&(W85kIvK%G^HI~8WJaL9qwSBrw&33lUJkOr6p*o_Azpl*DC?nVYqV^A3P_%JXq
z?4QNL5eYJD&LPmUhdc&Gu<(BgNEm}Tpt*$0pcK#ta<;l81A~|q$bfzj*B->x1#u^U
zxZ#ov4B}sBv2cK*mqFqONZV3Ss*{)v$<~Z>{(@Fk<S{UUg_$OT;}Xi|5I303!U2kH
z2G%zqt<yoX4U7t)W=b9d<8+XVL1_-mV34>8QnChQy2)%74sEbEK!p%@9s?s-7-~9{
z&A|t<+Icn$2WWXB<2rsZW(J0QNd^XfUS<Y{c96>hVAeB8$bkH`8C03X!=1i^nSlXh
zI9M2JIF!vHUOpS@YgRRo))r9QGv0<ey#*9FAg6;F43dvPPTvJGy?Qna2V_<VWHML?
zYBH3~!3VOo3+C)S{1=%S7#4t>eS(>RVF$?B(_vOKFfa--s`3eQGxJIF2{H<?35bK{
z1{k=x?YNow7#NsUAWTqCMUT;5l9|tn+nQTl(o-0u*g;~tlO&@sXmJb!M8;E?NrHia
z%>=;}XJBCOY+_^(WHc0JVBp|q;O6!eW?<mdW3ZRBk<8<R=mSLsZijF%Ffb$A-p(kA
zVm%8h!afNG23CZ9Y%u%Sp&kKs4v4Z^3~nT9D6lYsJOBy>u*WqRnE7P585r0Q=Ck8-
zDhDWNJcUgpLE*&7%?R=b$RI9|ILK5`;BX^6z{AMsDGXA;tH|Iftk2EBz^BFlQp1nx
zX8~kO(PBpsVhsa>5W*6W^}?{g5n*Lu=73lZ5*I~MCeFYh22#erAP%anB#^BExgDMa
zBuNidkh#o!AkVNMLXQ>7<X~W6L$(Y(&e>7@4;~ohM0Ge9A{e<rc7bf-frK6}x@-AR
z1@icCq)3!x0WuV?2ZR}!`M9}3Aq$E^c3yZeTW~WlaPY#D7>LUWi)k)cOd}kv#|X(L
z>Zs|S7b)Jrl@dIkfl>!jj0&IzmY@mTAxz>73__hvjEs={Dcse>$iO5q(Fs)7fV{`R
zAc`CdXemn!$sh@E5&?xVr~+e<M2!n6B(4MlgEVSz;|OeMQa~$*kfVSV*>Nc85xESK
zU|?WJvR|Bmfdi2=I6>Y7IhzZ_U|`@zcN!0>0M4XAglj=IKoSfaNl62w59~zL(uW&X
z`tWElFmr&4Azn!G=0hYHPhkaaP~t;M5ey6h2ziu16GTc-pjH5CvJpm&Z4r>G!07{=
zI9Xwda~h;h5QCb<>M0CLWa3b>pj-(gSqTOPNl`|1a7`k`3NGEGkyJ}CFvvh{25FXH
zV30-PiZd|CLE{!AE6%_m4@=G<Zz~`rXhle*PX;A!C72=x24z^rQ-NhXRpeBKmgLny
z?J9Msjoc8wX&`YW7#K7m_JHa;Ex1YW;DJ_|+R!Lq1y!byDAGZAnt?$V5kL$KdR&mA
zf|Y?mA8sNyEWn{A8bGx}9c2h|6s)E(;${pLXJ9avWi%8HVhk0J;En{R3KLcaLvZw%
zaxoYR3o<e=m_aHFP}rG6gBfa|1;`ALxFyJBD{gC6Phn7+vjSBN)(A0B6=H*$XBZf4
zQ3VKPB2bNwoX?Rf2;=}jiyStjAOK~0BrYh^qxuJ2TfhPcy{=$j-~lCXP^RMr`43j>
z!qSQWEUlnt8E7~_!wfykKqD0@i&W7vFo?nZ1x^wu`4TzvNH8#fG7qRB22Jpwq83!x
zL%C9*cw%6XhPnhQDg(6|#06y`BrYfmA!1z~HKrIC6c7T0%V}(p#=*eA3Qg_crXwV^
zgW?M0YH)K9R6N5u9D0n9<_IEda3bqR2^ub_N1#E<jl`8;VBkUcix)Na`9N6#WD+PV
zfR<=OGlBp_2Lpqk2~<P~#9&}Rk4j|ypj;se%1R6jpehj*H&FM8Bgz7lwi8;ym4rt=
zID|m%0=KLf7#Kij?lLiehW{BEfAjG&Fhb4@2K95HyK+D~co-N;@=KF5^pZi{O4x3m
z4A5j20|P75lm-?KNe){ECKg7v2(|?rkxU#6jEvr(&OH$(r{<LuRq7>!48t%PwA^3P
zmPwR>kr6aG!^DsUN+b9jisWd0J=hK$1_qePnASjLbn}YzG8mW`7*ar+p!71p`@$Gl
znLvx?nGZ5B+Lm&}+OFk@6<(_XLL8AQ!k@vcwJO3O4j8L~r1lGQ2&)M12T6a1$bl3x
zF)}bRc7cN=k2pWToC0w&cxx1j1DO!M0>?ygNlIc-I>Zw;Nu`-NCAyh;phZlebxcg4
zMV!psjP@K+-Y54)G4U`kGR_9O2Gn208}*P7Wnf6o&nwQ)NyQRVkbPTV$00iclr%sK
z6Pa%^Fs7GsDB3a?MzlO_F7;*(jcE41!CX|*%&~Sav&=l7=H_M&{W5093ARuD9lSZj
zm{=GX8MDF8^THii7y*=5q6Z6!%zOwFGax{#(U^G|D^6aI`lz!u`qZA%Z%nKVjEttB
zF)D@@eAYqy35yR%U^9Yt1E!>;ra|ljDS<g7xumin6(J0D5iEUyHG(!~K~!Km6toVB
zS&wn@^@+@1nDy2+&uw8|U*E*c&7sijbNzGVmvanEEX-^iCq6MSv9PgqE@ILYU|?cl
zV&j;{#v#mHwuYJ8iwTten5%4dFbjBr^Ct`2t|m6`;yvK33fe2gv<qZP6I*&Flc9Ji
z$J0`d(lQQxj!C;Yo^q@`zHT?iQ)a;?4g-jKwn(rc%mpAlu^{5=0<g>)wn&b2twqdJ
zYMLCp&oIAY_OkcpP-4DT<Mni-&(j6=87G-nFg9`6b3Bg*fj7;i6U&<eIb@h)<}qt}
z&E@cINsnos++w@UrTOz*4&UZek<rZ@>sxG@d+VB*zcF%5VD74GV*bU*5y9M6*Tnpf
zkz+!OE%X1{Cgv6<jtR_vYMYolm^dPsf7CWH_kcvc)HX30NpVDTC`N&ha1@8I0Rnk9
z@8xJ^3KL}(na82eTp96M*EZ_2uC4KPU0Z|Cy0!+_b#0BFX*n2t)^*}2FDvD!D~n}P
z6=9xN-^Bc!L2o|Co=`*PY4s7z?-}$m7BeY{FqcO#bLug7)ax<-W6;ZJW>OPnu8J^W
z{!^#N+{dWL5y||qu7r6Kn02i#g84rqhY<6+`U%YEYMZ_`H-m%F3rv=SNDeXP%3ZA-
zPTtI-5f0uQD$HFhUf(vAad>BO%m)X3Jt*iCK*aHFZ6F;6KB-J9f(t>+b)Ym52_lZK
zn-5a*8AQwlNiFa&N{tNXDBc0$7=x66)y-XZYC$t|j2AQS6OQ@Jl{WFrTu%&`c~5kl
z1gV?O#-YH*Tm?#GEF9_#Oe`#qK?brtVawnUVPa!oWZVZ@GR*)wYXnCz0?HxagbvF&
z@Z5rw7eIvtXu4UFLkwgs+X*&~lPw_DDvr~0{c>J_m|#ILqlt~<l+VPu?RIO6=a>ee
zO16}Ol>Fs5{dtG)Ze~ue4InO?7aPY(9}w#p#~E8o5QD9REdW9{fxN{Q8TbX9&Re`e
zqANMRhG*?g*qaIB^m3eCXg+yw-1^<1P~)&>JHZx{d$N?ndhf)X$mreSJK{``rI@YK
zo`bZ3ECmHWBU=d@$2aeEnAoq3^m67>8)iX{dDa{)8Mdce+Brl)5y#lT@io;i8=MNj
zj_u?4vOu4?yWVRpNBSv{c0UebuoL8`UNUBW%h1%yq$JABtH)sol0?|&#m4c4L*HlN
z+Hz*TdF#P)C2SlJw}9ompPstOAzbDSuBk78OIkC0MPFi3W=TeFYDs1?wEQng$%K`2
zpr`{4jx(QQVC0BomiF>v-dN9Zg84jy9>))kHs&4mdXcTx(Pg%FU}Vp1(!{*9p2Lgz
zHUq~Aj#B0-CQn9Y&QHvIpE$h1P6g!!7B+A+vO(eo#AX2{XC^id1#oPYGK-Yha(MeQ
z=R9E+{nYFaW_v$jHv6<2Tzll?=cOxv3DBm<+{Da01~3myl;#y@rst)CHdB`{xch}F
zI9pnxZB13s%{4Ys(9JE*Pb<+)%gIkHQP9mTDa}i@O;62BEy_$*(9KOOO3tv&G_x>M
z&`np+^;gg>E=jRX&nvaGRM1V!%hxR~NlebxEhx$_Nlh-vFJjQo$j?pH&&n^(C{5IN
zNiEZdY^c^xtw_u*$Vn|`NG?iEEJ<a6J1;pSv4|nDC_R~>I3vHPL;)@V@>60_dKu*8
z7>FcDEG;u9H7_wY72aHnFD^+eDuHc81~ujMVePH_g48^Q<cyTeA_nleGx1LO`8f>1
zk-_o4zK#J5C8;?%42dZzMGTpFrMXF|MPR8QS4S5Y&me}(yv&l!#GH807HF`9YlN#a
zLwtN%X<l-CJOjuba4C=;u$pj3&kzVB$TP&1A-6OyH?aUL;2h-Y7~+cJ%wqVS@$#a~
zl2ouV-%vl0(~45TJL*A}fQ4NnJVO|YQWH}c3i69HLEEqy$`dn77*Z=zlfeo?Tzz~P
zazU2mCW1Ekfjk-H>gylo%8;843ILFRe}JnWShc5LsIQZ25SSh8>gvr<oSK>q=6ME#
z{0{OMsA>lbc{ut&{N(K8AM6TgJ;oO#=4B=`fbEJeVJJ#1DND>@NGeTBgNCBB2gsbv
zVvyCKegCD!49Pk9#Sl-rdHT2pdq%l}jra8isRa2Aq&7FTxHvIAl_5SJ+`h}qi!V!z
z&&e!CjbKQrn#=%-3vgh71>)i71R!ZIC@q1dv0{d@i~`633K@xcDLJVOknQ{^k%DLg
zCYDyjGa$}fNXscL&VZW`4_YRfn356?HXKC6gVsAEoLx{_Qp`}AnO9O!QWReTW*HmB
zgJP^8CowZGH3eoX*y(!73~5E6R9#$Bl$Vp5#{des^vn_l_aOh!08qd}(jmw|Gn4od
z22c#emoTIk<(C$Kr5OqmQ@~D$at-naTW1kp!jNBDQczkFpHf=DP*$7=@qBznYED6F
z5kq-qN=XJoUVce@VtiUoVmd=oVsUDG3WKwUV-Q1LYI<TxW?3pjN@jXyNihQ`x<VKN
zd_sd^?gq63K}Q*6=9Q$TrxwM7bVH1YU;tYbpHZ5dm=_O<S<vwh5D%m!g35_vhTs54
zXIBQ0wZ+g_h=&@)kXW3YnF%o|AMBCb#0s#F)AJY#Qj6kqGV@X)(iI3#F=V7x#HW<z
z7C;;f4hc`c5MRd#hO)$*(o_Z?e?NB+X2>iCyN)5VI37|&G6eXC`ne#C0!M8@Vo`Bw
zJmMGzhJcVD7f(005SVKrM-D&(m?7B1KPUv^?KEUvAgAY~=B1ZpFvQ1$?M-9w_4Er3
zW+*61P0j=z@BlhC1Dx55ONt;zZh+3$$S7jSO{@T=gxu8J<lF+#83pkmZgEj^Jm_=|
z5F30V0+<6jcLQ<i0Yh;~egWtx2Z)Z6qJpHNY>+*m<2&+FQ$a}|(&y2KctbB4tQvB}
zLOerpc4h$s?8F3!`H3YA5REV+L2d#$4RUr!a&bW(NFj)V9wCyESP8Bjz#2;Ovr{1o
zN<d{XM1~<bzn~HvQ^h4k;3G!z;uDjK8RFw}^HWkXjTz$OOQEdd-24<X6NZ$`vK)r^
z_>{~tkTlc_C>3{UN@kgv2}mbY5y%8H6NW;t$;A-a6fj4bfq_8-+%71996-Rpz>o_%
zn-0`UU<hD<0?<4nXp=o7LP(a8fdRCY4oOIlk%0lU^%_aYm63q~bO0fe5NKOhG-%)f
z$t=(k28fNC3=9mQqZ^nRCJM}l+76~TA@U#!G?d235DcO~yWv<EJ~IZu)#@`aFoc5D
z27@Tbz{f<m=Rj)>KvyC$F-!y-3nF+K85ls`VPpsZQF5S7`wSB~;6{Qre}fJaU}Oje
zDF<QD&Jhc+Edd}3<YGpKFc1Y=h>GeWkXrB#5r!ZT1yaw<P*gu3!~kt#V`eC>pATYy
zrs|m)itFZs7$CF2G9c?f7-S4c3nN1yhyuwoGK7LCn3aKW7lT9+K}#JN0w%KrO=bbH
zLF**h7(O$9Wl)_DVt0a8XEKCMW(l9n(#^=ga0-bJvJZqo=BR<=DiB1?0&h|M%osQy
z#F__@08yZ|^&n3pTmZ5`46J<Og8KO&7RUfbhENdY2?^nrdJw}GY)k-%3WSM+7!hFc
zP!N>{W(I&Lkj2al6I<#*43O0<3?K_Ytbbrt!61r-iGhKcp_p+#h+z-fc!r2NP*{L2
zgkfSZm=B^sZf9ngIH4ZoVG!QL$iUza+GfKL1mc1)Xa|ul=nw>kGKK;MnfV|#Xp<=;
zLl}tS2kjPPnD_&fO+d;SK)wfg6l4d82Kk4PA-Io`fnf&3l`!XnRDiWGFff2zQV4cz
z0EjvaW`=^OvtVWbh`Iu1hJq;2GAmH1BN9Kzgh;T0AP{v4%nSojFttJOGy+na16B|S
zqCnO#F-(jB(I9&m83I8RNFPWT=EgE+1_sc^Qjohr^enIm!7yDQVVKf8%#eLNj0^#w
z?L03bfy4rL0BETXD`*ikLjZ_k18p#3n8*W{2Q6xs1Z`1bn8*O4UBGI?Kon?K8zVz-
zFc$+u7#HZmvS1LE0%nHgaxpLzL6|V7AQ{C1G77w%nIRNJF|mS@N-4{H5F-S%N{k^C
zM8(0xK@4`#+6snH5GBbDRS#mwLBv6n0ZbgkFolSNC^wimh~W(p2T?H)agO;QMjS*O
zMCC)oS>}Tng%EKN)dUgem=9vKK*T}RRERjsd=O(6L>xpN05bzXlqCl!h(bXWXc-$b
zLn+IA5F-#G4x-XPb0r{g5F;BR4x$=h;vhy7L>xp-g@|*^2Qj8Y#6i>=h&ao95Mv!g
z97G+2h;z&bF%Cn-LDY4KILmwx1GIsHks%aBy@QE^7}=a)_k*a}U}iXoS^#E-f~Xr{
zW;lqt3ucCbC~<Ha2nSImU?!+O0H+AhUbYXQ{frEsia|?Ux!4#OK=;|OLHVEsxS*BG
zFuoTX14AquXwx}FeK{KgLp>6IDjNgCTqOQ>HU@_MNPJMj1f@!td0<C?b|J7ZFo4{_
z%rG%vKFkqd4$K8$4$OKm2WB^z1G5;+f!PY?z^nvwknMwJ9S~Io&QO6Msus))22s1g
z%s>!z3d{@!ZBPYe6-I_&5XA=0B!M6bw4;=fAs9q~@(j4h1u+u9N`gUDGB_U<GtLJw
zjzGjg6v*F<3}G-|Gctt1{LIJ@2J<l^Lm14zj0|Bg-!d|U!Tid|5C-!pQtd3p&cFc5
zlgtbgSJZ=+iGeaAnB&aOzyQj9U``}E0|O|_fjK$s3=E)r2IkbWGcbTM7nn1Noq=IG
zIG0UaQNNF!fdQ1Kz%n=485lsh3e158vL^=v11L)|Gfdo3pUA<$0Ln*T4rr?eDD!|h
z6F3+cKsg4?S<b=00Lms{&K?d122kDrb3lws9H8yCr3`G}b-t_42k}5z1T6iMgMlH9
z6I3Ei+ySq^csUsuL^wgol^L|LWWFUQ14Ae{Uj%@tScv)txcbGM3=CJm^1(1qJOFL1
z0cRR`8}KC;1H&(f5QzHC1-2DYT>s}{V3^9oz`(>Xkpo1};bCB4XPC&r2C6VYoVQR(
zm>r7T3=B#<psXDRqIAK`U=Rh`Tf)XLk%7%#YCeb^0hS5_Q4@JU{(?v?;bCC72$2F&
z*TBqR5cL4e3<FV5!A!WvK$hBYgIwt_A4I2dgB%dv!p*?Y2VsIt1)0Ib-~g|RU@Ad=
zgDC~E5o#xb4j}~lES#HxAscLi!F&)6QqRZ`45C0bfNDq({R3=UFo*&jP6QGL(J~O{
zf+$d+FfxR}0)&wv7%eP7wlgvW@8@A)0QnST1c*lSF(}xXc|ks&$N-{Mc|jovY4?HH
z=1@5h4ca5a25l3%@iH((gVjRXkYLY&7US|VFo5*2F@X0>%?IfNsbgdaged{hF5q6p
zMDQ9@P%{$TmIX0D-3w6IfoRYvi0lkS3<|{zO7lS+Q1hIFp_rkFLB>dCK8RNhI!Xhk
z1Y|G>gAR1DhBUuHlnul#1`wSC5e88p8$j)R5DhYlgQ0+-h(Sr25pFOWL<AnsAag;g
z85zPr6hu=Qh9<BGTvH?T9u<&Ppq1YbAT9t=pmPgA!XO&F(SacVM1dwjLBb#!bl?di
zLjZ`92M@7NWB}2M;AUa~hyv~N1gi%5oPmJ>WFJT;6T?In5Dn>t1%oK4Qh09%r1U8y
za5z9T=y(M-P@XiDnGa%v*2{8$0(T+@o6>v`?+54{H;@WQ41l;GI}nOMJkX{tMuu<@
z1#%!GqM;1h>j?@2kb6NiC=eJK0zecf3_!vl8e}&kLjZ^Z*?@=`5DyeWu!sS%K{m33
zN`oQ>rTHKZGbC(46e!q0wFqc0J?I=Y25{7rGsw)BU}OLXBsW}0nQ=ZMWWzuX2L%^W
z&lKc%kdr_G3!*`e;bfS|!Ujn+ATG#ycBl}NTY_P3VPhy}C}&Wb4{{gC1t31i*&sH^
za!A?+B|#7m<OYxmkPc|%f=^ycha?0J5S<0_EQqQHGs8jDT&M~Vy%g;65(!X2Ya}xt
z#9hk>sxb-}6iOu6l;(r3@H&L5=m;YN!%2v7FpEJa@qmnDWC#XPAY(wTEdXa25D#Q1
z$h8Fw2qO_H5GKOQT7-#V2opgaD3JdVCW1xaj^qG$u|O&iCW1QgU}xT7WMKFSc6K0$
z`UMFE1`rKCT#6wOL}`MKYG9bi0HTAy9XWW(gfJio$p99F0YOLxuz(D(1seeG34+Ya
zftb$$qAS5Y&BFTmAVxK~i&!GTW+*cs#0DMP2P*17^g_^~ehi=}5nxjSM+-;<bovxG
zLx}(zNTi5CW<E$@9aw1*gF*>RDM(~9%qDP1FfcGAF)=WJHt#Sp1b`@zB}@z@1|S+_
zG$TU*hyoc19&P|JK;|$q1c4}!aY$(&bar7m#H%0*<a$PiU=Rf|n~@<1M1k}%G6aJt
zi1r{5wH>T27)0#=hfE1*uMF6gApR+^*hB^peHpAY07QWftpgPYAR2st3_}2j;sejm
zPh<em!r;Coya95Ai2;1F6C*<qsM8J72+FA-`a9U%AP~h4))WY$KxQy91c4|Ch$z@m
z3=9k)ZUEFK5FHAZ4g*oqP+=@eSrAIYk(9zqTV-Yj2GC)8po$nogOoEe1cNA$a*#00
zRFEwhP@6#X9Iyl6IR|v6%@(LMh&}_Bh9|-m%nS@5VUUR+`Y2dB07RVv>oR~>P9UA2
z!&5*(4Wc>0P5Lkp1v-lZBn)#Cl2R6g(r_fDaGzdhW?*;>wFyLnlru5}gD8-4kh@@}
zf@~>;_ToYGX|Mx=LDXk3GaN*Lc1JTal-JJ(F~FPa89*ymz=rU$GBButPNiX($N{1a
z!99wy`uQM65L5z0hq5v-aDi&G0tTfr2BrBRegrE611GqamjMZZxG`wTz?LvDFvzho
zFa&}-C;=b}WFjbdKy(sV7#{whLkY?tLep6p7(h2;BW0!KtPBjG9u7z|%xsX@d5BZt
zfq0UYfdO<X1S3Nb=->+x(B=$8O?r)$fk6f=1P_Q?tPBiK!G;*j2hkv1j10jbjbdPx
z@bn|c#=rnN#17;H5Dn^2A=T1I(kuvRcp<3<I=BL~cbvgsz6sPMMuq^8N)M<o%wHgb
zw}QnGL#&_!FdjhM1EN6t{*XfFAR7b239xJsh`I%4!o3Jm4C<DF91gPsB<8~oZotCB
zE|8spVIFvd1Kz1mU}s<eolb$&4=iJ6V3-V61+PIshJv;+u|Y>hL2S?=R<My#5F2!?
z6HFe&4g!yiLPkzO>?ANB(kceALEFV(`a$M{uoMFW1IR2chI!!95WF!GBmqijpfj)_
zjYQC19FQ_5hKV6iSq7Msm>57UVu&b63^ddW9b|@Tfygm1fE&J`HDHY3g??aRP+J%z
z1oH@35Jf3GIm479#S+Nd?O-Pcfv7GpGXO+^&LC!F2m(={uwX>wQ%=y)ec+%8n#>Y7
z86H<?W`WKt#$pqw%m7){4{okH%m>jBrSKTO%)r0^Iwp>Z0nyt6iCqV~E(k<HrDI^e
z1xa58O9y}`s5HE<28y{}u#+LN31WkeRzr_X&?$Gzk<`JA2W|F;hzCw)2}XDsbhZ=d
zqGR;H2c0m=25uxk`d=_}VB+iy!IN1gvLFlswLW~YXn=`hXaF641R55Fjf%i*fDL)U
z##>;6Euahx8rp&lv%tn!U;`}Z=45a(F!XaWFihcOV3-D)jDcD(my?0vJaio48j|=e
zP6h@(E(Qi+E(QisE~sJ#1_mi^$Y=qm4-4wB!en4QR8X%n2kD4yP}#@E#=yYM#=rn7
z_h5w{OdmEHv|tq^&J1d`GcYiK&LD>HK^ra^7-lR6?PUcGV}Q2ZGcYtPf$<?}7jz^D
zL_I5rVgMau2VyWYfX*obu^^b40d!IegbgB@8NgW{!~|nz2BZK1^`JpVt$<}91TzEZ
zXix|nL^3n*fG9X-W<UxEuzo(Mk044|7(V_-wgJQk^<*Kkpo8%~{+DK8U;rHe4e|*i
z0}}&io(&WpFg|E$FtU2kd=xU@lYxN&w8|4S;l{+k$N=ie!;Y2&@zM2zvKT15K;<4I
z0~<p+%rMX~cMKo@=Yxu(78VZBtQJUr0|NsC>?k!5zZ-O^GW5JN5FfPhyB>PX7Kjfz
zM+0;k6DUc6{IiXLfdO>z3V4$x0~7fAWYFLjj1M|#0(1@wj1S(BzZkkHlYxl=v?Uf4
z-=K{dj0~&{_tD(@f`NenbczWmra|_B!Vh!|2q>mOe9%GZpffmN@}T2TLFZ$@_(F^f
z44@M#V0;D8-DZm+XK{n{gXT^_Cm4X@5yZD)WMBZD5CBsTnnVR{?uYR~(_)~V>oEI4
zb7P<_;V?evY$})+K<S~8k%0lUdJ9zIfx-`T1UGCOE{NaH$iM(Q)l-OpkzqQhM-APA
z3gRzdWMF`u_XXmwWMp7~9p3=rF9MxP4m|@4#0O2H!H!}9@vky6Fu;yV0`Ye-GBCi7
z83yqWG9u2Q0r5{TGBChS3I*}cGBPkEK#v^;@vks4Fu)Fb0`c!LGBALS`UTC^g80uE
z85lr^?t*d>hz~kD3AX7K#Qy<079D!vFNhDCHH4ii3gWXfA<kL`@p+gS7+_m+L3}YL
z$TbF_Fcx6=_#f0&gdI2rk~d~zV1S){0ODISF)+YR;{fqN=e>g#YlA9v5Fa$*2s*$T
z=KfG71_sbE+%WfpW*}iFk%H96F)=WJPFe=#a}XcYe*>L54O5@V#J~VLA05We0~LAD
zBUnJ{OPLrLKu4d$<UyyU!;UHi$ty7-u3-T2tC$!VV8=&*_@J{;L5F$6+}p;)zyLd-
z0VLnY#J~VMvkJtYj&zVZhz~kJ26i3}h`*GHfdO{V28h1~8or>@PeJ^RObiU5HQk^o
zRuKOn69WV6s09%JBohMz?8I&m{~Qwo1MILH5Fd0%G3;~}5Fd0HD`?R_=%joQ{}B`D
zBq<gS&{6gvKIm{z*#2%1AJpT79e)DigSwiqBRW9*e@qMvphMST;R!k-8Fmg8NFH=X
z4eSgW5MPCvfdO>TH7x$LK*u~m&*TQl8!$64z)pVw@!?DTVC(u23+G_V@$?K$%|Po#
zKnud+<3T)2$U-%}WTaL7kR@F3Ra>bQ(4|;<hGvFF46p@F7z?G47EwVKjKP;GLAj7c
zH1M^7dWPm^=8zRiDG(|GLghoK3I^yZC_O_<V*}8#8OYr!NS-mZKr+qL0>x{V$UHLx
z6C{;phA46<L1JcZhOE*8S)VzIDdvX84A>UcKv&PeR@A}Q;lNim!B;Tlrsjf|G(p!t
zLe~j_m&8F=Ho^lLys9xJ6R`#pvFHc12CfLc;tsO9F+RQ&y09lc9<=zev;?xY47>&u
zu~-kbj1IQ22)xJ+x@Zxy*b=m~610d8x;_-V78GP41IV!%MUdr{#U(|>B}HH-f}$x0
zw9E>=&<whi6{J450Hh6caT0hLF2pv(YDDlQOQ6e^K&vc4tGht!xk`$_i>AN}Q^B_*
z!k0aPY=tbR0xj|aFJc8R9mBey4rCl?u^4!fCuE6bF?7KfgI;lEZb@PigB~biz;p(T
zRgzj!!k|}_pORRT2%|yD4E0P<xrPjS5H(4~#SD7M`MIEbkr?zKUQ8@X%u7!#hH*jn
zBf;2-Nl8ViWiTFi%^p+}C`6&mocv^%3aCk-I)xYvYSV$*SD@A?sI3dSF-8m|2-OUd
z12MrTb%VQAkT&odX$FSZpoRoU65JkxFhFe@kRH$pm!P)s3}preP`d{r3u;G#=E@it
zK+BI{>OgJg1{DSdQ2h>52a*F}P~8TiL9J_0+bTkhfdSOMf~kYFvKbgar~8B2Eg*HE
zHe-Pr#2%PBkQpF0sKW|kgHFE(@j>cLK@2Dc$$@Y*xWfk(WME)ess=jG62S+l0r9}Q
z%s>n%KB~^Za1c}hK>09rpzCB{Y>-r&4+FzOq$WE|4!o-fqyUQ5BN!NNfIJ4}!_<N1
z89;29KmI2$FgPH^2S^TtK|8lVG*ml-eFg)=MM)SB5k{cX-;vb`G%+xMCo7;zVRE3l
z1{B6nVFra>1_to)^iTnqIuH$NE<lADK=<o_Msh&<O`z!o)Q$$VRgukm(aFGIfg}Jj
H2V@2S=C@@d

literal 0
HcmV?d00001

diff --git a/examples/touch.c b/examples/touch.c
new file mode 100644
index 0000000..9c4ec39
--- /dev/null
+++ b/examples/touch.c
@@ -0,0 +1,12 @@
+/* touch.c
+
+   Creates an empty file with the name given on the command-line. */
+
+#include <stdio.h>
+#include <syscall.h>
+
+int main (int argc, char *argv[]) {
+    if (argc != 2) exit(1); // very basic error-handling
+    char* filename = argv[1];
+    return create(filename, 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+}
diff --git a/userprog/syscall.c b/userprog/syscall.c
index 0c4d8cf..dfc83ed 100644
--- a/userprog/syscall.c
+++ b/userprog/syscall.c
@@ -66,6 +66,8 @@ syscall_handler (struct intr_frame *f UNUSED)
     break;
   case SYSCALL_WAIT:
     syscall_wait(f);
+  case SYSCALL_CREATE:
+    syscall_create(f);
     break;
   default:
     printf ("WARNING: Invalid Syscall (%d)\n", syscall_number);
diff --git a/userprog/syscall_create.c b/userprog/syscall_create.c
new file mode 100644
index 0000000..12b4962
--- /dev/null
+++ b/userprog/syscall_create.c
@@ -0,0 +1,15 @@
+/*
+ * The Write System Call
+ *
+ * Authored by Joshua Saxby
+ */
+#include "filesys/filesys.h"
+#include "system_calls.h"
+#include "threads/interrupt.h"
+
+void syscall_create(struct intr_frame *f) {
+    // first argument is syscall code (already handled)
+    char* filename = (void*)(*((int*)f->esp + 1)); // filename is second argument
+    unsigned initial_size = *((unsigned*)((int*)f->esp + 2)); // third
+    f->eax = filesys_create(filename, initial_size);
+}
diff --git a/userprog/system_calls.h b/userprog/system_calls.h
index c8b5518..6fadcd1 100644
--- a/userprog/system_calls.h
+++ b/userprog/system_calls.h
@@ -29,6 +29,12 @@ void syscall_exec(struct intr_frame *f);
  */
 void syscall_wait(struct intr_frame *f);
 
+/*
+ * Creates a new file called file initially initial_size bytes in size.
+ * Returns true if successful, false otherwise.
+ */
+void syscall_create(struct intr_frame *f);
+
 /*
  * NOTE: There are more system calls implemented by Pintos but we are not
  * implementing them because the assignment brief does not ask of it.
-- 
GitLab