From 4f155709d30dfa3c60edae842081416917a0490d Mon Sep 17 00:00:00 2001 From: Refiloe-Leanya Date: Sat, 5 Aug 2023 13:24:15 +0200 Subject: [PATCH] Refiloe Leanya and Molefi Bokako --- .vs/ProjectSettings.json | 3 + .vs/PythonSettings.json | 3 + .vs/VSWorkspaceState.json | 7 + ...f8a43b83-3848-4967-9334-1f3ffc308a96.vsidx | Bin 0 -> 70188 bytes .../FileContentIndex/read.lock | 0 .vs/prescient-coding-challenge-2023/v17/.wsuo | Bin 0 -> 20992 bytes .vs/slnx.sqlite | Bin 0 -> 90112 bytes README.md | 406 ++++++++++++++++++ solution_skeleton.py | 9 +- 9 files changed, 426 insertions(+), 2 deletions(-) create mode 100644 .vs/ProjectSettings.json create mode 100644 .vs/PythonSettings.json create mode 100644 .vs/VSWorkspaceState.json create mode 100644 .vs/prescient-coding-challenge-2023/FileContentIndex/f8a43b83-3848-4967-9334-1f3ffc308a96.vsidx create mode 100644 .vs/prescient-coding-challenge-2023/FileContentIndex/read.lock create mode 100644 .vs/prescient-coding-challenge-2023/v17/.wsuo create mode 100644 .vs/slnx.sqlite diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json new file mode 100644 index 0000000..f8b4888 --- /dev/null +++ b/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": null +} \ No newline at end of file diff --git a/.vs/PythonSettings.json b/.vs/PythonSettings.json new file mode 100644 index 0000000..40738ec --- /dev/null +++ b/.vs/PythonSettings.json @@ -0,0 +1,3 @@ +{ + "Interpreter": "Global|PythonCore|3.11" +} \ No newline at end of file diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 0000000..6b319c4 --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,7 @@ +{ + "ExpandedNodes": [ + "" + ], + "SelectedNode": "\\solution_skeleton.py", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/.vs/prescient-coding-challenge-2023/FileContentIndex/f8a43b83-3848-4967-9334-1f3ffc308a96.vsidx b/.vs/prescient-coding-challenge-2023/FileContentIndex/f8a43b83-3848-4967-9334-1f3ffc308a96.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..1f3e16ae65d5ed71d2518958a41182f6e8357a00 GIT binary patch literal 70188 zcmcHCd7R`_`RM;0miw^GUZqmFiC!{WZJa_4-?Wzi0RRUVq!~ z51jrm>W}>XQM-T4>F@S$G3L&motZs5n%(ked$VVI-Pvu8W=Fy7vF_{zLkamvrxP_h z;d+UdpYZHN+fRf}BJvZXPGZzgj5&#^RAS0VOqq$PfyC5QvcHz>ZzcQvWPdx^A0`v& zWTKW#w310HnVOwUrIINlnVL$b7ACW)r0pbaFKGwKAtyOBk*tm+tA4U(Cu_sWdYBw> zk|S<%Bucuqr0XT!DA}}=O()rOlPy2#*-5XR^g2neoAig0evoY2$#yf@_LD&(892$% zNk*w;Bwt68k(-QyDva(pl~dv4YH{HLV|CNvGTCjG4|@=}b1A$)z*-bf%Eb6w{ef zI#W((Drw71TbZByG3S)sb}7PuJ{p(@nR7bbBHlR@0-l*`G4|7n&(k8ZLiKvu$P!Gm|khmYK<# znVgx)o0)={DVmv*nJJr@ifLs`%QCI3Y2{2SZ(0S@Dw(nc1?Lt(dutnX}AX*39M1T;9wT%v{mTmCRh(%vH>M#>`u0K5OQ4W0#WE{7vr;xI71M5;c3|3}IW%EbeX|;x)s9)SO~*8yadS8@ z>vK)lGn=m2^v#xSwj8tNnx1WXzUc>M+cVn}W_y7dq|LxFgN0`3n4xcmkr{T($TlO_ zjC^y{HOJh6f$G43GcZse7-$a+j13G83=BB~Rezuw4Ah1PYW{%Z4b86(W3Gtx_> zH^?oN`y@9*uDD!Qxps1mGGeB_G>v*&dTJnnOrWD%V%W|lP_iRNMj3DrjX4Pa+yLtQz&E##Y~};DU>sXN~UP&qa$Zi zv@*qPrkKkV^O<5HQ!HkRrA)D$DONHiL!T`<-IA3lWizE*rj*Z=3Yk(dQz~UjSoX?aCnQ}2xE@jH)Ou3S&81jJ1HOo}2OeLGCUEQpT}Tv#nH0#tyx%hGiL9%P3k#sMlB@Y7QF?2A{`zQBCF1lP(xny!hsXq^%V>fQ}YgLO!yVm9wn8 zWfd%|Xjvu8DqEJ6ajdMNBZ}N!DU!`v*_@TlTiJq@En3-2iT6?0ZGZxstxv1k=bRDtW6?uqs8XQnD&#t0H9_%aL(6Wi8p!TC!M1f9>*e z<&0d`C}oXMyT1<2*=$-yHyJu*1e6UK%VfZkQAxUvp#!!)Z*sBaA(3Z5y14XU>7dg8 zq<|b-`b1ivA-!R8Gvr#!rIgDgmq5-?PN0&_8gdMM$h3rfBrJXrT73PwtIeTDh`v?c~zP$;-J(>npjOp<|owEZOpr&*ciaTrrm`<#Od*P6{}= zyrF}iJVSC@BtM_e=cm}uzGuCs`AJ-GlfxXairL$i#$ zGOEf`XXwDMO1@&qjHd&q zJdPFV7t+8&zEaFrO8H7TU#a9BU4ZJ8D8s5etVW?=6bnYBV1znJ%0QczHI^*ks@d1$3u7&;;AGb2xh^jx`q(s89{F&ixHX4WU!P+R{D;l$XY~}8nTR#X-3uoGIPsZCqt<`(9*Ny%w(#QnM@`s z8R-mN#ppC31Fbyn((mNFWt^2^R0c{Z;1qL)E^~CKlEFyE1L>G@VPrUvr(GUq=`@Be zg7k5c2Sy$V>9%s&q}NKPls+c~9O*i`O47S7H&t$%+!eX5a#`iV$#tm|i-xYDv~hBH zsa^J$Z22e^i{)amQY;y|!jdUkW&jz7s}p)TcQ zEs&OX33(NfcLrH_8M?UBrK-$7G78G$C_O@2C(Aooy2;dT=+aLYLoz$b7%2~{^cQKn ztR7@>AhU~1?J_sZ)GKqBjG*!;OK*}hlc`H4CmH?>T{i06AfvyGukxTvUz78e;Z;UY zc}fjkROaglA~|Ax+0cUl}y@3 zs7qs6UZv&zO1f!lZ-wx07z$)3nS0J zJmF5cXy{5`pF?@lvCV^w#i+Q>nfL33OMDm zp)U%0hH?(lL}`H>K=zjs@=+<5opQyHHwjsd%6dnpTp9ai_>o6JZj0tuD&>k(cH~1 z1#Z^R7ngW_sgt~}|8#k$9U)$URdR;D*2D`ST>`{w6n!*x4WUbfO5V_yo_Lbh1%ghc zI#X&Vif1yJlk}BHClZ|}bRLVxaqVL9P+KV)`oa{Cce=RHAxTFZ?SS#1Adh{eWat}J z{BY{(Lmwe|Li7R9>m+@&Z0P$|+>>-|qIX(uq~0gJigFz*hQ5u(=PWB1X}65xGNMTD z)@v*uPI~UZz}&g5xpTw0Eqkulof}4TquFyKW7~9k+ilZ>iPm7k8%%_QiD)pB8nond z$)Ft!)`ka%?ZGG*oJ5D zaMB)X+C#oQ6xvnOu2$`;V^>G)YQwGub~UoAi|tynq713T4>iM>{{1$LVGx{ z>$Y8Y>=DOy4cl$nu4lWU?T*?F$8M(VreQa$cC&6bUAx(|n}OX7?PkYrcI{TeZVlNj z$8NRkR@?SW+Z(jKs_oTmuWow{+w*KMw7tmoI<_}qdtJNTw%eiI?%IKE2Q^zxEvVap zYX=QGXxf2i2Z0@gb`aUYgdKF{J1cfrwL`}aN9?d|hoK!tcG$7QDLYEqk!eS^9XWPX zwSH8#B9x|Bc0b;u5f zhMGe)d&qHyoaT_@4LQM(6AiickXs*ey`k+xy}C_jsO1j%%^^P;@;gKR=ult}1^!T& z915#Lok+jwnC!30cm2$iTrar_Rl8laqiWTuR{g4DR^_`j&S2GXs!prwcvYueb;7FC z)f+Y9R7c$ENUJ*HRY&})TdTTG)ooYZu-fRaHWJlFs@gEB4YS&?s*P;5k*hZH)kdM( zC{`P#YNK3jRP=5)n$?D1ZG_dPTW$K)mV8r6zC~24`pv4}s`_5lZ&&@G>UXqX1Wq+@ ztASq)N2^h?8X48dtVV7%YE~n^8g;6jX0_9*PP)~uUtMg~`ct)jqn1e367qGbmQ2-> zRxRn(lB2a$s+KZpMp#QXYi6}()@o)@Gb6ddH9M@?vN2H`a%+xJbIh7ktvR)tGhB0; zH7BS!QOy~xIpZ~Fs^%<|@7LCbQ?=o_wc&29?$lhn=2mO&aLsMiT(9Q(H8-sJPR(~~ zezWF#HGixYrfQ*43kPc9L~UZU)~(jML9Htri=FftEASmhYW8 zg9&G_<_t>blZQ6sY8&1`Cs*zJmIJJ~hGn`u5shLjAkrQ)j zq2M^4~a$1hl@|{-O z@sf^bYH#vtT9a3IywLF?$8R}p+iAN_yXmxjryV-&$eEvX=69SR=>&!om`-3jf#U?j zPT)F0%LzOu@SPxVg3t*fCzx=;gcBy6&~QT22?w>eN|Qt13ENH>I$`95T_;L7k?llP zCvu!<#ED!d@|`GjqR5FlPBi93U1!vGMjdC=b;c9Uc+wd+62fl#PgyT#lov!P2J*V4tx?{u1)Ns-swwuz{Vb>XU>%(qy*!70pV7TcH zH~nG1IqU~Am<1FhaJMh*TL9@Iyi`bboFy}BFLUD+6|H=VlY*L|n%yLI2I z`?4L>+s%4Ast0rHGN1-dJ@D(nWIdRwhjZ&;ryh;eJ8pdm#l=;)Wy5iIJ8);<+P!ZN!(a-iY5G z@jD~_*ht`v1pY|WKN2NIqSQz3DUZq;?G4YwM~h~QQ`G7888?AGdT&2?)NZcT2F zbmFG#c&-z=!%278b%!V1deW_@+`8q~>)P()KD;kXUgZ7k90rRlg$*KIc4X5=;} z+*aCc*>1~mTXnbPx~;a`>gbPXyp-!1^1XA{o2xUDJo=uaH^FmVui<)a*9%=Qa=lU4 zn{>S?*IVNH3D-}$e#-R?*Ed~%uImrFzUTUru0Q4aUAJw!ZO3g#ZV4gpIV_FztqAG^|X+vKm&tVHF!zxnWfr*-RsAHL}@8w%EuS zja;UYvl_WvBbRUF3XNR3k*hTFMkAkTf1Xrcuf@N`*$L*eI16rE;TGX_PaKvehW(8|6ZyTx^s} zjdHm$Xf^D5!yaikPQz(7+yS|=4Y%EBIt_oc5vCfU*$Af^-Jr2#c4JAy>W-ZhovN=Z6F`KfQaH>tG)^vuOPOIs7 zO=o`7kpfZE8Ew}6raPpwmUgK|(`_|fujxu+D3`w3G@4CQ2g0V`Y<8N>iKcJM{MPjA zP2X$!e$x+{e$@0kO@FK@V`nIzelv`k@`Jv}(bY;vzP6g3u-S>46UpX8sySgcCkC6{ zpt*Rg)o-*CVJn$xCGA$yZ6(KB>6%QQt$|u=pxqjXT6R@CsoiMVUdwK`?4V^!;&{uR zXbshLJRWjeLo()W-g5d|PC_P?mXm5ZhW@}u=ZryJB{|KO(`q@M47DvMY&lV@KGkx) zmK(O*NY_xB?Y2Cl<%KQ3*7CiUAGCbg9+l-)tKDq1{Z>0@wWC(M(`rw&!hu$&+Uhi0 zov_u3THR)=yV&bbdHsf$NO=kQ8hOc-m#lipnwM;PNzY3LUNZ7hb9Aw0Rz1^~A3=F$ z;F+Okj(LL_ebnrxXSZbOrb{_psmP+lm8FAMjl5dFS4()clvgvnnyCvtnRawymYF#8 zYBFBSY-)H;)pKe(9qFVp=G8a%>M5^oc=fbSQ1!s8M_#?_xmC~gJU8^*NT2CO=rtC~ zU6(uRH76v)^8?S1Jip`lV_w_z+D)(B@xp``CcQA_g@zZJUO3ka2X)eu@gR)6aLfxQ zy|C*=NiRx!(Og}AMlvOi=x7o7UKHwTwA1oN9dESjO(ea^gf}_qO(ngll-I3!UDxY2 zy>8p!-%I#j()SFxi@s;;`cChJqmzKx@ae826tlYZOu+m7FM{dVNHC;VX04{SfE`GF(zm>;-)(9nJt1bz_t!Gs^$ ze(3n2>xZEqMt+p^qm&=nel()bTqG%7zmxDgrr)XSBPh44)Al=o-wFLraKj!#jk|K9C^e3DCRMPL({BG0ldVV+XyOG}=lOOrFlc{z}J`MRHtKNK5 zUI40XyDo1UZ99;cfwmpBYi8T2$ug+z1iIMK`9tQ0(RS0;g-_FMH~n^VqV3h&zT5V_ zwjZ?pu-$I91E(Fh?Z9t`bK7CJ9T_q$v^&jqCun!Vb|-3&%g<($?TNwmM6Ep$wI>#~ z7c6OahuYoR{G>O(W9v#PVFZbEkeCXRsUVq^Up@$u)gW05lC2==1@emm>8kvsTz=3S zm{BlyZZMe8b+;@KY**f+0=pI1p1knLdrM$X1XW!P2enXt6zt5^cOzM$J2hRSIm0rl z1x`y_?aU7xDH8>btZbTrtb6JML48nfT|LxyDOuFZg3hf6ZZmK_Jxf>8qre>x+#Q03 z8OVU%bY%z&TJkjvy#ByT$hZ)AslYR2EYSBb&ka1unhLyb;4PFF9eGg*{F*GUbZO&n zANZ}n59J;Q{%GKj$z=@!GYIDD3!E$=ZlnL#uhL?eOB z!;u$6VGwl#c_WeQ*=YtHFX)89L^7C&f~ncTj*Ek?7j%Q58wK6P`V;a*Dohxm{zgbj z-@THxFd2l&NPZO~Oit+gqW&0OjvR&qsc>K@9B76EQ8;%%Ube$QD;%tagOj0MmzUVk zZpo`=Xh)$vs%u+)-D-tZKdc5}O@HYlbW)*Xgicz2Ebmmqc*!0*!#cg_l3LD8*1@va zoeG_9IO2yR3q!Xax-A`w6`OoDoNR_u$#5zaP8ng>4ZBV0_+d8+7n)IjN`G5t zwh<-5C@~c!6HzjyZ`jG2{L)O6Y{d_KDw-2STU(LQh|=jOU5(Px(tdqwG@Fs>YpVz3 z4SaTFCn7r)*+yii^|u)8fk?iqVGqf7A|iV@vfapT>Zq*m`BJ_cRZ~$_UKitEv2jw7 zW9qLb#II8F?i4w7dGpaBT;E~j%|tGVyj{qez8MYsku1AMQqhPJjhM2A)>jZ&vW+yO zk(Q26(#u9V(a2OZ($((}xI_Aa>(=x&MHiqgofBL?a-+x{jT%d2Eh6iKsMU--Gx8>7 z^q1dq(zjt9MrF8^0a3=gF&UwvwiC6(NJfevA-@o$-+Rz!OhW0nJ4$Db!hY$LQJ9KC zBMMFFf>Agb$>rA8%kiY5cGRgwoj`A?yeEzM(L^emXh)NYXfhowXhu`XXv&DXwW#Yx z-R+}pQ}4M{&>fAsW6_dSv}8diF{-N@JLt$aK8BK=A+s~oin~L#QyuBZYkbY^IQ<ogr%QFU6$PHU*sayl)y(`w1|C@YLktK0F+j#uq? zwT@TscwWbgI_+eq-R%VFPGEO}YA0|yf!hf@9XJDdcAZW*(g|HTr%t%A6Qw$l*@^5< z}^`jI@YqupS%J36{>?pQK4X1Zf$d&~^RY;VjC#+=%iZ3G%`rb1^E+c_GKm`sdy7mqEOJ+>q{o(RVi zQ{&0RcrrDfbjOp?xY-;ZOpFiO`fVxhT% z6HF%D$wX^1(bgW37?q|?CTo*vYjUnPIpj>%h9~Rpq-#vNt;wb<6X~Sao@`G{M*iez zI60Y^oUARF8!Z@e7Yz9ehUGI@P>&Y4-h!sHpdBm-I}0Lr!D4H{lG#(UXHO+Zrc!gJ zQsz`@?o?`WDm67_R;SF?lo?K$(bPaq;vE;acU&CpxOlAFZ*+$yy4A2-v%B)08prDn z2i+0rr(Sn^naSnbY)-f7##6f8^*XXrktIU6?RVQjx83RL)Fo5BbmvCgqvc`N=Tm2X zd2&YW?x-vQ%UN6zA?u{a7AM+@ZcE=hVzlJWq}UXog} zBxATXgW= zhwOjAf?f9Cb$m^=k9I=+qraM~X)EB0xDx8Vnyv5bE^|~y;Dcn)iayt?4Osu1pmfsEaIo102B;Jd7A7br-T7Ey$4c3w{W9pWpAufl6c{~lh8-zWbEcmwG_ zB>oZcO?Wfuw-Dcow~>Aa@lWthyo>z1iSNOCMeRTL%O5?z2jq{Q&x7(u(;vb|@G*P> zpTghabE4Ms2mB-c3IB|L!N1~bq8|5k;=dEWA!<9`BK>XB-y!{d{E+;Q$p4u5Q(Q(W z*ZP;mt*1DM4Emc`|zzHN!O!y!?RSHoe_UE&6|(8u{0Vh6`?0w-|_ySNkXf{So> z+!Oc4eQ|$LKKl+JJ_rvX{ZKrN^ds;n(ih{=xP<&;iI)-|M|?c-iNq%npF(^po`$F6 z8F(h1CF*rPoA?~!bMbuAFCe~<_#*r!=@%1Ug5SnV@iM#|uMqXPSK?KqUrqcy;%o8y zcpdrI;}1pck2jHjGwHVw--@^4?RW?N1n(5JJwGMB8}Gq;@jm>SsKYM>ZPyn? zEx#)1tK*uuwy5RSC0-xDO!~&6u1z;5eGA+Y6PUuSF^vPF9zTPYsK?7=3FnIP*|#n6 zcEmPTNgqa+^oFSQH;Fy+=ZiW{c1Ry1eFx$NxFhL15${608}3Q^-l867AKaJp{Y5>W zgYZz&4<|lK)OH+0{8ctCB&BzUx8QRRd@|v zi`R+T{u}T|q~A<@E8ao+o%mC{2k*oC@d5mWsP+Gf_!0ay{)YS~iJ!t}@L7CL)OubZ zei2_H{V&9S#nf%Y_lZBif0OJr5t-IG_9wJEV^ij}uQ2PvR7IMfvR8nRr)GkF$t)cj7&W_afdK_aS{hJb?5A z@gUL^qWpG4U~?j(^9C`W&B3{;7C6o{3+>b42;`bGFHyaX@B%SHL@ zyOQ`S;_nfEAAf*1;Ei~bsMqOc;#=@GyaVqP<+JZ@;(PIDq(4CX3w#J4#z*lnQIGc< z;wSL8_%!|we~-`O3-}_wgfHVOqSpUc;@9wR_y+z1|B3J5d-yN>5I+*N-j9htCDxlP zn|;fP`rNO8E8!RLi?|xDfotKHa9vT4vmWsV#9t=f2sgpaaC6)Ox5NadaBEEC09u&C z0+z6X+u$H>hc;G4y&l8FBch&Zv7|4>ui|m!pMWQkezK_Na~kPqkbWkfgOh;tNIj?7LXL=y5K^D?}}SC0>Qs;I()iUXMQ%^}5_hd=vf{Z^hg3 zCwLd$jrZcu@aOoTsP+GX_#u24AH~N+J)b9te~VA!@9_8dJidT0;!F54z9MS9uMz(Z z-@t$1Kk*%W5C4T9;z#%i>f{iw4{&*05my%V_+KPmP1NhLI`NvgHm-x~;Rd*&sP$|@ zycuqeTi}+Mz!YwcX&gWcb6CIZ~df3JQBOJwX+yNKh zj<`_N>#_^+BHSJK#JzD}+#e6bgYi&29FN4sxCD>Iuj28dUY`?)Pa-}UPr*~kKb`mt zJX6&3IGgw!{5qa1#^V8g11}PFzl({#jhEpScqLwi*Wk5yov8KPKzt+KMEWhnx8WUl zC;k-g!Ta!jd;oue58=c3C_aXduKWO;qUQzd;wp?m+)nL1z*M2@$dL1zJ+h& zyZAnSAZmL)BK`#XR%9H&<#9z^8CStoadli1*T!{lJ=_2{#Eo%NQTyFy#GB(5xFseq zg@Nm#zXONJQ5e<5 zzmDhO1$ZHTQ`CAdA-)tZ$M4{G@oM}Yejk5;H{gwU6aE-)#oO^Gco*J{_u|j+=lCH0 zQq*=oO#CQ5hL7Wu_!K^a&*F3V2T|*Lk@zKi8DGIy@pb$=zKL()+xRZNk00Q_@nif{ z)cfDJ65|3ck1OKJxC*X{tK*uuHm-x~;Rd)NZj77aEbPbGxD_UG4jQ7iJ54-*7Ur;k zC9L2!IEdS!ja5v$esfEVI7@nZZoUWQlTm3S3igV*A9 zcs>3Qe}p&VEqEK=fp>~}9q%H(8}G%R;m<|Aj=vy&2p`5r@iBZHpTwu|8GII>!#{{x z|BJ*g;mi06zKXAl+U~y*zk&b2f8sm%9{vkI#EP`-a4*vLCf=8LKir@61My%y6c5KEaWO8z zWAUqaJf4UrbMRa|U)1Y!A%2VWOYl;>9KVC##jEjq_rC%h}xc?65oUO;r;jk{sJGuhw)K-3?IiQ@hN-;pT+0!5BNv?lc@LqCE}Oy6?_$6 z$G_v7_!hp6@8bLTfvEL=Nc<6gBI@;6W|iswz8tQAE8!RLi?|xDfotKHa9vUB-GF#Q z+!!~-S=f)WaVt!U+U^wb)|kctv@nMSEMWz=!9m;(ZLFe$b#$?TE%b3dhSJQxqf!|_O5j7#uX{3;%gC*sL?DxQvK z;@9vTJQvT$Z{S7vExZIT#mn(K_+7kO)a!T+@wIpzUXMS-AK}e-3*Lrz;GOtWQR}~( z_+I=O{v02~U*fOu5&Sj&2A{y+idz3u#LwWf_#FNL|A>DQ^|^YP_!WE=U&p_TTK^lw z|G{3qQn<@DuF&BI^WP9#_PbaTQz@SI0GRZCnS}!wqmlQQN%{@g}$#ZjM{v zmYBd4ZjEUiKugs6v&4BUVp-JdyAAOmZihBj(ZM>pqSn7XHb`%wkMqe7FeJT0JW4!{ zJKzG`5f|dlxGV04d*EKU5AKHt;6Zo@9)?HYQFt^SgG=!^JONL_Q}8rA1JA;<@#}aV zUVs<1Kg_-hp@GPw^hS5AVkZ@E7c*aff&eCrIA`CrO{eF6j$# zC)^o#5%v6cBi>!qBL84K1P>+u2wW^`eM`tchV-uzABV@|3FMzl ze2S?1pGJH-@tMSDiQ2Anh`&z$d3XWo-ypt7)bbaTehKkq#Fyh0_#N`EBEFjVTKoa& z*Aw4}H{-43--fr7ekbu=qMqN~#P{I6qPFvXd=MWJwfw`P_R~j*e~rH({c%zE|1I%T z_%uEvYCX^5bNC1RBmPO$dR``eMbzW|6<;O&b>hE?TK-Ma-y;2=_%^;n{(Hpl6&v$j=HHg>3FX6hlzNqzYfM3Q9MLpgo z#G8s*?=0fYu^+d<*`k))3X`O#a1L%QYW=3D-z9|H_A616>J#N#+Y`U2u9+!4FDP}Jk>jJuM)2zSHXMLo`5 zxUZ=D?T-hFdjAe0K7{yCJPZ%VBk)K(O4Ry}#$#|P9w%!3$BWvIlSn@WPs20tEIb>( zj_2V8qSp5fybv!Ewf>8VFTro)rFfaB<-UVg;rH-5QP1akQIB&2{t#~zb^n`1Eq4p) zw~~Gb>35QT7ygv|dx`H8b^rTGe-Ixc{b76*9}~4bzrn}x349WND{8$@6F-B$BmMXI zJn4VH7f64R_)o-t#=nsM3jUS!*N9&i^}4)4{3iYb-@KVfwf+k6T-=8ALEMh?d1#YfC9V+< z6W57d;_XE}ev8;cAKN%z)b@nLk*NEP5s%{p?tqh`?l&cB`GvR(`MZ+88}aVs??t>f z?t}Y^THpS}2M`}bd@vq@hvH#)I36KtdlnNPEo!~T5Fd+6@vC?o9xv+tC*i52pN6O7 z8RUPB_-x{HiO<9H@dEq?UWgarH}PAdw)YZI+i@B36{7q~Ro~U5UrYLR#5drNL>+%_ z!kh8OAw=SzDI~3C4P+fH~6@y_5YUm zDSR5A5w)IYiGNT0Jib8sABq1&{1X0I)cRk+*F>%FZ{+_S-@rFTE&oq^m-P4Wef$@G zAZq!Kh(8v!{!ek4HKwosvZAIhk1OKJY5n#5}pe+k#Yb#XmhA2$&7 z_!|;$Bx<`i#m&jzg8bRUTM;KPi7E28#xxF)pFvC1wxagWLHr8&Hu+W3 zYoymncZr+ix6nhM{D3&b2s`AD6HkcRo=M^bp7eF98t@kOMD)lj~C!KL@jp_ehV+bOGUl^m*M54e@E2gT}ArUcn#^_$LmSILDb{i zNcQO8zoyGOporxIC^P>i#Pee*sq^eKq3MaSdD(*AjLAb%@s$wO#8IZ$SP=#2b^p zDe-3H_v4o2C&*7?ihKhHNY4=Gut<7I)OJ*e=Mrx#YJ0aMeIDsUq&ql*4fJq6Mxxd~ zN<4uJM7_ULxFdE&Ex(hf$KRFoMYtR8j(gyqqL$x>cwgL4)cOt}K2X$hhmd|49zp(* zcoZ%cwfr%}$Kq1bkH?cpKUvh{ol1Nf@fmoQsP&zL=ZSh9&c_Q#zlivo#FvO#@1>+) zhL__N_#M1b)bdvmUrqcy{66W|5nqo#B>hI>n?!BzEqFWLiFf0D_;XQ@`yl=je}#|W zukknd1pXGE#^2%Z@p*g!U&NR2Wqbu+#nM?)kGHR=`yYS@<6(HDsQ2$ET#QGPe=Hs+YJDe= zeDe7^4g^!5Z zuE&TU7q$IQ;FF|3h0l=wJA4*@PyX}x0=|eZiF%yBh+6+E_*Z-tU&Gf$E&qn7?fnPw z+xVWS^}J8~A%2W~@(;o3e#?ql&kCZJUlCU#eHC0y)OFn2qVBhjsO8ti^>BSr>)TM& zavS5OOG}EQ@-)xy0Mxwm2wi zJ@bfd9KtHrL@ie*9wBasT7QeUP5yk+L()fy$H||-9mt;|-ci*07836y%3ne4TO{i7 z_rSezKT*pcAnJWP5Dy~#5Il_Z!|@2xk0M?yYW>HMzLfN@l70f7O!_IrrxTwcYCF!t zvq?Wk)Oyb&KA-$=5MPKF;WzPHc(JJaUn*+-m*aQHzY@QTSK-y7mj51ppY-d9uNSr6 z8;Nfs|7Ox}CH;2N?;!my;-BK(q8{g7^6w}8=lB3VC~CQ15#LWf5$iQO;OL|E#iOT+xQN?i|^t4 zqVD$r@rRud{%dLW|;hLgepS6hBAzl~P!}W0kQR~@=cww;=PIY!F_Q*@(&VOhT$nDe72~^`8x5r z%@N(b^kX>e~a{g62F7*iCXRh{7BS#KgLf)ZBO4i z)9K5I8ZSq@Jn@ReE8)uc1zbhc{Z=Jj4OhoC$X|!;!SW< z+>HFqaSPIC#d*`4*dKyg}5Vf6I;v8`iE2PgQ9whz>ZYSz-Y~mrTlJ1CF z{|M8*c;}Sduj}`TNk0U-_)csB*J_%38Q$#I)I`J8JCZ2^~ z!?Q&#e=hNPcs^br>hUflzDU&a7vrVmUrzoN#8=`~cn$gABmO?|b@&6kUex+;B>s`8 z$G@5Q$9N0gDr)&Vh<_q#`MZdJig%NKuc+nkCw_qZ2T6a3_*eKaK7xHUnKq$zJ!0qm+>$73jP&e#nN&1&a zUzhath&LeqGVw;l8;e@sX2i3Ix4^APPhgVttdc2CL=erH*+u|VU z+o4VR5LU59{;;U^xukDTdXsb?1M)-SQBjXSjysS(CC2MP;zgp~pWSeG+ynO%_4xY` z?~D84{^TD-d@%80#E0V%c%-Q9T1)^`f=sdyTmE^7PF zBK{hljpyLk@mx{sJD>Oh;tPo{!f)cY$iDHC}_?6Sck9iQ10q zNxy;kM&ch4-;B55ZFq;M_w^^lcj4W5FZuTo-!JNMA0+-I@x#QA;$x&gflrBgoTu>_ zQQQ42`Og!-K>i;|e~I|d_%i8##n(yy8~$C?df&viL~ZXow!y&+7}g3hAp6ua0ZrnxZ~e>x$aW^-14A)Ot4}eG}Y_^nTnDleo30 z$2W)vh%;!Bo+mC~5ldLcim2`T3h{QLw$m21eKo9;KSJCfZW8;V?l+(GfH)$5jCg{0 zfvD#(g*##w7m9lPU5Ixj-W~VCeaYWX)Z-t32a$d-9wKUehZ7$`yqNfCTtfO%QR_R7 z^yBdaJP}XAlkpT$_d8A0hwF>F|AxdHiCS(G(r1yrIq6%Fz7=tj{1nb1KTT}n0A|n<^*A}= zJQlEsB~jZqmv|f876(PGXFK9~#6zO)=imtWE^(8%g&z8%);FIxzz`$yM~TO994BxG zoWunq?u@(OuA-LT4fh~@PuvUl#(i*K+z#dtI>5w*T!iI<9cAC4zJ0Z%0T6yj4w-S2cflk~IjYowop=aPON@dbDxeiJVi z^|`tPzm1oYe>w3L#8(o37q7yr@f!RdUW?zy>qI?|>xpl`AL5PpBfJT3#vkJ?cq`t9 zx8oi76TB1e!k^;Zcn{tyYWsdhd_Vr2^at^m_$%@s#z*i`{53v?zY(?mCq%vPPZ2*O z>bl~2QSZke@C8xJ{fYP`QTKnD_%GzYihm>h@A!tO<^MtamZx){?2KZ&%5I4e&aTDAW zH^W)DIrifgI2*UbtuTQ}OyL~d8VyXNi36BH3$vKRJQlEsB`jkFx03&~O+U16#MfOn zPSY<}Xt=y?C1XFmVP--zbw@+ap4to>oWbavhFcYxBB%UeO%Q{ zeerH<_R?my=IK^VzrX+&3th-I0Z(MpLz^)2+CJ#0QECPoJe`EUQK02E`XKu0a2bi0S(l zx9_sJmbhuUHGP>hjIVQiM$@MiwflKQ5;SiVvv+MEpO&^mTM=op|8Utz~p8 z{-S03mep{cZpm+_k)btB7nwJ++gkC_G(-P;ndwUPKY;3+Ka-*VpAmh0CT*6cwdGG= zq+9x@Z%zFgA8n~_#W$dL$hc?6w<13M)8f;L&vIrf?vv9uRO_2=ke!IoX7w>y$9BPLC-#XJLJ-vsf-J@yqbgOrD zd*`;i=6>e1X4*G>1N4mI<9?=*TGey~x^FxLouX;)#|PI6`ZatZ4t4AQ`R4U5UEB;k zczi?S{ulQ|J8qDEnZ6&o$8>Id=`@V{Zv05j(sFU`bO)ZA6o3&%J9GtG!k=0A(X7q(aAGkf&P^|og2<&v3OF}-iE zh;DUfa(i3xGZR0O$Ij$V-(TG$?r@QA{dOidPMfc3y?x`YxLhyo{Fyy^xhH5^yl>n^ z;|KA#nl?}VOh1zGmV9SQI-F+2&t<$7?^e(ZN58DAxq9N$_ct!57m_}%TPMyGk>4cy zZ1r*2t3E#cUPq6sijNU*#Vwtu6==8Wi=U(TxbrkzYo?KLhDM(mx#DL_ehl#0k!GHT zy_U|>UE(n!KEb$x_?d3Uf^%GldGo1<5fHX#m``*hm4=vwr=$v*y)4M zG%X%V09-QwfM6G7an_)FZ< zcpQ&Mnwpl2FVlak<#TDhmd0&as@Gt;K5g18{jyZ+>m9AvmU!Ul-HNzKe9KmjPfK@; z!&z|!|K(KUZt<@6gSemS|86+FH9c_a9`U#qKV@-|_|aHb(iy#HicAj*8qSGNL5obM z>A^MWGqY*$ka5j%eeuELjv1%L&(Y_efO%R=ykv@(DW4g+^tiJ$SN|is&&+DmEzpeK z#4=06&u3`b3p4vJ)o{9q*8G_RX-2QyEDgIeyTxJry!EDp>B8|1(8AM`>r8W}b2a1B zxE9^|Kb}Hw-?%~l$1|F)O6!Yzdpy!ir|EH5)?-YMNHbxt8Pi*uaf+7v+-}q1OmB*- z>g_SBx5s~O^@@CE4=pl%3cB_5%tegP?Q=_)-X%$D;a;nj_Cnq29VpJ24mD%CdfghE zxz5wIXj-q_=hO5;EY%{t#Zw&i8a}Lh>0H{3B{PMOjkjhB z_x4>y%l#iK{dA^+|JJlwx^J&YZ)>{0^m6sMm-WKlmS)V-u-AfKEz?_{E23fCZKpe- z?%Ug=SBnm}1Y zLU$XRY0I%QTfGDIwt9!0z6&!4>Rp46|4Rk&1Qbu;v-D`6uTS@wry0{LX$|!cuW7o~ zYyG;Kv#uU@mi&qT|K7fuZpAZGJbcCb#w)FOc8SAyp)^m+#qVHo?~Dt_>y6$#J>5vH z{y5$FGqa?I@#r1Tx^V@cn+)Un;#nx3>Eh!~U#57b(+c9Le3oo{<{JFB3)Z_rpWm9f z;?uW6!+7XBRu327-{}lJM(?J?ryu9`(s~udU8T3%r*Ty?m$;YF+v>Hsw>7<+9=Ep@ zU#8w}@db;UaqQ=sJ9ApS_VsF+uHe5k=<~Jc!KVxVXEUbLW)8VzX6w`c>sGJ&-q!zp zkLla32k*u;&s6`yf7yEXzohl5@9oiRZtr6EE>rJ7@x`8gQsSCt`bO_S)4Bh7ae9aB z9jKSqJELBMdbz!=&)n&m)9N*{x9_ntxxIaRX}xmYnR308?(NYl_y2lsy?y`N*8ghn z{#ESEmMno^E?g+&OkYD*kCDi#(Kz!6nIQRDphA|&r)Xq}law(CS#6G)$STU3M`(Ne zi>xA_Vkj6WabEC8TWo;w7*BJ#xBPCoByxwfAafDH>O{#x?_)guX5{M zuJ2ryU$_30|KH7Xqr1nwL*1QX)UKELZQSBDKc6$X%(BJ`F*H&zKb=gY_9OOapMFSf z`mOF!GDmwi@(7K0D?OqSML~y4_D*YjztRzW_r4t1eb~MK70~8Ux5D2rPF+4eHLgjS z7NBRVd#!za%cXWhC?WOtv~+87lvcIhmRimdFW&t|tJDhBZelFShODt)Fm-uzfZP}b z7%9jXsrdVKD^!h-_L^3!+d!wqtJIPdxhVCmcBDXEhGdN^y*mh0x~J9NtW@9o-TSgq z_bMG}9}Yauk+*Lj*0^p*dw*NIhWvf^O6atE#XGWle_&VN=g}(cptufG=UGPUhGTO3 zb@j(>1~d=1qt9mZQ_S9{{jJ|`jN^O1(lAJIZlmZSes^XP?al7hZumXbo(J06w=Q)X zX@~!`F>2BV{JPr4C}^dBTD$v|idWwwZSATZk1bPaG-Rcl4OzQ_o>p7fK7Gm6~)>j*_mn)VlYuc$G#QMgBc{50=pB z!0l+Sga$NtM+5vGULJqt3ay5tICT^kQz74Rl(l4=YvM!glZG zz^){ZQ0iN4J?-K$iTo7MjJNN0t;U#(lpN4i%5osVj?dAQteqnO`_Wbe`= zdl!-Ty8rqy?{87~kX5PFzN~g=92}BnUbjl)76$JYsvgx=s&DPux0^*dt#nTEX|&(h zuF_Go#vN&I+ZvZfjjR2(bmTF68>l8nQcvS)Girs7YH)d4zF)ihmBubh zN3x2Be7nY{mBuYu)}z|)RVv+wMY&n2saD%Alz8nvtZzN;cdy7z-){%ceu%4YT>tdX zd0s~H#_kV9M>pI>?EYmv{4{a)V{QpGP^ta6bZgf#m3VzC73IqTN_}hh``Q)de)lTX zw;o0DCmE*m?fRB;QMy-@(|XkI;s0`PSnUP%{=lv9O`-6ertaM@N_{`<-fj9@lbcmM z97we*K=&%OE=BnrULMBhbO8Tl_r^HX8mLeWRH?Q4by41}bhA=pd>gMRRI2a$#Vdn< zI@qiB?P`niKXgs8#_2_>cxroW53kql+{Z-w6$+9N?Lrbt3aYrFL5B+j}<$c7Leo=m3>B~y}Aksoqd$V?pR+R2N z9N3+9uiE;)TWzCNs>etv(?z;}vu=gD-@RW~>R#>KSAMD-(BReXd3<|8Wi>xq`ds%s z%lU;`G?!V{xDvPKampG%1KsT2!%Ed2NwurgRFC$4TjZu+QgqXt{z;++=* zU8S;mfRd0t=X_YuQH0g62YaX8t4H@5{4KjY^6$~dg~H!2RHZhrd#AN~SgH9QX-mA? z`}O^{bhCC}R(e>edqsI3tv|c0-AGaRqsIv6|Had7*1svbjg6nY`YW@R^Cnt%SQ#|S zN@Z1#q718WsdQT8?tL5Y$nN(8l>6N)=c8!Ft4HUc+Q#^>$nRFFZzbjYbxpnvTBy?f zeSJ%#+V0(~-9@Tf29@5gN!=>_w%U4BTdBc^Zro&9lXAXU(6=j9J07_JZomF}^xrw} z*SMhPdojts!$BHq(Hk~x@Rci3M z74-dve7jP8OSe*e&nC9;W1MdJwfbq1kGRyW$la^-Wl{Wg>uiwf+Z)Lh-mkVEr`@Y>^EmRT?-8qN9~QZG zr`@Zzchk*kKdf}*alhJ1zwcf>s;yMJhxI6fGHvFyE6QnoyLTi#tX<=N+wRMHl*?)N zidU5GRXVLl?QV9jcGWiSZwGd*Mm;JyJ#}lUM}bZU@P(>JLr#140;uuZh5E8m0V>_B zw!W=y?T(0_*0<-a(udVH{l+MA_l{zeOQj!!>@RQo^`RfVvho)d^F7Ee(}A<^-1-Jj zzeQZh9}o9?MV21Eb>s^|{Q{G3EL{ek)}P1yLzW(0`eW(&o=8}I_6XDYGP44 zhrd$xjjBiAA&Q%?H_i8eHc;W`uapCD6=TJb+YedJcY~tE*`7arR-9kpMXQp&>+8#! zw^1O(*k5#e_=~|wAtv^4@dYqTHIUnI4vjzOA)2p+GkKLg-#!x(Q(v%}>f*d^zLMo@ z(vUBn2A^uI$LDAT^57w(S23~tE+&>WQ94k1saC!rZ5WVz7J&K6SO8kYvuKjJjIpT` zvR!>1-#5w4m#x+QQ}$HXx9!lFM-*+SZ`+L`0C(#)#mTZ?X)|2vEDwG2A8x+yvWxfQHV)v-Pkb^qvIph^246V z%kXO}`iK4l6|EQ)zFe;M7dUS@`xW)_Gd{y5C;;l_gieJPYP1_tApEokfb%i;P=cQo z+hKABK{)}kd=XGw&aNP1CWb7pwo#S-ub0vFTSkavGCkL&pQKeS-D;9+%k=sHqH zMFVCp$lS0xO5q|grsC?ChZwibvVwwmS)s=6B6ccnEU?nDN8=Ot7YXSm6r=Z5 z;eU?Z$Jn_``m$zhETE{>SwrvQ`|0byKiY`>*2R4_b+(5~JlvhM@Ko~0_WE~8bKP7b<# zFQ}xl&y+yP!~3WoKQyJqR>>(uj9-U~^qp=sm@Y&+C00K*SkC6)f-h~1uk(<82W|qz z#Jz#l*)c$k+XUYjZ-QsfFc_a1l{J}UV%IsHNsI~h6pz{y&d!JNR!(0VnY%bpK9{(R zuzI~vY6S{s$VSf+l+n{DH8^XsYPb}x16q`pL=60t)Ai~WeMBfJH~}*e;jHKK#aRlt zD0>MB700h88uin*tQk#-qqqujtT26L8Fv5Khx;!#YAbWFMvK*91lDRM{mI0k^Wr<&JB<%a{5o5T-m{#US zVGsPLn3xSm zLp83WaQvV!Mh(;(piBhHW6Bh18W59K$i;}H?h8rVngSSN%?|$mZj^)Inn@b%}wbhPzdP)?XcRU(U^xAj3dFDkq?72 zCamT)3_mi9qGGeFD=6W>cuM1)de0Dg4;6|e~$5tSwJsP%ihqQx01{5{WOG~Z5`6|(7 z8N3%+PGJ{b)pW~5aJvTY5j&l>_h#L2x!q*+trM$E@;yIC@z7O)&Pw9IDy(D>SC^M@ z(}1~9p5~#UjJchS)RZa2pCuzG_6*3~W;yrO)6C7TtA1Do<$E;<1JT@TM*bqcDt;9c zClB30iPmh)&}8Y#)!!O-vMIFeD#l`bj^qNJ(g96071Dj6^E!$4RhVke?8R8YFx4`p zqg9vot#~c0KpLgak0y4TGSyA+BG==W*clLSXUIY}^PUCWdJ`!81~1EL@=CXnyiJwq zE=zTOmS|?T*B41)!F%9*=Bp{@bkY}1pcK)m(3vsGp7u!QVvXAYq`0OsVG``97wGD7Hc_Ifz4*yV8%1v`asm|7As zoNh0)-b3>~3N=T(?=3GhS)z6qljovEQjK{{WbadgyGo@h52>mZP@HLBK24!Fh-AEM z(A7LwpR}$v2F{>p-82HV20p}~aUHshl|*Y1r^Q)X{u7Dd_U7tKZqE`INv$}0R}9mb zOy-Gpou&G{v<%9lJhJq1kQQUD#Xt&ElAwSWQZJtcPhq9-Q=?Tl%mA32IV4$vmyuq| z=mi>aGZ8IBN10vg3`HwkzOMpsmZcPWqGSohm|>t0HBkdh$5{GdHSCw9rd)67K$WvD z6x3i&w^Reu^_5^prQMp6#KR<-PIi*M4ZvlzvYgS|rP`ZVd7vh@o=b%0WfQkISS8i= z9KaAqcMCB?V;SG01FI=B!0|o06l88TB;$5;YQgKwOBn^g(s6m7y^fEbKg*soa~)~U zrM>vR3e&qtGEz?bu0Ta=Sx`yq+w>#8Gk@_=&gsJ6twHSgIv>)Kphh)8(=M(yN>Feq zXqntBe+Ui1J*G2ZaOS3_7t7fsngal6(7Fkg#2hGb`&NLNrUcTDF~()ncN(WhQ8ejE zCe?8BzocE?pCY-XruJDXMCVjA9lVWJ*_#n~!-cphc1YBoFD{ZXj=zM=a&PMezYzRpvtNHwCZP&xOKR+=Q&o} z4>a&z$GwC&_rlOgg(T1N%giJAMCGPjp+QYPy{VG~7KIO#JYXXCp>t;{c z+kj5CDVdQ^sw53nD-}|@7h7jsTr!V-h7c`;Ugm+M17WFe28pj8c??QCMjMoAS@x!C zk^C3C+hw3k=1+-vO!_fV$*EtK|FBR(N(PiUXd#>cG$5-fC|Np)=t|+b$l;98;6>px zLyM!t`032&c&PK)Btnslqc(MxQBwFh(yKhCzZ>WhULHJV8Levxo`!x5%Ev|N=!x6( zu|I2%v!E`wLFp$!D6Tr#ZkKwa^qeGkMRs#8AM_XKniYe9%e`bm?*Zi*y*&i>U)P@9uzarp<&i0!DxqR z6e{$YhyF$?yi~n4?xIz&i<;P5yjQ_l%YK2R$J|QR7!2c9q6Kez@ zb0f`iLC^NoV3I*2c%Lf8Z9Jk-PSlLlocI`D$#RXo4b;F%nMTE~$y{d%MK50m;4XU_ zHTPfe+BbH%{17|G)P!|*? zGW;?c-zc<9(yy|d)7{o)Pc(IAch)0X-BM@sqGd9liU+Tf$#(1wx<|EU<6}I|-UdMN zdl6Q;W!7$&u8@;uOlVE9gUDBp*bUwI;;d>fp0)>+q(xJ@i>D?E3(A1-m}HQQ@#jc_ zU+mt`D@{Xp`BJUoHZ^T-*_#iBF?LI}jk@5{H!6~`^zq1C8EVPk@_92?=ZT9(9#VLe zOpKjh$p|h5-SSCB7p9WB=~JS*!4}) zmWeBK9W3bcje(zIV6x}fCts|zjDm^Jb?P!uU(Fu>$MJA6aPpWJ{nnX>+zjS-VL*Br z6ET|Q_xMEt>P42%H`TINPPfl3ygXW$7XgsDo?m2nnaA@y5V~8?^SdNaf~&!NQiz*D z7em<<4EsS2Ub#3k&*G+KLdyJA_FM(J^=fHMD;CA=XuP?Zm&;Jo9^IcKz8-T-h0NZw z7)#&e4BaTWDUKMp$YYS>=3w{CJjx?lFFrMx<_WaXz}MG!tAR3gxMo;G7jdW7#40iN z0{PK{){SXY{;~;TZ<-nivRVytVwCA*{56Ng#`$$jxCySh>Nis9Mw;=C#{ev-DK>D<>fpt0QjK(eRb}t503wY? zVo2s3C3Y{P?Hrh#o*wW_o(GSeCKt~sQ#x+#!o@Op)Q{|eQrI^BRTP#+1#yL)8ieWX zR*kQtE7iNFptKqV3Ly`QADVC6Gzxne$xX$5+Vm6iDA zhC$C&+;N#AGTt8f@PwZfbXDVJKCEJl_?)N!{0M-QsRLl|P4c<8 hlKv-|{f9r~fBfTr|HuC{!hikG^S}Scf1CgPzX4v%n`Hn1 literal 0 HcmV?d00001 diff --git a/.vs/prescient-coding-challenge-2023/FileContentIndex/read.lock b/.vs/prescient-coding-challenge-2023/FileContentIndex/read.lock new file mode 100644 index 0000000..e69de29 diff --git a/.vs/prescient-coding-challenge-2023/v17/.wsuo b/.vs/prescient-coding-challenge-2023/v17/.wsuo new file mode 100644 index 0000000000000000000000000000000000000000..ac689b581f27da3fc45450aa943b1fb072d703a5 GIT binary patch literal 20992 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 Iyi)Z4|KuX^U;qFB literal 0 HcmV?d00001 diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..77190fc9cf5fc906e4378a87c14095eea8da1858 GIT binary patch literal 90112 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 S00AHX1b_e#00QSu;C}(pVMZqa literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 6f9e21d..5bb81bf 100644 --- a/README.md +++ b/README.md @@ -181,3 +181,409 @@ Assuming you have a Github account and git installed on your computer, follow th 3. [VS Code](https://code.visualstudio.com/download) 4. [R Base](https://cran.r-project.org/) 5. [R Studio](https://posit.co/downloads/) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/solution_skeleton.py b/solution_skeleton.py index 7fc2fa5..141f44d 100644 --- a/solution_skeleton.py +++ b/solution_skeleton.py @@ -5,6 +5,7 @@ import plotly.express as px + print('---Python script Start---', str(datetime.datetime.now())) # %% @@ -75,7 +76,7 @@ def generate_portfolio(df_train: pd.DataFrame, df_test: pd.DataFrame): list_stocks.remove('month_end') # <<--------------------- YOUR CODE GOES BELOW THIS LINE --------------------->> - + df_weights = df_weights*1.7 # This is your playground. Delete/modify any of the code here and replace with # your methodology. Below we provide a simple, naive estimation to illustrate # how we think you should go about structuring your submission and your comments: @@ -95,6 +96,7 @@ def generate_portfolio(df_train: pd.DataFrame, df_test: pd.DataFrame): df_w['inv_vol'] = 1/df_w['vol'] # calculate the inverse volatility df_w['tot_inv_vol'] = df_w['inv_vol'].sum() # calculate the total inverse volatility df_w['weight'] = df_w['inv_vol']/df_w['tot_inv_vol'] # calculate weight based on inverse volatility + df_w.reset_index(inplace=True, names='name') # add to all weights @@ -104,6 +106,7 @@ def generate_portfolio(df_train: pd.DataFrame, df_test: pd.DataFrame): # <<--------------------- YOUR CODE GOES ABOVE THIS LINE --------------------->> # 10% limit check + #print(df_w) if len(np.array(df_weights[list_stocks])[np.array(df_weights[list_stocks]) > 0.101]): raise Exception(r'---> 10% limit exceeded') @@ -170,4 +173,6 @@ def plot_total_return(df_returns: pd.DataFrame, df_weights_index: pd.DataFrame, df_weights_index = equalise_weights(df_returns) df_returns, df_weights_portfolio = generate_portfolio(df_returns_train, df_returns_test) fig1, df_rtn = plot_total_return(df_returns, df_weights_index=df_weights_index, df_weights_portfolio=df_weights_portfolio) -fig1 +fig1.show() + +