{"approach":"Observation-only diagnosis of where incumbent B cuts quotes for cash. No candidate and no oracle were built. Replay actual arriving retail orders within each original step against temporary, cumulatively extended books; discard all extensions after the step. Measure net participant retail edge, including displaced existing fills, and additional stale-quote arbitrage cost.","tried":[{"test":"Exact incumbent UTF-8 SHA-256","expected":"baef955ec10728839f7c3357016ec9eb0550e7ec689bbd5171b1cdd5c9e37273","observed":"baef955ec10728839f7c3357016ec9eb0550e7ec689bbd5171b1cdd5c9e37273","passed":true},{"test":"Uninstrumented versus instrumented B, all SimulationResult fields exact","seeds":{"start":239000,"end":239019},"n":20,"passed":true,"baseline_seconds":4.838402257068083,"instrumented_seconds":5.277914028964005,"projected_1000_seconds":263.89570144820027},{"test":"Full measurement block, serial run_batch(... workers=1) in one OS process; first 20 reused from verified pilot","n":1000,"passed":true},{"test":"Analytic baseline replay equals actual retail edge at every directly binding step within absolute tolerance 1e-7","checks":30375,"passed":true},{"test":"Synthetic replay: same-tick competitor FIFO, displacement of our deeper ask, and stale extensions charged to arbitrage","n":3,"passed":true}],"next":[{"change":"Test reserve=100 instead of 200 only when phat<0.01; keep the current expiry release. Edge-at-stake is the measured effect of full reserve removal in this belief bucket, not the predicted gain from halving it; re-measure whole trajectories.","edge_at_stake":{"local_net_per_simulation":0.21724846,"retail":0.21724851,"additional_arb":-6e-08,"se":0.04710296}},{"change":"Test xu=0.05 instead of 0.10 only when 0.05<=phat<0.10, preserving fu and hard collateral checks. Edge-at-stake covers all uncovered-policy cuts in that belief bucket, so it gives an opportunity scale rather than an isolated threshold effect or predicted gain.","edge_at_stake":{"local_net_per_simulation":0.21986065,"retail":0.23861929,"additional_arb":-0.01875864,"se":0.04289171}}],"code":"BUNDLE = 'c-rN?TZ|l8mKavEnlZ*XE5HlMf<I=Z=xiAkQOrtKRyVuZHJy}-?4p`GY_gU`POHT&BqK8;tAdpok&K9}N7IxA3($xBV+kumA2L=jWN9Tpe=GgS5CjP@AV7jX4CqIH2J~3?e+2`=%I9(4aU(N}WbX{@o=H|_#J%U9d+xdCp4Ywi@TY(1`+sx;|I7c!$?>26*T3?s-S2N~;HQnxig8j5^ZaZupAAN*@pPJGC&|shAkEThFzC*&+U@qkd=yWEGMz1^ag`Ur1U}Vi65M}q|8bxo1oI*pr=u#(vtSk%XGs+(fL(ynYE6oK7Ia5>Hc3x{bT-e6DhOKv{C7_lyhkrP{4k%*lPZN4&8NS%n9aXPCzC}94Vf<v<076VRZ{#cF48y~CH(kFQpM@?{xrXkg(HCow3lXyMC6FO2S5+#xhPa5<ziZuveezU8l66&XB_~2lFpK&#SFT8)iEG&0SRG|Wl13cz^}m&fpmg0p3SGpfaxI$&x?GNl&U$avqz)6NDjF`C#Z@=GJxX4c$iMp>Pi48t0JzFlPisInH-5{fTH*&3RhS2q_jt3p9WA208(+fKb@LCALDrQgU1&c{rXv&T!=B4#-qe2ag>h5FdS9M{HTJ)k^Zg00LFVT2>QWudfVn^+g!G7P+33H{gBTTe)a=uUp=xpOFedYOFs8-m-m%97P5dz4*9Icl<I||lzd`wlYVG(uYB%uYyG)RJ{$=3T@HnQVAECcsC-~?s(k1&AUr>A9a_@n)4%?ge{u-l@v~Ig%;Gd7X(L3$G?iS5Z(6NZItd1Y3`mJg(+}FRN_&rxDdMzDf}^XlN@fR_X%*tzFp3;}{?+gO;~(w)Xk!CE(Gq;hI2#Z1%fUqsVys{xc(fSG$(dwTaTUz-G^<D!isH#QP_r+&OhyYFhHk6%WRbxn%Ssr6AO@M3PRD@+73Om+1ub6%7ezdu1CZfWkd-fC*rP6ruTheoCuOTtBOA;mQ<Xss{||oc=<%aqin0t|men}TIsyTh-6*Ja-PT1~od$<j)oGq>Pm}XxDhPdZxJai}ngt;6s)EHhNEzrE;FU^1EDfR6R=w4HQ9)<7wqQO6mS`=5Q|wq4+&#Ge_{l-=;sp?+LIGg56-F;!Y;6T)4h_Xs%SIc>Hz{H$yckuBA_0J9u*hU}pjkX3a#lI_w*tK5V%(ah!vbbgZ~;V5#49mEqa21KErV%3Is*XX`~t>GFH?iTWPwcqzX?u^vn;O&n-chupS>)Bq~d#dRm!i>#wZ!aqceszj;nYyjmuIC+qlG~veo)9*xud_4s3FTX4fJtvDSawn4hPAVOHG+^wwF68>-stt7lPds3&HvO%lnOVm4SD+ObM-HBW(Q9*+l-%?6Wr1f;wIeM(9dS^!()1SA?`IY2B2$PeLoFTlSr=6BrD5rQrOrp(-Tj641(<VxQ&Ug6f(_<36tXdg!%RjHuC>bqmc75Jr9exz8W?{W**(FLq}Ga$koh?NYgbad8-g7%a4u~9a@bjw;#%(CTa3={R$BF?JC42xP1%#uL$7zEfrOO_JLdmdZxtGEDWI2nxM@|5744`fL>s=V~z2*UcnqXx^xo~Cwu0eTNei!O<3&@kgMiqSAqMPRi9S%W1}pG)Uqq^sk9gJcHUc~TU45w;Iz^9t0xY`&<J{BK8AdBHV3^{|S|Ge82xR~PxU452NqlU$CHIZOw7hcf<)1V!ZmHr5Fa9^a>L5w1K?RO4mhG-*G`&f{r1X0-N#*HHA0fs{h1#q<@EWgb_jd-xM@LllwH#;f)*6(52sD5egSt4|`XDU_9CZuDG8C#X=9SirMfMHZ5k$|QjaiL1Oq2c7^H^!CHx5SF1N=<U%OLMw<8;bN&n+5(@zS_Mm2S(zFF5_Oe80hXxqkB}&U(<(_5TGSJ;Ow@Pxf+6D`gDffXMHvXeR|Y3j(CknxK@A6FYz4|GA>Gw%x<pupMsqN&^mthUIyA<zqXwx%l<(s|nq|Za(XTBIp$6ZP#PLE9%1d8>!iB?_b0Au>in)Fa!m|utx61`-745y?Dd@T#P>flp-V@7r$iJgE5i~qqfNa2W)-*bxKY*)$q9{e73sj!P@c43sYO8;qh+jK$`7i*@0MGa&p~*wC=TV*|+~(4b-H)dw_KcvwZvn^c(fd-szy9~1{jp#A<&6#e{A#lT4*I{e1=iEU;^G99;xe)HvgNv02go@`Bh2rYa8_7R24|esHN5k0xz#U*4rk1GKqwcyR>&T7_luLo3@nU8dMSpGz60krlnP;0Kk2s>HMi$8A#6*qTBt|~wfS2&9s}0uc{qky+s7q)22!JqWO=nn3z$7(=xKNXe}#muOQ1wA&}xL*r^$5QZ-dDLc8QX8@kxxbf)wy6Ig`{_3p{lL1Tz-h3!Mc(!asx`sO-nWl+jI1K+#_Xb9>ud=sN+rLHaOBI#NIA<Lr@bJzC6$(C>T_n6*|n0ao^E;Ao4N!5rXg;A_AJxwcJ8h_`_q4W0EA(~_bkY-I~LfdF<)!n_Zoki!&2i(d~xLFVrQtUa;>g`;c*XeHU84YsbO`-Ijx*%en|>-Y2{cT~_C240#50$vb`N_#;M*8x~lrrI8l+EQCv7frF48ff~cVxt#Y>K9E1?U<vfp<M>ruRylBVbls`LYn4fH)z{%pP^J^UjZ%CkB_8HU*=-CFHXVmj?bY)Je($74Ir}Uz$*)r!qj7dBIlsrq-FIS&^iwOJ6c#k2;d)E$yM^f7H;$oz!(CE{vfeSf-htYtT6bfD<o0yL7zNPZM|}e>QcvimYrp&bBPL|Wt#O--Snu7uH_V2ZPTPhuK=pwdI_zA5o?F7zewZD^HMr?I{|2C*hpWu7YRfcP+A(LeSr`Eq}SPEHjpeXUW=bnAN?A~8W$d#^33=*K=)M4)(I{^hl?{>xkwsIWirjS1%|dpu9Z!sM$0fxOl)zuO!PkQgH~*qPc>lPl`|A1sq3t?bRyN|G8#4l@6_KQpne^8$2YWnb3j#r%rY1mlzw0|39@xSa#<8ozjYZwqrO2e0{|1WZxB}*mnNU0c;0JPU4?o|qykMY&Bh?q`nz?-a;Igeh!ewmT*7REX~H0k&JKi_kEAuHs<KL%U`0`hp8zqzcyNo~2Z01yoi07$2maDuCBU->W7Ka&@fkcBB>1HJ$;4Zny&0Zb?9f<VdA}HXYR1KIdA0j#22<|qB%Y!jYgV1$o52OY5!G94&4I!)#z2TLPsrTjudq@y(H}X1zjhhIvE&c_=`sfq9NIYojx6^KOWbabD?i`s?Ht=42iZ;L@&0SkHvV`6JrzGmGE2%B*2?=a9{$>2{5S32{^7<3eu5>&gAllD*$+)Nf_emYP?}7~(21`eJQ^H6d2sJw@btmGpTdasT3_w|S^LpvpS6y@+<$T~`1NP|kDfmJ3LforcY3Wa4({(id-!y4^x&&!5BHxwc>L%HUhVE6asISwD+Fx5O){Z)(<7hbm5GLNSrBHRgOwPIlH%J44sg&_$S+)Iq%UK4umdf#1)o;1N(>0Z9+-T2Trtk{dMq0T`FApltpdAL;w7Lr0H{e;rqz{IV5g@`;2fxfr&l$|pWb4hM^ema(p0CwU8nhUTn8}E(-NfKfF|?|$fb+)lI`B^O6s~UPeocGJvffNO`L|HFTCW9iy}P-OmT5Bk-SZBY5oJtQJBX-a94DqOutQBD)hQc-r?fP46&KOZwVLGbjprScrDzcP$n-dV%=Iv2-lCR2yv)mO)~6X;_Mj(r|B4$6~h@EOhJbR{Y=s2)grGFPuD+@<5$kn`APm<&77-o^*P3&(Wm)bsJ}`Wc!x{Ols(_v0t9HjOB+I}6+VZ$5_7;Qdo@;Sgya@vFq({ewZUiv<rZX6wo_fw)fQi^x{qBIw1ir#=3v+3Xo<R3gMVFu^@zY$&AD#O0F+VP)$+0C%{8VlS^^2^K4ZiF-7Y|_%4g}fY#t5am%$pAJRATaHA34;GC76fOON!j<)RG<W#i6mZ!sIz&dx`!pmZVa)(hA$KH0IQaII52AG-w{BtACSd|-+?7nk0xB}HwZAKltDi&`Sm2D{t+<l`kpO|YMIKl<nsXEF_J8RWqJSjeFz<;?~@-L025MHoY8cJD1Oh+w(k$BvfM|GR(XxBm7Y+1S9(5-msgu&?DM)nVytxI9HFmncISD|Z1K5f3_4IbUB<xof5|`ID^H%&X!hTGf$KRlHtQ=~TOX&yylPNjd>9m9XGqv<8F=3lTS@uqTCCAQRz2SZF7mfC;u&i=5ZZ&|s^h<42B1UM$>`uJ$L0c(wi3V>s8m%}$MkYzh3+QhmTU2fijOTw>PEbgJ)b-U^oR`1YHJHZ*&v-5(+@Baw~jK~_WGL6;F%?2Z;i0m|;c%{nsUOoCPWHLkR9iJbCXA<vO3^n49{_(V>~9GcR6XLpzj)cPCT2zmy_b6B3R4b<}{DX`R7DRYLJYnCL1Z+X!)I|oW(D3If+<h>&qc8qrBv2NaqD@tn+O$D?C3ycYRN3kpH2`4ITkhDl9sI=SkOy*IoJnE9@P89Xnb%;d=^d_uT;7ZB7kN<QUUzcDgqZJ7x>o4m<upKl5@{CG<$%r*z;~B92veB%AsgsR8(4`>|x;ghKB)UaS0~62Z)2o4~9>y}wOHtI|O=qr?uQH5$uitXIn&U-8D49K*-*=NsP?g4^=#0p5L%&Q~p?nXGmioqbvx6Q4kn7pRqx?6VxZRT^OGtB}7iH+-b>VQK0$s}PL*K^TXWz8_W!LJ9P;-F2LaBuGxdr*t?u@UIWLhT8C>T=1S`EX-8u*`$LvRy~htMW*UHo+$&C{r}v^5KsWqmZ)i{6>&h;69msG5(<nMX-HSo<jI0UBO9hpOCSs2lGD4eaTeR7<4Hs--|6RFe9HgImX`wVX<82q1fn=~8~DB5RgZ169CGXK<4uWD*euFS7hqycgVkcpx1|j;q>LT<V>0mfAX}uy>Qp$NEe1UH04U?#n#Qyoni%^B~WrS0P3!LwFWprtK(-WS&+XZb8ay-_mKjl&mCDU`$@`DC5#(6|X8%Z>a)>pZ(f>$pf$!lwJMYhn;eU+m(zL^;*&qZdZ{{J(v~o*j)Z>^z4_7wUs#Z)mFl>KIp*F996I@>gS&RvAHm?7`ZQ=hBog<&DG;!>8bu49*1BUFOrB>9{P$aj}7<O0~j4PHc*tp;d%fgBSE0M6Zt5G7BA&E3QFPkrgB$_jR#e*9yZm?@_I${S;sT8t7@8HWPXq@Do`pD>_QWKj<PiO!4TpC8hKoIa4~oF7xM80cLJ{tS$9#>(rYQ>CQ62IrVfR&GvaS8JhxotEtPjd)^UDUt1jp$38nQ1FQ~37q^>WZt|Oe@UNF7AP`a)_dIw?jod}}uP6(|dfZk5{yp7=T2p#d)2U`do^M@|xMlzrO?!WvefAaeq8~9n`<Kt|@>-qTj&omv9157?e(!(?52*iDVBF)F2icwF=j%1b($uR-2i-~wnnlWhAplXg6l>LLQy?lC}=sX+D9U+}DxlGH-GORcbd>;hYqrAEgGhuunQhkoh^uA!6C!C=}AohaS2v0@SXZd(BO(@)qfs?jHT!rdu<kwSRFT_41#G~j<TZE;O5mdEF*~O=vWsXP;Fpm*Q9~$j-0!~^HT_rea$thFlS%Kdwg|u`Wg53EB)aHT8aKfZ5Omw7#9p$0pCIey%U+3${3nU4BL?gt1L~d3IBL$38QaU&0!*gNIEG)ZU(XXfQJyO&Wy&wZ>z{N$a$VurRkyU>J!ny)FOUTBSL(U{qBs1$Z&}bhZr9-gWB$=25nk|5>F;zTP+g$^4^GX^a*DIIio}JCkTLerj>f17aYp64_0(3_>U)qkBfbm7rF{+x6Rb#V7sSvhZIQ8ukvXYezE*-(Pg!ys&Z~y)ezuefs&k_kEgy4J1l~6JW6r(E7r^3AtY=jAE;^hN)iCo<Yj*?f4B)eV$wzXqf?@zY&Cfoax%{|GyA6f53_Js;q$2vGXdhqb^BeCVHq!`^vQc(CtZ1akXlccN$=P+@gJM?BSOs2Wm3T^pT_)$5-F1dB$VSX-_6#8A|>?q-VVu$-ro<6wu;Bf!ZQ((-tVavB$_a1+Bc<}VW)5lNnm9gonwg2QUJ_4nu-FkBHbpOFa{3*6_Sus_W2vMTqMr2|hCXN}TV-o)S<RXKY>L+@<_K2b~5lRG-IpiyNR5)Rk7A2x-GC6&gR#n0tUtOydjA6n78FdZ??I5vKwAJgYq_p4C>pu<Z=p0z`N=<)4RtH6>#-2OftkGcY*XU%lMsf+dgpx5VXwxQ|u0up0>Ee?U=yaKz<DqD{M$B9?5l(|rY*JGixR1a(XRh{ArN!0WI2v?gfqIIFETENQ886*YQ9C;p87i-m(p1V)m31RR*NyPKWdsk|RlVz4sSZv_OL=tyI$XlkRJ{erjNlD!*6<oD7#C!hHg7e>wC;{I{V_=N`i)b?^dU+v1_+=db6z;c469m0M)-UEN?el0oYKkFYSN`=VK1r$Jy~2_r;hZY8W>{Mc9Ny#DXRRX2%A+4c=()`4dB0HGlEtZD<je;mrE7R7)?+tR#*?5Riz28$w2FYHET3MC9c!p{IaD6nQCcu%=Q?sz^y>bAoNX}Z4cg^ptoZve%4B|UQ4!BxR{0JEP5^(`?za?)<LBKZG&Alj~p|&w_{q4T4gPg<QiBT0!Wa>?t0`9W?(L&-w|N|^82UDK<#c>A9M6rpa(Hn#zhuEB9~qbSp&3)`21jEZSyQ7LsSWe>A1t+cxyJJAf0T6n4&V2rBtrSQJ{QHP$e3I`F5IMCkQ1TXsYf+l&P@S@<io|1mmKvY!6XLcJDs>rV}tcTf6IT_bfw7b=AAs#*e<N<HQ>6G)52JYvO)%@bKXh<Tb;s8WrM!hN0&L1yvc|N=3_x_-^FfgBd{!S+kW9wi=@Fj<*g*nNCnxHug3Do~MRIWOE|QZ;Sbyw}&=cIlpi?b5fp~ZlazZ*RGkhSDUb6R}``{kC*iIP!xb4Z3m%fWIHfsfHBi02&SI}f*;+mLDXguVq(l9+Kr`Nd>$+zqCHKVZmpWFx*dFRXW5+ew4?j(O6a;cG*|C>UXhTv!uavXS6i`DgS}D(yspY<XRlBy73qyih}jBe%gG~IGETUmPX1k+%&VoIMz1FDj9ehSU)`6NMdVk%w#@B!VnpmmMq-xp)|2ZX1gE*duAcH>72+I6>EBsrjcpL(daC9ZnNVr)7!VZSwiq+LP4%P%smzEZ9{JM~<AlNJ>s+FaC(%mz21GgIi7&G6x?V)B`U?*-Ha7^gtcPw)wK1Wp%nPU!Ht=Rm@hg2v6lcj*e;Ut*<Cx*@1^yfsO}{P$pgK!R8Ps#qxY9CE3IPk^?KKE)v@Z-&PbOaz)#{;N$-|D8?N5EIr99fd?ZS5O%%cI@#jU8B$G)-(Q}9lk9&RkxFhKfVo5W@#Y4LDbZ2&pt+$jw6T+9<S?U$AZX<(K|4YRc>4|HYzr#J6&b-t&THhuloYxmfxoV*N*Uwg{8{yZPPOh(l)=c6xKByq}eZ91Spz;V|oBS^$WI@$@}q;!v{03G-#C%B!DFkJ?iMC%IByqa-6C1KZVL<a|&+MuocRufjb?CQKr4gxvON{sE5px%*e6y(MO4Cu=T#TzqLWny3s^PUyjSTVl1bDRl8A`X=}7-z$1QxeY`!>XY#5BOpS_G<(72Zedkmx!4;Arv`Srayg+X4|IBrpVb4)zCnIt~VR5P^#)^tWdGmBaR6#$79(hY{6<m870(MFHO!R9Y>N)mWnz{GG#4dD7c@K=Xf1jt16Pv^SlJR_Z%obK`$$LQebg0(N~TgMcUCcO$?t7`W8e;e*1NnTvnmS=_}*#W`eclEfNmwb%x?Gt06GQrf5Q45nksw5)!OMe;Svd@5FvQ+}iRkYK~vta(p?PH0=2(RSuYnd(CSm9)UsrD@JoG&`H7Qn`)LrmWxbTK(^y7^0&(sVCsarF{`3oZ;_3_&@X5klH#Ck3)~w03o#vUn@1ypek!Pj6V5c74AlV4Wf8mu+t-d8uEF#VKq^lrppfFmdW0I-&RozPrqdWh*wY%{({3OgN3j(*+YYE%02Ev88^K;jnLy*f;FnIT$ug+3s;h(5%z_5}rEU<q3J$9nePbHCp_piy0%-l}G;&|x{NZ)tc)iXr8uWdgKo%bU6l%r6i02sk1uwl;2-maDN=`75>YgN3Sl3IWXfsoUgq4WgfCnHM46&B9lSd*My_5!%CGTvS08hZ|65XVK>ohRbH|1fkYmla>#`syd%)9S%E?cPh2iC-`*#UbUXDb*8<h-fdg|;E<jcJ15Y%m`|mTPwq7!}_|8>p}yyS5{RH?UJwi+V>^ERz65IbuUE2`%-~AZ>kb74!d=&$I2So)kJY(;p0C(+-n8PZ8UF#wT`T)<UE6kZDB^94~(4+AXI4QcgAbj0YpQ)3>&=ZOc`puFwxbkvOZR^s2o@jFzMy+KE!YssM)12cuIu`uk7rHf%atN)>k9`l$lE=qHMB9$Q3#XM!l7+eEqXo`_;?3sZ5Yx2B5BgrmJnH4Zj*)F~Er5>Bqezg8IA9AybJ)Eo6Q@|=WK-)QMUly;#hOkFSMyJBjS-bd$UsEU0H3OkVyZ3ej3j7i_{hF-VSj*J_=te34oD28&wgd4;5coWrPAQKOtTgfiX>({cx7u%nPXR|bDAqH-Bq5h7jd9!QY1~Wrgh-iw+N+a}4ti<Z6+X4MxoQ~rv(aW1}NfVk7d1bxJ8DEc)je{mHb#O;YpJUg|*EsC?whp?{tlA3dt%d8P2Hf%apzB^?#{*nHaSxZ~>qFhHfz_kul|ej?H8Ho<aWV(5Cr{*%2wP2MQOI_pw_D{Mz<2zs%==mS*IBvH<<sbhage>~=n?CAWCU_nLq5+;^U7-N_ytZ~s#=)sM5`8Qg3e^s2^UtA=4zq7HE&C=@eMBq&f{%YA=`2rHC-J3CEu@g@m#1ar0;1iG%|{@e|!y&c*_Y>7mh!#Npo$ctUvpCvZjH#%btcC>+Lzx*1P_H&yw$ItGp9OHrX2Qfg>r!;1`=C4U`+QID{f%s(qbWgrb(4VdQ=|Ox%<cvXZ6W6C<yTe=woUlabcseHkt=RJK;lzbD*z{Uz?aMh8-z&vCKDEqt^YVx4G!cSnLJM_2=1R^Q#H(435YV+B4^&-eNNeeafI=#RbXSOiXf2P(Rg1OH5SBN>d9G3~5ygy&EoS@n)zr+XWEu4r`i5Z?$SqpSo}r&QC>;H%Z-(6n4a5FJ`sHx6`t8f+V_tb*ZexG`Z_uWqb^)?0A9gQ#aI636b;8Z;%=l0>O>($dySO?!*<G*i6ym!F{KTR*RRE?m@j0!Wj$!5tjW+Uu8ZN|t--!0O}GiRw#*-rL!f)me^C6WY|>l#nVzIV++pPN@d1VRdUpe9YDze0%5KD(|{E1Y*;OvOD^oG{0@pa4oh<*NX9qyCjO<2=~S+xQOF*(~0HmHqvw>d%unoDqEZQrbBL?&qGHB7(4P;#ZAX)If{$117V$QfQ?lRhiOyVvg4y<+OS?pX;AfT#U3j7Gd+mPtM$)T<6(6M58Fox2R8$;t^2wM-Cb9a^=0EsjP2p;CEmQJlm;!wJQ)qkQyJ>pJl;BaVM*rlHPaa0GVQ=S1sbvrmYv+kyf3U1mE>tzC`RO4xE1*9*S%$#_Vo?LO{dISK?y8E_l6Kc?vjR2*RW`O=-lXYZTVmgUEhmy4URuB<vnK+7WIzS`lj9j=GK&^10YuqSwmReBenD<edCyB`~0ky=jbe_u<@ql9-HM9m5*BuM`pQb*l$}6$7T6z$+xZgQCUs}{bFr?^vio<4sTu`F&fju;vft{+KB?fI%#5fPOtF5Kzz1?#&bZ8p$0Ct#=tiYOJ|Hr{u}j9vGc-zP#Ko*d1trM$WdqI$noB?Lngglq2%m3xcw)0_Zp9$RDjk!1fl5^I-cOh@pClq8_%GVt~h=8T)n(HfsPBSqvz@+-Sg)JGS0zsjrG*&b5=c_f6%L+u%^zQ^Bp(mo>TUpfA_Eco!|e%8yoofp!pObc^=}m4l0|))v5f>cXF(8z>xQ(AkWn-;%qZa_8)_i2_z|IxM6oZ2`?Lx720jQE|ZD}Ts*k<#r@zsjf13^=qp0xwN~9*G9BRt^`#4?!b>_B8Ge+niYnag?nIHg>|I_~bdjVdr@)ZLok*a;IyV?;*QmL8^TkBi{2>Di=Ces400xUWUx}I}C)4yKrIW+(5N3V5$%HN=s;Q3B{|TKDE>Ho|b9TIbO95ay$88>NBV2Kj&4SOYJWmXrBIAQwno^iVbJF7BpIRCkAYs<?TT>@yCy`MKw@WI5wwj{^nJw5vzqa~Jrkg?5(kJ84#kVtoTWMW!_WT0Mav@xVE^q}B<&MSZ*UmxbBYTW%w>qumTO{SdG#+m6v^>mwa2by(tTj%B&^K4D>NMu-c;y+Uj0+xS2=*sTJ=(7we47+`mx=HcZ;PaP4LE^mhBhiLbF+M$;LUO|P?`#E2Y)7Blw}GORQHDk=pLi?RM)txqQ-o>fF>!Q6D65q?@ZnDs$k+pHKpuiOP?EO(T!NV#^B<NS9zwZu)3C=;z|%sb5O=}WMSTf;j|Um_vh&2e(cMAKw1bu<_yCN>|Md2K*`gHy0v@GB6X9MarVACGYNPw8xWm3lBa<q6CfrXX|H(LNHAi7E$|nW$x*C(f-l_)^2T<kWG}FiW(tIJm0aTs3(AcKR2&fcna@l+O($ge(Wv*u=x;9>{Tn7ZtZ<IoYo85n&Ny|fu#E)y!0Sf^*UcImmTxt)0h^1DgKK1Maxqdm`%3JY%~@+5#!h;e=c5vSOr=#VaAiCLqf@eTSfKdgmA(6f{&WIk&9g5LhPnLHY*C%6na{uqed!#YDuEYe)5Y2ZsKh&H$H8e*Bx|p6VoK}5_Ag@4zwu(kH}T0UpBCcyF};Y%Qg<{wBQLJ5ILq>|zyNW&Oq<YJO1RcGRPr3s*Lc^C_eMx{Ne@wJc*SJo6QyypCx}^<+`TYv?OU?YwB)hVdqyI?JjTH|QEi@=m3gdMqZ1OyfR1*PN!SJB+zlig-eLyxwtbqu)?I8hQveu6=^dWay38}a*E<l4n^^^q&hV7r6pMS#z)I$Z*T-H}mII)P*s&;KTxg@9n_DHCE@WAC2%@jNAcR1`#XPbQi|j5owg>#TKRze1icCd=hde6r0Ork-3ubN2tOQ!EAm|WRo&ua=C#W?TCq4Ps9L;F7lE|s<3N!`Q24*kw4lIF@bs{`WzJWf}NH^(hh|%?L)Vowefc1siW6?kFOaibD>2ByoeRIhYW}bOr8;`%Y@gI+W{G*Kx{46mZ#ocf3?F`zr4wGGdbf<9${$Ar%xz>xi|E~FlT<^`e{yTA-u2l5A_T4nQ{C>lRLbZEYg~%h~%#!Lf9~;Ng=^Fw@c*#xU9eG=wCA1=u(6;E_t_h=&dv}dBD1GO82J2<VThF|_!1JtApO9)K-PY{4o|-s1-byre>*a|FycOt;*F|MANZ-DS$$aIlYjKZL*?QM_n1;<;{Z$dMMmQ$>^_Rznt&=fUOltqthf19>u4CT|Ku)n6nr_RWG&Z5`wDesWd$yeLpQ77vey;E2+$Cq`E;%jNcTR4r@!|-pdEfOAW`WvO4|bFCwubssD|4y-+DxCZ4uq~<xlpgmcPq%}tH%6pT#Zhx;Z{sA5G&7KAP;%9*`pJ5yWPg4UdzP@CnVE+g|@etg=7VCgI(q^w*Pvh4)6=LS*DI-)Px4Y!qsw3G<pqa?7SlyBp;BI8`V2OFWx02Ffbw<Yc(&o`&b<~_VrV>7J*F+i;(#sofyd2o}Pw|8MF6V{WIepztA0&a_CyUQ<0co=&qSU<67ObE^hj{chOd@|JL98Q~zk=2k_$uOK*1&i}%kdEaTpDzlPF{6^ttgIK@YvZ|^R9@4@Tz{~>3QNkXLg$^-7*;d%G#s{PKK#7u2*Z&g(jQY6|d1~_(Uv)UY&SyZN?Yo$&xAUiV9kp9mOX0^ky=k7DW<Q&I!AbjTyH7o_%sI(YNGs#xd{DgvnKoAjLlzwjZZQH3?dUt{*TKxo4!_naLF^C*Ry0liGL2B}wdw?uv%9#FRl2C2TZ)`iK20ED@2o!pVzH9PHS4l{{?*tAZbq{4c(CA{Q^Tt#YeMQ$=7AwPXr03-J-}vX{AK%!(&ob$`$g=C+z6C@Qj<zlrFB_$2T;lZ$9Xb^@9wm;<6~D@>^&A=<%y)>vGEa)135UO^me7UvvYLC*y(pv>FfL^%%^lms>C}uU8ENOaDf|F548ypT59-bUDj{PNdv)x&fY?%`1d|AKI>4Bvo28GCrsBeSL2vCxFz{5@)VKT&2IS#Img1GLp+w$xGYn=aaCFnV_|nM7aNG%A*mfBQxcjmWom~jckm<b-s(4X{NKTAqfF$NT@c6j`7a2zJsv+T0#@;g1#o@)o;|p<c@|LhVYdb@hHDi_Zx8oFX$e=wNt4N_sn%nU#pNom9B~cYljs6<K{n~ZnOTz`zaT5H63rDUez^ki~GHb4fl3l}tkfk(93LAv&Nb%5@^I!00Uof9BMt%JiJx(76+wbo`fX0{YZBLW)WEz|%)42$Nia_6Co=*>GM=?AL)xnI=b2^SMde8U>6&qGUkO<ky6qOz+{zLnoKXp%J#})nqT<7?*AzSR%Ubu3e-s^l8+DOg8A%z7URvTR8#TgJv3VA1NBn&r%Mu8(fTDZQZYTop&R`fy*zWc_TmLp#_EN{G3%TdD(j%6g}g^`S;_qxuOOLLGUP9H+kupnOdU>t63xdZpSEy}medtk-%aFO@c7q`xt)s5-oQq&8=xZ2JHW1r{Ruh+8+w2zId)~T+(s#XEBs<lhQQ`35HRumWC8gr=hRQHs!S~u?y^R;fimlY#x-f?!U&5%HLYg$HTE&%HAmVRf+PFb%bFQk?_mtao3#boszvs^`JtNogy8p_s0<yvE6zOz;xGMp|5u2AQvupHn!P^r|Ig%95u;0+G2pPzQY7+Nq8YfKxb+Wfv9Svb^g?G`s{^Pf%twZDs{<8U#YrlVm0@WFSo3g99zM8m)l{9-_i3&o|@URxUMgptllE5TQOiOt|Eo|*H=leMB3o&n7qb;}^X;Dx1>PkW*`EHK0TlA}cMSX{DBd{hfKV9xFW7bzkhrZO5BiQG!n6_F3AY40PoHsS99x%h@)Oy^|wE6sav<$32_=xh~a(9L8VT%0C4k#EZyrY+3q1c85^VnJL-w*(2cf;&MEPYB!+y{Dq+zUz8MTY<;RoWY2#k{RC|UFDpHBoTb^0u1aIFX&$9F3hr5i?k3Z1`E_V6r>j~1SW_G)Bsdoyb!pM8xcTRW2S08Qc0w9pffPoRF>%?SOgXdsT(1im%tCeQPU~X579Lek;%4~ODI(T8J%ZFv>B(RxR=-*;UFFrIqD?t`WwuFdAb%qsUlxv_pwi%Ac=u#41I_2Bc(^w0&10up#*x7R;T9i(}2+kPnbWvs!mZ`A|;}{iTAm{Dp3X@j&WALL_-XZ1C<9mM_rX-D`zP%x~X9R{aqD9Ei+J5EjFmU)>fOya+6w<lun_9cDkO0P^bI46f>`mCPwp~6T_$G(wK?!o@<o~$%1r$4>v<O&h_h<2TCLk)L7VyT8DZ<OJs+8+c9KKN3vn0`em^AciA_ZUPfC>`z9yNyL9ct;E1LaaPGEbRX!OBc{<FC^n{YohskMtp5}|9ej&KjCTg93XYxqMIN(hrGbnUTt=uQU*Hww+<;LWkQ@&j~U2!rgld9Rdi$g)KS2-fV4N=EX!W(rvF|3Y?wVs0J_Q?xICVdG9udS{bY-p^eVLjm1=i8WMaQZt@s^p3hg4~spJTiC}_Xl~5^Y6|OcP8aZE4<nF+UR!Gc_d!-sID3{={~expo)$6L9k|ykJLKhyn`o^YLFP-!@o<|Uv6H4HPGXU?|Oy_Ps$#Mp7f>20(59`cDF|mM)sakT*7&CdFc0&bOMjm9I)qK5`bq&{RS<X!xU}?YN)rz&LkobgxW;-@xzGs!qP@q#{9T-?OEk9ml*Dt@3PZve<u^~NNG35I$<a}=or(uN8j~)(+m7B^n~NJNvbVkahjyrc)&Vdhs-$D8G})oLAVsJetolIs1{_Sh;^7oR)v%Ha{>BT>XZ}O&IQKFYop$q;Q#syzsc%-@c2kLJ4H>rP=<EPCw;IRx@85ctdI)!{upku-XdmTaI3lz)_!XZ1$j2T^0oFJgplGN&_qHzvhH^^m@evuF><ehYf{IsxsEwdedBxWF0m%H^TXi4u|4D!I?@J7LGIvf6M9-g+d1Vo#D>KBFo+AViHv(y@<Pk!(N!>uv-pHJ6w+oMy&<zfl0T&u-a?Su`V`$zK{9+6&qFy{OusVnF`c1{S%VwZ1@>ErT&>910qfuV7r*hr?|i<ofuALr^nzu;pvJw-LI!B*i5LQd7K;)MLS=!Ez_#hOT8C`(mqB%r2h;cp*&)X(({e_2uhr^xgRL!dDs64;1^cFzDFn_bpcV|LIUbE9+DY-|Zxl{kL>TsCoHs?jpk1VkDU=EGvg7d6=q!OHa#UT-@w~pI8g(Nuy!Yu2Dq)<f&M+8M+(|!&S)iNHHg66}XNR`}&vTlU$e{7G%v<8R*m#6i5^`TzErw|5KRpGY@c(#v5nq+!7AZEQOe+zKBpF)JV<74-QcOv>kY{0pWFre-+TA7lY4CKB4!cM6Iw$5DW;`HraquwB7MDQ=%Sbr~Gy?)bsAhSPB^5G1peMsv@pv1h9LYH0h?$|B;u!ZVnSqLa^WNbzm<*uBKoxWd96tC$k9^m_lNu+0KM8PGFCa_FSwOK0V~!<>)JA!W^qbG8DH4aa@LVIcLJpt&&3~rpunX)xl}}%mu#}1Kxhh+pnq@R~%`^+~6$ms(TB+a2b}N!N_%#YwKu5kh#6-Gx%iVC&GFE0{yl)-sf#~FPnqQ!-#ETbjcwyARmag)-7-2biXYmz=BN<)Zb0}vfKqEl|6A2beagUtvMg?KgJ?Y|J@A;LM4={XmuV0a&Cr(aLyi|J(z-XBPwPFf1snQv=0Sr7WfPR1nP63$Ti^}#j0(&P@y3h!9gfW=)qiTwny?CKG2AzoSS(V&>`0(-92VV@ndi=$+hX+S{0jEBK>hK&;!<;SkAbc&nC10TeMy@&Bvz?B_hIdR81AV1El3(z&6BrmMfWJ8TrOhjRdz_4bFjIUnDa3`I_=ES<m!jB*!56^RNTkJxjU3t-Iz7n?kSR0KFrG!3Xb`7KJb#5>hG_|p@mpLJG3rw7SBqqkDB$-O*+?HhZ~}ZjlTO`s3WHn0>PsLeSWy1JL|)vas=z#jSr`cMh4{g2iEHqT`H4Va=CU#=z76Q$=2G?nx5E?S!;xy{S%pb$X`*^PzhWvE0#cFSzbIsA7|L_;dVxexSR@q&g|K1q_cSh1G^lotNDoRuAEHp`g7_Wu$JvbL7j4)DJ%VD0#tO<BNt-4LH9SiB%N#d`>k*~33KoYm(5ixvc2M);Np4(0BC(V*NWVq_0N;R;c(i~2VDR|K7Y9%7K7Rbu!Qoef2VWgNe)4o3R&Iv8<gJjGD+<YZy`mU(UG(Jc!^ii23RCg!vj-2KK6tcV2S8aMR#)nR0QS}XpB+4Y_Vn=C)4|<uo*o=wd?@(*^I&(U_2}r=_8&YPz%n{`_~5GtPvO-^yYeY4wu7&Z28Rbv21f_?u-4AbPD{RpM|fo3;PCOo2lu|g+{||SH(Cczo;-RS_M!lhLY3|uLj&}ePY#)o$UEmhqbaGe^yeddE0rkzJC9TH*=AXS&Ii;L=IZaqz$IYzbx1i*DEnp(gvRi$STqOcvjOTA=hl-85Escg79Y+h9c1Bx-1idz1+#fFNX}_n&zxb-*kin)zq?Q*J<qE_k>}(MsWM<sP<$|wj-@GqnOB((9Z{lx;o&2gy+uD;Z(3g*+~0rp@M%C&mz9k7?i2KDH}8Ah7)Y=9K&(!Er2};b;@M!(lHW2ur%?qkr4M5kpCtoQ#*=Y~Y9rrV=pHB(!@6h%6VYE@22WskK!}mcoVDFFJI?`>-h$0n2#E%^261sxVvKumc7b0FpESGRO^D&7ExHtJzDC^MY@&{c%d=SO$(*vIFa%FF2$aBjpgQ(RCw5<g2%Xjo$RLL(XCw#+OGXft=+y~Mruh)80}gS6Wiiq}P*KB~(#Kuz#1Z`+P1^^CJw#MZGMJ$ww6Z`k5ypyAuS78TF)jgHte$KIp;EIVr7xi>G&)VFi#~-)Y!*yUPUy&OP{ZO(5mdH{2Sni6Cly(PQk_yd)HFR~TCrLdUYw?*Q$rzB$mDV*3C@yaPP!Mcp&dSC0tODN%Fxi0L>${>_D|SZ6O1;5Xx?xrR%vsa?0OKZobpcbq`c!f{KuV6_Sni{)gvl~Qw6YSSj6}dCR#1dGoejtjaGCKkFncP$T|I|mwQ&Gr(n`<2}V*Cw!7`<`Hpql6&LC^uB)sx0tk7-ck|-y36C+q^3<%Iyf=~ToKM!Bt=*vQ0kba(`@0}%xEH+M>;#+Lm$2l9B^eZ9V`n1s<XZdupAQ3SFSsW|;DUv3&N2BH?1p>WN-@-K2(m~9Y2Gp53=A!J0BU1IZUHofkYQ5{qM;9qePv_HdLti-nLz-SOEpF-QRHHXV_DSZs}b;dQb=3nCw%M$o8RP=F#ydAT2fJAztV2hq#VU_V$iE#M(6sFk$!>0%Z`bzdwUv1+sVIK;zSGEgLXuGM9e1m$hBgA?%Y!|KYa}2VC`WOUND@AsWxI&X12|{3KF%4d1?T4o8Iozb}n3xgi}bCkgF52U+8Sn!lQp+DGTs$YLlUa$t1FF+?58?hl2h4PY<5pD-qkhIYDOxd6BI3CP)6R_=>)}2lpR8IUpG5XG6S^2^+nORw_wdhr!KVwYAqFf~dBN3U{YOhIO2Nbs|{a0<lhl=@twV(0kaS7=&e-i3LF5$?2qW;${>zc<}<8d+{Q;313l9hp)!k3FATM-<#P_rAWDXYA<pCiBI+kBPe)*=i7=arP%4mz8I<SSd^x7;BYB`c~!G~j7$NLSXB{9N_7I}=epu(p7cetR1QkX@j;cd{hV&D%7-sOSRU6EO*JO7c#ej-aI}h<Zw|2b77Eg^50>m>-c>2w+W-Vd#KVAM7=?nvgJtH}BZEqp&<I8m)5RwV#wAco%YCdgOeXTMDQr|IH#XjMN}}-T+M}Y=w)%mLdY6j&BI>Z_&`D6wu`F7zo<TDeUR6O1q&Ep=kgDiYSdVi?hQI+1j%$>r!8Bq5ifrW5oTLRPOe!d$^6^E)5uK(^5)AIP1#Hlu3?p=j=F{`U2uH%W&3RKU2sRK2uDyX7h>!B>K86IP(V_AqapHl{On4n45U`9;j8a+}+%2*)=p21ZYf-4aj)!H4ZXU!wB*fKXQ_hnSRJ9$}U3|*Hbwpx-s|LmRjP^Q#&Wy$^Cxm0%)r`MY9+I2$R9}+uc6he$avJ#B$k71#I$uX#AW7&W8X^9}h@x`|-Sef)Jq@L)PM(-9?{GnfUSu=@s{u}i!Qgp&pvB6deastwz2Zg@R}i6#Y$ZGaqEQ*jmBTceV(jijh&+jy;)k|*_l22PhV>dqykCi|Pf2B_pyn!=XlTS3S-IqaYa835W%`%Fypno!?xV&cj9l#vn2tIlE1>(7SB!S#)6$UgA_K0LCLGX?B7v}6chJY2MD-LwS;>lXs?@jl?sbttC|E^L3Qk%0E^<DsoCjRcbl$qVlA-W7lbQvFLs0QBK0^u0SP$2JyaG!l*D9$e#WIDbx@2O9Z3fd;i>=x-FM{~y9@{zDGy`bTNJ42!P7$`U`&gvwqf=%;K|tw3`e;XF!E=<5Uk+wN`TkaKSLC4pEJd6@BhUqgpBH(R4;Pbd3=PJWBoKFC!GjpEb6qb4+#@h<Cg~+!rcriDyn}&_A~9_G4f@m+zl543kyuO>J)q7Kh#<k|_2owiLX4Sm4yN{c#pCf{#wYI-BXMEp7?+UxW(Pd|thjKt3}EKNIObE3#0xqQL(f})hI#@z89?9{BO?*BqCC>cCLs{KejN}F?bq<<O`FkZzlJ~XBQ230<2^dfk<fVE#;>&Jzqk;a_$P={`^}~+VKkEVsr`fjm`ZK48w{l7DP)*lOii8r31uROtkrBjDMLw2mwcQXpU=g%4kR~v$_>JK=wp#&QsQz1zp0`2wTL3y^^;?=sS#_x7GK}AH{Y5jAFAwq)+kx{k@2V*(3&@@;ynr}Ni&eWdsig1N~LGQQ<@o|YKHBbi?X;$p{k&5{{7@*`X=7OugFTkmUAdA0a7R+I?IoNtSDgcf1f6V?yv}6p|Pn#$Zn4faTd8R%{i}g(9<f}7S&4OvdhWaNkKC5ban!Ys+rL-e8>6VM9Hq5`UbskmnPsgmYd4}u1y)jwUI1F()WkK*F{>fx`qrY_Oy!p{c&=hjzpBwm@Vy_@VBkzMZb;bl=OR_%-T`CD8OjroRXBU^PrqLLa<<so7rMImBPh%P!}-t<;~{0a2FzWZGu+M>d<Lct^zMWVUWt0@BGsSqM@+ugu>)EvNpSt7`kOgO(-bG!IbuVwym6(+d@@sx6pyL7d(D+@1S*>mz5~1UYo1!YyIO*3-j1U^99I`UJD)SgCsi_sJ2=KFTrs+;LaR9zW-D|1W3+G{YJh7h@L9&)M;J3m>}aI2I6;?qm8l`eDZN?bOOfkd@xVPwAUW$yTQ&kvJ5slD+lwW7?jCKm$U<*Z}99QSRn^la*-t!53+uQcAxtUC9C}e&~YE7^O1Peg4WS}HDFZ(rLs5JiV@{>PDUml5imL}Lb?QMGuT99uJzjBkvAM%{0<YJjVv%_Fn>pR&ez`=OKLD^a-95t){Rq)&B>VHU;;>SWvIR1-L6_4^W^i_MBhT^fPv;yYW0DiLb+}1|6MRg(E}n5Qmhj|?;w-Td4yd$hY-jymI-Ihf!nRxA;WlymG?Rky{o6;3|#lEI5XUR?m0E1Mty6i5$*2Lp%NwtZOYUSsqcOI*E~mn#?az}u63fY7?o8A_8O-G7<W72!QZ~?(CioLx+d$Xdo`2qr8;)SdTCs;WVYfvjnzTKcOI)<q;?{!+q68BRi2w`od@6+w2o=@K{5|&wcpo|YW3CU;}e(QVr<UGBV3ZpYJd(zUXSp0wj>|EB<)|Drp5(_+Rj22v7F8EIC%E-{`Tzvfl6V7*_}D*z~uP@-7Td{Y|H>NEPdRVo~MjPcQRd+r(tA01I|CgqxeD3J32V{>EPhe7sBd9IDJ*FN~Tk9RqbrT3U@?5U1tk-5sR>yggJW}I1<l38W0O~#|e73!}g+@Y~OAR(FSUvSl`-_fT%b4H}5)Vaw@#r0bj<6FNQ0^++xynZUAa6z<70E1xyflK3~8xeN`oD>%N<<wMw}2o_*fWRXcCSxAoe%CdpX1(KA`vfhBT~TRB8#=zxHP!h^3Oa5t439fQu4JicX6$=<dv<IQSe0qbEbFLs#%0tITy6mE?(9XYmB%I%;9@2D6kcW_g(opRN3g|_3QLT4rzP^`_MaU%}cj7xwMUy)b3PdVJ(F<$#4a_|Tfivioj7ojg)pdtjulF$|jg?n<Rp}3mDC?Q!@mr*z87^RS3v2C^7y@`xHhcb7(`&5b<3_gUk52dWez?S6e@2n~a^OOo2*M7Rrm!^$aYIl@j9J33Vi8bJ8!yp2yl(y7pa@Al+f8zu<2`_a+)>>C1Ufcg@BGxgSj(stqS6$ssGG}r!z`R2ID>|qsIy*yG$2_F%Mwk6|7Yem8Q!$~Rl4!F*yAHQTWosW2NchPZ!@8ktzkSiBA)EMXk*x1hVq~ak8F|Z&X2|)^&3#%ydwW|Z!m6&)Q|ymH;r2ErGFwyh*gq^F5a=2^C9`nHbtCS8Q>XD|nt_Pzht|}+K~{6rO)_)ciJF1%r0AP-V_8|47ky)TG?x{;)XY<UzN#f>SVxkU-9<J{v$If+MYP7H#9~~pJzUoqs>We@=OJ2mc-9@7mBV73GjNH?$Y%eaa;1aIIl92SC-^qnefBlciHBYz=fpOhZzMO;i8JO9_i+G-1TpPEdo4Qi1_0yzX)+7n$uQF7Bqg^ae+Vtnul`zV21`j-y@^`(AZY0LV-<8YT#e9mBvj$<352dm{yOP>WUrANd4ZDU7zxG|^T=Mi_`V6~PY}K~$SWVBAg+=uYP*-YbN3|iey-gEB-ZVo9N(qglN&+`$~l51zvR><ZhEr}e(mV-qk!8$V>~X#Q&btD_2e?GI6G!rK+zScv82?yhQ`9Sz*fX4ah42$QTf2u0xMb-`W`9Dp}}U-8z;8mvOEZ>EF%2{*)|l&?ik0qL>~D1b~=ny@Kcd_SUX9EUw2QEDr}2m_-kQwc|wlsG~>E>;32+fA4ltO5bxENZVt0~q9{gPo@HklZL^kJdg(=^M)y$;hSoG4i^0s~2yCO<cp3~r;}YY7>~&L*tiIreR75oeB<V5c=wa8ilAB|RJzk@P?s6CL!5b^Ky}HkYfV<`SfBuJ`KmNbJx3Phr_L42nLb<%o?P0tdOl{M|81*Qhc7mhi)gqyM2KLKQx{55eKjPCoj;dsi_lYO!$bFea5lTprai6rxuc&Z4%!u#GpajuCCp_a8Uwb=+O1+>H`zZlqPdCkmtHAa-V|Hv^q-P{3h>d@AGxU6p8-c}zni<MET)eO)ZeHD)QzjC1)fX`9&yy_0CXH=mW`FcC#$&W6^Eo<)-ebS?G5t2H{MY}}ulz6n&-XVr@bf2{S%tHY-q$U2R06jU%2x;Q-N#?gGCEvCT|os(7sa!&yx^3(&%Tjo@Y8QROdlWcq57+C&3Jr~(aHEfOOp#VT8HRp8>MsHKS=aoV#DN}=a@VRLISt@plHw|L<I*JNs(7>@C6)4V()pN&qFQsEmP{=NAHzYd^ir>Pz%E>?vh(|PnTo}J(1WABT){dHakwH={fCjan2PK&X^Z?TLHRb4M*+^3Z=dP7Myxs6^TgeQS{qnmrQ(eg6m_I1Y9W)mDIroRINzx^s<s}uk6~FRO|jX-SbT^8gI^Ox--kYfD2@7Qk+AtYBzHgNm6@g9HTu1NdOj#dF`Kh<(XR&tqOlh57F&QzUq`W-@{TjkT+bgm)B%*c`Mfn9y&w^XYDGP<(%w8W;9L7#cfUv_uktTsN6#*l6kF-J<rywzCRVGn9S+Eofb<+K!N1TbKTvJ*<MH2cBSU;{HK%u;ctS({F}?ACMKqpZ*hZAt95XA^xz@rBmJP4Y=0(v%+RITJUmBrO<sE+;C7Be{aVcD>X&;}lX3YiRqD{q)Kmjcz5$>rMIDEBQ007tbLb9t17M>Vs7bvYx?76CF>8FA3~+;mgTFZGxdCU;DXDnl9Yf;Epb~^zqHY)h0C^E|LtwKDTH<X{qBZ+Sd(3SP1%xeGqys&W<VZ`pDB=Y84!dU)gcJ1%@u4~`M<#jdG+v`lhlxmg&GM?T5JHm}OylAN#l|@l9!|Lk2oe~_uzndR1$^-EZY(7NwrC8gpYj?fD>IWc8z`YqWRi6>FuX0P6KwbF^d*~H@E6{DV_tK!EyuuX3t)|w6RnXKqu{;ewT{Qb{5<(CJ1#)z+Q3C?bo!2cH~ianS_Cqgf8|9*)WKuV{6H2GC7Wi4ad#S*lozLoUyg9wd-&h{)BkjPV*@`R-!_KgOr#2C$Tr<zf$Avfvh27=0%6bbScDjrmTh_j{F!2RfX_#G=0)($!4U}U9JD47aOb$+hb~4YMO)vcjye&HFYnA_^($v>{G!M~HKbdY@Hk>VE-THhTGd6qT~hRh(ExCCh8b4Eond^!3GNX9ErXPKLi#80_oM*R57txkMrAP=Qx|26HuFvv1#bQ82Engmmq9B*zXB{=f>#I)Y`{?6`Br$2g38^Atr^T+I-a#yU=|R9n4xV?`|~M$3UdFHt|FoBJhU^10H0D;c`UDbAzHKwJkuDJ>WTvZB^@M&5%`X9hH%6Tl+}c`kSNju1?be}M@d`+^Zrf{w*+L+IZ!La^O<IOSrNpG(|nrfi>PAR2GAVG5%4}urldNKV6@PVxoCk_!>2s~{Y0T*zQApiy!o9x2gD0|&@B>b0q9H=!YlEdJECn*-uc$T*c;Au>TH?UI0f|}?7w6XIxHHAh;tfhf*HTl?J?B2B?u0}7Q@@XK^YJNY`Pf68Z3P(l_SOH<lsOmeVY_HAL_)Cs6ccjE3_!(JULH<{FocDaA@`xGy%l8i&9#4%wkC7VVFrHBs`rwjc;*Caa%@4$M4WB@w8<w%bB-vw-x%zpx1l~l&Lq6p0VP<4}DFQwo{i@v@Cf`Ju>wsQVv^(a$6Q?DubfG)7`xVLbQL2u8>bp23fz?-36ru-oC_)hn?PM`~rV{bc?>@^IgO1_X>n?|D&B9x`)01+1v*RXZuj>Q~3L^kEHGdbNsS%%cvL6W;rwmm9ECg4Bmd+3BK;{GMot}WPH-0LW5WRPv{~2m}7GUihsjTm>MoplOa3-+$Rgh;}ZYkwRJeqSKKTvBQY@hxW9`(DIf7Pg?G2ak7>@8zg%Gdu*?v+vwxcq1d+sG7FpWoJMr)`s5G01UX76yRO{>^VzYA_zfHt9EXd`+tm0x{_WGoi8Qr)VPnZs0PmnTH>;#cyqMk5{`1RGK|1rNu0!;*k0QTS{o>M~>)E<L9>G9ah-?2m?$c8<}>ZBBC_C$YYJ^uUcSiG1}hS1K=Em)|!i#Z+<6u#d4dUG$h1+O>NsKEmorC@V%Mc+TguM7H$e7O1Lg6izNiCTDa%-S%7Q3$_*M(`VS#exg&5L|B?t)pMxl?rM3s;EL>f(RcTK5!p{)=9tTX~cT|coJSldwLni+YCb>2Iv%gg=PT-U=0Uo5m%YpRrE!hT=^0|5!X0;AhrgdhjXFR%n>6@)&<)DmQ^%4BKU*q9)4x-vxW7xfi~T|2({;2WiEG);06@*qe2&N^={qjeG2IBbZ_tM-oEt_)UD{}PH*R<-P`mNK8Rx2Lv5@3@khI#-oCBM^=^N*`^jgr99P}xeY7L0ZUrCdMz=3fF`9!CioK_u2$wC-osPTaRuQPjL^QR$F~9&4^mc6>j`l&TCzrVGJmf*6{zE6mrs8$UI{bVVo<+9F1a&}fyb+v1FGlo(w^2>QSCM12DZAzsl!ZxzM8d&gTdUQ2^!N)pMd>+?4KQ$b=MxyiaJ$$22!8ZFr5`j2ySwzm{B9OfwZZ6p^7!sSK&Dr(?y@ykkf`Ct)X2F6HB<Mxsz)Ru>9lp+1kFx)bnJ-hCj)VwBq#aca(yb6Z`2PB<%?CtnAXj-&<eI{h|i#Y{YH=DhoTawAfQ(-GSXzUcj^kEQS<1GwSf&s!h>M|V}*B5Yrv#jj&L^$#+}HniySZ)&0sDPJb|LLE6|Q6WNV`W3=65I+oVpHl$%72*;VJGp}bFYK8mFS#x63H1K~W6{m-jmeLPFIN5O~YF!6nJbeRaHv>7{>@^mbm+f{s0=N#*TUuj0gComB(L5B-POWoxL%rC`lvpw;u>-ZFPN119=rqSPru^vqZBCfxN^7~;8oVVsZ3`{-m1q_O^0_PCg*hbXQFb!_r40bibQ&3q?Q@m$**a2Lu8*OvihC`?so<cV{D({kYld{Xbd-vHl_1uhUF0jGo@~+{!SSPcC@WVypG;OR6h#WrOL`7!v*glkqD1yWC+N#>zLw~1ui&3}kgGYB0%RUyeZ|s)icWap<6mQpb5~~@E<6p-1TRp#r_;%=yD`1Z8Ch>~ll)69?N61P}b{hbKmJm<~g8&`J;>j=~)M3DS)#h=uV#pD?sD?hw$Q^a5>hj351tw*fH~K7Zsg9w%5^*=o6S=)TrD@cw^$%M4TsOGw17meZOvIYJ?U>@$nT~kgRu0&nrZ#XjeG%|9HxEB@JS${(&j(?J9y!#-=|Tujx09<umZ!K?wklwCL!%Sy_2=Bev2jrNSdawT-6jNp^*+(v$%f+nF7w96x5<YYvg;J9Z{eV!^#Vg58KXI(UBA%J8$p<o)^;m`!dT@dg2j20YK<%#M#nXgIJC}ffOgO}0>-G{MSel8p`whykD;MV&w;uiDo;eW#LC(M^gc1Lv)KaowUIgvDk{|6g6ff{bvqjkjJJSh1$@~&rb@M&Dn{7<QCVj(T<W1-J*^5W0drgs<-SdMjRQJ$q*4+2v+!`3N4RdJ{?}-*;8^14%%2rE!BTeuP>H*@niDrGT&w}TEp3U6ck3yG7i!yKWxuTQit_hn;YH~q@&yb+mGdT{3naotdF<+E9Yez!l|Zf1zMojOFv1aMnsyi%Qj}{LoQ(I4RFYprwdGZT(4wI&@dX)dM}wTBpG;d`qOgdablAR(@b71z-L?>6mMYT|WT~xS7bX_`Ca(%H8NcKo@LE%5Y#DK1LQ!>VjIGnjZy?oh%t0=Ejt8`oEmc=qprDk}(Db)s-+E1YEqcOE6INJBl97*#B|7`J_Baxa8?MMnQU(|C^o-8Px`?mDDfpFrkBlZGe&xjl7oy2@^SDEH6&kx}#Ne1n47bSAmn=#I5uHJssvMhQ>{~p<1r26^ub=)oc=|2Q>9KKhv#=w-Wgu!WHjh1eJe1xNkuvqt8X+nG|J)Gl2fUGd%$kA05#_jN)gm2{JU+N|0mr%H{Bll)B2p&&a{w;0c!n|W0q0%t%?z1fZZa`-Kc+944+Y<~%&S_1{k!Oos0q;U5-nt;A~s^ZCe;QIVLREjxAB%E^dzX-*6WwC6c#j^mmy7`OSZ*n|GDVE%ehl==&Lw~ikHhP3hN_8f5-GC(ifEtAjlRV(=ne9)$?J?oHt+MIh2lC(Lgu1K_=f;aM@wj-{QxH=b|{x_0SZ8*KcX@w~*|Dt{W&e!$IE`jwZnfnJYZb_8I2cLwJM!6>R%+()jQRi3WVV@3O)x42OgmeCPxxF(z@(-7ezGV5<*pxSAMN@T~NnD3@A0Frv|Ckg!xEEw%_uP0OQ_cltO*)`l+qF(7Q9v*?>f8KYJ?Angr{f+RL@c#ysLI&{*lBAfv8OC!N~Uf~20BWjw4L_;t&!z!w8V}V7mhxDoNpU*y9yC1-%$o#-=YQ?G1N8<wci?K$p^XBo|&9F9~4STL4UlRY*?@E6~8hn1O@u)Fkz2;SQ!kmk702&h<y)QfX=xY{tI5=zybO;Bss$J2n1r=~=NHbx`Q-O^>EBOcz!gkfHcsSvf#02v36webJ7+%77F+)dt6ge|0F3<kJxuFuGM{vYja)TJGdz7V1p7g<d6Mc^!p%)8vi-R-JyiseDbtx(Qa71az^9{vKRS|>FP?MucmZ9RzZBYT}Jc<!NHP>NP<Z*&Q0;*|p8AC)dLRet)_vetfV>tyh`(VWN`b{nOKs2?*u`Qu{(s!QJ7Hd}dJmhve<n`-NjK9vR0vO2ySb)8Vs4kfuF}*GzH?R%S6`2{vmq<y^a)c5d*EkuCTf(mhtkv+G+>FWG9AvTwu){du9kTBY9{{=fL;)NoH2x`hMwNIq6l$yBHUPuiCit_%VxL+vSoIao3lag;gu!^<D8HjM0ZhF^U?m0ampIzbH@`&rEY$aTk@)m?(JI3DMvyd?Qk~5LFuP5sbW%C#5u0VO%l->MB1j6l@JUDGLAB2)10rR+4usjMd4=_d7>`|Kv=etPIL)VHPAHLwuY+wtvw_dsB}cxowx*+o)is_~mJj<?JmZLm<B`G;p|OZD9f1zJyl}Bt6PAY#CmxgNppa?JDaPCTwW~NTPl3t40sQ9juvHymVo6A?c0_mB_3K%rfQc@6noh20y%R0nw3ihOsM?BC0c<E(a_Mq;*`YR^OE)oz!l*oP>rU*-&eF{!QmoW+9U;Q;jqpDEjNMP9b&ZmA8Y+TdM9dZICn63xw?aZ<WWRyt33D996XC+d5V)8SJk5DY<w5tXQ!`9tB)+LSN;RC|;1lTW;2Rm(ie;(@o{anw&x@p-72L-!vQaS6*m0l>G{yKB>}IoC1HMAX5{x1jab1}c9DGvI+b_<Tz`hB5uy=lh6<v*q(jyc!p{Mz(mRT!nqUwi~JjA42WEjkw@5v-{x(>)m4Wg4JhgTw}s^tb7r0nCYwHO7ZHNnw|;1!(T2sS1FGPM(XpgYY>DvM#>gxhta+dU7#6?}{2uX<j2g-IAjUvLG)-=CXkoZyoigdWK>5QQJqtkPFKQw`IQeRErQQk7C<V=BX~`o>Bvg~di2%YlkhL5W9|fDbTtjowlw4K64)5whfBFtowpqu72#*%p-26y}a}&VYMpYff!K3S6b@(nyI4wG!gUAUce*>r0V-i_ja<<wl>fI(&-L8u2#?LU<0uV9GE#sUx~CtZH|>ZAJAkC23jRaf)jC*d$54D7J-%R+(+-GlZ`jv|Jrc^K3Dfqi-<Oyc)0uZ%4e5S(tT|hKtjc^<3B2h5If0wS~;lXzS<*BTj0BMM9bk8at8Da{Y=t$|j`>FC9j_rdFH`S+|t#1a`xC#?dBfwMGp+5kGfJ<5MWUy94HsK-W>%c{O^a#1hfzM&sC_*m=c1DUm*hau8jb{@4S9>#v>_?qGN0aWktnPa{7E8I}XW*PO*+G~ysO8ECaeH6N`9g9T$<kWB}n_`Qlzc`|H_@tCAs_zI(xXG2n|!ZVCs!V^t5TxAXQ-~$XsMs-~a!Nmj)t?jc|fQu1a>;uON27-$XaN0&%j9H^ZRdmQ}28<|jkP`|S<>V0O{%i>}rOI-H*2FDZpIott!CI_)M>J-S(S)x3A|!57Ia`o(YyDv2SUR)%LxCUzGj~bb3kolmAWC2LXknBqCG=Y0u}z?q_rmeDKz9Jd9ZtEj`vPsrB}XUThA0mDa;fN;n{fKQj!I<eV@6reRg7s7*zO1X(jYf_C@rILCgv?r#*5plfT6^*=-qH;4M<}BssZ6wHZyoIW(K+=&0HSoWvEjL2l;d?BVm-9v^m^-$KJ{5uKL$;x5)MLn(AP7+MO3xx9zUO4Bzt{-=WrL5_qPhQ_cZ$9V)WLezKuL!^OQ8XnuYsLMvX;zWsjG4d2R2J^)e&On;D+^O1|DsoQ=-lk@zHLLp94$RZnA-bkVh6|Xr;vFIINz+y2pLGZY;28NPifhshM3hfYJT96#R6keChMU$DVLQACFf4LAsTAMBn5ql3_!mauxd#n+Z=ZLF?^j|H6$J*?dQVlqFS_wSmsr^#>Ws78*#3dHG<@3uL^vA}sQ3sp8DV5jAH=nU24N`|j`33^0=P|wVGq-p4$D4JmR!IQV&l~|K7V>L}08%K-F?!`=JyWZG4nXkskHW9{gE%R4+|VaTY>5EtyPtJ@0>!#z4Yy<M(Jn3N#U*cD)1EKdCo~sM5!%Q!Ynh9=a{F*DwC(q4xwOL4z`g}VDI(Wt#3}40FTy6zT{jgroiJ7J)FW54xlrdfO<;Nex`nf!(9Jw!inHrrX*lPtRw0x9$T*6k=CPd*X<(g*yW1_w6WI<5?%wVnRM+a$>w0~Q-M$H}U3w#KAO@|&pMLL`{^%dl`y>DSzy6h9?S6k_13&Ez{oh~s-bV9QaG4d~onN`|KK<)|`6q|)9X~d_?E6dL;nL`Z_pg5MAOC3YM;jaXi7a@(zXYCr_M`{w*Z=;rKlV$%ys?3wU$wyg_y1KRSdeWVP=D<&{+sr1|8QdiKY<16fB$haC~?Yi4O;*2{*~YQ+ka$Z13xyj|MkCZgvQtPd7wT2-GBK{{v^-|KQ^?#^jRY`afMPH+K=OZ`}cqN<;DhnY-s<X-w16M!w^&+X#e?l|LWiQ{Xe|1fu9d7Xx+cm2u&UVR|ofd8~^e6$G{}`vB91FW+OO0g~$i)Z~eVL^^Z1w06%`<_VxexttH^l59@(8x&1f(dHKgTHt=IZ`~Lsd3~iBR-f{TNfAJe1{Lbea8~Cxi`VanD^Z7_TB|PBV1C}(n-`@D%8pkcU@Z3{)G`#=wm%g{^Odc1QdpLy#_Fw++d#jGBaDlm-!8Ndd_sid-t>K41{lR~MPksgd_a|WJzkeU);QtHGLZgQ'\nimport sys, pathlib, json, math, statistics, time, hashlib, zipfile, io, base64, zlib\nfrom collections import defaultdict\nfrom dataclasses import asdict\n# BUNDLE is a base85/zlib ZIP of the pinned simulator package, license, and exact B.\ndef unpack(root):\n    root=pathlib.Path(root); root.mkdir(parents=True,exist_ok=True)\n    zipfile.ZipFile(io.BytesIO(zlib.decompress(base64.b85decode(BUNDLE)))).extractall(root)\n    sys.path.insert(0,str(root.resolve()))\n    return root\n\nCLASSES=['ask_reserve','ask_uncovered_policy','ask_physical_cash','bid_ammo_budget','tick1_budget','ammo_wealth_cap_same_tick']\ndef moments(a):\n    return {'mean':statistics.mean(a),'se':statistics.stdev(a)/math.sqrt(len(a)) if len(a)>1 else None}\ndef floor(q): return math.floor(max(0,q)*100+1e-9)/100\n\nclass Observer:\n    def __init__(self):\n        self.rows=defaultdict(lambda: {'count':0,'cut_quantity':0.,'retail':0.,'arb':0.,'retail_quantity':0.})\n        self.ext=[]; self.shadows=[]; self.step_meta={}; self.active={}; self.replay_checks=0\n    def capture(self,L):\n        self.ext=[]; self.active={}\n        H=L['H']; ph=L['phat']; st=L['state']\n        pb='p<0.01' if ph<.01 else 'p0.01-0.05' if ph<.05 else 'p0.05-0.1' if ph<.1 else 'p0.1-0.9' if ph<.9 else 'p>=0.9'\n        hb='H<=50' if H<=50 else 'H51-499' if H<500 else 'H>=500'\n        cash='cash<200' if st.cash<200 else 'cash200-500' if st.cash<500 else 'cash>=500'\n        self.step_meta={'p':pb,'H':hb,'cash':cash}\n        self.rows['all_steps']['count']+=1\n        # Inventory target caps act upstream of quote management; count separately,\n        # because removing them can switch the ammunition price/branch.\n        if 'capw' in L:\n            P=DIAG_P; x=max(L['ask_t'],L['ptick']+1)/100\n            target=P['ydem']*min(H,P['W'])/x\n            full=P['ydf']*min(H,P['Wf'])/x if ph<P['pmaxf'] else 0.\n            for label,value in [('ammo_target_wealth_cap',target),('ammo_full_target_wealth_cap',full)]:\n                if value > L['capw']+1e-9:\n                    self.rows[label]['count']+=1\n                    self.rows[label]['cut_quantity']+=value-L['capw']\n        self.rows['any_direct_quote_cut']['count']+=0\n        self.rows['free_cash<2']['count']+=int(st.free_cash<2)\n        self.rows['cash<200']['count']+=int(st.cash<200)\n        self.rows['reserved_cash>half_cash']['count']+=int(st.reserved_cash>.5*st.cash)\n        self.rows['state_cash']['cut_quantity']+=st.cash\n        self.rows['state_free_cash']['cut_quantity']+=st.free_cash\n        # Sequential relaxation of ask constraints: reserve, policy, physical cash.\n        if 'diag_ask' in L:\n            a=L['diag_ask']; wanted,physical,policy,actual,t=a\n            for name,q in [('ask_reserve',policy-actual),('ask_uncovered_policy',physical-policy),('ask_physical_cash',wanted-physical)]:\n                self.add(name,'SELL',t,q)\n        d=L['diag_buy']; pre_b,pre_am,pre_q1=d\n        self.add('bid_ammo_budget','BUY',L['bid_t'],floor(pre_b)-floor(L['add_b']))\n        if L['amt']:\n            self.add('bid_ammo_budget','BUY',L['amt'],floor(pre_am)-floor(L['qam']))\n        self.add('tick1_budget','BUY',1,floor(pre_q1)-floor(L['q1']))\n        # Quote-size consequence of lifting target wealth cap, with all other\n        # capital cuts relaxed first. Price-switch cases are counted, not replayed.\n        if 'capw' in L:\n            P=DIAG_P;Y=L['Y'];pt=L['ptick'];t=max(1,min(99,int(math.ceil(pt+1e-9))));g=t-pt\n            am=0;qm=0.\n            if Y<full and g<=P['g_hi'] and L['bid_t']<=t<L['ask_t']:\n                am,qm=t,min(P['qf'],full-Y)\n            elif Y<target and ph<P['ammo_pmax'] and L['bid_t']<=t<L['ask_t'] and t/100-ph<P['ammo_maxpay']:\n                am,qm=t,min(P['ammo_q'],target-Y)\n            elif Y<full and t>=2 and 1-g<=P['g_lo']:\n                am,qm=t-1,min(P['qf'],full-Y)\n            if am==L['amt'] or pre_am<.01:\n                self.add('ammo_wealth_cap_same_tick','BUY',am,floor(qm)-floor(pre_am))\n            elif qm>=.01:\n                self.rows['ammo_wealth_cap_price_switch_unestimated']['count']+=1\n        # Aggregate one binding event per class-step, with side, belief, horizon and cash marginals.\n        self.rows['any_direct_quote_cut']['count']+=int(bool(self.active))\n        for name,qty in self.active.items():\n            for key in self.keys(name):\n                self.rows[key]['count']+=1; self.rows[key]['cut_quantity']+=qty\n    def keys(self,name):\n        return [name]+[name+'|'+v for v in self.step_meta.values()]\n    def add(self,name,side,t,q):\n        q=round(q,10)\n        if q<.01-1e-9 or not 1<=t<=99:return\n        self.ext.append((name,side,t,q)); self.active[name]=self.active.get(name,0)+q\n    def prepare(self,m,prob):\n        self.prob=prob; self.shadows=[]\n        if not self.ext:return\n        # Start AFTER actual arbitrage: stale additional orders are removed completely.\n        # Actual arbitrage is unchanged by extra size at existing prices.\n        from orderbook_pm_challenge.types import Side\n        base={s:[] for s in ['BUY','SELL']}\n        for o in m._orders.values():\n            base[o.side.value].append([o.price_ticks,o.sequence,o.remaining_quantity,o.owner=='participant'])\n        for side in base:base[side].sort(key=lambda o:(o[0] if side=='SELL' else -o[0],o[1]))\n        self.shadow_base={s:[o.copy() for o in v] for s,v in base.items()}\n        self.base_edge=0.; self.base_q=0.\n        added=[]; arb=0.\n        for cls in CLASSES:\n            for name,side,t,q in self.ext:\n                if name!=cls:continue\n                edge=(prob-t/100) if side=='BUY' else (t/100-prob)\n                if edge < -1e-9:\n                    arb+=q*edge\n                else:added.append([side,t,q])\n            if cls not in self.active:continue\n            book={s:[o.copy() for o in v] for s,v in base.items()}\n            # Extra shares are behind every actual order at their tick: conservative FIFO estimate.\n            for ix,(side,t,q) in enumerate(added):book[side].append([t,10**12+ix,q,True])\n            for side in book:book[side].sort(key=lambda o:(o[0] if side=='SELL' else -o[0],o[1]))\n            self.shadows.append({'name':cls,'book':book,'retail':0.,'arb':arb,'q':0.})\n    def consume(self,book,side,amount,notional):\n        edge=qty=0.; orders=book[side]; i=0\n        from orderbook_pm_challenge.utils import quantize_down,EPSILON\n        while amount>EPSILON and i<len(orders):\n            o=orders[i]; price=o[0]/100\n            if o[2]<=EPSILON:i+=1;continue\n            cap=quantize_down(amount/price,.01) if notional else amount\n            if cap<=0:break\n            q=quantize_down(min(o[2],cap),.01)\n            if q<=0:break\n            if o[3]:edge+=q*((price-self.prob) if side=='SELL' else (self.prob-price));qty+=q\n            o[2]=round(o[2]-q,10)\n            amount=round(amount-q*(price if notional else 1),10)\n        return edge,qty\n    def retail(self,side,amount,notional):\n        if not self.shadows:return\n        e,q=self.consume(self.shadow_base,side,amount,notional); self.base_edge+=e;self.base_q+=q\n        for sh in self.shadows:\n            e,q=self.consume(sh['book'],side,amount,notional);sh['retail']+=e;sh['q']+=q\n    def finish(self,fills,prob):\n        # Actual edge conditional on binding is descriptive, not a lost-edge estimate.\n        for f in fills:\n            e=f.quantity*((f.price_ticks/100-prob) if f.side.value=='SELL' else (prob-f.price_ticks/100))\n            part='retail' if f.aggressor=='retail' else 'arb'\n            self.rows['all_steps'][part]+=e\n            if self.active:self.rows['any_direct_quote_cut'][part]+=e\n        if not self.shadows:return\n        actual=sum(f.quantity*((f.price_ticks/100-prob) if f.side.value=='SELL' else (prob-f.price_ticks/100)) for f in fills if f.aggressor=='retail')\n        assert abs(actual-self.base_edge)<1e-7,(actual,self.base_edge)\n        self.replay_checks+=1\n        prev_r=self.base_edge;prev_a=0.;prev_q=self.base_q\n        for sh in self.shadows:\n            for key in self.keys(sh['name']):\n                self.rows[key]['retail']+=sh['retail']-prev_r\n                self.rows[key]['arb']+=sh['arb']-prev_a\n                self.rows[key]['retail_quantity']+=sh['q']-prev_q\n            prev_r=sh['retail'];prev_a=sh['arb'];prev_q=sh['q']\n\nOB=None\n\ndef install(root):\n    from orderbook_pm_challenge import market\n    M=market.PredictionMarket\n    original={n:getattr(M,n) for n in ['execute_arbitrage','execute_retail_buy','execute_retail_sell','record_participant_fills']}\n    def arb(self,*,probability,step):\n        f=original['execute_arbitrage'](self,probability=probability,step=step)\n        OB.prepare(self,probability);return f\n    def buy(self,*,notional,step):\n        OB.retail('SELL',notional,True);return original['execute_retail_buy'](self,notional=notional,step=step)\n    def sell(self,*,quantity,step):\n        OB.retail('BUY',quantity,False);return original['execute_retail_sell'](self,quantity=quantity,step=step)\n    def record(self,fills,*,probability):\n        OB.finish(fills,probability);return original['record_participant_fills'](self,fills,probability=probability)\n    M.execute_arbitrage=arb;M.execute_retail_buy=buy;M.execute_retail_sell=sell;M.record_participant_fills=record\n    global DIAG_P\n    b=(root/'b.py').read_text()\n    assert hashlib.sha256(b.encode()).hexdigest()=='baef955ec10728839f7c3357016ec9eb0550e7ec689bbd5171b1cdd5c9e37273'\n    patches=[(\"        budget = P['fb'] * max(free, 0.0)\",\"        diag_buy = (add_b, qam, q1)\\n        budget = P['fb'] * max(free, 0.0)\"),\n    (\"                ub = min(ub, max(0.0, free - C.get('reserve', 0.0)\",\"                diag_preub = ub\\n                ub = min(ub, max(0.0, free - C.get('reserve', 0.0)\"),\n    (\"            q = fl(min(add_a, cov + unc))\",\"            q = fl(min(add_a, cov + unc))\\n            diag_ask = (fl(add_a), fl(min(add_a, cov + max(0.0, free)/(1-x))), fl(min(add_a, cov + max(0.0, diag_preub)/(1-x))) if max(0.0, add_a-cov)>0 else q, q, ask_t)\"),\n    (\"        return actions + out\",\"        capture(locals())\\n        return actions + out\")]\n    for old,new in patches:\n        assert b.count(old)==1,old;b=b.replace(old,new)\n    namespace={'capture':lambda L:OB.capture(L)};exec(compile(b,'<B-observed>','exec'),namespace)\n    DIAG_P=namespace['P']\n    return namespace['Strategy'],original\n\ndef main():\n    global OB\n    import argparse\n    p=argparse.ArgumentParser();p.add_argument('--root',default='test/scratch/collateral-runtime');p.add_argument('--start',type=int,default=239000);p.add_argument('--n',type=int,default=20);p.add_argument('--verify',action='store_true');p.add_argument('--out',required=True)\n    a=p.parse_args();assert 239000<=a.start and a.start+a.n<=240000\n    root=unpack(a.root)\n    from orderbook_pm_challenge.runner import run_batch\n    from orderbook_pm_challenge.config import ChallengeConfig,ParameterVariance\n    from orderbook_pm_challenge.loader import load_strategy_factory\n    plain=load_strategy_factory(str(root/'b.py'))\n    expected={}\n    t=time.perf_counter()\n    if a.verify:\n        for s in range(a.start,a.start+a.n):expected[s]=asdict(run_batch(plain,base_config=ChallengeConfig(),variance=ParameterVariance(),n_simulations=1,seed_start=s,workers=1).simulation_results[0])\n    baseline_seconds=time.perf_counter()-t\n    Strategy,original=install(root)\n    # Wrap the loader-created B, preserving exactly its outputs. Instrumented class only adds observations.\n    t=time.perf_counter();results=[]\n    with open(a.out,'w') as f:\n        for s in range(a.start,a.start+a.n):\n            OB=Observer()\n            r=run_batch(Strategy,base_config=ChallengeConfig(),variance=ParameterVariance(),n_simulations=1,seed_start=s,workers=1).simulation_results[0]\n            d=asdict(r)\n            if a.verify:assert d==expected[s],(s,d,expected[s])\n            assert not r.failed,r.error\n            row={'seed':s,'result':d,'rows':dict(OB.rows),'replay_checks':OB.replay_checks,'identical':d==expected[s] if a.verify else None}\n            f.write(json.dumps(row,separators=(',',':'))+'\\n');f.flush();results.append(row)\n            if len(results)%10==0:print(json.dumps({'done':len(results),'seconds':time.perf_counter()-t}),flush=True)\n    print(json.dumps({'n':a.n,'baseline_seconds':baseline_seconds,'observed_seconds':time.perf_counter()-t,'verified':a.verify}),flush=True)\n\nif __name__=='__main__':main()\n\n# Aggregate raw JSONL files from disjoint seed blocks. Zeros are included for\n# absent buckets; simulation sums, not fills, are independent sampling units.\ndef summarize(paths):\n    records=[json.loads(line) for path in paths for line in open(path)]\n    assert len({r['seed'] for r in records})==len(records)\n    n=len(records)\n    def calc(values):\n        return statistics.mean(values), statistics.stdev(values)/math.sqrt(n) if n>1 else None\n    def rounded(v): return round(v,8) if v is not None else None\n    rows=[]\n    keys=set(CLASSES).union(*(r['rows'] for r in records))\n    for key in sorted(keys):\n        ds=[r['rows'].get(key,{}) for r in records]\n        retail=[d.get('retail',0.) for d in ds];arb=[d.get('arb',0.) for d in ds]\n        m,s=calc([a+b for a,b in zip(retail,arb)])\n        rows.append(dict(name=key,count=sum(d.get('count',0) for d in ds),mean=rounded(m),se=rounded(s),retail_mean=rounded(statistics.mean(retail)),arb_mean=rounded(statistics.mean(arb)),cut_quantity=rounded(sum(d.get('cut_quantity',0.) for d in ds)),retail_quantity_mean=rounded(statistics.mean(d.get('retail_quantity',0.) for d in ds))))\n    total=[sum(r['rows'].get(k,{}).get('retail',0.)+r['rows'].get(k,{}).get('arb',0.) for k in CLASSES) for r in records]\n    m,s=calc(total)\n    incumbent={k:rounded(statistics.mean(r['result'][field] for r in records)) for k,field in [('mean','total_edge'),('retail_mean','retail_edge'),('arb_mean','arb_edge')]}\n    incumbent['se']=rounded(calc([r['result']['total_edge'] for r in records])[1])\n    return dict(n=n,incumbent=incumbent,findings=rows,combined_local_mean=rounded(m),combined_local_se=rounded(s))\n","code_sha256":"5db1b65aeca4370a61fa0cad2b3d1ba7badcb460130cf2e0280c29e3e1711bad","incumbent_code_sha256":"baef955ec10728839f7c3357016ec9eb0550e7ec689bbd5171b1cdd5c9e37273","tuning":null,"seeds":{"start":239000,"end":239999,"inclusive":true,"finalist_seeds_used":false},"n":1000,"complete":true,"incumbent":{"mean":100.2878747,"retail_mean":124.68667127,"arb_mean":-24.39879657,"se":5.0944708},"findings":[{"name":"all_direct_cuts_combined","kind":"local_relaxation","count":30375,"mean":0.85329022,"retail_mean":1.46214503,"arb_mean":-0.60885481,"se":0.28255025},{"name":"ask_reserve","kind":"local_relaxation","count":7219,"mean":0.26110677,"retail_mean":0.27288705,"arb_mean":-0.01178028,"se":0.05027321,"cut_quantity":753651.43,"retail_quantity_mean":19.60301},{"name":"ask_uncovered_policy","kind":"local_relaxation","count":17812,"mean":0.19012141,"retail_mean":0.40128915,"arb_mean":-0.21116774,"se":0.09871372,"cut_quantity":4076322.32,"retail_quantity_mean":26.87541},{"name":"ask_physical_cash","kind":"local_relaxation","count":10329,"mean":0.72882063,"retail_mean":0.78227564,"arb_mean":-0.05345501,"se":0.15304891,"cut_quantity":9541021.0,"retail_quantity_mean":62.64783},{"name":"bid_ammo_budget","kind":"local_relaxation","count":514,"mean":0.00569318,"retail_mean":0.00569318,"arb_mean":0.0,"se":0.00569318,"cut_quantity":7050.99,"retail_quantity_mean":0.31254},{"name":"tick1_budget","kind":"local_relaxation","count":12643,"mean":-0.32540502,"retail_mean":0.0,"arb_mean":-0.32540502,"se":0.1588442,"cut_quantity":176188664.32000002,"retail_quantity_mean":0.0},{"name":"ammo_wealth_cap_same_tick","kind":"local_relaxation","count":43,"mean":-0.00704676,"retail_mean":0.0,"arb_mean":-0.00704676,"se":0.00679361,"cut_quantity":16575.79,"retail_quantity_mean":0.0},{"name":"ammo_wealth_cap_same_tick|H>=500","kind":"local_relaxation_bucket","count":43,"mean":-0.00704676,"retail_mean":0.0,"arb_mean":-0.00704676,"se":0.00679361,"cut_quantity":16575.79,"retail_quantity_mean":0.0},{"name":"ammo_wealth_cap_same_tick|cash<200","kind":"local_relaxation_bucket","count":43,"mean":-0.00704676,"retail_mean":0.0,"arb_mean":-0.00704676,"se":0.00679361,"cut_quantity":16575.79,"retail_quantity_mean":0.0},{"name":"ammo_wealth_cap_same_tick|p0.01-0.05","kind":"local_relaxation_bucket","count":31,"mean":-0.00484127,"retail_mean":0.0,"arb_mean":-0.00484127,"se":0.00459047,"cut_quantity":12066.68,"retail_quantity_mean":0.0},{"name":"ammo_wealth_cap_same_tick|p<0.01","kind":"local_relaxation_bucket","count":12,"mean":-0.00220549,"retail_mean":0.0,"arb_mean":-0.00220549,"se":0.00220549,"cut_quantity":4509.11,"retail_quantity_mean":0.0},{"name":"ask_physical_cash|H51-499","kind":"local_relaxation_bucket","count":5029,"mean":0.3119745,"retail_mean":0.31368317,"arb_mean":-0.00170867,"se":0.08231747,"cut_quantity":5955760.95,"retail_quantity_mean":24.45387},{"name":"ask_physical_cash|H<=50","kind":"local_relaxation_bucket","count":1851,"mean":0.45487979,"retail_mean":0.45487979,"arb_mean":0.0,"se":0.0994694,"cut_quantity":1423890.75,"retail_quantity_mean":37.13938},{"name":"ask_physical_cash|H>=500","kind":"local_relaxation_bucket","count":3449,"mean":-0.03803366,"retail_mean":0.01371268,"arb_mean":-0.05174634,"se":0.0244616,"cut_quantity":2161369.3,"retail_quantity_mean":1.05458},{"name":"ask_physical_cash|cash200-500","kind":"local_relaxation_bucket","count":4717,"mean":0.34655479,"retail_mean":0.34870134,"arb_mean":-0.00214655,"se":0.08913132,"cut_quantity":4818310.12,"retail_quantity_mean":23.82608},{"name":"ask_physical_cash|cash<200","kind":"local_relaxation_bucket","count":1145,"mean":0.32396008,"retail_mean":0.32964727,"arb_mean":-0.00568719,"se":0.08077977,"cut_quantity":1003277.19,"retail_quantity_mean":29.06279},{"name":"ask_physical_cash|cash>=500","kind":"local_relaxation_bucket","count":4467,"mean":0.05830577,"retail_mean":0.10392703,"arb_mean":-0.04562127,"se":0.04580196,"cut_quantity":3719433.69,"retail_quantity_mean":9.75896},{"name":"ask_physical_cash|p0.01-0.05","kind":"local_relaxation_bucket","count":3818,"mean":0.00342989,"retail_mean":0.05675023,"arb_mean":-0.05332034,"se":0.02944299,"cut_quantity":1800638.06,"retail_quantity_mean":4.1927},{"name":"ask_physical_cash|p0.05-0.1","kind":"local_relaxation_bucket","count":445,"mean":0.00338736,"retail_mean":0.00338736,"arb_mean":0.0,"se":0.00338736,"cut_quantity":44509.89,"retail_quantity_mean":0.13522},{"name":"ask_physical_cash|p<0.01","kind":"local_relaxation_bucket","count":6066,"mean":0.72200338,"retail_mean":0.72213805,"arb_mean":-0.00013467,"se":0.14959539,"cut_quantity":7695873.05,"retail_quantity_mean":58.31991},{"name":"ask_reserve|H51-499","kind":"local_relaxation_bucket","count":4822,"mean":0.15482575,"retail_mean":0.15641863,"arb_mean":-0.00159288,"se":0.03485627,"cut_quantity":562770.55,"retail_quantity_mean":11.56783},{"name":"ask_reserve|H<=50","kind":"local_relaxation_bucket","count":1860,"mean":0.09768169,"retail_mean":0.09768169,"arb_mean":0.0,"se":0.02466052,"cut_quantity":169795.13,"retail_quantity_mean":7.19726},{"name":"ask_reserve|H>=500","kind":"local_relaxation_bucket","count":537,"mean":0.00859933,"retail_mean":0.01878674,"arb_mean":-0.0101874,"se":0.00888635,"cut_quantity":21085.75,"retail_quantity_mean":0.83792},{"name":"ask_reserve|cash200-500","kind":"local_relaxation_bucket","count":4293,"mean":0.18001979,"retail_mean":0.19105513,"arb_mean":-0.01103535,"se":0.03932154,"cut_quantity":490441.42,"retail_quantity_mean":13.16875},{"name":"ask_reserve|cash<200","kind":"local_relaxation_bucket","count":1286,"mean":0.06488201,"retail_mean":0.06560486,"arb_mean":-0.00072285,"se":0.01728022,"cut_quantity":90163.19,"retail_quantity_mean":5.01626},{"name":"ask_reserve|cash>=500","kind":"local_relaxation_bucket","count":1640,"mean":0.01620498,"retail_mean":0.01622706,"arb_mean":-2.208e-05,"se":0.00532028,"cut_quantity":173046.82,"retail_quantity_mean":1.418},{"name":"ask_reserve|p0.01-0.05","kind":"local_relaxation_bucket","count":1221,"mean":0.03363038,"retail_mean":0.03517136,"arb_mean":-0.00154098,"se":0.01139376,"cut_quantity":92456.25,"retail_quantity_mean":2.66881},{"name":"ask_reserve|p0.05-0.1","kind":"local_relaxation_bucket","count":181,"mean":0.00515701,"retail_mean":0.00515701,"arb_mean":0.0,"se":0.00328667,"cut_quantity":7541.33,"retail_quantity_mean":0.22931},{"name":"ask_reserve|p0.1-0.9","kind":"local_relaxation_bucket","count":463,"mean":0.00507092,"retail_mean":0.01531017,"arb_mean":-0.01023924,"se":0.00793791,"cut_quantity":16384.27,"retail_quantity_mean":0.68384},{"name":"ask_reserve|p<0.01","kind":"local_relaxation_bucket","count":5354,"mean":0.21724846,"retail_mean":0.21724851,"arb_mean":-6e-08,"se":0.04710296,"cut_quantity":637269.58,"retail_quantity_mean":16.02105},{"name":"ask_uncovered_policy|H51-499","kind":"local_relaxation_bucket","count":6650,"mean":0.11640534,"retail_mean":0.13377044,"arb_mean":-0.0173651,"se":0.0281742,"cut_quantity":827672.43,"retail_quantity_mean":8.75629},{"name":"ask_uncovered_policy|H<=50","kind":"local_relaxation_bucket","count":1864,"mean":0.00473174,"retail_mean":0.00581517,"arb_mean":-0.00108344,"se":0.00217474,"cut_quantity":13185.66,"retail_quantity_mean":0.41299},{"name":"ask_uncovered_policy|H>=500","kind":"local_relaxation_bucket","count":9298,"mean":0.06898433,"retail_mean":0.26170353,"arb_mean":-0.19271921,"se":0.09542788,"cut_quantity":3235464.23,"retail_quantity_mean":17.70613},{"name":"ask_uncovered_policy|cash200-500","kind":"local_relaxation_bucket","count":6110,"mean":0.16170612,"retail_mean":0.17079889,"arb_mean":-0.00909277,"se":0.03914245,"cut_quantity":609071.94,"retail_quantity_mean":9.7886},{"name":"ask_uncovered_policy|cash<200","kind":"local_relaxation_bucket","count":1272,"mean":0.01062448,"retail_mean":0.01161416,"arb_mean":-0.00098968,"se":0.00512822,"cut_quantity":40260.76,"retail_quantity_mean":0.63415},{"name":"ask_uncovered_policy|cash>=500","kind":"local_relaxation_bucket","count":10430,"mean":0.0177908,"retail_mean":0.2188761,"arb_mean":-0.2010853,"se":0.09098261,"cut_quantity":3426989.62,"retail_quantity_mean":16.45266},{"name":"ask_uncovered_policy|p0.01-0.05","kind":"local_relaxation_bucket","count":5828,"mean":-0.06832232,"retail_mean":0.11761294,"arb_mean":-0.18593527,"se":0.08533513,"cut_quantity":2149451.85,"retail_quantity_mean":11.12583},{"name":"ask_uncovered_policy|p0.05-0.1","kind":"local_relaxation_bucket","count":5413,"mean":0.21986065,"retail_mean":0.23861929,"arb_mean":-0.01875864,"se":0.04289171,"cut_quantity":922361.02,"retail_quantity_mean":12.94353},{"name":"ask_uncovered_policy|p0.1-0.9","kind":"local_relaxation_bucket","count":451,"mean":-7.614e-05,"retail_mean":0.00637643,"arb_mean":-0.00645258,"se":0.00736966,"cut_quantity":25900.35,"retail_quantity_mean":0.29057},{"name":"ask_uncovered_policy|p<0.01","kind":"local_relaxation_bucket","count":6120,"mean":0.03865923,"retail_mean":0.03868048,"arb_mean":-2.125e-05,"se":0.01230589,"cut_quantity":978609.1,"retail_quantity_mean":2.51548},{"name":"bid_ammo_budget|H51-499","kind":"local_relaxation_bucket","count":377,"mean":0.00277315,"retail_mean":0.00277315,"arb_mean":0.0,"se":0.00277315,"cut_quantity":4045.19,"retail_quantity_mean":0.13877},{"name":"bid_ammo_budget|H>=500","kind":"local_relaxation_bucket","count":137,"mean":0.00292003,"retail_mean":0.00292003,"arb_mean":0.0,"se":0.00292003,"cut_quantity":3005.8,"retail_quantity_mean":0.17377},{"name":"bid_ammo_budget|cash<200","kind":"local_relaxation_bucket","count":514,"mean":0.00569318,"retail_mean":0.00569318,"arb_mean":0.0,"se":0.00569318,"cut_quantity":7050.99,"retail_quantity_mean":0.31254},{"name":"bid_ammo_budget|p>=0.9","kind":"local_relaxation_bucket","count":514,"mean":0.00569318,"retail_mean":0.00569318,"arb_mean":0.0,"se":0.00569318,"cut_quantity":7050.99,"retail_quantity_mean":0.31254},{"name":"tick1_budget|H51-499","kind":"local_relaxation_bucket","count":159,"mean":-0.01978962,"retail_mean":0.0,"arb_mean":-0.01978962,"se":0.01977386,"cut_quantity":316869.83,"retail_quantity_mean":0.0},{"name":"tick1_budget|H>=500","kind":"local_relaxation_bucket","count":12484,"mean":-0.3056154,"retail_mean":0.0,"arb_mean":-0.3056154,"se":0.15764702,"cut_quantity":175871794.49000004,"retail_quantity_mean":0.0},{"name":"tick1_budget|cash200-500","kind":"local_relaxation_bucket","count":2412,"mean":-0.01913206,"retail_mean":0.0,"arb_mean":-0.01913206,"se":0.00994842,"cut_quantity":20168414.86,"retail_quantity_mean":0.0},{"name":"tick1_budget|cash<200","kind":"local_relaxation_bucket","count":1462,"mean":-0.07255853,"retail_mean":0.0,"arb_mean":-0.07255853,"se":0.05521136,"cut_quantity":16534287.51,"retail_quantity_mean":0.0},{"name":"tick1_budget|cash>=500","kind":"local_relaxation_bucket","count":8769,"mean":-0.23371443,"retail_mean":0.0,"arb_mean":-0.23371443,"se":0.1481544,"cut_quantity":139485961.95000002,"retail_quantity_mean":0.0},{"name":"tick1_budget|p0.01-0.05","kind":"local_relaxation_bucket","count":9940,"mean":-0.32540502,"retail_mean":0.0,"arb_mean":-0.32540502,"se":0.1588442,"cut_quantity":140189900.34,"retail_quantity_mean":0.0},{"name":"tick1_budget|p0.05-0.1","kind":"local_relaxation_bucket","count":2703,"mean":0.0,"retail_mean":0.0,"arb_mean":0.0,"se":0.0,"cut_quantity":35998763.98,"retail_quantity_mean":0.0},{"name":"all_steps","kind":"actual_edge","count":2000000,"mean":100.2878747,"retail_mean":124.68667127,"arb_mean":-24.39879657,"se":5.0944708,"cut_quantity":0.0,"retail_quantity_mean":0.0},{"name":"any_direct_quote_cut","kind":"actual_edge","count":30375,"mean":3.22561242,"retail_mean":5.71693197,"arb_mean":-2.49131955,"se":0.71664,"cut_quantity":0.0,"retail_quantity_mean":0.0},{"name":"ammo_target_wealth_cap","kind":"count_only","count":0,"mean":0.0,"retail_mean":0.0,"arb_mean":0.0,"se":0.0,"cut_quantity":0.0,"retail_quantity_mean":0.0},{"name":"ammo_full_target_wealth_cap","kind":"count_only","count":5222,"mean":0.0,"retail_mean":0.0,"arb_mean":0.0,"se":0.0,"cut_quantity":15740846.60275722,"retail_quantity_mean":0.0},{"name":"ammo_wealth_cap_price_switch_unestimated","kind":"count_only","count":0,"mean":0.0,"retail_mean":0.0,"arb_mean":0.0,"se":0.0,"cut_quantity":0.0,"retail_quantity_mean":0.0},{"name":"free_cash<2","kind":"count_only","count":0,"mean":0.0,"retail_mean":0.0,"arb_mean":0.0,"se":0.0,"cut_quantity":0.0,"retail_quantity_mean":0.0},{"name":"cash<200","kind":"count_only","count":15225,"mean":0.0,"retail_mean":0.0,"arb_mean":0.0,"se":0.0,"cut_quantity":0.0,"retail_quantity_mean":0.0},{"name":"reserved_cash>half_cash","kind":"count_only","count":21814,"mean":0.0,"retail_mean":0.0,"arb_mean":0.0,"se":0.0,"cut_quantity":0.0,"retail_quantity_mean":0.0}],"paired":null,"failures":{"incumbent":0,"instrumentation":0,"seeds":[]},"seconds_per_simulation":0.2730957426390378,"method":{"simulator_commit":"b244530ee2a6247b5f930830eeca9dd950da0e7e","configuration":"Default ChallengeConfig(), ParameterVariance(), 2000 steps; run_batch(... n_simulations=1, seed_start=s, workers=1), without sandbox.","offline_reproduction":"Save code to a .py file and run python3 file.py --n 20 --verify --out test/scratch/verify.jsonl; then --start 239020 --n 980 --out test/scratch/block.jsonl. Import the saved file and call summarize([pilot_path, block_path]) to reproduce numeric summaries. The code embeds exact B plus pinned simulator Python sources in a compressed ZIP; no network, pip package or submodule needed. Default extraction root is test/scratch/collateral-runtime.","count_unit":"One step per binding class after share rounding (cut >=0.01); bid/ammo cuts count once jointly. Count-only target caps count steps before rounding. Marginal buckets overlap: never sum belief, horizon and cash buckets together. any_direct_quote_cut is the union, not sum of class counts.","edge_unit":"Edge per entire 2000-step simulation, zeros included; mean=retail_mean+arb_mean. SE is sample SD of per-simulation sums divided by sqrt(1000), not per-fill or per-step SE. Count-only rows carry zero edge meaning unestimated, not proof of zero effect.","quote_ladder":"Starting at B, lift ask reserve first, then uncovered-ask policy up to physical free cash, then physical ask cash ceiling; restore pre-budget bid/ammo sizes, then pre-budget tick-1 size, then same-price ammunition size suppressed by wealth caps. Class edge is incremental between cumulative books in this order, so row sums telescope. ask_physical_cash is deliberately collateral-infeasible diagnostic supply.","ask_sizes":"Wanted=floor(add_a). Physical=floor(min(add_a,cov+max(free,0)/(1-x))). Policy uses ub before the reserve min. Actual uses B final floored q. Their adjacent differences define reserve, policy and physical-cash tranches. free is B tracked free cash after bid submissions and its $2 buffer; cov includes B 0.1-share coverage buffer.","retail_replay":"Snapshot actual post-arbitrage book. Insert surviving extensions behind ALL actual orders at equal tick, conservatively respecting existing FIFO. Replay every actual retail order, same sequence, notional/quantity, tick and quantum. Compare total participant retail edge to baseline replay. Stale extensions are swept at the same true probability before retail; their negative edge is the arb column. Probability is read only for this diagnostic, not fed to B.","where":"p buckets use B phat at quote time, not a future probability; H is steps_remaining; cash uses total state.cash, not free_cash. Counts describe where B actually cuts demand.","wealth_cap_scope":"Count target/full inventory caps separately. Estimate direct extra ammunition only where lifting the cap preserves the ammunition tick or creates a previously absent order. Price-switch cases are counted and left unestimated. Upstream effects on later inventory, sticky orders, q1 demand and cancellations are not replayed.","limits":"Local opportunity estimate, not a paired strategy gain, not an oracle result and not a promotion. Extra capital is virtual; no action, inventory, RNG, competitor replenishment or future state is changed. Extensions vanish after one step, so missed persistent quotes are not carried into later steps. Original $2 free-cash buffer, 10% bid-budget cushion and other controls are included in existing aggregate limits, not separately isolated; probes are not enlarged. Branch/future interactions are outside this estimate.","scoreboard":{"current_best_code_sha256":"baef955ec10728839f7c3357016ec9eb0550e7ec689bbd5171b1cdd5c9e37273","candidate_count":0,"promotions":[]},"mean_cash_per_step":862.14571134,"mean_free_cash_per_step":842.21333622,"measured_seconds":273.0957426390378,"source_links":{"B":"https://api.imdnotdead.fun/artifacts/ecbc9087b4f238fc1b5b0d52f55af073f676c038bfb6756172b1e51480ac1741","simulator":"https://github.com/danrobinson/prediction-market-challenge/tree/b244530ee2a6247b5f930830eeca9dd950da0e7e","rules":"https://raw.githubusercontent.com/danrobinson/prediction-market-challenge/b244530ee2a6247b5f930830eeca9dd950da0e7e/docs/orderbook_prediction_market_challenge.md"},"evidence":"All numeric measurement claims are computed locally from the seeds above by the code field, whose SHA-256 is code_sha256. Upstream source passages and URLs are in sources.json."}}