From 8a3c5af84290d17dacb074f23611d106daa34904 Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Wed, 25 Mar 2026 22:18:09 +0100 Subject: [PATCH] data(atlas): update systems.db + add atlas tooling scripts systems.db: 43 North Reach body catalogs (hops 4-12) tooling: atlas-verify, atlas-names, atlas-systems-done, atlas-helpers.sh Co-Authored-By: Claude Opus 4.6 (1M context) --- server/data/systems.db | Bin 425984 -> 503808 bytes tooling/atlas-helpers.sh | 146 +++++++++++++++++++++++++++++++++++++ tooling/atlas-names | 15 ++++ tooling/atlas-systems-done | 7 ++ tooling/atlas-verify | 93 +++++++++++++++++++++++ 5 files changed, 261 insertions(+) create mode 100755 tooling/atlas-helpers.sh create mode 100755 tooling/atlas-names create mode 100755 tooling/atlas-systems-done create mode 100755 tooling/atlas-verify diff --git a/server/data/systems.db b/server/data/systems.db index efaf24b16a9803d58bf4671b23500395221f2c3e..5ac1e0a86812ec3e410f87ba38ac625c4750b84a 100644 GIT binary patch delta 90281 zcmcG%cYIYv^DutSp58+zL?CpKVhSmA0!Wt*qN0%GrcnZhA_8)O3krx-vOl#}6H9Ijd>NT<1^c7w4k$jq`=`vGcBT#(Bkg$vNg6bslr} zIy;?h&PHdwv-(iR#haX7z<=u$k}fRWf(fJL#EhtB+)xxWv0nHSGFo1HBCw4HBVw$@o4%$Lmq;}7F5Ro7qE3$%Z= zdu365ov&0UNv^U%$&^nC=lJWz+qlcZe4!?Jgt%{XB|X-qrcFsIY*;UaYwOffn$=6! zcujL}Im}<93X!tuGxE!4R9=68|DN!j*40SMQVXv@R>y5(3$@)1kMTWt!F}&B{sAJF zxD&1sQq)Ox>otVT8oD>1<7>MqNBDlVglQF1XO~UMpHY-w6C-Q!?gKyYwcHU;@ZD<0 zW0ilo2(5>kBnh=EV~6>9d~Ge8GiY{DxA7Jxc39#8Px4*Nc;bRO?!sGy2JRh4_&1E=SxUQcX#le zq=9?pINzHWD(k$+w-7{qFjrpL{RD3l(fk9xV%SOkpp-j>OW}21Nmn&8R6L_~mpVBs z^_~1|UYB1{w(3cuXl^&V3aat0FyE-)KQ;_)mpDnLlo`%8%dR*YHI6*1h>nevTlX;M~0XNnN#QXuV|UlN#>UANV@1dNv`E zJLxQcV@+ujr?+b5KmkQp zR|;?Q>-d_}p`zZul54P3)(5NJg*GDV-{q$(+IH>~RL9Lb!PlvT@Y_Uw$)Or)3yC_d zf4yW{3tG|I?iXkI!8OF->n#2Pm&!fvDxdOAQVHQ3tI5ja%5dXt?r~X_cJX(Jv&GuN zUa3EMos_}gpQ4sd$I906zI*9ceD9j^#wspnk=ViQKjV9aMt0FGtb08--Grab_Rsi1 z&4pE5ZK$;aU6AE{U}LUm3g&@fD*Yk;^BI3lxI@a$@$VB`p2SJq_&J!R|5GaZ5=Ye5 zFZolV(upgpoca}iucmOye&;^ve%HRpcMz2!;=anB7x~%(5r?|Nb4Xiv;m`bQigYVC z0S2dg`ggvbJLMAJTV7b7j#hWrousZi`4Zm^x=g>!PZgDcTvK;*C12m}n4UIla9%+a zE8)-|dmVTEWxiXuw*Ow{hwwGU@eAt(ot%ZA^};2-9}Mt^f8}F}SOHz+6@B%;{Agu9 z=E%D2@V|7pRQ~!epR}NpSEG6RCV|F zMP#Zer*MS}yRrIUw;Fem9z1bR#K=q{?st1ECO6lRqMQOhhw%#sA*bIVId_mQz?!s# zK(jUAirutTB)M|q5;C6`^}o3M%0_pPj|I`Zz+D4_Ye40IJIRB*WL0uSP^CBc`Yx2U z$AXa|PFdIm+pn=VjL+Uh285>6$U^Ve$bMi@Kur>Swy{HKWEx6W^Hu#ly+W^{J*?%a@2m6Fn#zMjGkQsaI7pu3T;=v$O@0xPm7CU(dC;<7x+&|(Nl}{SeSGJOK31)>5}kW6TE1zgTCKLdYbWHThT&y)dfDqZM~5U;jf1V98;rsVZ`ey z`itV}uV={p_Q$h@9|TGKi7SGi_9{}}?Ij9_n%4Gy z&v96^h{K|jp=#a=TVE1}!oV((gcAZW@2X7Kgps^fxNvU0dN3(qU)FJZi$eEsV}GLy zQ6f4kxX$hrOUTwL7TGwzu`#^M5r%}uaAkd4n1M^*40p97%&-OLBCXPNZ^KeqGfDW^ zX$k?Q3mX8uE&^ao1_3BIuK?s`Iu~F^^GapSRN<)85dtP#LPOGTU`}>!S^G@>CI}g8 z2+0tVm75zOhk?G<;N;T^ugn!LJN>7w@ZJCoU% zo!C|AgX?K!WmjQf?<=)dTutS7qU|-VQ~zVh<^%Q&cVK zVRs5|3bsm%D_PVS8F2Ne?FvhU-YN0l>BL11X>2lGk-friyF(ZeD!lUFRf2RedQ|wD zb3RqRRDQSiSSmUg6M{yb`Ta<(1aIr{k zEN3cnl~vBo&H>nzu5%VE*D90j|JuK63$(4;TKlY$rSw;7DJ`WxWycy|wXwQbnw4T7 zv|rS2(r(teYD4YlR`~}-uqjH;d*8h%?1I$RLtKDi$s zXCuesESF9ldj%|yK`v364Fn?7p&CL9pgUy+EC;%|MuPQVQ zdG@iYq{XYUmsKUrtIDGuM|M^wWD@nhd5^~eVTH7yM?4nT7zE|)jt3PKO~!`W{K8dDy2g&xgDWa&zN(K4=S3+SCw+EIU}uLM+=^#d6ay%WaG!GdHN%1B@dx z7df`FdZxuWws;&J({izt%{~Y1Pxk$re3lGk+2}QNW@bkG+wS)onucLP8$6zj^z3+N z+~@JoFzk$by`pk+a)Ro*UP%yyB}Lc!EVMVg&bY^C@jByfj{_#=fMcD<0YR9_TJ}Yu zo>;>^D90N)tJw#2>XaU2vWiwV+HYVc1QyU?Z96_uG5XSvfW z3WBgQ%RLTQH-eIuc^nXg97|ctWu@h{kNO{d2WvVA#DZ=Qnm7J~SrRm__j_6F6_uV7 zZ<&}^6a--hEb?+m&&cf*)MlZV3k@r5ABFE;P)lgb!_P21)Rj?3Xy%8}O3$w$v;sOe zC&=eEOK9wc(E85vQf$n@z!f?#}B1RS)DGj0Yl>Scg!K8;l&KD$h1RmjSt z-%#%5*fA$FsKOL4M;b)idvctl2_|_7GP5&+sdJ*oL4znq8O*=*vof>OgFY7@j#DfG)$txH9+5F3MnwT zrP3LLd_y;5#Q6#!HwT1FUsWb;h2>|2SR&?&H;DbjJh6+IEY=b&Q4x9JPvJ7`M!y!G z5Dp2C3J(hp2=@!igqZW3bI954xXwyvi8IeBcZ!S^M!qphyhdyL%Z9%vh;ik$d zJH%TJD&Z>*zO;mY2IvWtfoR@-_zdlWTb!SqbIzH{n)}6LPFDz+LX%9JoL^ovgY*Xa z#yHLG2l@t0s6(bqom$S{O|#*hUjTBGoL?&KW8(89DxZ;Gk&nqo<;Uc`@=kf1yir~+ zua=j~i{<(9Y`H?7EKiWHmq*D%27JIv{YIo&68$H)1-+~M7l{DD~*r_OMRsqdP<$8 zj#3AywbWF)LaHkzNxCG8|A@bdKZ)OoUx}ZJXT{gV6XNsYQ{rK9zqni6A#N7$71xTl ziwnd#;ta7|EENmHapD+pm^e`EBX$>a#SF2X*wQ`yyf`f?za$sS+0q{IeQ|{(sDwBO zZG;v=6QO}nN2noG5h@5}gc3p#p@5Jeim^c7Fgz!OxFi}7VOcVfNq5${+!mU^UOb`$P69m9bmG8bJHqxT-yPZe_ zh)JdKN0r++=YoEtKFpqNPj)67PZ|4+ZN@$J1iiPOt!z{7u}9kjozI~uD2ziQt&1Dx*0awBTYa5A)ywKLjF+EMji^(VWv z-O#RSD^~O`r=`=tD221oFr$y-Xpd@J9YI^C-L8J6zHj|#ePw-Mowi=Ij>55UhjpK| z(u!HLttnQ4b*=iE`n-CLnr98R@~kX4)-|$f8M#I~BUPKDmD|5LtDVJ`0;jkiR8jd= zE6~QMht=I`mfFUsW9a7R<~!!8sQIjU$lPge(*Mza(!bK**I(10*DLis_V>oi>SlGV zea?QzK4m{^A5t5tHJo3SCzXB9Y;&!7hdNb_sMneE%$v<(^9FO6vP`+nyxQz+b}*aT z58LDk=j5dOH&1m`L4u`qE+7wXZaxKkE)FpeHT zmgvA#dU)dYvjj-&^RrFM=Jtm0M;Q)lJhvx=Kf-W0F>$*?_%2pjP8PQ_jy@bmA2OmS zc1eXZ5ceQUN%0+i?tpI(;oE#XGnacHgl}ayoN~A=A$)UyXK2FZug_ovwLw%!o*^h z0URv2SO{OlnCNMOTNox5m_kF?*{0&LA{r*<>q0V(fy2aYAO`gDc|maY+&DVNM>Dc+ zjia*}3WtMR;^-_xNTC_iL&D4uJ|l!rkK=h26o(TaO^|nUC}NtQXI9?SI9kp)=x!hO zOIQ@eCx`G!45u6Xi6Oi!z|(U}LwJck%4-bRmKL+304<865x?o^_PsDn6a)lpAoIh- zgvyscfcvN~0 z(?@Hq<;qj!`N}uSpPH_vI4k_gUHwk|+iBpm(GTjc=+8O2dRqNdeM~*ByrO($9k+H{ zPgtw1E%pWbAAP<4kUmFWZbv^+*Q*cPudB1wWy*f#nE8|WxwXWaV@&$KX2)$e{P{*m0?PJa~XMs7%yu+L;KPVqo zd#b~f*~(J+6Zr={SMO&IHOHH+%-&{>X_;5(NqRdyHL9K0MeR53HSHt&fKf*or%bk8 z`yqR-J;}aPenEcI`B@$==Q|UOpG~5qfY9(t<2B>F@saVE@q%1WZe?sRb{X@Hm3D7? zyggETOnbrZXcQO~YIC)twn5vas%m`@Ij&NAD#MKa#qnnW--zjep=ZTZV%7vea z>qR(9Q(>7eV)G|?pd;K9NkTJ-3xsR_L{9@ETqR4%#A^Ozp93;A?s1mV7pVCYJ_^&g zL!KA_C21hy@n?OIqj3kkgnN)hlK%8y8h}w#bMlLR?Rf;fbOpl9n&%jxs6^!1wt@?kw6I; zx50}I#9#hGfwC{|UiKkW@D&BImcLq1u@|@AkMu+x{)&+c2UG5DFU}Ws`Ktz%ba880 zW&Ji}3kNJBMcisuSzo~AFCHM=il!HED_OKJ+VWSBOe)vnR(KivLM?w4p%N`_xfkb) zv;38W%CfkntPQ9jiwY57HNnM%t|bxfb`~3j#l(wdD+)AGuL!r;%h(rQ`Kt<*TycxM zq=DGVUs+IQ#Vtq@TEH|PmshdX1p^A_d*TycQgxdS8w}tEIx^3X@`O}umC4P?E}X++ zn0ShAF=xT(yKWTGav3{lZjVTo5X ztUTCLY$c+i61EaiG{V|FkS!H@seHjwfgcac5oY79Nh(ZlRHQVavd*{S4`R)uvckb; z{{!_YwXag3^p>}|>P4}0OMQpF3}*ZGx}ZIyP11&H8R{anNOhEVmCZ_B`8j!soG#aP zdtDUAMD?HbclAU1z4~qXXuYdm6K;-P)edSd90SH{y|fmZu6_@Pg?;K;b*4I2?W8tV ziE>^!rR-JKC^MANO17fO7vwiUTyYPGCvKASKp3Go9UR4;Z%?&8v3i=9%`V1ouoS$e zf1x+hE@|&++tokREpQrGsHC@)KbD7>3*Pnyw8Kc(mE{k3|| zA^TbVU;SCNopM>8R5|ZQ@lFv2Y6>ZxT2VG8ZS2>>!?3s@u1X?{tjg!$al=oC7a5_i zSwQ#IEHX-`rg+?ZFDi<^yxZtJ6&~sHLJ8;6gz;9G6NL@o=aF3Q^FB=9T6{T5}dVz2EvPo zcpRQjSRQx*5sxYfl?#&P6rPRCqHs}>5ECv7@y{rTM_J|hp$yy=UF77-W`BwwHIGv5 zpbTyU=RE9;a(H{MU1%p+Pg!Nw73OE=F7rB5F%BC=FuT5~FVfSsuRv;ai`HCyQ@ue| zK-H~4X$1H9x5&+3Efr2ay@tdW=V1PHkV}$SZf}uJAAR^@|Ju> zZceX~_L+>;E3sq>$oz$PL7R^Z|8_~EBSArRNz(AeBBriEQ)h%zy9YYRO=O+BIBc=t z=696p)o0&P(mp-R*Q><6`5vi``-~=AWHE8`E2Rck(rTA5u9E!e<4ejwfmaT&NKyIp zBIUF`Y%w4I%wopx9%v&sryob2a)vJE+&3D@UON=|3>WLl_15*gq__)mBvt0?*BBm) z(keEnL(7d+sb9oBmLoOJRk>sHV)MN&s@JTE(zu}}rf~JR#-T2XuoAp35(bu)Pt0HU z#^ri$7a}{Yrc8|#Re}NEyq9DJ#1j5D_POX^6t*A3JcAJ}DQ?8qYqYi3Q z=vR99An3f+pgbsdm9`Fx&2xLexWoR%kqNBc(40_LR@{s2WlPA4%?$>pw)T#|9tk z0-;|~(d4P+B{2Nzy4@d_k{bELuh|QI6NVqRweFDEG&btI-)J5ib$Kq1I=iv#NPVH- zrUrv9j}5v!Hs~6`plh^2vV_c7xtso!)Zhv@y5Kp0jyaH|1@obn9h>6be3jf_BIWQ$ zTvpW2R?3+`$-$Qo<+Yc%j?{%Johu046BVd zaevJrv59WuY^gyF;4Sv1v@F^ckmSH5xts8mrpE_tTc`fBO*(8C+aw~5DQEH+Usm4w4N|>&@6#W}oX-mKD=Lc0>4E_> z*)_3<`{|RC-zM0Z@PW9t9qT65kc9qOu|jY52o9c5KZ=LCGB*a+33O>g9@du>PnbQ_ zfwBDm`|Ls4=_Ek^db3BUJFCtf_6!(>6TI1jCZNAm`WJiCbtE{(1^pw{h9A~=I(Iba zOnJP{q*%X!NYm9VG<#HC-RRO4yD6AGyew!RhqAz>K@unQkKIV8k9v;6^7iZXU8Ypu z;{NE_jQ&zNZdhy_t-LqA(|l;B)4z$m-dZ>|EOtX8C+&9RTsRa4?%66+9ai>wcOS$# zFwQ9>9Ru_)9R&A$0xc6C0pf%)vFqq>xo(oexaknU>~ReIako@M>+zdc>E?&iBt9)F zujDzB#yLMbUpXH+XPr|Z9IkZsI1f1YI(IpXoLij9PN6f_xyI?^bP@j*zXv7AJEU8r zGU*2C8mXJqUTQ4WaISQc9n=2T{>lE_e%pT8e#+iwZ?)Ih3+{_7J z_^b7`^`7-IsK`HR-ES?6T65tZaJ)4f1jm_HGpm**nZKG}nQxgV%qPvg<`%f5TVl=z zA@Ml#8gZ1^8?OD|6pzC`Z@0KfTrDmXE5srY1pKIsQu={tVXQhx?XF&>rmD5fZf1M4 ziCM?gj6aPZjL(gCj8n$ba22}MSYzC7%r&MNg+_F&G05m?WEriE6vKeS{m=TBpmP4I z{+xb5e^9>XAh|n8JDSUNWLf%M`i}gUye%w<3e$yR;aXv! z&`n4anhCW9iTtJ)>Lc}jdKdjFy_sG|S4f(&m%L1#BKyczvX0zNZY2}R4P*$(14;PT za3%XDT**GE?bo(z>$TgpS=vNUi5&*_0l8W`Emfs4LY4 zYK784Np1x9!RwXf%6z3l%~Lz7t<<_;wbKkNE0(tq8o(Z!3bU#74<~gpn;zx7fHHDR zoG2x;m_{71!irAdj70SyX-Zg~$&5H_37H-zib+MBC?aq^@>9WzNv5H6#mglECJ#Z` zg`_-A6p$&bn!Z?)Ob!Lm35-l)?7&e*;Gl%108t86Een(Bq%_W28YLxhs)Q8BiDCkW zC2R`FrHDl0dC-c(rH&sLA#kbV6NLl>Xg*OuCeX7mh&`FM9~mE~vDP=Sn`B^^NKk(V znajvHra6?8OF!U-5S31@_wMo_O)0r9z)J|zhKKNC!ZhIlFM`^R3Al>L=m3w9QS2rc z*b2$WAfkYb@R~Oe=91x|0Ic~i?=vY!DH-ZD4khT&7!oGa$u)7-5;8bW6q7;hCX*&C zA_L=55i%g2M=@%yoNM9<(2uqg9)!`7VY#-KsR9mu?^bS$c64HzH35|rs zhU6vC>7-|fy_oa}QAMPCh>DPIp_H`JT|=>jq)Uh@Af3H$h~nLkFrR%9+zb^8x5bG9 zVO}uMy?q(^A{2lh_qoSTFEJ*Pb8(`Kd=`w^JUWU#4U_5Q6UqvLW}2{+d>l_$LOzNU z#pJ_yGCGz%h{qL?_v1u_ycZ`5$-8l)fV`u0=R`Jw=;ar!w}8?nD4({#M1fsHP@+s= zciNOF6_&7(00ay!VR4vD7h+yHl(j@aQInTrvA}M&X-tu@Af5_-z5=^n%E*m+8oz|y zY|twcY}Aooiun+aq7A#5H4#KYfx@Qvx0VP@^MWQU7MS7%C5i;5c!8In!hP=VZG~d@ zy|zLso7mtEqLhEu8~K1kIs7vrDxH6tH3-Di6u+tbPULdeF`RBZ!CZ%ah@W+F9&IVKb$@9oM4}nF-UV3v`WXU{>v1-(&?}x& z{!oZ2;SaJLJvHJ?{y+kq!81z?|2Bx<7fM~s?~PN@ydwV5IGGpW_k^fI{*e$>!0%== zaB%CyKOPRD)#e}bQ@}k_8PDu4@Ybo6XLrg-(IN97-h$Af3d}G#`5mFeCH(dfRm^V- zQAIqxLZHiory-rrZwmz!SiuV5+|gw)z!LfiuP#=yZ3|oaRn_Cu%wz?C8I+&)UcBBlaG9v%S{7-JWBY z+Y{^&b}u`_ZfQ5LO`EeWfr{U|)_<(S)-EvLTxBh?W?IG8wbnqZo7K)rv22S6O_47_ z3*?mf6lj8M1x=8}=B;Kq7-Eev2Z6p_8}kY<#3IIJP}cascm+1<`=iEoW1Vpa?9``# zM)+u>kCAD#G?EPyw&_3VpX+afD}g8UUHT?{jULl)(I@HS_2Ho6n4`DVQ*;BI4E(J9 zSNlMFU3)=$TzgQvM_Z=d26niG+O^sst($h0)=aA>v=vfdd%s3lBHSuW5ylH6LB8BY zQ`BG8=(p-8>Kp2d>J#dtVAZt>?k=aR#p-qHV70571_~o}RbBZ<`APXoc}qF2R4Tib zP0DH|2Dgz#%2;KP(nV>jGzObBMgCL%Uj9seOMY2?Qhro^0B$I6m*>jUz^-ewJV5Ry zUnMsKrD-12rT;6vFTE-qlMYEcqS8I2lw2#=0#7c%ap7HZiabLOkZs->Kw2Wrgk#u^ zK-~c+f+-}Qj0P_cXYqLF4QtSrz&S>!;|*P)=~Q0Bn-+m86Ke6DA&Cv5kj>p{B$3 z4^(v|>ZN6yYt$~GLsXdTP5m@rBA7YjewGqt0^3+q0(KMv+gN*Ky1+KpND6FUO^FhL z?W-wKEEIVQO;%2n+JB`Bpe;pr%rvq{U>j>nLaj0FMaW0=!V@8sG&&7k6$8 zA)6hhGBb0T^29sdm(fMLjQkKMO34MU4ZPJogM1$*|KApS*jRiWPesop=h8|6DgR5}6G#VFm{ z&`83zLVy>Mr9lP}az}s{lG_8kfG{g5;P+~Tc3zklb|+cs@xpehlq?GH60*>%0^M>! zg*w4)BC`iBB##Gp0ijllbc8W;H1bTG#_xUFt(+~jb1%)7TDmvSlNzvDJS&H7#`yYP z3t<3F0qz|3mP)rqbFwCq171O((o;s5jS1j%!_8Jxq|yn~$)yxwI=O(C5T=p^crjti zDByIfy*tRci0lgR2-)f5(X2x9uuo(a5VmeYa<3T=v0nwy_?-v6VL$~&rTk}cqJ(E> z0~!M@$$#RFERRg*+2H_5o*fP-F}R5TFrG_drDisv=d1<*N0$h$z18@k3Itn1Q4ybfN4ETx#A;60S65tVm z4^qJ1QQ(4@Lh^5b7m$D0-qBY+6ExO}po~UqDyZ)8iPCI$Z!>+!fk z{xwQ4Rj>m7RaQwT&ie_y8w$XmkiXo3c33HY($6V9w}gM$FD0G+boditGM)cVoVA#L zDNYpeFPcI>x;9gVvj~4Y9#zP{5GM-w=l!ZMJvIK7Pyp8LlsmO89D9~bf+_aZwn9yJ zLsY8oz6^uHm79a#q%je=Ouo9g(5*gOJ1=-+I+KYDxNqF$%^`#5n+NBn%#Pksnfu&l z^<Yzyl$GbtD4SY7C4b`7ihhMw+lDPt>Zou7?HX;R_R+kOTV}FLW#qV~z-ra7Nt0Tn z3D*$I@{eX-c}UUIjAs@aSJ)UGDdSEQ&4#QBX=&7RRwTb7GB6(tOrZs8wCdi`g&t-w zL-$wkP&01W)Y6GlC+COj(Qks)tYO2H6p|9ugX#nNwE)~dQ?XQ|rk2fuJghy8_G?gC zXOZ-M!)Pb&CvqhiEjb@LC!HhCL(biB9+~FcV^9D-|wyWj{? zVvn-(><)H{t%8HGbJpviS+dJo4|YYKDeM$(7a~G0A(i|?J~X-*?Ty9;?3eY+ z`hVeG;FSKfzE9r@2aZMhbUgx^ihbd@(OOT|b?r~>JMAM-On(*x@egQgwU{fBpgu#*fw4K?r|9-KMTn7lS5av3jlAKMLxMSE?zhsr;>6P(D#kgS(7_ z%63qnUqY@Fo)qpAZV^TcnL-WngECK8o^8I>I5NsgkTD!7<|>xPJIf z{#pe$$k9X2lG}nNM?Kk+1u6Qw^n>&z z+*Z6H{Ri$c4oSPDEpX3sr?e1mdZtK)(sgjqyjtoarNdFPp;SxK;IMgF{8s!-dzQT7e|YOzyvr4%y^r@!P9|zlRt$Yh5rg4!Bt15&_-x1 z)Pa?lC%=;KqvUh)9yqdkkvs|Kn}^9JIMXa6QE+242~IWFf}fn;q!XTN0MN-PxWg9) zLCE$g^v@;3${;{xnj_xN_H zwI0xe-HqF&R&MfkSSyBYml{T!22nx3@%4hRx&fvI81XUgj{y56z`hT#?*i?dZVj+4 z0k%27?sc=D5E})}$*pi-0XnJ*b$I#%o9iRD_(+A1l=?`4kKE)VH~PqRJ~GNjM*7Gw z9~tB$1AU~gI*AqE(+}$GBiTNZ?j!Adq^*y%@R8;|lIkOke59U_)OAyz6`KbiZ2RGs zj~G58CJy)>iDbt_vQ;8^MIz}Wl7bx#|Jul}3DM-+MDpWA5_gNiZ<)N17<(j^h6SD4?;5rxh|0e5qdZ_vGGV|G%*_F<6-WUL^3InBnc#c zIgvb{NPd(^o?&Fv(@W%EN{oIgkwgzfK~wYF6Jzg7Bxfd)C>M*Ty&*9+Iw+Cult{Ku zB*9x;sCoE02_%=;09@ke;qX)+)PsA|OB-d1ncVYZ#=NQmr|KwX(YHA|q96R7$L6bM5@B_vf{tfDi7K2^hJ2%V}2 zwW}V~q8>OpF?Ao5o{D9Ut)$;Eh>AM|Zxw?e^g7! ze_uW5T=k%Lst28_9(1gF&|?@B4J(lI)i;Jby5LIaB))o&@H49CUs^rr`szW^fz`vR zw>4jV^z+r*ny)_kxqqr<&s_=!jYQ3P?wfF!7xYQ>py#RwJzhO%m;2liu@*YUOK3L^ zJ$oev#i(nggrFO$g^aEi(!W|r*J>dHa;pWkuNKm@T8L9EL_WM<;*+9M0bif=BH%fv z*z9U%n61r5W^GdkPlmr3-x=qOcj0_{+&F6NHy#2%hHH(bVD~)3m}pEe#u$T*Uf^Y; zgVEe*U?dr`{ukV+o!39s&*~@jWBOrmywd<2?#SS1=bZSi_>A}%=-aIZ$2yb2p-z8r zq|;o~qar8#B76u}iARLJ!rj7hVF9SJjT1%)xk3k_xuAoGqF=~|{7$QUwM>MwOy&#EU$FMXrFR$mHMf)V|Cy{DcHR^ByrRr^Q#LVI63tsU0(z*%~! zHeY>G-J@;-#kHt9P0d$FsL|e_uGRuB;S}XJ}v&0c%2XMFimGHc1lxuQ>IL;L*m=a+>fGZjccRV=rwl|HBc1+EHz&hs_K)JInlhy9AWkaW6FQL^R&PF z7p@7g;D9WoQ#lxw26;v=Li>QHjV44r?@>bQDojliY0@r86daU=q(mMeIDiSk!C9aO zXFR|NTp~C58)LxFUOD;QXCl7^*rh7$KL#8rvdg!fPE0>j#4`y z@^%n)CcxeZuvg;j$o+B<^J0JEO) zyjcyUzr9NQ{5Xx{pPwBMpd*~0T!luJ)=-8+tHh&vWhlODmH4zObn}3ApLkvBS7nHC zRT|Kf{l~NC-U*VU86Q`r{X8A35Py{)p64(l6d$efgYvvRgcv{q*MyJL=&vA7!oe^c zJ2jDj7CMZcuBnzW4k4iT@uO6M6yF7i5hDx=kd_z4HBc3 z;0HB0!1^aPyQhy4ubj{s7NcpNod};nuQC~)?*4K@N^^%D1hEVau98hK;|aTiqILz? zgH^a62x0=6mwj6fEv-!B(^8X0}gLRq@ zq_cb=o#hV%eES0|SgQG8LFRV^v0E#%Uy+uA5B(;7kkE+a1bD*$ORm!Mb-?K#Uz_aa zoL}Jv?Mv8ZzX`W!&%r&~KDbHS1b1n7!fo2EaGzEJ+tATYKc|xeZ`L>tSY`hVThMpF zVCPBuQMg%K2kL#%TVek>9`yUJwsY;ab|bq6Snd37eG7Zf*RAKQL)L?qYb^_z?POW4 ztYphD|2BUB!|pfXx~&q-yYGh$=R$LaSz=yqUIUkInPy8f*)+jl-cQDta5Omuj@1ts zI}8^*3*JUeafEhoBUBUaqR4OLTk&A(P)pyR+r+^_n#`X^vB zegdxI4(boX@nMaAyFOQ+rWe5hVkp!9YpmDO6}Xc7LHk^LM>_?Va);mziTkxxa4mNW zxFQ*^jf9K2E}jmcW(enmx8SXVC*dFyeE`lfcL;Mp8E^t91NIdK;kBNZlqZxu%2v3(TME~8)07BY z)(uvAC>cr%r9Sw>`bYjz{z87ow-S=?mG6=l!S&o^IbR+lgP~AQxug5bY7r*BHDa?S zUBxuGLaPfKkiUc<$PRKZSwR+%8K4_DjtnDxl8HOx90#DPquYyNN*a`iX88K=UX<%80Hjg{dtq6aK+S%*9mg1^ z*zXZcvEL(@Yax$77ZQG&SU5MP)Srr`624ZymuNwlFK8cHpZVdK+rq>=Mo{%P@^zRv zA10XkoaYG{)#pGF!=t|RRB=*4TaBy=;Y>*l!JE?*wOXLHruZCp^hR-ZkVQ@=|C}ES_^}ZFYzTiQgfsPjsz~9h|0B-S{}J~+Y*HTP z5E{do@_%X#8o{*xG2*cM>PE599}m<*joixm771qKmWl+kar1~-VYZoJg4wruY|OsR zBba@gN8B7wb7dZx7N_!j>o$*%S+{w_6t~@GaY9gEus0)21vi!Y-STbQJYu4sCygl! z6HNWqV=D>A6o(0B*5-CIgTd-+yvUKCTl^$4bX>k$*;+2xTh!o=rc;#`o!6>j%;rS*OzP%B1qwf|{I zG3!UqtE+GQ$f#ZkoOuaU&jhMR0>um;SuWiyp|#ftSRk`|WRcA7kx`x9q%GnjQC)A! z%cPfpHXcub%GEag9uN}G1u=2HJ_>B3JL~P8gU*9sq<*K_3Ph~aVQ+f_yx7y*$$`CX zW2Y9lef!h?0nE|g(d&Y8)<4=$;9=-}P|tcEM9RCh%^+01oqCuCPpYG}{#qyLDQTay z4V0di!V`<`lRt`eYJ%}}V=$gpKyT|uaAf^~dfGkxqgX$x9#@ZmEPAVYx4IMz(zC@j z;uWCZMBssg^YCE7Yh*oHPUe#eQcSKlQ^2Z4Fn%?@H9mno<23L#Jr?XodV=V>wR(l| zrtu$8LE8t0F0OGWIGdYplo&S{L(TKxe(tn++&p6L0b7~7&86U>dYYO9F0g-7T6_na z%(Kb~x2nhMVf&Ka!@)9`;g8pqrZzIQO3u<$jj|L4|rI7i%RMXl*zDRdpU|L$RBSS_sjL6`T?GqBs6>PwTE znl|_x$rJ{$nGm!yg_;Zp@1DNWbSlM}(sUGw%ONJFGmYU)XBzRJ7!TM05Pt(gaeo6s zab|y*N^yS!LUDfsLUDfsLh&QMBWz0e8xV>g4i(1i5HQon{EFsekwYQ;U2h6IQ|#HJRi#Z4Xz z6Fb7hc7M-;eA~iN{s9GJ`~wOSTf%Jq0R?0H0}2xU0fnk;6aRpMgnvK*BAVu_k*8u5 zGtl)2|A2xqOoiNwVJhSv!BogSf~k;u1XCgR2&O{r5v$oZM5$Uh|CawnlsFqEm=bs@ zvN0uak6=pR9&tLHhN*yiF{lC#b3bPAYQUDB%fCX2YcUF_Q{gD4`VEO7=H+nAi7@e> zF!55Dc+u_fy|l~kTxztz`#U=%{GA;V{>}~we`kk;zq3Qa-`FAHZ|sopH+D$)8#^G9 zdigdaFeaf2?^WKlPF%*j6Mm4E`kNnY7k`(B1XF_dT8!!Ido6KXNC|%=Q(*Vvo_D{# zUo3a)-Xo4Mtoob*?Mj`Bx#QN0H~8&s^Vwm_LOk4;P--n6s!o;`iH%h0y z!9EVt9y8!erBh&%f4-sw2uSesMR7ZXTOr&G;r_0Y^6M-d3|j<{h+sYxS3@{6w}B}$ zSCCnFloC>iiP_p96SK8J+@HiLKOf>}mNt~fx3oe0pMWQW{2jvo3gLe;voc7KLH-Cu z{2s!YX-z6v1aR-Z%_3-<4h-P~LU{iW-Y*Zc`UfSaS2&nm`Fok7=gnv{;f?12=^Av)ARK*zo zsEUMtR7Ju+sv_YZRgv(IszBuA`F5gS-i6^R_(xSt68RuN5Npb4J{l5vXUlRLo z`!^85Ua-FgE9*}{7a;l;Jeht9>>Qp07fO}zxaFhvPS|^Gw(qm=wpZE9?IrdC@O3{6 z+$v258;An?MtiJ1(jEfOO!fgMOPxVsAPrOonuFN3K0M80+A6Qql6~BQ+_jll`=~MH4^Q`$AIBa?zY`YJe`_0|v4s)}4FSu@6 zVcu>oFz0|AxZEr?3&4rf7;~68(ClM&H*-N{r5#9xQ^6dgwrQIxSbsK2egMPQZ z63!QkqWV027KoB3f;P%c`dE0YU@%yC^n~L^N4*2sc{J6pfa64xuEQe)|A6zQpTOqh zEA3M_Se%8U#R)iEJO#&#{cyn80Y{8`;gGQcju{K!pfLlE8l`a97zY+1!{8;EK3aFM z3(0^pMoVzf)Ih7P*_x_F2^=scVPo(NLwn?Pdd*q+H847PUVaM9PWFSM%?^1pNVeC? zE5O!$0jS)}0P~Ylxd09wW8`6=eA5T~Vdcshayz-DoC<0#yqog6AR@6)C zDrHM)(v?zksgYD)swtV0EOFu=;wABdcpmhbJ`~>;Pm3qPi`X;b5%Hk7M|?=!3R*sQ ziz}nzQgIPH^e{`DCQcM1;5uO}sQwHV`-(lq&SFPU0%{E}(UJS%^)-Be4IXcTXV~EJ zCV=pG6F_*p2_QV)1P~r?0=N|+Jlg~~Jlh0t6T*!MX;y@6KzJX#2?oTyNZf<)ZiMR) zu0^;8;cA4d5Uxac7s3??mmyq=@D7BxBV2-TF~S(aMF~mlM&WOSPx-cgmn#Z-jp#{1f3H2!BWT8^X&t{`pHt{EYBNgclM1fbass?-727@LPoE z5&jq9R|vmE_yxkx5uQW%8NyEyeuVHtgdgDe=if)-J%sNfdM0gnC;|L!^ zcnIM^gnJP_if|9YM-c8txC`M-WyJn|Y*B!cnZ{yBd&R=QaIOK2~a=*IIZQyIWgLjEnxC?ecflcn`>$!dI=Nq|W z9s#iSe!iyr;3WP^_pM2QeMQ5**e%v_YdiwX<2UjR-C27eY{v>H?Cp(!U7ieB^GyJH zQ4qO{PdDa>0>|G&AjLyFXxlpw`kbUDcVAw9_)&?X~Q)~eO4`38!BJG3mxMWRjvf%(*|H)IvpIfzX|VjP7oC#Dzqc- zlcl5&|0BPNAISa9JUg_Elo=O)Y8BItDoAW(%Qpfqdh;hGy(NfOaK0#y$;K7gQwb2=&80gZL?y7{Q<1{67yMZ2}CS{+_F2Dy#DcP>>;r}aj)Z)!5dt_KwTWW-8)H& zm0wX7p+2jVlZMB7Q}@OVFe~cYn5OXjlW(pmD@k$h#v1qT&{!|(-WYu$Q$DZ%fj{iw zIy08%xhjWie}CctG}P_cv7YFvyfNiqy$)z%rw@ts2>gpfB<*7O<2|;J=#ko7kTfLL zoq88f$wC)~9xFP2_}_flqqlK)%`;N{I`C_O0>GU~ICR*yeVwYVs3XqcSSNQ&1M1n_ zt19hR$`0My2;W?gn$^4}mW!^_sm_HrV*r95=02MvrREC#7xJ+j&j-Bk@gCe};EX{X zq0?kuwrsZOHM6{6X2q@U0S79doFO^we24c}?Nhn12aTBtk1k-tW(VHTAzwOJ;13%s zouwKoNy~|4)o;<@K?GdpINbJ_ADJPq7T~0e2IdO()Q1u}N;k-R6mR`RJ zq~Nzmb@Pz57~lIq)OQ6!CyM{!#g8k<)={yvAe;Iu8@gO2WaFk;a^onxzfc;xigMS{ z>foy;8n`2=hw}sNLzbG3rKNgp0-Pg`&JCU~)dE`K(%(Q%Ckj_mqxX5zn~ z)SRS|v34|BI;<@wGSZ<9i06(U-g8iD#pfY-9%W>#t&1l{7+R62<@>u=y{%;ehwA;Kc z)|4iK;Z!?GVHwidlx9Gm1*wluH6-yzdS2zNj>BV3Xo3Sr;duaBA8+IVf+H_@oJQx) z)EE^@#mcAOE3wLhk3PRntgMK;Z@tvC^FlS&7_x;Kg-)4mKoK~F^Oj@Yua!4op&+kM zg;DvFXBADRuhi6a4OLFcz%7M4W#>iMB`W5u& z0K*$H^@cYfba*%T@D=*+)%Y(WmA^D1){rKF5zdl$!<&9NuFddr3ce(w3otQP+I{59 zMwDMB-M~42IF~?a`Mh%u)Ry0NPJ@j7xbqCCE*}I5`$J$sw*l0bS2{~Ufq9-Y3#984 zod_r~j|JKKV5hIs)9DP7^$t#Jrzu#~)pe2_-4X47K&t)|I1Ks<&MEJM_tMww6ZZ2U zP(KWc47=?eAWpy6UK_PnfVT4j@Fg?@9GaGbEPWgp-3_w`f+W2=s6J=d?ZCZhDmXZ; zZQHhL6YDSQ7we++jrE1~F*rLtW4&U%WF3Py%^$P&T05<6;P`YsSmZ6Y7F+Y-b@K{q zGAK4ou&%d8!LzvitzK4Fu+K{a3%%xGqgUUG)x8T2Cl0L_RCpz(1IbUxk&t&fwS z_wfv9ejEhdkB30}V*}`atON~^MW6#R%bW%#d=W6>8w+N9gU!C6P0`ux2(Oj5Hk*P6 z)w*U97=Vh#Kk&}sPhbT4mGPB(-qJ_~3(?w!ZKwtTE74!{i~2Y4eB#IOSmPOZ zHTWg47Covzrtj5vg0jX&cqe$ZzFc3d&j)kJ3VpI(tWN-~>{0p#23tI%*x@nd7F~6_2_88XL1+6naB*~%+y*?W zHUu|EHDp7Uq<`V%g`cJG!OQArQE+$kmh`&xvh;$qUD_nM(i(7hv_y(Zx55#1ic})y zOE;)Lfa1?bV5oWuUa5Zql)oQV?^EwoZv#c1LUjzt+dHf6K+c{7FHl?t>G}uCYv8%* zG3l_hOWCPx1ZS{Iz!r5XQvmM?BJ|eqCb6yX@+G<9e?eycs(eg7BtHx;npWaF5oPdh zFZ z7Vk=oDsh(xOtHcvP^u$rM6UZ0Za^5l5C7bY&_%c&;XMfNMz{{)YJ{s0u0*&3;hhMV zBV2}XDZ)DtG9RC?Eh`Cm`Ywc1EI#lW1*h9ZgFKv~0|T_MulF(dyaZvIxE{eYaVZfY z(>#5+jE)`iirR(nwk$a)$(H(BvQ(G0H2nHQB;O6H)wx(7q#h`og&=Re&@pz41_6wQiaWu@be3Wp?4IrOXCk$=K@g~ zWB|`bGi6NNzZCO{6jRNFIPl+F9CsNGYe5Omlq0EIi?l-t9KL*kJ* z5#jtSs48JGVJeCEPH=I;TMUJyR#)n-r{BP|67=vxk-F}@eayoTkVWX>ha%|V2at$? z<8leYMFM=Fmw9A%xIEfY3t=A(ZbqXJ&Wj%Cg~m-+aGMe?0fh?#yU*=IrdunN#>u z6=Nl11!E~A3v~?^>KcW7X9{D|>G#(y$?!1zAndyH>0z6Hc7+dnw*2IK3De`kD+ z@o$W;GQPt2BI92fUtoNm@z0FUG5(41S;jvyKEwD2#-|vcBuwZ}aN=>sM;RYs{2k+d z#)lanV!WSmALD(D_cGqY_*=%`Fy7607vr6bcQD@0_)EsbZT#~K##zKZl@h6P@+5LZW->4VoWlAm+?E|l)0A^XEL6_xRa4*H2pNDc}CN>Grf&*D`Pif7vrgn zos63pH!^lGZeToxv6Zn!oH93aqKUDAv7V7{5)oN*Q-Phxr{(-n;6 zj3tc4j75xx5hnDRoS4BlopBoDRK_Wc6B#Ekj%OUlIF@k?BTr)bD5gg;<}(gw9LAW( zn9G>MSTvM>vKfakW--PYV~i2TFk|TU^*(P_qTG}A#D9Zr*!0*du^+-jG=%-nY0)wm ze*OfCJt26T*&aR&dNx;wP7Gzk>as652a(5a44f2*`tQX`xER6FE#5_CRmj7XMQ+WqY|@(wiHdG;Bb3#&GALxa=IeqDJ>@slH=zeMff>gkE$l(YU3fXG>SJ5Qa5E zBC@b|5I4^Cj|}a4rEN%2P)2b{wr$~-u1(F|5U07Fw755mhir_~Nhs4Sy4kLxxv?{` zabt5=Bf^OrZs}<= z-c)NlsyD{(l5AH3{-3F2gJ_vsRfEe;)%8vASlx;)Ge3F779uexEbEPO(+a>)VjM}Y zUTqqZ_y_hy*|fSX@CvRZ5xGv-C`uEq;xP%q^JswX_5ixk3miC zr*v*;cV)=#NG|RTJM1o7Cu2#-hb=5zlAzcW++f+Z15F4m*Ismi7j1?)MZVnEPQjt8^Mtm|x^2*{n6q?cLqr(oOb@ z;2f*9#0{5Gbt9woUce%tr*4;cGcQ&@!^Q!%fOM1QZ?+Wsb z0_k}ivoC^s3wP@vc{-loWIJ4+57x&#G2@|o?JIUoi+T<2dtzAW{9J}%6qOZO&rUFh zw61N#RM**Mw}W|oL9fm)wEGdFt-CB%f%%G(?n|?vv%X_9oM`oX;-$Ts=wN!8t@Ebf z3$&!GePef9{kF_0zqZ#S-&5PeJnh`&z!FK~Vq9?l%^5TMf^FO$ccoCCu~0w? zQ4=y33d^^2G~fRdb+8s~<+cn%_lQ*sO2`k5T|tBBo&vF!dU{`#f$3@iQ&i zB4!DvbI1%wnJ_6yK^){o**}XqT01ulIZJKO(jI=NhB;9is0`SrnEW`nwJ7seZ9T0H zX#t}iJByy~=E~evkgSXjbd7qq5%Q)?&1fXHZ47d=}-StX*ZH~|zxPf30_aZx^8 z9i|q1Lz^-ujha)rN%_VEIZskydOp!4S&#a7&D&^_TAo-oSA9O4Evq+keeMh(>ywXY z*XKUs;?B;V?#8bA9mMA9V=nCM_xdBUxiW$YB=L~)ntaA(^_zQ|cVsL*7i=PqDj4Q` z2q-|h>?c`6qdn&@-?9UXV6AeOeZhXJg&UcjIN}C>eoHG7G6a#RiY&`S;B9qfu&fhH z6=j82-9epGkgpfW#R?U3R(N&|w6bij?`mvY-H9{sP1tDI7x0VoS6Xr|-jERE=Df62 zm3%I@G0J;e+X+_MSRa0SU&dRz_!NFJ_pK#`DW#h!iN%V2QTFpO^<9ak`!lBgMeW?6 zVNQdnjBJowiQ1t0uC46{EcB0R)RfWPt^IhB z>T;T7>ozG(T8za~+ZObE;De`ksWmNX5p$a}ofKDCcaJtlCsu6g?&#c>`4ODgOdOX# z%3bMjpci_haDst_2a>Y#`Sm-xx8YE=tKT=D4$@0JDGv;Y>f>3ldvNkN9acHti_VRF z0^^x|3?1^-=nanSmGN5qlnGk zzk1K{&NkjQergBE|{0=Ta`S5j%GYGg?$cR>kvGUX8W52pPP*b}Zz z7OSl%#RrrVYGgRij|QR4p}&_^lPt21Z1W8d;U?)jP#)4Cv!FK<_i5#WYmFBT47R)ltMJgUMGe{F{$2AhnPv&B$HOy#93G&2*uGs zuUtK#;;6gctM53u8+)GiM$eCOYmzgiI-AaoA$Fyr ze(<~8_p3|j?}rZeMRtLmrYPfAE(W}u70Ikj4MuZ225B<$UIiAbLeJD*wSJS9DQVgz zC$ZKaMi_+!=ZPhAi_kAMw;!3D$gBr0DHohnZV8R$^Fy`C39N`1qp1V;1s6db`7+a0 zSgiB!s!fj1$R~KBTh(B4m7-s9~8NR$RFGKn4 zh|Slynk?>O6Ejaua;&32h*pW=FPBr!5#}JCa>mF(mrHaS(&Dm=K_4v#9XaeNr?{;D zppQDlpcj|%pcj`NFzEfKoS{20<&5M(kI-a=(BRx4>(t@CyaQ&Oz#fcx0gw71WR;^X zHwFhPr`IG$$U&yOJjgPyt(LwxnNMS!YrS9KGXrHj%*ACq%u)SrTZ6bZIb0dV;xZm> zWFz%q-}dm_+T^f|`#j3HZ)*={`6e6pu1Mxt7yQP|v9fA>W)RyN(ecj9>$iRgr{=!6 z)>f0ubw{zdj7Jf*39Y0YpMUpLpN33xdr2}!jHJDjL4_dQkqnh5hw?}!D2E(LkQpNx ztWIVhd?b;ZJ|6fv;N#K%^&K@guR1woz^cl5N<<~Z6;55sRPft7SH7JZd8acK47vzY z!C>)rBft2vfZ$!*H+@<7?H(iso(t2!JB6L^N|yMpP!4hbVBZyg0N<53vuG47iUPzY z_z~ZgduN&cizoPe{B1cqUYm@mS&3CBYwxekNj@!aP;D|QzAU&XzAPZPQt@S(3f;?^ zWW=2hhUU7TbJAj_a(10iP9ORveZnVyN-Gj9Hk1mYPiB-p+fF1d# z@ppr>gXO`(;MCyw;K*PeJPk#HzMv=YdEjGslz%husx@byH{U!ja8}?u)^Q*UX2NIC z*uV(5yw3`R;0x$0cmw*-{|@3$zwCeBI%l7^Ah8RlEIsfB)aGx1(akabI(Wff=%3@S zg!9Si{)zt4@Q0rb4Wxiy_kH2})b{~A+`I`#Mdz4U;OaP{0^*1Y7-hsk6=)n(0Yi*I zMjW@}il5QPXfk>k4Mv?&WAqSeUzGuI`_xu0i{Nue{Ir9^<==?=Zg2_!i?o7~jN6DgON%oOqq_?~Jc8{*Ccf z##adcn|*-)`z7jxJ>viI=~2=D;<@d|PH5laxwV(M4_;z?k@2sLFEIXv@p;BSGd{=o zC&p(P|H$|Z;~yA*&zN|cf1YA|lJRlI#~2@Fe1!3LjQbfMW_*b8LBmT!`|W6s)u0_de+0b*-0-jN|<#xVhh7kyc!n?GWy@*01^@{&DD!vIv$9G^2U)Jvpd>D8K z>bWlmo`-_&6M_AKy92jFMfZllHGv-o_5>~roD)a~b_Grg^aR@AtN8>d?A8UA1{Mb9 z1S$i?P~4pu7!JS9u|NRoyI=S}^?%@h3)ZSH`k(VB9)lC-dl66OHW;s74=;O{`Y(ny zZ_wM??Kz)Ro@G~ zXMIn>)$;?s-}>(K-Rir^cdhRVM4`C|D!*sJ?ek9GW<;ZDg5vKw-zwj7_~V=Fo0agD z`X<9E-w3$n%fdp|Ykp;ZW`1bCW4>;_j8HYtm`|Ad&3$lMc)PjRyvE#PUTB_Urp;Xl zThn81GTY1s^91u4bE&z|oMTp+#pZN#qB$BteX`A%8Ss9Az&0Ov-}1iZeG%b(e(!zE z`;hlu1o^qyd%gE6@1@?v#fbKEwm0cL)4Lrpe_CLydmLWqTEzaD@0|^ohlSp$-jUus z?_h7Fp9=pY1E}v0th|2+)&0Z)y8DXeem}+igRAWyTxtKdgQ)D=3j2uzHTDmtu0N2n z{s5}_;l}Vu;bY;aW(D-?7lr2{v~YR22paa2ut+R`ubLsyu@8p5p|9bs=99#KP0gOQ z?4c>4_v zc`!yei)KVpR|N9wZt#p`@B+%v`8v-Mr57jQZ+;B;QV=^ta= zhbQ3`oQ@S73jdRlS28-U;B;QW>AZr|c?GBQ3Qp%09O+l0)SKKRZ!rBj>&dVA74!({>4I06VnuN})8l6`)I|#8XaWhxc$@C`1jf@?P8yHVvY-em^Y-Ma=Y-Vg?Y~O#7ckCeoX0qq@kquwj7Koe=6ViidKP09Vw|$FXKchV+mt1V-aH^S9BQD zGZ|+vPG_9PIF)e<<7CE3j1w6rFpg&&$2gX83}a$6|BPZB$ymTRf-#?QIO8zJJjPtc z9LAxH*^EON2Qv<$rjt`3;6E9kV7!Cz=Zu$wdvO~t5^y);g^U+4;#I+Qyeh!68S$oo z2Im7$WdwVIX6Dks4WPjXKnxrZLjy#=0?{i#JQ6U#sPX*o`8Opze`kE2@kz#q8SiGi zm2ofQHH_RW&)HtAiLrMGYNrxlixAYX9SD+Jm!O7aevq8G1hr!c))A~ASVVB7*GL34 zEaZb)A;A;^EY*Wr0l{E`2tk-2MBpWW$CjX`b0=pp#u;Obbn^I^9$`An7-9@E;<>@> zenuY<{BLr?%V;o)sx_uPgd{8he#!U+<9`@GXGH(u?q`huV*Hfx6UL7jKVtll@dL*9 z2@~3ToOqY<9mcmA-(vg+Az8)&f5vzdZYZzBEu3}utSjV`6v6iuhaXI5M zU_v*Ra^fh)YOZt%(~B7wF)n0Wz&M|A9^+g_OfqQ19L6IUXEPqoIE%50v68WZv79hr zlyRbzv4pXhv51>e$n;^1GZ|+vPG_9PIF)e<<7CE3j1w6ra6RLh9>+MAaSWrF|BX?c z7|B?`ID#>s3lC>{7}I%7=Q8Fn4rR<{9Ktx5aZt!#r)l~OulGLhFTK}!FY%u1?e(7O zt@j@7J<5B8x5zueJ1hYo!e7EL;O_|2v>^CO@Q=ZVgLegg9=tmE0~i&Y9_$P@B4E>l za7FMl<4R+9-g&w;IcPw%Q4fb()G=_0 z8jdx^)*vpxZ1|rY8_R)Z$XC%1VJZJ?bU!@JUJu*&^I;di9j;|hiq^pvUPP+Ris}fK zdp;bbZiY$sI+%0MflJhh!QlycXe)k%9cy`IVT+OP(9Onh5pn|8ark2lbM7=5c@EuZ ziwrpB{0ex7bdV zDSNZ_QOp=6%c5bLbgRtza+-9jOo>MA1E)@*!l(!B3km2i(tptd?tf|5{_Q5(w9nlC zf+IccUuv>Q`_#?aYWsi2Kb_yCedXMl->7}*CK@#9R~veC%?a&|t{&NOW%HV}*B!c1 zlku&PtwDQ@LeZg{q_&=jUnQ5QlCv2FrmcsYKh2K}xE~$U;8yX$}9@ zt+qpR&@Hw@bI{F(bZ8E`$&e1sK{p!Gp*iRVBP1JFA~ed3p>CQQXGnk9Fbrw4V>^Iu z)$fWL#T2dt2^@;+zZR|IRFNIvfl>(Yz#h6mH|uv;bzNr8NI44PKWdjcN$!n3*7~W& zkvKpuWuDq1I|RqVx@-%M7Tfe8vOD;!R=2x~QboG-{EmFBI&~EF6V6a|>G&OVvmSHG zgZ*^7r*PD%b5B9R71u)j1fiNb|c?3F-EQoNm`EMBhQ5r%f*x{RJA#sFx|JBE8hf z*Q%E|bc@bGO1Z9Py-1cwuzr(X=wxfs4|C{7eP&qjUqz8n5Hc=y)69=Q5Sekm-MGl1 z+l<|!eq5)QOq917C&+(Q$Zb7dNfjB=%>fFv8Zs^x=oUl9#RA=I ztaVCIQ{fDOI2?DHjH4a8(OBcq4aREuR+p6|c-W0q&IRUOW2MLpfB)@9okO=7D;&Dj zs1^SfdGN*?HA!VKWsT)x!qYgoGrj($T%%TLHEuJfS(k4!n}?Uk4{f3S4a5cN7Hzr}-HuF0 zZ8sZFC@(LP*~Z)1aDlVgEh?MWroCeiEnH5#Z4c%=46XK-k}A^v;pA)4-n4vM(Cj%| z%ygcdzHP2A7tSH!dG)a^X1O(Zt9jxu`;j=FH9FpYq@~vOt>*ktMX@kn(dJvVGmPPP zoO7BvQ7c7s0nhX1eve$aJ%#hDmvMGQCs%uMYPAO^R=fDL>I9rrEyO9+^uTCq_A6$+ z@r=3O%35!h9{x%@FFAvD-9Sf$_=*!=RhOi7|08!K<~gI&@*rbbT=FU zT@&7eMer_o|7nBgpE`K`sl<82Xn6Yxz|+qM@bdE^VVv(NeP>a#s`WCtAj ztbsG1*>L1DK9mO!J|1}Qc@v&{o`Tn&JK?eC3V7=|3!ZxHCEZ+j=a~%8JX!F{^O==( z0o?9VSknZBH64#5q=?sJe2mChFBnf54;XhEHyKwT0_$1EPGhstWUMom8*{Pjo@|UT zvJ5X4(A)>^}Fp})c5ueib}&ORYf_(hom{ghoqOVcNCf6xE_+`@Ewxo@Ewxo z@EwxoFddTSFddTSFNCD|3n6L#BuJV+37`|3ntP0yN=v6H^i+kOsL&G>db~o9Q)qq> zRL>z^p}M?@!NrVo`H?<@3s z3jLNs^PC~ezM)*_C9=HEOJqsEs^ob^p%Z^q5-%w9^9ucEg?>(<|D@2*DD)o``bmX; zLZKfQ^l|lIK>bnW#v=;-utGni(EAknK83zlq3^M7*l&)vUfge1bL93rj{BW?14P=& z+oUURkgmKz`r%4FvlN=wYqCenmFvn|rWYyK?YE4cQM_ac*hnEUL&>DPW%?B5y7HFk z%3G!@Z<#(;$*;U+`bgzE-ZFb0(uXPYjjp_Ly7I<}U4VQ_<&6`odwE@XeeHh7E`*9<^-<)ZAA2TPOLgyMqo`=aXeRDh>yEE1p%Z~mj zdRcTS0uuE^#)h8^?+jOl{tn0V3q!%+)4|?gAr@Wh198N^+326<`wKK&tDvy@OL+d9 z?){6m0ejZFjdmjk5iJw?H0?$0YHfp-=Xn@DPERyylbc-c)@0aD3c>X2sGi5oitM`N zMsid=JVJLG>>NVp-1da&gCp6pWCuAZ&o6-CI&WSmD`-XSyfV2#_$a6Aywa6kokc$hPZEY_C=zG1$|u5ewlML0^Qo1|4v zzruQjT*;D#xVb%Emuz-(kt#XoVprFWjndg!E0Rst(<9+!obHkqIp{SC6uN zu<8xRd2I7fwsrG-2gV!q3Ui?rW-k2pW3Kg*xp0S>i*od1u59h)lH|!`(vY7o-5Q`} z@JrybR=7NQlCVv|Wt+1=W-wN$I(g!NW(aJBfZV5uYQ^&gUAE}YR&#d2nCb-9=Fdi7 zp(OhuuBem@X%#K^70{rL*#mQhe-P!M(Xw;2 zS*QNM9BRF1!pRVs9UUvoj;JP)%lfJS+UoHuV0N_5F)qMuVln&(4kO-~fyVd)S+&Wv z0~-*~kfQ)G9hDoS37fZYm`w+aIcYh1<<)BduE&`^L<|i*iQtXi@hV7*UQY zaE&N+Ki5sHio&9cybE9;-`v&G*<~TvNv`#EshKswW+(3hw`EvPY9G%n--W5smVE;h>NkGrN)O*u8mRgPs1 zauFv|=1fL3iwBn_SBgjsHUtt;p58;06=JC=tW*ug}rA|)f6UxaZbL(@&^yv8<6CX#L z$PvLns13{ll$G7~-<9JFn#X0WOjgs=49}(dS72&4{rbsZ0l={u7(5XQN?C(a)u{rvRYTY4e(3|`>wj=Vll^2GnljR zn`yKagmG6za*^vUoeY8<_M(KsU$c@6ZFlJj;q1ibG0K?9WXqEagk|$UCYW59xr_>a zBbyDnC}&l2zO0T65{Cq={K39hluGlAL&U(&{r!Q#Ym)OEN9n>KTUhCFE70d$n8L^m zQ9r+{lXD$2?mW&T?Df=AY_msx(UV7#c{TY(N1MH~3HXul6tTAC6#x zV_=EohoXZgJt~@*9X$*YDu+e`k^jJ-_A7`<`Ecadk)P3dFeFXm zV4HLV%$3GLqdJHXgC8Kg;ByEqcrU^VUXPH1=Odipc7zgKkHgxf=85BmBM@kCCxQ$%>23N6dYyNz_vhZL5rJ@- z_lUrdKoAGDpZMSQzvBN>q%U%Mq%+bOSsPgvIWkg$!)zH+-v6lo9{(@=*ZF_s|Gxjb z{z=3>YWPrqHi5r^47KvepK-eYC2H!9cRjQjU+-u-Jh?!GE? zF;18N;(O9}KVmf9h#}bR>+_xN>-07H*20!XzGEO-#t6Gnk@V}wHI zD>O?dWJSZ2>nxm**I76r=^SyGzz%KfvpbQ{WN8}jlRXhT>^&tra0(S6l!5p?AK`i8%1ob7T>shbnZo zLbK3?o)>urE7u1pbe2NL6`BPzvTRgdCu3nDrI9ySN+aoz+Mz);Ay559@5-8l51Qn>mm9F3Vo46?^fsw75V~&K3}1~uh8cy z^tqBw&_6pzx$!-PK3nA7RufWvgt^gH9}$T!+-&o-|ELM6Dl{eQWfa=G%9i^}4x7lc5dI_r$lw$HktGof(@IeIvRX z9(g`O5RP4uLY$Rt2oJ|u*jb?pgnPacVVsKtuLjx!dH#nH-=Pfl)0e;^dZ_slOt233 z!fM%DVEh>xV#WGP`i1&heU$dNcA7TH^Niq~#WQ+7!+(qBlkA zQlo@GgRasti|;zCtN>P7MlxQPvU+2_{4m|56+M2f`U*rnDy;EEtn-KafuSkt>wOa9Ju} z2G+A(c~UOW?s7X+nHnww>ro!L)TTTcEA8OY)UbnZ=O{ag2MDWy{e=e&!AQ(*AEedqh~5wIVe{NV4dEF?&!3l4Lp2g{m~~ z;H{~_?p6)nnGm2$MhqfWKoMpd{ED76R(JMnsNZPK+lcT;2fAf4lCEPEHDb{AoZ8eN zS7Jr=GK*1@SZ06_esQxnyDpU_c5{@2nTm1&ElI_#l{0<$`O*z5byuOn zR>AUAj09Hs31qODsxXtM0@bPL!R1w`jya=HKDQzu=pTzLdQ(ny%61*m&l6M`iGENQ z52#(2@8Gg8-`wolR9JZ6Kryk01HqMi8~-|~ko6KeW)PJnVV6_ZX0szxK_Ta&>O}_E zy-q4Xa;}^x?cQ*oxu(z>eHlD|*^<4` ztV(!kK_$c^PF;uK5pz3u#6vuiUtTGl@t_=}%1C|lgjADE2q!I+oq5D5?C?nPOu-|R zMYKxt$Vrfep2369E|_qicmzML3nu#REcTsWo3vg;7)d)D@d#yO-#o-5<-_!KrzTGq zU6Lz2!(}iDaubu_NA#|~xU0RndpF{g%~YJPNOy4Fy#uid+=bO7PjgrWRS~ODGk8W} zRxzr}k~_rF3Qk~bsSusUxV#doOm3G)E0o7(7SI{o5?q?xcJQwhRmn#y`2EJO)R@wo zy5v?d!BauzGyD$h5e|NPRwlQ|gBauzpD8K_rl52`t{CtjrpNhAaS_28ZWWG{vRgwVn3u{pAl?vb^lwemvIUSjoxGeXPhOCd zxeC9T-z#|X!RgCpYG{5o?#j~_P~tfiFL7qFQw#;i8kX|%QIJ9M@e7reZI_?5>gM{b z?bdrseZyS=WFkWVNiJrk&qkI#w!&%S$&H;|n{gaNM~lUtD?Ra_#n;D&#GZ>?f$(rz zbZ>NK`aN;k9+ji;y zO@mEGBB_FU7PN| zz1#YlqEXi^_W7qM9wNz~^+1z?=Qd2A%lWuv5b6>#Y!LhpgajMMcRNzcL`ziuArUq? zgQ8+;OZ3%SHZ^r`#rLadmN{u`2HV75zt#35%4}1ImC#a}lE_nF1Ys#3F}3V2cN= zN_@ajiC`32*P%XOFJJ@~+3ZVtw4xEzu_fQ;3zk}Fvo8t@_JuPqD(rm0QVYZvj4q1W z-7i>bzWW8keZhz&?iY*}(DVgM&CAFqn2)0v9~kr)Beo)Co&Ou0wy~o*;r|P@Qy|RT zKZ^r2cLzmZrqq$nmkId@G%z(s@Br)v>@O2Y_rnApID&a#66KIQ0J1+1 z%(e&4`sY~RkV=>_pihwR8;2dI64j~0GfEf2@Iftoh=C5^fHpNt3^e|m7-$f}V4~kg zX@I>`O{z)^G#93Ub_&}Ay*O1#1DzZ7i%LZv9_y$Zi@YXP!9ytmSfdgebNq-% zdA6MF^Ie0np2m0SGlaV|JK)DTl=oXR#z7`xtQuUKnkv2$xGfIlL2#MfyFMOWfqh6K zHAVE{Fnq4)m{a{+Q7KWk=tD1}+BCPc>?Veo^Gh>pMFvCU{wX=&*Gk(rtTr`Sjuegs zRlkJvQN({CX2lOPYmRbM&&ma!7qXY9Cb^CYk&*b6^3%RMTRJwikM?m^pPJ|}AaW4{ zQf6X6a%HQW>yv4&hd&Bm9$pSNJr9J=2~`E(2%a1a z2ks0s2gV@y>uLT;i0XQ|uho}pUImYans+b!n2j_Zhc$GDu({sP4 zo0cBKrj#__ybOT&yr_d1|MeISY$zUM(#w&Scf zwasRlV!<@Ul4;<2Iki<~hGM}q#RoD?YD-2w!8FAR)4=s|O{&Lc8UzSX+rms!>0RHI z>K07H@*^+}qJi)mAeg3DFpcbFeO}iF4q~(WsZVmJy>-N9^46?u1xV$|l}qw6oV+%t zx)gpX=9vzipCKAZohm0dM2d4JIM6Q7K!UwlO0X%9T!T?$xeTs>1Y2%M2jUva&Jt|= z3cfjn1e;_7sZCP&ivm0|;`iXPfz(DR!bUDB!Ulyojne&=VFSqqQXP(LfQ#^m5hbgz zWdo@VBpVnpS$LD?tcQ>cq)u_4fw+zGs{-u06m&}=I*8B>VmHnp1=v|W$gWqWSbKE% zP`V?80Yr&b31Pqy*vs{LQ?247K{Js0ouDN`(q>r0#E>65o;9R6pECf@~WEyiDMA(Q%U@rnkgT;;) z;wI!0i$KaR8r976W+kSQ?WyAggV9286b@1HGtzzeKZ@&VBd`_gjdqN;g)bg=ntWDLkoic3|<>-4vvDZR$t&qxYE83K0V{U zdw(&gaJw(DymuA{he2pc&lnC4R8gS@G(-w^pYoCnSF@^q6GWz45W-51xf|K1y0?l$ zU{UNw5z!E3WxO)GDkW^`vdM_&)mo2`Tu#tNx2~nVl^jingOXb7D0JK!d;r@$`{lp2 z;~Q1?R&b~s3OriC0Wph;tBU1+C6W|3alsASR8!y8UEk2&<8ZBA)zaQ_?hdX>bcZx# zr$|W&X!R5!<^zCdGua=ton74svbM>IscP4@sJD!JgTe-ihM}b08?quLIMwpz&P|5K-s0$l+)?=yTuDTetWttDTD1w^ki>${E{c^Xf<)O*J*T%Q zT9BJNW{A^*DmxHp6+UoCxC3!?d+QNFPrnMPdke+DJO8XKD3dL;xkhLgWTV20pWBbVD zE~l1+-JQf#!Z@~l`V>~N|QH7)L)CL3f2_(NGI-k7LG3GinwgAV%+ z>%Mc%p@}8EQ@IfoU{FjXrA6vQf)tkf@{$wx3NdYD6WsT{rgsX}R8XKffyPjbRt7R! znOzfI+SuOF-c#STBQYOLhz(0?mThn1RyePBGIKIbBq9i=6hF!F0#nKhvRx}$xAfF! zh8djQJBgWkD27VJ_Jj07DW6cIG0)q!p}t>Cta-f?xjcnVw9CtmCCLm#8*bdh+D*;d z+9?E|yYS}#d`o*La2L~DE#AmV>BV5i>ICgXkc2E*UX#yKT~85rTfn~k#(HV*cpB>o zZj4uylufcL$_S*oyt$oXo++<{+r`Tgz2mrT(WrV$4l;}YGw1zERtpmTbNA-^3=22ue(RFa1qc*Pu z8-M$fY#t`J2E@o{wWFfi6Tsr$(fpDObE5X5V8U*ltVo&GSG6~FH1BZ7((Sdyy`#8Q z?i7n%ztSpO9HG9r%OPIq>EEP9y@`?BCihE2(h2##NTG%jD(+~+Al_WRNu5i?1hA;L zfLr9oi^UE-qeWuht+r@2O^k{5?l#F_%&XPCBV>c@nFJL%4HA_oEI+>s?BCIhPoLXQ zc7HGG&38Tr;`OD?hSDfX!Yzn%RgT}9_O52Tqqt2%=(UrCUMJzG^LcpuS{*Z@=SF8o z-j4hC!w@MivcIgqRq3kPT~aeQ0^QgtEiD zAvYl8#*m9T_Jh-~tuR()El(FClV_Ob8DOa{B*G|V+Y^T481BYqZRg-+=^}1)(H?#> zv6&T(ZldjVId&PRrVB;gwn?EKNRO7wLJnLZ#RtZUP2kS9`rWp)d9JNgmkKNh z@!XcXCViOFW;GBN*Gqc^DJ~w6z3$^~Gj(n9I@jVPMJe$iXG)8FB+5 zCphHAeCci=g5~Myasz=Jaz~3C85@W|b$Z$%HV~Dp!i7R&1EHL5_7}wsIV-0&J(V{Q z)OHl1ePgBdQj2fc0fIRHQ-f>MQ{?d_Jk5#YOZnCKHiEeHWFd&dzmdn6c41o(w>Uk? zIn|$i`wW^%jaWltx9XuWpow}vsco?Y09cii->6vlAEC_+9_6A z^=-aktg3Z5EU0>o^mtd+2Jr|EwxkN6C_@Z@qM{e|Wr!lm!J3J;X1^)k&YtFto0}mt zY0i+47;h@yIdxA<(YDg#9O)Y>CuYG<=0R6_tY8xRD~LQGT_y>Yr^g5;p&XJ)KxQyW zusS{Z;7o$tw9CZLH|{bgi~y62a+m}~XqQ=TojVYdP>{y-NWmn?DWq;7`1}1$GB;Au zNEZku;leb7IfZQ%jr0f>)=s7z;{L%VFaJ~F+H}6NKSlxKDEzq7*Ad_rDB<*K>EWWY z3P@BoDu}fMY0U_|8I&MF27W|md8?bduw~oAqWZ&MZ{fd8R=^A)LM~z{r!YfPdpG!{ zySYirLq83ZvANhiqw=UigjWd>-s$N)(JXuF>(?w|Yo}Spnk^j-^{s6j^l_p+@lin6 zfm#6dotktmpOEoOf@+B2%dK15d_%1-_nJd|73SpHbPloW@DOejui{7Wsw1f*JL>dM z$*^)=L>Wtz^Lj9Bwq#i3uo<=_^SmAmJ8(QV*4aRP%&;Z4IrPB~7$7LFO%Ha5y@Zeb zQNcka#kJ`{l4aT5qG&#^>H4$mK&SQTEXlG|m|0e?<67-`?Z|Xo@+`85+7HUJ2>+H= zV!FYtqbMMFHY5Dox_E6msy-)kDV~$RvvaDk=IafcmvprEgFzkKSvhU3$;9R&_^Cn{xDLQ5PaXNpN!n+{24g7ZoFRN~kHC;SwO zup}K6=Twf`2Ueo)yoZltK(G-lbtM~t%$WD^ar7U2-a~G2PIaITNdJ#xRvXyJ=X5Vh z($L{&;BzY9Tzno)W}^f$+2>U9d~#!^ONas3h&-R&;GgS3K)Shzu=9I_*SXVwlm80; zMgBBG>U8+m$3KX_9DgRhKYn+7Z~UtG#qef(X1oh$u*bv~#Y^Lp;=|+7*jKTC#uBf^ z{uFy8c314C*pFgo$Iggtj@85W?2_25*o@f7SUl#5eh_^*`V2hJ-VJ5FYoZrN&x-DZ zo#=Xao?RHNj82b^j1G?aBA>%d^ySF!BM(G=5xF*U2~_$Lk*-KXWL0EwWL9KmWNah{ z>)y}9?}c9t|317ge0%tY@Q=e6Cc^3P_V6k29J~sigNwrx!^6XouqX6!=*`dzp(mun zv^_8v*%{g#Y6=|_S{j-YDu%bToKPtERp6??g~1%eWBCg4i(U^r7kDJ_+rX{C_kynm zpAGIuyyv~aYl3^=L2Y}mBe*`eCb&2_D>ySa*8gw+TM$$33=BCn&=NQ{Pzy`a%D}Y1 zNZ5-8AhCSSObBm#wn);r*-aBS89x)&KDgg*uyYrzFDnY$j2nedJka={88;}YBIBn{ znO5U^hi)<0@e7x4Hm;Q=5+u(oGJfJ@Ycj5J=tkpehi)*g5}psG*vvTHNpeF^69#=% zWv3WBY_i?hF06y9NXf+5<|c}ats+wbw~Q@zfmWl(CR>bdJ3FNPMwflP**MiEn~cpi z*=TgyWP`Cu^dS~8ysI*1xM^;xG%LgXHltbEl_Ak;Ock918t;lRMM)JI(zcB58Pc{4 zbh9CC%Ro07uq`9gGSH32c!zE<##vvS3g=okbeUDw-%d40TOW0qE9A&mRtmYjmX-x7 zs{X(6blTt1X`;WUQ_=Q{ss`QeFhty@sqR3htaei?+Vy7~x=sIs>@ik^)qk&~igfnB zgucN&{V6JgEiMu*`jbut&H57#-K0P66vw%={+M&8QTRXO(hd3}a%^$7!A*VEP19KG zf3(Y$x9QSs5QcxP`jjXPZfUGIbh19#{$~^mS+~a*_jG%F5#m_4$G4)q$u=EC`9|Sm zjO%L9r2|e}7Y&+jH%P>f)@^>PNWg3G!*=W78TcW)38aRpKd7XN^aq@LEjs&|qJIXj z!R%*>=_dU?Cr_i!p56F*gMN?Q03k!we<#yHsjI5*w^nzXOTv}q@=#Md(~3?u%B{K` z=2mI_h)~0A`Y8DiaHgz}l+EK1#5$aEb6;|hVO`oTQ+Q%s+Af1`)}`$-=q6p-E`x3q zj@8guoV@C}vT;%%q7NG5Uf}T@ZT)((afY?vH1ja)C*5!{`bxKX;#lEVw4&1XN4j0P zK*h8ktF{M@Leo8FdqPeNT8F5*LT*^JHWH|mczQkYTjFi;qS%-CSRDta=)a0?i%yEX z5cytYESP%b>&r-G${zrhD+O&}Xz$n*S1`tCz$xKW7oc8)pQ`?mLo z-W3q4ylk9j9HGCZx9EeldjeXAHrew>Pwxfuh8Qc;?Nu}u{Uuth0NPA?Ujf1u?uP$vLs1G3Rp?^bb%CZXUsb8DJa$ZHi zU_=cjy%d)EKsB#6t+;Wb{Ip!8-vO2LpjeP*hfcY12q`EVEgm^LtseWS=M_W9a^;b`1y9*XW`a~R4-A47NGbU zcsIfuXyM!m%MJ1oEpl_o{=1R>N-Mm9X17nn<6M|UfP5HaWli^uC4Wz8_V<)O33ZE_ z54sbf-LvZe3iT0pQp3sGayo6C?}nV^5Wb&~mv$r-h1UByzC7Ff(kt9QY16S@X7^99 z+QY$>+f<~4h5>JYrT?daHo&N#7!5yS6pWhsZEX<8xX#3!U9f)hPv#E9%${>{mZ#Uq zU9cD);zh9T3}3eO#a={%oSj{hUhT+i@Xv_*@FVxZj(R{27;lx_2g@TgWW*U*2IsBh z4NQU#*(B$I?9X|12j9RTH}8YX4h)gr-}tV4Z(enJ#eh}G5b0$iM7mwqAtZ(Hc~_fu z?O4zX-p7`e47?eN-h{!ek$Y-(87{g4dqbo)e&c4SCJjrKyUpQ)DZAKH%X3IY({mZ` zsY8@S)Gn0vynDg7OPzfiZu7R7nriqE6@6~JCVdp$7CxV-Ja2)K!O?p+w`bL)tGNk- za9`-^f#CMDu3nkBeM?%}m`F1|oX)xOLn-(#ui7>62o$l!>#pD&keAMjWT9PMT*k1tU(KX z!-u2ge4x`IwS!S4Ba&x4?7PYGuQxjX|Mtn=_!~ z&(n>xrk6B}2PA#1a-HP?@;b`{B(3<1H7-~3|45;KsL+W^l*Ar|wiKFOsmOo8u2dw= zZc-%8Zc-%8o>3&to>3%ywo+%GprKv@@9n(JmYGsYre1~KrO;<8^cf1hQ=xY#^mc{r zQRr^=uq6NSsmhJb3f-yDn-qG3LZ710EehSN(2WY+VABaaeZ8FkylAtg=!DH^waSg93VoD9FHz{l3cWy~=PUF)g`T6(N4RvtV1G*T z$qsjK80`2+UT4Qgl4hqyl4hqyk}g!r9;VPU6`J??GCvC*HVbFwLSQ6sus}i5EHIMv zIHe-?9VV~y7F^Q2wU#t*ttFkOl+9J>9Nx>zOhc3#>@!PVk15xq3LR1CutJ9v+ON<) zh1Mm_!4ow1#(y_7fOr7?L#6)r75Y8JnYsR!a^oKg{f0unuF!v1=vNi`6@~t*LcgHU z&pULYNB^^v=+U23=szhm3)JM({6V??q(VQT(2pzhqYC|qLO)Ej9X#P7<;FgRzE7c9 zfFv7nk8=HPg}zIn?@;L575bM7ow!X&+@jEX75XNHzEPoBrY#%9GHpp;r{uX-p_LDn zewDb+^S`cqsq`N!1uj$QOBGuAXz6>D>lZ2XZiQx_U$SxR^Gnj_EAzk3&b{OfuU0axQs@;5y-cB( zDzx&U(w8XL7mE|K&pd&%aOSf)&=gn~SRR-gC=E;wj0n_Z1-$;xREMAOo8ni*FN&WP z-x=SGL$kHn_7TXwG4=u07u_|lL zdSh&9|Hwj-uOlBu{vLTQ@@V9@ky~*>_QS||k?%ydBCzI3_8FOV+j`^3A?!mm(^IGw zs5cJFm(EiAc|^S-aCzV&tR*k?iM1ql7!U>-H`CKg`ezEwud%$&ud$?WQ1b9AEw9UC zDz1}XX?dMrX-WS?DVyL$sl37Ox}>iX$3Ua2%8b)pQXWpxRe3l?$pq&$`)QXWeYxyhRPn)w)ig;5xXM8*vHL_|+l=xGW) zRiURSv^5pcLzWoH6isn8V){a^F|nUKyGzl{gT z3jJB95f%1P4q21fr%p`sN0J|=LjS#z|7nGO%Ape#_K6c0<}ax%{J4{;!ai@}JdY~Z zA93jarF%*od!f>D`;3WcXUuTj8M8yVr*s-oqW?~z_bc?n3jL5mAN8P;ctD}=S7=@q za6?P%b0svi#6DMI`X0we=A{l#7nkW{>}o*s(v_+KJxaMgQlSeJdW1sr@>Z7R<*lTL zDS7fFZPGu;weI_edFdSs|87>={vp37+yG68y&JncwhFqjebFjt4_pvgiMVRFhg-uV zLvMtB5vmWx5u$ir;Jv_)0&6ix@AaSP&w^v+vwU@k4}6PR=zYn1p7#jjKgNy5afn0y zTRo+((7w>F*NQwZdcL=NP~j+}t}maA*x&=ciVb$jLPzMw*zVf2kK=WH!<|ed%i&DI z{X1e891bakXMa{tpLDP&m1Cfx@5=Dl@JE&u>j&eg?)J_O_5#Qz+LII^p6C8Lsl=?R z#=vjf%Dy~uGC4d%^^s7psMuPu44R1jBtheh>bkyMHjU)0B<(}iE0@8a5V@B0;e@B8 zFGrkhNGl>_fmx6$?CTpUgneXZWS?ymmG=|&^<^Ji=7xfNwo&xWXB(5U@@o5rIHFdR zWQhnI785)}q-G&%jmT=#KY3uq7$HbQk3Kc=63fqdjPZu8MIFoGA!Pqx?Q@E~A za~^{W{sIF$=i-0@_RoiT2y!8744|BEibC;(#yARRdX;2mW z48lXuIp44YTn6pWUYhQt?wJQa(Gi+RtJs493J^c$_A>%$g6YR5%5Ix}RIxJy~muAQq&A=qA!nM7*EBw$2Y(bYE^u3d{%sBd@MH6 zA?Tid82dZCKt3A#ZS0oVwXsWL=frl!x?`;fRI(zrAXX8Z78?~C67xqtkG>auMNvSt zqG!uMC2OP0qKPA;CDBRI{AfICME(_d3vPv;irgQ$9d=fiVLh3OY>#Zf4tpi6)hi-X zBO@b&Bfju|!taOw7XDNCvG9FZZQdBZBD@=Fs5` z$3_i8D&7EM6WU_P?JU!BJBtlzt6nAx5MAofO>U5Os1VAH9;*||jUMPmd*4QCeY#U8 zXt_nkCMMpZ%PkNRE&2o2EjN0{%iVEhX<3tprF^W9)}qVZ3HBE)`UorcChw$mLMyeh zxNv@>=NyqB#j`d|s<(>7R`*Vmwply`G|k$z4GMjVLpN(p*0^iE{`%G#xPl5MQNkt9K_&gwWE13Jt*A5q9!Do^r&bY;sVTX)n!Btk&qEJ zM8a^hHQ5mnD3(C0CZiUJgp681i6-qstLQps2oUtVNh`I!cb#{5!mg`iUZXb2P84C> z$Ek_2ZlXz(`&oqJXwlvhearMeY#Pz&YZQ99LpM6%=wY5=48nDaPXjB4RwGMff-k}r z{nrZpEAgLc=4>hG$Fcicpi z{-&%OZs+yyDYTrZ;g!2Z-zBayjoF9VTU-gh(Ga0KG(_n674k+?9cj-F3DtVyzl=A; zW3l^U=~!*_%jnI~!y+$6&W+55QN|77W1&0y8w91V#rJ4*$SCQXDP#xIBMZL#_y)Pl zk5GBv3@JN64qJ9m(ci4FZ~7r*2e6zF)gG`1>#wgfZgNg-pKwXZ`)k-)aLIuqQoz-B zZQoQWI$$#l@ozB0BGpf!Y#_DBz9~XAh_Z{Fx^zy{YTFg|O%}2PWDs>9Z1V;8-nD&` zT-iYdYZ9SiXZr<HeVD?b!VSqqB?4n z8%}^tpHWVf5}j?VX&$|{4gPhYX7*LC^~fGGKEbg=oV8~_^~di(axl(ylZhs>0CPnM5?Hg;&g+^_#f;E)rK{CY#K3D;k^^K8o1Bkio1uluaTn-CX_Kg+}yXd;j zVnk;wa05&GM%fG81D&)|cHXh$S3LM3^cLaBcV*v5+P{y$@CZR=m}S-V q6}a1X6qMU{w+h?Fuexsp?cZThIml;DM@9?{HT7UzWWHeAGygxun4jPP delta 24933 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/dev/null | python3 -c " +import sys,json +d=json.load(sys.stdin) +for b in d: + if b.get('proper_name'): print(b['proper_name']) +" + $ATLAS list-stations 2>/dev/null | python3 -c " +import sys,json +d=json.load(sys.stdin) +for s in d: + if s.get('proper_name'): print(s['proper_name']) +" + } | sort -u +} + +# List systems that already have bodies +atlas_systems_with_bodies() { + $ATLAS list-bodies 2>/dev/null | python3 -c " +import sys,json +d=json.load(sys.stdin) +for s in sorted(set(b['system_id'] for b in d)): print(s) +" +} + +# Check if a system already has bodies +atlas_system_has_bodies() { + local sys_id="$1" + $ATLAS list-bodies --system "$sys_id" 2>/dev/null | python3 -c " +import sys,json +d=json.load(sys.stdin) +print('yes' if len(d) > 0 else 'no') +" +} + +# Show system info +atlas_show() { + $ATLAS show-system "$1" 2>/dev/null +} + +# Author system (generate base proposal) +atlas_author() { + $ATLAS author "$1" 2>/dev/null +} + +# Verify a proposal JSON against integrity checks +atlas_verify_proposal() { + local proposal="$1" + python3 -c " +import json, sys + +with open('$proposal') as f: + p = json.load(f) + +errors = [] +bodies = p.get('bodies', []) +stations = p.get('stations', []) + +# 1. Inhabited bodies must have names +for b in bodies: + if b.get('inhabited') and not b.get('proper_name'): + errors.append(f\"Inhabited body {b['body_id']} has no proper_name\") + +# 2. Uninhabited bodies should have null names +for b in bodies: + if not b.get('inhabited') and b.get('proper_name'): + errors.append(f\"Uninhabited body {b['body_id']} has proper_name '{b['proper_name']}' (should be null)\") + +# 3. All stations must have names +for s in stations: + if not s.get('proper_name'): + errors.append(f\"Station {s['station_id']} has no proper_name\") + +# 4. Body count check (planets only, excluding moons/belts/oort) +planets = [b for b in bodies if b['body_type'] == 'planet'] +star_type = p.get('spectral_class', 'M') +if star_type.startswith(('G', 'F')): + min_planets = 8 +elif star_type.startswith('K'): + min_planets = 7 +else: + min_planets = 6 +if len(planets) < min_planets: + errors.append(f\"Only {len(planets)} planets, need {min_planets}+ for {star_type} star\") + +# 5. Required structures +oort = [b for b in bodies if b['body_type'] == 'oort_cloud'] +if not oort: + errors.append('No oort cloud') +horizon = [s for s in stations if s['station_type'] == 'horizon'] +if not horizon: + errors.append('No horizon station') +elif not any(s.get('has_gate_infrastructure') for s in horizon): + errors.append('Horizon station missing has_gate_infrastructure: true') +belts = [b for b in bodies if b['body_type'] == 'asteroid_belt'] +if not belts: + errors.append('No asteroid belt (add one unless wiki contradicts)') + +# 6. Orbit consistency for top-level bodies +top_level = [b for b in bodies if not b.get('parent_body_id')] +orbits = [b['orbit_index'] for b in top_level] +if orbits != sorted(orbits): + errors.append(f\"Top-level orbit_index not monotonic: {orbits}\") +if len(orbits) != len(set(orbits)): + errors.append(f\"Duplicate orbit_index in top-level: {orbits}\") + +# 7. Moon orbit consistency +parents = {} +for b in bodies: + pid = b.get('parent_body_id') + if pid: + parents.setdefault(pid, []).append(b['orbit_index']) +for pid, idxs in parents.items(): + if idxs != sorted(idxs): + errors.append(f\"Moon orbits under {pid} not monotonic: {idxs}\") + if len(idxs) != len(set(idxs)): + errors.append(f\"Duplicate moon orbit_index under {pid}: {idxs}\") + +# 8. Parent references valid +body_ids = set(b['body_id'] for b in bodies) +for b in bodies: + pid = b.get('parent_body_id') + if pid and pid not in body_ids: + errors.append(f\"Body {b['body_id']} references missing parent {pid}\") +for s in stations: + oid = s.get('orbits_body_id') + if oid and oid not in body_ids: + errors.append(f\"Station {s['station_id']} references missing body {oid}\") + +if errors: + print('FAIL') + for e in errors: + print(f' - {e}') + sys.exit(1) +else: + print('PASS — all integrity checks passed') +" +} diff --git a/tooling/atlas-names b/tooling/atlas-names new file mode 100755 index 000000000..5563ed0ce --- /dev/null +++ b/tooling/atlas-names @@ -0,0 +1,15 @@ +#!/bin/bash +# List all existing proper names in the atlas DB (for collision avoidance) +cd "$(dirname "$0")/.." +{ + tooling/atlas list-bodies 2>/dev/null | python3 -c " +import sys,json +for b in json.load(sys.stdin): + if b.get('proper_name'): print(b['proper_name']) +" + tooling/atlas list-stations 2>/dev/null | python3 -c " +import sys,json +for s in json.load(sys.stdin): + if s.get('proper_name'): print(s['proper_name']) +" +} | sort -u diff --git a/tooling/atlas-systems-done b/tooling/atlas-systems-done new file mode 100755 index 000000000..4c2c1cdb3 --- /dev/null +++ b/tooling/atlas-systems-done @@ -0,0 +1,7 @@ +#!/bin/bash +# List systems that already have bodies in the atlas DB +cd "$(dirname "$0")/.." +tooling/atlas list-bodies 2>/dev/null | python3 -c " +import sys,json +for s in sorted(set(b['system_id'] for b in json.load(sys.stdin))): print(s) +" diff --git a/tooling/atlas-verify b/tooling/atlas-verify new file mode 100755 index 000000000..c6ac437c4 --- /dev/null +++ b/tooling/atlas-verify @@ -0,0 +1,93 @@ +#!/bin/bash +# Verify a proposal JSON against integrity checks +# Usage: tooling/atlas-verify docs/atlas/proposals/GJ273.json +cd "$(dirname "$0")/.." +python3 -c " +import json, sys + +with open('$1') as f: + p = json.load(f) + +errors = [] +bodies = p.get('bodies', []) +stations = p.get('stations', []) + +# 1. Inhabited bodies must have names +for b in bodies: + if b.get('inhabited') and not b.get('proper_name'): + errors.append(f\"Inhabited body {b['body_id']} has no proper_name\") + +# 2. Uninhabited bodies should have null names +for b in bodies: + if not b.get('inhabited') and b.get('proper_name'): + errors.append(f\"Uninhabited body {b['body_id']} has proper_name '{b['proper_name']}' (should be null)\") + +# 3. All stations must have names +for s in stations: + if not s.get('proper_name'): + errors.append(f\"Station {s['station_id']} has no proper_name\") + +# 4. Body count check +planets = [b for b in bodies if b['body_type'] == 'planet'] +star_type = p.get('spectral_class', 'M') +if star_type.startswith(('G', 'F')): + min_planets = 8 +elif star_type.startswith('K'): + min_planets = 7 +else: + min_planets = 6 +if len(planets) < min_planets: + errors.append(f\"Only {len(planets)} planets, need {min_planets}+ for {star_type} star\") + +# 5. Required structures +oort = [b for b in bodies if b['body_type'] == 'oort_cloud'] +if not oort: + errors.append('No oort cloud') +horizon = [s for s in stations if s['station_type'] == 'horizon'] +if not horizon: + errors.append('No horizon station') +elif not any(s.get('has_gate_infrastructure') for s in horizon): + errors.append('Horizon station missing has_gate_infrastructure: true') +belts = [b for b in bodies if b['body_type'] == 'asteroid_belt'] +if not belts: + errors.append('No asteroid belt') + +# 6. Orbit consistency +top_level = [b for b in bodies if not b.get('parent_body_id')] +orbits = [b['orbit_index'] for b in top_level] +if orbits != sorted(orbits): + errors.append(f\"Top-level orbit_index not monotonic: {orbits}\") +if len(orbits) != len(set(orbits)): + errors.append(f\"Duplicate orbit_index in top-level: {orbits}\") + +# 7. Moon orbit consistency +parents = {} +for b in bodies: + pid = b.get('parent_body_id') + if pid: + parents.setdefault(pid, []).append(b['orbit_index']) +for pid, idxs in parents.items(): + if idxs != sorted(idxs): + errors.append(f\"Moon orbits under {pid} not monotonic: {idxs}\") + if len(idxs) != len(set(idxs)): + errors.append(f\"Duplicate moon orbit_index under {pid}: {idxs}\") + +# 8. Parent references valid +body_ids = set(b['body_id'] for b in bodies) +for b in bodies: + pid = b.get('parent_body_id') + if pid and pid not in body_ids: + errors.append(f\"Body {b['body_id']} references missing parent {pid}\") +for s in stations: + oid = s.get('orbits_body_id') + if oid and oid not in body_ids: + errors.append(f\"Station {s['station_id']} references missing body {oid}\") + +if errors: + print('FAIL') + for e in errors: + print(f' - {e}') + sys.exit(1) +else: + print('PASS') +"