From b5a156dbdeb4d2c47c3eb60e6467069253792860 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Fern=C3=A1ndez=20Noriega?= Date: Mon, 8 Apr 2024 07:26:42 +0200 Subject: [PATCH] Updates --- images/playing_diagram.png | Bin 0 -> 38523 bytes index.html | 115 ++++++++++++++++++++++--------------- 2 files changed, 70 insertions(+), 45 deletions(-) create mode 100644 images/playing_diagram.png diff --git a/images/playing_diagram.png b/images/playing_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..b2dd672fb0d8f138febb69c213c95530d8e26c86 GIT binary patch literal 38523 zcmdSBby$>Z7cV?2As}L)hzO{NG$;y4ONY`Wl8ST+LpKOmC=wzKBAwDPlmaS9NOvfm zLpOYDFmdnqJ?H#!&iRhl<+a_z4D-Z&ul1|-Jd%|bBg8+Ak3b*@CB%j05r_k{2*iGe zgZtr?n+bC>@E>}l$StIfxrM!nt{xI0rfa5ac?YR`@9bUsvj#|{g%uYIi-pM@Go-bt z3A2v5sZD(iB?7Up(opdh^5^S_eeiqi!mZ_N&Awhgf@)C7xmMwR@VrgX(w(4=Ykj_% zSeFlvRv^Q_gp%4&oZZ=4eriu0cE-sG2)q|ItJSKdw0ZBg6abN1%9>qC-lMyI2ep0Jh^_*COl6Y_j^jrx=& z9`&T$(eVKGL`h<1^QGq%X#I!BkG5;;x(kW4BlAqR557;d)g$K$>6F&{tf%!jCX=XCqBDxp)(pYBKS-n{0Z z<)IZD-13P`*|qO|%;$qOu#O zPuV_qQstfF`7MpN_V44E7D%VYO`Yk!g>`?K9@1;kD&@3$(|y|a&L-9Aev$r*es6A| z7u}ZhJDqSuIi(UZk5(JKwQ*T=cuwBdLvxx!8MApeR!B3&Y-F7oEPdi zGD_EP+boyutTkw970A|6D8`>oPDq(>Nxsk)0;+^T0NI5Ml~@n)AwO#w5GVWb?Ix=;7$uUCKKVntC{R99__(e zE`|0B89A44tOz(ZZBJapyr1#&lYym~;#s=cc-x(5UPD*wC_X7`(?2Sw2Dcz^%XoDH*ab9_iDQb=7t5Wv5q$x#HFtF=oA z1VwUcDv#sx6yiX5Hp{_s2uvtIKSyU{EY(FB&o*Wgb#<$|I)Y_hvy`y2D!5ft1Ju#044v%)N}hLhXME5x{!s>H(1gf7V3P%*td-OOZ&5NgOWzPNHkq0l3e4RXNEE# zc4kMd4|o!#Yn7#&okrXnx`Do1AI_P5=Y4gqaeFhv;jJ6G$#Sz;h_iITDeJ8&u6!mP z7Bw;}y&UURBr4nM?Hk*R2@746*kgPKGF?&6Uh5=zy?Pa6+?JY@o~|5)gBbeii2mB= zFv(u@^-XMV(#F3u`|~!t~;|L{0@4M zAlz&dq@ogb;!h_1W2pR&b8SXkK5Fll`eq3v=I zZegUu_FC2D%R;*o>WLzo@MGe4dXC4VZEcOxp7Q)1P#UU2mFm1LIvh?|Ei2oU8|uAAQ| z=?;mAh}ga}XKPX&Q%8y}i6GoQox@zT2iPpdydou`rU6vqvKTA((uez%0)})r}YL~IG>vHzz z)|B?fvhQU85qW7`P#%ZHA@HT9-P&-gkawl*u=9$q%Uo4Z+4d4&!)$Q^>{zbH&*Dzf zTFSw1?tVNlj2FOs!GI>af!l+`E;(nhHi*G>1X(&qxpQBA>7*c=qKuj$<|=yn<3B-AFQ5{^WQoS@~H z?{#HFOT4J!34eWf;o{r}pY}Az(WsrZ4@7*|+>f1jqD;SgWL*Kv39&g+8rRX5wNnIm zPE>U$Dmwu(Bct@v)w|xK97mfYbNI>Q%nqhXd3X)+*%?yO$V6^^qm-GKLBThg|mW&t7Jyjej4r&$+-4Y*Q z`ZPjbLC|BrP-n}tb699C`uE$gGMH&T2<|tRV4ppx*_aF$-rT%oDcy$7aWz^e3EMhW zo41Ma0#-&kb)De;jE@|sbZu1#@B@N zZwuDip51vUyz>?Jng5IV1Db!otrRz7x;vjiix}?8<7sWP$@a1sjbc8YL~`q9ZR)+h zk`E`Ne|tF}c6YL5a*Tr#^{W>51Gw7@{4xf?87f3Z?p<;mgv#fe1qIO)g78svc;Ld! z4KzJ7bA5fia(iC1LsxP-_VFS(^z|ikW0g$!Oogl~FE&@yO#-}%6oOAVe&ts3^~LQK zlam=`He3-Cx3Rk1STT{WnELL|8P|J(lIY_%-bYtH#C*oHmlr|5(P6I4qPip|(~;e6K!2 zS5wZ=bl$XkYoj{(y=TdDV6|QRASfv<{p=CxdIEn$yJlv&nBlnBo%h~M8bylE4t~1l z-1A|3J@*K1aHSDk$&hv%Z?ru$Te6~Qv;2~PBsphNZ7%V(vw_S37oUBiXDbBhnV5VZ zK77S(>pl`H!grF{DH6)Fd=$lP@l3yR+@{Zt-4!VjuB1v!w#pT#`bgfekdTm|rTVuz zI~tlUOS7&San#Z~@*ze)0nm)zve#lg_v`~NFKU_um!+T$6;~~amJtG$H*y=ulS_{V z&GfXy2gvY7N_+>Xhj#XV-N`;8KG2nGys>957V+H4iQN;w%xd$kmRn{tSDFJxWoIig) zwQ8l5WG9xAcjN05QuDH{zIds!uKd}R#g4L_#+OXp*;##Bg_cX%4cpiF_#&ry3>u@? z7Dip?Khdn#9z~pVhpu+^y0h~Z0Iodyg%K|T66w&ZkNzsxErk2rS}-k`OITNTxHDUS z#}06nXvuNJtwR6?5QytEnAV9vj9oaWseNr{fqy49eSg6Fa6#@ncGyjMe=F~ zs;`=KTpHGz>Me8Suj>_~bgncun0$DYYE^-WXtZnCGA=$|R9JX%s&ip`W41qApQyi5 z4V_7s25=%JrTh{;KK}mw`!{FCzQlfr5%Ou_Haul7{oxsT%2orX%~Xc~ftpgMz^XRu zRn*4vbaQW4vF+@G2UrKTc_${@Gcs=H(sOZzwjJ0izFYOUtLyfX^mMGcpi60Kp553$ zg(vcH|K|XsH_B;ppkWym+dXmXk*%lT!_!!;)~g;=&$dTq55G_ogzp{QQ{$m2MdmT%UZoSf{iHXQunDe1!V z62j=1m_b-6H*efvU}8$k$SAX$`^r6w5)z_cHh*Z_h4ibetaM!qcD3J}`w$dVLlAu; zOSkrALZpLavBc>vX+vYKcT=6&hFgv8RKsaCHIlbgNJ&X2B8r~*<;JMQbv|#;G`AUd z44wP-fs)hm!7MsEYAe-sXB(FFqOY`$4i*37WjsQ{h^vOj`j2xFm+VMI@kQ{Hvzv5$ zpme>tGaqW$98b>c5E!HumJ3Zc!)oMnOb4I!L`wjT%)Cyaik7p|l2+*E2iHw8Cnp|; zh1S>V;%O02PGas>vGrtiS?!9#fRCp@BHz7x^cSKhzxVEOok}D#)#+Qtvi7`7XnV=@2E2uGbMf80;5qDd_ zxz>o&rnR@VT({Vm-jH#aH7?49w5K=-9L-kA&@2iYik>FUFf=`7t=~L5bD^>8?HQ>! z)~x3Il><1324s4pJWBT+BqCCA>4K)%T2OGUD?p2=u zP6%^c3 zvfo%XRUSz3BIyY?o*(*@AQKg@(~D|$yFVsPm_~d1cB<3P){25hOoqdH9?O+00eweR zOXjclE}>&7w+u$>BNRW@)or!qmsV{*83Smsv-*MGEKSvcd}rF+wKgnnn9ID6XS>A; zX-Yg*x)3poK7IQo@zg3?*;1QYAk)Nc)Y?ec!f3-N?gX>;1hKP>)7reQk(=jE(anJd;3krvwY1!C<@NWb&$DL^FnSXD%T|cDP zc9@dyb4||sg8ScA`P5}){ldtutr`ttbBw;u=g`dHJ@T|VB`Ic>fKKpj7Uuf;MMOvu z1mQ3Cg}i$8kuOoJz~UT}PASd%ur2g^qJ*0v?kv@j*w0*DR;W^B zzo2K_zqpW4#1K;$#Bo}e3N@uCZk-^SuS<=Ob@b@bDQ1jFvWY`AjNM3ZwxoEW_?jYl zpl6=KjL+NL&c$MGyfKOtSe3-&r$J38rYx0R0-urDTG-IzOVqt*!(S1ja3RF+H>p9?;(!{UJ0;B!`6 zzIFEVoSY%}i)~eWMA2uKhXQ2e?|ky7UaX_+uB%I(lNC|uDYi9NR>nVkI9^4`dYatj zF~=cg3oB+_?ydtB28s%?;mVp4EP*L18S%qn8IeU+$;A|7)&V6Qgp_=n(3cMTc-9E{ z9OkteIm9j5ZK9(S+iRxJQh+?T<5Z=V%C>%y8*man0Q#Nf^~sEd^^up|MQhI~5*tVM z$IssEm~^qKC8XS4uPA?#4jRqb(hcSkE6ido7>#sX#qCqq&>%07&CE*n+)SF0G%y?X z741C8QcNn}oAkw0bv*VtU+A^_=UpXrxgG?qS=&suF9c+SM<=%x7?pKMds(e48lq$jG$jP zlH2a@SX_$T^!C;q;aeLD@S$)R1Cd3WZBZ$KEECy)OYS@3*pYdMF)Z6YhV;xO?Q%e& zckkX^HL|#3y!kk`xwl~Ul!Z^gt-%rKzoakK;pn1h*J@M^1f25yZbn3a9jhWuh zr%MLk&iC(Z+ukmG6ISTG0I#TdjON?tNBot40-76%)9aCgl;F@fk5-CHKHhT`RRiUY9nKJJJOm_-hEH$ zwz9(layG2Y*h5srX!iBeorT6GE4>e!Z@c>fMWl!G$!);@!lI({PpeiQJ$dqt^14M@ z?&n7uWL!#N?53|tp7DdK+G2M9{$=O(`C6@Qf790t@r)8BuSvAFi>_~EXcWJ65Y$2d z(dgpP9=nHW>4e+Gv!%7h26*zm^WFj++3fef3On$}nx{rckG>XpvU)DOcK9>^6c(2` z0tcdK+hP<7<+8Ot7gf1nKMM8rE_SQJI&)r5PGDK2$Nj|ZrhPG4^F%kHr%rXe_0;4V zQ&O@AxGk-wMl{)$MsVoRz5LeZ3BZ%3Rs5AkX`Lf4DU)^vaQW@F*GBDq^X-h0^7I*6 zWtvK5P&kLldrbSTNNXMCU;8AJ=t*2gVK=bPyjzYi$&$ghgCPU;_0uR;#G}5W7o|dT zoHv%c^Ub5UZJ+H&Hbn9!5o~5#+3>TO#|NZP8xE_w%$ zDp$2R-akxgq*VaZxZ;8sRGNgtxvU?LEPkzevbgkdX4_2z`MteA0OupYn_ZF;@an2EaBN;{>;#<@VK9m!O?}&9ND6Uz7yltRyBci zHT|!YUI({>^b}gkhIja|%UFyLhy*(U=3f`;3C!xN@RJi3ac(-!lL?p0cFaCp>y2@u zGca3o(;xcyBFApb%VXYWCOj{Xg0^_0cda~Vdr6^(viEj&9h0k|SET&eZ)|;E)3&x| zU3U^(*J-wOki+|3#^Zw57ss3P&HFj6M$j_Zu+oPB6pojy^pTx75fm0y>&iM7Pfp$H zH}4?%dhvu<(i7a%-=b|(7Z;JCRH0uxIyyXYiJFKP%B(BfZUP1$BV%7yiBNSmW)N8M z6)k)a$dtqWCN+b+COTq5r z$67=a*D+DLHu34|>Y}`7g|ztiHwTFv7su`ch;jv%k(!nJl625mC;=Z)&PYomA|{q% zOc;woh3_Os#PyUqhwaGeB4j~>L}b676>yyoh(eP+J#?Ojhlhpbd8w3bp*qrje0+R@ z7g7EW3yWnqsuOXeqQ&zFAIlrf5(lYB9@VvC6;X>-^x&-1C^swtsN>g-j3xlhI?bH5 z!~SL>6(451uVOMSzfWGpolSc};NUok|04O-gHN;BLd^P(qRMSwIUEsO_qyPWOSu30 z`>|Ni5$e!c~>ZYw0*+Y+i z`2jFZMEP-yj*UP>V1f7x)lKE-~xn z3a%BgPsz$+WnyBYq7o_z@E{V10k$A)>~KAE9+3xad)fJL43Y5U(=+od8IE$<+jOtD7$6utQqq}h79>^%Uxw)zSxY)gE%)yh7Xd(~d3R z-@J*k9L7(1lcuVw3VjJUkl=;1xjTX=jPy2*iNI$NM8jf!OC*aGMFN1@FwZSa?u)jYA z(5%G+iTC&Sudc4{>FI$Tto+H-W2Q~y$w}wcK_3pYo@hzQ8_7b7v=URj#rdVBF5P*i zMf};#rcx`k!*sWcGhy*7tElj=^jJBK1_lNalCgvJ=No#v2uTO$(An7;%%T-P?@xUL zIKKvc<6A>RLla!;;oVb+0E%;?9sNXW^KOL)Hp>45a-($wJLgkf%K#45DW(875CE!Dlk)a`V(KqR3JLOep!WG3Cchgb zS+g*a7ca~m#c35^IGp`9GxL(BeY>>nN=hApLBK{5F4}LAKw|yyX{_qb(3>2y6C8S! zc73CuUx8wiX}L1fyEStV`dtvu@iDWw9vci599ca_9~2ZMop1$~5Iw!5EoE;T^0_=k zUzgWg%7i|YeZcHZ$1KV9U>ohAoS>+j`1p8WzR2o*2XJ}{?t3cHC)KBzN zgoK1n$KPLZpHap)U0Pa723RZ?dg+d!gTs1-C+-bNN#x3x-FrJ&M8a;+cy_t@JtzZn z5#)z)H=aJ8mohM*O;OaqihHsHA8Ei~?+JwjX}O`-w=!L}99&$Rpx445x|gPXC{B>&l;&?n7qd}Q4+qHb z#nfmN+kkZJoXUFkY&3{OK|!>GCr+FwR8I$DIflcsdkrH6SKe(eY3;B9azFnC16|}4 zM{ITL!Z@BQC8rMo2urBuFztGiIutnC3fJ&e31T(g3&DvL8ONgcG%T1l6NeKI^hl{P5vJG#dTrIL*k= z(7=I9;QTKytoPo=v=uxRS=l4xV}x=k-R}I|9!p&E+gN+eEj>nWE#ngqJbC)`&FWI`tc%LpzEgj9NN~&W z4=|9j84+)BgH`+9hbYXf(DU-1s>giRE+oBSfYT<}SzY}Mk*1uSTK4zl zd)6fwZYj4WPIDn?hnd3a*zdf1u(|0peE45GCbUu-T5G7Ka((hHm2v;pj<53t7KuJR zby>HDxK&IYu6ZN4ZqeRl>O}BQfgfQBydOgG(f`udZ?1%epT+jaKVJ)|X*t5&ryQvv|IKf@J$Udrlr1GMFRxJ7 zbtGNqHqc@oK0dx{*E;mFP5VnVN(zTRcm!OO!Y3kXsIC3RL>u;1ciKK|c2hh@>^a4^ z56}56hYogY*gYT^v-<}_+96@X07^I zHKGKFITSL;Vha9lpPgOjV7EE0%)~Y3nRc`HMj>D$+kz(F+S=N{v+$IiiLSP2G_E`_ zBBHmYB?q7kDCe!`YAhusYrsPX-Y=?>g&dbJweHN)RSb!Wl98H=Ew|cxS<-iuM^7{_ zkqY0xvXngV?rrGDkK&U2iUm$Da{nG8Hp%(UO6`^si{p`Tw84eQ7vg1E2BVF+|ut41hj(ppS=9BgcI?%TtZX5%w>n)kE)hR*(m!uw{A#}{W1V$Q0IEV3g_G1Vl$o9y)I zK(#P68K&bGZ;H#v@Y|uaB_tlr@DYDBGBQfE7<`9qicU^U9MJ7uV1Jx+z zb@H~Q^TYQDjyc0^V^aC>s0`oQy*qbe9LNxE)OdEmti8^rXCLoNps1)dpmhXSpvxpr zE>^Sz1>->qG0@T;Ja`ao`~_MxD6vT^1#0&8g+;9!hy6L@5?$N@kkMTwSe|+V7Bji}yTxsV(u;geSGlWizgWKkv%Gi5jFc&h8Zp^LisC2P`B#BSU{UG&B^fL_a@2 zFoFS>vFA@U^jP0~0!13OA}%g&w@DrtASvKj-Le4i1RTcR-X4XmtAI-7HD8FJe6&3F zMQ3w$PVCv4I~!M0JvY(d{DD-vIMd60`SKiqnpFQhGbpJa{mylz;!#*;`(3{aY&{~F z#vDMxZjZId_Crz;2Zx521^1W0%J^5q&K#R>*$YTftVgzf1Xu?(ufhWf3374)}~ z=*MARSjVmaPA?O*ulnPP)bO53c?7^`QOFBOnwXfFG0~US#>VL42Ec1{E3$*2%sAn; zVrP2H*n?5w|LT<;_~u1LT&?Gl2iTxCE(@rbnx?%U9B|YuLQ2>Z+tor2;}M7t*iQCg zKQ@FQRQUg;THe#VWl#4&D*W1uNE}>Tk`pKBi0+UpQuMX72xG4YyB5Sbp8s`5-)hMa zPj5KBKVBU4I0(S6kdUXPvDIXfE=cI0uHX_;Fw)U|>Gj#KDkVjDf?2&FnotwaJSx>u zGrqKxkAs7Qk?|>StFHnOGv}`&2?T_M*4Z?OkGNWW2yONMvnAWVBA5el>U42uPX_iA z0Vf3|rB+B8I4(`Fne`MvWC#QH&*1AjQJTT>01TSnJq@hA=##hq5%L>rpU08&2BYcYK|+U)x^)qiP0hYI{Eaaa!6G$OarKK$3tJOik{ zy1EM0u$QR(hjfJgdbg;52y1uW?IZE;7|<<09C}nYJ@mZP_MreOe#C~S*T=Kj+EGFQm;%n`EMsaVR-PKY8Ej9 z>;sApArXgJ-)wH#>Z{B>`JZ@rSbT_P~wsy9!-6BwBY_uJFwoAiO{t@0OslC_h>Oqcg zm{hU#WLu#+bB!8^3m~vSD8WQwXL}3t@uE$9LJCyR=ihc z)XShC!c&*rf(Rq&LkTUsG+g%06o%O99J>@6KY3;EXBNOeQc1gA<%;^a)>{#&tfW-; z>T;~@Y#%^Nm2~yNjeEMf&~5Vyhs9n3uLN5uTdyuTEp2$(Vt9D?Hz2R0_atDMWLE+L zdE`hVbf+J=iRlc~J9ZXp;A%qNhhjvRr@KGU2R)M$LM@ADy7^ucBeRU;+kuVPFrfHP_$mHJij ze~7LYSL(k@V}U*|S+u0x2ZlZcI0djOK}W(^IS`=&)k_Ui!_RSZZ_E$ZDoRU9G11W( znwWg9tCNzE8O61PukC%SBW7*AbftkOR_aDgmYD*v?3g<7k(H^=_wo^Uw*d|7jtQIIWpFe-5Q;3%(?kKdPNl}S^ z3<6KK%yT1SV-R!t2bgAlF#5sIM{H-TG#1w3xsfE2ZzH##= z4{}UaLnC4t4!`b3tJDp3sOR(ZIbxkAd7${n4?-Sh+C;KDX=`HzBPS@nVmG}lDq8)X zi2vp=)V2e-hp*S-w6S4bvB^b?i+L@;)I^}xm;DyOZhn>^N6!o6|-!d5MR zW(>Jme`%d9x|r(HB|plK5Ch=BFbf4zvDL$<)NW!CU(h3(nxS}tb%-HQ#=*(G3Q1X6 zP2#P0q+@sH-C+AkdMqZoU~7oXlvohqf%w2kI7~Ad|t--+Pq0A?&VV z#B16-Fw`)XWevo9fP7MK^rXNY{!)Sy;GaMP2UGN?Vpe1~cfMqJVdFLEpEWf#x9mad z+N@53q}p4_VYTfaI@$-nItx1@X$r~Z>EU4@ z-*K_`&ts*hr;nG3>Vq`|$yzUO@A$a5*7o*nDNL5h*11$oP*Bjq0^O3Nko1{8$b9W@ z5@gRSCh_p}8(G0S9+V$vuKuDsW(r_3R#x;?eU<1l{3!cI;wCNz{mGRIWo`h= zZjP6V<)yoln@!g%EoTr*&bKjjg`Sez=4lOa-rj?)KBu6JaK~aK_`9ga`d;x+8NJkn z%9kk5x`dIW{xDD88GL&>(8~Fgeb)3?CgaU^eGJF=xthQ0?LSD$f5ZO5w^S6gjv(=y zot^OxYVOkBKiGl>cRj?EPuIrzGIFh0JsqSRaA1~jK%gp;3|la}y7x_kdf~RyT}z&no7%u3 zLE%s^KaN$Al7cC+a5#U8QPbCggM(RAv+kh>D%iuA=;@Qc$*aI6ZvRqWT=6f5U30$= z@)1Hryp`KDQINr{s;;&%m@pDWPjJO=tRLIG4o}@&E33|vfCQ*W^Cn#nY_wCDEA?>z zG*=#TYrG}wePg>BOo;;Z^ziU-s1|(a@&nI#mv2FuX82rjuggIBzNK`8#%?pdX9Y?H z7#I+vlm;_>aqP=SP3<%PWOxs3!q;%Mfqy`D2a^*};&#KzSunHslL`Hxd}h@l&WJWn z+fE@Gt1GkBaL+Kz_2;56eP-peJ?t<>Z(3jc1pa?v5jPMdfe}VcU8R?eje}ENS$Qp@9$r|I z?n5seNBbwnO-IkWrWuY(bnj3Opb5}}l3lJg?m6EMDQg$mudLVJto=!P8VC%Rr#hiy zfjAMEPtU;6+|#JybE+F*Mlu=QfBcfIN#83Nr2-?5qV3Q9 z!`>@ti#+(%JI`~!Ov`qBSF@nwvlG(X_1f6L`VKhP!9=7kc;qR{X-!*mcfoW71ST&2 zF;z7i8l)<9+yf@HyhEg{7rqOXsadaIe|;fFG2UCe0*-*SjMICv2z}nGJjT+(LB<`|)z??x>dDrZ0jN1~ zM3?hBPet1Q#5l<%depiKMNG6zw{ymzkE8B?!_hdW%c7h#9cU(o%n-J%M3fUc)gjy- z^%hyDfG>9C3MQ)%i1W*j=RPQYH|NY-HM9M*9GomkUC9AmSJxeI|8@}rhiKy<@oea9pFlocZ-Bf_2;{+d z2@fA;rl*%Df6drDIQ1cZF=IwdvM4wqwZ&B65xseTXB34sFZGIl(c=aJ zyqk5%1?BR)bs6iL(O+5&ik&Jay}tWE;jCB!Yu-Wtw*t%5(qwe047XDBHf=&fT9 zko&)QA>eqChGw$*;Ryz1S*jmsfE#puQ1=_{$Av+?d;{twU|3TVlY6$E3-2MRdn<&p z)Zoi`7oRqi{eq&JlCE@Tpc#QA7)eo1^LQGAAXUQ@C7*JVlw1+{my%<{oyFlljx~Kj zcZvxk8e>|TDf5Nk+MwXzge|oQAo|S-GPCd(+-pH0A=vAyA2|O80jhCk$i(#YNOsfE zUbFrZ$9%J_m@}Z2hJ#JED}!>pTAA*)g+`A#Z~z8Sj=@M{OnED5bP1%ZptZr4h`q#m zBv5J`E-n>F)xs)vKLaE3WGE!}Ye(vuY}-P1l4If+tNhPHH#^w`ZNp_TmeTjs<*z_x zCrmX2IM#DMN#P2d{hsM?wm&L&8Dj@PL5|T7XAU+71sS*uSpJ?kgskG2uEom!$9sR4 zELr9^$7!T_wicVAlh_nT$g9A9yf3ekol!xcMHg}4dpbl*Qy77${7QMB@bp#MR1rJ7 zf-mwUi0c~|agv1FX%!7#nrh#Ebcn;9eW#8=14Qz|#SREqD4BI;VP^-$^Kr@Z!xTKL zM6Roz4k`%56(OL>2RQG4tprb=*3tJ2=dn%##1PeQxm3`Acr4+|Zz%B4$}E?%r2N3yfACE3nP2mmi+-|N9$lKvBA0!!gAC$8* zwSNue_gV0_OQcz*X^hboA2%rQ{~JG_h(HYr&7-A&rMD`T8o4S=k6UjvF#9zSd}919 zcF$}OaOm&0`>2Fcu!>;A56i&T#5r^-x??7HS@=lCK^{3wXC#>BRK6BP;;$%ySYLQiPxf;BURUP;h)|>FKCVz6+xJ_U!|aN+$?*=X0KUanQ10 zcP5ijfdWAz6-rD&0Y-Deh61N%8?T{&z`ls|KkTz8IdaWi_v}!SKcxN`RMOFDUB)Ad znC%9hNu=G^N72#IU>`U`!Y@_cks4}+=A(%z@D~lyH3S;biHWo@g>wE2Gz>cYa2|Vq zbIHBrT0e;RC`^rjHJuBltRzvYB~UKugasgSij8$g_7d+p+M28xiE&{Fo&+8S=6(G5 z@mMZlRcQ%{&dfUpH2OfneaWm*lW&xvDzRJ6o}6S_htRiqPl14nc;^!(Bks8FqrD7Y z$icB3Gq9WUO25B{O`qOn)6YSo?YWMTXceyM1O*;r)+nm1P1VlsWY$E9du8i4OjJLF zc|Q5BXiVfYmsCWxjh9a2*4?{b0bhb)l;cBN3n4i@N(B(Rxy~HM-~!1SNx%iPZ|GS( zzx-}Jh{iAIuLK&i;J-qhNbM94j?CtE|jbNa(-`vp!T38P%A@W7|60 z+34=T840@Lo4?iCq{DJA$1Rq16xLN%sHl5u6?Pj<5NPkpzs|Sh0_J@8YdT3`GG<>F zT2?08XRCe5HVrj2G{nUZGIUSdoJIn(_QDE#w z*;~OJOiGLIVWhaID9&_9cz7xq6~>_R{b|sFvLq`jdwn$S_?%>KKy_8sbYDsF+qW-z zbsLCS7#MVPT~;w!5%Sv$BXtU19Z$B@9dx+F*tf-BKg)~YHecNxMXe9r4gFhs9jy$Tt3*Km-J*?D}Q)V!0+TpN?vkJcoqg*8e9nQ_aDQDWZ5=L>8gj4k!SEOaI;@# zZXXe3<^CfkgrcBYLh`i z->@YF(Ro$}JfZi3QopsvKy@9>$~rCR|MYj@5gSFeEBAQ@zETDorlIC5`%|+hw16dBB=0(_Cp%d7E+h6b>y4C%-4TG zP>ws{1#@~VSS$u4!L>^;zEW9L1^sIIq9kT!lXNK30X``N{O>ZYA@5w}aYh%o#P@(I zBba`s5W12^DcwNE0`L4D3;Kc0ISJ9<_4_BC11p-i5XvT|)0KbRdo?gIjP{Y1{N>=u zeSux-;(9c{ZPEW%Qk^THGk_(txUjHMXYLZ)r|nX+bI4~svEweDsWh(}&E5p6--)g% zD=1L^($lw1A8E@ z=CkKF&!T%U!*Ww`!J4n%JwCyp={U`%Df0q`?=TuL-ob+%`R0@)LRlm4zC{gQY1&yM!tKmaS}T$WjO zm+?ZekhL9{J5NckIIPS>{N!rgTCiR+1D_FU0*;63i<#e=hi8gN=qBF@qkYJzmNx}T z7+6w)BDbhdWMyX?MnNh#(*RQc;Q;~7J@cw}Wn~-TQ5A{6p{gMyLH{N`{$*g`Rd)7~ zk&*a>goT$$FQA8HC-lHLhwW5{oQB5M=PL~c&Hh=b-Koo6fzT$9rtmO{=yX${XW(5s zrR0^tL21*GlcD(5$6_J5y|GCb1UZh6HN?W-+t4N5nm}m9V7q`C_BQlCE3>laSXuqQ z9z8*;2U+QbHoIC$kZa%c2w~%U%s|P23#0INMnu`v6`baBc`o*SJj)$AF1BHpb#S`h z9HKzSlkFQzlVXM!FI=b`wp^O-UV#K|PA*V2lrGof zdPy+?d!}CA-7m$u;MO){%NP6^ zR+<65hKPu$%wkY5yZfwQ@$krqx0l!31Y+B^46U89*yr;0kg)|waxcp9s8Lx=j63DW zoRh{tt1;1$>m=nXgI8=zLe7lGh;aeA;-!m(j=!(Pw2^H8=Fq-L!JNAlrMI} zYV0z%OxG+~hbNB6DggsphM{;etveAPxUZ8bOkdR&gEAFQBNQwmZ!RNVAS;M z*Sj?~VI1bqoW(4N2TNN7P7N zSVC7aJ&dR*5DlEz6RE(yfav9eR1F|`{~gJ*DjFJ6c;0yvI4^#gjoCbv^iLi?Ht=cS z+jv?7LR~Ct-1)qJrWs9`+GLM~UeT9^b|1%4N>toh0z??Zu&+TybrYIoY~libK&=2J z;^E=JU4{f_Toy!IOpJ=)sF?mfs^+Ca)z@RqM`6!_MxxFf?BMB5nm}<#d{44>-`abm zvzaK`sP?VS2TW!T#$BKDt&5jPRXkN7!nv^b`fuI=G#q*q#dE#W_`8V-%FXBqyzczeVGc?+SYU3B zptZW*z+uonX9A|W4-us@3nmC>aRW59N6r8UfTsB?3kz4mP}zFKtP^Izb8>P{gKD2;ZS$K}Gm!e|^8}0wQFeBS5R2u}-Vbs2eU28w%+T*i|Ce}U1k+>XVWh~1&`i>A=Sr@8c=A{4 z&P3r=iC5#9!6GMep<1*Jn2=?p| z_#A%;e2ud1#|}Z@ULs@!d_>e|eD<(uu$~mJIWDJ~p}(F!eR}n9k<=Hq3l}d^aACBZ zXRTBHWjmi}qTalNhgpHXOX0G5ho0ub1$f+3bf@PNEVuyf#T-|@+k;gLN&N6g0AXP) z1~`@8*=G1=Zd~+=uyEUzE>UZgy+8t8;jDRNB1-=zDTu`21h+@W5MP0oI z9uGlAM%JmZoXUFT$^sa6kf3J@ijdX^t6hVpyJh6R9D}onNEL*PHsCM#>Wz(!IXOA& z>kj|YFIuF2*lpR}(}5vKp$5p$LeZ4w2LHd1Nb{Frm(U^t#9IDuD=wa$EZi-#( z?X41l_jQ8)o_}(O7q7ktvwC8$ao??c2*a(*P)R3D@%NNF2#5S|&xFEg9YH4h_&w{# z&8@cbSNd@GL0}xv5h^QXmmfcT7=5H|1Xml10BB-vhd*Si+jFz>0 z5r5!{q|R<9U_>D7F{+yngxfF<5`h{ZLI`*{4!Gl5T3VtX!SmOA-F~?e&-N9I=d0X;KzFshToO80{1fY zhX04h#(EgvK=2QMaai5SQ>RWHKmHBL6&4zb@qQX)%AZ8$_aKj8z55YLGWPo;qj>c{ zh-zP`D{6m>v&92!2NC5$0LoD??d^J7S(#nC98qPHVJ!hF=m7dO7NVN%zl?TSwu12F zeTekfkt3Pr{d~&6>*wHk7Z56R1W~A{Vsdrv8%zNM7Ge)Gg>sTApP%I6vEQNVcbLWK zKP6JiKBlIo0_Mp|05s2)A%H;O$bBF4r=Tc>Ah#qxJmzaCOkP0&rgBb`ky%+;H8(e_ zQtO5SE5ht&e*UOq$5KFtiD@2(nOv?DNKX|LlPTDQlarJArrm9j*HljGCdLpGx`Q*F z**+pELqkKrO-5dlNqKm9V4eds3{ph=n>SbUU0$?&9Ig%SR6t}BN3@@XBvrwm(^j-A z@F0zVRxwdg`DmDeKZUQK>d#sSPspZoY+MpNgz~o;wvR%;Oz=pSH*f*}8l$RFuc`%+ zKQJ-TVqrw8cR)#1bsWhBLI=S4z=|ic<+XuP7p23+69{&lo!6mVU0oo-X_mQ^zz`JV zk^r>cFI0yfuA3j9Yx4r6mC|PRgWuK!_lLYP>$BGMMCty@$Uz9!aO8*jMNUnInVe#j zrW=o^?plBntyo|&2oaqr!}Bp=9Cb+xEXFmDP3fKU+E0HAO~H=&u7m{_>|6Z_jI>iK3G#w2+A z0VSQij2UsvaQ*4kK!*4KRQbPX^8y|LWj=jAMha44pqmjtX(hV~3X9*X@ez&k_Od;( zrYQqreX*yfUikZ4eyzk?V#ogOsQfcPh_wSlV8a&Iz?r4F`N}UKAa-Nlsh?qG$Ol{( zi=8@g^r*m`F{Fh-TQFRJc_vI=0fDg6?qo=~MIFyiPupyO z$^hy0jsad7L%_*SE#i2U?P z{y`G{G5$-W?**QG>3j`CYAO;I8su>Y2DHQK@?e5VSwhV8yYEsHaPr@o0&)&{a9HGr zo)uph^yE!1Ja(h{8F_7_$3D!{JKcsHmZv_&KEkICf}-8t+ByuG!kIfkNl8fnLm|@z zV=xf5PPGK=LFuwO2vt7OKZ}Gve7hGCglzAO6z}TjK>ABfOREfM!uHliwj`I)cT%Ac z8Hf+|3DB~=e1ZKUz7wo&Lo-elNl8hVK!j(kQo(euo=k-sCXsX9GVnI$A+qVF0ulhW z8GseMc=3YRAn`ihMR0hOynTEW_;hri9bQ{;-C2Prq&#$e&=v|NeIMV6zlE#0?EgX+ z;Cd+L9jdt0MbM-;{YOlF6O>uEuSAA(d+Y-0P*|poLJqpGW0uwny^Xmp%xm2 zh~8$I;lPt`VKxgD`RL)p#Ec9TrKWQ^qp)5hotITxFY5gnk%zg0Q(PiuW@fi;opO|v zGXd`dR0rB1Km{-$F1cKY83Ii*s>9#S_P#pzvxNT&AFW}Y;{+`h=Fi~CAImU~<9@yc z^N2b2@&B*7FAv9ZecOF0DMC@K5E>*(N`(j&N#X`88cQZk`Ni9Oqu5jDPBWG zgCTQ5hNWa4Gi2W9Lu=Lgec#^4KK5VVUjMWXFOSFb-1mK5*Lj}Tc^StbzAP0_4X@do zYTm&qa%H0-*SowOJGjQXT)bL*RTGV7Zk|0YVCFDz@75`%WQ&d5U*)@Rnz44vUwf$h zSGR`2Mn18HJ=LEJ`xHw>cwY7zD9xgPA*uwm1I%1?J+}ot8 z1#UD=iy7ey_p6L|@7q`8G|l0v@;HPh?1I1Fv<-oc3!0ziTdj+Y zLgWzeQQClpm5^w+={gLrKCD(`7>^1Db-25I@rGehcqAl4%K}YLyBRL}+Bq`%gpIAc zd8hC7`iEQ-=*wX`Jxjs*=jYD~Gaq0cC*>m#{D$y68L+<`0|6yikJ*_SRZ&e{-Eux& zXJE;31GeDK-1K%%33(|j;|-!LWPis=34-L3Y| zHWAeSM749-zoB#e%D?=pQBn{sT*tcr4+yR`wd~(YS+j#{Y`H&+<^(i{l7aD@F~@U; zZDhI{b#;Y@tv1|2*OLG!`acOriS4H)k6kxy`+U1JEjP#NQ=4Zg?I-UVDA1I5_EDQ| z$Z&ZO=#(4!!LNYrj?>k-pEvr@KHwl@)`z-$8^=|Q0+%@d_rHp0u!@CGMYL=kLk*Yi zw8)MzbN&oAN8z=yI1xxk+419yjDV6x*WxAe@bsXn?5En!HAcy^Z44pz9l;8tVFpGw zK=`AtgmcM~OHLC%drS%D0QV(5;M4qP*#(fO%HNFi{qU*Te|>&`j*EEUIt-HY`@8jm z8K6298pz$Z#z))YK-+-)u`Z+hV)Q=z{QIu?XOA9{q-USI5)gI#Qe>66Vb`O&XkFM`OE0I($_cA74$26%U;F9 z^Pi82o!!K8JU-*`8yopI@>ON=7i~76Tj5f$;&d1~rhndqh{*ev;A>4P=Rxr1eX^}s znC|fSTDe6_$G|`W$~+v7_1oKRA;Um-cu`RivoE)p*!_%(M{B^HAn(QjgocIGl$7%@ zglOyRh9;J<{pqbak6e$4k0JT`wR{M*U|WookF;&m(9%-6xBsfw1~xXA;ZH}}gII*D zKK;hQp>+R!b+yUi^2fcyAqS4!EI5$T^N>wJ*!b7|gTKk>bzEvJ0gKw6@JT{ zZ0*-yxQ1WHNBLUqZ@c&FadPR>gVr3gi&ysD?YBbf= znKo@I)f=ZAk#pRe?_#7t-({uHKl5cxz26q;v%edHN8!@e`T6s!fg?s2 z4H6q5yi{#yZ)(a*PQIy$o9V_yA3q5SYu}LU4bn*Es=IlXS>LeF6E(-I+wYElLXgK% zLWpmFo&)}HQe!W~1tov;dpX68dp zP06qcux))arX4blYawI!YubshFU`}~9BkBm#%`MC&zgYkpbQk+J(d>G1B_;!*>{V( z0%LPN!;k_5^L-JU3-fuGCAV zDSu*%_0t%H*7wM}ccsiSuUwt!JGBu9DAUIZV+HAJ+j?72|HB2y`27Q&GiQtAq`7ow3GiyC6`gMxxzo{@HO=`Q0FzbwOP|LoN|zN@7!dD>>7=MDq` z1RubL^js(^3!mj}r>Om}C+*%nQ7#*O%NUuN6Uijw{AWAHD5tmmlcuZ|J8-?H7cJfZ za22O#PjpcYOZ{B->?S(sfrY2oZEiiREWnSBpKRU$rLZZZJxc%c$mrf&l9!?{dzYXri1exM=~=h?_7&> z9@)7}L#^a+?+Pi@3}D(&hc>*i2o!$%baUP=Um+#K?4-Zr>oGO`;jJe7#p=u2y2CSm zO-H`8lX$<0z`bRE+!I|L9Rp($ts(w~sYt}t%Zz&I1*#w^xC zs~B4+Cnp`9Et~z>j|c)s`=D?-e0tQ@z`y{SB~iQH{XonKF+w@c5cF+A4t@IWE@-tz zHS6l@VE|DcWt(4+2fHlj?+gtMeanJiNa6G?vtOvDyWM6@_Cftmf&V0hxJ#XuZ+#hLT^yQdOSQHc3ej_$X-*`VqX^GYLUf zU5C+I`|;x$b3-B`p}bT1aFR+c8{GMKJ_wHgvJ`1+`%J{MHcf7$Rs7Tb2k%Apby+#C z5v%^0+!K$->-ai3WURa()@2#l9?P}RWwDuVH0*}VBt1R8z$J%G zEA8;Ueftg_(kMuqV*Tf#6de5M{Oj@Lvg*s0*ZPiaht2BZp>NW31MySPby7zI?VdVD z=gxJa)iUK0kTgrixJq3afA$%8g^G{A-9eV|$=fR+pxrHs6a&4?D3}L%Ed#sNFLs--N{IUrwI12R}g=%a^M6NfZsBtiXD^Sk%sPi?{SNK3(p4F5@YqWbn6B2$M zBeY<`Cl56z6C-2J>Dz)9Xoxq%It35tTv)KNySur&1fDT7BToWy;AX%x`tWoodugVM7kq0X)F77b+Tb63eGNw=k#bne-QmfBzRG8y4^`Q}qxG z>}8ghm6fe9(MMW#=Fzzq6#~WSCTKgm9meOtGM(qD3J1ev=2f>s<&q#DCEbtqPB8dDGIPD zFT7(Wtu@IP-te<3s3oEMd?Ug-Bjd|zX7nl+4LxnWR3^{W$HUl*^7ZF&5zl_k!C?x2 z(wX5&IL2YXbD;4hJx-K6^W{AaYXAld$14g4Pp82^74$0F~e z-r3ol`p*db_jQ+z7=M=1E8opRls1T>2Uq^h!NVh+(?TJEO~dS4_T~-d6TCFfMUN+@ zer+}|sG19XJI6BDaW%pv?|#6z$UVnRqsY%%pf=1<#!NCNjTMvo=ApJo0`eiar zhc8Qx6a(QG7BCC?+CKDk$CL=^-Zjs#v}JA#(f#F+PXkybC}+PV0Tb!3jq|?nydr}4 z`d_QQEcmwF`Pi--^ikZ=W&70>VtMQ;>{|?CT28L>cFJ7jR4duJsK9@iPozbf2` zjl#KkbN9f2#p5$zrF0Tn3o`WO3zixPlQIn;Ly4MbP)#Q4>6wf`kgnXE-jP zry-6tFg3kRF0NfwZ7a1wa(eoM{pTs^_*WvNYl?#ipOx~?{fFzz^n1Gd`TnjM@_0}N zr~*VwpoIQuZ{+RbxnZ#)Q`|L>Qebh|)+o!aH+^DQxA6^j}s?e!l;Ke>r^aK zZ0H!{#&L*)uG$p2VBC^p2JuJ+W)nbEWKaFFq9x-{zHP8+J@D07@ucf_U`rlm?j6@P zB~7W0NNjJAnJM_A4l^y6&c8Bg4&x$S-4;ByKG%7SGOqVU|4dwInTI|3PBKV=pEyTjCqUD-6AY3gWt1hc=Yg!fv(HxQ_ zg&WZ7!r6+N)Add{;2EOfNAJemE6&AZ&J3IBw~EG#ZJ^dOv+LeH*;nta-;4Tq9Su#F zeC{h%vvO(5Z#WGmld|OhE^nn3MHvX5vu>55rUg9x3UcN?E1`c7$?_nvDi)Y#3Eo|$PycJ|GG)zC(B zab!1d1>WS~Ef&j6^mowfralu7ENNK2L0Zx|S2R7HB|DAboagNpbspbo#4sO945G@1 z!9m><@O#MKv{GEg6E(pTrx=|$ac$*3hkhyBI88z{Vv=$$=G+oej7`9qaKVUMjvazP z7*4plk{$SsniJZ-8nrDb%gYb6ZBGtc`pdw}S2?%f^yMhBQVU~m96@6z-=>I+moE_~>C7s<$Y3EhBgAYZpI0FL|jTfu9$ zgri;@(k*`?Ur<$%Kc}3+@e2YgcmI1nyU~f9)?ijO+t*?ZTN8)1>;i(uMMfKW)3KTX z^AJ5+Ps~$N*Pj!;S428zw+v368q6z{Qs(gIe16Yv4&AF$mt`pFTUM8(%$aSX-$D@)d4Ne^#{ZzmD?1yO(XIo3 z<884IWN}S@fB#{?d&iC)L!%8~W$P(mkXgZ@*Zu{=#rVXNOE+I4+{@T?w09Wr@>8wA z$3Ma}s{Bo$G2dwcWU0s}ee!hNNyMff_2lY;u3T{Kb0ftbP%=8U*|UfRVE^G4>b14} zIVxwi<)4W453m-@l(GU*9z8l=G&ej@pA^9UoCUvl)jzm3iS+n8)gy2pR8&-_@3>Hq z_9KTWdA0&dmfM7hLrWt-+Ar!##OYQ4f7FafTM?&gXyAy4(|Ip5(n@7u&W+}Uw%xb# z1NV^05stgQEtV}dMGyfu?kN4&tyH9A6-=Z4X3Jnuo|Gg6*U<8Q{6nZb5B>*m?NC=& zZ}dA``>Dsh-2*h6wL#s^s>0T)Q-d~_T(*bbAV91iIf_$<@bdDo@-BkgFSPC|yBuA`*Osi7)WS_T^gE^%vX|xS@_PLky6Y3B+olmOdfaV2cjc#J)o2 zhL-GCO=?pyd!5=!*e+p}2Hd(eJ~^3tW-qA0^tz$8519#V9_E+OD#Evkg{7VkD?&rU z_KPeY-NWpT2NG^q5V+C1Q~vIqs-LXp2df0tk=-f&=o9(@kTS0Tq(vHH?3?p=(6|P! zVg+;+-rf;7a>AwMBAnWEbRoNmv|Ei0La{K;@g+%GIl*cu~1&o^DN z8hPr#KePy0;vX$JDPvbQ!K^d~@=rbxXhOWar)!(75!0Wd%m+Nn6YZ+z$VDbHl0Bz< zgbIzTSX(ZOu7wHC-?>QkouBA>TOs(tV>wZ0v@&>w>Abk`nCOV3fe+!7;BQ5tR(Uyns8*4J0iEM(ste7fav_S- zKR%VVeWlBpTSCSRpYm`T*gPX)1Z~X~a`D0iOr&6XN;6F`fa4r|?4owEj$HIl>w3#o z`+u#LiHxHz*ync|g3DP!^)r_wdROA)O_~KLi!ez?2QHjb2EwROAIY`Vlk@U~jgDww zAWG2imPq0`y)MshQ@e7&ykYm1{(%8K4UN*K3sgo3lPSr`k90GDsiWID-%r2A(o&~j zDfp9$4Ca3|W#|dZInFOESPJQd?b8nyu0GHZRrl%j{k+~UTCDm<&5+(Pn#XNPO7@~KP7-ulAQLE8BXlE2lIR=VgcvK@-_h)=XL4KTP==mUx2m2 zp+?5Wm{<20eO76`0r{)skAjg649x+4+ zJtwUISD+dr6rjoQEJso8?(PoFivT~rQAj?|2sQ$8Md)+oXn*_xv@|rpu?hlOuuTXz^=?P>_x?wNuCHY+`19k6xP+ zPm16T$zjI_j$@{9P5x>!?XvCNNwzDHUmzx8-dFvF$E&HScMJ%!UfgBS;HeXXwO(j%XDnB?yE-`z?16*84i72+s8fw^dT`h#;C(dS|#ZVUmnFXr2Ri z?61nldoTq4-214Zi{RRTKkUixv?Z2x#oj*;yJd#0perOW@Bj`f1YqB?m+#}yRQIfl z>iykCacQvEKl$Nhj7Qb0=+UD~D|Yep>((6~rrHFDL;<> zWtx*jdO#HXXh*mKrWpU4Zd<04NxC;ZOIKzY{9mz`1^>;}Ud^E00wC^PDTP>{{Wp%W ziu%BtW_cE00~GWqlolr-*?#!Z4esV-uTXlJqDeN|3VwjX6E!2Go=_LDV$GhJ|4die<3@eSHKB*nS7yjyFJdV-Yb^%b}&NE7j5zVshWVMU;#R zI$vH4&1)+Tr)4c(D%#q4Ftf!1h+vqwjGYUSQNN60+=CMa!$o-_X22G6e2VA01Nl-&M zhtDYpkVjvlb$UiUqA0J;p%rdruPk6`GTr5i`bYPD=_~|}c^&Rz_8?<;ue?h5W(8gw ziDY%CX#MqziX#*e>x}d<+W28K8M%E=sGijfW)^MAu>0*uVvaSzNC5eDqAQ$a*diET zHl>priw9P7{OfZTLr_wUK(;aYk5^D|oHK*26SW2eiq?SaVO!_swt$1O!+p+DG#)U7 zim>H1W?E_=Kfi_g=*0=>Zg=kq5j%G9cO>s{@ww*^cqr$3-G@WoFgdH4kHttn0xCI_ zg-WQ=PdDJsbByFOdt>p@TYpyJ;0hW(x+aS}E{B8+Te|nU5zi8#H#~iN+nS-{?XDwu&(`GCph_0$;7n$#=$jz1y0YHRbc~PUk#_?6&CJ zdoi*xIBoQ=ce%)KsYa~n+u?-#2cE!EE@j#cO6R_!H*E;77D58R7Z3Wpv)-xWVosedzv)|b&Ff8pbt zB)stia?2GgXY~B4$`^gx)Qlr|W_GrYZLLf6c{>-ajfa<4rW4&(0a5c{Z+O0mZ{L1R zv#!+&9o>angTunCo1fe$cg>Jo91E~p4G8judCYTFQzTHknKdNb=SAe7<8)3@xPb|l zx^mW>3{F-vC!nP04OsVDQ9D%BHQd+ z`R>8NK}?1$H^`fifcPZ(o0VBU!8c0Ua}2R@J2DkvHe*+T{R4A(kG~;3p ziblrUue_r;m*0j?67T4kqdvE2aXLCt4Ep-1-dk?Rs0Cw6!)_3?@eHczbZJ=7?_5R- zPw|LcN&AbleQ*+U`K&OPuVsw2oZ2kF+Tf$CvxTPSW{>hyCoDpOgGaBJZVBcikbA$T zYAGzoxDyvHY_EFsdZ75hSCd`Ts;z}C!h6)O12O+5bQahH`=^o@CbR+~ADJWDoeCXJ z?q>})TD-U7pKF zU&F=~**2rko=Q=U75~P&*5FW~)%(?UO`0h7FsR@gj$0oe%sVU`7t4RpT#D0Ep0l!7 z|KZrIzzZ|EM+5Y(J;>_f2mgHBlpR#^_qk+gMA%zC2(%vmpl3a)hCqSSC`eAri&=_u z2UvsTV@dlQ#68C!;ZRgRKm6(W#9sl2FK;*;rJ;Hgp`)@~4nW34W@={P3wfKD=cuS# z)u!U~H{O=n%xZMTnY&OGtkS(i&O(>|*BXuzHFLXMveB)*L}c;Tt|fm0{|y1hquiV} zp+koV+a%$$x;G3BZ8i`1N&L>k!=wHeW@Z?|^fJqu?5-!g)VON1yCY>i57Sgphtq-= zgURf9DsF>!w1c;rFcq}7axB1M&7}(dyiwZrvzC_pg{qI9n0sO*pMq)5<%g;cFDvNj zQ>;v}<7e?+PWiExMXQBtoi{3qMzTB9oZW*GtvXt=nq^EgK6Y#H=U1iz5eC90l=%ax z(DH^zNGBvD)bi}HwjLpd)Qo)D1=8xd&1V@t6))lQFITsFZ8qf}au}LS-+9TZSEDxV z#zN+;*rtH-Rdj__Zd1)Bgg^om*BkR*&7}M1`m7it*vg2>d3%LTY+~2KJ^C}4Oi=2s zLLxU=mvT3{ovm5eON^Gl{^PSqZiTq)PKfg-BmhtCqAz^?Ewr#^bQY5Q`a=YL0|6}# z>_j&8wwYrl!*D*V?U4<&t*u5s^+bQ8FMn>+5Y(8W7hkXEJG%J&Gr@z_hFhGmZs0Gx zSoh8a_4}X{e+P}*e5Z+{Xk@)hn(aw{$;s*I9v>FB+cvqJnhEB-g?HRsU4sv23}+S$ zcL{6Tpe{!2go%ZB47pXtao7G9Cch_4+6*bE7Gl3E`_?Ktb9;>4NRQ`3+Z14qEAGC4RcmF&sx$l-r{2^6hGS6D(=U+~0`+ zMd33?t!Zr5j0{D&44+m~`r5Jm#Q?gpGUwfxmkd_9 zFp0qD$Rn)+c;nfjq_MA3sk&ESE=J7agQ45k5Vq-B^&+(YjUtk%uWr`#etqBj5;k0i zn@MLdvH3GO)P^={O;y&uf25b>Oc!~Zcg{qZ$E@`-J#)DBWvs$&T<{%G@$zJpSZvy< zWOYrS)&nD1q)wc0@-J&$&wA*lp=amdWTj6eX7Rx>bK>cK2ssn>-D?k~>d)^H&Xy;^@h%VIi^d?nqCQU*of#@7 ztZ3vN33>Eav^CqcGjFF9&OEwMMgtblK~KCY6N%)g@0qE5OY-8LNywL+fcubNYm$Xq zc84H&Oi8V-tkh_Ku~0C5yM9j>qFfS%+N?eHQb9{V{~f-tx{WTFt{nMXsV1oR_I^M< z2#TQmk@4MT?1iqmZo~InVhSIBLb~s@$%2vf`8=%Mn`|fVj3?!bU!Dk5oAaj4@rF04 zS;Iui7h<8R?}{nNth+`Eu>Q=PI*nvwp zl#G3O37+ohbq3WBK0c3CZ**E>Er-=m``+_Lo6fWBy%a!j2G}qTK z(9^@h#wOqMhgKG`nkQ`T(n}N{NgSJv^wf~Ld#?#+K)0oa^2mLJ9L>eDbjHF$3GCa6 z+R~<`X@H}1)l2irMK|9>vatW*yIDiIZ?yvd4Bhr~y9cdH$yO>wn<0!VIS4!Uh@%rS z$7j5)6o#s(%i9XA&R$B0Hn=qxH)P-Hw6I5`mzVo@;(6yG`Rk5e?2G=MRU5+e9l~QW z%5R9C1ThoH{cuJ5>Rm|m`oSP!7?GA1^HNpJb@yNm@8Bl&U2<6><@ru0F0$LbmOFhq z_BYj=D5IZU?opySu#~w&$OJ&VJm<%cd7{}@Tn-+emPScY&M~-EO-n_*aVY$Jad_Qg zGX|h+?xxAnXiN&aelqa`d${LtzMNe$ukgd6I@%;K6JQ|c!#tI&5YxJq%`c-gFnHBk zQ_%y!X$XiRWH&_%Q+irvStc^yafDEk_S2T%1+UwX>t%zTxR~U?L5LXUoC0kOqEI$#p{AnhjS&qQ5fO!^LPdQe-0Qg+}os z&Sc%E3WLGEfg&gvUUo~PgxA$h5@ zL~P`DsAw*Kd8mbGuFqgb+AS<36v;!9fE#rdB3kz&bAw~GyKD)Q#a7Pa{eQW&5U#;=#SV6uzE zwWWzM3v;tW#`%WCZuTFyywpZZ+8G+XWP`SaRjXE+RNjjWn=TvsEHoq*dzV2s>`IJ# zavsKt5jIEteiWY4XXVMEdz~BGbN6*$Z&8t-Ea$qBni|0%@v+FRZy>Ai>3oQGT`x~a zidTQ5BE{grN$D%yAqh~2z_h_*QZsOhu4agOQpQcKx?I40^&17SSeA+Y1++d*Nd1JZ zDnAtI^hzXi&v}?|`AK>E?>+lHwQ=^f;ZnZgW~=L zIZl`+Ol4&GF!bNOlDOC`{QdeW<7nAVj&)tbC%SSm`>wlf!k@Dts3om{bQz3jf2yW6 zM%rhlr=MlBSd2+%@X|G3qT)Rkw~48*^Th~qo+L%zrs1b0Z`75`sHv%;;7Ao_Xga+= zu!OFzwCzTz#msm}%SKTr6&HJ!b0?aXw#cS_D^`mQZ7`TKlzs8)-GM;k>L|92wM{c( zy=^WkOMpQ?FFm9W{&G*YlP{dOtB}yAC&YxP8O*bWDJ#7s4#dar-OYO>)i3Khb#7Ab z`Z=>zx>4**eJFYXf%^DVn>lKJ|J-a6%|J^V$Diu>G8@06L^G%iH$$sUK3aomv_tbe z>$|Uicxd0)b~P#J;&wFn85Yl($2myeko=I|EZZvTG#Yb-=jeTQrgdkzbw26Kl0RhH z4{-<(_n^?76kXo#dbv>OnUaL5e*f_{UMCK-U3F+`-MvM(XkKwhiN>Qw%Ty0$B~iG@ zy+gRjc0=MKXu)_8IF{+4k~fPHpcUK4XN5|)Q@;9y6U#@Szgk=qQdZ+oVQW;wgM9| zY5d{urscsrIWD{BkL$%+)-pGW{gv{2gly+g-p|9jU6T;O6wQzCX;Dq#_;ICo)l0H- z{JfbG$<+O)+73H0hVQCtGW1YRD&#JpH2#ZLlXLQxt&hoYPfPax`^b{>|Mz z9y4|FzN;d>c^p>z_pg^6>(a_H$jGGpc6XdoAm?cKE=FatsRza>zJhN!G)(XB9S{>3 z!Kf6=7B`3S;{$384GhaWQNyQH{$!%h>i2gAhh@pfI&dbM_GGd#{QcO11jinpGVAjR zGtgz{;5Z)g^Q>|087W8#ZHU6UOQDu~o-Evdm;Yo}!uEP;%AV6(&?yizg4(LNus}u3 zjd-E|JVVW{G7fKsXf)kcl==j~q>TEk<8<3Jtb&*@sR-($K!?XAqFhe!q6O(6 zjHZf&OT(!%KNN&ppnRGd9aO|QGox)IwpP$y_)$B zLu-bPt~}g+r5E314+fr9Bu9)N>q_9RlBNuMyWBnT7Wo)4wmLJiym&4q*Hqu$u`>my zgDhD$^2hev%58wuTW{!3NHXn1IQkU}DfW{Q{xAk5IcMUY!wE4QKf1mjG##m<W*)G*2SF*rf)Btd7&h0RI+HJ&W)eS3C-Uz`Uj%|nm}Z@UPx04zukm) zG&!5G=a>si|*&B#CrainwSn5(YKF;PCK_s=I$mK6&!A?%y9H9ryO~;@%~ZM120W zN}hh@M5ZJuEdT!OukRIa-t3)Qn0}L+5>!Gx*#W4yv{ZWXD@DmXA@&kU%gMo%GpCju zC(EZhM>ldV@wCub$`?A5_Dd4?y3YyK0zgMb#;;q&byKRsBfiH-EDd!;B`uom>8D%e zxrw;SGs4y-n9Xl1+d`xE$(AqghTcSpd-(eM$3~@iOzxsM#;mAFhBAu--fOcdxGYx| zF}e$k2k^v$#+C0Y=DNPy+!qS8#WC;|M@o{UxMHDdbVK%)izKeVUEBsR5G8yRp}$y& ze{$sj$&(EJ2I1fXp@#SLY_$$>{p$vm$KvIpZ_{n+^5&8ri!Y%c?Z2wFuitN0!+H(r zOI>`a1#nzcU(no^3b0d@tb)R=5aTbw@4!`={+U(j&Ez+n9)d@l7gsiXMfFmUcrq*) z@@KxWz>P1*W!UF}A5?7O=p%qAYkdbhMd!9p%4BH5LYCfNE7yoSLr>~F4*rkPsfY|D7hfcCROgnaVYE|s zn4yC!({BC*p$4@=;)9ax=XacrM5`XT8%_MQ6Dtd&K$yGt_k!X;&@80UL+^JPSbaJ? z(#hdUd^^JzjjrygY3W|~0pep%li7vRG@p*!sk2d<#ODE%Vm@JamZ(aXvNsT)^IQ&g ziWGOzdh1bayd;1BiaNo~kVbd1.1. Requirements Overview
-

The functional requirements are the following: -* The application must be accesible through the web -* Users must be able to register into the system -* Users must be able to see data about their past games (score, correct/wrong answers, number of questions answered…​) -* Questions must be automatically generated from Wikidata. -* Questions must be answered before some specific time. -* Each question must have one right answer and several incorrect ones or distractors. Both the right answer and the distractors should be automatically generated. -* The system must give access to the information about the users through an API. -* The system must give access to information about the generated questions through an API.

+

The functional requirements are the following:

+
+
+
    +
  • +

    The application must be accesible through the web

    +
  • +
  • +

    Users must be able to register into the system

    +
  • +
  • +

    Users must be able to see data about their past games (score, correct/wrong answers, number of questions answered…​)

    +
  • +
  • +

    Questions must be automatically generated from Wikidata.

    +
  • +
  • +

    Questions must be answered before some specific time.

    +
  • +
  • +

    Each question must have one right answer and several incorrect ones or distractors. Both the right answer and the distractors should be automatically generated.

    +
  • +
  • +

    The system must give access to the information about the users through an API.

    +
  • +
  • +

    The system must give access to information about the generated questions through an API.

    +
  • +

The functional requirements have been grouped into the different microservices the web application will have:

@@ -1025,21 +1045,47 @@

3.1. Business Context

4. Solution Strategy

-

The web application is based on MERN stack, a full-stack combination of technologies for developing JavaScript applications fast. -* Node: the JavaScript runtime environment. -* MongoDB: chosen technology for the persistance of the system, that provides a non-relational database approach. -* Express and Node: they make up the middle tier of the application, providing a powerful server platform. -* React: front-end framework that will solve the client interfaces of the application.

+

The web application is based on MERN stack, a full-stack combination of technologies for developing JavaScript applications fast.

+
+
+
    +
  • +

    Node: the JavaScript runtime environment.

    +
  • +
  • +

    MongoDB: chosen technology for the persistance of the system, that provides a non-relational database approach.

    +
  • +
  • +

    Express and Node: they make up the middle tier of the application, providing a powerful server platform.

    +
  • +
  • +

    React: front-end framework that will solve the client interfaces of the application.

    +
  • +

Regarding the deployment of the application, the strategy chosen is a cloud-based system. This decision was motivated because of the nature of the project, since a web application needs to be live and accesible at any moment. -The server will be an ARM Linux VM on Oracle, where some dockerized microservices will be deployed: -* users service -* authentication service -* questions service -* web application -* gateway

+The server will be an ARM Linux VM on Oracle, where some dockerized microservices will be deployed:

+
+
+
    +
  • +

    users service

    +
  • +
  • +

    authentication service

    +
  • +
  • +

    questions service

    +
  • +
  • +

    web application

    +
  • +
  • +

    gateway

    +
  • +
@@ -1401,31 +1447,10 @@

6.3. Playing

-
-
-

actor User -entity WEBC as "Web Client" -entity GW as "Gateway" -database DB as "MongoDB" -entity QU as "Questions API" -entity USERS as "Users Service API"

-
-
-

User → WEBC: Select a category to play -WEBC → GW: Get a question -GW → QU: Get a question -QU → QU: Store question and answer -QU → GW: Send question to client -GW → WEBC: Send question to client -User → WEBC: Answer question -WEBC → GW: Send answer -GW → QU: Send answer -QU → QU: Check answer -QU → USERS: Update user points -USERS → DB: Modify user data -QU → GW: Send result and new question -GW → WEBC: Send result and new question ----

+
+
+playing diagram +