From 5a50ce3b084d943eefd198e4a034d07099a22b6a Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Sun, 11 Aug 2024 11:04:08 +0200 Subject: [PATCH] Export bjson module (#478) I find it convenient to have access to JS_ReadObject and JS_WriteObject from JS land. That's precisely the functionality that tests/bjson.c provides, ergo, move it into quickjs-libc.c --- .github/workflows/ci.yml | 4 +- CMakeLists.txt | 10 ---- doc/quickjs.texi | 3 +- gen/repl.c | Bin 139210 -> 139388 bytes qjs.c | 1 + qjsc.c | 1 + quickjs-libc.c | 66 +++++++++++++++++++++++++++ quickjs-libc.h | 1 + repl.js | 4 +- tests/bjson.c | 96 --------------------------------------- tests/test_bjson.js | 2 +- 11 files changed, 77 insertions(+), 111 deletions(-) delete mode 100644 tests/bjson.c diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 25404cb..f2e7d92 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -139,7 +139,6 @@ jobs: run: | cp build/fib.so examples/ cp build/point.so examples/ - cp build/bjson.so tests/ ./build/qjs examples/test_fib.js ./build/qjs examples/test_point.js ./build/qjs tests/test_bjson.js @@ -207,6 +206,7 @@ jobs: - name: test run: | build\${{matrix.buildType}}\qjs.exe tests\test_bigint.js + build\${{matrix.buildType}}\qjs.exe tests\test_bjson.js build\${{matrix.buildType}}\qjs.exe tests\test_closure.js build\${{matrix.buildType}}\qjs.exe tests\test_language.js build\${{matrix.buildType}}\qjs.exe tests\test_builtin.js @@ -235,6 +235,7 @@ jobs: - name: test run: | build\${{matrix.buildType}}\qjs.exe tests\test_bigint.js + build\${{matrix.buildType}}\qjs.exe tests\test_bjson.js build\${{matrix.buildType}}\qjs.exe tests\test_closure.js build\${{matrix.buildType}}\qjs.exe tests\test_language.js build\${{matrix.buildType}}\qjs.exe tests\test_builtin.js @@ -267,6 +268,7 @@ jobs: - name: test run: | build\qjs.exe tests\test_bigint.js + build\qjs.exe tests\test_bjson.js build\qjs.exe tests\test_closure.js build\qjs.exe tests\test_language.js build\qjs.exe tests\test_builtin.js diff --git a/CMakeLists.txt b/CMakeLists.txt index 373bb1f..d4de876 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -312,16 +312,6 @@ if(BUILD_EXAMPLES AND NOT WIN32) if(APPLE) target_link_options(point PRIVATE -undefined dynamic_lookup) endif() - - add_library(bjson MODULE tests/bjson.c) - set_target_properties(bjson PROPERTIES - PREFIX "" - C_VISIBILITY_PRESET default - ) - target_compile_definitions(bjson PRIVATE JS_SHARED_LIBRARY) - if(APPLE) - target_link_options(bjson PRIVATE -undefined dynamic_lookup) - endif() endif() add_executable(test_fib diff --git a/doc/quickjs.texi b/doc/quickjs.texi index dab92bf..c335eeb 100644 --- a/doc/quickjs.texi +++ b/doc/quickjs.texi @@ -872,8 +872,7 @@ Examples are available in @file{quickjs-libc.c}. @subsection C Modules Native ES6 modules are supported and can be dynamically or statically -linked. Look at the @file{test_bjson} and @file{bjson.so} -examples. The standard library @file{quickjs-libc.c} is also a good example +linked. The standard library @file{quickjs-libc.c} is a good example of a native module. @subsection Memory handling diff --git a/gen/repl.c b/gen/repl.c index 2757a668f697addeb14cef4c2349972b9fdba168..8e3310661f9fde33c844ccef25da4ec18d78a201 100644 GIT binary patch literal 139388 zcmd3vN$)gGcGdU&DPD;kGVsiU7?v#9A(jYP&j<}o+t_Uh!H zH>IkKxbqm1ky-!hpa1gjfBU;1zx>x9zyI+!U;gmp`!8Sq?hk+UKfnCpx8J_}?stFx z%h$jE`3*vA79;a39t0PaA+oDV+) z@QUG&4fYz+pAQu8MD2sF7=RxpEsjkm!C?EfD7@1TaK9UvTErE1U->KmaDUX)S74Ip zlkb}Paa?IFm9qL1X81mak5Lr!1`4QBQ!UA-1I35$$M>Rh7!IPzUQ%ZC)h8%mOAI7I z--^O(soUH`^CtkZz-H`v z+xcSH!Gy^K{F;z@Ie=w=G7*^XN}-H15sGt?>>ob4jze1wkZBS|ShTEZ*ACyvw7 zA5jC|xdEGuwG2*GFJnvqm}Z2?L}A8A zVdx5$ra*0nJH`f>)S8(G0Pw*i^mV0Z3IGFz=pU$enrd+Y!*JwkTOhQw2U9UGp|Rz_ zQIaeupg&x_0mwWKQGjK2vR&$`(nSN1c^(7IHbO!}PAnN8u7<9}l2fST;f4*0i+cbx zwq$QQ3q-#`QK>DoG(5iTz55jz(Q3WHy0j6bN^40rw$BpZvh?g=issBC(h`1(uEA*$vvfG2i7*tnmhrOV< zAz>1Zh;h+Ua?jKynnQbof}ou+rFBf{WCL#e4d*kjDf)`F6)LbQ{t_BnhEw1mb5dJo z*joTY0~1rFlb*yU%#2JW09=F5U<~Io!?+`M@TJ|ch1;$Pooqu-n2M!KM28Ho$q`sO zqS^6{x*c&+nem~}NHA#34fPVDO#P}h6rBvLt+9brEZty5x%M<68cR#L7cAXnBr|OH zz87&a^F}N=YkU~wYM8A0fLhC7aySA$bFTmiEpmUP9qxqw)9i4IH5(tKa-&N;ka>nh zTcKC}+d?npFfy!@Lt2ScX|m?-kST;)ylz!KC;$I{f!VD@CRfz^0%}aD2ko z<Qfo)+3kMJ&BWGlPNW08nrY5cnBJwuA6_m+2liyoe<+^AvXhRO`|J7WCJ;_nT+p z{^=||OJOa8yGpEx7oken!$IPDN!voZDx=WQx|IO{UQFh*dk3bu+-^bR`V$IX{}OBR zVsG1l1CR1Xnq)|p-oWr5n~a0Y2i&6`X=&3B`vVKB1TZDbAwr8lh$5)$U`e=w^SMcr z^8x&4pfHo2;sM8&=%ygQa`OnQu;gxL<9On0O9#42$}ms34{wO-iYSm(M>4Fb)Xb$bMux8fF!vEUv+g&Y zmF6LXT>v&Vnv>yRY2)}(Zw>H(;~G6NEDAE5Sz0-68B*OWX>u`)xV4$wxRGQ;LIb0v z%V2K++!0?Q31Ei|5%#gt($kATA)#?#Tp+StB62oyh~lkGh5Jy$Nx6rXtlVdG1RyWU zl;};mpktPt$XFfX%yKe-y&1XEYzh~`#m?v{wTUGRG}3LWPjqs(&n&T5dD>B(CiB83 z5P5%TS?00g;xnBBt5ev$P~sBSpxFuqV0)*TbObM51Z;8FU4d4LUT!VcL zZ(@jMZFfp&^rK5C)G7wI;=xzaHFn*zJT@JWdgmmoSY(h(I%l=s(Q$fqcMq>Pf-LF` zn;tOSL=*&IUVnvJgN_+PmFWjwp-}5J46oi#1OT@ad%kPwU?=}XxEdJyz^W;TnPoFO zjOFqUI=2oYYF~OLiClxE5|TK8p4i3dye ze(7ZTW;y?fW>}iW@E&(39(!waO5lF55iFL14M%WDbqZYpKmiNLCTu{O+OAfw4R8Uh zfrALxU|iYvmtK}C(}79)X)?Z#U^?3Yt(%Q2CL4g^3>v$M0C0Xgi0?lPa+sz+x7>l= zYWF}a?K*)OxX1R2hvK3EmSz1=U(>m=j3}(8si`S+rsPWf0YDI9>A^tLA-qP5)BwiE zZ5>f_5rHy@a3513t0}`87zg2ccvo#&H3hWpVil2X;E`aMDFCz)eA5$q6D*`Eq!K!! z*`b4=>0<+(C}`M%uJ~F@iOyML)k9ATHTVuVY?~z+-+kGQer!HcW$tw^8WUFh)M{X* z=t~TXnRjb*TTH$mbx>N872ji5^fMfxrn0)2NDnO;0LMl%I5t5m3dOtt0=Ms*;5iW| z$XQ4mfIEBe?e8!tIz)?=k!ANi3=qfQ7Qnl;u1aVPEL}X70flVuLs2ASSNR(Xwvt9` z(Ju;EHyoRkW2{mM-{0XH{CF?jdy-_}`^UIm5z-VGpo-bm!m&*a`d)ye8L86MdINCu z?EuR%CKL*tcS}5=Tv03GidFo_Qeni4ycA&Xm2Pz>g1QRD{$$G$|gY=~Ah5kS)OH1Fb zpJ0Lkya;PR(+w6sG}RG|rFDglY)T@baqOY#VunC9tGEnw?ktU3U!!P!`j8AAnQv`M ztW+@+n2HyVBcPyLQ96}#R4FEqv=rx+71yF_JfoG zL221Z3-Fzyzatr2AaIA_teFvfSSOT?Cp&Z)GA#$ zVRD6)yx0XNAs3#84}Ib2!Yw$t2iFFf2`lwiij< z_pk@6`gBJIOL&gehYSMP5xsNfLy1{A6(N_16r$vQ;eIQR!p7tx(iy3;7*oV)Dz1hv zfg7njRfyiOJZ9J{MXDR@@jarY=7<8OktBe9BpG8F0YGh}N-`2*PE-U|6pB>EwgM<8 zg<8E*B&R^r0B9Wpt-~`=3ElDuQ3z+wVDh38hK1-oh9f(0FAMK~BQ5z(yC}cY=Nnim z*^4xlfof2g>WWiKDj<^p+l}wU9%qp@^d|QXmT(QG;nk5uV0#TDoX-E6Bx0sl!6WlH)OtVG{j-y49i zWZ*3w9<@T>9f?9(Dv?_8M7RvCyNKX8vbycyJ_0uu-&OpI^4mzBTq%__1qMjQ_E~6x zRgN=*NkWH{xk(KDIL&bdJ2+E_dn}Eh1`d~T0I_Jn5gZA)8lFqqgo3>lGhqke^9}^r z1TCRGZz4$F)v1&MV8&YpMBm`PMr)}op||+*0xBt>7+87{ZlqdDmJH{j2;amp+)Fm+ z)<1~?dk@a4&TS6!Nz3Tx`h9_=O(UU6fY&tQ**_MRII;L`eB+>sD{ zfUg+Ca~+~CS-WP$-hxP!ZE0%*Ha2%abOSGz7FJv1C5AJOFcwknd&mPtyN2}*OW_Vi zk*qG=3^9dp1g(Ib?*B*%>3r!?^K^GJ94fBnTJDVw5uaz^W0+cV98svBpYhBzB^wKSoS6HYUAUr zupy06Ts-P!nOI_F#Zrtmf?~Nea;|Y$RG)5tq_^w@H~~~Tlnf&?x6tC-$z7DW;$9FL za)IZ-V?=j<&2mqU6nv?SNCQwXdOHA^tSiakF` zGc=&?XR(7#BRX!=QFNG(M!QaSh=R27E<_{?QmmLdcY>rPiR=3hO2h93eA#yh02?b8 z;jM2)Gy8q)V4)xMUx!Mhw?fer(8HpWt*ypcN;a{C*28eg5+`e|TmmRpJQGt_)I!EZUTLZm}^|*)7*AJW9Z5Y4p?HJgaP*J*)m8;$buvDMb5|tP z&X~4}ErT3*Rse+SPtpS3IvljM-# z3k7)&MSgPMQoW=}oVXi+?7hS^eky8{@19Br<-#sMfwVj0jPHo@(wk%;>828q3O|)R zB%5OI5ZYR&h@f>%btf=VbpxaeV3XY2r1B}aq|_5eHz3R#bxHqkwXlO){U za|QBgoERqMIC)Ck`CV$&C9{N5?o5SW(_fR z5^+k1N-hA>;ViB!JtYxK==)`o2mn_jM1*fH!iuGnBmxLM_>PHaUdZD+8~{+JhygyK z7Qp3EO<@rf^ASb@J6Yq8lL4W{*y7}I9Xjs$?CUR)VcAK{OtIm%_DGeP5-lPwn59G- z8@+dwDQgV&q$><3|zdUZ+*F?-Sb)Z4{^`lQY=Y*T(WWz7Zk9H z8t|n>l^Q0`8pRs4P2m)^9a2&*yFboXaDmXa19bo=gBdKn2CZZee`f3+cT=`&2%iBU zjflE#{fsL&GQbjUkMpU;E~E{RGMw7l8nrJ8p!T#H03~7p>qHFXV%!Wbz4uDGMZ8jg zC}=7;>{n5^GI^H88el0I*cErc0s@}lbqI~UEyE2!^#i|BXy41a!Dr2^qBjMc41GTp zy#e5!SNFL1ffWT{lVSBkXmBrVJOAyBTOm!jFf|-L zS*`EV(nA2d=7^I9umhtR@w$i(Wg>)#^RUW?fte)PJStWPOH>+!4pky9r+~3foof0!?BahMhG;6m4)e06}37MSB|{?ZEOF5n%(c_oy4^^9HSSznpGV;4fF$V)eEi zS_*48BPrX}(a6#dQu%0`?_@+f#Z7**BnjspoxC+1j@t=VYo;@?U75TAJc+InzrvX# zBhE#MC=BQVwo?dqdeQve08a5Jj>Je$BMM%~VmQ?5-TCw=bWeQC-rjX^5*S7)YPKj$ zNJ0oB05Qg>Yn+dbU;zY$ zJ=xxofSkUqBmI!)9z;T`grbOWJ|76M_-6f^QBms(S(;%HwN20)meKdA1_8jI23YO7 z(jmGeVP~N38VCS)NNZ@)-ZuJ%HsOLrF%W!vB_y?C>7vsV+^;|Z-BU4A23@avMIki$ zksZ7f1PV!bu`%e472E_hpgl=w6uIEoIiA_B*!E}wOdMGBm=r==2Dh8|k63yDd>D>f z2nJ65tbQN>w4o?-uNuAtwb^V50IlSfaU2f_Ejvt1tt(wIBGdp&T)Gso!6ciL{?3xK5X{JPPlZ@& zW#HaJTQN9@)6C{@9wyr|m7qoFJQZLDqz20-(I>02170Z{-uuLJ$$YCLhT(+O1xnwc zwm3QG$k-f*Z$Be|Q;4#2$DbrL6r4}tTSd_i#e`p#Q%VN;&qqW@Tx`O36gox)z%YU` z30EJJ+Hg?LO#~Z@e1Rzw_t2Xtpc5u3EN8B6=L?Ok+jckt>;Wv6Y-8A4e2Gi2F&JnH zV=9s~OI&(CQdJLtd)JZ+J5~fhEZH3Z)2QhfV8rXB=A(K@0wPf>d88#M3{4+kTqlts zNgjhS(O{1xV3&ba4CmYr1JFsVp$y+?N-bsXumw;wE@;;XB|2@PnJe#-9TTYgBL+<0E+^bB5m23Lv*w1BP6I2O(P=s@Z6NgcP%x{laN+1z<4e; z=F^KNoGdLp9O1C~a1+VE4<)R{-dsU86oZzmlawLL*O=PWa6V&2T&6|B zx*0p11a&;%4ncV`7FtRGbf3x{wr>De8blYz99w}&w-iL&vcCk5v=2g0hQTjz=}sPHI!R9S8A0EHohh;`x+N4 zVJ5`lJ7CBoEm=+|_>3%UtPC9Ph;r?GWF)w!v*3Gp>r8DegKv$411HmWXTf2Crsj?e zm7)8)go$zOtv3OAX-XMxRa}wY-Eo>y02m0yg1t*q1_cBK;NFx0Fx;zIx;Lc&gnQbu z0Z=hPvsy_2_hu?!uOMMH3%lE&G*h_A%zsUR?YURt+u!9Ne1D^4V{h1>EwcsiB2i%H zhFep$U)L1g2_Fv%u^iw5Q+6P@&cn0yL`?(mgWWzJ=J9(ABq#vhRYYiS7m>WeuW$zz zZOi6n{{4&BBfHPy%gA7rp(R>eTth5*S9~~2%i!fo3}b2T1m+`3&KjtaRRkwAtpJ3U zY*q|H`$VNYhwrE%cM>_^TjfiZ7T?RTIG&T*8%F!y0PZ1)2ZX~Nt`Ic7|7hl%No2v#k$)R!By*%{k#qEqOa!i9ct1Q^3j zV9Dtomh^ec5_8NFX(-{ux zJ+cceDel;kT>QX&Yub{WM=+t#9CdwQSlnMw6N*Vqt|1w`s+EBVTIWJkENX7BE_NO8 z&?}lvfm1h=XzK@>;S`gmSXzk|fRoKCZX-fy5*E7w7eW&!iosHG2tA^q@@? zEHn;+!;zyRQ{e&kmX?+-)ZhyAO!t$E<)S0;JZH=9iI*0sbcJvu)5>m3ZIg&t~UVt zOP+*lFo|A+?~-8vNCO6-STRX#aGla@fY-qW#n+Pt8^r}VWdH<)*W@TML%6zTgOqq! z27>$LI@B%z$VfW{6mS6mdotXTLB!JVR;iLM1H)ZTEzuouJnnJPUkK|*lq<@Gs128e z{WN@xO12u6r3dseEG9338-TNd9uEEZF^pk>nz^u42Z8Dm%}EMvWeh}z3>JM1O!jEu zCZYhq0ul}iAJx3!%Up5hTP|Vg0AojP&S?sMNGm7F(sNSHA$Qf41~3B=I%Y;{U}xR8 z-Il#d{85rP7g8}uo1n|pE|ZqpBNS$a^t|j~NrpTZ=h{ap6Y$a*=RyfbynF#m3;jx5 ze#O#AqR+3WnC}D-{nA%V##Hq&ulS5BKbhl>jA1$19B9h8ohZ-iVhLsdlQ#BT_?a+T zC?qo}4|MP=l5q-W?oq=K^k9!RbP*cd0w5tc9=N`+B+{SAe6Yc1D7Rv;h5pHa#Qh|@ zqMxsP59QYN2H;&XUl2MqrYj!B4z3SO6&(*FZUXCjjW&fZkj`PT0r2;ARECpS41e2k zlSswI7qgVO1pu(^lcRpLUeI5O;~bWt0DnQbi_o%whj(Bkv1_2E#I4e3#<)I4CA9E) z7~E+rxrs-ey>nP@% zuP)dCRCy0?Lcb16f7^wo=L7irCiLsH^!Hupu=Mu}p~KSOccCSTh5o(^9hSCx4|PlE zu=Mv`=&uppsoBY@<&Cvmq z-h_S=mj1B|&4~wqe{Mq8`>|TB9^QoxOaHtOIxPKj7dkEN>N0FuG})>%ErA@nDNj$!tfVC)mu=`|=*ES)@z&$)jh=o}U^41eB)ew&tF{(o9iIq_;>kS;=pr9baNr=>sdLPt!0 z#?pgr2_2UHybB$cu8yMt=pJp2u(S*Dz}@;xOIN`=0V6J-E?Frw&uM#j6PnJvMw_KC zo6v4Zq+D0=!B_*hO=ox$nmuDv-i3BAFW|5GOqJB;sr^? zx=ttV$lk8gW3&NS9UAv$Y4)SB^r+JVx`D+E!>-dgn%Vp37So(wHZWj|(2>1erxSO^ zwCi*ZM@;|REzRu-lir06OOHC8xFdVJPOHYD!@Ap{tRaiKPRB5J@uBQG&3-G;EVn(3 zr4u+~+I2dI!_uzPW3*Xfo4~jcdJOldzI)V(EQiC=uG2Z1mUf-a;fU$aXmSxcEbTg- zz-ejM=^PGAyH1Z$2^}%*Iz5J4=&WZLcAd`Aw6yDV4BIuL#ja}IEWOG}muECG;{NNod=Sc1!#n$QXKN!y6yQ>y z-f0L);GWO2m;i){*4(=?;NE2W#3nN=`MuK6LD8Gg)o2F=*bu;M{!380ekfOmAOQ4} z09Y4R!>qnrmYSirWalr%<+~sMWN$dZ81`%bv(izrzAA!gb|{U$3mRIYZyj$;#twmr zYHbQJ`UAtU2D!khseZTd0F#!4yP!*nzS)V!c9wj*c|f;U3iyttZx{~T#N9XP{;P0v z$l#=ggC#7$q19c*MoRX+5LdRp1a1m<9CL5(gsuT>6gEgV1zZ7WlAE0kz>E=(}UNIu6vKqF!&U>rohO;Q3Pyu|3@LwpS?#xRJ za~cu$@Z70Tm_KCjsw9(SD0Jp?0Wct)2vu=8W8D#se ze!$&5v1T0GRKm5U7R_q9nH84(zB^7W}SY0xMIU5ZsZ8 z+~=qUKLkc|{lwC#rNyt1&1E;ZcerS{(pE9NSUL;4mylx2cX9=m4RE!-ho!5pZhQjZ z)EF$~#+SFe(y?g|tublOCX=_06^d}94OEE*zDT(MW2;)7HcQ+WFlk}>B4aW2HBO=H zHM0S{lxJ!fksWG`_*E!A(zUOdRZ}26nlV||%cxx{`XySP1n@c+0K^@-I@IcQ;WmjHXLL9pDnk$4s4Mjq zt5D_&dMk}d1`$O|#y1#f9pYod8yaAy!TuguaM@cNu`U39WCfBWv=q4Jj12*3IO7Wu zKa->tUOq{fd5Qe_n30J=mOhZ#x<3-A+)2KXXg zjYAALrUx6XJ-AppV?+;2Pc|B0aM2VNHV|=Wy{CdgTvWM{4D!&um-lj#tTj*wU^kqM z=;I_BePXy*m`q@;Hrd~yy2A&v>73pHQ z^n1DjsOi(|NVZyhU-G6Gqivk!T`~lw$5tOp%fuc2Lq4Cl+pJ`7)Mt}PxNlOi`z2lR zcPbG5t=y0`mNUNENFk+ z&WVn{OMBJYH2~Y#blOiGWZBn1xcuB4q`C!JTI3$vnCe>DE)Qpu8+WjDh_!gm3DRzWFgC4=&X&x-{+-LtGs&Bf`DE2si$SuI7Tiu;P49 z6r{@CH|K)B8J4}F;CS%;FuJ<%BA)U*p=+Umo|$K|K?`?cPXIC*uL3{eD_|6D8TJZ< zh~H#m(+m%&D{{W@)=M^;?ZL$cpsItG9OY|^A^=T#EIRuTwK!{l(?&#V3BJYZa^k@) z97UE%#6w8M0vr@|szxl`1r0`AM-Lh9g63Bn4qeS#JO>3#hFzidMKRzsryMonfqqg# ze^t1Ut21v;Pdg|)Q7$@MTqAT3-`R_OLD8-cay4(-kT$VQSYsx&gC&Hvw~~fe3$zE2 z`SNrTdl^JU-2mxH0-pCjn!=sQe7_0VMrYmt>0WHLK*2VVgq(aSn=}BAPARHUid^22^(X|DO&>|976lM=UslU{N2Wvxlk;L=sX@*D6mFmKJTTt?23E0?8Ke8pV{s} zkx9Vk9dA@CHTD7X;n`$ca_Bsx`6%My1eI*-NrKrDG~9(gT}tsg0)4r;XwqEP$P zhnDgXtp5c<0H@3=07a9}I*1u=wLv)#QTib$27b^}h%{?;uKS3g6kRuW4wj4$jz!0R z3L?g44QYU@WNL>+5lh7Bp_c3l}Pu@DeT zZrH|fOA@1%q?;voN*iNt^~A#^@EH1EDO3MEh4;G!>pVfG$QtCMF}`UeF& zLWE^jw`tY}sOGY9i`SD~=XJI(yity^$WEMi;IPN#cDYy*Zh9B{Y3geIzR95B2i9l+ z?!4aOUacVtqY*FQTcI__LO)=jP@JB32^kO$2GSZ~xT1fsWF=w^fN874O69o?KsPbH zrLNqaeyC%)q7XzEZ{>QZq;}*E8SeBmy{ITJE0lbkihrfUyGRAZog*%Hi|YZ;!o(!D zmywNj&O$qTQv6VB_z%D{?hhGUl*puNLw7pW!%D3xSx@YZ#=N8n2CUXyp`%(ig*$~_ z>P-N5jv%aVi&Qcz^ESYuN=mR$IOplg)MNuVUxXwlRrVZ>y0DYtSz=q2L5Jl4N`I2b zmdCkWgEb)UbH7y-E?}?>RB?TZ2S{@(@n+w44DRjyve##sjqskd5ZN9XylD5_t;Mg;0&I<2cghvs9_6r!FU0Lic=12Fd_3%-y~KkkGktz?+v~ zawg9P$R^P%p3suJ@w+7r9N+Dwlp~6zj4a{-EukMo*QdLg%XYIJQHWA1yM}EEo%B;l z!mE&MAMZMZjTrz%z952k1DS$XQ^L*v-x!}LIFBGnuCl=DfDE-lhf3=PYv%qElmTAM z>3k)FQnN~M9JG{EW0vv$qbp-Hd(~@Gt z*?T0Rrr^{!xF{V^icIumIF?5FMacS%f-k_?ELl0=!br%4(0qGbVSDmLc%V4s6b6mpY`&CS!R zE71M%nH0?BJu?mFCQ;<*h#oN007=28Pq8%Ir!u&n=lR?z$tE*`5AKHoWH@=~?0t_( zie}%DC4)G(4(OVC7otuJ6vf<$nW0#~O9~yK+bq3_*u{M0qI{lqhHe9Rk%744)h&u_ z;%5g&Iu(F~cB2r~ro$D|8D0(GR4E+GYGtD^Hgi-b!QmyEqM1l=?HgP)h0CRUvmpwn zy4nC2Y)ApH>b7Wb(E#oNRM_3yjo}*gy-U@;s!XDwsYESF#rGm`I2=SW6uJiBQ0+d6 zgN9hi9>851;~sh_6c283H-%}Grj|MH3WZn_m)P}Em4(Q=??fCFUb4A)@q(K4pWHO} z^=uL|rg`lRhI77>ip#_;!_1rYeNUUH)#ZI@e-Is~;8Rz)9R^Ef4QWZk8IW_;)`|v^ z;-uIXfcV?_c9$b`vxYPPZ{TxYiVWg1HCkM#i2_7L=fMiD0hT3=9Km-76mcxqaBrlt zTIo!mC>I|~!#%a}A;S|J3pZh0Tu5l?_`=3S9G@s=5t{rQ@!(fDNzt=M3$=nnpLaR@ z)-`78EkQ|Sv$t&uxn0ETvz!HS3MClQPrdc40T@n9({oyt0-HI!0hl@)oSqaOg?(m! z(*RDuat&wF(A5cD1MK)<(vrvyWQ{^6fWVjC-X)U)knR_JVvj2)CL7=>)@FMkZGfyg zr}8n;vA`{wXMm^quL1VgWX&wp%+L@GpKSo=3tjRNy3tuQKscoS8%jE?>k2?bDr&=f8)HNNm7lu=SOz$K5 zfo^RaPC28pDZJ3eHS;RXq+f+)aFa5zD8xSKMPJ6+5z&3n228{*15t-^ZB!v8J5VP# z2f6ToOqCCo^(C&)g)G~45eX-EKtJ_aZ!{E3+Kx>i(HL4UoFegDIB_kp{?vc^6(J_r{}qe|id3z;}lu z{8Ii~UqbZsr6GE=#M%IdBdM`qhCM$CB$sj7O}^3n16OYf1czN373U|49)+_3{Ai~p z`MtcFlzYh&X#?BRqhBe$P&N=q^g>njdKc>62V z>XLBxlsO8x-2Q3`d!qN?mgcX$ykV*10UlXO5M%UEUEoHtl^#Bk&${dz14~S#?n5iwlwP@wEtWvfk&ZfmM;E} zNyGU@>-l6=1KhcWAEuOk=0?3J$i_~Oe3$4>EdanChFks)DRvt2y=OiK!&)@|>BH_2 z%FR<7i(38Wx6}-A!Y9^X!SPc+ek#oKlLDDEi!oW6R0SryRsQo@d5P4<8;R?kpAF!@ z>m0OGMJc274yCRxlR;r0C>S=_TE-2So6;W{DMN!S-!iVFn~7r z9;Wo)8|!-6=g<M;6(kx|{K@O#L;5C<-sY=2ISY8=OsYM=9OBA)yAfY$Ifda~wM2ap+ z1R(C`TR_rt>N{n?H7@rxumB9q&SC;vhuFcSl`5&zC%zkOuq~EkQTXP0Y#$lYbtv=c z3gow3D0C=ax0az3$k$qZAxjSirVQ2_1%($TEnw2yz&GDWSywoN<)8_l zt(w#T2 zDD_is4X_vvIELp}k!eEI> z*1A|?zad|^NTw>brB)`1F+2wp7>fch<4$UgyaeB@7tN%E_ASrd(vAvE@^{JO2=Nj> zV$GV78mxQbTU^w!w1Xu(f|N^*Lk;Nx)j>7DzB$f5ggq1|r_lITZ3d9ob3X~I>O^Kw z9xR0<7i*v~+5mGCyuPPP^ZnFTi^6~|0KX?OG_#yHvRZSP5S0>r8j&a`{p41QSD`r^ z-+fzsSq=mpAAgN2vukP@T+wnkA{)bb72`UM*(Lhr5}=UIPQNMmpN$3JyAW6xLDAt@ zs7b91YhYm@!T7#ApO*$2woO7;6-J^U(%#fshl^qCO-}J@mw?Q^j4S!_CXN<6rb$>C z$No2G#6@&{*5Q?ADf16*?9dUw37yn>vn1XR!z|CCAQqC$d-g4~+|lP=vGg)kPGKe$ zi7;7tyMUc4GfQK*MB&6NM7~vb@DG#&fRcri2^dH8Kl{l7^A)*G!G0QE3E$~Ul&pHdz5%ROVZsHtWt7)v zY%~DN;2fr-cg|g-LKI}ny`#4a%Izq-g{T2|hLG0vvkX%kh3G46 z3}%`!e93Q|rMDE;sS_skr)Zib`wT7!KB5dY@O?O?WKb!=OkQQBI|{(=$Yze6LIWg~ zY=Wj26=U@Xnbey2#MoysmZ3v3uFkIka56V+qQfwMa_6Z^r=>$t2;ty$2jHw?8MguG zTClEPBfBw4$1_gmKp{T|1BLFL${}yLEsqj~n3}1Qsl?#oeD;1>gGnU!IjPweQfKeG zdq3_zq&LS*uCm-s(5eZaBa!|_fofmMEq7xQfD3WYKv?X}a<&8Z7z$=&_4FwR%0`p%#8o)MYI69kO z{W{jmTWw9j4T=2Gchp(K>x%!+47StxFc$mu&ef7?S#9UpAA&O*wtT4d9T+YHUPs;^duNkvMdcvQ=p(^ZuNJ$cjETi(Y=N+C75&d)%9j6J0iS4fv31N zv$A6Y_^uBjDg}@>`CE7wON|=9`BZ%Sja4$)p2+;FI;&EV0JRjCb*Ycu5J0I=hows3 ziJ4-)_6k}CcLF1k99JTDOb2NInw_*Rl`b1Bo_lf|ilBEH`{ZMyfIARCia3%0g_!mW zp{rIkfV*M*2VIej={WRhQ+kD>)@w;%?Lc>;_8ZVs-w{r|2|GRG`_Jw%#IP zX2mG_4d7-_-AppzW#%fI07AH@Mr;7A=*{1eLz~sm*feVc@Jd7WdJKlE2LQmO$p&zU z$b63A=maM2<^^xHMWq?b5Q*Mx^@xzBu z_{gLz)Gp~Xg$JHfqbJ7^OA_vqfdVjnxrysE_pcl%QZAC54)L@MWbcbDU=kU1mGpxq zy#*W@3EXuSxA7^%dM9&~;ImpS;>ZyV7FMbyhyWs!LV-`-E10)a>rX5j;Je7VC}Isn z7b5nzoDl)QSlm&^TisBrxSUkd6tbaBmi(RKGNft%>aqDom05vA$7e&SKz_he+L*7j zE=2i8>-kFUrcm$Hu20l=*`U|xeEW9;_*9fA+`Z-7p6gCPc72@lIGTA8aqM5v59Ikx zyQV`_6nL)!r%$o*>A-L??>g;)aF7RQy;^AhDF^6L+ z+t-KBiUQ1B4cFAG#Vg^W&&$PLfq7|(Yvf|@?sXZr@7M6#L*;@#Mdg{=J$q4hvZa>b+d5fw-+RA|IwWfK7quL4_Mosn0DlM4VGV&L+$W@|~KwP}B5>2YM&-y0t+^3#b_ zY84JDz{GS$qz<7FNv%pGZ02}HIK02W@L7w#XYUID8O}}O4gg~=htiV6O9m};l3`=u zLpWl_V~H++?0p4%M_~X&|HW>J6OY)iLetXLK(x42QF_(sr=>AF-|nYuyyGlH3+^)# z8HUqm9$d_R37yww`{f~0t%ZsHi?y-YHpFaEO?2TB$eRtcIz^Y=|ERoiI|5f-%1+)6M4D#jj zs0JX+{i5Sw19$LaUgLTL;EC>7BVqCuF`S<{wM1(GPnEu%w~0YT8Ha~aanWo5NYn1( z4n9*6HlCxBL7Mi7K|E9(XJ^b?bSyMci|9V}6Xt_HGE_DZOEH{j7#~|yk~faH$;L1% zA>QYXdvkqpja_scF84$$cZema522^}ruM)+jeDpS3Vd=~lI7oNozeibaC}aEHwCHq zMHGy6_)h_Y$TB?Gj;*QQA03excE}J7-2Pv}fAA2Up4Kd(zI3%qr>L3b{E|UI^VBH{ zpsXYSiMUumBA%S00dS2MI>nj7Q>Q3^@`h&Vg-&rz;ek^$05W`3joTd?$|uK>mT-y) zRHBTf4&Nz?^~|CGM8Ug#0^`NR-aWj_-i}&Xz`-P7oX=gq_XP0G9Hw1aahK2q+${O! zXgM72eRbm~#Ki?&4FHo$%$WP7#4Q;Zc5%s3?BHRPo5KoAkJ2wKLMz=f?88T}Boqeo zeW1iD{djoS6#?X7IWDpN;Lf1N=DR_7jng?(_x(m%SY#!c(rje`BreMb&V$~H&I>0{PKSmpX z=R!Ta3C&R_Q+6UFXlUW&xjuA*cfq}`j|UqWK#3ag>Qv76kx^aupFR722K@y9C=>wb zL*Z^Gkq*Xt4~Q#(anJ^$UaP`hhV#Ky#`ZHUK5Vlf;IbQ6|ax=9~k77VdPfxX`&x9}Xgx!cSdqP=l_& z4@(a_VB-YS_a!O@ilzYfbalSfKZaXNAQGKAARv~u;ZvViU{-@4hb9f8A56BPfQwoh zoGIkCILnSST(Nh^u(N?w+}4?3qJT~$7Md||xSdsU`y9J~yes6!xX%ojWciD>7f& z`}9c2Ap>11;<|ZTnJHGQV-^6;heENgjJ1^GVLk!yW5Y+#BDy;p%Rq<>9IZEmMsKTZ zO~E^p8lW<8UzFP8>MG!pumKQ}2NoXhKvWwc8D3_xLOotkBkq0M9pFu>`Rt!4M4;GY zLgD{J19*Hk09&(ndjdGN_jvbxK4*u`CNsXpQdoef@DW)QErzG_3jqG^90Y181GQor zmvL1C&gF8&$&ITmTasfO{EhZB4p7L|BD4~>m)3lx6f;%{w%cn zGU4|92hxnLjJ2qKEIAx`;fUaC-*p^{gM@6r3(SZ|jmwizoGWRe!l-m@%o@RiSP-^fho$EM@ zo0DwK>5lT!+GZ){lrR$T}7|nF(|p!jl#H8xasR>itj5> zK!&AS?nNHTIE%BlF7cK=cGLaxB$X%4h(vx_cCWZ+YswA2{T@`_}Pe0{iBdu44g^`mdP1wWZ-j(5owl4EX}6 zdi7INTNMiZ2C#6E?NXlnUiLnO#@?{>XA`;#fGDJO6{7AfYGe909-m(3sW-rDRN;kDWOGS>Y<$_nUr5mCPiW8vH|Xy z6o7C{E+>;-Bd$y~0C(|IiF{8cmnFUr=23gXLGpejn_wl0C@9fhzT>&*bEnHUBrlS{ z$kH`+*&i6!n*toOir{7uRyWpg7PEwYb}jj^+l7{*5T>qDOQgA?+$@=NL;`lbq$~hx z%u2ctT|Qyf047Zk%DvP1cpiMRdT0qS&d~Uu%tAi^SW7Hdyw&k6T$=*-3uyzb0Hl)7 zvY5GjMH>2XdW_u4;l^?k2`xLolAjr*v%nE?irqElzCtlMbuz!Zy}7gUOxnvaQ{F7O<^~d z7f@2`NhK0m7QNI-q2ol{M0x;S+t>pi^160en+j92-*vE%NwT zuq8wZATf|3>ZuB>LMN71TNcebNgP0T97D%Ujw;a!`q^RJLrV{=TS!eO z&zu0@{CDGsHAfUOvZSRY9@Z-Y2zk4e~5EL5mj&O(<%T!Dte%zyv^I+`w{Sya@dU{e(NrL&C*9 zHkq;B6j)N^0N=gTLAe;$tKH#P6Cc*_ek-MH7*{e#I4c)Sy0R;`R3d=g#!(=rxJAES zbKU@%+a8FEv@wJMs2Df}5kG8o zu=F^9rqTrvTK`TpkceiCU=p?J{|*YN_3T*vH)wbiGQ17%PcXM!tK*0QA`Y=SvcRV+ zrzCW+gnlsA9nEr(1~|1JlY;dYloxNsH+`E(EM+$FzQ&#e_T=T=Vo-QVBhT?;rW#0H zxjxW+_*F!a1T6HZ`%@n4?XexQ_ITsVAu6-iQ@Drx}hMzH$%q5;_KU zYY=NQ`UHRs0furD*e>IJzHO>qn)Y3J(O1YC>??4n!{22}f0vusO574*NzBWR($fB} z@S3UUur$NTOs0NcM+UaDT+AbTFFPlab68sG)(dcHY$~xG1g9K|Iao?10$@Se#}Xpn zJ+?M9z%4aT6=lRlG4<~0gF@;jU$+7Z6!3)#l-yf%%HhbTB?(})%4-T}iL%F*4m)od z50v);YXEdi69T3LKFQMnW=Sr+15EB~W}N^J0F_3IE3Ffp+!qCr4F@xeT{rW&YuYQ& zWojvA>}eKS>H`ON*HdUh#|`67;c3cgp-)j;SKMX|hnp;wzX?Dh@@^AbI+}@PpwLf_}34Gn;BHW@vnwB$IE zt~{D|kI^)|?l(gSqe3l~qJCOeioS`pl_8piv;q7?bAT~Cu{OXM6#!l-(Y?wVHM6Jc zJMz?v8w4QVWPgb~=i$_q(2X~qsmAakOWv60+<^te49cjuYYILkjY5fy-O{2q9%0P{ zBYaLUgN;^0Efd(U^tOnm9y#w`>hfI?7i*OAq;-~+&m4=L0D z*|*NTP>lJ#c~`pxho!+WlkQ0#MoSF>h}4oI+GNAA8^tceWdiQ0lBD9KDX<})xE-!U zg%nE1Q-9;q04#>ljQ8^}AK@Bc&PycP-5v5-^ZD+$rZE4tpm_ziu-dT|eX~cCmc(Vc zu@k0j%vAi!&mN=W6dK?}0obT2)#nuoCr`45{hmM- z?h6-GSt)c98cpl-Y5&&%@8y;IpR>3ZRJ2T*4d88|pp){Ld)cSJ8h|8;W8ZD_yUijQ z?+UfghSl-bK|up%EGGq%ld)#W0!g^1j7f%d%c)Qx^d(~rF#V*dDKV$d0z6~A0aA&4 z-43F>RLE9pjl!o|MOM?9ezn z39O`QfMqx`g>zA~5hY;*Sgjk!w=EpOVSG4+Y=Xw-ePi@?sPz(GGb|>Z?s;$pv6j~< zh3ze&GK;rQ$#9&8b~`5*#NMaZvx_B$smGh>C)*z~*!UF4pm5454PgD;@V(qA%`LB; zV~$(fL4?khHif9xsCX|c&yJvj0#l+47j}No3{s6`>9_1M>H3o+=spS?z%x^|miz~m z;gzVEPgijmvz8!=;TYh%(vQ(`-5VhqAUkll5dXC)p^SuCMadC%L<#M;Aqd^F@bl3i zxiOw|SBL7g94$1Zd-UGx0TI-MZX5v2ON652A$g(P**wMz5hptb`7DG1S$ z|Gkk(8l6TAp~Dd_(#&A80epx$(@X%P;`LN~2x{DsXPrkxp>mX1LO2qMKJWahwoDEH zw;$nf^EH9RHl0l!Flhj8(UJ6NtKD3SRgM#rQ|h_^WOmkC7>LuxeqW^+W*u26Su72e z6*X5hF?PC1+oSd+s#|I%QD9anz0Mprg*=^mcjlP-P)v#?xtB`@T2i{-R}^N+55i<_ z6@WJklRd8=;2y)R!^N<-6?A?1hq}CBitdSrl(2TQB*P7Eq{4^}GT(%hpzc+r#Kda7 zY0l6R(G2(8uatEcU*gIWU(%#s<4Xb{dH&P&CGUp*|MsPb6UQ_@^H0Q=tfd=YqRYti zQ>Rkfz4yHIR*Lom4su7Fysj%AX0_1`YJPEv>Vt{_~q_OT9MN(fH)|4^(_j0X8mGEPx=L9AB#VppZ|mJy7uhkdNjq zl8`}$t`2}?X8FD{902RUw16cUbQ)kTeNW#BSE$YJ4UjkR^1EMnDDLNXu@uI-?E!9u zzLDfvJVX&8!5~R}KeR+{^T1XmrrRF?i|z-T6W1JWtJe}*6hes>U7mBf&DH?yDS?}N zDB#Y`3Qn1M=Oj06*l=dm=69-vN{W6{$RoVoWfx0q6q(6knKMh?O(&79xC?ddGD&Db z&l{OFaCaZme`&|<1SG*L7fDFWgW5sig_0ZqsoV#WG=RC6`TSjMTuRaa7zIf_V|8)7 zNJ5LUH|r^hPr1q_{_mRoGzF4CE&o_$Qfrpx8L|4Fc1>!&O^<6l(8-|^F*Yo%_Uuw8 ztr8VT;=$d_%sB^3!pEM##SM!TG>@uGL7NV(-D9ZOTRWvb?a+XO7ojIpj;)f@}3=u2` z$!^Lei{yoaP#R|hH}|UtGzB>35Qe|MJbU|IvAhdbsi;scYEmoCr_Ypx_nn@+xB=$h zq}BJ+`}6CH@2x21xUh2$5lr06rw2#{`2NGr5*+&v7J^kYd2zSQ41^tOW4RccDftlE z$x9x}P3&L8607$=jwNn7&r){H(tF8ZW67iZk6gs`gf8JQ95!}>Ljj5h+W}QN>91*P zqL|tfOXN9rE;fMFUhSqeK=PV5aV}YHfJ8U^_3KQ@zb#MyVWMwYV{MO7)}z- zxH|yg_>RskKiy-ZcQe^pg!C zoI+*g;(jRrY!}&fqAPGZS-g4ZJ*fA7iXpSqg*~ud9f+v0Rm!R zwuA>YF;=eG0CyqpZU*;eLu~K8ac>^5r?WZfswr@OXwg*$4GXBDu?FypP+7w_X~`fc zbk$V@xGxHQqcKy4!T=V4emJsnIC9jq(gBbe>GH*5Ep56+-aSq=_-3ah@m+ie4WTHO z2vHW}jJg7nD!oXRDtS%JDccn@GyO=0k;-ep|KLox3I+D&`YlU5M#LxV0aiZN6ud#8 zpjqS*Wm3dD^-d*817sQJOb)N#MQGf6K2y*DbVN9X+lZmWrZ2NP1bkRX!aZI;%n*>4 zqU@0cT}s6FNyQCd9V;=?y>b+c_ql_c_sQ2zT?2f;*Tao7zWM%%(Y(jb{ics%&v)0u zTPF(1AU#YRMUzAi3jWP%9%yWUi!Mw(4QH8LC8Wtxx+sW0yagkI&;BF&WZq&`0Kw~n ze9^qPPE*AI%TKfy3E_jc;&EdNcnoK5^=meLOGI4euva`#W^{bE3^OCNLO0-3LO8T^ zd(MQ!BWmR)0l-R)0YsO&T^YEZN2>C_7>EJRl=0td#9jS0Qd7uuQg00CE7F^TMhO9j zub4Sln(kEqIQ$HnR>p{#2EgnOf@Y#9#u@-jF7MI_c`nZd*I)kC%*rof2}|oU%?Fct zRJoi|6v%V>G#x4$8F9^52Zg6uwOFdyXaEApy+-1en>e+J;U%|TSU{@etl&f^mW0)J zDiK|{=cMAoO_<&Lv6d9yEYZqVO~J1^j6g-9*^-j_Yu8sS-E>FG+xiDO0q|opT)rH4 z2AKf1DD$h|0fkeC*#M|4 z-=+q&+(4hbQv4nraKra}mGYD%MX$et7E1&A zm?Ua5pB~q90e;bch2Cbi6$LCk+Q7m`rdnFN;r0!1(HKV3cd8t0i$W~z=q#*OD2GRR zIpE-6cwlPAi0`;k`R|Z{`8wa(b(l-8qQ?0c#LcO=Msd*;()s*q=po`{c(#oV;1HD~;0`;5sroa8Cw&=- zjKfE_OEKADuEeCJP+Vs3%VkspJXwkj$F7+p&EOOg`eG@DW7DMCHDr_}&A_Bk*c!vQ zl0i7=D($Vh!W}=7Bn?&>Kmc-w{h21Nm;xD=RyrTmVh`F+!@;UT=d*HQ#rMGyKFe0! zrzj$h4ZM{$lywyQhAE;qyF`I*mX=rwjszR89RsVgGRY83?o^Ie~44=(D} z-HHc%CO-FcZ}<5pTTpm6#9}hsPWm}ny@hsIY8c(KpGZEZ>Jiy>LrGfNng&kNm}c66 zcyNVOHJDqyMVUlz`f`w>FA8$9+Fznx%^!^m}_BYJFg=LOSg&fGy&3(SNdc16;Ii_x5gpG}cplHvsPN zRf1lsvgS-pN`~-woGceM+)tUo)BwgR|3Ozy#=1g0&KxBfG{An$-CE249)x>y%Q64k z+7&|y!Plkwx-J>CJobS4G6Sd^_H~@x0LpnD$Vj02YZOzO0v)3PXw?)t?uh{)!$QF) zW*Cq)V2N9LMkL!03gXWLWIiZ}Jztlc1Aw*!3bg$I(8z&8EO{;JH*1T|<-Zw}ac3E5 zwGu#VRqGF4U?TV+2Prv=#<9PqE>$yCrgL7dTOw- zNa!7`4IpK3dn)@Bd*Q9(o=Cv^`QJ}AS^Uah)<7P{DOM4SZ~t8=dDhumED=Vz@pZYp zIfORAz*M+-=`rWwy#bI~f-!Edd2=Wf`W-iMJcO3O`ax5T0$&=kHA`69e|8!yVG|$! z5LoSAHUJHd@c|$T7mRr~bi)c`@8s|cBG+k=bAkzA;*MyZ%e6zT9+o!da4~F2Kt!)` zJ1qa97n{e?4+;w=LLPN1**ND?MG=cKPU-=Cr(*%&2ks@Gfr9_!M5FU>%0o*7N8zS1&Epc>;rQfT z2VwOCrULVg1f_oev6QaY9RyKefL;s$EWq^<2}OAvu8w#hEI;DR!6Z_7N0&){>Tb_` zpc9JP{%@AvNqx8ZPp-k7+sx-etT2KZBXttk*qAw@=mRjf4Z{wKuY8uqxP@-2Apj6g zY|PGLQkZlE5bB$+lxSth4teA1lMRRe0G8h|C19doE)x_qY^Mkpoco|fvrcph08C+T zIQIWT289AXg!Trc$}0d_#C%$GdB!g=v3kF~HRX3n6AusuC zeAWl}o)y1MhTi0w{+ChPL21jk5YV^eq1%H3+jfhVOhL}cFgaYzJ5ftVQT5AagD7XxBqa|gSH*XJ1U&tT}c$Fn(c)@{P!R@S}zAW7iboN%r z?P2K#SSt1zC+^bl=Uw#p93yr4qL$*t`tEe^+u;#+FhJRz;or8WIkA=$>?|thx)5X4 zC)*080BK26a}u~0zmmqPd^JFx_o007*bS6@ca*Lc=kvCQiY(8;ao>jSEH~RK^^1an z<|TG012n)%4=t#qdP{ukJ9@L03=ml(%dYLC(NRzWhh1Yta8aAM`#UW8InDrM62Lsy zJi%lKkwf?_`qn&7sn2=^k0@k54dq@Y zxCZd8Uj>Svz!N^-zvsG~&w0u1I0F)n;Jj=gL;*Gch-B=u30$X!Ahd5QGoVi>;Is5J z^Zt0K6>IQ`W}v)&7eHQOlF}n|PXFe725@4;8pxx3;l4FjDA>}c?MN{CgwEo8PQyg4 zSmJ+7{V(0&X$96Sp{1u?2C*R-5L68K|2|f%gid|>wIx}P;njPrLP2UHXzRKtfSZiH z;Re{X)J5@T5?LJzzV!^if&-J?pl}j+htM~ZOh-yDNm_=az!L3F4TA!>A5)UB$4gSExPwJO#|KG8ctzj;H(TnbZ>vq7^*Z)@`Y4?rB;F_=%jZIp|1+Z zWND$6+Z59uYpTU1P*-Z3rAcJ#q@>mW77p$uoUcUA#bw_4rptzp(?u6d`po(Uu(;zI zScl;*EO5o-0bnjkHXF^!fs2yF0)#qK)_It!6~O)y+}l{Fbv0H^#p=~$G=&cm+K*%eH57U( zWg)}JJWV>lpg&m+8Ak70062w3yte;wZ~hj8l4^;LJyBGW>}ke@iCgWW)fdId3+Dx z@cNt!-Jtwh}7o6oEfYTd1IC5Zqw zx4T@yl>&+}0Vopgtib})GLUAbQQBunIroxmEIpG%03?!4lFKD$15C%N?@uLZfRlSY zmP9Otdpj5HVKf%z4RCU=rVuDji{yg>F~EO(a7Wbpqv%bkzjkXR1Hlf_e_T6Y8L>2v zi8o9CU+i%2QP1sg+Iu+c@Ipxrpzhdohy-c!Ne`3 z70eCrqP#R14jHaEZaOQ&4X`|bOMK%$5k`~Y2H@`GCC59%Vkt0Xd$@eZS+db3%9wQ5 zu8ihnXrS2>wRsb#t}JwDbl=}BUN4&#$?!OigMLxF5jvI~elV8|pErX^>%I%Bq_TLx z2q{sJjeQ@6u4!eXMPC3koNtl7Q)`_f6$SW<4gLom_`%Xi-^B)R**LjO1MK>yiN@h* zu%-eUV84yViC5pGT@@gf(0b^e(g>4&8)g7V|z*MYi*)I)SkyCp&T7TRpyqBEvaE5L)^%ZoGIXpk?r}5e@7+pn%QgjqHF^ zC{R$M8)~FV*Yuu%7;uJTm`_|Iyz7Ho2dVPXH;Z9h(0>JE!yy(PukT-pV-&#X_>|Bx zySKbpl`t$BPA$8H7H&WIsY!mTldhXp6yP)?3U@`s2Vn4A1HipLy??=QD3o}pov3EX zb$W<3HG}`!(@=m5`^^q0HlCYZg=n-6kQN16hk6Y_(~0X?qiU736wL7Q2Ny*&lZY(z zhRF`c-BB5lQ!O9tOFMux#w6#I!NtLnYiR(}m~wp4yBoegE$4HmgsTsHQ^k&x6nYPx zoo40pX3051Sz}_FxOsGlC@-lRAm0zaBw*N!&#Dy-zyShwEVHC1@MQSV5_gYX##gL` zltcT4t^xL5BVF2A9lb4-e*%r;X3jh*2J?s{!^VC`cd?YW4 zju{9)rH}DnRJml0054$p##>pfoUA04#63Gpj)aiv6jBGkjH#v*&PRdt0}iy(Bzo9L z!|i@mbD9E%`*3smU^)eq8{pJvP83c8l4s^C$q*vi5foC{MtmGQK@H%4@5x*pC{8I< z6l7!XP0J=;4+-qFra;8)7$G*zT9-oa5w1%TFrF+b_DQL}4IawV?aPDx;K@_{s15(OCG zK;zWRL{y4tfV-9FizwW&M>?$+b~c4e(sz^(EpgoWvaYoZvUjOO0Mf}GUyf!{#89yS zFqS^=WSDFp059>Sa-s&9hmM<9(c$xwS_7QIyskWmaiL) zU-2yf6bJW;@4ID`&ylgCYsC!%l_a)9_MA3cS|GIKkdj%a8pM*=xTtjWmQg)wKk?8K zD+li`XsX*1g$~D)$BR+G0W*?;BOg92l%vkxn(EE*91dVB+Na{dEz^MebU>(GMyjvT zmf_-`*2K3NlSrMg;KvV;FOUt?!AqqKFq@AnL3@Etnc+jQ00K#WIYF{GC1eO~(ESFBVm71kJUo6g- zEV(n5(6h$0|Ab~vtV-y>F?nsUjnz?h17GHCuN39pv{}_#Hig{GF~ChOtjKw22Ux-y zvO{gL9x|MSYZ*eesW$;c$NE_4%Ha(FG(DGV>5Up(P`vZDYNM5beL{v>+KPe%db|bV zN2Hd#gg^30)r+Jy-^|<;mSh}m;yZCTKamJa7llI#U6MXDEd$V)DOg%EB1u2J^&=dI zPH+?A0Zn>GcOKJe>xSsLT47;R@40KC>w%a06>+(rG~prSlW9rfb(Sk?fF)p z7n3S^>H7(tEUheUHsnQ#`y^olAn1ZyqQjV>9QtI3cq*|b zp+h=jznbf`jog?ppB$tblD>jRWd*Xyn2HNZ691uwzK`SEcv1N219y~`02uyQ44940 z9qmgmaXa3YI6_o9Ml)B34 z=5rSG-hK2)Y;!T}02(H1^EpI^QTozmlT+>xOCtTiSO+4r1OVJa0q*sAGNLHR#+ON@ zaZBkAsonW9sn8^zaz|6ZmT6-iw%-G*yrBVjnFN6XX>V?Zlfzhf!=a^2VHw{J9RU|j z0bpra12819gJ^Un8v!s?IOgM2t)DEa z(Gh^~;ToPA#fs$;?XI^TPafY`)8W^4H-tt+QbD-1H+k?bT;m_UC@yWuy<@j*#KY`V z`cgD1mk!@T`=my?TG-yXb-2%=rHq7MQ6Cluk@*gszZIvw;Uu#3Q(cE|sRral4t}ML`})B6-@P2q5~&yF5Ev6ai%I5w+7lC&7Jv zmQ)Qu44|K-<3MlP-m$v#79n8xJsnIsw%6R)VM0&R3GCDl+u8HYsBK7Q)G*>M@YR6v1Pa``wS6U<=yV9Do)Mx`lv+;!st*nY|0azUP= z$rR>vFKZMEQ2@svI(6ktrKwH}e(X>Hr$5q~U?*0a0xrO=>m}b4xM()OQ@$HuuzhF= zjxYJ10LAt-z=`hyfbFtL11x-R_CC=R1r`}_c>^$M9xOqW@K2ic$6zgk%vzrZ!15Lc zvK{uh1DHf7KD&1$(m$VjbLR@TC-G1>DvwC5N|GeqJr|*dS!oZU0hs;iVV_me4Up|P zTP=Psh#cP8NwzAa4RFDR;%>4r^=5!%gEwGh9kOevB^{}f${+*rzT9coiF;b<5E{jq zji_s+(3y%30I*)>qM|cXQ3E)@gE1c=UKLt1i!o7%T;xtb^7t{CHJdcR6sW$#*zOdw zRTTwrhygDw5IS-5-CJHUkbmNF`3D%HplGt7q0ls+_YIsim?V}?Rk@|o^?AppDR`qs zg##7i(oDi|G*|_Euw-|@L89uUn^Xl9KpKc#%@RPSoXj*YP{?lB>lFFsi5aYPuteRz zJg!hv9Y%D8q^IAY1y#dcj61##>F8PNb@%-2=p27r114@gS}kOF*N{n7wX z%j^Lu6abz`^>ul)0jQZCP+~NIu=={ZVE_oL_dWqYDp3ZQ^iyu%Li>`y=*xUXz^514 z1pqEctnoeEemYJAxU<-Xm-a`RylsEnBT21u-{)|R1rw{1duq*+kAUA#>N$AyT}K8> z-u_<^HHBo!2g24#IY%r>l_%lmBy8etoQV50I`^8C0qLpqVnX`KSz}|sQ#FY!NcZZF zjP(_P>KzCYbH+NI0H<2)Il@QN;CE6HeY);9GyA*-zAoeA>ZsKn$4aNQ$yQLG1gY64gE}GH;ODiOyNpO{&nkCe_V7dvQLev1RItYzU zgw<=uTP+DIr-*C~>1WBj`E&x4Xd|fBOVgqhG2Z2c*(1?&WOC0SCAwr#7Gf(QMZetm zYJgNCP3N5qwLjVbXd`8C)=>6N`_y+)7`;#d^B9KTO(u6-c1Bs^Q^mmafEjpc3Oh5G z;?~SkbOX5kA#bOONsp*oY?pl+z|1gJU`8Qz=Q}@r)&Wm+u;V#^QR4_8p(|5LhL~hG z*3|b3BQ_(aK^x!;nP>INz7F?z@rXgmAZPZG+lOF&L+m8iSjmESU|xWuGPFb?6qvU_ z#Mo4cSPGrgt3;=wlk#k_1psb+UJBYMBxkMU1#rhP)Ye!RfVkZ2L&gbzA#q_iFE!{m zU{w@|@=`-k2q%N%lZ{J~I)?pR25wtSjWqz7C)-;5H#Ii%tSFE@Z%TTK?&a~cV(UA@ zi2g=yxBe}kF40vw{1rNczx5;f6=66g66D=1L$Dd|f~;YEa~ zMMnl)P->{gq5-%c$E3W&;S`3V`6Ms#fM;eTo(2ZR0_NsK0wtL3Ez$jb7*sN-e!2rD zsfq8)V_X7IOj9%SgdI+9w+B(Kvfhd)!xvl4BT+O3H0=Y!C{gB{hr(+P)Vy=z4uqOmlK!SInnRKYcFcItgTwblRjz zgbu*uF5ltM4{zg$<2z?@uYrep6@jJonR^2KIacu!Y87c7#G$w3j>Kt6-T*A+@7^PB z7sUB?3MYIM-F(yPnI!{+S~;9SI;&mZ2H-(A|lx5z3jpow-RQ(DpUX&Q^Gov3T)IT)yNADzffMT0i8Q{tbc|)SekzmS@?MT z^MX!pgs?46^5P^sn^U|$jD=18Nl#PoqD4MSRpyw`cK&b+w1Sp8Ku1u?JZ5;@)y>Und@n zN&e#j){X$E#r1XXRWhJZ^nkE}h=<2~-8WJNfbKoOl8@`sn6G0vV^R)hz*Yx98uRtE z1Lv+h5O&}=fUl<=@Ei|>9r%AMUr#&mc#Q|b4!p3_*V7L5Hso?d4}={^!@iz&;LYbA z2s_}jzMgh?7j|Ix8}0EfVgsZdcmc5o!VbK1`2RI_cG-5DFcf~zaMG2eT^&u@bQqm` zg}#lnG2qjeyUqo+{v~6;w%Xkftm@J6)$)P2_Nv|e@Xhk!tNG!ZQ<_GR8)b4)ZlLzWBKXBPqyZeDJPpiZHzzU7p-4E;`tHbhv#{$&u ze)yijtPb--ysD%^M)Ovz#Pjz6xUQ+)@*zF|-e%>d2xd4i=QZu}q;3 zw?>Mmb~A<^^i_vhgQBK(E7EZVY^6DOfJo%A09K46jSXPMm^>E1%o=HI05dCj41hgN zI7b>cfQ?LbSjMq;sdo1?`<3c2PxElP+TGLKBB{eNE;b%3yd#ZGB(pbpEFBWePR_h( z%3x-a$lalD!}ttSi#eJLWyUQq=201Z1sft2yZBul@mt(75UYIv_y-t4p%0s^v}0u4 zEHnoVO%D{kBF70o>7b$9*z8nOq~bp~#HrPyw8-U1+&d?>$h z8Oulxh#lUxlEVbZpjZI&OD2%v?ESfpLJ&tX~0Hcox9BrNQOby_-u44>|H1wACYZnq@2y*4 z>eAY4N@pMx>&kM0)9caOBFTLyojyK-Q|a{R-i_Q^S)YP62U!0kIcIkXCa^@>x&^j1 zn~JwqdU^knrIf%FyPMK4;K4zw>6>7ZdyRul=`|3ZN-L)~+LD_~$=Yj5p8_E`2t4DU zMRHF^Ss%izv;n8mmq3uxYaBEOSZk$hqYXG74NSn+EimnCZvrwxxrsl@9nxzRZuc~0 zSewh(jlW4WLi0@|ZfqVrO{App=q^9hdGiEVY|50Uz-~X>9!m$ThZ3i)nggcPdn9Lf zP+cP6z0CMaS56ss32ZpmUUiGKu%5BmBBfyhJOH<|#j@C%70m(G$Ai3s58(uO5cjUl)gO}b_|o|Ah{7~6Rf}q*t!904Rh^nrEhgx;8_Y< zBv)Ds@+$o;ORO0Xpvm$m)sbD$4d;_-y}W(GQ*@fNa@#-6SF2(c3|Yt8^%z*TZuBv<-_rymbeJq26mYt7;B6o&mp?rm9ieh4`Lnjhsuu9l3YXfYkq z8q1)(O!?8asIbWa$DOYGWfFZEjj4lP47~XmVaST&GdQqk<-(BiHE4`U>n%F)4&!A| zPPrCB+&?UXs6}Sbuh=Ku8bYQ>*k?8k0XF;S1M*rv&4_0zOD6oa-uDCvc?q*}ZPw7s zRFNZev2r~`(on)-H*WIhyI?VL0Q6er%TRW2L{yjE+t3tGL+4dua8Pn4Yh)z{HFTCR zMmB(lS*IA z%G$Js&RhSsQbkMfVc}FmAvcLO0JXSeY3S+JX#fsGDPfap=_Vc6G7{BWDabg8Ll}dD zhF+G4;Ll!7j7*X4ehqSqt+X(Bl64GCQ;Pr0mbTJjR*Nf+T2;|+fNYhNMD;X#O&ur# znIalG)1?er{0D&jN)27pr2yiOl{EB}E&MyvLLMD;aV+18GcLx*3l(dxB*e&TUj;OSSl z)rV+x53CdFr&-w@l~y03bwOET7j1|@YAFVplc`*PxztgO*(aLr+{O8L0jcVFQ zL*Jv7&20^Z+$8!mt6#D>ZCCXIw+;Z)9G>oDrJfn)59U#sy78U#7#UT40Q`jAaz#ym zP7GogrD%q?hNgE(d|vF2CPeGuoUw*l<a*rhQszneUR8B7{Ed zmi=={OA%Uo+Yh3Y-4su~66Gq=C8tG*l#)o7oR&yy?^_7B$5e{jyFd|=+V20l+miI-svLNA{~#J zwMZn8tTgLpbbA8HN^9>XQrbtcv{qHfwMcqublSVQrSEm}&R5nc1spXe@0dLLV?WV8 zI54e!bVNJF;n6+-?CjB@Grt)uI<}WW)>*t(nqwpW1fE;09^XqqCdb#9Cja~AmoNVT DOaU8} literal 139210 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 c`}Hc_2t=AFO}@N size) + return JS_ThrowRangeError(ctx, "array buffer overflow"); + flags = 0; + if (JS_ToBool(ctx, argv[3])) + flags |= JS_READ_OBJ_REFERENCE; + obj = JS_ReadObject(ctx, buf + pos, len, flags); + return obj; +} + +static JSValue js_bjson_write(JSContext *ctx, JSValue this_val, + int argc, JSValue *argv) +{ + size_t len; + uint8_t *buf; + JSValue array; + int flags; + + flags = 0; + if (JS_ToBool(ctx, argv[1])) + flags |= JS_WRITE_OBJ_REFERENCE; + buf = JS_WriteObject(ctx, &len, argv[0], flags); + if (!buf) + return JS_EXCEPTION; + array = JS_NewArrayBufferCopy(ctx, buf, len); + js_free(ctx, buf); + return array; +} + + +static const JSCFunctionListEntry js_bjson_funcs[] = { + JS_CFUNC_DEF("read", 4, js_bjson_read ), + JS_CFUNC_DEF("write", 2, js_bjson_write ), +}; + +static int js_bjson_init(JSContext *ctx, JSModuleDef *m) +{ + return JS_SetModuleExportList(ctx, m, js_bjson_funcs, + countof(js_bjson_funcs)); +} + +JSModuleDef *js_init_module_bjson(JSContext *ctx, const char *module_name) +{ + JSModuleDef *m; + m = JS_NewCModule(ctx, module_name, js_bjson_init); + if (!m) + return NULL; + JS_AddModuleExportList(ctx, m, js_bjson_funcs, countof(js_bjson_funcs)); + return m; +} diff --git a/quickjs-libc.h b/quickjs-libc.h index ad850a3..8917191 100644 --- a/quickjs-libc.h +++ b/quickjs-libc.h @@ -35,6 +35,7 @@ extern "C" { JSModuleDef *js_init_module_std(JSContext *ctx, const char *module_name); JSModuleDef *js_init_module_os(JSContext *ctx, const char *module_name); +JSModuleDef *js_init_module_bjson(JSContext *ctx, const char *module_name); void js_std_add_helpers(JSContext *ctx, int argc, char **argv); void js_std_loop(JSContext *ctx); JSValue js_std_await(JSContext *ctx, JSValue obj); diff --git a/repl.js b/repl.js index 3074819..7274654 100644 --- a/repl.js +++ b/repl.js @@ -24,9 +24,11 @@ */ import * as std from "std"; import * as os from "os"; +import * as bjson from "bjson"; (function(g) { - /* add 'os' and 'std' bindings */ + /* add 'bjson', 'os' and 'std' bindings */ + g.bjson = bjson; g.os = os; g.std = std; diff --git a/tests/bjson.c b/tests/bjson.c deleted file mode 100644 index efa10b3..0000000 --- a/tests/bjson.c +++ /dev/null @@ -1,96 +0,0 @@ -/* - * QuickJS: binary JSON module (test only) - * - * Copyright (c) 2017-2019 Fabrice Bellard - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#include "../quickjs-libc.h" -#include "../cutils.h" - -static JSValue js_bjson_read(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - uint8_t *buf; - uint64_t pos, len; - JSValue obj; - size_t size; - int flags; - - if (JS_ToIndex(ctx, &pos, argv[1])) - return JS_EXCEPTION; - if (JS_ToIndex(ctx, &len, argv[2])) - return JS_EXCEPTION; - buf = JS_GetArrayBuffer(ctx, &size, argv[0]); - if (!buf) - return JS_EXCEPTION; - if (pos + len > size) - return JS_ThrowRangeError(ctx, "array buffer overflow"); - flags = 0; - if (JS_ToBool(ctx, argv[3])) - flags |= JS_READ_OBJ_REFERENCE; - obj = JS_ReadObject(ctx, buf + pos, len, flags); - return obj; -} - -static JSValue js_bjson_write(JSContext *ctx, JSValue this_val, - int argc, JSValue *argv) -{ - size_t len; - uint8_t *buf; - JSValue array; - int flags; - - flags = 0; - if (JS_ToBool(ctx, argv[1])) - flags |= JS_WRITE_OBJ_REFERENCE; - buf = JS_WriteObject(ctx, &len, argv[0], flags); - if (!buf) - return JS_EXCEPTION; - array = JS_NewArrayBufferCopy(ctx, buf, len); - js_free(ctx, buf); - return array; -} - -static const JSCFunctionListEntry js_bjson_funcs[] = { - JS_CFUNC_DEF("read", 4, js_bjson_read ), - JS_CFUNC_DEF("write", 2, js_bjson_write ), -}; - -static int js_bjson_init(JSContext *ctx, JSModuleDef *m) -{ - return JS_SetModuleExportList(ctx, m, js_bjson_funcs, - countof(js_bjson_funcs)); -} - -#ifdef JS_SHARED_LIBRARY -#define JS_INIT_MODULE js_init_module -#else -#define JS_INIT_MODULE js_init_module_bjson -#endif - -JSModuleDef *JS_INIT_MODULE(JSContext *ctx, const char *module_name) -{ - JSModuleDef *m; - m = JS_NewCModule(ctx, module_name, js_bjson_init); - if (!m) - return NULL; - JS_AddModuleExportList(ctx, m, js_bjson_funcs, countof(js_bjson_funcs)); - return m; -} diff --git a/tests/test_bjson.js b/tests/test_bjson.js index 25e1090..000d1b8 100644 --- a/tests/test_bjson.js +++ b/tests/test_bjson.js @@ -1,4 +1,4 @@ -import * as bjson from "./bjson.so"; +import * as bjson from "bjson"; function assert(actual, expected, message) { if (arguments.length == 1)