From 45048589607e8037edc8280e862015453d4ca99a Mon Sep 17 00:00:00 2001 From: Nezumi <123229563+Nez27@users.noreply.github.com> Date: Mon, 3 Apr 2023 21:23:36 +0700 Subject: [PATCH] Add sign in method and show information --- app/build.gradle | 7 + app/src/main/AndroidManifest.xml | 6 + app/src/main/assets/font/bebas.ttf | Bin 0 -> 32188 bytes app/src/main/assets/font/opensans.ttf | Bin 0 -> 129948 bytes .../capstone/foodify/shipper/API/FoodApi.java | 78 +++++ .../foodify/shipper/API/FoodApiToken.java | 89 ++++++ .../foodify/shipper/API/GoogleMapApi.java | 27 ++ .../Activity/ChangePasswordActivity.java | 16 + .../shipper/Activity/MainActivity.java | 4 +- .../shipper/Activity/OrderDetailActivity.java | 20 ++ .../shipper/Activity/SignInActivity.java | 282 +++++++++++++++++- .../com/capstone/foodify/shipper/Common.java | 51 ++++ .../shipper/Fragment/ProfileFragment.java | 56 +++- .../foodify/shipper/Model/Address.java | 50 ++++ .../Model/GoogleMap/AddressComponent.java | 45 +++ .../shipper/Model/GoogleMap/Geometry.java | 43 +++ .../Model/GoogleMap/GoogleMapResponse.java | 34 +++ .../shipper/Model/GoogleMap/Location.java | 32 ++ .../shipper/Model/GoogleMap/Northeast.java | 32 ++ .../shipper/Model/GoogleMap/Result.java | 67 +++++ .../shipper/Model/GoogleMap/Southwest.java | 32 ++ .../shipper/Model/GoogleMap/Viewport.java | 32 ++ .../capstone/foodify/shipper/Model/Role.java | 22 ++ .../capstone/foodify/shipper/Model/User.java | 140 +++++++++ .../res/layout/activity_change_password.xml | 163 ++++++++++ app/src/main/res/layout/activity_sign_in.xml | 24 +- app/src/main/res/layout/fragment_profile.xml | 44 +-- settings.gradle | 2 + 28 files changed, 1346 insertions(+), 52 deletions(-) create mode 100644 app/src/main/assets/font/bebas.ttf create mode 100644 app/src/main/assets/font/opensans.ttf create mode 100644 app/src/main/java/com/capstone/foodify/shipper/API/FoodApi.java create mode 100644 app/src/main/java/com/capstone/foodify/shipper/API/FoodApiToken.java create mode 100644 app/src/main/java/com/capstone/foodify/shipper/API/GoogleMapApi.java create mode 100644 app/src/main/java/com/capstone/foodify/shipper/Activity/ChangePasswordActivity.java create mode 100644 app/src/main/java/com/capstone/foodify/shipper/Common.java create mode 100644 app/src/main/java/com/capstone/foodify/shipper/Model/Address.java create mode 100644 app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/AddressComponent.java create mode 100644 app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Geometry.java create mode 100644 app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/GoogleMapResponse.java create mode 100644 app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Location.java create mode 100644 app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Northeast.java create mode 100644 app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Result.java create mode 100644 app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Southwest.java create mode 100644 app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Viewport.java create mode 100644 app/src/main/java/com/capstone/foodify/shipper/Model/Role.java create mode 100644 app/src/main/java/com/capstone/foodify/shipper/Model/User.java create mode 100644 app/src/main/res/layout/activity_change_password.xml diff --git a/app/build.gradle b/app/build.gradle index 1410921..a852d33 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,6 @@ plugins { id 'com.android.application' + id 'com.google.gms.google-services' } android { @@ -34,9 +35,15 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.9.0-beta01' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation 'com.google.firebase:firebase-auth:21.0.3' + implementation 'com.google.firebase:firebase-storage:20.0.1' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' implementation 'com.makeramen:roundedimageview:2.3.0' + implementation 'com.squareup.retrofit2:retrofit:2.9.0' + implementation 'com.squareup.retrofit2:converter-gson:2.9.0' + implementation 'com.squareup.retrofit2:converter-scalars:2.9.0' + implementation 'com.github.gabriel-TheCode:AestheticDialogs:1.3.6' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ca112ed..0d24464 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,8 @@ + + + diff --git a/app/src/main/assets/font/bebas.ttf b/app/src/main/assets/font/bebas.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ead2c4d57de1e812d644c07a83211c9c8df1ee9d GIT binary patch literal 32188 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%0Dh3*6ie-bzY3Wy%3tte@1O6~ zmM?sxha+bT=a8OC8n7f00EO>Vkl9YL!7P3W*ua))BY}}>5jY)mu2Xza3riwuB}yI? zdRuxd?b!oZ75po7#5mRgQPOAjON0*A~^^LEbOmGa2rKux`bOL|DqnA z;~;nhyP z0guddGV*k$pQ9t;J8&cjH_(|5nBb^f2G{KAOec1+_{)7F$z{NeaFJ{wg=0jGCeo;#7CYHJlrsT`aG-1x<-lDiUyh8IYLfAimP4Hb zXD+}Dxdc12nhBT6g*E-0jMyD0FOtgnx25{j!cA5j)Tb-XYKo^?GCR}r6*4x{>57Bj zQf_|_Fc23|GH}y6M610-d62@9O%WCXj>)r0eh=HPw^6R4kidhN0EyNbV0C^NRt1Gc zcq_<^WheCWRw~7dtTqy~3jQ*n8R|XYK?;xZpoCkcFrV^_j0+wFPwFRGZ6tV=6gvWs z)O#2n;Xw&rRX;qdp9>$I4?&L;Eb=YkbPMCD0U>Ms$aMIbs z6i)d6fRoPrO5ub)0tdV%;REev1Ld`_N8n&iNccdqen{bjJOT$&Q-Z@5vcoApNe{yz zQd5Eh$qH*f=#wxIj@Sua#A;07kU1o*Fw7MaVO9DqmHOa!%&jwI^`UbSQj*q3(4Ndwe$q5?sl*W7^8!D2umssspr~IX3ipRo9XJ=D5>i+>Jo#iPU zzenJZaisWQ9LLjs`91=Nj3dPd+~=jy4sIN zTUhOr$S8&kfKo4B;Xft4W!|A9J%st0wiH6I#ey3cuD6`OrMoF_#jPwCVnKDVwrg`q z<&CUlrfsab0_+h|hU^9QaZb0Lu2T!DH;gJc>PKb-q(X%m74b}BBH&`F@D~5w5K$iy zRTt6douB7^(>-svccEW`$8!PGqo?z?yhnwFjq-L>mre){o=~cOEp%L}ZG24t7Qg#* z_*>#P{Ww_IIkY)jBR!x>CNOQdQABbN!r=rs7;c3d+P2jrqXAAd0Ge&@6tCgK-QV)a z8|K{@SsN8uAF(2?KJc7JqL#m9uPL1n6f~h!V=v+IdO%IQZR)siJK#X+utWYQ=%8hS zQf+*_yj&dB)~`6H8d=HPcr!C()1Wa1i0{h{N{#TiIO#qD2^}zyD!x+W{D-3SiYh{o zffQnQj+>ejBOj+qNsI`x)0mhB3cZ9hjsr+_KQlKz*<{!vg_oy?s~{W4BbQ|F1kmd@ zg*9*uV0=?80s>sT?X~Xi_C{7FZE`tD9SVAV5_gg0^g&El;-mX8jx^p~!(JHWBq)Kt-? zLQYF!AP5OZWNs-iH$C$(#2+9Rh`?lEF7ZR--J7>Wz}x+XmxH zb!lO}O6+q@@U8UDNp~?cm|FB^(!@}Em-Jyi2(cjbP$5STy&3mZ6MGw1GdozN&?LGj z1ru5jf*#V@GpJ43;~9nax4-?L#!Su%myb4zj|tN{YE8|8AE3cnWekl^Gzpxna`SX| z61ZZX2R`FL@n3O4%M`Y7_f%80y<3~NlNB5&^)$a7j(J4FE0ELXLHHm;h9St&K&JRm z)xCA=4pp;qYDv*F)fz=eae~AU0cK!`(SErZ$u9l@#==(%Hf~rrA}VSGt4*B(Mu4O9 z#0B67FalyGi;?VnoH~)XES3mCOea%lSP7B<#L)Xt53JpHhGi~It!b?CPIb17a8`%^ z5IZxK3vL}fq25@rP*8>fnv*z|?O~n)G_z+F%qynk5+6tnH~2y4xHwD3>Fqw)lWd~h zJ%XL=-x_2ydPcGgL2f(Xb`5SXK~ly*LMoVfYz39`@OI(e6tYo{HHDNj-_mm2jvA;t zvm>yVA?pHeN0GR9s84h*1v`SB^PoQQj-a}>2Hp|ay+Lmq!KG1&>^)E)Auxm%Jq*-k z{zIg<1Pc=0+n~3BntCrN+z6pj_DmgNu2dQ~SxSc<(kVMenVx!4CsAa6M5sS9?J>1j zPkN5TDfj)lZ2q0C>;5&J`<_3sck010#Yfq5eP6IR-<-dhpWJr;+!;|^J^!=qO($Pc zYmchE`%1^I%HM+?8{(D2I|W(^D8RyE?=9TmHB2~*wG}amW{F32J7}E#a5IiMr|UJu z>1Rv%>#~jVFx=C1fow2wK~QQ(OG`Q5#uAy2@kB%cIJ*;%Xd(zAh)95O8+J`{(SaD) zaZiq$W*23C-6k#1ciqex36Vhw<}Pac*cASbWBj2kTmPwb!B(ny6){6YLLI#AO}wMv z-^MY1$bj>d{2g-347r<3m^oH*DfJDS`ltK=wR`t<9o~1K>sZmSVMPUbxw7={Kl%9k zZ$G*9^V;scd%C*z?d}HTKxC;oDSw-BV*=qVXY6ibY;LZxo1@UDsG;ZSbVT~2{vn__ z?GBxa^vIV)WTeJj8b^fv&JD2!hj=%%#>$nh(~9SA8rE4paqDR9l&7qt3j;OzaXI5g z$lq4Vml_$5SXJVmw7#QkRbI)7C6&*wA0-a)OZ5pI7eB5vcNDPm1$M{e?=h}eIh<2X zY;1je92_i+=D0mTkKR&~IEILW2Qm5jlS}kxekSLnYPPI=TZwkklS@5w?Cnwl8WzU# zMlRKbZJUp67&<F!nqn}(>`NF1AO8GJ)laXsiYEw5ZU3#pwbad_*ZK`+7 z800?J-PL{1J*(IWf1Rb2Z&v8$V{TZbs(2a4dRnk-C*96PMxyTL57k|+TkxQ+^WeH~ z(YibO;V#q7dr;SRaNV~bs=IU`T=zkBnccb{_;!l#1_@v0_5-+D80jA1`$*m8%qI`( zdOfZ#!B>L2Y#`jg|6O%d zF=)XuXR!w|2Yy=OF(JqCt&6jjm4~d!kt9TxPIoAZI0}L4N$gs* z^Gpdcgxyi>zsAfq9al3Xqf z5GtMnKC@JlC3213vSp{~Op}_@f(Em>=10V50^;HV{1Xz`QvbL(|A6>-@fn9eKkL&j znc2R=wXO4W;!@J*ZWkd7!^5K^qYQ8M8wZb+OpT3qUZ%@qa1ThecJlDB300^12L@7& z0M79?68id3#ZV0NJs6}LuvAxpJU~mH13t^BW=ZrW?vDA9jSo5@wg7v7^n!g7*ax5& z=dHCt4pY5zGhF1i=Wds}Aig#bd(sQ`z9uup!@(sp&)Wt)r~>tGDt5vvmt<_#5RJwH z>XpV*CgV5+Bhuq;ap#5}Yh=H&AAsLLT&*RY5*rupX5ZH4hw)2t&dl+tCRCQs*|O!M zM-UTjd~!2gD18ZE7%($_fSH#IZU-`^rY0tKb{3CdMu{7h-Pn7JNe0A`1A?lE`!Rlecso=v^`0sEq=Bg)74}O!oBOYoF z=Bk3p;jYou9_4)DfbwAj%2NlF7d$9exb&B6BshRKOxS9Gr!aoZ-wVj!sf_qRn2U4L z07ji^tx>uNf-BD;%##g#D)jy*#A$|x+D5iCN%gTua5qB?$Oqwm;0I0jKUBJrfP-JI zyV33@ez)+|>GfYcGwr#8g7YOuwm)&Afz{dodtbBHH`_&oV zerEzhw{|RAvYCyG9O^svP;>7X*~z`Xt$-Hvjc6-qskB9A6H^--MUQXy}8$VYx>3yD{@!LcN?2!ZJx#c*!wzf$)%Q$Gcw+7 zVgutn^9r=ymvDMZVvT92H;<96tsAleT3abysRML)igfFc9z7R(dJvCt1QgQK6P^wI zY2hr9vxDjb-mkFFz+Fp~I(uaKiku}s>_vW%8@)$2A363FYk72U?)Eu2bANI4($VHd z7KLl-*1R}Dv=QQ3X0+7xZST{qY9CP_E3FPTxR*^d@({ARLL(>VP{wCilJt}ztD3$R zT|?B6%d{4UEg-4o%MPf;KwA$GUIZ*3!oAR>yD7I_KrDj+XE`XBwEhb0RbHiSL#u~n zWrP)lX^S7b8CpI=VG{gcv7<0?K?A5k@8?=TQ)6-i5;0tq2nm2uS0NjtG1Ac)V)K(* zD@0%sC;3Up)n%!HOi)D!q*~`blo@9x?}}J4JQtyAA1JWnZ>zt6eVt*t+q90^fI1$i zb5?;@wN>y7~&Naq$}F_hrrWal!q7+Ma(xN{)J zIN71nm(X9fP%h&&vhA#ja$&K^=(ZZLCb|`YitqnVqhR3O|DV6ob0&U;UOwD5IQKaE z-U6=+8Dnx9$5qnZd2l^6HMZr-75s(OtwwAOQpW<^jr%hSM!HHea6d0OYRbbSM!9>Y zYSTwvNneMQxvG6CRc;0U<$bG)twp5u<3y&(-7yOm5o~l{<9j_aHpp4&Gz>9m`3!O@ zBEyvd+|P=xqh}!lPFiz-%a_z@T0m+r^B__nQEUfF6w=B#y3a2pBMa#SXe8gOqZz}T z6K&`g7d;*i3G)>{iLr&3XEGC>>ZnvGToV$IuQk$7tF`kqZgRE?vO`#WqJraYG;y<~ zF31oJR5nPv(dZb2dC>dQ!qiIaMgtO%Mf&&>FI%#yhcTALVY^f{ifgEyo>d=P6<-t( z=I<3@>5`Ol{pxy+GPt5+LdDK8h)^a!-&{RvXLf4-B{s3^o4uj&$WuyX^5WVsuZ`O1zB3BNjLOoYZJP=0iS+j0BFR|@XcNT1M<21|5%dW3anfqd88>6xIc8D< zXe@3}B7iveQI+W-TCf8MLBt<%ze83yZhw7!;*_}d#L+?F{vJ`5uF335WMuQ2wk)sp zX_Aqxd3gfqY4Xf!f6Iu8V?zu*b-MqIAvxPyeR)flj62cFMFCsNH`Mzr0{atdCx3re z<0dO(a}wD@hA7w6VVB@Zyyl6;0*-hQF;pHu*hCXGJ%;Y1iMKTN(b7mE9wOOEa{&#< z5>)mF>py#9_Qj&&w`Z=~CU8bE$7bC8?z`S`3)9xELAF2d)TR97Q6sn9-`D-_G%uf% z+Tguw{oP6&N=LB)tO=`PqYjs!?YQ`6;Mi3Yg4aAv?=cSMc_N2SV0=`k(gtuntwVeu z=)6$CU*auVC-#v#I7!ym$!8DHI`M`&n8`ou?#e!vyHm@wm8C{wZDZquXpD|*lR|E4 zO4yvr}K&D||ihm4rWEuNG#Z1vH62lFmt>&6+wyZcr)bQfYQ z;rY%_laowDA>?Mcm!px4@q=R@%dn8kWB_SM8++XQAZ8c@3)ZWTWb+e^ydmV}BQs1% zGIo57{d?j&yOTSr+RjW`{B`%{FFVSPx1`M&T7H>L{jhNJgner^@5@;%cYD%7n-u34 zpB9m_`Fwl#hfVcwcP)GoVbb#|a*A6Dqx+I=$9BzLcjVaiNh>NICrul53EX?!UD&N0 zQjG=P(o(s=exa$|e7M{F@NZC*Xp|(1sotuDoja8bWDEZ*FH?HW%v!XpJuknpw4J*v z>f95oBchsH#Ugf3!H9Xy;tAOyNNm!^J7~iS)G;$RLnI!h+-QN-LQ_kr8A2UHBQY@~ zIG;>`jrT7+$D4=S{CgV$3`KPPI(ji$2y{UNuXx+L;(x?tY|zlJ4Dgv>0bd3lN!^3fbU}ok(kg$ySff@&i1|`il(!>6) z(hq~|79`JvY~}2E?L#vrk8U5DnO^AKUTvkcO)Cr<(com{h1QxDi3RNb{QUYFaXWcO zPaP&c!EG7m6>J|J6B`9VPbu>r@UkJcJu6GZ3}VcI6D149=P|gzassLR?t-Ntd&3yg zC~2&@?E%rbE#o62!IzDqE%y_k+rr1zJJmvEm_%0SfG-T-u^qBFhQo&djF=1 zB)Y)dfSJfJb*1UUW$##-S05O%Fkw`#>#)qsi4j}o4QYz<51A5?p5>K4ByD1($;3)q zn_63saDNB2+QA__Gj`NC2fOiBj#_VLA1{0Ruq=X;gD!-9hpPhjBR9ISjg6(LnVE&< z0!Be_`kmwvB>#XIi9ko~7g0o>z;p~hSu750jZ2)ZU9P%x-jwQ)5&!yEe1nliTsP>YBi$i%jEB{m+=04oUp1l%ZF(xoD z*^=$)3zeH1xmT33w?u8x{P4g$8*w!Et}HYrp-PMaMmT@q-2@Np)NE3Xj4b9gIkRwR zWl}KZ$+f{|xS5lD$_CRu83IXiAuDMqS2MZXF-04`zB+qH(UcWQNrjF!wnm%wbN{KI zW&u={2b4zHWBvz z%_^n*v|N!1({VccV&O!U@gZ9;cmK}P-cV#+u=NWi^F>uB{IevBP7(^CX9r% z&`!cQ00AUC#+HIootxrdW#jAEH(Yipe1v0wtRZ5wi@Vl*|3<4&--Kzsn=#X%lk!dI z9m&X!{<)~!+!PASc};|(1Z)WU2fzaeiYD|lC7mOl{<6ap${lioGv4YBn-Emc9@Vrd zDXGZb!n8O3ifs9`Itye+G&?9LctNmpb{>%&FfOiluFRqLYtkR06VF6{WQ_5%EILD) zm11NbzbcsA`<>LugOcQnI(CfZS$&`N*pZqKIt}9?CA6*OIWKpI2p91?_9J_(m#L+l z98vh58oN6#IMZSOX3L0pH*LAUbBcFgk%R%IfGg?0m5RijR2cdX0-*oRB!JeSUK0VU zXEDp;R!M>54rDcNPD(CBr>|93+70m!XwJrFSKyUMUg%tq;$IezE-!CvFhe{*;XZM8 zW%gt3?E&SZ8QWB2H{W?ps<};8QkZV&PSSQ3r}^X#8K#q+eLsWsH;tp92O}X(IGB0& z4(*7F9OLP)y%rYcH7zq|x_7j%cc`W%!&+_Qmf(`r8Wo=J?BV6;;8B$sv&_cX-EDk& z(Ob*7w!XIYHQ|9?u%P#Lv?cnD1tDz* zsenXcF)rzvp@$~kPe;3m5+GZFc4HZfvkoAxQcqbuVWT7ylO(R7w&(}*VNA%qC<9^H z^^^B!`Bcw}O`hcG5n^g)>mTgDq%d(_in+bqBVH3&8C!EU&Lza!&eh!6#W6Q}$Q~O@ zi<2sA6E7F1Y+rRv{K?A0F_97G7QCE2YGf=IB!ok1n$u2{Y)*?SagXsK6vGZxc2e$) znE?5wl*t6Sep(Qrj>%|^w3Os#uuR6@n0&6U_$v3rxk>Dg+&uP__{XlkRuLO7j)9Gc zuLpNog7W5PT*1*+R7g@0`3OJz>Sd;$42LWe1I8c7p0zDCc9?^Od7q36clWSQ53tV& z(la)0YTLUy<{-^mbZ^CePE06pv~>`8Ad4PUpzRv89R(Y;g|Ck)(%LFG*l}KyxxOPr zu0%wnpfk17D_U`Wfi3yt59<0W-{K0KX2tAn3?8l zG_5&VEdg#JmTqoh01F{z8J-cCRO{&xZZSr7+|J9wBi`F2ILOGv!9<#6p% zkM)e(I@7pwHO0Z2aZwo)y*xt9tgKb$3ZwnulS8>FK{*Z<)=K4J z+(5LqOZD|C3Gdq#F|)=qlJG$-qzvH$Z}?9^zL}bYg#iN}!)%~BW2P7B6Fp9jj){?C zmk@b_{~5SngSCwYtJfn+H!1i#SG%S%uffaF$vZnrwsHLNJvoJI;^Ir)+}v%fJsO5j z+nhVy+f!qa9_v{a8It8YVpu?scfC!FdRckalT{6;J0oO@!-7IkYkj8YNeg@vUf zJ{h>?LNhnf`XS+c+&n~}9dtVldrh@QpJPr!O_G5RjV|ed#PEhrJZ8NapE9@FCt$+4 z@fkH<>OiHygE`Y8-G=z)Hh2X@1p2z?`l~&BV<-D-hB$b74o}T_v10W4xZvR~zM7B# zpDD3nvu!Ya1emXa)c)<6A%)?^i&N63xL8>+Z{Mf~z6HK649*3BZ;6xG!5_Cbw8p&+Zf_OxzNwNj7onoq%?RLB55e z9VeoDD;*dUVQ!Nn#4!x*ArNgu52eQhP(|%YqyT%gsOLn&9SYWVBsXrc_@S6_n=OhR zT4e0_nuB0sWn$_JS1Ju_zF)>3<}UWVJv#S=Ce~EP_zxfIsm=8bF7gpOW)YnY=pCT# zyAghLc5-n+_GMFaluFi+5cs)Gij2hm19LXUn&^XM8kos!ZCRkl9rm!1+d7+^=>1go z*K-O-2Zhqc#-uOtn$kiUzHg*MQCR>Nwtq$6Gd3ejT%1Oik96=rgWuhU)nC#-XMnpL zv7Rf;``7aaDk5FWAFv5pn=%Pf)vtMO__!S@i#8=E6*-uj%9c;Bw-5x#&VvdCw8DZE zsuhwJpx+A%&^vku*HxvmwYIT>|0A>vZ2w>z#4M)^VY5s>l!UgRD*ops_qN92OAIBq zRD`Y1h5FYL5~lh12PoanyO|`X#O`V2ka?Z8Y5zDo%OdLKXjN)>#M1GZyGIKqeGz8i z{^6TPvDxDDi(kr2&9!93d#hVJj&YHFmzyq)8nqbAOt1{q-9vU9A`xs;joef|K34OZ zl%PEC;t&gK=RkEGGHY*Fl#Y`*adPgU(nN0JZ0j;S(RWN#Z;NbMW4(nD zC+qze$1*}x?BgUNzZ^4s+hJDJ9YHX4Zv{c8mzm5+yhla=2(ZhlN zyr(QmH;uycq3|OA3EqIZKFkvo?!dY;bnawtiMFr6dZyrAxN6WLJXHe@Uh0*=SR*)uWVH4GD~`6vlZ;XGZzk zQaK}IV^N<(k%E4Va(E__`Z)6-aP;~s%HP$OPoU*`?GWYguc!4>Dee`L&V}+1q;jsE zmg{v7l;6_VPor@3dI8Em($}x1_4O+q%83sT!9Rml03T8xs|w1AzYZy%#QcSFy(~oe zr+WB;?hwlLG79CN>FbX~bT1vK-+zYK-}~TSt&624v-;GeMBL8b zVr%6dJZ!<@P*T#X;y>2O5sv~l%kH0}b*}Lrv(Z8eN`{GZX~|jqDqr{uCBwx^QljgG zH{C4ZCzRytaH(|%y;rls8b+!1wB!Lk zc?2K$gkOXg>v_2+a%{lsCe;##PHSUC-Z!;|hqJjgYfb#p;pGf3R)!?V+vht27E-1N@cGy+i{ks-~=5x zOJ@7L#7@x!eqhFo@@a-Rfg4UDAlslQ_H7N#$OsM3$Phc@l2c=2QOAwxemDBuLgfPcuH{?dd z0t*5T3yb8q;z{?d)Gpp2^92^=M;S+2Jm}B_Q zba}$pux41Dv9z#IF>Sb7Ks=@>JxPWr;zLhTK+r%O$(&dkH73nx1(y^OG_iTzI4kq~ z_LdpK*ACGoDLz@@-oak0eL{S|DY_R$Vv>J9?39d|I?MOWF`Q$Dk}o4UYpFiSX)gTQQ(`ptlb+<^DS2mwIHxY+oPH;#nVG4FV~s z*#=tfi$a35ukU?730c1ainE_itI=u*+FA`z$6IHpz{td#=z}l%Ao))@q#7ZAn*}_m zu$Y5L5AcSzWIX_xL5SUCYxW_>u9uHS?W=#kUs598Hngkr(`dAyp5K7>6!6V@pG;d+0Q=~3Qj)Z140hh~qgV5?WKNLuXcLq^#n<;&ty+uj`-1+`IKY&l^AP2LOnAp0yHLkeBcyS6 za07R`kp_swaSjT?}rPt;N`b z9(24x577JtcE*(wEIq6)ORQ#2>sG*LLG=t7A{M59yM;YN4}`5zh72h+y>A3k?^`)WKvusNg^U$uH3 z5ifX)(rBr*n+eB)5&Sm|q}dCcoXO`74D4m`0~V5HV+Lw8oIIZ(>`SS9Qw(N;b&a4h zp&<(z0>gBSaOec&&Kn}0A3%u#w0jh)!1Qw_cp0?I9Zb7{tiq9b2xcBYJ61PBe1qxI zoyKTdot7iH(|{@WU{oU)u(^xGH+B~l?Z!IA`00M)o|3h~!Ze#40CG2h!@)y}LJrjZ%$<}i zLR)k6CD7}*1GG+@z9bxV4#BHM!QpT8SH37YCR>bOK?~`90z1JbXk{6QNNWiRV{z8S zOlYzdOr?`svf@eMI%v`%Vkx!~NMJH6OMTXPJ|lY8^Gg<;of|*#{b!DRSljzo`_Aqq zv5RVI7e#ZQJR^SnT4m*Hto^C)*b%2si6_1nKNde>y;$`ttgNF$>;rK~j!?vHBss4T z!%<~qBpCBerY1lD`G1Ja!L|^4Uo5-|4N{@7$2pnIDc<*R6}$Ve?31W5g=*(8_vK62 zA@_0#wBgVaoZ-_*E%8Q{LX#8g?932wWMPr)Wh}KqQ4bHj7dBbfSzAxr;q2n+8*-OT zuiQUsTEfbn$`zOD%8s^(pK~{Nv&$O}?<#AWlasM5yfAd)$yqZmU1$)$G&)6E9R(VC zpw%FOU2q$ej&EO)!FkUM_)=FJPp(5AFaa1`gUxqD>q^d>who?-uF&kv~?>7^<2?ZcLa zW#)h$?if=~#xvF2$)YlF&Txv%>!dipfTR#d*Wdi(8JTJ3WIQA3thuh?vB9LK$M zN}R5+(DQeia1}a77*~Z`dhYG<3RAbTrDNL8*R;H|zW&^bJob+T+mXx0{b+0XlFZz;QC=hGrlxgFO|MT~(O9=Ky~(ER#Qe%F zb!u(Z%CU{zg(JF~OP5a3_)ptdG4Ir*U5WKMnNy3sOnpikax$kSac{b2P05^GJ$2I1 zNm&@L3iKx8(eV;YUa)=1@(HW*d~#>VvO4a6bg0Zob|go;xXAmLxtciN~)F&^nO# zv?LsL4hfeeiBC&>QF08q$Ed^?{|gFF1BDCt3hHTZan??$XtFSvcIlBJMxMwYFop#O zzUb!zZfwu(`sPpfFL-W2^8G)zbgtjLas4`*^(^ zVWMC$=NN7US~6v<&Ke`-5wdGS*P)5sAlPvN`arUCE3R__XOpbCJehsrIM)_gG1kX6 z#%1#|HiJMK3HhZ0Bv)c9Ge(ADXU@e1>H(2iM5@E>R}$-lXNl)tKYt7Mp1i6zmt9@k z8W%M+zvNg^_0%udw4RxqwW?D5ljG*?VXbp3%90aC2Bl}L8dF%Xsj94Ve&!1bw3;aH zk^P6SmE^jBdLe$exkC*IR#**?Uj&%Hdc;O2r z`EOJmeR|we3+FGa+&f`iU1e9vn6Y=4Uie97Jbvv2JB7{h9V=d`_V+ufjak2RWL?C; z$Qk3S>thpEWoJJ}Ilz?DSh`rkD20b z-VI)c56g9V6VhoLDDwX<*W)&RG`Higr)IvMUG_r7v|Xc59!y$2q$Gy>vG0OULOtg> z@ukik@6-oqPX$M&bxc{Y&dMg7d+nrHYl1{(Oar($MR*gqgyM|Q+`>|;wZ-(Ng&gP@h8Ro!4pFKC&q4jZ>Ev4UtN37ikB-I-`TS0 zr9~<1@9i5`bc|Rviq+)SbM>FFL*J`mja3JYjoZY&i^-z{>#nWa`sw@$PkbjnePrLN zZZ3CrMp|2KD&b;(@fltQ`cdglggXf~AsKs%CF%YH7u~0j-RgTCHGh0+(Y?#e(sXr$|iS=%^jP8zG82I-!aJ}qsfaBZ+uA1v|j zKLNoGIiFrRCKzH~HjN5*H%ZWA?8b|G`A~4J2W;P1li}Hjq4RW6=##O~NXe3n=LW^x z*9&=re0oU6hn6D1;_O+hr2h70keXKX`%okD_bkY>pZQwU&oUw3%^*Fn z65xCGXXN{2%x_~pAK!C+Am52zs}|nG_uQ|@_jGWj3;lbZBl$iYe|HzI;qSv}{S1t& zBZW8o8}fHQ@ju*C+)Qb8yiamTju8LL-sh%Bt0OIm5dX_9<7P>#BP|IKzv8x$Uy;?3 zmRO_C8(fXFI?|F1K<*}R$m&Q-0>v-6lU$3mI?|GO{OSO$gVm9igrm+Oj_j+jAEG6` zC^^Q>mR866#8+!LU&CeL>_~=vHa(4lY6!h+ID3z;IRF=3mMLK0XSd<5iYaOsW1D}0 zD34ai&IZlN%HCVe6_l5)DW6n6Y0cQlGVvH|Q`;bZv2(k4cSZ&41R4~G73?++Zd#ZD zOfNZaO$5ZHdWhr}-bK3eLNE!!H}Gk&VwX-DyLQUN$rC%rm-Fl~@!Psa)@%Dt*14fp z{E|>Q5iplhm{oe1+1v`QnSUO8f2%VJfn4q*%cWk)PlHt=B8ocl*|I*jZ#Un*&8_%+ z`ser`Syi&RKk?ff&_DreDlbqv5CaRL1i5gR%?0$m#|6l4*Vq4N`gF9Pt#jg<*9|qrF`G{Nfqbp=#C8 zGZWuBCVC2IX1%|*ZwFUdzb@8BGpCa z9`6+$p*A-*@ov z@9-dCALGlZ_k`x&KKsVirxyyW^6l!&@YU)2Evd;juqkoasA0viQ<7HBOQ;WY*OW!2 zXO0-1RTiANnEMa+R^OXkcwY#+-L>3}eDoUaD3+VpSxvKYkBSV7aJP#nOe?E$u%2S$ z7#K}_JgZkH90=G+xS7yR;xQ4}ND?*TJHna!5ixCb ze<_Ki)<#-_WNKkHFm_BijEfxZs)R6IV2bnR9pF0rwf{dqCX3m_3T!2Ni~WJK;gY!q zZY_75dy)Hq`(73(E0V31-Q}J5N&IvCdqR@1Rd^k@D=p;#@*MeAg_oj4v0rgVX{L-& z7AvFlH`u>n|FeUy zLxaNxhno)f9A%DSjwO!E9ba&AbeiS#mve^mXy>WU^PJZ>?{Plv{FU=>E`p1_i=RuP zOTNoQmnN5`E|*+xxqRo+=W6ci=^E);?fQZ1H?H^HOx--(!rkiJuDacJ`_Y|ow{-V* zk8yv_{SEgI+`n=;Hx93>T*F4|#{L=F;FO`>z zSG`xO*9NZxUZ=e-dA;NHsn;)HYg_oC#(C#?mw7jMFZSN-z0>^t4J)pvvMLEqbIPj#evsCtaLR=rTYPTi&MQJ+&^ zP~TL4uKrzvl!lrVO`&FrX1Zpcrc<*=b6j&)^O;uA+H3u^QQ9Lwj1==V$Kc z=@;Rb=~wDk=Xb$B(toIbsegrkqkp^qCjTD)v;J57Kl1<5|JMLMz&5}mARr(qASYmU zz`1~{0k;Ew3}gbW0(}Bw1BV5c2Q~%19{8`oyMez22|;#2enAOA!-L9$W(0KvZ4P=q zm=B&Fd@sZ##4RK=WJt*HkkXK)Ah>b{%$d2fa zI1q6+654I#$jHjbS&_>lcSJrBWfCpLS=6c1X&Q*+W`~oJ%)JPe>n@-jseY{iAeU zh9bi&!#^WDqadRs<4DHIjQ29-nE{!lnd>qyXWkzgKXk>=^FwcDX|v+9=4G{Kt;*V! z)syw#?6~Z-?BeW->}A>ev(IPW%>F$4_Z)eSV@_aBa?XgHNjXh9^Kv%lJd^WQ&PO?a z<@)EAlq`ai1WPizDrP-w`OWz*Djt9=3yP)=3olRZ$G`neD(}JfJO`ADw;k0AZ z?$kTf=hrW(f4cs&=?>F}Pv1QKqXt!jRl|&iYmK3eYa6#V9%+1jhUJXX89Qfu*ks<6 z)ikr|K+{LfR?Vf&+ne_`Khykr^ZU(TH~-xHSBt8}xuvRQdduRLO)ZC7o@=?@a%ZO3 z%*vUwXRe&NbLLYsU!D2R%#UY&G4sE(l(U>?14Fa@K3JKA+9a zww#=cLV9Fz3lRr{^l>*3P{&&wJkVd1vRF%pWs<+x!m~xG$KzVC#Y# z3q2S5Eo@u(=E9E_e!1|kMXE(^i^3NTT{L#l^hNE9wk|rh=#@q9FZyyt*?Wfyc zZNJg}Y5Ol7vJTr0O-EcuUPoC+L&xHd&W;@&JsnSXyx#F%$5$PHEm18Qwq)&+e=m(+ z+Pw7m(%+UPFRNVExopR>o@GxjduiD_%f4CezdU?-_VT66pIO1KC|FUsV*ZK^D-N%C zX~jD$zFDDLnYFTDW%tUzSB+hDc-0@PU03_9j#{0zx^VTR)o0cy*Nk3Mvu44X6>B!H zIke`PHFrAsPP##OpZN%Dy zwZqpot(~{FeeI^TJ!_v^7rHKSUDmqY>w4Flt@l_TzJAI2kJf*_!Dd6ohEW^#ZMeD7 ze&eK#TQ=U=WVfko)6z|EZ2DlceDjdadp4im{L7a7Ei<;9*lM{oX6wwYx3@WLo4)P4 z?e5#lx9{5i<_^yt%{!Lv*tX-z9k1{B*N%^Oe6{1Z9l9>#F8eO8uAr{CuFS5&uClJ0 zu9;nnyE?meboF#S-Stw}m9F=??somw)!Qv}n|0fFdvyDChj%A*XLJwm9^JjMySw{L z_siXvyMNqivom>T-OlYh@9hfT)wpZrt~0y-+HJJkeRu5cqTL&JAK(4b?)P{9yhpXi zdXLK<-#x*5V)mr&$=Or1XWX8OJqPz(+biE&vUly?clQPC%iQF893E^HI+iJ>U2A9dbRSK9qH6#G&bjmLFPwXvd*_hrT>K z?(meub%$3T-h6m3^cl!oQ?j`GHYd{ndL$N6V7j9X3Ae@#tWY^Q`uY0a%kd3c#`=_rWk*l z!g=6aZWA+{Q{y){T}IhNJV*8KF?jpqS%9Yo&qzGwcqWkgc+&8B3Z7}?EnCevDgv1% z0cQ+CEOS9HV-^VSGZ&!WUEss<{U*Nu&RpP1@C?fYuPiHPDvY88VUpzz5&K>Cu z-|q|96;<)G83*AD<_v!qjy!W2d-PS{p&#+~-URAIXfs-=+}SlQN#s-ILWzbmTr{BJc!|z6eU@xRAumA@pX?GbSh> z0SCr3{61gq#3aebF@f^&ObBQnP3cZ(|Inj={~j3&Iu2wk^bc2}`wU}o4)53T<}p?= zhH)TcG4KJdOUQRJ76TtT78o-@3%U`yKju-u&O^rn<3Ps3@L&wS0{z$EeGJc+{QKy? zVI0U<415Tmk?&+I20j=II%as2ev|eed86;7eL{oBz6p)1K-@U z==&z-6#+4I$oLa}Cp>59n*mqZET)J)=6EMCMQkTzVIv+6-}mC#2idWk74aAgF^r1L zIl)h-lONUTWL9{?ZY6wy_il{eN4mG@JcFF$lkr@GoFx1L+=z@LZDTwy(DC~YvP&=H z_$DTc&ZFC?i+RIuMSnmm(m#0{Iyq!c(tiJ!sh8bjMw2n+K4K2>zcIUc zlnJ)zcO?89KVa&}-({cE`EeXkxTn#2glA^x{w6YnZ-mT3Ju>FPWXPlsnH{o!qdxdu z_AR~xCdQ_oZ`OS+k6?Do%b6zh@jKcUnRoa*DI20D`86IxLjM%Dws zG|)=uMfq-KhjI*aLD`JY8yREyS9sgtabePw^>}+gW)rz|lW9bx;p32%#}NtKm&|dw z7VXQJp+XvX9S>iE=Q&0tx5syPd?xggv$WIr+igdc_PK})O!f*1bwJF`)dg>_^c zezTf!l^3Aw0@~?g(&aDUb35ZiY@(CfwWF{vh*%VTzzF&_|Y~>t&l6XFN{GW}QYpbNA`vglooWye-p)XEx^P z4*4WztNA?e1(Hdi_8OjOTG_$ zjxyE!ZssMPp;1O=ff#{iaC?~MUJOqyN;gFL=_CBN!7}fQ10`d4_J-&dPd?)}v`)Mp zUJ=F_dobv^M3;f?LHHeIIYb`NH5>C3-xKkDANkwBN47}!GtqqrOtMaKA2W^YWUN>J zW*W(NSrp0^Geg)vps&2c%;58w66mziygL&}+T*Zxb6HFt`3xDhpA$e!1>+<8naPwP zx|d+V91@(No7*sDvKdSR{~l9|IhDfyihb}6e8#PH=x@XLkASNgVE&6K5u%w;`X--BoA*IJ9p^;$2*XRTF9zW-XY_6b_rulM_XC)qP=)~s1; z9&6Uj-h1{8{FmTk1b|+pGUU z-~w`0!k>eS`2Q=eiQR- z>u!LJ-{4$<>wH{ua1F&(k835aa$JjW(fot@;s0w{=zd zpo@-kv-S0_ov6MJ;pFcq7UY*Y0esYouORW8vt-E}bp-8m(#lBd)8B;1?^2vQ*N2vK z0zAE3NCU4-!*T*KkDqnv!_}>L!2EdtRkvTHQ=n)>(uvDulkdEPxb5Z*bKG? zZ{~iXf2n`3Kg1L}!wfSc@J2Mx^q4*7d*(Uwf_cex+zfXJRvs*M*SHtByWHLGHSV>( zk-kTLkNKX!UhwZsR1?2C@rsGJO?-dihZFzmU*vx+kRCV#@2#=|xq)yX7MKy38K?+s z3~UR0E%1#%PvGjnErEl99|Z0R`hp{aql1B97QW6e4zA78St(h=vPNW`ku@%BVpc)c z+^pKHrkrPf@RPfjf98HR^|P6u&H8NiXBD3<=)=cdcwb4sA*hQ3C}C99t45UYfcmj| z2POPekChTWg%ZAu5@INp66TuAQNpXuznFjL5-OB%C`x#ad%j!ie%-yw-RoZG>qQA4 zM+u*w=uDh7aVJW6VB!Z8KjIQPfsuhRfdH2<8kjC6><(-X>_iFo1oj2~1tq-eOC>x{ zN;v!rC2T|q??(xp&+d>kH78CRh+U%(%aBK!>sZ2L~5>@hfR^P zUF=EVrkQSRVKLZE*9mu+o2l2RKdX=3k?tsWxH|&6T4J_f9qA0S)opQGu`;Jwk8#(# zP3}5(gQ?f!&0ce@IpjE{^KZKG+xxHFeZ}Qp-*wr}ukE;W`z719Zn=2#rtYrJi#B$& zZ@?+9tu5=Cn;IMH>uN7pd;Xg9R@YRYyK3c%<>xG2vUt(L1@q_4ol}+P$39zy>QMUN z@=$rx;G#n3(BO1{=|zRAH>JEcm65$m3Ie^Q=Trw5EUT`p7#|GQj1L8SOMBg%O1kPA zdm6lm8n8erqy>uw%R>v!SzR5d?5X8cz^wQ}$i|ltM~)MySC_A-?yV{So?~oy4u?T# zgLA(WJQm1z($GVK*a05!gI7{?U zDf(T*VQq1lOm`@k1R+Kv#S47Ll!V)v z#3AQIb_yeiv;|)|P=b}KtMAWnz@J@El+mxKu=0>zTo4*i>vO8nfR%^T;(}VJ_5uV= zPGtaU-CMf6nrLgsL+67vH5EmLq+NmPP}BHO&7o1FdNx)b%FHZZ&{GaYhpw@L9l{p8 zwFN!Zy`*xaXras*P+OBTuOU=b3z87J4gTi=)vzj1+go2-05FhQ)r06jLmg2&qYr75 zb4a;4YL+t#^_G&+J2=!-)|(zGOU8WF`Kpacp_tTAS+5#xYrQg585rBz(-5kM29_?Z zUN^qErVhM&OG96i;sTUy0d#Ol!P4{4NvSddJv|kHL#1wR zT|*s(D}w0vJrWhFsGv^krKk+_^p@5&)Pkb2hKY*`k%gYhP+g!A#skGg%`FcBT)mp4 ztXN&$lhGJz455ZgOMB{2?D2tyn(;j~4P4{M4zlJH75WCOlNcvWHXx^=84kKdeQl`T zBB*zM8Mp4sh-OfoiVMvrameg^$~F9+`Ju{2P|#J^*lVDL!9Zh;RT*a~+l{|V1QsDE z2onX+rp&x2^K8-^3L&0D2;je`cik6*Ey-XNqM;0KPO;UMUN@ICuR7R!;rQOR8qya_ zQrEk)9o&JEykSmouk#XG0yz0hl~_u-knPWwKaj-T3|6K1jh$@eeeU#b);Nmc9%jv{+Gh`!>j9A zjKqs9(nlR zSP-gfLL-vAKwT53twMIWb|`=2D?`B=kmww$cd9s8i+XYzdZ3NH=cBjza)$Se=m|{k zfz>)62G`APSXGN*A&?oU3UE``L6fNx=255yj4a_G^jJ<07L=O}1&7X0%^AP|nbX@* zV2RV1D{{81x_2oFrTMe!pji=OsUX7uQ zjfPD>kCKiTj3fhw?JkX)7*}i-(rtdN&=lg|o5BBsa(dHp(9pdu@?fJ=sW=`_hLLHT z23bOOZ2|+P%ssC3^f3Q7U*4G zfI)=Ib|t6Cg^H7PAgxqYA*TvDB!Dy8>2*SL6*&&NR%mXoMlcD5?$eG+3zd*JC{%I? zJEFnb!v=>khh)Ie_cYWt+JPFi?39e3NmC`%2O1jxXxq(XnpRZ%#=F$B(4%@UwoQs| zg?b@^WcI=2KC~L!a*HX{f^t>-?eALo;%R13v;~nvSAPm$IR5wxirj zNjma?0&{RhH5ES{O2EpKj)+Xu6Au%_Q ziRzlcO_z(3Alx(KkV?%J0%&9=iaDdFCp~0`ln|N!hj7>7@Z{2|fpz{OqW4lXeNRu? zkkiMceVKj;C!o%cRvwb{iHmfH!R5W_sP3L#WeKSyO`_A2>r&EbwyX=LX5*Go{}q6RDvrCdU`A!&B-%#&w}Ns1iE7zTrz$z@|3*)y0PFNMPqO( zUjch{*l7uE2~u4gcGiZrV!BWs>J0?ez$jv4or z0?iL-E|a7`YXa`oPDNyZ0m^o`|LzHN<1`@mvZUOLA(wK{;|V_OtUIk(QaN=Vx%|&X zJ?vmK4%v*jxgxt~P0woFE(Q-f6G^<}hr&ZAkQwI;T~8S*?cX+Y>&mS)n@g7XH{i_Q4{VVhP{VOJ~^)H`%w}08>e*ZanJN--Z`u$7bFP_xz zUzFSLUzpSHUy!rYKR>6`KQFuAKR49xpObaBzbdQWUzxSmUlF|CUmooDm-&C~pY8AW zm-_Gae>KqWpA}f=|H{OE|ID+ngZhL{|BMO!{^=8z_@|XVF?Fp!9$Vs%gbVzW^OpGY z&KQ5@nn~k}{J9X3Gj!aUYqG~h{Gl`b{;V_m{Xzdae*j$l6R_3w#IY0nXN~FiPZ-_r zA0Iu_f8N-V(bLYu{(S!P#t?MInX^XsuO1m0v2u7MbLEJd%$gz5jFrBqyE3E3tr_Ni z&3)H3!}^D=Opgv;nHo)5sV;C<4y_qnlT!1Wly_6KQ`6ym4LcCM>$sU1Kci_YO;oQ; ztI;*X^w;#e+GIMWwA7~#tG&G|3Kkqr?O(Q_chJ)Fdev3EIm^k#jZ1IJRlUy2)#p_o zQtIlOE57wD=d7{?y?d8e--idVXW>>I_vYtRA9BsrHDz5m1ORKg5wKLqA!yglo2Zg$o?S3BQvwmAoJHqH#^ za$s%;{)BS{PHUbEcN;LbfzSP%`U+>Sa}#(R1dm>%yTiGMIc)=f%Z>c&5OV-=+Z?<@ zMr(cD+2h;@?ib-%_LY$T9q0SbrOs~Wo6bIl?}fZA&JH}WyB;#Pf{Nm9faD*fJYlxs z&GV@K5`CNb0m?L1<vVK?sPaCQIDNYtFz8&ak^3RD8ARFE8wgErV0KM&@?&ifR;OT@VfvlMVb!hLf{)X z)ogqV*bVv);3+RXjF+c}5fZq!X6Sx;U+>_TZsOEw}6X$G}S8+_`y>rk&tkn@Gf zRJL~ixio*<4^Hh}UaZ%LmO&!vdOKD`G$9Yx{+tV_kxR3fb3_zvs9Vx<+Y$rmG^{#) z{kOngo#y9uI}T2L!Ye>nbRXW0recZOAne4DjxBYt_6y&&W;(<1t?NjPjc4F?e2g>J zfqiwxJ2;`)!O4KAy&(3;2;sZ(9Gnd?307^glaB!#&nZ!3Q(#{rkR8L=k-#4R)36i$ zbkzCT&P=>9p5=TMH&C;kGFaIPrxLX~$C-dGq1;KYiSsj z2Vq?NH|I6%D?#J%pPi4Kk19J-;63MB=OyPw=RctV|Lgq8`37u!E5?4Tfk#UnK$~0y%^@pE_I@*T?;VWD z+tBkb!AQLw)Bf*a-n9cG^JUI)jMfjUbR5()L=9ELR3_e3_Nn1&gc_+vIsMAPF=L|@ zwog`L)tL$#LE$9Dv(!Z8R{<4NSt{gw;`~)*<9NedHA&^E$toWcC_E-s#cB$_;f|`9 z^Qnrfgqo_RsS-6^%}{5nnd&QQminqHRkKx@^M>=LDpwV%QdOxr{BCZ(T7Waj7pcW+ ziCU`8!TjWqTBeq(6>6ngrOs8=sz$9==i#mD=gu+bzttLbzFMm;P_=lYUXOR`jri8J zS*=qoIMw_@wO+NU4XRyrsEz6(=U-K)>Qdcmlk=AIKWejchq_p8!8_Y+>JqhGU5XWy zFFUVertv$RbNqYfsPkXWAMlQTr@Bn-QeRh>t1HxQb)~vWeM9xAZ>l}&Tk2|cjoPcO z#ar&{)eUN&+ONK?Zd5nnO!e=mThy)UHuYV+|Nfr3UHywXsJ^f6P(M(2svoMm)ZOYH z^&@pJ-i`OFLpZ1Me)WL*iF#1|)cFqPy$`8})xWAo)T8P#^)q!uJ+7Wm|E8W)KUYtw zU#O?mFV!>ZSJ=_^*XlX-8}+>UclCn$5A~w@PkamiTlF%&_I*YDPQ9vruU=DsP)F74 z>J9a#I;Q?xy`}y~y{-O;H}e0hj$`G)3H2`C&A+ccP#>y~==~@5qxwYsReh>HQ=hAo zst+p@9K8L)ejD1wCNn8I74NnN>A^Z((_5sWdYI1C!}SO~QjgMS=+Sx%-t(WS$6-Cg z1bvpCsQq{`7Svffq_cI7&efB2o}R4pb%ArAbH6UsMb3j*d-bF)#+&q?I6uc6^a;!_ z?{=QjQ*_vQ%=wv)IFIP4^A{b{ah=dp>CG&@fWVts>;yDZe?`x7Zq#4JJo6^pQG6fs z)?1t(V19Z7=A{qmQaxLj>2h76D|MBgqvz^**!O3FUZ@x8#d?Wes?X8O^m4sIuhgsb zxw;x_FjnjH^csD>UaK$AwYpB%>jvGZn{=~Yr(1NZzEH2%ZF+-l$Jf*w^+mcn(b#-li|n+x4Y-2kvHe>dW*l{dIl0z5+WnT#0=JzM*^cH}xL_v;7rPxOQOr~0sdNI$Iq73)YI)sN|)=_C4a{e=EE{Ur8)cnWJv zp2pgXXY{Z1v-;QiIsF^`y#9Cn0?yca5odY5gs;M1*8inn(ZAELVhze``Vac3eqFzz z-_*zO<@{UvfArh>kNO?`zxufTlRklawfFS<`UCx;{z(5>e~g_EKGA>GpX$%_=lZ1X z)BP~;%4lP-n#G6J9;qhH3^IdFI@Y!fF+;KXBhw7W8kdn~lsUtUHe<|KbEX+*#+wP| zEHlygO~3?AmI;|`lVfttB&>y*Z1PP3zFjXe#b$~Ln}~^;n2DQ&nQEq)5;NV*FlU>Y z<|}5F`Kl>3vrU;PHx;JRRGB$uu9;`%n+0Z}S!5QQC1$BP2VcQ2H!I9av&x)ns!feq zZO$`m%=u=mxxmz#I#X{NOrvQs&1RixF|Fo8v);6s4W`|6n2qKl(`mX)x7lPin~TjB zv(;=fmzeG5QnSN+&FnOnnO)}VSl@Dm*=?>gSD9~MHP1J(+T~kV?{W>VA-K+5Z*DOA z%zpE2=ZN#TxzXHYZZ_XBx0qYaZRWe?0M`E8jRNSLRvsYpg2zjd>pHZeB3|VO})cl=BRnyykXun z$IO45x6J>Tx6L2TJLZ4Qaq}m0!n|wVGw+)Z%!lS9^Jnw1`HT6){MCGFJ~N-2lcvw~ zW6hGnk!;3wU7uZfVb@*oN~WQ-_JUSi@XCub+|lkBcPw^78Rw42eko^R&m_MaaD#4^ z8*;PV95)vyJLb8Q-F&yeEp&_AVt0xgb|Y@ojk$3*;ZAj@xh3v&cZPemJJbD&JInp5 zTk6hs%iMCe!mV_x+&S)Ccb+@nUEnTs7hy*hT1$0~y9{SQu5eentK4(lYPZH+jdL~E zVExfrtg@=b4hi*c1J-~vxy@MrLF+*-#9ELxoaot(J)}0e7rC8om)q@bayPpdyIb6? z?l$)lce{J3yLjcog?N3Qx~aW29G)E(zhY3w=BCcBhK|lAiz$nW9}_* z^E{j9R$DRiBzLXW*YoD<)(g|;5AaRDZ~(S>iA@!MTE_ZyolQ;cZFTL9tqmy)>l!w7 zH>I?(CnRO!m!~YW#cpHIT}Z`igOjq@rfNSWRou2}BtA7|u}#%(E33V3V@FqaXUE2t zCR5qI&NQ{JOI;$x>yY9tvBm3PZ^)9CP3`OIIyY@-tJ~B)q~p|3$}%gt^AyPmDOzG$ z$}%gt(|XG-Z5Mm#%Ll3?y=wsGvPL7b#V<=)VH0<==dPdz>ZS%-X&Y#hZJ?D>f=yC_ zm9_+%*z>LIY;9lX+eGe=m8a%^$fi?6sVk)+H(5XZ+<|p~17;Hn!9;IH<0@qr0iCskJVna${F3GQjAx%5I6DhkPIFJa;vs4CMJ%v;cBR zpl?Cl#*KAQ_zm@qb$Zbzy?B$ZZiOmx4)oGiv#h1Vx4d=ThB~vNZd0n{#w=}VHRZUL zcC}hDv!`beKQBkagwP8Qu1i)#M$;)JN<&6$^-y^j8nwyBdr2AT>b(anWoh%gS~8CcULKwZoRrbhdQZnDVHviwoI}LP`eA zMij6C7xLrlpqkGhzFxkDeJP(A!qhgKL~>v-CuWeP#lsQttu2g)?H~{j#|3ZAMm%gg zaXdUt@K)L4;pq~#9W)-c#wi{y7ks7oRo0K#VJIFExe<{Y5xEhO8xgq?ksA@Y5s@1a zxndaN5s@1axseKyC-NgAKPvL0B45UUcvR#^MSfJ|M@4>Aq>(z_Mns+ zOSqLi(kASrmKd_By-{XQjrDCqF4_c3N^_#luBOJ64Xy1oSa&rwbhI}PYTD9(9uF#; zc3Rb-y5`o_aLM#|BxPe$7fgg(xv7(TeKZp0az`V!AHe5&k4BE!`~{-7T0SShy>_xplJ#XLKPi?GnLqqv5GT8n$+}wzai3@Zgup17|}AESDXO zxT9dV!{MjkI>`h!NyfQpqTy*ai(woT$CWXSn1;-;*ss^TVwZ&fQ&Wt%oyW}7}%VO1+uVO1+u!BrTkv|Ru` z^NCd2{KB{N(W;nlNlQm(yRU=YmF#XJ*KO(OSkKiHw~4~>u;_I{^eQ3YsS=(l`aMZyOU~kv~o3PZRmmME*39KTYIM6Zz9beu>C05&0z|zeM6kL zw&hRA{4gQ&!-UKa6LwsTRNDRtpX&!c*AINoAAGJK_*_5mIe+lEe&BQcz~}tI=lX%q z`Ge2x1E1RmKIacU=Py!e`zL&nZ~G_0BH#8;ghjsXp9qV5+dmN&`L=%|Eb?vtL|Ek8 z{)w>2xBW9xY5OO9DZlNX2ut~G|3p~IZ~G_0QhwV%5tj1X{)w=Z-}X<0rTn&kMk;Op zgfHc{{S#p+zwMt0OZmM)*!EB0MZWEy2#b8%KM@xBwtpfl@@@Z&RNDRtU*y~ViLl7G z{S#r4Z~G_0QvbGpA}sZ9`zOLu|F(Z3EcI{uC&E(ywtq${ZU2NX^=BprdKXm&o`j2jPbDq%O(H29r#NaIBZ!MkbSH zdhm^?X6 zhUHmhGAxh0yl~3A;x3dpWj=f9^H{S4W~E~|bKZcmGGgdF?>0(kS?L(gkY}e7!3ru7 z_9+_&MoGRdpmHJKj2t#E`PhuZsq<{MGEaH5YFUxO!PcD`n9YHq^k|5me{gUR1sNJn z&=)eDK~0JWA4w(%Ogl9&z&;!=4|5Fnhp4?-NAs`|nq8KNr4uhaXeRBECM)ME9%!<*{-yEKeuBaLPK)O6Dm~z8R6eZlJCQ(Nl1XZEowp1IOa7uCP_& zcr3!4mM<%_HBeraELt>d=iTt7)7p7A!ffZ@vt5PHCIUX22>8}SBxHVT|(w}37Ov|WPX>B`CUThcL|x_C1ie=kojFg=64C1 z-z8*zmyr2gLgse~ncpR3ewUE>UBa5esxtc=2tJn=K9?6hk0bDT9D~o}NL87A4g{aa zG59==!{>1fK94K#S%u(peZ%K^hR^j3pX(XE$hFUZ5Egm%c~4cDecl6K_}k|^2n%2P zdFpyX)7>K+S62PMZ8!Eo-$_DPsWU$T1=wgX5^W`!}C6~<&1 z7>h(Rpr7?kZ5g*_PZ132R zhDSFR=)Txu2J<5v#tmxj*wiTy9_3iNuGTFK4CW^~7UbtTmax557^bp}w&oO)0FU^$ zHK$qbZOy67n|$Joc;btA%N2m-2?FNW)@<|KzG*`z=a~WGNr2>;K$~X^5oe|&-b`n? zGidoUAxmIF&T~gsb1G$;e3Afvkj*xrG|o2z#GYt~JJDF?1X z-Jq~`;(oXf8k~@cwGv0*{?fdOHQM;%+cEThA28nUqoh>V4%Q|*SXby^EueBTv3rDF z!|=Cj7XnzdfL*Sf6s{YG^Qdj^zXl+a!` z;5HNMEAgQPIMEKs1eLK2G==yYrK0jcBMf#_)4SYNXsZmYqtw`Ws|5Hxlt#rFKFIKe zSffa1R9G$=bw)Lf&2@tNg9n0l1s@1L;kd!h;FjQyAlkuky?R0lmute|nxI<7nN(a8 z!w~1Qb;UZOrB$gtU2Y8@IQ{=u<0FIF!Tex2I5jvkSQeZcTpV11lN@S;&A~P==fR%f zUgRq6ALMEx_KFL*0qg*n>(ArP%i9s7HkxF zBmB*{w&U7`>nf~z{bH)e5cX1_rkM-*f1AkeG_(js^tuESU_>jXZ) z^@*bbx54iNmhu6;31T0tAao%}`6r)pF#%T=t~^}DxCn2{rUK|ofxB?^0{6vos=$N5 zKZ5Hyxt@Ukw7@UIe+6mQ!as`ZEnLU3g4YS4h602|ZUV?v;2B(~u>i^$KzRbFCH7HM z0n}6gyTSxe-T=zW_yh3oKzf|o6M(h{P=Wx;9zfXxhjF2o2PWXk!WEY*4}P)0GvJqk z?n%cDJP#P(k_29YztGWvSAly2FnT1`7n5Ce*shLayBcS^nqa#+mF;R7+tqn&S6kSw zev9qu)ofR$K^*v-c^^eGM>K~Kk)Q^(o)K8M-)W0Chsh=jxssEiUr+$HKrv4MzOso-n zKe8usoqrT+%E^7QAnG4SP(exVVSj+3>w@?CbNz*m6S*;Rn?Fi8e~EvVzk;Bwp;>AE z`2^+OkbAR#sect>*ZAxGEsS%sR{7fr%HEQ_!{1F%)^2dw=HH1FSLZ$F-%YqkOLmWc z4?*G2r@Y}m=)VrJ_vGH^#|}({^WWw_NKn=Xp-lf>1m%2^)8~gyBlcMCWBv#I*xM~~ zFmjjw3Bu)1jb{3vCdmI>-a-G11Qoqjbj%NpMv8mGFZhoVl--uy>3@r$=!7Y8|8au+ zANW7g;ukHB-({h!`uvxnnfPVxi9R2wMlV7S%6o-+59ns(t;s?uP!1hC64*%nXwu$E z`vd4lXpav9yQ0i5t1mQx`V=-l%grmKo`n*<7rQfX1NE-xjJOUQAY9;%=wsBcP*;!S z^-}KwzXzf>P#;5zhr_R-r{NcPGW06-VL;ELAMr2nDteKH-j1Lx=od&rQ`{u(ga;K~ z=s|&xlF+AxoOjZupk?CZeGs|Lf&0wJ3Ov&!CQ1;j2g5Ij-0WPgGuS|kL4un)CH`e-%HSk! zrUw;n^q^o_5}I4ctwuT&Tx_}I^-baSLt7@HDF>3cp&k@m5oi5JUXoDWBOWfV#Di#b zw46hYd21|`Ju!CV%g~fhJzTKagNpJ!DA*Q-rqeHULtK9u%DT(L1v@>cs5$(ar3-G! zFSAh5iX?7_rxC%+z1o;E!^2If@^CzsbK>ZPXqNEXpUe76H5ADe-0dE2%7G;A77rJE zCy6^9-JQXEC4cDC!f!y=js%|)+_Ondd?DEiFDG%YC2_}+xOY5UtK9$jd(M;FS<>9cg9yu3nzW+ZW?9xmsTP_d28%MD2jhE78lJ{GF7bm8|x zJW@dJvfRgnb9L-aiN$#7(RsMgTF?H48ofRpx-f~`n8a;P;Ku$)4z0$DB{HC2?MEcE0789nPLA z(98nqq4{muViOCtWzUt^#n~$aT3zf}>e@(!#nFt6pzH^-n>{;O^j_{V8%r}8p~H+! z=rEJ9IGTr99L=RHj%Hs1T^<)1H2bnRnte&^-t7Gr^3rBMkb5Ba4vV81nb6&meY?;N zXcJ~tghPsFa;3))gzyn4xgIkHM{ zuO(9)%YG;OJ;G*xoc(zY+w`0?uO}Dxdi-*R=8UpwbH;g`b8_Q4hx=Ym)RQq_>vCr0 zh_sxF9I===OOv=YIrWww&DVr;OODu_obDX4i8(uSc1!G@oa-!9urx=kSPWQydhDmO1zY)Q^>Pn!x_ zay}5wm{VIQ*UcR)P-gCEfhOc;36$iL8_$1Ma5IW(1v-#hY9UXHF_*8(6^lf77&dl5 zpL45o*GdY}XQXH>JZy2f7kb*ByRj%maGR6R_GAurE>cx&Nnku-7 zld=WMpDb3M?nwj}j=dnz)JZc1D$5H9GY@<>)h40l z{3C*En5-zt)y4^x_hatE-C*3O$?msM) z|IVa`1$V^L*hx=K5^XvKdSTMbLibvcj9`78rD7cN2H(RLStpaK3{CDzs z1aO?m+b8c5x~nEjUzmKu0SF1!~Lh6lhDn^yH$~@-G)$PySwk_UGRs(Cztm3Use`hmrqq z{t>}F<=NQ$7rgs`{MYi2No=z2^FPl2+~Qz2L|+ElXuy^f3@wn}STL?2U{e&1_GU|` z(3KR-vau6CE|8uVK2|VaWGpRMWg&W=Be*pM^?x5%&{EKDV~buWkbYUPtzf65-CZF4 zvf#P`8J&xF7u;rJ3yVD~U;MN;gE|E_zgX-+!NG#NY>MLf*ej2J1rHWHBG41ws8;Z_ zXP*n6D|k_2Unw{$&|3w^1^S@i6M^~)T?-WsF3c2Ybm0Vna2qI4abaAb8HJ?+RTVB2 zXjx&kKx@63WnrT?&I~-o8F+$GxY?Tx7w#&&O445K-Q5-5;EgzuHHFf*3UBsCgTezz z+&xL$eO?_DKIYXy;WI^|O@+^UR=M!i!Z$?P+l40t`pC06g`awsrpWPdMHxw4@(Iwu zQ;pO0?xKmF)ho*PdVEpX8dZSBGSy8RcLD5{#wihi<;*w7~idH9a$tNO3ZJy>7 zZSh9Bq8&w-3%{Ns>5WDEz4<}W?M2cXi|#FYKncf1j{ z=)Izkg)aG|qd2X2l*JVfO+w>}1A@yfE)*zQTq4k{V(EFsNgXd<<=wFq*B7@4U3+o2 zK--FU3bea;k3iQI-zd;+#Rmnt%hREOIePIU#ZO4=)5XtOD6(ftsf92f5-l!%(bL`H zS3KP>={`x~`aIke*OQAUd?I&Brbjnrbdv6LxCu$RtR!7t5?7qW z%}C0q@?=DAoFbzYW^>Y`rY!U73MX}6ZEIu7+9a+qiMud~+xQQ0o0D|glXSb1xT})5 z8@#;Wsg;+Pdj_5;O}WqJ1+(jqEELgU3pi5_dv~8x9`o)_raYO%J@XH7&nM|#O47ZW z#J!!wo$%yN`P7peP6=mAt}?=cJS}cSl5T90ZekLbpTtcK&lG-T;ki=EgW<&%ip~hH zkl5AUbC7VYH;RXw!_v>gZDHx>r^R(9>9!>4b|i5coscU7>Np9iFa=r z8GvRbaRbnN&k{xkpruLN0JJ6|kp&Njn^KjA89u#>o3B8hpj(SjZbL1^gh6hECd$ExZBA!YE9J6iqi{(+Js)`fJn-~);OSemD%xn@DMbg;Rwucv zO+pvO4@Nf|sgHo=CyE!EY*G&l^?RN<7|ICNA z0Vj{7l*0Wtc7Nr22=H%xZxaXn6rGMke8|Pyc5+kt9|h*qep;!d`a$3SS^p7sf$8tV z9$`d30?(3keuv!tztH-llaDgyXY4-B?tgG>zwbiGT0pQb&zXN6g!}aWvjl_PDO!EVFf5rIEh*A|2te{VDPcZ&0a^087HHtA=M49R* z*msigjB$Tr;XbV4NEt`4`+IiJW_K~U*kcK4eGfC{FuCSYa#NQw<{-NlvD?9JK9ySE zfgMhjM!yBmFu~>_!n->dzg15H+{l!vq(!QfD9tE>^%;!MA>GB^D@dhAaH^e@O8tej z%dH`dx}V)l!kga`Won3A_g|PpJ4<1?<_~?NK@%gq*~78F@XZB>T}*R5V}@|-r{t!@ z$;FN{M1PW8b&TPi3^)3I4NScm0{0sXUuv)nL+?xNVVBmj?Mub_6Z00;iT;GjVn(I{ zZ?f3UW&DS!-$3k#smO`m$e4Xx1N*2pbS3o^UFpNhJHY5i<{FZ&=MXoQ$+2xI6M=!9 zg4@oN9Za*+_Xl9Ma=qfe?~NF zL@Ihc&f7(-ir6-#vZzdw0vG&EggKwXWzV5huxsBzs_zpYHIh>4D8qSFE|tkV*D)s3 z;z=&*4U}jLD*H&n>z(8R1D<*(*(fuP+uHWKeGF%DN!vLmM>zjSxGdb?&3_QAuVlIJ zaJyW|wRacGeTO)xp)Bi4mO>+{Qtyx~MROsv4yQfAX-9JzPml{d)z1l{)MqodBg}{E zR?X*9e@GgocXI20$gQ)J>J55Dt+SI`=fl*`2qrB89%Tni+I50k>QRznrm&R7oWqd} zujE`EW6G7(g6bHz!b;B7G0y+{T$V?<7q8~ByzBcFIM3(&e>)YcEcLggj6Z~wYlx@0 zjCi6iP)^#V)YOhAxOCs;+WP^eGTB_)cQgETcK0&|<1k`(5UfU}JODnoa;lZ=Hc+g- zpW*K_yqRD#lHnPQpTY1#h8GfSf=m-6*qO}u#oRY{q_lxsoZVZN&3G=Lm0( zGJKR_%`lJk`ZDHoMe1e9;k$ho!`())dK*#d0J|?R<^_ty4$~C7hB<`U&F8c{#_8X2 z?C)60_Zj9Hi2gJ4d6zNoGJF-oG#iE8X7_A%ze9LaYF)2!f+3}TwZq?r<%q*uVs8ITlLl47Pe2h3^!S~Zzo#heTMI0_fFC)J&)n@ zt;@2~2{!4>`Rk159;Cldu*#${QT>JCzc9_mY)?LBO~_{YD@m4KPp~;?U8a1BW1nIv zL5AzCOBiLx+_g-BksT%u9G@qLqAg3Y6(UC>_iHNY5uu>zd%Q&?gV z^IS|c7%u|gu!!2le4kUXZkyk7T5eN)>&d4o?N|v^Y%Tae}MTsz_Mm? zS#aM08pdnJ>uY_O&**Cj?+XyUFF-JMx04!kb>U2~~tQRm{JcMmo(kgOU>b7;|`xbAo*U zfmy`bzKij@SZ*QXd3LQYWBg^DhY;s5$~1O1{ws$0K0;qfuyHvjF7w~ZdH9s@?kd8& zt0?DYJLhma=X?Tl*vk_4GKaw|@e|JN9CptpZaAfq>hojfNqf;NJ%an}O-z3iORS=@ z7|ye~j4?b4=npuRotM7F`0JT6lXH^Ea{odjg&EG6;Y4q?kS#T5aC^PTQeNbmU&hjx z^`#>ZpECYa=DC&eTUpkh8UJUd-_7{leHq|3f$(Mm(?7`g2bumiO#d6kU&8oHIEPO% z{gZ?@lL&7nG5tQa^Oc;peLMzLaxcDy>964uUB>j>c9^M>Wmv%Ua~Pk(79fS|e-5YJ z!k8_b_6)|H!LiNEUlT@i|I+7jZqMb|p`6>Htmor-CiXpFH}W~2xs7LYVhbPY05Jq#(RX<~{U~VIco4$hcFw)|=CtksvM{!Z}@6!7TueoRGD#kZ6eKV)! zcF|iIvz0M<+*8hDDYp>b+(H<03uAcBW^QG;lG~z^Q(ey-u4f&X#kD$%^ZXa)z@wGf z!Sp+b-W^4Fd`m-ps+aNfYy>*Y^usMr=5sy6Z!-Tk8U8Wj*>dW2jOV*Q#ZMme`;2*? zOU=&#^ky#gKEA)G~|4({M^AEYZ8?qKN)Sb7J~{}zP{t>+0n^4i+%y%b9Zl-w_uuhs(JXmlJFXxa|s<&*j`kmot2V z-6nQFWIj8YPn`K5Vg7N(9}zs=cgLCk5$1n{`Nx@mocSDK{zn+L&pj41Jd*K?ncGO> zrWbQGBq^=@aM;6`J&d`9(;7}|m|L3J zgS2B9b1v~we`WZu6ssDT^GN34SeNmYoLfI*uCgxkze+=*GoCTKt;_f;S#Abl@O>X~ z&LB#4gfT}LQ^m4IbE@^$<+N>-R<|;yl`*X>m+{SJ5%41j zqfT0v@aiP-!I(m=Q^lBch36H{SjKF&E_0}%_QE+kMCr3G)1S-rFq|=OSeNj=Rqo@^ z-Wdw6bIgZa>6rEfabEc&KXO{H%- z)eQQkQ!RET;jDv3y$~lFwBZbc?KqEM56&F80p|=H#90Cl;Ix28a6-V7I2GVU?Ck$4 zcKbiBS7A^8k94j29DDa?V1NDz*n__iyXeo<6;7ZIyI|;p4GkMM>U-FIi`_@qeTv;z z=&N}>t{EE%>*w2A*VXAj8$KP^xwIdME@U^#ZV9`y*sWl9KD$fVUB&Ji`s!TQcMu0` z?AO??+cy&2O?#W@2e9`=gx#p#M*Cpsop9rNch{!+F1@D<8>s5*x{3Zq`n(*wQPI;pdlE}iS{EuXz2;665w;N#flBj6jiXvxBWZ!UH- z3HUZITe2wN!_#kSiPQjp+pALUvthH=aS88Y`*QO22i7;QO8i~c*C)jP2w&F{-HSqh zSJG$x8s80ae7*I36804eeyRA-I;LAF{(SL!#V@tK5BK~;=bI&dqsS{0Iy@O>KD#Ae z%BeFrpIYyQ;h`LBoH}rqK=4fp|6{X*8M-wVpRC2_}X%Mv_m21@11i) zx%eXWKROjhx$mhzLnm@w%*5Pxv=}C=XcqD=Uatbc0xC(b?Ah&r*N%Ch%ol- zwaE12<2Qwq$Tf;o#Z#lYN_#AsihlZLNXAH?|zKg9_Phw%;TL!bj!_bue}W0Z;b zqn-w7XApMvZ%3{+WB2|Y?k;z?i}}u=g*cDxYWF&Kzk9EHvwNF+yL*TGfO{8z{Z9Hp zdic-i(idBC@ITS!*f~Hrr~ebw1G<;-Pf!o=9`b*p9`=8t&ip@75B~?$+T898!#l%f zx5ZqH6OC|U7@Y)Tw$Mp1W~AqeBti-kDBq6O!soMqC6b4#}1jFQW- zZ^K^nj9YNV$esAA`vLUSBRD1GS)2&+GEVU#w$u)FJ>#=+@>m6S z?Lb~oYqWYH8)5RJgmvq2HR5W<)q?9nTy40()$TO{S|3g$`-Ahk^QQCPoabD33i6D7 zNO0k<%H51>3$AUrw&S95Vip8TwF~ZExMUCLG_&_{%F}x$f$*t&aM-;y=wy~5h*3_O z^Aye^d&T)3&KY}O#T3?z;E(GET3?M>D#FmL=`fa5lN^?K!VU(HVSIku=|{5w&Qqg# z1)cEr_b3)5PhMN@(3xwv190d(x2tiU(_Wl@_Krj6mc8eE;C$%(87F}?tIg^Fov($n zkA9AGfZ}F9@`zJf;NqMXxGkt#jni7zW0o_<{2aY(zxf{A!>C7;&aHqu%B_TZ1~f*a z&(4862BVC|-N!t*XS(y@j>9Rf8uwG!1Hzer(o;<=fg5p`!i~D;z>T@s6#{3_EQgzL zSHPX>u7o=cyQyfLNpmjT>8MFc3%N)OxkwASNDH}03%N)OxkwASNDH}03%N+U2)o+w zX+mh(OK=WO1ZUhV#Tc35bVF;SIPc~h_dJ9);e4DJ&c0dZuEAaEG@O+ahecTKo{vxo z&do{SOq><&T8zS5aE8uQycbyMUVymiI8SF9&dOPZ{+^;|pdXZ=Kb-55p zeOl(={tYo?foNVvC-gd?&=)s$x1a@_i?P=}Jk{D=*M@U)Y2Gpd_asz recommendFood(); +// +// @GET("products/enable?pageNo=0&pageSize=10&sortBy=createdTime&sortDir=desc") +// Call recentFood(); +// +// @GET("shops/enable?pageNo=0&pageSize=10&sortBy=id&sortDir=asc") +// Call allShops(); +// +// @GET("products/search/{name}") +// Call searchFoodByName(@Path("name") String name, @Query("pageNo") int pageNo, @Query("pageSize") int pageSize, @Query("sortBy") String sortBy, @Query("sortDir") String sortDir); +// +// @GET("products") +// Call listFood(@Query("pageNo") int pageNo, @Query("pageSize") int pageSize, @Query("sortBy") String sortBy, @Query("sortDir") String sortDir); +// +// @GET("categories/randoms?pageNo=0&pageSize=7") +// Call listCategory(); +// +// @GET("products/categories") +// Call listFoodByCategory(@Query("id") List id, @Query("pageNo") int pageNo, @Query("pageSize") int pageSize, @Query("sortBy") String sortBy, @Query("sortDir") String sortDir); +// +// @GET("products/categoriesAndName") +// Call listFoodByCategoriesAndName(@Query("id") List id, @Query("name") String name, @Query("pageNo") int pageNo, @Query("pageSize") int pageSize, @Query("sortBy") String sortBy, @Query("sortDir") String sortDir); +// +// @GET("products/{id}") +// Call detailFood(@Path("id") String id); +// +// @GET("shops/{id}") +// Call detailShop(@Path("id") int id); +// +// @GET("products/shops/{id}") +// Call listFoodByShopId(@Path("id") int id, @Query("pageNo") int pageNo, @Query("pageSize") int pageSize, @Query("sortBy") String sortBy, @Query("sortDir") String sortDir); +// +// @GET("districts/{districtId}/wards") +// Call> wardResponse(@Path("districtId") int district_id); +// +// @GET("districts") +// Call> districtResponse(); +// +// @GET("sliders") +// Call> listSlider(); +// +// @Headers({"accept: */*", "Content-Type: application/json"}) +// @POST("auth/signup") +// Call register(@Body User user); +// +// @POST("auth/check") +// Call checkEmailOrPhoneExist (@Body User user); +// +// @GET("products/{productId}/comments") +// Call getCommentByProductId(@Path("productId") int productId, @Query("pageNo") int pageNo, @Query("pageSize") int pageSize, @Query("sortBy") String sortBy, @Query("sortDir") String sortDir); +// +// @GET("products/{productId}/users/{userId}") +// Call getUserComment(@Path("productId") int productId, @Path("userId") int userId); +// +// @GET("shops/{id}") +// Call getShopById(@Path("id") int id); +// +// @GET("products/{productId}/user") +// Call checkUserBuyProduct(@Path("productId") int productId, @Query("userId") int userId); +} diff --git a/app/src/main/java/com/capstone/foodify/shipper/API/FoodApiToken.java b/app/src/main/java/com/capstone/foodify/shipper/API/FoodApiToken.java new file mode 100644 index 0000000..2d9c7bc --- /dev/null +++ b/app/src/main/java/com/capstone/foodify/shipper/API/FoodApiToken.java @@ -0,0 +1,89 @@ +package com.capstone.foodify.shipper.API; + +import androidx.annotation.NonNull; + +import com.capstone.foodify.shipper.Common; +import com.capstone.foodify.shipper.Model.User; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import java.io.IOException; + +import okhttp3.Interceptor; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import retrofit2.Call; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; +import retrofit2.http.GET; +import retrofit2.http.Path; + +public interface FoodApiToken { + Gson gson = new GsonBuilder().setDateFormat("HH:mm:ss dd-MM-yyyy").setLenient().create(); + + OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new Interceptor() { + @NonNull + @Override + public Response intercept(@NonNull Chain chain) throws IOException { + Request newRequest = chain.request().newBuilder().addHeader("Authorization", "Bearer " + Common.TOKEN).build(); + return chain.proceed(newRequest); + } + }).build(); + + + FoodApiToken apiService = new Retrofit.Builder() + .client(client) + .baseUrl("http://192.168.1.183:8080/api/").addConverterFactory(GsonConverterFactory.create(gson)) + .build() + .create(FoodApiToken.class); + + +// @POST("users/{userId}/loves/{productId}") +// Call addFoodToFavorite(@Path("userId") int userId, @Path("productId") int productId); +// +// @DELETE("users/{userId}/loves/{productId}") +// Call removeFoodFromFavorite(@Path("userId") int userId, @Path("productId") int productId); + + @GET("users/email/{userEmail}") + Call getUserFromEmail(@Path("userEmail") String userEmail); + +// @GET("users/{userId}/loves") +// Call getListFavoriteFood(@Path("userId") int userId, @Query("pageNo") int pageNo, @Query("pageSize") int pageSize, @Query("sortBy") String sortBy, @Query("sortDir") String sortDir); +// +// @PUT("users/{userId}") +// Call updateUser(@Path("userId") int userId, @Body User user); +// +// @GET("users/{userId}/loves/{productId}") +// Call checkFoodIsFavorite(@Path("userId") int userId, @Path("productId") int productId); +// +// @POST("users/{userId}/addresses") +// Call createAddressUser(@Path("userId") int userId, @Body Address address); +// +// @PUT("users/{userId}/addresses/{addressId}") +// Call editAddressUser(@Path("userId") int userId, @Path("addressId") int addressId, @Body Address address); +// +// @DELETE("users/{userId}/addresses/{addressId}") +// Call deleteAddressUser(@Path("userId") int userId, @Path("addressId") int addressId); +// +// @POST("users/{userId}/orders") +// Call createOrder(@Path("userId") int userId, @Body Order order); +// +// @POST("products/{productId}/comments") +// Call createComment(@Path("productId") int productId, @Body Comment comment); +// +// @DELETE("products/{productId}/comments/{commentId}") +// Call deleteComment(@Path("productId") int productId, @Path("commentId") int commentId); +// +// @PUT("products/{productId}/comments/{commentId}") +// Call updateComment(@Path("productId") int productId, @Path("commentId") int commentId, @Body Comment comment); +// +// @GET("users/{userId}/orders/status/{status}") +// Call getOrderUser(@Path("userId") int userId, @Path("status") String status, @Query("pageNo") int pageNo, @Query("pageSize") int pageSize, @Query("sortBy") String sortBy, @Query("sortDir") String sortDir); +// +// @DELETE("users/{userId}/orders/{orderId}") +// Call deleteOrder(@Path("userId") int userId, @Path("orderId") int orderId); +// +// @PUT("users/{userId}/orders/{orderId}/status") +// Call updateOrderStatus(@Path("userId") int userId, @Path("orderId") int orderId, @Query("status") String status); +} diff --git a/app/src/main/java/com/capstone/foodify/shipper/API/GoogleMapApi.java b/app/src/main/java/com/capstone/foodify/shipper/API/GoogleMapApi.java new file mode 100644 index 0000000..4e3dc89 --- /dev/null +++ b/app/src/main/java/com/capstone/foodify/shipper/API/GoogleMapApi.java @@ -0,0 +1,27 @@ +package com.capstone.foodify.shipper.API; + +import com.capstone.foodify.shipper.Model.GoogleMap.GoogleMapResponse; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import retrofit2.Call; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface GoogleMapApi { + + Gson gson = new GsonBuilder().setDateFormat("HH:mm:ss dd-MM-yyyy").setLenient().create(); + + GoogleMapApi apiService = new Retrofit.Builder() + .baseUrl("https://maps.googleapis.com/").addConverterFactory(GsonConverterFactory.create(gson)) + .build() + .create(GoogleMapApi.class); + + @GET("maps/api/geocode/json") + Call getGeoCode(@Query("address") String address, @Query("key") String key); + + @GET("maps/api/geocode/json") + Call getAddress(@Query("latlng") String LatLng, @Query("key") String key); +} diff --git a/app/src/main/java/com/capstone/foodify/shipper/Activity/ChangePasswordActivity.java b/app/src/main/java/com/capstone/foodify/shipper/Activity/ChangePasswordActivity.java new file mode 100644 index 0000000..810874f --- /dev/null +++ b/app/src/main/java/com/capstone/foodify/shipper/Activity/ChangePasswordActivity.java @@ -0,0 +1,16 @@ +package com.capstone.foodify.shipper.Activity; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; + +import com.capstone.foodify.shipper.R; + +public class ChangePasswordActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_change_password); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/capstone/foodify/shipper/Activity/MainActivity.java b/app/src/main/java/com/capstone/foodify/shipper/Activity/MainActivity.java index 9a18d84..29ef096 100644 --- a/app/src/main/java/com/capstone/foodify/shipper/Activity/MainActivity.java +++ b/app/src/main/java/com/capstone/foodify/shipper/Activity/MainActivity.java @@ -45,10 +45,10 @@ public class MainActivity extends AppCompatActivity { int id = item.getItemId(); switch (id) { case R.id.activity_order: - viewPager2.setCurrentItem(0); + viewPager2.setCurrentItem(0, false); break; case R.id.activity_profile: - viewPager2.setCurrentItem(1); + viewPager2.setCurrentItem(1, false); break; } return false; diff --git a/app/src/main/java/com/capstone/foodify/shipper/Activity/OrderDetailActivity.java b/app/src/main/java/com/capstone/foodify/shipper/Activity/OrderDetailActivity.java index c2ab468..8a86a8e 100644 --- a/app/src/main/java/com/capstone/foodify/shipper/Activity/OrderDetailActivity.java +++ b/app/src/main/java/com/capstone/foodify/shipper/Activity/OrderDetailActivity.java @@ -2,15 +2,35 @@ package com.capstone.foodify.shipper.Activity; import androidx.appcompat.app.AppCompatActivity; +import android.content.Intent; +import android.net.Uri; import android.os.Bundle; +import android.view.View; +import android.widget.Button; import com.capstone.foodify.shipper.R; public class OrderDetailActivity extends AppCompatActivity { + Button btn_shipping; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_order_detail); + + btn_shipping = findViewById(R.id.btn_shipping); + + btn_shipping.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(Intent.ACTION_VIEW, + Uri.parse("google.navigation:q=16.0230,108.2498&mode=l")); + intent.setPackage("com.google.android.apps.maps"); + startActivity(intent); + } + }); + + + } } \ No newline at end of file diff --git a/app/src/main/java/com/capstone/foodify/shipper/Activity/SignInActivity.java b/app/src/main/java/com/capstone/foodify/shipper/Activity/SignInActivity.java index 715a3c7..f292771 100644 --- a/app/src/main/java/com/capstone/foodify/shipper/Activity/SignInActivity.java +++ b/app/src/main/java/com/capstone/foodify/shipper/Activity/SignInActivity.java @@ -1,35 +1,303 @@ package com.capstone.foodify.shipper.Activity; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.app.AppCompatDelegate; -import androidx.core.splashscreen.SplashScreen; - import android.content.Intent; import android.os.Bundle; +import android.text.Editable; +import android.text.TextWatcher; import android.view.View; import android.widget.Button; +import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.core.splashscreen.SplashScreen; + +import com.capstone.foodify.shipper.API.FoodApiToken; +import com.capstone.foodify.shipper.Common; +import com.capstone.foodify.shipper.Model.User; import com.capstone.foodify.shipper.R; +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; +import com.google.android.material.button.MaterialButton; +import com.google.android.material.textfield.TextInputEditText; +import com.google.android.material.textfield.TextInputLayout; +import com.google.firebase.FirebaseApp; +import com.google.firebase.auth.AuthResult; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.auth.GetTokenResult; +import com.google.firebase.auth.SignInMethodQueryResult; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; public class SignInActivity extends AppCompatActivity { - Button btn_sign_in; + private FirebaseAuth mAuth; + TextInputLayout textInput_email, textInput_password; + TextInputEditText edt_email, edt_password; + ConstraintLayout progressLayout; + String email, password = null; + MaterialButton btn_sign_in; + private FirebaseUser user; + + @Override + public void onStart() { + super.onStart(); + + //Get user from Paper +// user = Paper.book().read("user"); + + // Check if user is signed in (non-null) and update UI accordingly. + user = mAuth.getCurrentUser(); + + if (user != null && Common.CURRENT_USER == null) { + progressLayout.setVisibility(View.VISIBLE); + user.getIdToken(true) + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + Common.TOKEN = task.getResult().getToken(); + + //Get user from database + FoodApiToken.apiService.getUserFromEmail(user.getEmail()).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + User userData = response.body(); + if (userData != null) { + Common.CURRENT_USER = userData; + startActivity(new Intent(SignInActivity.this, MainActivity.class)); + + progressLayout.setVisibility(View.GONE); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + } + }); + } else { + Toast.makeText(SignInActivity.this, "Error when taking token!", Toast.LENGTH_SHORT).show(); + } + } + }); + } + } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SplashScreen.installSplashScreen(this); AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); + + //Init firebase app + FirebaseApp.initializeApp(SignInActivity.this); setContentView(R.layout.activity_sign_in); + // Initialize Firebase Auth + mAuth = FirebaseAuth.getInstance(); + //Init Component - btn_sign_in = findViewById(R.id.btn_sign_in); + initComponent(); + setFontUI(); + + if(Common.CURRENT_USER != null) + startActivity(new Intent(this, MainActivity.class)); btn_sign_in.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - startActivity(new Intent(SignInActivity.this, MainActivity.class)); + initData(); + + if(validData()){ + signIn(); + } + } + }); + + + edt_password.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + textInput_password.setErrorEnabled(false); + } + + @Override + public void afterTextChanged(Editable s) { + } }); } + + private void signIn(){ + progressLayout.setVisibility(View.VISIBLE); + + mAuth.setLanguageCode("vi"); + + mAuth.fetchSignInMethodsForEmail(email) + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + + boolean isNewUser = task.getResult().getSignInMethods().isEmpty(); + + if (isNewUser) { + Toast.makeText(SignInActivity.this, "Tài khoản chưa được đăng ký! Vui lòng đăng ký để tiếp tục sử dụng!", Toast.LENGTH_SHORT).show(); + progressLayout.setVisibility(View.GONE); + } else { + signInMethod(); + } + + } + }); + } + + private void signInMethod(){ + mAuth.signInWithEmailAndPassword(email, password) + .addOnCompleteListener(SignInActivity.this, new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + // Sign in success, update UI with the signed-in user's information + FirebaseUser user = mAuth.getCurrentUser(); + + //Save user +// Paper.book().write("user", user); + + user.getIdToken(true) + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if(task.isSuccessful()){ + Common.TOKEN = task.getResult().getToken(); + + //Get user from database + FoodApiToken.apiService.getUserFromEmail(user.getEmail()).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if(response.code() == 200){ + + User userData = response.body(); + if(userData != null){ + + //Check user is lock or not + if(!userData.isLocked()){ + + //Check role account + if(userData.getRole().getRoleName().equals("ROLE_USER")){ + Common.CURRENT_USER = userData; + + //Dismiss progress bar + progressLayout.setVisibility(View.GONE); + + startActivity(new Intent(SignInActivity.this, MainActivity.class)); + finish(); + } else { + Toast.makeText(SignInActivity.this, "Tài khoản không hợp lệ! Vui lòng kiểm tra lại!", Toast.LENGTH_SHORT).show(); + FirebaseAuth.getInstance().signOut(); + + //Dismiss progress bar + progressLayout.setVisibility(View.GONE); + } + } else { + Toast.makeText(SignInActivity.this, "Tài khoản của bạn đã bị khoá!", Toast.LENGTH_SHORT).show(); + FirebaseAuth.getInstance().signOut(); + + //Dismiss progress bar + progressLayout.setVisibility(View.GONE); + } + } + } + } + + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("ERROR: " + t); + Common.showErrorServerNotification(SignInActivity.this, "Không thể đăng nhập tài khoản! Vui lòng thử lại sau!"); + } + }); + } else { + Toast.makeText(SignInActivity.this, "Error when taking token!", Toast.LENGTH_SHORT).show(); + } + } + }); + } else { + // If sign in fails, display a message to the user. + Toast.makeText(SignInActivity.this, "Thông tin đăng nhập không đúng! Vui lòng kiểm tra và thử lại!", + Toast.LENGTH_SHORT).show(); + + //Dismiss progress bar + progressLayout.setVisibility(View.GONE); + } + } + }); + } + + private void initData(){ + email = edt_email.getText().toString(); + password = edt_password.getText().toString(); + } + + private void initComponent(){ + btn_sign_in = findViewById(R.id.sign_in_button); + textInput_email = findViewById(R.id.textInput_email); + textInput_password = findViewById(R.id.textInput_password); + + edt_email = findViewById(R.id.edt_email); + edt_password = findViewById(R.id.edt_password); + + progressLayout = findViewById(R.id.progress_layout); + + } + + private void setFontUI() { + textInput_email.setTypeface(Common.setFontBebas(getAssets())); + textInput_password.setTypeface(Common.setFontBebas(getAssets())); + } + + private boolean validData(){ + boolean dataHasValidate = true; + + //Check phone number + if(email.isEmpty()){ + textInput_email.setError("Email không được bỏ trống!"); + dataHasValidate = false; + } else { + + //Check email valid + Pattern patternEmail = Pattern.compile(Common.VALID_EMAIL_ADDRESS_REGEX, Pattern.CASE_INSENSITIVE); + Matcher matcherEmail = patternEmail.matcher(email); + if(!matcherEmail.matches()){ + textInput_email.setError("Địa chỉ email không đúng định dạng. Xin vui lòng kiểm tra lại!"); + dataHasValidate = false; + } else { + textInput_email.setErrorEnabled(false); + } + } + + //Check password + Pattern patternPassword = Pattern.compile(Common.PASSWORD_PATTERN); + Matcher matcherPassword = patternPassword.matcher(edt_password.getText().toString()); + + if(!matcherPassword.matches() || edt_password.getText().toString().length() < 8) { + textInput_password.setError("Mật khẩu của bạn cần tối thiểu có 8 ký tự, 1 ký tự viết hoa, 1 số và 1 ký tự đặc biệt!"); + dataHasValidate = false; + } else { + textInput_password.setErrorEnabled(false); + } + + return dataHasValidate; + } } \ No newline at end of file diff --git a/app/src/main/java/com/capstone/foodify/shipper/Common.java b/app/src/main/java/com/capstone/foodify/shipper/Common.java new file mode 100644 index 0000000..618418d --- /dev/null +++ b/app/src/main/java/com/capstone/foodify/shipper/Common.java @@ -0,0 +1,51 @@ +package com.capstone.foodify.shipper; + +import android.app.Activity; +import android.content.res.AssetManager; +import android.graphics.Typeface; +import android.location.Location; + +import androidx.annotation.NonNull; + +import com.capstone.foodify.shipper.Model.User; +import com.thecode.aestheticdialogs.AestheticDialog; +import com.thecode.aestheticdialogs.DialogStyle; +import com.thecode.aestheticdialogs.DialogType; +import com.thecode.aestheticdialogs.OnDialogClickListener; + +public class Common { + public static User CURRENT_USER = null; + public static String TOKEN = null; + public static Location CURRENT_LOCATION = null; + public static final String MAP_API = "AIzaSyAY14Ic32UP26Hg6GILznOfbBihiY5BUxw"; + public static final String IS_FORGOT_PASSWORD = "isForgotPassword"; + public static final String FORMAT_DATE="dd-MM-yyyy"; + public static final String VALID_EMAIL_ADDRESS_REGEX = "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$"; + public static final String PHONE_CODE = "+84"; + public static final String PASSWORD_PATTERN = "^(?=.*[0-9])(?=.*[A-Z])(?=.*[@#$%^&+=!_])(?=\\S+$).{4,}$"; + public static final String PHONE_PATTERN = "^0[98753]{1}\\d{8}$"; + + public static Typeface setFontBebas(AssetManager assetManager){ + return Typeface.createFromAsset(assetManager, "font/bebas.ttf"); + } + + public static Typeface setFontOpenSans(AssetManager assetManager){ + return Typeface.createFromAsset(assetManager, "font/opensans.ttf"); + } + + public static void showErrorServerNotification(Activity activity, String message){ + new AestheticDialog.Builder(activity, DialogStyle.RAINBOW, DialogType.ERROR) + .setTitle("LỖI!") + .setMessage(message) + .setCancelable(false) + .setOnClickListener(new OnDialogClickListener() { + @Override + public void onClick(@NonNull AestheticDialog.Builder builder) { + + activity.finishAffinity(); + System.exit(0); + } + }).show(); + } + +} diff --git a/app/src/main/java/com/capstone/foodify/shipper/Fragment/ProfileFragment.java b/app/src/main/java/com/capstone/foodify/shipper/Fragment/ProfileFragment.java index c99bccf..594a842 100644 --- a/app/src/main/java/com/capstone/foodify/shipper/Fragment/ProfileFragment.java +++ b/app/src/main/java/com/capstone/foodify/shipper/Fragment/ProfileFragment.java @@ -1,21 +1,75 @@ package com.capstone.foodify.shipper.Fragment; +import android.content.Intent; +import android.net.Uri; import android.os.Bundle; +import androidx.constraintlayout.widget.ConstraintLayout; import androidx.fragment.app.Fragment; +import android.os.CountDownTimer; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; +import com.capstone.foodify.shipper.Activity.ChangePasswordActivity; +import com.capstone.foodify.shipper.Common; import com.capstone.foodify.shipper.R; +import com.google.android.material.textfield.TextInputLayout; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.storage.FirebaseStorage; +import com.google.firebase.storage.StorageReference; +import com.makeramen.roundedimageview.RoundedImageView; + +import java.util.Calendar; public class ProfileFragment extends Fragment { + private static final String FOLDER_DIRECTORY = "UserImages/"; + TextView txt_countdown, txt_resend_code, txt_verify_email; + EditText edt_birthday, edt_phone, edt_fullName; + Button update_image_button; + RoundedImageView profile_avatar; + private Uri imageUri; + final private StorageReference storageReference = FirebaseStorage.getInstance().getReference(); + ConstraintLayout progressLayout; + LinearLayout changePasswordLayout; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_profile, container, false); + View view = inflater.inflate(R.layout.fragment_profile, container, false); + + //Init component + initComponent(view); + initData(); + + //Set event for change password layout + changePasswordLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + startActivity(new Intent(getContext(), ChangePasswordActivity.class)); + } + }); + + return view; + } + + private void initData(){ + edt_phone.setText(Common.CURRENT_USER.getPhoneNumber()); + edt_birthday.setText(Common.CURRENT_USER.getDateOfBirth()); + edt_fullName.setText(Common.CURRENT_USER.getFullName()); + } + private void initComponent(View view){ + changePasswordLayout = view.findViewById(R.id.change_password); + edt_phone = view.findViewById(R.id.edt_phone); + edt_birthday = view.findViewById(R.id.edt_birthDay); + edt_fullName = view.findViewById(R.id.edt_fullName); } } \ No newline at end of file diff --git a/app/src/main/java/com/capstone/foodify/shipper/Model/Address.java b/app/src/main/java/com/capstone/foodify/shipper/Model/Address.java new file mode 100644 index 0000000..26094e9 --- /dev/null +++ b/app/src/main/java/com/capstone/foodify/shipper/Model/Address.java @@ -0,0 +1,50 @@ +package com.capstone.foodify.shipper.Model; + +import java.io.Serializable; + +public class Address implements Serializable{ + private int id; + private String address; + private String ward; + private String district; + + public Address(String address, String ward, String district) { + this.address = address; + this.ward = ward; + this.district = district; + } + + public Address(){} + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getWard() { + return ward; + } + + public void setWard(String ward) { + this.ward = ward; + } + + public String getDistrict() { + return district; + } + + public void setDistrict(String district) { + this.district = district; + } +} diff --git a/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/AddressComponent.java b/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/AddressComponent.java new file mode 100644 index 0000000..1443496 --- /dev/null +++ b/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/AddressComponent.java @@ -0,0 +1,45 @@ + +package com.capstone.foodify.shipper.Model.GoogleMap; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class AddressComponent { + + @SerializedName("long_name") + @Expose + private String longName; + @SerializedName("short_name") + @Expose + private String shortName; + @SerializedName("types") + @Expose + private List types; + + public String getLongName() { + return longName; + } + + public void setLongName(String longName) { + this.longName = longName; + } + + public String getShortName() { + return shortName; + } + + public void setShortName(String shortName) { + this.shortName = shortName; + } + + public List getTypes() { + return types; + } + + public void setTypes(List types) { + this.types = types; + } + +} diff --git a/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Geometry.java b/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Geometry.java new file mode 100644 index 0000000..7830087 --- /dev/null +++ b/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Geometry.java @@ -0,0 +1,43 @@ + +package com.capstone.foodify.shipper.Model.GoogleMap; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class Geometry { + + @SerializedName("location") + @Expose + private Location location; + @SerializedName("location_type") + @Expose + private String locationType; + @SerializedName("viewport") + @Expose + private Viewport viewport; + + public Location getLocation() { + return location; + } + + public void setLocation(Location location) { + this.location = location; + } + + public String getLocationType() { + return locationType; + } + + public void setLocationType(String locationType) { + this.locationType = locationType; + } + + public Viewport getViewport() { + return viewport; + } + + public void setViewport(Viewport viewport) { + this.viewport = viewport; + } + +} diff --git a/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/GoogleMapResponse.java b/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/GoogleMapResponse.java new file mode 100644 index 0000000..fcea4f6 --- /dev/null +++ b/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/GoogleMapResponse.java @@ -0,0 +1,34 @@ + +package com.capstone.foodify.shipper.Model.GoogleMap; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class GoogleMapResponse { + + @SerializedName("results") + @Expose + private List results; + @SerializedName("status") + @Expose + private String status; + + public List getResults() { + return results; + } + + public void setResults(List results) { + this.results = results; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + +} diff --git a/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Location.java b/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Location.java new file mode 100644 index 0000000..e042d7f --- /dev/null +++ b/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Location.java @@ -0,0 +1,32 @@ + +package com.capstone.foodify.shipper.Model.GoogleMap; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class Location { + + @SerializedName("lat") + @Expose + private Double lat; + @SerializedName("lng") + @Expose + private Double lng; + + public Double getLat() { + return lat; + } + + public void setLat(Double lat) { + this.lat = lat; + } + + public Double getLng() { + return lng; + } + + public void setLng(Double lng) { + this.lng = lng; + } + +} diff --git a/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Northeast.java b/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Northeast.java new file mode 100644 index 0000000..e11075c --- /dev/null +++ b/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Northeast.java @@ -0,0 +1,32 @@ + +package com.capstone.foodify.shipper.Model.GoogleMap; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class Northeast { + + @SerializedName("lat") + @Expose + private Double lat; + @SerializedName("lng") + @Expose + private Double lng; + + public Double getLat() { + return lat; + } + + public void setLat(Double lat) { + this.lat = lat; + } + + public Double getLng() { + return lng; + } + + public void setLng(Double lng) { + this.lng = lng; + } + +} diff --git a/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Result.java b/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Result.java new file mode 100644 index 0000000..abd1185 --- /dev/null +++ b/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Result.java @@ -0,0 +1,67 @@ + +package com.capstone.foodify.shipper.Model.GoogleMap; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class Result { + + @SerializedName("address_components") + @Expose + private List addressComponents; + @SerializedName("formatted_address") + @Expose + private String formattedAddress; + @SerializedName("geometry") + @Expose + private Geometry geometry; + @SerializedName("place_id") + @Expose + private String placeId; + @SerializedName("types") + @Expose + private List types; + + public List getAddressComponents() { + return addressComponents; + } + + public void setAddressComponents(List addressComponents) { + this.addressComponents = addressComponents; + } + + public String getFormattedAddress() { + return formattedAddress; + } + + public void setFormattedAddress(String formattedAddress) { + this.formattedAddress = formattedAddress; + } + + public Geometry getGeometry() { + return geometry; + } + + public void setGeometry(Geometry geometry) { + this.geometry = geometry; + } + + public String getPlaceId() { + return placeId; + } + + public void setPlaceId(String placeId) { + this.placeId = placeId; + } + + public List getTypes() { + return types; + } + + public void setTypes(List types) { + this.types = types; + } + +} diff --git a/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Southwest.java b/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Southwest.java new file mode 100644 index 0000000..e1da185 --- /dev/null +++ b/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Southwest.java @@ -0,0 +1,32 @@ + +package com.capstone.foodify.shipper.Model.GoogleMap; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class Southwest { + + @SerializedName("lat") + @Expose + private Double lat; + @SerializedName("lng") + @Expose + private Double lng; + + public Double getLat() { + return lat; + } + + public void setLat(Double lat) { + this.lat = lat; + } + + public Double getLng() { + return lng; + } + + public void setLng(Double lng) { + this.lng = lng; + } + +} diff --git a/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Viewport.java b/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Viewport.java new file mode 100644 index 0000000..3c456c3 --- /dev/null +++ b/app/src/main/java/com/capstone/foodify/shipper/Model/GoogleMap/Viewport.java @@ -0,0 +1,32 @@ + +package com.capstone.foodify.shipper.Model.GoogleMap; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class Viewport { + + @SerializedName("northeast") + @Expose + private Northeast northeast; + @SerializedName("southwest") + @Expose + private Southwest southwest; + + public Northeast getNortheast() { + return northeast; + } + + public void setNortheast(Northeast northeast) { + this.northeast = northeast; + } + + public Southwest getSouthwest() { + return southwest; + } + + public void setSouthwest(Southwest southwest) { + this.southwest = southwest; + } + +} diff --git a/app/src/main/java/com/capstone/foodify/shipper/Model/Role.java b/app/src/main/java/com/capstone/foodify/shipper/Model/Role.java new file mode 100644 index 0000000..62dca05 --- /dev/null +++ b/app/src/main/java/com/capstone/foodify/shipper/Model/Role.java @@ -0,0 +1,22 @@ +package com.capstone.foodify.shipper.Model; + +public class Role { + private int id; + private String roleName; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getRoleName() { + return roleName; + } + + public void setRoleName(String roleName) { + this.roleName = roleName; + } +} diff --git a/app/src/main/java/com/capstone/foodify/shipper/Model/User.java b/app/src/main/java/com/capstone/foodify/shipper/Model/User.java new file mode 100644 index 0000000..9127c35 --- /dev/null +++ b/app/src/main/java/com/capstone/foodify/shipper/Model/User.java @@ -0,0 +1,140 @@ +package com.capstone.foodify.shipper.Model; + +import com.google.gson.annotations.SerializedName; + +import java.io.Serializable; +import java.util.List; + +public class User implements Serializable { + private int id; + @SerializedName("addressDto") + private Address address; + private String dateOfBirth; + private String email; + private String fullName; + private String identifiedCode; + private String imageUrl; + private boolean isLocked; + private String phoneNumber; + private String roleName; + private Role role; + private int defaultAddress; + private List
addresses; + + public User(Address address, String dateOfBirth, String email, String fullName, String identifiedCode, String phoneNumber) { + this.address = address; + this.dateOfBirth = dateOfBirth; + this.email = email; + this.fullName = fullName; + this.identifiedCode = identifiedCode; + this.imageUrl = ""; + this.phoneNumber = phoneNumber; + this.roleName = "ROLE_USER"; + this.isLocked = false; + } + + public User(){} + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public Address getAddress() { + return address; + } + + public void setAddress(Address address) { + this.address = address; + } + + public boolean isLocked() { + return isLocked; + } + + public void setLocked(boolean locked) { + isLocked = locked; + } + + public String getDateOfBirth() { + return dateOfBirth; + } + + public void setDateOfBirth(String dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + public String getIdentifiedCode() { + return identifiedCode; + } + + public void setIdentifiedCode(String identifiedCode) { + this.identifiedCode = identifiedCode; + } + + public String getImageUrl() { + return imageUrl; + } + + public void setImageUrl(String imageUrl) { + this.imageUrl = imageUrl; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getRoleName() { + return roleName; + } + + public void setRoleName(String roleName) { + this.roleName = roleName; + } + + public List
getAddresses() { + return addresses; + } + + public int getDefaultAddress() { + return defaultAddress; + } + + public void setDefaultAddress(int defaultAddress) { + this.defaultAddress = defaultAddress; + } + + public void setAddresses(List
addresses) { + this.addresses = addresses; + } + + public Role getRole() { + return role; + } + + public void setRole(Role role) { + this.role = role; + } +} diff --git a/app/src/main/res/layout/activity_change_password.xml b/app/src/main/res/layout/activity_change_password.xml new file mode 100644 index 0000000..1f08bc4 --- /dev/null +++ b/app/src/main/res/layout/activity_change_password.xml @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_sign_in.xml b/app/src/main/res/layout/activity_sign_in.xml index c2c95e2..e517f7f 100644 --- a/app/src/main/res/layout/activity_sign_in.xml +++ b/app/src/main/res/layout/activity_sign_in.xml @@ -119,7 +119,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_profile.xml b/app/src/main/res/layout/fragment_profile.xml index 2906dad..65bdb14 100644 --- a/app/src/main/res/layout/fragment_profile.xml +++ b/app/src/main/res/layout/fragment_profile.xml @@ -52,29 +52,6 @@ app:layout_constraintEnd_toEndOf="parent" /> - - - - - @@ -142,7 +120,7 @@ android:id="@+id/edt_birthDay" android:layout_width="match_parent" android:layout_height="match_parent" - android:clickable="false" + android:enabled="false" android:cursorVisible="false" android:focusable="false" android:focusableInTouchMode="false" @@ -157,9 +135,9 @@ android:layout_marginBottom="30dp" android:layout_marginStart="20dp" android:layout_marginEnd="20dp" - app:layout_constraintBottom_toTopOf="@id/updated_button" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toBottomOf="parent" android:orientation="horizontal" > @@ -194,22 +172,6 @@ - -