From f92d792743ff88cefb44e13305e739211ca4a9f3 Mon Sep 17 00:00:00 2001 From: Kyxxn Date: Tue, 12 Nov 2024 03:36:13 +0900 Subject: [PATCH 01/15] =?UTF-8?q?design:=20=ED=95=98=ED=8A=B8,=20=EB=B9=88?= =?UTF-8?q?=20=ED=95=98=ED=8A=B8,=20=EB=93=9C=EB=9E=8D=EB=8B=A4=EC=9A=B4,?= =?UTF-8?q?=20=EC=B1=85=20=EC=83=9D=EC=84=B1=20=EB=B2=84=ED=8A=BC=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BookMakeImage.imageset/Contents.json | 23 ++++++++++++++++++ .../BookMakeImage.imageset/Subject.png | Bin 0 -> 5667 bytes .../BookMakeImage.imageset/Subject@2x.png | Bin 0 -> 15923 bytes .../BookMakeImage.imageset/Subject@3x.png | Bin 0 -> 29227 bytes .../DotHorizontalImage.imageset/Contents.json | 23 ++++++++++++++++++ .../Ic=_Dot-horizontal, Size=Small.png | Bin 0 -> 190 bytes .../Ic=_Dot-horizontal, Size=Small@2x.png | Bin 0 -> 253 bytes .../Ic=_Dot-horizontal, Size=Small@3x.png | Bin 0 -> 385 bytes .../DropDownImage.imageset/Contents.json | 23 ++++++++++++++++++ .../DropDownImage.imageset/Vector 17.png | Bin 0 -> 397 bytes .../DropDownImage.imageset/Vector 17@2x.png | Bin 0 -> 646 bytes .../DropDownImage.imageset/Vector 17@3x.png | Bin 0 -> 891 bytes .../LikeFillImage.imageset/Contents.json | 23 ++++++++++++++++++ .../Favorite_duotone.png | Bin 0 -> 600 bytes .../Favorite_duotone@2x.png | Bin 0 -> 1080 bytes .../Favorite_duotone@3x.png | Bin 0 -> 1455 bytes .../likeEmptyImage.imageset/Contents.json | 23 ++++++++++++++++++ .../likeEmptyImage.imageset/Favorite.png | Bin 0 -> 490 bytes .../likeEmptyImage.imageset/Favorite@2x.png | Bin 0 -> 857 bytes .../likeEmptyImage.imageset/Favorite@3x.png | Bin 0 -> 1243 bytes 20 files changed, 115 insertions(+) create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/BookMakeImage.imageset/Contents.json create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/BookMakeImage.imageset/Subject.png create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/BookMakeImage.imageset/Subject@2x.png create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/BookMakeImage.imageset/Subject@3x.png create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/Contents.json create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/Ic=_Dot-horizontal, Size=Small.png create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/Ic=_Dot-horizontal, Size=Small@2x.png create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/Ic=_Dot-horizontal, Size=Small@3x.png create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DropDownImage.imageset/Contents.json create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DropDownImage.imageset/Vector 17.png create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DropDownImage.imageset/Vector 17@2x.png create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DropDownImage.imageset/Vector 17@3x.png create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/LikeFillImage.imageset/Contents.json create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/LikeFillImage.imageset/Favorite_duotone.png create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/LikeFillImage.imageset/Favorite_duotone@2x.png create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/LikeFillImage.imageset/Favorite_duotone@3x.png create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/likeEmptyImage.imageset/Contents.json create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/likeEmptyImage.imageset/Favorite.png create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/likeEmptyImage.imageset/Favorite@2x.png create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/likeEmptyImage.imageset/Favorite@3x.png diff --git a/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/BookMakeImage.imageset/Contents.json b/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/BookMakeImage.imageset/Contents.json new file mode 100644 index 00000000..09ba9be1 --- /dev/null +++ b/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/BookMakeImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Subject.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Subject@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Subject@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/BookMakeImage.imageset/Subject.png b/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/BookMakeImage.imageset/Subject.png new file mode 100644 index 0000000000000000000000000000000000000000..c70aea316466e5ec197fae7c7f1bf9fae2c32f20 GIT binary patch literal 5667 zcmV+;7ToEHP)zO@grJZ|L%%^J2 zPEVijd;jtN_y64jQxsB4jXvCnM5^MQo%5uOFO`;*em?9u@_*z{9-Q9IYfB%J+X|C3!TqZ4ZJ}he%gzyLm zT|$vK>BG{pgZ63FHSIT+g&odNXgf+2B}Z05Vv^8-?uvMO-y%qJrL?S%3MNRRihgs@ z)*`pJz}%sgmPP^X=Z;XQ5ha9@AWQDuTN(4YKP7}VkECSinxxPIFs;iWtxM>uABDf( zR=SEt2eb{OE?ZG#6qT%4IJ}Bf(0Xc+m2@d$>;*~H(~I4ohOU96O>8Kpv=yZ#hDpMz zv(r%uWQ_)0QL7GdpAicE90f)}TVf=Lc7=YEo|8f1x#$x2AnCep@1lraI6%OMbreqylw$ajb^2eLp$WU-A( zsJ=2$lK{;o7@8UXjM>@w@oemufiw|mX_>1F@kbg1)}xF`f#plHq|fZ_`7bjTa}iann+u+3|;#%%`aVmGA0e7CVM2?uX$pi|KWH?``3DVd#52yq$QG(W5+(K_n z~52i zEY6EC+uPU3SnLNR&VH1UI|y+o9ydSiU9jNrxi+1gWSwYVMuzeJGEsSewB|Yt@#thW zJttYw&d%kr{`eDQBxj)jPyo%P3=^>%D;B*+6H)|F?c=07LjPd=olg|B(AN~OMu33Z7 z>^UeTsQav*DBW#h$ui@Q*+k_x9gKTEH{P`kmnP0)pD)?_&-9-`G;R`6KBNmi-m$K3 zeE;#s;np>LuNDH4V6A0slk9!S?OXR7Q-XYJcBvY zrs0m8Z-$RlY_jXM5@Fwa>@mEyy$K(tjxuC3X|d>^iZ}=j2`ySc$W@%OmrA-)l4VJ3 zD3o!Rbg~y-c?E~skHVtAS<<+1WFkMe%IC#~JMSbC(+gO0C)j@A0FIwHfiHaF^YA8! zQs<NVc^Kg6ZoIs z{uXm*%*6F8SB}bgpG@P)g!UFB9f67pTT;jD$1=kmh1Xqi$s&Ac>C&O&cbqVUluMqNr&@&~Ky?q2tan-t;-^nN1;5ve4pL#yZfaCsob7+7VYz7Yc{69J zh94x`HFiIX)*L$8fw`m(4SiU}Dw`FzluBm1SwyVjaqh?!qsY=>tw)i-jnqWy=#giB zjRkeHvHnY6#Jy|RVi(z+`+xQbe)q~2YIIgllb8ByE^RTjphiDDvZS)-yFqdHtPOiI2;`4p|kI`H5xeu)*-z_(m?9UC*X z-X#0+#?E)}yDghBNVe?rw|oK@)z6#sal;)Qc;xA)Q9D>+)lXl4 zJ+5vTosh+3ZQs8S5C7k<@x6cgM|j;H6cJs{(EO_8mm#te6&{;VBs}%viQ3U!EeC^$x|wc(JENb!4)8ZDV~DN`Slri5@N z5~WnK&itKHcPBR5g>*J-ox?sVWRByQVegC4U$ojK?-m6k((ZgMM<^B z5SM0RvDCtnTC<#E zv_2WxsH0fnjjLAK5&CpaM`Xpw(fHOw58?RfPK?M-Pb7`me^*fu`75{mE$XJHohFeN zI3PkCjZciT%!UG#YK;e}o4>i{8g!FQiIRJ5StfaHmWto)+_xWlTibB`wbxMeLRXOv z(_}lwjp@%Qy1)`^(AetVzW60NUzE;gsc=o)j4StkFgl3S6h!_Rg{Y37I$1Jg4Z^ya zJ|0kHQ4hYU7-1DgXwGbmRd4()PDHjGIfB1hu~H3|$0D2Sb&%I!=_CN<7$uin^#{Av zJjOB;ak@gGpBxX3?4sY7_i4OzP|rMR@e-}4s-!_IhlKhE2T(|Klg)C|z}ewUJ6Soe zV4gIyM9B)$JQlkU-95c1B)ZPnWbs^DDS_Opdb%X59wmqhkC!GR9XQq9jY2|@cgT4l zx>nR6?s!ruv3Kz(Uh(K5~oCaWH0Oa+uBYbv2k))YdStSN*tSyKp1Rx8dM2n^>i zC1;;Yamb$$T1zWhnI=y6^3DgNO5xMnF9TB9YQOat|rc)Vxn6Vg@TKGYagyyzOngxMd5Lgz8ZntVT^` zg(^N!fmoVd=KS~>)rAdL$&A?PZxgOL36qo<2}hgFA1(9S|iD$K#?3>V#S%vY1Pd zAaomC9+`_2ub)2s3=Xum!teE{LIRrQZ+JXQ5{qwlzGoOXqmD?v!XqIG~CAVjLtDF_Y8A{hI zU5eXoxIU50GE6~)$okg952LH6Z^T|wks2i%lc@{fayacInw+y`ACT`$CN7RkS2@jq z^PqI0scfvV;7ZLCr#h8Z$u%sE)S!UgDzo*NXm=+U!Z{43jgl3+NqF3DmA1^;OCzBh z8ltiI@IlgSaWAP?&Wei5I2`;Oki`BYvkue0Gl^ZTZP@zmyExU^MV)DooELIf=sHci zdIE0J2zT6a3+iW$et-dYN-n_D@}QD+Xxq7>c6$uj!h*}?#6Xmflq$m&s-jUPz>EOr z1NKECuxmQBv>UdD=DKY;9HDES0CIDj9Oj8*X?d@#uG380Zz?;-|xeUhD#@{?=PA+7k;;w9F@(qzYZsn z;&HiYf2X~Wnyj5xizN#erj-zS^|Iw^8F!!L((Y+Jgl)Tb7DNy1Tk3_*K$G=XkQX$8ti<$&)8k^}*5iq$(d>IIkX)0Z+eg zxbrJ21B&aBRVFX;2^wzf+KtexI#l?^7d3Fjrmm|zV&oFkYHj?PAWLkg23?CRz{PKE zhmIhXr5H|49u3y*i|Xs~<=bu>HAYKE9ddP|QIMiH`*|JP_UyvVD^?~v(T|B`N#N&F zSVKpd9M~>xX=+lQpvfuM^l8@u$CZ>>(#~GzfjD;(UJP>cy`)}mSg|6*elPIW?me)` z(YS2!B}ira2Kb2s4&A=5T!y)%U5B8^@`OUI+1V|D#S1RLlh40^_5b}NRb|*u7ak|F z_!$=*Rro+vH5x8nG-@xM8qhMWw7s?yr%&Vcx0^`q*ba?t(`_$IqsWCJlEn?0U6V(> z!IUPZ2Z9+ZC~o{e?bv~3bf12&Z`}3rJ@A;(?Q$cRAnVZV3eDfae~*X_%4g}6cOyeo zR|as`?Vnas#BO{gsl^~gEdr$5y|frAwQICD=+F)N&5LwjYQ}ZI-}v&El$*&Ctn9fI z$^j4~?4lSd8qajtorFXS4S3r-I`HYW>n1!BdxPxMOb~cWAA&|ZPUlm}ug36t?KgDm z8I#4hC=|k?P`%wa!gks1s(Jo(JRwUKgy40!k;#qO{0Kbo%g52zKL9^<2p{!$E`alT z$Rl*R$uo3fMpYFqB(E{Mv5&wX-}sZVuXCuQq*if4sbP;ZcaaOJJKBZU@ksLfkXA^P zLT33I*b%qEc7sO!kNo->966r)r8i6FFGy68WCm{j>#n>CmoB&vb+xrbyn)D>KD4(V z#qRxkDagASKm64bc<;nb^hvjeO-Cb|wrjGQG`)}=!B1Bs-|z13M&`^3m!M%h~@vXVyIRKqKy%gn- zsz^V3qJMquwG@`h=3N02Yj5PT-g8K&lxq0kb~>`u7{ZjkivKkH{+GtS9cbK4G4+ZK zGFLAtqZ_EK@Tv08#EPL%D?9A$>TKaJ#eO_c`j8ZUvXo=Nlbp!`IVaBW^Orza|4i4|ceX9hdI#m& zt$e}`>sW607T3(WTZyQ1j@-{0*QC+W9mqPWQN}RFBs{oWFA-7yFd3p4XC=#{9tbZs zpo|>Bc12WqWh z0b8O>!#HkCoBl8962+JlS!H#Y0}wHmVeHl`18a1b>-kJxG@X_|8x6NSkj(_;`xj)R zbUmyEs&04q{cng2-w2-8EVl#Nee|&%WlS18b8YI5H?^AJt=SNzj)gQ~znZ=LBI!wi z;?;3Y-{uJfKPv)(1IQ8?4eQHDi8s}AA za%Nz!f##!*$w0+jMAX-FO%x+1q3E&=qkyc_*=%^cU)8Iscnp>MXT>5%WHD^Qu#v92 zA=7E?se+LyqpbKWm#fiTGwp6To$uz0sN{Kb3LZFb(y00009a7bBm000&x z000&x0ZCFM@Bjb+0drDELIAGL9O(c600d`2O+f$vv5yP)}r8NZxE7Lou7 zA>e>*OpL)mY=beF*p|Fowq;AUEL)bPp3%O|zV!4`b>IKrTh(1Nnx$vdJ-yv;PEA)= zS6A0^zx%KEzYH|W4j}}?7mf?PMgc~mFv`trYIt?l7OR+@4M4^L%ci|V1MYsYaKu7z zGK2VKV2t&;2O1Ip$2eny+;I*8=ZA1xA6vO{Cuqzm7--BXToTa|z$Hen*}lHj%*iaU zQ`sQc_W4|hvmD2^aOXvgi6u-h6UhS({^2$QzZ1ek;472QPmKEwHfCMW#~J*W!0iV) z@LkByE?jovL3Xf?jy}*RIyA9L2p@?64jl@@(xr_skX&J>hgXSgc8Q(IT+W3Z#~qjB zPOV4*B25q!>4-3_ln+R#liMLcbQ+xB?>MkC(9y92G|m{BSS5fWHmkE0S(2fcfKP?m8*rW_OCZ>}t7 z8CBXN$Xjf}v*2h&on{|)3iorze!%QlcRy%M3QepDAclt*Lpt4-O{c?|Ooo_q8q9E* z6u9&3Wby(#onDH%+bwxXA@6Erlj zGJE%KHca!+vLHSrz(zh9OooQM9fW(6800!@T6Me?4JDg}S_E_MWZE99-=>jCBsSyA zEe?py`I{h=GXcgr6U1rX7NFsWPqgRPc9@)fldb6ZA=Dx2j#%l$TQ{PI`xYcmJH7Wi z5`01l@}G^pNy7a)Ca+8 zo>-btl>=pii3I+?HPErTrU_QF#3CCCV@O1(&7e_c;FDlX63Y!bqleYlX9#f!U`PPCf^Lw5xiF8aTWv0?+HP$j5%iKSJ)`h<*pd972{ z!(qdYW&SEOzxl6OFuofq92HG0SM|FOSJ#6^-2)}qkP{64IyArKpTG*gh^nCj6^e=_ zRyvVDGD%XkgNBBLOpO{5fxt7tMGI~LFrTYba#f^_mF?=f0l?ArltvC-`5nV?B9KbG zWAylmFXG!}ZV{h~L&cp`rYmua<7Dpy4GkaExHvA8dGUYH7)`%Bb?nIJ0Y)p5Tot7X zV$k;+4mv3+w}O#IrGQePY!Ii6Q0y*qVcWj}Rr;+UwXkBCo=)t$Lr78)#*f?8&=?C< zibTv8>EsRB-tIqv3QN2;q0CV3ba9{1Bj=&yD!V3D7GgQj~>Qr2c`obz}QXRJq9=95Nq)7?fm_8XYP7+1-OmE5yur4@vmd2zXc`ND3k~#b6((yFEG;S_cA#TuZ{p~%oW%q+vN73mCbIldk1c@ zdwV~OZFCWo2qhsFxj60q{wodJeuwhNXkKYl25b&NLx_vA0|Q^TPaMBhB$F$l1Sq;H z=tjF6vctnyaN#VXNk`dfQ@Uwrlm}#gp(D*eaxHd-hCgoG*`N@8Ut+AO7mA2dNUWgU z)AL~?lm0MzWI}3_CY45IKs9)GDqPNDd^G*vlU=<(K!Ff~BBH3odQH3*$PNu%B8CS3 z07chAMmD2{Mg>85)id0_9;H{<6wdq8U0r_(MMTjWzElCz>2tEjj{U8$?Q8MKMePAJ zG)e)Ab(xMpg0T!3=2g~;6;DGEP!x$JNi{OED0}?aC&97bp-H7tHNd9pFzExp$dGdv z4QYZRpg5{vGP&64?fpw(J2%-38lZ|HCSCG>8npv*tU0uBP7-2e7Mxq42smR^kg_XK z{rkL~O8*t=sx3CCQdHGyT(ODHTn6HVw+cdAjx`Nz16Nrc9b4fHaK;iVbK=;CMJn}4 z3q%W4Xz|3E0FBu(i*QG%I!q;YI+|294OvA4>^sg>B|IY{q>miANF+!8iV5dj$8osK zE{5uqRxI}_e2eEra^!oCiy^csSj$jP9@?``_KYUsm^BAPcXvZ(aOgWA(jO6w%j}Bs z7oD0dM9u^I{GK=9&HV|;WHS&Bg`u$_4y}z%&=`wDb7Lb!0zrs{yh1?vz&GAqXp9Opa>*(l&Szy+g7n$LKPoV1e z9wvBgq%1KGr-laM?)&bCjP1D1$WI(5_X!3A&=8G6Q)3(!w6;PUE=$|mVBx$rXpBUq zDO|4R=C=dYunF({)hF~;){13bG>1ds6|zVrHsFcv+o7kg58k!uGKdF5HJ7c%axpGO z1&{8)m8)PDm=&>72M(Mk?DUuMESiO^GXPZ$q7X+FuNeumcKHf8cJdSqBFSvw`2?A= zt%L)ksZmIcj>4(#Zj@}Dxg%Jn0jm}-g^&K;`(a^o%bYYgxA<4?jj{z945d=gJ1_w0 zOjf0Ku|5=k}$!^tG})cw%Y z-v=jpd!c7w5W0K&Ac-WS2A#>;u&=8V1_y^=QA^95-WK|;tij;rH{XIMo_!Yf9q7ub zZFC(>4ggeV)Y{Sr=dM}<*Iu>><~0-$8DZWpFc?i|Ac@yWVaw5xQP~;M#n-Zz6y@|S z__7sdh#3m%I(+3nBVi|S{ybP zcSXqG%3xsgfkz&JEzfV0{lUCw1g^VmBfM?h*^=m)Oa@ZvGz_4G?K*N8UflH>>_2uC z`Z6i_-cNoE|Kp~ca*|7`mSg59&DW9eb|A?oRZc-&5eL^~t8s1tNv%6)@`V|>+q3)k ze+r{J>(smI*8!y?-8C_kL)~zdesFHd`q2@7%Kowr<-- zbK1ZPR6)P=nVaCMOD=`^=*bLP7Q`YEXl-hOj^)c>^Tv(v#hX3@8`iDE4pKnx@Gv~` z)Ua(e4x&Asc37^p^Bs79G`F~BrTxy`_J13%{mm-|_`JrW5+$KoZh5MA+fFh}TS5*Sml)XYlb4T@S}@{{bBC?tvW` zUU<*dS3y%a?5etCmpP!u(YfChZl~fnl8{nz)lM@g5PU{bt6*YfyY_$DcAS-S(;Lqr zP_;>+_w0d(ABLVJ8RTr7#K{}}5^k$jdkISELT}(A_=_8F0%j^3ghOfNxp(YGpL-Tg z^z_QXIq$xF6WW5!a=YWkV*DrJ`8UZXjs+~Z?83Lh&maCB4B$2I?>qo+KYN{$+RP)3 z>xh>f4@jb=&~ahAYBA?kpJX#rNU0U*Sbb+9I~PnW#}T)R8WjI@IYDe_*KXVdJ6?MY z(y0u3__DIsCeqlTmMq4$YzG?_zGj@PYP@a_Z~WK3HST>+1eHD6a+;HYeMItgGj8iVAsC4U~ks}u<80a%d2~2 z%h_2ta`L3S7sNh;`?`<1kzR#Mt%8V^ev9-=)?SlUY?+cg*KXPf*I>}ovymL3q!IQg zWT_*m9O_)K*UrMuef!|v2Y)5iK8}s^lDD1jIxcuF=2PsZmXjfFV?T**|5GTf=>3Ls z&VfiMGA*I=4jOC5e-Af#JeFfVQjVBm^{s&USt z1GVnE$f3Q^xK?2j%iuRdjYFz{0&>PV)oYWc5;Y)H@ho9TB4twmPi}h_-Pb~rY7GX3 zFTG%c47rwkNQrQRz_@w>1Jp_-6|j8SGMFh$bZl6`AWG;_7#bdtp3iG8y%cu7wi|{< zMj(YjW|G__rL$}q(Uw~YPFuB|mxnl__jVLFQynGAh&zCNDn~PkE5(nh0Q=LSWWI4;H@?Ko48*P4=8Lb(^~3ZB%;G7blOdf@Bd`*%3n(=F#+ zTGHGMfAzUPg}?aJ4e;g9eGb-APmgynar_wE{)?Z(*Z=)Ccn$3kTQKPi;ckv{X`CA9 z$-HbM!~;P%*4qd7{OUpFSYRCTVK*`E+L-iQ?mu!2o__gdsrsGW(E$rv=8ZY-m|tP} zErWxD;ANRuR(;QL!8n`JM4FUXWT4?od%g8Wp89w6R5#rA2c(MTky+#xhOTu1uO8@xAN=&EG8?}MrQZ9my-sDR=k}cR z#zJ<2d~hE z5EA6Zk9-)GE?khyB$?*=_@I>gt?xllu zbo7n?U_yzNO}urzQ-`D?ys+nWICShNgwdV+k!!An%@<#cjn$Dh7r3LP$2TO3C6RY6 z-WY*Dc;9>A@(bS%zj^F2*nju{bSz#7krLV?bS@3S0DSCy?}hW$oehsXu@w?Wj>wFP zl+1%nqoYMYh#RnQ-aOc}VLe=N;l(n)&~{zxQyyP<_JUAVs!Rq!P9+M0E~$L3#QH;1 z7Jy>BTgQJe;S)z+)`y@@aly(C=sN#A*l_OK;GB+CU>hpkfeSCkV4^-cpRh`ea9LX$ z{4v^IscZ&~d`o`Ufl@*#a_6t=fOA*1Lw8?496Np-hKGh^XVB0<^*QE2b7KR(<+)+s zG6icIJI&RzaO6n}UsP;rR(M^B zA*C`y8#0Bi_K+O8mjAUnX4WL?;As-eO<}4NHPCDHD)!^HIrWL~MRxoxl_`~I>|xxH za&Egny-29cA1FO0vX#6_0*;%qp~i}_aX!Gw&(6CCwwt;{q~ah7`fiqoqCC7aNw9aUnJ#3(cT2#Zug+9k)2CV?B!FU(Ne}ppoq15n3K4Bo>@z4>6xB!uy|Br&Pl2=`zZH6yc8DTEA*F{OQL(q136lxX+%5#RuCQ zkHaDK6y}^OzEmaQo}>2}_=b(h#5VjOgKMuJJOIyb-wwZj-F2Wb7AcVG;5WVZV~Ayd zb7i%cGn)yhILZgFxf*u9`YH^MCLx{4K-$iNZQIg3r{NgF?e!hpH;db|*(|!zm1B@3 zf<*;Zm>NwhTxQC;g8tu;hM5B)%K$cq_Lf(N+(gp+@h3k4{ey#$92$mnI-MIKP3M}$ zYo=>UqsK3qN<%VD)qc~E!5CNy?@0pVdR@m)Nf*z+$dFH*Y2+bIsELUs>dL+%2-tMq zxp3Lr&UKr+>xA|i9Vna0rrHqXZblLfjEulH?z#*5Fh&$Y_3(=~-UKbN7i8vJK=-5GT ze34GO=7--;43$*NVDcK|%Bpf*^2iDzmW=K232c=~zVDH=oUUq*VE)CAT*u)548Jry zGLk#@rbt}#Y7(Gcv)NnE5sTGv8q-Wb-agYUq(X&O9H+Kh898-^$Ybg{G-9zRXiN-j z8yDo(y%iMx?VvF&sC|Xpu}EY?Q4PLY@4@?rhI1-nb36tblfV(1y;T*9SL65VR27^# z!ZhI;HZ>~9Lf*7m$M8r}N-k4V83 z6>LT|IIf8`B{1ICPOp+!wkB4=pavERc@qe57#tpgng&X$!Qm0PYT)(CPDNuA)SI#KM;gK%-#9u-8_3cwA1G zTFaoIIL$ds@vIQW>nuYPYbrRLwbQFhEYS`c1*0hvl|%7qToM(WspT@uB(c)TluVC` z27ssf%_`a4jKg`9&1oZyC}4}`v+^<+pbc%)J%>vqY2qr8dE}g2DwUQ z(wGTa8k-;%3QKY&QBA7l{5gvo&=f{O2?tiUw*v!BtOC$PG?8Zeld19ds`=Bha9~>#w^G zvZ*9oefi~M@&#)RM4^?77sKi$i>0)3n4@zArvU@I$)r>!-T%xC)UH}$QTUUOeLVNR zmcbayCnD>D7t?|`MS}q9vM{HHMybF!UqQrL0U8<_MFkhYwZziUC?*`yuDuo-8pTHw z*I5@D8bwEwmRK4ZB>)kt9W*pFiU}>TG&D*8O)L$KQa}?+L!$)H#M00x0W`5RG)e$X zEDenkfQVJwMH@6U$^cC)4UOWXQ>%hyf`3#~ey(6|!n*0lJo#t5XSw$pl>(||r6pDw zAUrDhrzLfVOy(%U)bu~z=VRxx@~9|$+cYW!ok%R!ryt8)!<{A4olIM<2R^s5S5a#aFM>^ZyiqnK+b zUF3Y6TU|H6j&I{~e2qn=&k8Ob-Sr^@rDxo`Tu$*<#G&xwN z0VXrRFgTbfp=hd7gX4SJZdwot24TZl>%bzFk$K0^-DJ7J9YLy~=&X!~;n@pnM)`@R z8zqn$#F*E!LvHS0=Faf$P4PJqRdUmR;=k>0?S*?E{55P?dlr23eeVLl`(Q3GoJ>OR z;2;Pj%z}6f-hIUt(9+lpu}B0$RsaG43(127G7R9fNMfleTm9XPC&g-wRMo853J!fH zs}N$zW-SRK#+v0w7{?`>oSEM52@@{SxQ}omPfbsS%E6ril=gdN*Q?M!JOsPn+ynNz zuaUDf&ZQb9C#*vl_@n2nS_79~bdj9F9(*0g#F*$TYf(z&JGy*#TOHR)oT5tHeU(wi zRY>*BL3QWwscv{?#|}7j{5T8@4nPu(`b;LPM3hiBoYW&`kh)|-0M)qwszs5I35}5k zSk=)17oBw$L{MFVag$f)7Ose!wzF!MdzjtgJ6wK#^-PF^PqEJo;lB)20Ni-aW81bt_rRc(T=UV+Sh92pG)ChP!gWj9 z8b;2ZvQc$Pqe?|?>Rx;ZM~|L>UL*=f-SDZGx5Mwh>)q18_dwrrm^3cksd%`Q7lKuW(%8oLZ1vGNe;98eQ<)A#f92+v*fmfk(=C`6Wi zKMR#Cue@_3&m$4SaPsbc0(T#bcm56=PaNf3;W=W$^uT>ibayMAgn5pesz4|GlV^*{ z$PTCwSZEii9?y|8w3|Z6nJ(zP=ZeVr1cfbCNK)y@^bKjpUeg&`tAx~tMWzjj4oIY4rCNOn3rE1Ya8XBkd@X>FMqKYq{ zFF7!(WnL~v?4%b-EC+ZeFY{AXu_qy8IJAz!U#W8VFi3(?Z+H5mIDHFEj^^MOXi^Mv zN=)`!UJpp*%aAH2efRY6@{$pNmFTWuhk^ds2zDaFNUD*M5t`yAO%ON8sB(xf@mWl(dojaPn$|dqM*DVL97Nl9MU-)WF~n zeCbm+fR`;f6_Q9)uje$XL={9^vXfpVvGA0)LIr>xKp1Tw8I!`lWO@`DAy)AB=^2FO z9JwqPIG$`r<&{%Yfu^z22mQs$vAgaB_{Ho zP-@4iObUimN+Kkaqf*KZ;W9jouOq{#HYH)hx;1d_s@3@`D1!Kvepa$WGZ{z?kD$8E zeRi&*hv_i4V^TeX?eA)h#U z7}hLrhY;FtjxW%DCSY#ovS#^m_+OvIZ+ejdC zM!l9uz+J!mrR2uqc`Y)dM2M+7Eb0_9PByO!lI`YHpsqX)NT@uqD#0_TGA|UdWKW1U zb2vFNGrI%7W0)%ak$DH51mtC6u5q>x)tq>9lgz&}sR0`dOv`|1Fa+MwifaNX(yqnE z`qcB=fLs?xPoB(Wj^wiqJW_bS?|`Qvl8247BWiG@J~uTsz{U$N#9+DqjEi)(t{T34 zUYo0Wjz#WX3z0j28#V0!o}d|MfFx=J)MJrWaKTyUOiLX1P7X4v;(0aAlJh^CR-e=04Wh$Vy1*wa4r#N+VblaI@| z7O6elBv&|tIQGofUbYdgy!c`$IgTGZe0+>b2B-4x zJsV6C47u^bj-B#+g4pS;?&!!JbE;D#iA7SIc9Jo_3TKtuuXK6ueZ*oruot}n$^_*$ zK+jP)sNQ5544@5R2q;(`q}?pEu~e^4Hr6;*(D!hdtFsH4XUN<-)01Fy2;2g0i4Fl~g(htis5uH$upGY_) z$&t?3Fo?vOX+!3Q@>)rOG(|8{s)9gX906Bdx)H8ezh33+O<2dVWJ8d5jGW)S zeSN3Ja|%AtG{Y~5fSy`s%5|kWsZ0aUd2l*3$EJr;4Fw$Q?!oxiA$iZ%u38CA(P+Wp zi)3n4b&j|@*^`xg|j#-vJj{n#) zZsWSBDRUu<@hX+QpceVLfHB|V$`|csCNPX<;O%4W3Q!s)KjzdR}!;xc0;n=B@@cO=l ze1H}q*W(fba|7Z=FAqKz^ium9%Heij`D4KTOEyePPzf$h6rmBeU6yZM||YiDFFkBlT; zFQ-tR;tB>mB6N05F0sNL9i8QhXL-_yZe+)@W$^S%FN2NmZ~w*5V18>0q|#YPr7|+M zMM1|=d>zGyH;TbsN4VpesO|&ma{)TW;zj6Tocw`ETg)A?Y&#_$LMK!VYWLnZ(L;6u zuhme2RPchkDsR!ArDP^i%l8|-M`>EAYiRVW_7E4Ufv7>?WP z8mN|?)!qRSyqUx4G`zMy0kD5R_-hmqXm2l`62O)Dt*x+p(Gqm&w!yN+__}xjx@jj@ z1*NCY>q8kU=|l5Wu=if^PHDt<_x4J|oIolZqk0yuDknoic;2L{k{U;j9E!CWZXp?O z2nFZN&2;c`BZLa7VyM7zvJfyVIA`rzsSZl}5$3LK+DPmzFK&~mPGnbYM8}Xyq%QOb zLZ)tc=Ua}>VFqwe06aW?<7vdg$9q3MqB$oP!RxnMFhKhI*S!n2zp@khhlXUM2_g}~ z7~`TrkCbH)kHuhqQ!~tKX_XSq^fC@au9=;7{G4ttgN|k{0AtDTI?~1~MZ;4KghN9( z0`I$Wv$D6m-kYQul7t3d$}@M*DKEb~DW>8=-hJ{eNVsF9yx?{|GeYEQf`HGiD+N?g zI&bYBK-IkK&|%rQ)~{P9RXO3?cQVLWkWd=#sLbC~+o^L9ta3z_e0E&8uhxLD%)7?# zV@|MPM@Ci0EsNWovY_eqU9sVOxcu$s`-XF{+z3|g_RhkW@t$u#rz=Q)c)>hMlQE=n zET9o>5MN}g=sn!Va(szWnUSR9-c8fRUt#0tV9R3DuZ z5^JKfP;!;Q?ymjt;;XO9WY!2aAj*{tqq-QN)TK}mgVq80K8WWTLdj}Kub(MnJ5(#j z041qd$>}rI)hLqF^Eq(*7`%1hfIOe|XPpg;=g*gpltR5H>X|Z`;^n;$qAKW`TNME> zyT!JwULJ|wJ<&cBM&9sI-6_hL-bBca74~{{S4C1_`Ch|wn-$(E%Kf6)F#q=#|4b$R zQk+D&(sIWyJ+Onw3b^;d2jN(MKdOSNW+2Odnpf$(tz1>7G7MANh!MPomWD>S^3qFT z!`bVUDp&?}iMy_R>YScJ7ke7*#~_}|)t6r`8<@?e@3g!-@3_xd5{vpwyyh^ff^tME zoBL~<2rA~uGb|d}7Klb4n`oa2t$R21y{wZZxP!WLi$^u?E{5_(!|u)mJilv~biEgL zT*w_KO0gbv<@1@4vM5j;0|ln9*>nXgi8o`cj#Mdf`>Tbba-6)J)Ne?A&ygk4oD9af zXgt=)2pk_AfHw{ugggK9=Wy`I5hxdAc?1dw_w~Z|U9Zaf+l~&TWs4WO!*8aC*Kc}~ zSJtR^ZDO*m%SS4=4T^lyfQ*uw=9^|Td>5*%6W;gY$#uozH13ZECJ;rR^IcIvyZtsWH!csYy`p& zP4+Ew^23$SJ6IT)98zz)w%76QlR39@HNbJDq~{@|l_)l#XgD;+d+E0;xVxX{2KmKf zTj0^BpLH`b$_KjZC;Ix~4GfKtcXH*Tg>d$&Rj$Jc3eNcOtM{HNNMVR_yW3Sk97k1| zA}uu(*d2&ReuEzkPxhTj13gwp$5wDF&QvNm)eRC#>WpBZxZ390@V7VVE@y`9`8|b~ z>@Gua@cvZY2&o9m*AxX&T^lS|#>Pj#|Kjf5FoF^`fRgt^?|PRS>fy%N3JJf9F|Q(* z4P)Xpd!_2i2hYzeMA|ZsoAJhE;OI(l)PkMvl>9g3`jS zL|d^Dy{qrL`YJaT<@>ylV}KgNMI8vKTq)a;s;?1HStv76DT@i=dW#KVWKz-aOIA4g zW889xv8e+*Qxc1u7@0(ZY^}0nyiW&}$!$<#8H}P~U(GNbazX&~3=Y8&Bu-CXAN2GO zK>yGn^y4-fn>Lb6LJA!mGLH^G=2A+x_NGnH+}s2uDSA@~@Ek5!vliaAhFt!(^s=5= z_9e@yf;1xB;H)g9BDiUDA{{WgB25kd3YN7KNi}WOb|E9kzJ*Ig5{vG26oab6BcpOE zQ5s&ss-#TTc#t#Wk>|I;LtD0}%D8UO+nc^f8uD^a<)9(eWbJ}Q@NV>kp0{>&QECXz z{@jHu6yv32IcFj|-AJ%XjApWy2c@5t&3;D7lx4inXl(os2!tO+QY8!d+O)(XCq_Dv z*os%X87d5v=F<>sfRjDFYWM}-e4~o&EI+7N_SS9B!Dv>fc3aZy`YiWeN2L-A~82h0@khy5@SXV~=xp1kb zQ2A<_rDR}u5RRNUg*I9WHlBN~I}Cj8$w}GVsZ?72a&t5SpZ)Mhpkw(m-zaD?#)itJ za|xDvS1t%BJf&=Ma5v1LCK_DY(hP5kEUaF-)E%oP>q9~5q3k@W(LqW;HW=CwX>R#P zq)K8cFW`6-L@Xt>Dq%(vKa`t&`Lbp3)XtqSf~w$~od;mWk|pXhDtw7V>mM1CHcBtX zS$YTh(T3@VK3pf8g~oNI&_1KPW#Il9B-+)NZiI4R6z!(0G}r~KX>W&BD^|E^O=3dc zcn;v&gNjCe;Hqojvhz1UYh$B(t$dEIR=6Xs(atli!&XE5ZuFA9gru5LP1_k%>0r0w zuiXI^1qLe?Es>L3(`*;tx%VD9e1xm~cW}^F5x!IuSK zP%fxCda592C=_s2p>ZjUP;S{YSD>+H01M`|l;L7k`cj7T5woG;VJp_~Gu+qh(qLxT=Ysm!&YV&<0KT%H6?-zNL{gSU8IPc97z|h{bKN(_tbD0GrNwC- zhR<;`w^vMcHh328s>iIx#&6?>lhe7@CqBvyfKH4XD@SU1$`FH-0|W5JTl-Mm>y@c6 zG`g0`MK_?q--6_!fsjpT@KfVe)tg-3nwvi3jfrB6m(Ba+;BSBJyWfFBr%uTPd z=C#d-22_QbVsQus0}u#W5U_%BU?z<$4$1&I$M*r5zntybhloHH)6hWVD+*z|QP9{(wRG&mb+MVN(~g={U2 zVuPOEh3A|DU--jM!J0*jWEr^p5E5Iu)YX2DT!?5?AH>A%mZJ=AE^D0Ez6DlHsF)j* zxtbYn^jpm>4660Fc4BvelGUHm+4Q~{# zkVU|$zzsu(N)#V@6!Ig9{h+NJ#@80qm>zlSTsgLEgQs~k@_dl8D*z78BwjTcW)*Q$ zLrU0I&?p*mRfwqOpd`%LL6{6!ZY@6s8kFeLq?!@@chNRjIui(PGa6%G!?!ONgH(iB zhq6&leg?`sd|yLjrjQ9!WRH@qin?_=7(N)C-*&rchMq=JjY5$yYhqE=T=b-T3p6yU z4AQ1TgEkW|yCN;E-$J+gFL6_0MN#QN|kejIo7Vl~t;$0%y6g-2=0KpO| zMp-QSRG_)(AMm3crIu74ib^a}32k6kfesvNlmWhiaVk}r@ew4|FM}-&U)~Pz+)PIS z7w24xh;$cRaqO9RK2XR0UZ_1{|1UwbE5wFQL?f(uD!JbG&D*CS;Bfu0emLX z2JaRPM5+im(#k?Ac`8ssBom2t1H=~4@hy!KKvvhv$t>=q4dXbEH+(PD)I`DGBjq9$ zq2%M@(B4`PDtN4+QFL%wtAsfzZX5_UH-Cr6<9FcZ?zwQOPkCNYVgx!mP#x64V~sOM zzH}+%)@;t~lws^Mo0|S{7~;1>1(1p`XCt{&iG5#1!}1o;(3mC0J1ZDCPC5|SV>Pw@ zvlWTlgM{jb3c;L~NYI`_joHEzL9$9M4YbCXR5}oP7450NHNxTFAgP9+f-vW`M^gLW zx|1<}188W>0DfX+kyIiWdLi7__BAk!M~gY~w^%4kQJ-{TKRGkjgNDX5@W-emxj0WE zsh%}j=lz{&nom?BsR(76gVIuIPddh>Q7}|lI7o?j!`9$}g@28t+FGfkB9w(#lvAk5 zr7;z}xt0x809d3fW6)@BeIVG}@|EoXPtUgW^IV~<^&Q;-k`zGJYN5tBc-0iSlQoQ! zR!h@^Ry6+4xM??%s^TY{E_>lrO)iaz;MP)4XHD~^P;<+VIOh*RD0HBl*%UKD*@@*r zdkgCuD(6ql(n*ynvdl<3!Qk_e=7z69F!DHln5=}rZ=t9dVi9x@xqcxBCekd5jOwWK zQ6mgo+{-L6fUK!Q2UJGp5fvp(Grp zY%1kSmqX|?A`;peYH9gfFap0tLJdQeqoP|XjpxEZ+ZJF>JH2N@6RR5GpEX6jr-|}V z;WxOG;&950H$D|;Z2BI4^f;2Ls5R8fg{o+&qltarWDIWB#HwD<{2o+`g8X_^krt&C zO-gXcY>a<55DoqqAatZ!?Wu`SH7(V(yU3~01R7NaC81<#GV=c!Y{ZU4UXQdi-3HwH z1#a%CCRchPs45XKeyIO=6+@%4pvF%LH<6YoWrz&t{YF#cFL@;PAAP3z+&qAxS|b&q zD%&KD>p~6vW-kPb59VLm@Dr3^$Mq zR}-r;AUio!@0i0f>7ca_9TdL`MB_ih&978r7R78(6Kye*NNmPP*BwlkS*r+;lu9!; zz+$nj;nrp(l<`~K+*ix0-+0tiC!b2}{VE1WZlNxdyiiKF*C;;xiZ{9?kS`SM<@i6# zcnWQ)9f5|1`^<3oC%D7WT5_Woikj1&WKbE^L%cGXDX-PT;zPLQlDO;hGX;kX26nTS zd5FhiPlOs{cL11Feqp#4J${9tX4@U9hxpK`cw;+g6cvgpLQO!*MbRj?uU zQ!qoXfQn1ijoLR6YQ96q!19f5V7VPMiUdKfzN~GSrv$2fp?Kr3crf@de$ZL(gz``~ zno>IP){P*Cqi}T3Q}(Bj1wTZcD~nzcOh3FBl=sftLYAvTDxYZ_=7HeTp_az`lZO3# z7{bS^ITO7UsJm9>mtaJ&de1)`Pb`+JHQ{wS0t~72?X~V(eRc)IQZMaWajmFJl+d5`lC)A z6NRAeon|ryCd7@*^&-|Yh$V(#HZo=)V;VmZ2%WrOQ)GZ6Keuc9-<=*lw#sTXooeq8E>k(sTenlUm=i57qhJ0xby<&yBOzttw^NjI2=E*02WYoL{_VM z#epW)43MOZdO%4Aa3xe=T+H?82^yy>IE*;l=w`vdYZ$!U8HmQ7LJR63eohjJhQAY$ zv{Wh)G_ht0Dt3ci`(`2;Ht5aRp5@49B{7)KrWyMRF!@cNdgx1jAcjxl6Vj|gDTC)S zA~^46fxv5MCmk>%kyou?@Fm=>3zt4RWi5^74w_g+f~qQIuNRDchzr&(WXWs+ZZ0s4 zzt!W#1e+jC>)J(X>S|Q!Xse@?yb(NdMwmvAV7!xu!rhK(?zT+xCBrb@gkbO_?n*Op zq%@hz15KO+usn}8e{=;6m6vKV3~=a5$FTcOyHMkHbYYHG?6L6xyoss2>7s^7`WJf4G!k3=NN^U?Tf%W$?CX*fsyn6*TAJR z*o?nA!Clp5#KG!kiH^T+psd7{zQmdm5#LOp!N8mc^c+O!v0Ev+?1MF*7g#pIDl+6me ze?z(|$_*+@xyei%kgHdafHC?{%_>iz`*Cxv-ALCRSfs~bLWPkG*?@egty9)tiI-N_ z$RsJG=PB3E36yUo56=1s-nrdxJ!z&aH&>?vZ}2?Zk2t571yG2we8zI~e^X@93}vMx zz5b}u9|RQvX&6omRr^LC-;v3}DCq+TBpZ=M+?X6!CzAgp-RM&nrLtuV-6#BIiohBV z|I1(A7s;F47n_Y8+bd-8HlDSAGCu@)xcB5%0M*0-_Hz!}YK@S{4}x)>Bm;`+pCr>Y zu{iv9Usz$IP8+h;)|0+;kL$H({D5WqwguHh?BU3GL#1vNEQ%|a@H5(Sh-TLPb z1?0kzS{}B#z4XnI)IA0b38wt7^(S{@#V%H(h&wZ47%eK&cR{ zw2bTgYG!D5wtMj9C6-v30#M$+n8JgNyo2)kz9`v|7*@KPIWxDL_MUDc;h{K98@>** z>T?G_VQBCQm| zv)Xjslhn!YHJ)3h09iOLU!2~If17)r^U?2MP@p;DF>-MtnAq}ADiHM`(X|(@g!P7k zSWyzpoE|AwxyMWTiS#$dKZEA1L1sQoD0}YofbdXCDEY{uPaZKRsEjAu@?)|T#F>9g z?i_3}YMfEC3%O*e(%b;MptOI(R3mqS!3=$e!B+51(Z+I(py1HyVAn&Jq$&5mg?mXe z%sU!VZwB5d5S;{*AncDjH^Yo6NZO_|@t2b^*kR;GtX)PtQ7?l-o?SGv#!IKq-`p8?}DRi&qBs(*cng>5*sXKSNHyInJFXq3yAfbNx3=V6LoIVwQHBAT4Mu2c`q36 zNiqd{ccdo2@!+1R^!h|e*xCm2W%~4?B)pj;|5)^dbqPvFBG3KYp+;3maT2qXUghyHTY3O7eKn zdyzmKh=}9<^~C&z{G6>a?B1wbCB6fL#mw_X>STve_sdMsD6nzlSWUHO1<57vUk+=40o*c{we+ zMORUNVfFl`W3ACz2C!Z+iuDk0Ucihs(%5){z}U;Fx~PBkR=EfmZI&rQUhqgEtLoQG zLfu(1Fg96$Q5~k)Q~$8dvoSSLHb|BeB!d%s#- zH}LORJ9IzmpZLWU4NYH=BBgn5(4zTg>N>b7{QTgcsEbq*zDjf6 zN>y~=Ulp9b;D^CKvSIkvn62S}D2$zsQn=dpxj|E$K~4cTv~qn=JCJ7d5<~HuhG9jb zl_+8?RS=yR z#g&LQ0cmD->tX2LJ4Cb-QM9T!Vv&V?2q>9yyC(^Z=__`DDaTYS9e3_`F*w+K7E-Nq z9OG$Lmoe->(hY%{l8LxL7rSz3Y;3H=%sTdtW5(1mpqv~Ln8Y*-jQPG9rBI(9)p)$J zdy_o$xP$7_u;RnScmn&U2Ff3BM6(<6lNmE7#Pqo3V;|t!-Bo`5r^DGMx;CXe11hwr z$oC4iD>HxD#WI~JEEXb1ioh6r4uIyKRfrr7Pr)=2L%o&>_KMoB<8id1t zud@c66JwJ3Tiq6*ocaQ+5=k`m73asvP8EhC*_-dr^cP0PZ^+gWE`mn2h}7l6RP5Oc z^4wg}i#ykr$fb@1a!C+HVo=+b8DC5M4Vx1NUnY@lK-Asu?;d`oYVhBBOXM6I1dLiD zk$_Z|(94vCV7=|g@R1XUpUk2pSY-S~>RSdvBG)pV9z3emX2J)$)F1EjOq_@?fE+54Idb_p}O-o?`#E>%Jf z5NpGu0HVfWFSzVvqbomB=XHS23!aT8JB;ZSEB!@3&=ahUG{XomisJFH=Sx94@ z&a~dHA~jFi%Qb*6Gu0~7J$LT9**u;Ugik7Bf7b+vgCj>pP=an2N(%PG-w4U2aO?@9 zzBCk*zQdId9yOUbW?D_2k3_hM92qv}rp@dq_1V>N;&@GllOa$Oa->a3URpY3IF$at zgaYNo-3n@Bv^H9cS_dmrtuzgz#TT1NuC<#>%LYX7T@Wg7|1jcbyhStLwJ*8nbi|WO zN@=OFQr-$z@hq0jOP)mC%&9BBi-8697kSowly|EDs z$^S{4emutXCf$U|oxrbObrx2=7GHb^ldGz4UH7-`%Q8c8kG1S~bJuLsF+oF~qo&tQ4%^o{^Fp`K4)?PL)T*@w3QV5jZp1Y^6Pbq&O z9B97Jy|r}jO7w|Z$mxag4ZTL5mw)a`kv~fwwV7-!JYt#I#@vPhT35RjCJGADY**$F z?_N-k_*1b6Ucr$V4ebHpXTNM1N29#9L)8?xcE2IcoFOEIHYw{d_}=o8sAgMRW21Ed zt7eEQ>_U?Y3TEZE?^iU`&GlDmWCSlLW}#Ht(6v8aSN3u0gI#t}&D-8|W}kHD zrGW}xTaO7Q@3rApv62+c#xJF*mN2U3JvzG~Q@N}ktR_s8Tuj4}1~R~=Ld4}_X%p2E zP23!B&7}$lrw)#3P1XW$Iq&Sw2c(U#>JTdb%z`*HL>i(w5R*!VzC*{G9&UOK zvWV(9=$;p+_tMg6&7&&GmGGHHIr1$N6i7!T(2oBNuZA4nhp;HHk)7=UT8;4|8OyXp z7^Mb6PrH>+maAMt*>w65Iz zVDTTcfBBVfW^{tg!&dS#sGoM)Vzqei5eZ2<#+gk&ovNqi^e7<3w^2xh02^6 z>)!{x2R;m(t*ybn!7ggpN;yA0m$!vJ6wt;4>nHV6v7n0wVJn7EesZC z8w-x|TS{lrL){Qe36&KM1)?wnS!52YB6}FS-2A)QfBK~Nccvi#^Od`z`d0z6mw-47 z4ts`-7;OEaQ%cjB4$GtqO`m4D3Eh{2jDj-6Zu(r-bhG>*Z}P&ym~`n0I5lk-oDLDy zqRTQXnvif(CuY`X1lMiFD8&*2huRLY7;VN#N#n?&uNdp6Q&^efCu5HWN zX!ev4rS22XwvngdWP>GAnwT2mEuo2}czYE0uI^^CRm&FCw4*V>nB$!ZIj!tPQY{h! za-#4GZ^C?>%aBuH77T@CGSb33bJKo56q>OAY}4_{kdLZHG|j8}r-y?j0C;ujLGx9q zs=3+0V5>h95Ubn>_+9zN51W&e%g7J9l01Z*vLH8$0PeQi#sr*td>h5lMc%;-x2UNu zg%BaRfX6|0V;yOD4C6js+BX@x5S7BSW)vYI{YgZ*d5T=Pzg0n&{o-W^pXacjV3$M! z)xU~dtN#5^L+o>-ha~>ZXx<_lLrgrsv;=AA+hwfuowWA+GStv7Pp(XHvWwH-R7ZV; zb$flSKZ02pBhz*DG;W!}ZZ2pd>#0QilJO!2r+@?RaPdHS=!F+5AaX9NI!T-wKG7Vv zsNv`Fl-=bs)qpEs!~D>5y^aA=|C`iC@CG3VisH*A{y9@M*BQK1Q1`pAp9kzRzB>(QvB^w; ztn!U-t5R$6!zQEW4Zoue9a*}nz`ZD}qr4jzp+Y$a#27zcB9{WgfePD0p_b}l9wB5_ zDZLZZQnF|3eLwRqFFsMo-&@~LTEE=~DeN-^TS%yRDor)84zukXE2HGM$h+Fw1t69w zh}5;gqH{N-xEX{mx5HY165D{oHls6^10h65#|jH`v%#wfeG)0A$6k$Yz^aPR4P<^E zwa_+k*xgpKJOCpj9=t+BRYZx^JTc6JKOKP3j>DuP41;lKc9s2rBLqH4%W*@Yyu7Ra zH`G8Fnz`IB8!!vvm5&G)M~^wcz>1NgoyIb;^+7PoEINTztxqFQilB|xrH)cfCOS$U z4*`x>*+Q4A6ol;2DDPZi4OCn{@p8%zHF%3bjbqr_2OWlBfX5{y4s{O=U5y4qIyu@S z#aK(!6`up)W(1hmWm}H1)>Q?Jkug5one=w6ne>c>ejw_PrvJ{HD$9ntyT(ft{K#R> zDBRb&UUR!Tbu)oU%*i1$HUJD13lE$Ipb86uyGt6#HFEkrG0Q}ul0P0m*um&niE2EZPMM4JOdwJgyFEbLB%ohQMowz-cZ z?XabKxqYGVI&WewesKTm!n>2DJy5RmjzkGBzxi1%k1e#gkaM`wZiP)M?FlCBy0;@@ zD^y}gX6Iu26X5sseko%bMiq)L({m?fUr#1LF8{mS$K|bCcNrNY*LQz@KJ*BHAIV?n z2+$UOo7K8f?$k;725SOvtF_k--@(XoPi}=TFlvkrV9D1uAFL{-tcly*hSGWTC_3ys zrSEhc)8xOPZ}QYU?+BK$_A&=R_j#W2zRe^ChAdvRCL|B@@X6~59pMLV&*nLeM8xm- zFi+D~b%J3oEwLuFcO~DJ@S-b*?gQjP)ODu390H!#N^HeDZ-+YQzWYXnBaS*3W&-IF z^nc?;dxd9fOPX>_h2BFNP6fwQ8jUOdkxg=bWC<#Uq_BgROkT(UJB;LhTjFpKQGXs> zj6Ov3*d0h44aQji<35gvmr^rBBsUpJzU>Ucm`xjnf~^~TtsKlJB8=?!->GnN^ifAg zs=_Chwe2`xhc5Vd%A*Hb*ZV3W{!;(_jnwyn&+B~$oVJkjXpd8f$bnaug_??Ve@Kp70Fb}0cY^ob zjd>1f^*>P^plgLi>ZR3aKFw&Th=l{KXDwy+Do;hW#j87vbq}!RAr!-|SuLgd4`dRP zVOR(=l|pWMAKUrW-w?}he-4;B!@-gWeRJN4!?N0$p2mtxDuLAOUQh=gos`0B$S}dk zBjPv;ul?r7*#|p`Ngp0f32fHT&Rt}TcpJReA62igmsK!E;x}|-s$A=ayd?f+t^&0d z?lI5u=ia6hUelNd9fRX_HdXEs`a^DSV$10st=s;HlgCorjN&Iqs*4KM=D?<_< zLmCtdxgwQ5=S<{um0UBT*09hUdrGUR?CIn__!xEMB$9vn*W>O;j6OXi-fng9B2P;q zP^N;QlLCp)hSk?tn^jy1!Rzg7b4DH-dh^9xE9~kO{Jh0<+G|@?6~~5#w2ej|sGQ*P zjm?)cGoXUM`t_&Vo}grdEKM%==ExFs$pQZPH%;Ky@U`3JmzY^HYz#WeKCs_ zIN(hdcUQm1Str^^aa0xQaMdiUN+P^zVDgtxa$>q`AOnejT?#mp@4YKUb)HNx?(Ad> zKUdJ!W-HHe7$6>=O%>9ROuS&ovU4SHIZ)t#Jar_uvdbmk95PB!y;$0deh5s`Ch>jH z!IPLtc^_^t{1C$7Z$(sFGC@#oZsV0ZFXzv@M|9Yw;FXfL^4+hci%+e@b(IB@XiX$bY? zc`;>2T{OaVM3dKAKVKbkdL+H{MUD0HEIjT~%|Hx>YtC$n98WKu8plUCVQbO0FtBR8 zW7B#tW+J)VOjv*$rh$|fjCPTJajMAewMxa0h}}@zmYcJ*xpUybuNyiF9$~_L>E(WY z>35OfbZdaE4~(?5wA&hT2*e!ps&h0aH1uc<(GGvxe4FN6Ho_)J0m!Z-U{l7-?yQJz8_8i01LjC7KxDVn=s&kKh^KAr&#CfbB2gYj148Ql_THI4M~B z3v#(gR}F^`M2^j)Jdb`rdc9Bavt$DuQV_C}8=Z+YAF7J|+kwmsu!vfz3HhD+CG?Rt zN#HHNZ>OTC(qS?cL$KQ7jYQ^mbhMBYtzQPfTfB#S4nS$tXxbayZk2Gq^Txp%O0m<9 zAkc#n6NS;KkY(?Rm3IpT-S*)GU-mIom4MoECI09C2)}dYo1mz98HY|AxZ&}aD@R@= zx!uneNysxHOZe6Q?t@gMAYgnbw8BLDt@`TYBZh)X2cNsVg;}9er9JqVKoS|~_r@b@ zt-QZq`QF}010xw8>|U9oc0i|^LBtX_lES3T$l>GE^};V4K$sCUl?3%HWbFJqYA8Qm zoqfc_=b8zeZ{%-jPPktMCIWCn`bjZj1b3Uwu zn5Ydv0L?D7%6=S8b7d|D8;cFDY+)3d4glTE7j<8ofH9sRS%#D;h4iVt{%y2U!qLGM%kr!w2$#S%v0u(sLyMj1S>xuO1LRF{Q*LXDYjn`)psLn zOiApO9eV!8v|d%sRyJ<2J=G@lofy+qb%triXefN%?N*V?8_~(Ev;EwYtaeay;~bo$ z#;DkH&bAP2zwf=KM9@0sdb<2jf#1v0e9k5NFakX-?+3dzoIaX1nFL{OK=Om&xJ3(V z&BEkjzsk9hf^GR#EIU^cT%MHX15DbF?|7RD!x?bNY*f>5AtSTd7#O>VuMZ%V!246# zTA+y{4nsoOw=A7jPi@bLOy7ax3%I>MVdVXtxOV3lKGAXnwS`bmiT(aWB;F@Be>!zf zIO`aN`%fQ5-~|>k%FQ5$APU$BWJtoshid3KD5Fa?@}nidodd={9ei0YBADgt9V9STN*U3IBjqzUv+|?_V%lIFGMt(hzclEW`qfb zWsn$7WLNtTQ2?El^@DRYRd5l4yVjtDIhb{qb$zX{_iS=(ir6)*oVAABTC*5QgcR=< z`h1Bi#W<_VtjR?*`r|?>z}y*7sSbo~b;Y3OpVc^lLw# zWJo`f_h`>{fuD_6+S$#KUsNbOZdAk%-vuuG^YSr=dd49pqg_{H2tj_gbAQQ6c@t-_ zrxlo@RfJbeYE^X()=&0|4k;_!5*dN@$+zoU%2?2Kc6w+VDPLrYfvQ16183Gd6^Q+* zwue0utSLHoz(V2;70}_y@+3WaJ)Sy2mn_1nOBq^1qcY?f=q2)YpLh}Zc=a>U_6KSL z1%Y}MG5(J6XgKVNYY~ej*O-G>{zf}WP(>+A8dP%Y18IQFhz37J${3DwZNzw1!tav5 zEfsUQT<7xOH`d>YHk->L5?EqNb+8-EeyT^Gg+tv~PVH;y)dB{cvZ2kAPgpxplCdTA zC0FA3)3nRg=wCh{Q3o_wdczD&>)O?Rmt)COlXeH-`WcUL9i6A7%|L1@8_er}1#|*e z1s@mRcP|4UICz~u1nXDxryHx0suoVz?nH-d#TEK;cER;Zk;Q8+wq;WDVJq zH*%)2ey*`GjC?y>+m)Q%jemzVX;xKzbx|!Y7d_j$V2+|>U_nMFW?G+!m5Sf1mFWk5`u6Y1zY$BmktpJ(=4gT`Tiz(Ju;b>5+Lj-SQasX!G%YUsaBP*j zuxh?K7PthiX!cz{iv$P0uLQ#ITy_$aNicz{u`STG)(CyB+g%kTBasH2(D4fKfonD! z$Ps7keWfkh^jFY$ln9^gVT3(S>trwZ>kiKL0dG&4{b6)zU13d2AP9wTbVgnK^fa&I z(Hd8G3M|!WJnD4<3*fF(O8iNFazeXT1h}!##Cz8468ftgm%$?^#%d@j(2?V^%zYDa z3xC%6GDy|p1ylR^)fk5!1Ku#x(Z$t?s+>{Q8(;VZc595DFjpjHf4{0qdXvg?3-B0$ zUy_KxBnrI>@bcc}Pufx4;N|6i^BA^z>_fWjzouSsuP4o;E#Jv_cKqqI;*>ow|LSuZ z&r@kgF=RDIzZm#FPd+aE#`-p4;8|6EOAjdx^AEGh*Mj?q7=f6dhb=mFTx5`Mr5qR% z>(TeP?ZmO^G~-@<4Ft3s6jO!e-rK^^&{)!@MX~0|=|SjQ;K5E{BL4Q+J!v%eT`r*- zzzzvwwQw}Ggdur4XxRBvG6pQOsNyd>9@uIK__%F+k72lKYhWNO`8X=^PxM9dKyeHg zc^$;vRS~(jS?h7EbIGUuY@`^%e>!iO8w`Bw?hoGXdxFT7a6wZ1L7;;6*EYCMWRL&q zIxzs4j!ntpfPMK3_n{Xi@Uw&zblhU)Mh+Rpp~UQTCrW{QISl{w3QHP9NuzRtz)vgI zaCs7(xb@&04O%E9`cZaVmBl(i$In-N76jQ|JFIK^pwbr91EM z;vn%CXq!4aKM5I%M3KNwj6Tb@l9>bby}#~mKJmKk_&(1v*G+O@zE8Uc;-rv7s^o=K z-Y9yy+v{X(@Pv96#ijy;u#0HXjUTKTU=Su#$oGJ2CU!dC6NHC{YoL-}*H~ zzZ7<64gk-WvAOMF=>dbSyx7U?N6Jak*U}>ZvU$qVldidA<`NQyZwuZEXySzcemlF_ z3%=hNdL7L07<0%E=lrUR?Au~?QdKHf*FKb%*K&P38FMgm-E>}TEm00(%(xPn*GeISn#4hP%#m(&$ zt~LsOf2GkMYGt%pV;_Q2{gby1bl&et=;tvv7JqFZgI2x9UG{HQ=uDijK2oJ#w*$W2 z?|SNLwu$m8c3UvyWY>mD>P7wrYGwB3{BbK3*=}`Kug6_VbW^g*RaTu@*ze|HW4AgO z-0MoKKPg=@4nSz`U6}K0NSQ`w-lY?q9L^5^x@-R4(#I)r;mmEHN-vm z0kjo0zV-?=CukR+1zJGur2G8e;}Dm%v~2fFJ8okuScWyHst5d$J^JKMQH&7&9e1h{ z>$F<%xS>sz6Lw=Eh9077WL|^L(#2#6re^i5B0@O=#4oqPmxpK-kkYDQU5!mPvlSO) z?2W;p^M>ohbWquom{61))7dDm7z*$Ce5&^c&c$T>Tp`Arzm zreyc>WkYW9c^{KeLEW@XDMGh+{6du{iX*@Ul%)&q`-cA|G`Z8rR_hH)&T98HwbDJ) z_G^33Vudqk127exBas>xMCFRjRnChInHRBQ%8*ZiPaxB4R<=-FDp2ePdnrPRBr6mS z1B&`mL;`Vm$CfvtgK4+1*|u(a3;j>d2ay$=ab8xa;XnC@DCp4xDPp7LEYig;$bcv@ z(Gqf`UGO{!uH|c5u847!H)VQ$?W)HWJSFo~% z-^a}AE-9%u(4ufNy!xT;$#;S6BxX@Oxua1?=IbC7=D0UY-cJo@1xN>To#qqwzH0J2t4n#^mOgc|@587fgX(}EWf&fJAS`y|m zjJem-B&{+87bM0EYz*6+D{DdweW0w#HEn(Hj?32f?7-TVXW>OR37#I0qO_da7!Hx& zOz}`NTE{Y6CgCf6b!+oMcrxi;PQvM4hH|WphP&9{Re6JP)v^ZRi059GdtRY@16DNe z5!4M**?p!kD86`8h?QMz$vp`t7*g#@Ha`?+?yD4xvVLc>v`U9f)-!uB*z?=$6_2gD zqvmIw&UnkIGB#s`j{Frf8|6^X+i&8pm7V8h#xf6qPLH86_1!uXV)xk11pN3hHEbKT zEq}$xL7J=vBgKJc3^$RI(p-Nyrb7|2=w-Y2EH=wNI-4)WTson>$hqRFNUKZ+!clWj z)o0A~+A^wTck_bVCIO4JfX-xO_Wv#^ngJ-64OtlaHu)oyD{B2)geN)E|vY3!!C2o{$TEZ;WnDa_kBSu`l zikB%x6uF{kd+h76xQwh7J#u{O>KD+YmQA$6nVgw-y4jC>vt*|}KE`7^U~jwmi4r^q`k_*LA?M1- zD1F?%=eZ}WTP(hv?|hlW0Gqd$Ynk2WUY4r6n#OK@q8IiKuKM!p$FoNYDZX#NOQRFb z)RLj2#x-gt6g_u2Qxad!e^SpP`}bZwi@b5#>-3ZKuddEUz;FjtiMj}Ws8=CXC>Jc` z>r~ANxR{ITKL{g8#QefnFgnZPAsodhn(RVPiyGUVKH|+K2$aIEep;-!5T|1Uiyej1 z-G1B|f(GzbL=$W2`tBeE!C6@!!959A{ZxFMR}E!5D=UIE#6uuv?y97HcWcSi#>Psj zM5~Nx=C3w##$MHQD%#vnDO|kAi0KQ;rf0?`EuYfNV$?D&28J~)V)gji;|07fW2)ZQ zs8O9ngj>?yb7oEq)OCAGz~*zfN0gihw5mem;~vM_!t>kavHELOb`#-a`Q@U8HFYnZ zu1lq}VZNN4lq(hjW_I_+G)YZkM@RgyD-NCGWc9>+phe^T9sBRU0kUa|w3)@Q%f!eP zAK78b1EZn@TcM~L@!M3+AuSccn$k*;9tQmaw&KEn>L}r1kV)~TyC@yMkN!d#d8rgO3+D=KJi_UT5TbOb2dR?ViM-{u+s#q0yiTK&_u{D@jhrI)~%un?|pHZBJy zTo27);ZSDJ^c@f*D_l03RkTe_8WEl;48j9OM%V&WKhQ zCHb-Qb`W(s=RQ8!BX+$wG&t;~(!0FsCm*vo$jDfv%u%>KL6@~cPE??{LAz4qa$<^P z`1~fxH^ZK*AA##RwWcUSbHfnw2S?-HbVu?PAZ&8-aoQwa{WRQl#(g1=!SK^0j1;V) z0BPj!n2Ms!I;+dF5iOaB!m!S?3ug{L$ptJSHX+S$fq<#h^eQF-Y}en=hmG)G-@d%~ zEXK2VI;QBXRek6WI4hedj0yUKt_Xm8I5tl8fc=B#s4?r~Dqdt2{uA;!S|4pn%6V?* zxHp^kuE*{@z19>p(U@#x0xTU1G!Aki;!~Y82B!m8osbhW$dU;$IKxFzuJQ`q%|W27 z7=O;mxNpaFFsEm&Tdi_dALR?&MvHIQD0g9 zaYxwLaw+O`b$s$7d8G%z8xp-`eCyCWF$|zeJZ5!8%`HSls#Iu*0GA+74pbdrZTM=Q zTB?Y#$VCZ?_6yZXEa@I@8r-R>5DHXbEzmMy$58@PJAKSLCvN}ZmE~h5I25|ig{i)L zwQZ_op_T2@u0EP3Dk|&uv!c=FME0N}Y>@%TiiH_3EEo0>&?~~UTBX7@o}3zv;M_|D zExK2!hcuR=Vt0*OxPBvaqyU1$3?8Dx7vuYbeF3QVi60j86EFc7k~zj=;V#@fS5qvD@sWcN819fJI-H54(cx z(KTgLD4|q?rCyS;l%cE?g7dTS**IvrOBbm^Z7*X1r~w>dQ$$n2GvUGW5?{W#qlm2z zoG1&cx~QulJFN3K8~@I7{i)3-7`P=~g{SFRdYY^39j|XRZAubGVk#Aa1i=8^4(G$q zKi~;8AkZW>bMrx{)+A)mW{D4yl^UUA&yJ(7w_VT|eZ2q^a=9JziO_>GcxFx)9!rAr z2QJWlb3)KGjeQYaaTvC%(aSpNivP;9mA98*L+8N9-PYYz5>pP;@oz$qRh1Gtg!Jwc z6$yUhG*V$h^xMjCDw4Isn?O!!3fWdt%%Y@S4|H)P<$*V{Ze}f zS_utx`gp7SQa`xoCy?L^V+^my^F4&c?;pq2))ng+(I(95?ivcu$bb>3lO?nA^~w*e;v+#N1*mR=wL&K$ReWL*u;5M4D z&xC`&48=%DKw3+aLVSsHR0>7OCixla~TFjM8$JwHNd%WInn-|Ka1}Z_8yC}J zMkLYlWi=}HK)}Iq2e%rcg`afx)u@9IZ?@)V-RFS;7iIv~unKcPmh73avI(PTEODsP zW)!N@i&yDKxRfDbZpnL>17nZ;cI&ULIRh!7DfxiRr7i6E)WL$P8^_xnce&+ z`R3%vA?usnimSTa%yYy^LqKpCeOZ9RS@gf5ohdN-ouLKHuK;bFZ*8purq$kN*&Z>L zAME>Y=M<>OIzT7C^{=9{5}%iozK)$b&+YK)=6gO_mx#N#u`qnY68FjaNXZG=I_wvJ z$6V^kgz0v_M0LD2CfPkpCdl^^`_y5>(ue?N%zFL${Op7_RG4F8~S&z&PLhApuDMe3L=o7a~x z!4m%*XQURlaIuOoC&Q025hlba72{;Heh3@zQ)UAE39HV3M)@}6=1Qv9*)1U(^!a?* zkGi6c{ld?`8~8CQ5~nu;KKQb!KO!-d`BR}22>Ck$W!SUkYSF4E$orvX5q9}0FiC|fXCl^m z2C$tyEnElg%a#uzC;DjcJ4f0<~qN$g3P1u zN$ltK=r~TvMt_XK>>njrxo9pv&jy@d(sgCve)69XPvIzsfT-$IB$yCCLBdc7h!38x zC!W6y>Bo#mZQgd#shMddk2qG54Pi>=$E|97qSSKs-k+e^U8o4G0Eqp7hSzV-GMhHe zyX8(|WHS>NA52q~JZ=K!1us-VAd!loz@icb1wN-Yh{6)w917O6zRmc3XU>U^O1Jzc zUq>;e|v5yW|8$# zX%~cRL)r?aZE8q}PaOW02?dXlW!Id&7Z5+SqhAdM^2w3R7|({+IPDtsA& zvBGW%u_HBH1TG~Fj3l6@?Wc*&**yJ7hys9qIB1*A&2b9xmg;6NQME{jg63+^sbam! z4|UcAr}PWDiIVOf?_ya7B~%3AMLuWDoVG>YAZ?}731%w)1etvgA&Cd9(Km%`niGSa zkrISJtb??xJ=VuzH@}qN%3xrjUZpeC-%yHTmGdu*gPruF zO;cdi$O>+1a>gUh3EJbWi7;`7I1d^6LW(8-xh!}bPdjlCPEz)kmReXWH@a^t)peEN zu2)vPyX0HXD+kgGdXT5iR{WB#>k-Il{zqN=EUrH2YrTcqIBaF^)oZeFb?thYCm7xB zy6nXpD=uzg2{XgrJ6}KW`o!hqHWR!1i!H(S`zj~DXqr}vP2y=n9pshO=bcJ$#lmlN zr@iZRYGWSB^SZhfApMvpV-QI_-rU(ts*bMHvpF5Rq2GxCp}g7 z0*9}PydHW>Sf6sFw?&pMH<)C=xNUbfbKBrFf`C6wM|JK-lBq! zd!|<^(3!m;pH7k*w|Uox7Oa)WOEJVt&d{zcM~mJ=qm(w)U1V4_}V8Wl5 zFaaid0NsI@A~}3;MwbT4?cttFJelS=D}5%JOxR5xLd`(xx}10*B1MoAYt?ny{5ufO zBAHA!3p>Q*j;Nr-nHE4525jMyGb+7)!OEv-dwd$y?uW`^4HXQ?44*}IYjyKtNuPLPXaYBKCX(eLQ=5fTR%_P7OoSD}SyL%h(jZF;RCMC`Vu?&lL=V3@3I&tZV+asZsbnce;>09GL=8y2 zJV+2tRaaDv#TaGtH8b#t zzg*85!$fCS{{CJ-~FKj^mnivV#mL2+h2Z5Bg!=qD6^NkI zWrmBEsOvjiIL&45>oJ{FahYA0+=_3ASRe_A!aafG>Ab}Vp+Tf-SEBv7hySnwzqIInq%P{joM8ZY;Kx1 zQHafxblcNoS0UYH#`rD9<9%Gzj?(m86`5VwXkKZY8)Xr`s&^+%fM(LVBo>0*6w?Q^ zJg6h(Qr$sAp`4J>QqqsV$NK08ZZD=SHBZP^-b?m~b8-jm^uvh^J<0dZDZB;fq)&NP zL<(|F2k$YlUGb_jR@mhygwy1yG#gE9yWq0Z5P1ySkZFF_<`3|4kj$lbQ%j1U2oGX1 z6^?281`chbDAN1*sm!~LNiNDTl3r@v)^W~1PDw<JC7W`~T;O4Cqz*imUV%Q_G8jlnyhq-JlQ(wHk);O$j$6oqZ^zwN z|G1#w7G=X2oWr%Trj#+yX@qaky#g)`+n6IUC2$0fVEf=y(JEamLMJmAIDcKh&d~$LXEXmNmr4CS{LmD%K3~%NM^7D7M3q zQ-CsV&}s-dF*Rezn_^?A^>_Mvk!BO4rq3jY5jLnm6k}1$QrJL9BB)Xt0eNDC#FU&1 zJ2f*(jvb3;gj@PxA{Dz=ACtf4;E9P6_^?-x0naVt%-WbffcP$g>OOc-cJ5Wv5)ijH z%HiJRkY8sHU&!5268h6e*NMH!gB@onlbGLQ8D#dn#?&z&BkUDx!#!dey_zd|^M3+K zF}BW*khA1@0!fgOC}^Ur0=&1Ld*gNZn+G4nc~DE3`Ah~jZ``=#)1wJTf)37SM$%N* z6xx#ny}`jJ!sn5p#&}9zgJwqTa8)z0>%>M63ZAB!mQW9QH=fZMELK0!-Z`cv14*9M zB8<(MC%BE~cuqJ(66d zA$MVHWP)j%sY0nd1ChJWN+=`(E^qg`}q!X6(`2I6Sm1P&@6E2|&#Tx@=n&Hy}qy z6q1G8-E{4>Xot<2y)EtzrmacaV6lN2T+e9`&00JZQ{;3Z$-+fn zUfNYsEyX3S>+6Tj>(@gUWov}e(Q276ko{U zUV5z43vzC_uFhOgCCj{&nz$$|gaXntq*kUgXn)K=Pgfq+u2~CPuDBBVQ5EM#>QjDL z89P{3>S}~Be_@4jU6&H(J%D+ujw`2$tf{&)gC>DPM~>`kn~utM*>)MF#+-q&_)$mS2;E9oQD%?UJmNAAKyP@`?3gw6x*t`k;$1i>n za=Bd1cP>&Gy$t9hBl_L2rXRlixj%xvufML0_9SVO1Wu%uqcZxLEOg+K%h6+6m)57U z`{t2K?57;`lv6okLYQWDu1^d0VZtgPbSyb zkYE7L6OCTl{bC^9J}{~g8InCif)1)_6f8Z1c9FGa+u30mi~1hPj3mgSVW=xmFK`E8 zwu%XQ6;kI0FjIg)+XZ9Yg&8kl1&Ms<_z5_2;y7HpbEiJ~$OZ)~cteN969nwS^=g83Vgy++yhODFxi~UzNB)63YCzQ)i49e(C8(HmZ|W9x#FxAY!uY9 zKR)%ysE#_&2X43lZrHIyb!wx1Q>+}NS*hwQQmfEJ>g(37fpz_BpiPZAEr>XBk6J;T zJaYz4oH-2?$xP7!9cUB1di#!$E0+ukJ<|4C&^AHJtp{ieA~fb>RmsPh!})sw3F3A? z!wa4R1}^Mj z?4ZZm@f;PirPr|wNiMc$#QqqIrbkq47k^Q*Ss#4wy(sY8#rxp>H{OK4F#(q|?FrSw zp%Q1Y;F5Jy&`t=oK9_sLxjI|UteET(|{hvCdLf|g?_S2?eD@R zdM~ucg(|U$`&$U27(?S&QFRK1uFPB$18BaKB^Q``C@j~+#a7@u>WSu?!1a$zzx<)$ zVK_fA5%p^6$NP8N;DC-TG+Qr;2Jyb4IKiY1Ii1b4hb{~?^22yCNIHZ&&&Qh5E*Q?1 zf@v$u+I*){F9V84Lv>?vx~M{BTnOc`S;ppYvX$nxRHgRgbhs!31#~rN7U;A$SG6&m zT^@gaD8~&z)Rm3Ck3zpx;0cS#ZvOL}d!O}0_#NC_6BWj6jy1li61P`qF%>LM5dzn3+p1zEg^C=| zW)fZWV{yMXMITT)p3c~j;NTcYWwa!Ck)N!kK<63ElMFH^2{x-;knRr=5*R*`1A*e! zW`w?h#wI6Jy|+BxSUjxUkqEhnZY*Pap*nG4*&@|P1NT!#XT@Z>1TVg^56VGcy2zo^ z!gF;IfQ1}qXcGiOgmipzk$3hoBRmvR%?o(W)RW@$$T?L2)|Z-L0#yS~sM1loZl0-) z7X)fuRXKKi6{t>i^VIgfFtr!8H(imd1k<1$020?lNxe$K<|gl!o|||=iY;`xE)$RT zt*n=ZD|-9k_jcc`JgH7ojBZs*Lp`2BEoJ}PZ$nrzA?-Nu!Cg12)Vu{3s+fc+&&HjY1XcKs zD$Uygwhzzeg456|lC4gYk5T3Yzy)?MZO4%{ z`;T{Nwq_<|2_L)g`d>Xb2y55$D?3;-6iLzfyd0i?{WX{>7nR0BGRw}*13ExD^qtVg zOFSQC6Qs)DYC>0Xr3z$kBLV~^)}-9W=Xz&O5~Mhq%Fugc7wmy1f|A~%L8TMiw{5u+ zCQRHFm9Dz~*T018uenA^V`L{GHGwio3Z zI$)U8;p=wnFy+=SO=c`1397-2`w+7664~ioOE?+4v41}l@p=&HJ0e+zwwAO)J84pJ z1@owa*p2KV6Ejs(p{`lO!lD$h%{3%HT|LXxTr_M=SFfX^Llt&VLFmvV!1EfLo`#p+ zcpWtfR~3m!<8{9CBOi_Oj4wAGkTe=qvl8_F==zc7B4^t-S`~~6NU=kiE3bTguD9L! zKPkV5pZ+E^5oDrjhe}XK3G3P&JK>E3Z<|WM4!m>pC@x3THcIYGNH%f)r;P1#EKbb| z*E_0TF{)vBH?2Xb@_jpZz;#z&z2I(hag1TS-$qm2w3CU{G7qlXz8xlBc~z;pD)^iy zx6_E_T64W>-q7npt0+TUW6NvoF46Y8qT6UFf^t|r9Nf&DUC3YG<>eAelY5% zk%2VMoTT!uTek+*cK5-iHS1tKr89NpQ2Ovx7{fxVyHI)kSap`V++4Ol%1rhq2_+nM(F2RNW;&4D0aH$$NKlbNeDD`|tycq~5eiR^jP%!Ty9&LP zSE$497`F0 zqEV z$l%zpQ^evB+nJ@gPpHZey4fA~M2DAte!kDmFA1s+bVE%SDif1UDD6r32zm^6Uwb_| zMJ8Yh9UbJcWGHozbeBc)%OUxx5>B{~t;8{P2%|bLNxO`ZG%pP4nEysf(t;|LKr=B_ zre;Q!L+_?;gxxrDOGqwB$3^(4x(e`c3~3dM&P!J~iLYCzQtL+I3F$F$=`O6UlGsOR z#EP13unR(7BC=!gfhH}2jWE2UIWjRg>4BmP9)9X6ReMpX`S|8-yLUrA->D18!ezot z3{`6UB(xPZ0PSrj5)3Dc)}TNQeYb_$9g_j$(~!yih^_6Pp6@g6#dg>VDRcyiyUJ%h zl=9Z%1=4k7SQwa0WzVI)aLm{PX%Pv@?y_UeLepQkFH$p+^qADtLH#;N5)J3FM!zWo zbAWn0^LRR7p}j7&4YJ6Nmy}M-ruuO{iO2L>;YL`ICWf*Z2W|3q51T3ls(czrfx}v& zM$+rRd*A~|g3Oc(Te>U=@r;e2{PX0btsNttA;s1~q(@0+VsM!+J?CVqJO8VTeeR+p zh{N)`s1kn*njDe3mT*9XYL|W~jNx7nG085p?$sFRmx@Sz3}6ka*uy7|D*F}XhdQQn z-O_sBtt_8uivo)HuUuayTBT_1hDvW zQvZ_Bb5HABnt&Z1OQ=nFJ?BDnJ}SR~NuTr4OjrJS$MfE~*yk=vf<`5NqS;j9+0gT9 z+`%nrJ5Zu?#5xJNM8?%U%$;jKR|i?d7x0OXeT;-C=+5Tgqqp8>660m8GdC;~>i9d# zYzSNizk2*P@H7r)h6m*dNt*qpO}Q#-g-+((xeek)2Q2S{(x##5K4|q zIZK(GNX(`3eG#X5B3yJN@sRymtp=MJuxRkA@@!_v$>bhJfoJMsA8{|W&z4Y$!_gSt zhyXR^(UV~Ub6bz8mSh7>lg>4$&%`OmBLE^Znwh4wMVBEcRS5#(G_j-5cl z$jCVp1L!CN-(1b?Nv8GGjsVEX8DRBGN0T|qJg)X4W6jb|_Qxl6`nkV*_qUT9S}wGp7(SewPzTGJs2CnW-7wjXTsu*d73v_wU*bS?+@COK_uWDs**hvnZy= z_qh2Dz~si#b#a7LLFd${NClq@Lm0RhA0?J)yhdjxC*jd2pMsI|=b>?@hWQc30Vp9K z|D2l`hu2XGWX5SkZ4*B7d$*Zvk$UJFGO>UP`cJCEI!18e1wR@O5|Z}i_)H0?27{b* zbGbKV%KIIzICH7JT~ZQkRxfcaLT}})wX;^#glWPn>N6)NtrB|VtN5G>Sg3qssUJz2^vyaEnYQ&LYBFUT_#?Y((+8b}e@85oV zjic^zEo%aezZbAk7QrD)c!6>f&~1I zzm!eyC0^W*O&66~VZQzDyHKVg062i3d+9~^==C?LIKRt5V%CCYM3RC?t)fB|w5TSI z$)Xc743PnKr;-{?MHMLEnkpSr^PfTxHe)ZV-ncWx0zNOo+0ik0{m{EekfvK5?rLmo zOi7f@c-_MI#_2){UVPFOw8W*JlgX@FMI)8@2U zLCV>vX*Vg84qJV-WR1jYNXz)9C>GO8qr*dHwSy%Zo3*KQW&GIx_qTrshmRgpJ(pFE zFyl}MU2(+`9xnBfe)^@CU}AbEYSeYr6)#ipctuy?GR`r~no`f{dqr)COjue! zE)CaQ&=z!v4Ep-k;?j3`f#-4u-Hyy}QJy|Rq_~j%El8wcsxdp|61Njf`j&aF!Wyc6 zlzwDUi?B8#HHr@xinXNcrs_M&*xsjeWa+l$I(J(#2-}RR9>S)9ak3zVDle7t=IHCv z_z2A$(`YJqao;}GKSZS@A`$-nM?VT_N6RA8T!(lukM>1dx}AY|Hxb3qDE^!D362q{zjHCgPTUgsEQ>QEK*9DMA?#ZsaHYyyZ(;;YpQ9s4W8kuyaZhD>x_^UjQB2^u zh1vo`Eb3~QG`f4B4ICtNZ&GBv>5QpE4A8d1mwb!1K9s4S`el&BOzjAix}ql%;s;CMoT+GX~J-l1>%q>MA*Mh6D0*pEAxe9&6t3rz|=kF2Iw>! zb@TbBc`EZ1u0D$dSY7PC7Da+OX7KR$pvj7@E)|sT>bahNK}LV-n;}{$<-ERd4EgzF zZ$in9!duX$pxPUZjE$=7lF{*T)#hLdJ*3nJdb)%jcNI@q#YbJmTToaG*Pct)EVu05 z4P9Y%73M&5L06CI%4XoMkKd`*=z#rDLR%gd3LP?3Kta7WS|p_@N>ikPvHGdsD+Pz7 zW(Ore#%7Sw_odwQ4{`NgT*|NnELtvZ#$u~WgT8UIX=+V4p$y5YHd}Sk6HVKI22>T* zt@DK`dFbryP`a>`+Ji^g5EgTT?!fVx8TjiT{t$*w zoCpIfl^-vx+8ug7nQ??T<~oZoqI?aV~iIO#)g9Nn%-*@odH|6{iSDnXmS+a_@ zBnxS4WRP4Mq%u%R{qQEG67U67?JVX7SpeTd59rXz6F}Bes*FPFs|=eggH*)==qcsN zc6R1eb0jJv+L6sccV{Q`=JT+ww;#3*3_`}!Hd?n?9N%ZZ{}9q1Bl`luu6FNz6V z9!TT;jVys?0--Wy9UYxIu2XLbO$J$E?i9~u-%RCl=nQe+K?1xi$z(|+sHMU8sFCq5 zXj$k%OC|QBU;?~rW=h3*XU>b?(ro^3NtBAOt-{=FstSXtse)F0O=uCRwq5BQ?7seb zxN`F*=+1XRPe%?inKYyvPt_Zwx`I&_imAS=JI2YVO+s|dldbBS1fgvXSe)h+S_12R zCSmZ1cIZ)gc>!saCI@6}Ri(?iaN?tG6dA-`~gu_H}z!p=`qx?h|kp_>Oxz)zkA3_tKAbKzd}UcEBW-OoD9@E`yi1 zr@IGSoJq@pP$i^>PaMY^h#Mob{ud5SpX^y`n&+yQ!_3SyjGQ|UXV0I5v*;ZipO}EL z3G|MlSClFWQxSon8kkc4Ocf37K<7cvH@*Q|H*EyoY~vlzgNjb5!6>!OZ^yQ6cn!O> zN;}6`W6j5DO@lDBYv;DB;D7s{{xy_v(p}fLMwKrMJ2QsGf*TQ0eL$etKrVdlo^iXn zo_5n&iU&M(Id;G#mP~>aE>j*l{2jc6_dp9GY!XiDFje>{2PGxh92_2o|NnuXKwp0! zc&?7O@~aiqylDpQg%c>*O-xQI!Xu&+rXGk^iDHRS-=I?G*n$H{g1F&Q{c0c|MH zqaBdKVcx=}ZpQh`3LQ@Y|8`Y}%e164NK`~sjW@4b2UDsc4u_Hm;N^n{%oedKtb$KP zLTO`$NGZ;Zf`vug1B*nwz<5HvK(ZAuY*6h;|{oD?OJ0OY%Zpdq3EF=H2td< zr&KXT29ZZnZ=fG)d%alH6=BtGQ>{9TlL-wijW30(m?+e+cscOgBOU!cPXTu+9A>&6 zYH*0lBEeRd1}Rg)Ljt?``s?8E@Q^D0N%u`yeM}h>U{5l+o9j0zy_*o-En< zIx|`5>CD60zFz3<=|Lw!CrX<=unq}uO&>~^YVWcstzSgk!LxTe+e`Bq_WurL3I*q*Q`<3Kr$5!0|(xH7oK_XMR?zJ z*FravziNEXbc&sn356__2Aj9$dqZHZiqy(WFIcRhu(+91L*Hho2IDc#q&oAjh?M&f z3Khc(sT95FuYo!MrNMh!Pa4$KKDhBx`uKuueG_EsGiBnn)0e6AI@L)nl~FNo)M_%U zOflaDp5HUqd}?qA@_Y}UItl;JeSZx_q2tmhm5vCHq-1Jv-_hBjn%$?V>l`|qT#u`2 zJsx^5$pPi!wRBxi6--D`T!-VRb<~}%C*K8IHf@4FDyapb6w|!dYb7zCl(^amyDW;Z zLa))FaHtLK$Lv~|_k_%@cI}9biYG!#BWld;80Ae;TJ2k`pkro~+fb)85nLqlK3JM})WXiLP|3ZVy> zE2+*$ac-tC4TVw}Dy5R@I7c?sAW@_?@*11$8dZ=LKg-d9L^f9;Jr;>}h{ z%VItxJ=G}b2Z8IJOm%hL?`5+;L1XYfTwScUH+VMcu1z2jJ`OEkVa8%^gtwC}sjo?m ztNMTri!CovD^A8tkyJTrA2N~_A<-n9L34ITvzQ-T3-~}uSXIZJbUQkqN%!{t2hjBa zmz@CBF+iO`6=uMqEx{t@(sn#$-=o(KGxk5d$jAmbn*hxxDTGG*R3Iuqqw>5g0X8#g zk_h6wDPlq)9A0oTnK#nio&Sg{55fu&Aiy%k7FcP}!op%M#7TRh1SVv_SfQFq@5`-O z`#tV?kKoD^ODU7TRMcG(B%mAT8=#xDTUc1MIg;`|H`TROg>8IZ<;<_9Q$xA6{SP7m zK7^YbUr7Q~#{|oO?BL+A4Vkg9u!v!bhmga|1V&2^zVD{aWqbRd=8{vRq%%l>KCCd7 zg#-zdPKOV}U}0flk$`Ti%6)W%oXqs}JmRD?KL*buJK(A`@L4tzqyTE<{%?SVg+*JV zCOHUHAbhpNoKs#`_b1nRE8f<`a!U;uxJC!t`i>H19_Mh zN5xSYKa=jv|Juvt{tk2~%=BszAiy${AOX+p--30LSXi_?qC!ZJXo;7$Q4py ztn75=_osWiehsesCTId&)!3(HCqZ(O;FYkkgBBJo4xQd;g56DUr}hL>d?;0ic4xfK z&NtHC`CkAy)Tphn+5`x&f;EV2?4X53>w}q`a0tVpbpZ@nb=?`3$-a{5@4p{7r(VG) zRyq`BJ}kQ=7{bO5T3EC?n8_cH%b}qYLy&AEA7sHB?AR#q4_-(vAPk@DmMaw~#?$_0# zX_1nbST?iY%Xj|Baa3jKbB#uTgcT)0f>nzxELsPqBEBI%p}Hzk@!N{y`H;yS>*!na zq?hS<0hYNi>g8a?Ns!cHZiA>TESet5|I18G7|IEzl^ngmoK=M99ZUE3QWy-`0FQw# z9Nv&vaS|lBgM)ZsY;LiIMYBSO0fx|}_3B{qI z0Y?*|?NVo9(PYp)WhCgLSWa1bsr{KXeLv%=%>DTG5H96LCqTlgsKX&_*o=im^Fehz zz(1}~9pa?m?ue)O!nnePw!88I!&1%#~LXRdLd{C5;XR~$MNYdu&}ULb%ewahQH7sX4W9}sZ0=` zIg^miyqfCn{=SpRP#oZiMvMcz6dHmA3D!PnVbM5!ojfrcSLLUm|pkJJ*Og@wf`A|yes$j|hK))9fC>N@9`mwqAF+xs_=N(< z4fczUbAmJE^X& zU!?N+AK$fSoeJ>5@Yvj0)`Rokk+v(Zu{NU*ua7VQqEQsAfzKBoZaD!8d5>HfZ7p&CrB zFvB7UmH-V}jsyv|`iw<8LQ8<4#KC|w>2qEdne?&F-kx88m!?*j`$60P+FJdcjg}-q zf+a$Wb^|jVfdw$K|Bdm^+}o+1u7^2ye-63|Oj9&NUum=~2@-TGPk6vqsJ3VaC?7C) zD!$_!$>h5pb2>Vn1jpHnZyg8g0GSspO@bk8&k~C^fE1jSz)QX3_4Yi#GcHd4sUgtz zzqZN%SuEOu1PK&Nh@P^0;t+z_!2}i-jfc3<0Ys(m$)iCv@VJrd0!9Sr6d{v&C)?lm z6W~OEa0smQw;;3?1L(fSaGxYQp_v?+Y>JYK7HtOI;W8#cf?)a`7Pi3TT>5xh`>s2Z z&gTz$U3s+q@n7RRN2oaxSS$!_CkBzj1RZCODm0J?DXh3N3jj3wS`WdLYf7AfU z5uA!2$SQ|Y)o~7`d%FHH)zSGZfb$w|b_ecPA7yL*TRhsD15BzNVim!PG;mahQ4Txfei$i@>|G$zRXA(gpCx$(&U$6!W!&am6v`%)^` z@d)VhS7+O$0`zjhYJ(8Q6N-D~EcH0)RHJGK)j4juZs1NYRP!TQcAP1eau0aj-A}sN%+vS|6+b;|rN8>ZlHfe33?2S+D%6T(*b@b+(ij>hAIb&l`u%&X+Q|^p7Aw+g~O_(qGY5f2lt#30?#w6}lkr!`pI?uq0@) z3G^&SBUbubK3Ec50DLOeD&;)^qf8S^f);fK zN_Ud+a=@HXp3l9S?&*2}Ro@pt$No)Q0$g5L5?mmZtx(E)fy37<30l+(9Q|))&ZdHl z_f|UJ^F%7w@jF~irSC_8(t@q?W7%OzaFM8>2N^Y&dvNw1P>~FbsaA$uMeX8#+H`%IWk`uQT_Cm+kn4<2V%hat@c0wf(IeED0_V z<->>X<(%CUlU`Ws!=hag+KfRa2bMIeG(A%A3z}7`!u2M3I`u{--}NA*(=XyC?|_Z_ zTNPLmybP#p6H<{Gd`((gVcR45^YdtpUh7Cl2Aq{EoR5i&cPP`9f6;X_&w%4Rhi{(; ztNN}QED6>DRH6&#`1^!Sy|Vz_=!ij__bXBL4J0o}&pYVm^S?>uaxa48zYdV5u$O78 z`mQc43Dyy0FGLxD3Nj3UMcYB8zsaxwDx*rzK@~}kr&1@~&iuYqHvJoLJjzo)1KRFq zRo@1HCBbEY>3?j=unnPPKgs;S;nRWZo_4d@*E9K!z2K%v?L7?I@!?z5w{c)ea2Y`* z{qf;z9M}L|Y5_7~IF|`miv1Z@3(3L-NhE(4R`W{g3eT#*DJs2G?n?cjT=4ZCZXOF5Dt>q-^&HHw&VeNdrK(VjX*m6j@Q}oLMoko z0lmEkL05Sxf|dN50+s|<0in$h)v5t*he$(0lJSCt&JL~iGNlAV;B#I?kH)Bz%f7>N z9ebUO_k!c3-U3a2GeA9&EcrDJED5e6{Gp+{ain}x+UD>L2MTkcf~KhI3Y7YM)Mrch z@|>GVofKZ?-CRe<%c%0c0Z=#ukQ)Qt-@}HwG$AYrHUPrBWK@$s2e#kIsv_)0&6(q) zC|LH9_+-jEBa!@gI{k{5%N}&VIf5G<1#Ryufr^N+l3%mJl3)WNvKxXV>2Q}`%j}Od z3k>9(UiJAafy+7ep&|73MOQt_eo_X4YYsDw-i{{u0U4EFC&ayyW!sHIsZ>?%(Wv#T3!doNA>&@X z=1D|_ioArXenCoa8Evyuf#a5?>rSv#>VTU~54-8qAS&c8lRB70SYlD_6}DLJ9~1>RQQU z6&yZ_@1NtIS7Pb(an7B6j+Z{^czhCfei&_il+i&B4pMb(U~`MZl3)`-w+9XO2nW7~ z<9(0zSh6-GLHf%g$yf)T8wnAJ0J%h>^aEf%K9=z^jXI8Z8p*H7Q|=5)xo-owuctaP zsMRO4fO<+l|Nf8pF1P7fdBq7Q+u^!4OgG0ZH=ui=#53GP> zheVe;&QjjnZZ>z?_1qz3&bQF6Hx62@CBh>W*EhScAuVkTOM)!`a;Q|05JB?0Q472s zS~_PrBtb@`C#fxOAfdoGn~D0?Sm3bRo9Ys`g z&rboIoJK3bMoWAai-aY?HUvqE$P>GeZ1wwx6P zum=also?*z5OP#4o4@3^9DHHDKC{ObI#79%iK?QQ(6B zY?g*aonT4OVqT0MKHQyU>?U+T^tw#m7$7-HDSBMVHsjlyYqv)F5jgR3=A9lx&I`x0{Ow7E{-7;jBn3ue5PRy&R ibpE+LLEQ5CN&YW~1^WDs#yA0uXYh3Ob6Mw<&;$SyPCBmu literal 0 HcmV?d00001 diff --git a/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/Ic=_Dot-horizontal, Size=Small@2x.png b/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/Ic=_Dot-horizontal, Size=Small@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..064e04cdc3840af967f2424dc08ece06b8303618 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^svyk41|*NpQ(y*CoCO|{#S9E$KnXEbM$aIX4?sc2 z;vjb?hIQv;UIIBR>5jgR3=A9lx&I`x0{N3XT^vIy7~ftz$jRi$!+K%i%{;pm7)FtC=3Ywc|gL^P2``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBIWbQc$B+ufw^z>k9(E9Ddnl>W(yw_?)q#D= zgWwN_Aq^`SE-{u&nEhYx9YZ;T>JFAX0hQ{Hk5rr{lwK>!tDN6m|0VOScrLdUMlTE3Tm1=#gH&aQs5X{!IW+}n}!o-ge&*}3E0!-a;Ql3WheIqp5b z>B-5d^UvqUxqjVr{*>0~OVQaccd( z8_PD>X>;F}3I7+K7*=u5zkU13qbpy{_gl4jv+w1K^4j}R|L2?L6cxVi?+!JO+nN)9 z%)~okCfazpR$4yMz9weCV%0* WJ1?;H@{7-4Z+W`Q;nCQk@NVaXV8m#7%6GZG=up6-OsdM^#0eg_vk|JUgm#vJ9D{N%S2xtg9 z)auhd-03WOr>17R5xcg1h2#N`knj=o;M?L$lPIYG2j zuR~#nM@s#Q3?1c#&(GRo))t5kZ0h^N{M()Wi;RaQjLx;XSn?SXvF; zT>$Z+Z7O4<s;`vi1mLODo6?i#k+-Ygc~Np{q67~4f!7IfDI?h{bpC{%1?N6Df>FMx1i`RA zPcM=vif-usO1vA<6TsWpSkz^!=GF=(6sSSV>OzE++wj3Tcckm0ecHy%67Em0R?p6cb98Tz)-aX$r3h$G1mGho g?H}CgLsL`NPkk{TWxcG!C;$Ke07*qoM6N<$f>n|t4FCWD literal 0 HcmV?d00001 diff --git a/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DropDownImage.imageset/Vector 17@3x.png b/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DropDownImage.imageset/Vector 17@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..8c5a09a4bdd152c38daa4d2432c4c5728ee800ef GIT binary patch literal 891 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 JPDHLkV1oFCy}bYc literal 0 HcmV?d00001 diff --git a/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/likeEmptyImage.imageset/Contents.json b/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/likeEmptyImage.imageset/Contents.json new file mode 100644 index 00000000..b2013cda --- /dev/null +++ b/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/likeEmptyImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Favorite.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Favorite@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Favorite@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/likeEmptyImage.imageset/Favorite.png b/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/likeEmptyImage.imageset/Favorite.png new file mode 100644 index 0000000000000000000000000000000000000000..88895e10477c949f15088b641d674e4708c441d1 GIT binary patch literal 490 zcmV-5140C%ADRYN}npUbLzL=mqo+>y|;Jt!BF-Uy4EO<4J|6E@I$GHn#a(xu68< z_^L&)y<@uOxV@^-=YULyk&qKt73eUwQN4Wl9y6vSf_Vu|!`3>Yg(FQfSTmsdf8DewQ7E|+~C!(GKLA@E6 z2cK8L&kTC6Y{t+z48t55H-g_BG9N}@C7MwyU g7W$v(Zv9W?3$Y~7;|Q?q2><{907*qoM6N<$f(%^E_5c6? literal 0 HcmV?d00001 diff --git a/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/likeEmptyImage.imageset/Favorite@2x.png b/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/likeEmptyImage.imageset/Favorite@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9ef93f651775dbbc1c88c970a3c0d9d6c8f5bccb GIT binary patch literal 857 zcmV-f1E&0mP)Ua)E?e{iK##5=2*Bb=BKe;M3?H!bg9%+r?IO8U(=tpK~a6*tNFX?IYTC zQS3@}W^7?Mqf-FkAO_SFU!$^iXfp}Ja14i;0vl1e7<60)8kE32!SRUv#m?>o_=Wz@ zSf$v{a=9FnFJKKgqXbWjDrUS8BnZA>CMO5=bO_f4+^>QTe&Az{Clv^8_v8VSTDBzZ z2e5r8@Noyom0kBvHC3T*N?83w==7- zolE%l(xKl2a%xa{j#c<(IUEf+q&z5D5;OACNR?w|F@?YajAcz2C5y%4mM)-vzt1n_ zJ}qH@w`N({A#N$V((p8_RFxz1C3IO}6u;?0f-mRf*np|s0^$Bh7ZQ9$s_GC>Vs3}E z#p{yJEb$RpRhgaEav{c4=klHG6lWEDe5X7^F0JV`sMAW^>-EkC$$LH>9x9&g!i`;6 zuh(g((}~HNa*QZ$x7)PYY<^OM!oYdvzS?!NG2{|=(OZ15b@90lxoS!ciTgsIpH+2A z1sj9wxD`p#j?_b+C`dJ;bhP`Ic z7V;OL_w;>&XY!NTqU2ulqTx{YjN99Qj?mG70>Jl)M^&9!*UsEsqb^)+K!F?;?A0c0 z8g2}@5!KKQ)fBeH6}CklU~E;tm!}apR&79*19GoZ;aDdDvRsgS)5D$S8=a`yYfwv4 jjX40!^*;nxUFFap@Li%gmE)wF00000NkvXXu0mjf^(>59 literal 0 HcmV?d00001 diff --git a/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/likeEmptyImage.imageset/Favorite@3x.png b/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/likeEmptyImage.imageset/Favorite@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..507b068ea833d0a6a642f1ced1f0cd973c9ab54d GIT binary patch literal 1243 zcmV<11SI>3P)A>Cy!{x|k=xrXm$bmkyVqyL6P~1t8xC z>xnsQb-I7XGr8Z4=WZn3o<2z@tyUIkXlQ6?XlQ6y5GzuUZnwLNOCP_t_xJa0Tvs(K z!S8luWo3+OJQ|G>$w6Iqr{orl3UyGCecW~eABj=P15_}s*zO2+_wou47R;8vySv-R zOLnCgLlvH+?Lz3OgbQ`qrSRL3!a;&jsR)(2z-=VuNKmKL29sr%pBOH?DEHa2 zfyV0L`H?fvFzOx3$U8VYI~zy`CY#A@NS}x&mll%B#Ag!CrKJ<_{mvCqCbGQ5u0&{=>pa(xj>JtO z%S&RUN9hD>S(>BBq_QaT)XgQ>=iw|Rp1K7&9#(5bvb;n_dXi3<6O7sT()FZkieDBm zIc>Yrq2+fv&DFyb~eV{7Q?)XHbT(3S2K?DJ0nUv$ORm1kn6 zXCqfW>OQpmexKvPU5K?rF+gzf9HLb$gNoJ!nuuqFnt~bq^K8AyLsX>K>ut+|;JdOS zoms*87vkX;SYKcNgWHc*8C0OlGAQ~}YJ_63N(_Bv7&XB}b?htS6-+23OEmM=*4E_u z`ub98fJ+a=cq1YljS!m|HOUlAR5ZPouIGiFIz+43fv=24VulhxkYEDQ6Nu(U`xAbz zj2BlbIzTK#Jntd)TmlIeOd$FOqJPK&L~m|xGPL`}Q{+~|L%E!wLg&MQ=S@R=Q#(?C zt*tE{0Q5aYf)CHqlsOO&5}hX^sRsb;*}kV(VX>sJU=k=g^MFfjt*R}bGgC?|2@dhN zQ0IgWdg3Y8R39-dOBcd8sEA(ZOjDS861;n{GIDBaT`VrPQ&l>`wh z>ET(hoN%J@`Pb9WK(fRl{{#njeW{Sj1rzk#q3`@w0{#I|hgg!!@dyPD$~hbqHfF~t zGCk3EqUX=Ggp+C!OdvYW5bY$-VS5p36HM}ou3IdrRWJz^O^*z&=vS$k+65C8ZEi1h zdv`1gU?GBuZZA(D?zKG5&Nn<9*MHmuZ|@o!8XEp9{sPM7f?ha@W10W}002ovPDHLk FV1m9nKTrSw literal 0 HcmV?d00001 From e0033cc2c99b9e31d2227e6b6d5485d5d8903ace Mon Sep 17 00:00:00 2001 From: Kyxxn Date: Tue, 12 Nov 2024 03:37:05 +0900 Subject: [PATCH 02/15] =?UTF-8?q?refactor:=20Setting=20=EB=B2=84=ED=8A=BC?= =?UTF-8?q?=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EB=84=A4=EC=9D=B4=EB=B0=8D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Contents.json | 0 .../Setting_line_light.png | Bin .../Setting_line_light@2x.png | Bin .../Setting_line_light@3x.png | Bin 4 files changed, 0 insertions(+), 0 deletions(-) rename MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/{SettingLight.imageset => SettingLightImage.imageset}/Contents.json (100%) rename MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/{SettingLight.imageset => SettingLightImage.imageset}/Setting_line_light.png (100%) rename MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/{SettingLight.imageset => SettingLightImage.imageset}/Setting_line_light@2x.png (100%) rename MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/{SettingLight.imageset => SettingLightImage.imageset}/Setting_line_light@3x.png (100%) diff --git a/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/SettingLight.imageset/Contents.json b/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/SettingLightImage.imageset/Contents.json similarity index 100% rename from MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/SettingLight.imageset/Contents.json rename to MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/SettingLightImage.imageset/Contents.json diff --git a/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/SettingLight.imageset/Setting_line_light.png b/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/SettingLightImage.imageset/Setting_line_light.png similarity index 100% rename from MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/SettingLight.imageset/Setting_line_light.png rename to MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/SettingLightImage.imageset/Setting_line_light.png diff --git a/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/SettingLight.imageset/Setting_line_light@2x.png b/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/SettingLightImage.imageset/Setting_line_light@2x.png similarity index 100% rename from MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/SettingLight.imageset/Setting_line_light@2x.png rename to MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/SettingLightImage.imageset/Setting_line_light@2x.png diff --git a/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/SettingLight.imageset/Setting_line_light@3x.png b/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/SettingLightImage.imageset/Setting_line_light@3x.png similarity index 100% rename from MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/SettingLight.imageset/Setting_line_light@3x.png rename to MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/SettingLightImage.imageset/Setting_line_light@3x.png From 2ce7cd4c88c02f787dfb9fcecdcef333c2e47140 Mon Sep 17 00:00:00 2001 From: Kyxxn Date: Tue, 12 Nov 2024 19:31:59 +0900 Subject: [PATCH 03/15] =?UTF-8?q?design:=20=EC=B1=85=20=EC=83=81=EC=84=B8?= =?UTF-8?q?=EB=B3=B4=EA=B8=B0=20...=20=EB=B2=84=ED=8A=BC=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=B8=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DotHorizontalImage.imageset/Contents.json | 6 +++--- .../Ic=_Dot-horizontal, Size=Small.png | Bin 190 -> 0 bytes .../Ic=_Dot-horizontal, Size=Small@2x.png | Bin 253 -> 0 bytes .../Ic=_Dot-horizontal, Size=Small@3x.png | Bin 385 -> 0 bytes .../DotHorizontalImage.imageset/image 19.png | Bin 0 -> 734 bytes .../DotHorizontalImage.imageset/image 19@2x.png | Bin 0 -> 1417 bytes .../DotHorizontalImage.imageset/image 19@3x.png | Bin 0 -> 1623 bytes 7 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/Ic=_Dot-horizontal, Size=Small.png delete mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/Ic=_Dot-horizontal, Size=Small@2x.png delete mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/Ic=_Dot-horizontal, Size=Small@3x.png create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/image 19.png create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/image 19@2x.png create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/image 19@3x.png diff --git a/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/Contents.json b/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/Contents.json index b0418650..b8b793b1 100644 --- a/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/Contents.json +++ b/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "Ic=_Dot-horizontal, Size=Small.png", + "filename" : "image 19.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "Ic=_Dot-horizontal, Size=Small@2x.png", + "filename" : "image 19@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "Ic=_Dot-horizontal, Size=Small@3x.png", + "filename" : "image 19@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/Ic=_Dot-horizontal, Size=Small.png b/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/Ic=_Dot-horizontal, Size=Small.png deleted file mode 100644 index a3ca5aadd93f3408a63948ea33ad57cc705a9164..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQ&H|6fVg?3opai!tBg3pY55jgR3=A9lx&I`x0{Ow7E{-7;jBn3ue5PRy&R ibpE+LLEQ5CN&YW~1^WDs#yA0uXYh3Ob6Mw<&;$SyPCBmu diff --git a/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/Ic=_Dot-horizontal, Size=Small@2x.png b/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/Ic=_Dot-horizontal, Size=Small@2x.png deleted file mode 100644 index 064e04cdc3840af967f2424dc08ece06b8303618..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^svyk41|*NpQ(y*CoCO|{#S9E$KnXEbM$aIX4?sc2 z;vjb?hIQv;UIIBR>5jgR3=A9lx&I`x0{N3XT^vIy7~ftz$jRi$!+K%i%{;pm7)FtC=3Ywc|gL^P2``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBIWbQc$B+ufw^z>k9(E9Ddnl>W(yw_?)q#D= zgWwN_Aq^`SE-{u&nEhYx9YZ;T>JFAX0hQ{Hk5rr{lwK>!tDN6m|0VOScrLdUMlTE3Tm1=#gH&aQs5X{!IW+}n}!o-ge&*}3E0!-a;Ql3WheIqp5b z>B-5d^UvqUxqjVr{*>0~OVQaccd( z8_PD>X>;F}3I7+K7*=u5zkU13qbpy{_gl4jv+w1K^4j}R|L2?L6cxVi?+!JO+nN)9 z%)~okCfazpR$4yMz9weCV%0* WJ1?;H@{7-4Z+W`<`qDA0hT6BS; zup)wLQ6iRT6oaAS%rKeP@z(E^V|-)v!pnO(&w0*s-tT+{4U5HM#%wk_+iJDujM!i> zSjSeA$z)3#Gr{I^xv6@+zSCqf*?YZS-EOy6TrO9QwZ0x33WZFBsdl?<2RjRI&1SRJ zJRZ*m*sei9!C=q}$s&uV1&rs>5I396ONm6Hq(3;7N;&%d{vu@n{2qhBP@sMQ_L|S< z`#ut&u)8{)&MCOg(>jFL@cRf^0{c#sX>Pas86?L^ZR#9Rc?8lQUa$8HHk`op^z?SZ zCHxG&Lt$qiKLB>7TCKiKr_&8-IvkE|&1TaN?^Viu3TwfAaGxlb%W-2M5LggZG%N~G z#fR$YU0@>K(akv|Ksc(V^T)tV;q#3~eip*lq{lQhS~is8@pwzEuMpN1{3O^X z#EWvMykxj4vcO-`r7lo^RM1Z?{Hs_jE>nDCa~Bs8YixW(?~2uG&1Etf`TklY5~-C+ zr5B_r*4KzVTyFS^c$@$EaXz1yp2nU{r_=cvz7P0UFq1^t^G4o@#bUYl8^R4dAJ(y5 Q0{{R307*qoM6N<$f*CbdCjbBd literal 0 HcmV?d00001 diff --git a/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/image 19@2x.png b/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/image 19@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..db05815ec2563e5ff3ba9fb04b7a6425d45585ea GIT binary patch literal 1417 zcmV;41$O$0P)fPsO5`2POB<9|0bHSJ7KPw!ce2_qvTk@@-gL~tyV$!sxxXgww%b2BoxA*+k5 z#nWhQzcV#86VOo@ z<#NsHZ*Fd0iU3DPN9RunVcUPfb02|M+S}WA(&_YGBZiQoAhlK$_T_y7IS-=IXo-FH zB(G>YIy!Q~zRbrS9UmWWZ)s_X(EWe~UEr(WRA8SK7#A43LH}oz5Tjf@;iNRQDHQ8w z{bv|7#_)?l8hHN1+-|vCzJ>yM)~qpH*Qh`j^pdd$9&a0YWnA&p{2E4>qmKxi*BN&i zTRow8EEY@28weKXGhStrs8z9UCqkygESt^7XfEDy!^HA5D6+7ykbrH9HQiDg91GKG zOoHMi(K*}O+j-VI)%XT^FD)%~fS+V-f+pThh;K9Faj+{HFoI-#;LZ6&y}iBPg3d$q z9K_959e{2E^ffIvJ3E^T&kqd^#pG$a8Tfr+Rg8S04$oC+UGPVI&J#{+)xxQ-uP+Hw z8-o5_tKz8cQ&{_+egN;+HQ)>m4tj~ESS$otM|;r3ySS91IBlZ7utd+ zf&ObK-NX2GK9|EA>DY3zK9qpap6clUq|E;BvsQ8Gc|J^p!u`;Rx9|CS;20U=Fm?(bDcM=~_`CEmP`=jQONj@;+8w*sE`t^Eu!mu_usEly5O=KaOcXf8_&C$r-? z12zr*A#^H~8F$79_Y4U@T zWUXu2gR|>#Ec2`BXG3xR26JV+{tkWB=$cb}M}rJh%3i*FS$E`#69b)UWo3I^OR2zk z7i&H-pC23Sm$1Gg*3E5l;%zWCHdY!P9o?lU`UAOC?Oh1vhAVt$%s$neddQl8J;jYu z)u6?+Q-KYRYE@X`%|?6SE7Fw2g031oWklEDV}O?!9g$2Gf(pIxzNa2<10GLZ=wGQr z&HFM)CF8|LDmUOBZJz9Tui9j1XXpKVKL07jMuwI)1x(6n3~nLE3fZ|(ZIV5|2Wh?! zx;M>9Z6xpL6n&?TgThKImN`}r^Xx1uDJdLk5tx^e9yYG^a3DE~Rt@F?I)hhZkK{ujpy1SJuYH z#*cjJvkN~u)(yN3J)Xo^%}lgN2jB`#wZS+DzD zF|ItMC#norF!&bjAJ)xzdxkmkSm~GIw3o!tyu@Mwi~Yj)pLB2YIJs>#2f6Wg^d2X)yNX?uxj8d4vs#a*|5(w>3qxI^|19l_Rmok_VHch%zU16*XgkR49rgbJ Xbuz6fWUv;(00000NkvXXu0mjf6gsE{ literal 0 HcmV?d00001 diff --git a/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/image 19@3x.png b/MemorialHouse/MHPresentation/MHPresentation/Resource/Images.xcassets/DotHorizontalImage.imageset/image 19@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..093d2f9d9297f60853d623b268957e4d69ebff5b GIT binary patch literal 1623 zcmV-d2B`UoP){ltC(oSMgxf^8r{Ic2vHUdCK4CKmD-g%L*mL*qb}Uw1~+y= zLnd*fE=@JYjdY>1=zgfKZd8Q?ROqCMwgSY&?S*G2wsVPWB_ zwhQSc0K_IHCfc-;&*w=OEp>GEGYBvqH%?$-|d zzPR%o(n|mcCp`d=bKcSl+#y+`-M63~XSWF&xC+j@F84o%&PO8iw?Osjl6@jGd~{^; z>iqn?C$FOaA&lO6zKa0fdvRjJYLQP4_>0^Ef3P_~{eNy(_E z*F0P>_p(g^_AuAt;T*QSKI9VfRzx`Rzh zd8c91>FUO~&*(nNR+@yXv7+%ZCW z2>_&*D_X&-c*7jzJRUb5M|6IGK5wC~U#0rDA02F*E?XNI(#tc_SBFFh#|HG)QT!~` zH9tBSF9WapO{yQ_Iwvv{R!P$sO0dOE?J{Isv5X|QDZlNR#!zW4|+Ul7@c!G{-_ac$_I?#I!x5I`t@_wtqx- zi#aPDqh_cxHa0eFosqt5C3QTHtt)g;|1pG^3>k>b~5W zUZa4?SwV<;#WV< Date: Tue, 12 Nov 2024 19:34:42 +0900 Subject: [PATCH 04/15] =?UTF-8?q?feat:=20HomeViewModel=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=EC=97=90=20=EB=94=B0=EB=A5=B8=20SceneDelegate=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Source/App/SceneDelegate.swift | 10 ++++-- .../Source/Home/HomeViewModel.swift | 31 +++++++++++++++++++ .../Register/RegisterViewController.swift | 4 +-- 3 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewModel.swift diff --git a/MemorialHouse/MHApplication/MHApplication/Source/App/SceneDelegate.swift b/MemorialHouse/MHApplication/MHApplication/Source/App/SceneDelegate.swift index 49c6aa42..698a9a2a 100644 --- a/MemorialHouse/MHApplication/MHApplication/Source/App/SceneDelegate.swift +++ b/MemorialHouse/MHApplication/MHApplication/Source/App/SceneDelegate.swift @@ -13,9 +13,13 @@ final class SceneDelegate: UIResponder, UIWindowSceneDelegate { guard let windowScene = (scene as? UIWindowScene) else { return } window = UIWindow(windowScene: windowScene) - let initialViewController = UserDefaults.standard.object(forKey: Constant.houseNameUserDefaultKey) == nil - ? RegisterViewController() - : HomeViewController() + let initialViewController: UIViewController + if let houseName = UserDefaults.standard.object(forKey: Constant.houseNameUserDefaultKey) as? String { + let viewModel = HomeViewModel(houseName: houseName) + initialViewController = HomeViewController(viewModel: viewModel) + } else { + initialViewController = RegisterViewController() + } let navigationController = UINavigationController(rootViewController: initialViewController) navigationController.navigationBar.isHidden = true diff --git a/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewModel.swift b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewModel.swift new file mode 100644 index 00000000..ac176245 --- /dev/null +++ b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewModel.swift @@ -0,0 +1,31 @@ +import MHDomain + +public final class HomeViewModel { + let dummyBook = [ + BookCover(title: "집주인들", imageURL: "", bookColor: .pink, category: "친구", isLike: false), + BookCover(title: "엄마", imageURL: "", bookColor: .blue, category: "가족", isLike: true), + BookCover(title: "아빠", imageURL: "", bookColor: .green, category: "가족", isLike: true), + BookCover(title: "친구", imageURL: "", bookColor: .beige, category: "가족", isLike: false), + BookCover(title: "동생", imageURL: "", bookColor: .orange, category: "가족", isLike: true), + BookCover(title: "집주인들", imageURL: "", bookColor: .pink, category: "친구", isLike: false), + BookCover(title: "엄마", imageURL: "", bookColor: .blue, category: "가족", isLike: true), + BookCover(title: "아빠", imageURL: "", bookColor: .green, category: "가족", isLike: true), + BookCover(title: "친구", imageURL: "", bookColor: .beige, category: "가족", isLike: false), + BookCover(title: "동생", imageURL: "", bookColor: .orange, category: "가족", isLike: true), + BookCover(title: "집주인들", imageURL: "", bookColor: .pink, category: "친구", isLike: false), + BookCover(title: "엄마", imageURL: "", bookColor: .blue, category: "가족", isLike: true), + BookCover(title: "아빠", imageURL: "", bookColor: .green, category: "가족", isLike: true), + BookCover(title: "친구", imageURL: "", bookColor: .beige, category: "가족", isLike: false), + BookCover(title: "동생", imageURL: "", bookColor: .orange, category: "가족", isLike: true), + BookCover(title: "집주인들", imageURL: "", bookColor: .pink, category: "친구", isLike: false), + BookCover(title: "엄마", imageURL: "", bookColor: .blue, category: "가족", isLike: true), + BookCover(title: "아빠", imageURL: "", bookColor: .green, category: "가족", isLike: true), + BookCover(title: "친구", imageURL: "", bookColor: .beige, category: "가족", isLike: false), + BookCover(title: "동생", imageURL: "", bookColor: .orange, category: "가족", isLike: true) + ] + let houseName: String + + public init(houseName: String) { // TODO: 기록소 모델 만들기 + self.houseName = houseName + } +} diff --git a/MemorialHouse/MHPresentation/MHPresentation/Source/Register/RegisterViewController.swift b/MemorialHouse/MHPresentation/MHPresentation/Source/Register/RegisterViewController.swift index 98b96770..ca77468c 100644 --- a/MemorialHouse/MHPresentation/MHPresentation/Source/Register/RegisterViewController.swift +++ b/MemorialHouse/MHPresentation/MHPresentation/Source/Register/RegisterViewController.swift @@ -78,8 +78,8 @@ public final class RegisterViewController: UIViewController { let userDefaults = UserDefaults.standard userDefaults.set(houseName, forKey: Constant.houseNameUserDefaultKey) - - self?.navigationController?.pushViewController(HomeViewController(), animated: false) + let homeViewModel = HomeViewModel(houseName: houseName) + self?.navigationController?.pushViewController(HomeViewController(viewModel: homeViewModel), animated: false) self?.navigationController?.viewControllers.removeFirst() // inactive back to register view } From c355a5bb937a049911bfcc78e1afb29a44befc0d Mon Sep 17 00:00:00 2001 From: Kyxxn Date: Tue, 12 Nov 2024 19:35:30 +0900 Subject: [PATCH 05/15] =?UTF-8?q?refactor:=20BookCover=EC=9D=98=20?= =?UTF-8?q?=ED=94=84=EB=A1=9C=ED=8D=BC=ED=8B=B0=EC=99=80=20MHBook=20?= =?UTF-8?q?=EC=BB=A4=EC=8A=A4=ED=85=80=20=EB=B7=B0=20=EB=84=A4=EC=9D=B4?= =?UTF-8?q?=EB=B0=8D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MHBook보다 MHBookCover가 더 명확한 것 같아 네이밍을 수정했습니다 --- .../MHDomain/MHDomain/Entity/BookCover.swift | 12 +++++----- .../{MHBook.swift => MHBookCover.swift} | 22 ++++++++++++------- 2 files changed, 20 insertions(+), 14 deletions(-) rename MemorialHouse/MHPresentation/MHPresentation/Source/Design/{MHBook.swift => MHBookCover.swift} (76%) diff --git a/MemorialHouse/MHDomain/MHDomain/Entity/BookCover.swift b/MemorialHouse/MHDomain/MHDomain/Entity/BookCover.swift index e2e52726..af9f12d0 100644 --- a/MemorialHouse/MHDomain/MHDomain/Entity/BookCover.swift +++ b/MemorialHouse/MHDomain/MHDomain/Entity/BookCover.swift @@ -4,21 +4,21 @@ public struct BookCover { public let bookIdentifer = UUID() public let title: String public let imageURL: String - public let bookType: BookColor + public let bookColor: BookColor public let category: String - public let favorite: Bool + public let isLike: Bool public init( title: String, imageURL: String, - bookType: BookColor, + bookColor: BookColor, category: String, - favorite: Bool = false + isLike: Bool = false ) { self.title = title self.imageURL = imageURL - self.bookType = bookType + self.bookColor = bookColor self.category = category - self.favorite = favorite + self.isLike = isLike } } diff --git a/MemorialHouse/MHPresentation/MHPresentation/Source/Design/MHBook.swift b/MemorialHouse/MHPresentation/MHPresentation/Source/Design/MHBookCover.swift similarity index 76% rename from MemorialHouse/MHPresentation/MHPresentation/Source/Design/MHBook.swift rename to MemorialHouse/MHPresentation/MHPresentation/Source/Design/MHBookCover.swift index be0f6bdc..d30e9e3a 100644 --- a/MemorialHouse/MHPresentation/MHPresentation/Source/Design/MHBook.swift +++ b/MemorialHouse/MHPresentation/MHPresentation/Source/Design/MHBookCover.swift @@ -2,7 +2,7 @@ import UIKit import MHFoundation import MHDomain -final class MHBook: UIView { +final class MHBookCover: UIView { // MARK: - Property private let bookCoverImageView = UIImageView() private let titleLabel = UILabel(style: .default) @@ -17,7 +17,7 @@ final class MHBook: UIView { return imageView }() - private let publisherLabel = UILabel(style: .body2) + private let houseLabel = UILabel(style: .body2) // MARK: - Initializer init() { @@ -34,24 +34,30 @@ final class MHBook: UIView { configureConstraints() } + func prepareForReuse() { + bookCoverImageView.image = nil + titleLabel.text = nil + targetImageView.image = nil + } + // MARK: - Configuration func configure( title: String, bookCoverImage: UIImage, targetImage: UIImage, - publisher: String + houseName: String ) { titleLabel.text = title bookCoverImageView.image = bookCoverImage targetImageView.image = targetImage - publisherLabel.text = publisher + houseLabel.text = houseName } private func configureAddSubView() { addSubview(bookCoverImageView) addSubview(titleLabel) addSubview(targetImageView) - addSubview(publisherLabel) + addSubview(houseLabel) } private func configureConstraints() { @@ -60,8 +66,8 @@ final class MHBook: UIView { titleLabel.setCenterX(view: self, constant: 8) targetImageView.setTop(anchor: titleLabel.bottomAnchor, constant: 14) targetImageView.setCenterX(view: self, constant: 8) - targetImageView.setWidthAndHeight(width: 100, height: 100) - publisherLabel.setBottom(anchor: bottomAnchor, constant: 12) - publisherLabel.setTrailing(anchor: trailingAnchor, constant: 12) + targetImageView.setWidthAndHeight(width: 100, height: 110) + houseLabel.setBottom(anchor: bottomAnchor, constant: 12) + houseLabel.setTrailing(anchor: trailingAnchor, constant: 12) } } From 98824bcee7c635a6ac5bd8d3ee5fc25389a609ec Mon Sep 17 00:00:00 2001 From: Kyxxn Date: Tue, 12 Nov 2024 19:39:14 +0900 Subject: [PATCH 06/15] =?UTF-8?q?feat:=20UICollectionView=EC=99=80=20FlowL?= =?UTF-8?q?ayout=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아직 마니 미흡하네요,, --- .../Source/Home/BookCollectionViewCell.swift | 81 ++++++++++++++ .../Source/Home/HomeViewController.swift | 100 ++++++++++++++++-- 2 files changed, 175 insertions(+), 6 deletions(-) create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Source/Home/BookCollectionViewCell.swift diff --git a/MemorialHouse/MHPresentation/MHPresentation/Source/Home/BookCollectionViewCell.swift b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/BookCollectionViewCell.swift new file mode 100644 index 00000000..89964a0b --- /dev/null +++ b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/BookCollectionViewCell.swift @@ -0,0 +1,81 @@ +import UIKit + +final class BookCollectionViewCell: UICollectionViewCell { + // MARK: - Properties + private let bookCoverView = MHBookCover() + private let likeButton = UIButton(type: .custom) + private let dropDownButton = UIButton(type: .custom) + + // MARK: - Initializer + override init(frame: CGRect) { + super.init(frame: frame) + + configureAddSubView() + configureAction() + configureConstraints() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + + configureAddSubView() + configureAction() + configureConstraints() + } + + override func prepareForReuse() { + super.prepareForReuse() + + bookCoverView.prepareForReuse() + likeButton.imageView?.image = nil + } + + // MARK: - Configuration + func configure( + title: String, + bookCoverImage: UIImage, + targetImage: UIImage, + isLike: Bool, + // category: String, // TODO: 카테고리 처리 생각해보기 + houseName: String + ) { + bookCoverView.configure( + title: title, + bookCoverImage: bookCoverImage, + targetImage: targetImage, + houseName: houseName + ) + likeButton.setImage(isLike ? .likeFill : .likeEmpty, for: .normal) + dropDownButton.setImage(.dotHorizontal, for: .normal) + } + + private func configureAddSubView() { + contentView.addSubview(bookCoverView) + contentView.addSubview(likeButton) + contentView.addSubview(dropDownButton) + } + + private func configureAction() { + likeButton.addAction(UIAction { _ in + // TODO: 좋아요 버튼 로직 + }, for: .touchUpInside) + + dropDownButton.addAction(UIAction { _ in + // TODO: UI Menu 띄우기 + }, for: .touchUpInside) + } + + private func configureConstraints() { + bookCoverView.fillSuperview() + likeButton.setAnchor( + top: bookCoverView.bottomAnchor, + trailing: dropDownButton.leadingAnchor, constantTrailing: 4, + width: 20, height: 20 + ) + dropDownButton.setAnchor( + top: bookCoverView.bottomAnchor, constantTop: 2, + trailing: contentView.trailingAnchor, constantTrailing: 4, + width: 20, height: 16 + ) + } +} diff --git a/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift index e5acb74a..c77bd6b0 100644 --- a/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift +++ b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift @@ -1,15 +1,38 @@ import UIKit +import MHDomain public final class HomeViewController: UIViewController { - // MARK: - Property - private let navigationBar = MHNavigationBar(title: "효준") // TODO: 유저 이름 입력받기 + // MARK: - Properties + private let navigationBar: MHNavigationBar + private let currentCategoryLabel = UILabel(style: .default) + private let categorySelectButton = UIButton(type: .custom) + private lazy var collectionView: UICollectionView = { + let flowLayout = UICollectionViewFlowLayout() + let cellSize = (self.view.bounds.inset(by: self.view.safeAreaInsets).width - 80) / 2 + flowLayout.itemSize = .init(width: cellSize, height: 210) + flowLayout.minimumLineSpacing = 40 + flowLayout.minimumInteritemSpacing = 20 + flowLayout.sectionInset = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20) + flowLayout.scrollDirection = .vertical + + let collectionView = UICollectionView(frame: .zero, collectionViewLayout: flowLayout) + collectionView.backgroundColor = .baseBackground + + return collectionView + }() + private let viewModel: HomeViewModel // MARK: - Initializer - public init() { + public init(viewModel: HomeViewModel) { + self.viewModel = viewModel + self.navigationBar = MHNavigationBar(title: viewModel.houseName) super.init(nibName: nil, bundle: nil) } required init?(coder: NSCoder) { + guard let houseName = UserDefaults.standard.string(forKey: "houseName") else { return nil } + self.viewModel = HomeViewModel(houseName: houseName) + self.navigationBar = MHNavigationBar(title: viewModel.houseName) super.init(coder: coder) } @@ -25,15 +48,80 @@ public final class HomeViewController: UIViewController { // MARK: - Setup & Configuration private func setup() { view.backgroundColor = .baseBackground + collectionView.delegate = self + collectionView.dataSource = self + collectionView.register( + BookCollectionViewCell.self, + forCellWithReuseIdentifier: BookCollectionViewCell.identifier + ) + currentCategoryLabel.text = "전체" // TODO: 카테고리 관리 필요 + categorySelectButton.setImage(.dropDown, for: .normal) } private func configureAddSubView() { view.addSubview(navigationBar) + view.addSubview(currentCategoryLabel) + view.addSubview(categorySelectButton) + view.addSubview(collectionView) } private func configureConstraints() { - navigationBar.setTop(anchor: view.safeAreaLayoutGuide.topAnchor, constant: 20) - navigationBar.setLeading(anchor: view.leadingAnchor, constant: 24) - navigationBar.setTrailing(anchor: view.trailingAnchor, constant: 24) + navigationBar.setAnchor( + top: view.safeAreaLayoutGuide.topAnchor, constantTop: 20, + leading: view.leadingAnchor, constantLeading: 24, + trailing: view.trailingAnchor, constantTrailing: 24 + ) + currentCategoryLabel.setAnchor( + top: navigationBar.bottomAnchor, constantTop: 16, + leading: view.leadingAnchor, constantLeading: 28 + ) + collectionView.setAnchor( + top: currentCategoryLabel.bottomAnchor, constantTop: 16, + leading: view.leadingAnchor, + bottom: view.bottomAnchor, + trailing: view.trailingAnchor + ) + categorySelectButton.setLeading(anchor: currentCategoryLabel.trailingAnchor, constant: 8) + categorySelectButton.setCenterY(view: currentCategoryLabel) + categorySelectButton.setWidth(20) + } +} + +extension HomeViewController: UICollectionViewDelegate { + public func collectionView( + _ collectionView: UICollectionView, + didSelectItemAt indexPath: IndexPath + ) { + // TODO: 책 펼치기 로직 + } +} + +extension HomeViewController: UICollectionViewDataSource { + public func collectionView( + _ collectionView: UICollectionView, + numberOfItemsInSection section: Int + ) -> Int { + viewModel.dummyBook.count + } + + public func collectionView( + _ collectionView: UICollectionView, + cellForItemAt indexPath: IndexPath + ) -> UICollectionViewCell { + guard let cell = collectionView.dequeueReusableCell( + withReuseIdentifier: BookCollectionViewCell.identifier, + for: indexPath + ) as? BookCollectionViewCell else { return UICollectionViewCell() } + + let book = viewModel.dummyBook[indexPath.row] + cell.configure( + title: book.title, + bookCoverImage: book.bookColor.image, + targetImage: .pinkBook, + isLike: book.isLike, + houseName: viewModel.houseName + ) + + return cell } } From 86681edce151e63f944740644263fa74c134bf34 Mon Sep 17 00:00:00 2001 From: Kyxxn Date: Tue, 12 Nov 2024 20:12:48 +0900 Subject: [PATCH 07/15] =?UTF-8?q?feat:=20=ED=99=88=20=EC=9A=B0=EC=B8=A1=20?= =?UTF-8?q?=ED=95=98=EB=8B=A8=EC=97=90=20=EC=B6=94=EC=96=B5=20=EB=A7=8C?= =?UTF-8?q?=EB=93=A4=EA=B8=B0=20=EB=B2=84=ED=8A=BC=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Source/Home/HomeViewController.swift | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift index c77bd6b0..e5af0a98 100644 --- a/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift +++ b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift @@ -6,6 +6,15 @@ public final class HomeViewController: UIViewController { private let navigationBar: MHNavigationBar private let currentCategoryLabel = UILabel(style: .default) private let categorySelectButton = UIButton(type: .custom) + private let bookCoverMakeFloatingButton: UIButton = { + let button = UIButton(type: .custom) + button.setImage(.bookMake, for: .normal) + button.layer.shadowOpacity = 0.3 + button.layer.shadowOffset = CGSize(width: 2, height: 2) + button.layer.shadowRadius = 8 + + return button + }() private lazy var collectionView: UICollectionView = { let flowLayout = UICollectionViewFlowLayout() let cellSize = (self.view.bounds.inset(by: self.view.safeAreaInsets).width - 80) / 2 @@ -42,6 +51,7 @@ public final class HomeViewController: UIViewController { setup() configureAddSubView() + configureAction() configureConstraints() } @@ -63,6 +73,14 @@ public final class HomeViewController: UIViewController { view.addSubview(currentCategoryLabel) view.addSubview(categorySelectButton) view.addSubview(collectionView) + view.addSubview(bookCoverMakeFloatingButton) + } + + private func configureAction() { + categorySelectButton.addAction(UIAction { _ in + // TODO: 카테고리 시트지 띄우기 + }, for: .touchUpInside) + } private func configureConstraints() { @@ -81,12 +99,19 @@ public final class HomeViewController: UIViewController { bottom: view.bottomAnchor, trailing: view.trailingAnchor ) + bookCoverMakeFloatingButton.setAnchor( + bottom: view.bottomAnchor, constantBottom: 24, + trailing: view.trailingAnchor, constantTrailing: 24, + width: 80, + height: 80 + ) categorySelectButton.setLeading(anchor: currentCategoryLabel.trailingAnchor, constant: 8) categorySelectButton.setCenterY(view: currentCategoryLabel) categorySelectButton.setWidth(20) } } +// MARK: - UICollectionViewDelegate extension HomeViewController: UICollectionViewDelegate { public func collectionView( _ collectionView: UICollectionView, @@ -96,6 +121,7 @@ extension HomeViewController: UICollectionViewDelegate { } } +// MARK: - UICollectionViewDataSource extension HomeViewController: UICollectionViewDataSource { public func collectionView( _ collectionView: UICollectionView, From 89d1cb64cda1eeeeb9738bd58675e3ba708bf7b8 Mon Sep 17 00:00:00 2001 From: Kyxxn Date: Tue, 12 Nov 2024 20:13:43 +0900 Subject: [PATCH 08/15] =?UTF-8?q?feat:=20=ED=99=88=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=B1=85=20=ED=91=9C=EC=A7=80=20=EB=A7=8C=EB=93=9C=EB=8A=94=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=EB=A1=9C=20=EC=9D=B4=EB=8F=99=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Source/BookCreation/BookCreationViewController.swift | 8 +++++++- .../MHPresentation/Source/Home/HomeViewController.swift | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/MemorialHouse/MHPresentation/MHPresentation/Source/BookCreation/BookCreationViewController.swift b/MemorialHouse/MHPresentation/MHPresentation/Source/BookCreation/BookCreationViewController.swift index 1a5508d1..d0594569 100644 --- a/MemorialHouse/MHPresentation/MHPresentation/Source/BookCreation/BookCreationViewController.swift +++ b/MemorialHouse/MHPresentation/MHPresentation/Source/BookCreation/BookCreationViewController.swift @@ -64,6 +64,7 @@ final class BookCreationViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() + setup() configureConstraints() } @@ -74,7 +75,12 @@ final class BookCreationViewController: UIViewController { super.touchesBegan(touches, with: event) } - // MARK: - Helper + // MARK: - Setup & Configuration + private func setup() { + view.backgroundColor = .baseBackground + navigationController?.navigationBar.isHidden = false + } + private func configureConstraints() { // 책 미리보기 let bookPreviewViewBackground = bookImageView.embededInDefaultBackground( diff --git a/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift index e5af0a98..6bb7ac1e 100644 --- a/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift +++ b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift @@ -81,6 +81,10 @@ public final class HomeViewController: UIViewController { // TODO: 카테고리 시트지 띄우기 }, for: .touchUpInside) + bookCoverMakeFloatingButton.addAction(UIAction { [weak self] _ in + guard let self else { return } + self.navigationController?.pushViewController(BookCreationViewController(), animated: true) + }, for: .touchUpInside) } private func configureConstraints() { From 525a950892191ac157d7c0b70207c3c3aa5b08af Mon Sep 17 00:00:00 2001 From: Kyxxn Date: Tue, 12 Nov 2024 20:17:16 +0900 Subject: [PATCH 09/15] =?UTF-8?q?fix:=20=ED=99=88=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=B1=85=20=EC=83=9D=EC=84=B1=20=ED=99=94=EB=A9=B4=20=EA=B0=94?= =?UTF-8?q?=EB=8B=A4=EC=99=94=EC=9D=84=20=EB=95=8C=20=EB=84=A4=EB=B9=84?= =?UTF-8?q?=EA=B2=8C=EC=9D=B4=EC=85=98=20=EB=82=98=ED=83=80=EB=82=98?= =?UTF-8?q?=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MHApplication/Source/App/SceneDelegate.swift | 1 - .../MHPresentation/Source/Home/HomeViewController.swift | 6 ++++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/MemorialHouse/MHApplication/MHApplication/Source/App/SceneDelegate.swift b/MemorialHouse/MHApplication/MHApplication/Source/App/SceneDelegate.swift index 698a9a2a..b2996bec 100644 --- a/MemorialHouse/MHApplication/MHApplication/Source/App/SceneDelegate.swift +++ b/MemorialHouse/MHApplication/MHApplication/Source/App/SceneDelegate.swift @@ -22,7 +22,6 @@ final class SceneDelegate: UIResponder, UIWindowSceneDelegate { } let navigationController = UINavigationController(rootViewController: initialViewController) - navigationController.navigationBar.isHidden = true window?.rootViewController = navigationController window?.makeKeyAndVisible() } diff --git a/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift index 6bb7ac1e..258d7217 100644 --- a/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift +++ b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift @@ -55,6 +55,12 @@ public final class HomeViewController: UIViewController { configureConstraints() } + public override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + navigationController?.navigationBar.isHidden = true + } + // MARK: - Setup & Configuration private func setup() { view.backgroundColor = .baseBackground From 1be5aabb8e3d8dd7a0ab074a03aa602d9655b419 Mon Sep 17 00:00:00 2001 From: Kyxxn Date: Wed, 13 Nov 2024 00:44:09 +0900 Subject: [PATCH 10/15] =?UTF-8?q?refactor:=20=EC=BD=94=EB=93=9C=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=EB=A6=B0=ED=8A=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Source/Design/MHBookCover.swift | 2 +- .../Source/Home/BookCollectionViewCell.swift | 2 +- .../Source/Home/HomeViewController.swift | 15 ++++++++------- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/MemorialHouse/MHPresentation/MHPresentation/Source/Design/MHBookCover.swift b/MemorialHouse/MHPresentation/MHPresentation/Source/Design/MHBookCover.swift index d30e9e3a..6ac4140c 100644 --- a/MemorialHouse/MHPresentation/MHPresentation/Source/Design/MHBookCover.swift +++ b/MemorialHouse/MHPresentation/MHPresentation/Source/Design/MHBookCover.swift @@ -34,7 +34,7 @@ final class MHBookCover: UIView { configureConstraints() } - func prepareForReuse() { + func resetProperties() { bookCoverImageView.image = nil titleLabel.text = nil targetImageView.image = nil diff --git a/MemorialHouse/MHPresentation/MHPresentation/Source/Home/BookCollectionViewCell.swift b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/BookCollectionViewCell.swift index 89964a0b..06fa567c 100644 --- a/MemorialHouse/MHPresentation/MHPresentation/Source/Home/BookCollectionViewCell.swift +++ b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/BookCollectionViewCell.swift @@ -26,7 +26,7 @@ final class BookCollectionViewCell: UICollectionViewCell { override func prepareForReuse() { super.prepareForReuse() - bookCoverView.prepareForReuse() + bookCoverView.resetProperties() likeButton.imageView?.image = nil } diff --git a/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift index 258d7217..05101e0f 100644 --- a/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift +++ b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift @@ -6,7 +6,7 @@ public final class HomeViewController: UIViewController { private let navigationBar: MHNavigationBar private let currentCategoryLabel = UILabel(style: .default) private let categorySelectButton = UIButton(type: .custom) - private let bookCoverMakeFloatingButton: UIButton = { + private let makingBookFloatingButton: UIButton = { let button = UIButton(type: .custom) button.setImage(.bookMake, for: .normal) button.layer.shadowOpacity = 0.3 @@ -17,8 +17,8 @@ public final class HomeViewController: UIViewController { }() private lazy var collectionView: UICollectionView = { let flowLayout = UICollectionViewFlowLayout() - let cellSize = (self.view.bounds.inset(by: self.view.safeAreaInsets).width - 80) / 2 - flowLayout.itemSize = .init(width: cellSize, height: 210) + let cellWidth = (self.view.bounds.inset(by: self.view.safeAreaInsets).width - 80) / 2 + flowLayout.itemSize = .init(width: cellWidth, height: 210) flowLayout.minimumLineSpacing = 40 flowLayout.minimumInteritemSpacing = 20 flowLayout.sectionInset = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20) @@ -79,7 +79,7 @@ public final class HomeViewController: UIViewController { view.addSubview(currentCategoryLabel) view.addSubview(categorySelectButton) view.addSubview(collectionView) - view.addSubview(bookCoverMakeFloatingButton) + view.addSubview(makingBookFloatingButton) } private func configureAction() { @@ -87,9 +87,10 @@ public final class HomeViewController: UIViewController { // TODO: 카테고리 시트지 띄우기 }, for: .touchUpInside) - bookCoverMakeFloatingButton.addAction(UIAction { [weak self] _ in + makingBookFloatingButton.addAction(UIAction { [weak self] _ in guard let self else { return } - self.navigationController?.pushViewController(BookCreationViewController(), animated: true) + let bookCreationViewController = BookCreationViewController() + self.navigationController?.pushViewController(bookCreationViewController, animated: true) }, for: .touchUpInside) } @@ -109,7 +110,7 @@ public final class HomeViewController: UIViewController { bottom: view.bottomAnchor, trailing: view.trailingAnchor ) - bookCoverMakeFloatingButton.setAnchor( + makingBookFloatingButton.setAnchor( bottom: view.bottomAnchor, constantBottom: 24, trailing: view.trailingAnchor, constantTrailing: 24, width: 80, From a93d42ffa1a1773fcf8bdf9720eb6b41eb624269 Mon Sep 17 00:00:00 2001 From: Kyxxn Date: Thu, 14 Nov 2024 00:47:06 +0900 Subject: [PATCH 11/15] =?UTF-8?q?feat:=20UIImage=20resize=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Source/Extensions/UIImage+Resize.swift | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 MemorialHouse/MHPresentation/MHPresentation/Source/Extensions/UIImage+Resize.swift diff --git a/MemorialHouse/MHPresentation/MHPresentation/Source/Extensions/UIImage+Resize.swift b/MemorialHouse/MHPresentation/MHPresentation/Source/Extensions/UIImage+Resize.swift new file mode 100644 index 00000000..f441295c --- /dev/null +++ b/MemorialHouse/MHPresentation/MHPresentation/Source/Extensions/UIImage+Resize.swift @@ -0,0 +1,11 @@ +import UIKit + +extension UIImage { + static func resizedImage(image: UIImage, size: CGSize) -> UIImage { + let renderer = UIGraphicsImageRenderer(size: size) + + return renderer.image { _ in + image.draw(in: CGRect(origin: .zero, size: size)) + } + } +} From 8ea83b2b97fd110f8f0b64a11d46038442797ec8 Mon Sep 17 00:00:00 2001 From: Kyxxn Date: Thu, 14 Nov 2024 00:47:33 +0900 Subject: [PATCH 12/15] =?UTF-8?q?fix:=20=EB=B2=84=ED=8A=BC=20=EC=95=88?= =?UTF-8?q?=EC=97=90=20=EC=9E=88=EB=8A=94=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=EC=82=AC=EC=9D=B4=EC=A6=88=20=EC=A1=B0=EC=A0=88=EC=9D=B4=20?= =?UTF-8?q?=EC=95=88=EB=90=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Source/Home/BookCollectionViewCell.swift | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/MemorialHouse/MHPresentation/MHPresentation/Source/Home/BookCollectionViewCell.swift b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/BookCollectionViewCell.swift index 06fa567c..09e7997f 100644 --- a/MemorialHouse/MHPresentation/MHPresentation/Source/Home/BookCollectionViewCell.swift +++ b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/BookCollectionViewCell.swift @@ -45,7 +45,12 @@ final class BookCollectionViewCell: UICollectionViewCell { targetImage: targetImage, houseName: houseName ) - likeButton.setImage(isLike ? .likeFill : .likeEmpty, for: .normal) + + let likeImage = UIImage.resizedImage( + image: isLike ? .likeFill : .likeEmpty, + size: CGSize(width: 28, height: 28) + ) + likeButton.setImage(likeImage, for: .normal) dropDownButton.setImage(.dotHorizontal, for: .normal) } @@ -69,13 +74,12 @@ final class BookCollectionViewCell: UICollectionViewCell { bookCoverView.fillSuperview() likeButton.setAnchor( top: bookCoverView.bottomAnchor, - trailing: dropDownButton.leadingAnchor, constantTrailing: 4, - width: 20, height: 20 + trailing: dropDownButton.leadingAnchor, constantTrailing: 10 ) dropDownButton.setAnchor( - top: bookCoverView.bottomAnchor, constantTop: 2, trailing: contentView.trailingAnchor, constantTrailing: 4, - width: 20, height: 16 + width: 24, height: 16 ) + dropDownButton.setCenterY(view: likeButton) } } From 77aea9ce21c5d6e4508ff08b810c7dbf1628f5b4 Mon Sep 17 00:00:00 2001 From: Kyxxn Date: Thu, 14 Nov 2024 00:48:25 +0900 Subject: [PATCH 13/15] =?UTF-8?q?fix:=20=EC=BB=AC=EB=A0=89=EC=85=98?= =?UTF-8?q?=EB=B7=B0=20=EB=A0=88=EC=9D=B4=EC=95=84=EC=9B=83=EC=97=90=20?= =?UTF-8?q?=EB=B0=94=ED=85=80=20=ED=8C=A8=EB=94=A9=EC=9D=84=20=EC=A4=98?= =?UTF-8?q?=EC=84=9C=20SafeArea=20=EC=A7=80=ED=82=A4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MHPresentation/Source/Home/HomeViewController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift index 05101e0f..3d3c06da 100644 --- a/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift +++ b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift @@ -21,7 +21,7 @@ public final class HomeViewController: UIViewController { flowLayout.itemSize = .init(width: cellWidth, height: 210) flowLayout.minimumLineSpacing = 40 flowLayout.minimumInteritemSpacing = 20 - flowLayout.sectionInset = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20) + flowLayout.sectionInset = UIEdgeInsets(top: 0, left: 20, bottom: 30, right: 20) flowLayout.scrollDirection = .vertical let collectionView = UICollectionView(frame: .zero, collectionViewLayout: flowLayout) From b68088f5b1b34c42b512cd9e7df8a86bafac80d5 Mon Sep 17 00:00:00 2001 From: Kyxxn Date: Thu, 14 Nov 2024 14:59:40 +0900 Subject: [PATCH 14/15] =?UTF-8?q?chore:=20=EB=B7=B0=EB=AA=A8=EB=8D=B8=20?= =?UTF-8?q?=EB=8D=94=EB=AF=B8=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Source/Home/HomeViewController.swift | 12 ++-------- .../Source/Home/HomeViewModel.swift | 24 +------------------ 2 files changed, 3 insertions(+), 33 deletions(-) diff --git a/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift index 3d3c06da..90561fe0 100644 --- a/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift +++ b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewController.swift @@ -138,7 +138,7 @@ extension HomeViewController: UICollectionViewDataSource { _ collectionView: UICollectionView, numberOfItemsInSection section: Int ) -> Int { - viewModel.dummyBook.count + 0 } public func collectionView( @@ -149,15 +149,7 @@ extension HomeViewController: UICollectionViewDataSource { withReuseIdentifier: BookCollectionViewCell.identifier, for: indexPath ) as? BookCollectionViewCell else { return UICollectionViewCell() } - - let book = viewModel.dummyBook[indexPath.row] - cell.configure( - title: book.title, - bookCoverImage: book.bookColor.image, - targetImage: .pinkBook, - isLike: book.isLike, - houseName: viewModel.houseName - ) + // TODO: 데이터 넣기 return cell } diff --git a/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewModel.swift b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewModel.swift index ac176245..b8bccd40 100644 --- a/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewModel.swift +++ b/MemorialHouse/MHPresentation/MHPresentation/Source/Home/HomeViewModel.swift @@ -1,29 +1,7 @@ import MHDomain public final class HomeViewModel { - let dummyBook = [ - BookCover(title: "집주인들", imageURL: "", bookColor: .pink, category: "친구", isLike: false), - BookCover(title: "엄마", imageURL: "", bookColor: .blue, category: "가족", isLike: true), - BookCover(title: "아빠", imageURL: "", bookColor: .green, category: "가족", isLike: true), - BookCover(title: "친구", imageURL: "", bookColor: .beige, category: "가족", isLike: false), - BookCover(title: "동생", imageURL: "", bookColor: .orange, category: "가족", isLike: true), - BookCover(title: "집주인들", imageURL: "", bookColor: .pink, category: "친구", isLike: false), - BookCover(title: "엄마", imageURL: "", bookColor: .blue, category: "가족", isLike: true), - BookCover(title: "아빠", imageURL: "", bookColor: .green, category: "가족", isLike: true), - BookCover(title: "친구", imageURL: "", bookColor: .beige, category: "가족", isLike: false), - BookCover(title: "동생", imageURL: "", bookColor: .orange, category: "가족", isLike: true), - BookCover(title: "집주인들", imageURL: "", bookColor: .pink, category: "친구", isLike: false), - BookCover(title: "엄마", imageURL: "", bookColor: .blue, category: "가족", isLike: true), - BookCover(title: "아빠", imageURL: "", bookColor: .green, category: "가족", isLike: true), - BookCover(title: "친구", imageURL: "", bookColor: .beige, category: "가족", isLike: false), - BookCover(title: "동생", imageURL: "", bookColor: .orange, category: "가족", isLike: true), - BookCover(title: "집주인들", imageURL: "", bookColor: .pink, category: "친구", isLike: false), - BookCover(title: "엄마", imageURL: "", bookColor: .blue, category: "가족", isLike: true), - BookCover(title: "아빠", imageURL: "", bookColor: .green, category: "가족", isLike: true), - BookCover(title: "친구", imageURL: "", bookColor: .beige, category: "가족", isLike: false), - BookCover(title: "동생", imageURL: "", bookColor: .orange, category: "가족", isLike: true) - ] - let houseName: String + let houseName: String // TODO: 기록소 모델 만들기 public init(houseName: String) { // TODO: 기록소 모델 만들기 self.houseName = houseName From 170647911b90aef622c9488c17761a5aa9b32beb Mon Sep 17 00:00:00 2001 From: Kyxxn Date: Thu, 14 Nov 2024 15:06:22 +0900 Subject: [PATCH 15/15] =?UTF-8?q?fix:=20Xcode=20Build=20yml=20macOS=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/swift.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/swift.yml b/.github/workflows/swift.yml index 222bdb84..b82b261a 100644 --- a/.github/workflows/swift.yml +++ b/.github/workflows/swift.yml @@ -6,7 +6,7 @@ on: jobs: build: - runs-on: macos-latest + runs-on: macos-15 steps: - uses: actions/checkout@v4