@wasm-audio-decoders/opus-ml
Version:
Web Assembly streaming Opus decoder with Machine Learning enhancements
161 lines • 4.1 MB
JavaScript
/* Copyright 2021-2025 Ethan Halsall. This file is part of wasm-audio-decoders. https://github.com/eshaz/wasm-audio-decoders */
var M,i;M=this,i=function(M,i){const j=(M,i=4294967295,j=79764919)=>{const z=new Int32Array(256);let f,R,r,e=i;for(f=0;f<256;f++){for(r=f<<24,R=8;R>0;--R)r=2147483648&r?r<<1^j:r<<1;z[f]=r}for(f=0;f<M.length;f++)e=e<<8^z[255&(e>>24^M[f])];return e},z=(M,i=j)=>{const z=M=>new Uint8Array(M.length/2).map(((i,j)=>parseInt(M.substring(2*j,2*(j+1)),16))),f=M=>z(M)[0],R=new Map;[,8364,,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,,381,,,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,,382,376].forEach(((M,i)=>R.set(M,i)));const r=new Uint8Array(M.length);let e,n,a,c=!1,x=0,g=42,_=M.length>13&&"dynEncode"===M.substring(0,9),b=0;_&&(b=11,n=f(M.substring(9,b)),n<=1&&(b+=2,g=f(M.substring(11,b))),1===n&&(b+=8,a=(M=>new DataView(z(M).buffer).getInt32(0,!0))(M.substring(13,b))));const $=256-g;for(let j=b;j<M.length;j++)if(e=M.charCodeAt(j),61!==e||c){if(92===e&&j<M.length-5&&_){const i=M.charCodeAt(j+1);117!==i&&85!==i||(e=parseInt(M.substring(j+2,j+6),16),j+=5)}if(e>255){const M=R.get(e);M&&(e=M+127)}c&&(c=!1,e-=64),r[x++]=e<g&&e>0?e+$:e-g}else c=!0;const h=r.subarray(0,x);if(_&&1===n){const M=i(h);if(M!==a){const i="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",i+"\n","Expected: "+a+"; Got: "+M+"\n","Visit https://github.com/eshaz/simple-yenc for more information"),Error(i)}}return h};function f(){const M=Uint8Array,i=Float32Array;f.M||Object.defineProperties(f,{M:{value:new WeakMap},R:{value(M,i){f.M.set(M,Promise.resolve(i))}},_:{value(M,i){let j=f.M.get(M);return j||(i?j=WebAssembly.compile(z(i)):(i=M.$,j=f.I(i).then((M=>WebAssembly.compile(M)))),f.M.set(M,j)),j}},L:{value(M,j){let z=new i(j),f=0,R=0;for(;f<M.length;)z.set(M[f],R),R+=M[f++].length;return z}},J:{value:(M,i,j,z,f)=>({T:M,channelData:i,samplesDecoded:j,sampleRate:z,bitDepth:f})},v:{value(M,i,j,z,R,r){let e,n,a=[];for(e=0;e<j;e++){const M=[];for(n=0;n<i.length;)M.push(i[n++][e]||[]);a.push(f.L(M,z))}return f.J(M,a,z,R,r)}},I:{value(i){return i=z(i),new Promise((j=>{const z=String.raw`dynEncode012804c7886d()((()>+*§§)§,§§§§)§+§§§)§+.-()(*)-+)(.7*§)i¸¸,3§(i¸¸,3/G+.¡*(,(,3+)2å:-),§H(P*DI*H(P*@I++hH)H*r,hH(H(P*<J,i)^*<H,H(P*4U((I-H(H*i0J,^*DH+H-H*I+H,I*4)33H(H*H)^*DH(H+H)^*@H+i§H)i§3æ*).§K(iHI/+§H,iHn,§H+i(H+i(rCJ0I,H*I-+hH,,hH(H-V)(i)J.H.W)(i)c)(H,i)I,H-i*I-4)33i(I.*hH(V)(H+n5(H(i*I-i(I,i)I.+hH,i*J+iHn,hi(I-i*I,+hH,H/H-c)(H,iFn,hi(I,+hH,H0n5-H*V)(J(,hH/H(i)J(H(V)(J(i)c)(H)H(i)H,c)(3H*i*I*H,i)I,4(3(-H(H,W)(H-I-H,i*I,4)3(3(3H,H-I1H+I,H.i)H1V)(J.i(v5(33H.-H(H,i(c)(H,i*I,4)333)-§i*I*+§H*iHn,hi73H,H(i)8(H+J+H)P*(H*V)(J-r,§H)P*,H.i)H+H,i)V)(-H*i*I*H+i)I+H-H.I.H,H-i)I,4)333Ã+)-§iø7i(^*(iü7I,*h+hH+iDn,h*hilI+i)I,+hH+,hH+iô7H,c)(i)H+i´8W)(H,I,H+i*I+4)-+hH(H)8*J-i(p5.*h*h*hH-i')u,hH(P*(J+,hH(P*0J,H(P*,n50H+H,H-b((3H(P*0i)I.4)3H-i¨*n5*H-iÅ*s,hi73H-i)J+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)J+i¸7V)(H(H+iø7V)(8(J/H(P*0J+s,hi73H+H,H.J,I.H(P*(m5(H.H(P*,s5.+hH,m5*H(P*(J.H+H.H+H/U((b((H(H(P*0i)J+^*0H,i)I,4(3(3H(H.^*03H-i¨*o5)33i(73(3(3-H,H+i)c)(H,i*I,H+i)I+4)33i)I-3H-3!2)0§K(i2J,L(H,H(^*(H,H*^*4H,i(^*0H,i(^*DH,j(_*<H,H)P*(^*,H,H+P*(^*8*h*h+hH,i)8(I3i§I**h*h*h*h*h*h*hH,i*8(6+(),03H,j(_*@i*I-H,P*<J.i,J(H,P*8J/s50H,H.i+J0^*<i¦I*H.H,P*4J1J.U(*H.U((J2i')o5/H.U()I.H,H(^*<H0H1U((H.i0J.i§i0i')o5/H/H.H2J*H(J.q50H,P*0J/H*I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0H(H1U((b((H/i)I/H(i)I(H*i)I*4(3(3H,H.^*<H,H-^*04*3iØ1U((5+i(I(i¨7i1^*(i$6iè1^*(i°7iè6^*(i¬7iÈ6^*(+hH(iÈ*n,hiÈ*I(+hH(i¨,n,hi¨,I(+hH(iØ,n,hiØ,I(+hH(iè,o,hH,i-H(i0c)(H(i*I(4)33iè1i1H,i-iÈ*8)Bi(I(+hH(ido,hH,i-H(i-c)(H(i*I(4)33iÈ6iè6H,i-iF8)BiØ1i)b((41-H,i-H(i/c)(H(i*I(4)3(3(-H,i-H(i1c)(H(i*I(4)3(3(-H,i-H(i0c)(H(i*I(4)3(3(3H,H/^*0H,H(^*<3i(I*4*3H,H,i¸)^*TH,H,iø-^*PH,H,iX^*LH,H,i(^*HH,i-8(I(H,i-8(I-i¥I*H,i,8(I.H(iErH-iEr5)H(i©*I1H-i)I0i(i;H.i,J(i(H(i(rCJ(J*H*i;sCI*i¨1I-H(I/+hH/,hH,i-H-V)(i)H,i+8(c)(H/i)I/H-i*I-H*i)I*4)-H(i)i¨1I/+hH(H*o,hH,i-H/V)(i)i(c)(H/i*I/H(i)I(4)33i¤I*H,iø-H,i¸)H,i-i;8)5+H0H1I2i(I-+hH-H2p,hH,H,iP8*J*i(p5-H*i7u,hH,i-H-i)H*c)(H-i)I-4*3i(I/i+I.i+I(*h*h*hH*i86*(*)3H-m,hi£I*403H-i)H,W)-I/i*I(4)3i3I.i/I(3H2H,H(8(H.J(H-J.p,hi¢I*4.3H,i-H-i)I*+hH(,hH*H/c)(H*i*I*H(i)I(4)-H.I-4+3(3(33H,W)1m,hiI*4,3H,iø-H,i¸)H,i-H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-o5,3H,i(H,iXH,i-H1i)H08)J(,hi I*H(i(p5,H0H,V)H,V)o5,3H,H,iPH,iH8+I*4+3(3(3H,i$6i¬78+I*3H*H3m5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2L(H-33Á)+(i¨03b+(,(-(.(/(0(1(2(3(5(7(9(;(?(C(G(K(S([(c(k({(((«(Ë(ë((*)(iø03O)()()()(*(*(*(*(+(+(+(+(,(,(,(,(-(-(-(-(i¨13M8(9(:(((0(/(1(.(2(-(3(,(4(+(5(*(6()(7(T7*S7US0U `;f._(f,z).then((M=>WebAssembly.instantiate(M,{}))).then((({exports:z})=>{const f=new Map(Object.entries(z)),R=f.get("puff"),r=f.get("memory").buffer,e=new M(r),n=new DataView(r);let a=f.get("__heap_base");const c=i.length,x=a;a+=4,n.setInt32(x,c,!0);const g=a;a+=c,e.set(i,g);const _=a;a+=4,n.setInt32(_,e.byteLength-a,!0),R(a,_,g,x),j(e.slice(a,a+n.getInt32(_,!0)))}))}))}}}),Object.defineProperty(this,"$",{enumerable:!0,get:()=>this.p}),this.K=(M,i,j)=>{let z=[],f=0;for(;f<i;)z.push(M.slice(f*j,f++*j+j));return z},this.N=(M,i,j=!0)=>{const z=this.p.q(i.BYTES_PER_ELEMENT*M);return j&&this.G.add(z),{Z:z,W:M,t:new i(this.p.Y,z,M)}},this.free=()=>{this.G.forEach((M=>{this.p.free(M)})),this.G.clear()},this.O=M=>{const i=[],j=new Uint8Array(this.p.Y);for(let z=j[M];0!==z;z=j[++M])i.push(z);return String.fromCharCode.apply(null,i)},this.V=(M,i,j,z,f,R)=>{M.push({message:i,frameLength:j,frameNumber:z,inputBytes:f,outputSamples:R})},this.instantiate=(M,i)=>(i&&f.R(M,i),this.p=new M(f).instantiate(),this.G=new Set,this.p.ready.then((()=>this)))}class R extends((()=>globalThis.Worker||i)()){constructor(M,i,j,z){f.M||new f;let R=f.M.get(j);if(!R){let M,i="text/javascript",r=`'use strict';(${""+((M,i,j)=>{let z,f,R=new Promise((M=>{f=M}));self.onmessage=({data:{id:r,command:e,data:n}})=>{let a,c=R,x={id:r};"init"===e?(Object.defineProperties(M,{X:{value:i},S:{value:j},module:{value:n.module},U:{value:!0}}),z=new M(n.options),f()):"free"===e?z.free():"ready"===e?c=c.then((()=>z.ready)):"reset"===e?c=c.then((()=>z.reset())):(Object.assign(x,z[e](Array.isArray(n)?n.map((M=>new Uint8Array(M))):new Uint8Array(n))),a=x.channelData?x.channelData.map((M=>M.buffer)):[]),c.then((()=>self.postMessage(x,a)))}})})(${j}, ${f}, ${z})`;try{M=void 0!==process.versions.node}catch{}R=M?`data:${i};base64,${Buffer.from(r).toString("base64")}`:URL.createObjectURL(new Blob([r],{type:i})),f.M.set(j,R)}super(R,{name:i}),this.C=Number.MIN_SAFE_INTEGER,this.H=new Map,this.onmessage=({data:M})=>{const{id:i,...j}=M;this.H.get(i)(j),this.H.delete(i)},new z(f)._().then((i=>{this.D("init",{module:i,options:M})}))}async D(M,i){return new Promise((j=>{this.postMessage({command:M,id:this.C,data:i}),this.H.set(this.C++,j)}))}get ready(){return this.D("ready")}async free(){await this.D("free").finally((()=>{this.terminate()}))}async reset(){await this.D("reset")}}const r=(M,i)=>{Object.defineProperty(M,"name",{value:i})};function e(M){function i(){}function j(M){throw M}for(var z,f,R=new TextDecoder,r=(M,i)=>{if(!M)return"";for(var j=M+i,f=M;!(f>=j)&&z[f];)++f;return R.decode(z.subarray(M,f))},n={},a=new Uint8Array(123),c=25;c>=0;--c)a[48+c]=52+c,a[65+c]=c,a[97+c]=26+c;a[43]=62,a[47]=63;var x,g,_,b,$,h,d={a:(M,i,z,f)=>j(`Assertion failed: ${r(M)}, at: `+[i?r(i):"unknown filename",z,f?r(f):"unknown function"]),d:()=>j(""),c(){},e(M,i){if(n[M]&&(clearTimeout(n[M].id),delete n[M]),!i)return 0;var j=setTimeout((()=>{delete n[M],h(M,performance.now())}),i);return n[M]={id:j,B:i},0},f:M=>(z.length,!1),b(M){throw`exit(${M})`}};e.$||Object.defineProperty(e,"$",{get:()=>String.raw`dynEncode01ebb7ceef19?z°H,ÿ¯ÉjÃTNË7¨£¦¾ÞÖþD{öýü»N³³ê4@xKaa+ë§=})ûíÞHÏ|ÓUHzx{B=}öww¬ÑXæ·òmÔ庿CÁzI @=}·ßÔ.U©÷èY@ÁFÊ8 ±¯±
@ÊZ¿=M)È:ónßPh*OU#Î÷³GpO¤I^îÊ"Lu¶vÍæë¹àKférèT÷Ë×=}$*¿5DèæzäFcÊæ2ûA=}êÒñïw¡ ´$×'èóNxë{.u=}e¬sµOWå5ÞdN³ÞOwR͵֮öæaÕ¤Ë!Y¤nVÙÍqf£Í)dkP ©ÜY Ë\D¥3= ¶Yò´hd½Ñ¦¶Ù¼Í«<ORy4 ]Á2´Ãf·ZQ(IQ
ø®Þ y"âé}EqùÄÖÕ@ÀÎBàÕÀÞ[¨£yO¶²Õ8êÕº"4}Ãá
¿80s! EHï4@@èØ-;cøºO=M,ìÔ¤=}á[ÆsO O+ Ó̪ã·ÿ)ÓV м-¥à\ ÀPg
/2èvkkea}°ôwò0ú÷ÓÀi»Q'úBÝÕ£s¦À½"y
úÒúËøFzF=}|Q9-ëôÏ01j iÁý3?í°,\µÀ
PQD)~77{í°Ý(·= jªµD»iÂ0Í7%4ëxËðí?Rì°ý1º¶ïÛ¢c°e§eíIÐܺS¢qT= 3=}3 S¸-uTT>üüdÿ]/ýèqï6=}SþV±:lþnùþëÒÓë|©k² õï .3íXDe¦_=}3Kÿ]ÿ&ÿý=}3D-õkËçlN'§"b6
=MNúfæË
eÅȧ\èÔ®¬öÛg¡¬?m¨ õ
×ö|{+Ñü¿4æüÛ×ÚÒjüVUÂëE¬SIë=MÎ<óvLreæA=MÎ×¢à)|×û¨ÕÂäÏ =}É DdKeÍ©nßrºy
2çåºB*Ò£1yÖBg0Jï
)¢t~5Ïú/þ"g'§q£¸í,ÿ´ZÀ<ÛÌÓ@áàgÒñE¸·UýÓØÏúÎUÌ:ð5*«Ø¯
Ø}òxv¨ÕQQ©wù)çúJ3uù¤j([ßË\ç'Ö@Ý2¦aËÊùGPQF4q4Á Cá] =}3/U¿X=M =}hÓá¦5¨Ð®M¿æFÉLR{I»0 ×À~HNddyxRçLNTÈwj¦¨ÜÊ)pq õ×f(cÚX¶ç/§Û\G¹@ºE¥QÆÙR¸"gâ$%¡UÒ'f_ÿaGG4rZ êG+}0I!j¢eó6E=Mú*]JeD
ù¡ #E±ò
èòºªO í±òªÉÑ;µÕ q=}qTÈÔfÿ<ÇäàÊ$åëqIÚqYI¿B5IÑ<3?ÚUÿã+SàøøÛ ³;@ÈÄ[ÀtµHqþuÏÁ¿/vÝ¢¿<26¾^P·Izbrò£âccüÓàX:ä¶)å(ßf£&\ &Båh8¥¤ bföÕÕ !ÝÿBV3;DKz}ÜIkùS³#$SNõ££þB,H!.»bø^p¬Ò,¦ÿ·MüÓÄ ß0ÚC(»è^íÉxÕ=}ôÁ)¢#=}*¶ ¨Ýg;·{=MYöYÊ©!ÆÂ3í«øUÂÁáùÁ<+AõzhGº%h2¿®#ïi jóßY¬ådXÃÀï¿fT|PªÉ 0Qqq$µUÁþ½¥;«uг9é.q϶QÍÐ8*ýa&ä£þ;RÅÓé1¿ò±)óÇõS« %¡t¿î¥ÒDÓêÖÖAªZäÄ¢*iX?7lAíÐw û¬Àú¼ÿ·AØ~(:Fa;D×WÀâ· ¬ìe~£Aæa£Ã
þñÉTË ~ñø'TK= ½«M®«#eñ»S|ò8V[%ZÌq=Mw"\CÑÀé³0LyÙ/9§ü·yNH$ë6ò¥jÿ$* 7²\ß\Ô«ËSu'ýÛGoéò&⦼×r ÌþÐk]6·E"ì@Ëü_¨OjÂeHôHkpÃs5p·¢=}þdÝ©Bý3]Z£1d¡çñÒá(}xIü³r6Øòà,±ÆòêÃ?þÙ] dåïwW19 |N©Ú«Ë}dÉÚ.6:£Íè§²¦oÑîëôÂR=MvÕQbE,a}gß
)ªwήd¡¯è¼GA²Ø¤ªJù
>*]Û\©àîQaàn (I⸾c®zÜ{
ûÙ³NÍæbrUw"{PA°hÌP+òac»"Y+û"´ëë9!7µ"9µB{VÀr©Í]Ô2©aK~IT}!tÍþçalò2Àõ¹|.AZ«÷a qÿTéøA£B1we°àêÑÂ~{ÿÄ¿®Ì¨§7üÁî=MäÂãÇëé¸LLÍS&KËËr'»-ÊÀ+Ê¿-Dù
=}øu»9ñ¹é¹îÞgJ¾Áp/\TÿôV»]¯{d2YýBZ÷Òî¬(&Áî^\CÚzv#YMëfÄ>¼CF3ÆO1l5Ä?e~
-é¿Ò08¢4!Ö*Ð;n*¿kÊÀkD&ÐËäá@J¬ÜmÒäO:À-cíÝ;ÃÒªèâzÿ°b]G¤tiÒ5o<þ,jcËÓî·nP|TüxgÔ«|^~Ë{·â>Eðêç1 ÑUSkAîæ°Êd^vS|= }ÙÊH7z£7á ²ySÚ¡ÔÐ?MdZP¨¿Ik}jE
<§ÂÙéÁc9Ë(rÀýÿñ¶ì,¢ø÷õúµ±<àÅçå#D«óÃÂ\"¹È·%bÑÇ\¹ø'r¯QR~[!dF²¹FRnRC"ù2]JþãEà K×Vý©æEºåE3±äEÎVÌ%JþÁÊ"ãEÃÜ yeÛ3Xa¾7x¹m]³W_h±*o= Ì<Øá¯y O)Fé~Ï÷:e(©´7ô Õ¢;Ñ$Ä´Õ0fÒñÊ@©éwÝ'¸ÎÃöè~é4·øål ùÎ)^4^Èq«¿7«óbåD¿>£ø\èQJ
8f$3GÐN
Bɽ_ÎO7T{vöÿ°i¤ÿ{4~þ¥6±·'N&¾éßG= Þ0¦¯::¾ã]ߨúR=d{o¦]Á®:¥áÖ÷é´p¯íu«ÝHIG3Íú6ÀrIUý+#Nmð9
å= Ä´»¢ÀÇBXpìNö§1¬zc)d;)Âvë^ÕB4ñ69R\À¤_bü=}¸]ºG'ÑIfä驼ÐÞË?sú¨æR?.¬ÔD!RÿÅEÿþ¼ÞwÉ=MzBsè2;øÕß{ÖÝ}*P7ñ£¤ÕóB°²÷µ¹4,Âô!7òO!8s9!~koG?×BÊ~á9Í
âzDc1[}´(*DKÄNf=}hý/±å!=}~=M0!Ìh;:mCd¯¯sþ#:N@Õ½= Ø5sä3:rçÅjöðÉhö§ækhúípe3ܶ{u"jîaÑíqk¨¡£9k3}³±ïz¤§FB8íiþ&ç£?á¡B$ÕÎJføÎyqX Þ'¹vd¬MÈyt;·êÇmsc[-Ó¥K$gl= Õ
KÇhmx×4²Kï×·1ØuºV-.Ùá=
uì·Õ8·ñDÔÄ6£uÜ«ûʲ>lÚtômDB3ñ¦! !I¬»¢ \ô¾6̧k ¨(¶¦|Ov6cuVbóìɳ3ñ=}% ~üâήðÃ{Þ@qxx;ó5[aFdúDç´O»mví¹ùgMhìÿú%KeýýôZPJëBbËJÝ"Q:I|]y¡µå2shد)Ï¡Zx?å2ø1e>fiW3]¯¬øù´$ÕØî§ûñÖJ f@÷ÈMÏyCî6kB°©f@w|1Ù@üBêeÛÓ²u7S¡è;ÎÄ©
xuKíâ~iü£»5IV¨zU¦w!Ànê_¯¨BÏëªëRàЦÙïNZ
#!ÜN½B>ûÚÎyæUÁ=}.
ì( bbeÖõ³rYä´FúK¢4Z0È =}uìsùèÀ& ©©tß[Lãþí鮡ÁxóØL"^Éù0?z2É»ØÈyP]÷³WP úÉ}üë(JÈw^ÏW^ì= Ó"s1UWþsñX¢Ìm ¥= ÜÙ98µôî"7kê·ï#8k*&ÎJ$ì®|ïÏ?Î¥QùäÌ= ;@è%ÐZåcoiør8¸nÌcË Xx¾å+,¨ AæÇµ¨x ùñ]=}é<Ð3¯7Ã}Xÿ1UáÐg¨Ý¿³zt>iM]¾æae6hT¬söÏ
Ù/¥%VnùC
µgï/|2¯/
«÷v!q°|[tN,ÄÄh®QV= Õ§â= µN×´JÙTàFÜ%uUÚÑU÷6ù¹ÕXXA6hFfø+~¥£üböÕ°¶´{=}§Ï=Mç¶´kÂ7>ÕUÅÁè´¼?ƵÆÁ» j+çú_½ûTPÊRúc~4Y\
xSZEH¸ÃG(Q¦oÖäZ1-!÷ëD±þMB}lùm
§PDt'm83Ëé.4 ø{YEÒÂl= P¨®ÌÅ::hõiÉcäh0|¿²@ëÁEã÷JTʶ-QvÍi}Qn{5ÎZí½ÀÂÿYªa= ´ÏÛpÇ=}:ì
÷n Ùhá±ÄMB?Ì/PÂi}þ.úÁQs}K¬*m ?'ù<|r4½v!=Má´Cíw!#×ï3ñ®Ìñ4=}hÒa¦× kg3¼ß(áÜ;ÄïUÎÏx¾k|¨²~4Á0ÇÉÞ¸ÍX²Æü´ÖÙÜf' fʰRwGÉ@ÕaÂÑ0ÛU°ôa£óÌN!Ö·tZ£Èó¼É«®ù§s4í|9ÅçÝgkÅ|½ø ¨ù:-i²)Âg̰i³ï¨\0çLƶéîD´[|ëøG¢.g»oj໿øî#Õ,Êi
:èFu©xLÑóÐI^xÅvbBNÎüv«pF-¸A»x¿är;ÉÐi]7µ«¼³6= t6;ËNä[Þ¤³ÛGj"O£2+Qù¤R;Ì XÌ[lcÕ-=}_o8nº?$ÏÎ_0#̳¸¿3W4?vz(Ǩ8ú JMÖÖu=}W×pujì¥Çܤ;÷ű½ÅØ6*}Øm@ä¡-lô¢uäÂdAæk¦+È0¯ÞXsçïIÍÃ3´Åö-5ùþ³&,çbÜÙM¦PkJï0÷åÜ£¸D ͯ¦ K·Ë ´dÁxîµÇæK^mqnUÚäA= NZ2¡_@4õuõËOîI{È=}14ÇÑièoñöëÜÀn©U ^ËܰYµS" F, KÞw]¨CLÁF¼5Ëïôx×}~½÷%{éZÛêjÝ3èU#JÇ̤Ç"¡¨õ)ÇRfL¤îÅÌÁ¯0kKÈiNA ½a= ôVè¶ÜQ±1Ctqß¾(+tP¬®A×¼ ëø¢ûf»óÉ·#¤Ã¾Hò9ïÛ=}OÛ»ùnDr¢ÔZ,¢ÔqݶÆSÉ1dXÏÆm¢[tyxåç&kR Í8Í-
¬5vìP0Wú.Ã,|µx8¬Û9<¦3µÃM³Ï*;k[Çó_"= ¸{keÿ<*ê×"ô'6¥oT9¦ô¾2Fgп ÐëLHÈ*By×juSûê$?Tµh]QzÆåý)ÜeçT9GȳüݹÜY½Gl= ÉL>9¬Î¶¥þ I@õ
- rB¹{«ÌNÂUµ¨¤%dÏzS¥øÎSy´^¦¡ÿ¸Ã9#yet8Ä%â´{>^Ó)$Ûñ¯]¼Æ-¾´e8uL@CWPxú"TgF2ή>Ác9ÎÆ§ÉqFV'ܸ¦²Ã9#y9Ác-îíFxêÄÙ_F¡@Ô?#£ccR^£<q»º:TT"èðk\X<È×Õ\þé4ý½kPÚ?¦vH!&ÀÑPOb·u¥&