From 10f45313752ec9742a82c1e97316945c2d9829c1 Mon Sep 17 00:00:00 2001 From: Murat <59137982+theMuwat@users.noreply.github.com> Date: Wed, 29 Nov 2023 18:25:05 +0300 Subject: [PATCH] Add files via upload --- node_modules/opusscript/LICENSE | 20 + node_modules/opusscript/README.md | 53 + node_modules/opusscript/build/COPYING.libopus | 44 + .../build/opusscript_native_nasm.js | 110 + .../build/opusscript_native_wasm.js | 77 + .../build/opusscript_native_wasm.wasm | Bin 0 -> 275582 bytes node_modules/opusscript/index.d.ts | 93 + node_modules/opusscript/index.js | 116 + node_modules/opusscript/package.json | 26 + node_modules/tweetnacl/AUTHORS.md | 27 + node_modules/tweetnacl/CHANGELOG.md | 283 ++ node_modules/tweetnacl/LICENSE | 24 + .../tweetnacl/PULL_REQUEST_TEMPLATE.md | 20 + node_modules/tweetnacl/README.md | 494 ++++ node_modules/tweetnacl/nacl-fast.js | 2391 +++++++++++++++++ node_modules/tweetnacl/nacl-fast.min.js | 1 + node_modules/tweetnacl/nacl.d.ts | 98 + node_modules/tweetnacl/nacl.js | 1178 ++++++++ node_modules/tweetnacl/nacl.min.js | 1 + node_modules/tweetnacl/package.json | 56 + node_modules/ws/LICENSE | 20 + node_modules/ws/README.md | 536 ++++ node_modules/ws/browser.js | 8 + node_modules/ws/index.js | 13 + node_modules/ws/lib/buffer-util.js | 131 + node_modules/ws/lib/constants.js | 12 + node_modules/ws/lib/event-target.js | 292 ++ node_modules/ws/lib/extension.js | 203 ++ node_modules/ws/lib/limiter.js | 55 + node_modules/ws/lib/permessage-deflate.js | 514 ++++ node_modules/ws/lib/receiver.js | 679 +++++ node_modules/ws/lib/sender.js | 477 ++++ node_modules/ws/lib/stream.js | 159 ++ node_modules/ws/lib/subprotocol.js | 62 + node_modules/ws/lib/validation.js | 130 + node_modules/ws/lib/websocket-server.js | 531 ++++ node_modules/ws/lib/websocket.js | 1319 +++++++++ node_modules/ws/package.json | 68 + node_modules/ws/wrapper.mjs | 8 + 39 files changed, 10329 insertions(+) create mode 100644 node_modules/opusscript/LICENSE create mode 100644 node_modules/opusscript/README.md create mode 100644 node_modules/opusscript/build/COPYING.libopus create mode 100644 node_modules/opusscript/build/opusscript_native_nasm.js create mode 100644 node_modules/opusscript/build/opusscript_native_wasm.js create mode 100644 node_modules/opusscript/build/opusscript_native_wasm.wasm create mode 100644 node_modules/opusscript/index.d.ts create mode 100644 node_modules/opusscript/index.js create mode 100644 node_modules/opusscript/package.json create mode 100644 node_modules/tweetnacl/AUTHORS.md create mode 100644 node_modules/tweetnacl/CHANGELOG.md create mode 100644 node_modules/tweetnacl/LICENSE create mode 100644 node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md create mode 100644 node_modules/tweetnacl/README.md create mode 100644 node_modules/tweetnacl/nacl-fast.js create mode 100644 node_modules/tweetnacl/nacl-fast.min.js create mode 100644 node_modules/tweetnacl/nacl.d.ts create mode 100644 node_modules/tweetnacl/nacl.js create mode 100644 node_modules/tweetnacl/nacl.min.js create mode 100644 node_modules/tweetnacl/package.json create mode 100644 node_modules/ws/LICENSE create mode 100644 node_modules/ws/README.md create mode 100644 node_modules/ws/browser.js create mode 100644 node_modules/ws/index.js create mode 100644 node_modules/ws/lib/buffer-util.js create mode 100644 node_modules/ws/lib/constants.js create mode 100644 node_modules/ws/lib/event-target.js create mode 100644 node_modules/ws/lib/extension.js create mode 100644 node_modules/ws/lib/limiter.js create mode 100644 node_modules/ws/lib/permessage-deflate.js create mode 100644 node_modules/ws/lib/receiver.js create mode 100644 node_modules/ws/lib/sender.js create mode 100644 node_modules/ws/lib/stream.js create mode 100644 node_modules/ws/lib/subprotocol.js create mode 100644 node_modules/ws/lib/validation.js create mode 100644 node_modules/ws/lib/websocket-server.js create mode 100644 node_modules/ws/lib/websocket.js create mode 100644 node_modules/ws/package.json create mode 100644 node_modules/ws/wrapper.mjs diff --git a/node_modules/opusscript/LICENSE b/node_modules/opusscript/LICENSE new file mode 100644 index 0000000..9d40c6f --- /dev/null +++ b/node_modules/opusscript/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2016-2021 abalabahaha + +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. diff --git a/node_modules/opusscript/README.md b/node_modules/opusscript/README.md new file mode 100644 index 0000000..2ff5864 --- /dev/null +++ b/node_modules/opusscript/README.md @@ -0,0 +1,53 @@ +# OpusScript + +JS bindings for libopus 1.3.1, ported with Emscripten. + +---- + +## Usage + +```js +var OpusScript = require("opusscript"); + +// 48kHz sampling rate, 20ms frame duration, stereo audio (2 channels) +var samplingRate = 48000; +var frameDuration = 20; +var channels = 2; + +// Optimize encoding for audio. Available applications are VOIP, AUDIO, and RESTRICTED_LOWDELAY +var encoder = new OpusScript(samplingRate, channels, OpusScript.Application.AUDIO); + +var frameSize = samplingRate * frameDuration / 1000; + +// Get PCM data from somewhere and encode it into opus +var pcmData = new Buffer(pcmSource); +var encodedPacket = encoder.encode(pcmData, frameSize); + +// Decode the opus packet back into PCM +var decodedPacket = encoder.decode(encodedPacket); + +// Delete the encoder when finished with it (Emscripten does not automatically call C++ object destructors) +encoder.delete(); +``` + +## Note: WASM + +If your environment doesn't support WASM, you can try the JS-only module. Do note that the JS-only version barely has optimizations due to compiler/toolchain limitations, and should only be used as a last resort. + +```js +var encoder = new OpusScript(samplingRate, channels, OpusScript.Application.AUDIO, { + wasm: false +}); +``` + +## Note: TypeScript + +Since this module wasn't written for TypeScript, you need to use `import = require` syntax. + +```ts +// Import using: +import OpusScript = require("opusscript"); + +// and NOT: +import OpusScript from "opusscript"; +``` diff --git a/node_modules/opusscript/build/COPYING.libopus b/node_modules/opusscript/build/COPYING.libopus new file mode 100644 index 0000000..9c739c3 --- /dev/null +++ b/node_modules/opusscript/build/COPYING.libopus @@ -0,0 +1,44 @@ +Copyright 2001-2011 Xiph.Org, Skype Limited, Octasic, + Jean-Marc Valin, Timothy B. Terriberry, + CSIRO, Gregory Maxwell, Mark Borgerding, + Erik de Castro Lopo + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +- Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +- Neither the name of Internet Society, IETF or IETF Trust, nor the +names of specific contributors, may be used to endorse or promote +products derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Opus is subject to the royalty-free patent licenses which are +specified at: + +Xiph.Org Foundation: +https://datatracker.ietf.org/ipr/1524/ + +Microsoft Corporation: +https://datatracker.ietf.org/ipr/1914/ + +Broadcom Corporation: +https://datatracker.ietf.org/ipr/1526/ diff --git a/node_modules/opusscript/build/opusscript_native_nasm.js b/node_modules/opusscript/build/opusscript_native_nasm.js new file mode 100644 index 0000000..a38fd4d --- /dev/null +++ b/node_modules/opusscript/build/opusscript_native_nasm.js @@ -0,0 +1,110 @@ + +var Module = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(Module) { + Module = Module || {}; + + +var g;g||(g=typeof Module !== 'undefined' ? Module : {});var aa,ba;g.ready=new Promise(function(b,a){aa=b;ba=a});var r={},t;for(t in g)g.hasOwnProperty(t)&&(r[t]=g[t]);var ca=!1,v=!1,w=!1,da=!1;ca="object"===typeof window;v="function"===typeof importScripts;w="object"===typeof process&&"object"===typeof process.versions&&"string"===typeof process.versions.node;da=!ca&&!w&&!v;var y="",ea,z,fa,ha; +if(w)y=v?require("path").dirname(y)+"/":__dirname+"/",ea=function(b,a){var c=A(b);if(c)return a?c:c.toString();fa||(fa=require("fs"));ha||(ha=require("path"));b=ha.normalize(b);return fa.readFileSync(b,a?null:"utf8")},z=function(b){b=ea(b,!0);b.buffer||(b=new Uint8Array(b));assert(b.buffer);return b},1=0;--c){b[48+c]=52+c;b[65+c]=c;b[97+c]=26+c}b[43]=62;b[47]=63;function Cg(Og,Pg,Qg){var d,e,c=0,f=Pg,g=Qg.length,h=Pg+(g*3>>2)-(Qg[g-2]=="=")-(Qg[g-1]=="=");for(;c>4;if(f>2;if(f>2]=0;q[a+18136>>2]=0;m=-1;a:{if((c|0)<1){break a}H=(e|0)<1276?e:1276;if((H|0)<1){break a}if((H|0)==1){m=-2;if(q[a+144>>2]==(w(c,10)|0)){break a}}B=q[a>>2]+a|0;W=q[a+108>>2]!=2051?q[a+116>>2]:W;Q=q[a+4>>2];m=q[a+168>>2];q[s+416>>2]=s+612;oa(B,10015,s+416|0);q[s+544>>2]=0;R=(f|0)<(m|0)?f:m;b:{c:{d:{e:{f:{g:{if(q[a+44>>2]<7){break g}t=q[a+144>>2];if((t|0)<16e3){break g}aa=1;f=w(q[a+112>>2],c);if((f|0)>=1){m=0;while(1){v=u[(m<<2)+b>>2];F=v>F?F:v;n=n>v?n:v;m=m+1|0;if((f|0)!=(m|0)){continue}break}}X=q[a+7640>>2];P=q[a+7636>>2];_e(a+188|0,q[s+612>>2],g,h,c,i,j,t,R,k,s+544|0);v=x(-F);f=0;if(x(x(1)/x(1<=(n>v?n:v)){break b}if(u[s+580>>2]>x(.10000000149011612)^1){break c}F=x(u[a+18128>>2]*x(.9990000128746033));f=w(q[a+112>>2],c);if((f|0)<1){break f}m=0;n=x(0);while(1){v=n;n=u[(m<<2)+b>>2];n=x(v+x(n*n));m=m+1|0;if((f|0)!=(m|0)){continue}break}L=x(f|0);if(x(n/L)>2];n=x(v+x(n*n));m=m+1|0;if((f|0)!=(m|0)){continue}break}break e}X=-1;if(q[a+7648>>2]){xc(a+188|0)}P=-1;break c}n=x(0);L=x(f|0);if(x(x(0)/L)>2]=F}q[a+140>>2]=-1;aa=0;f=1}qa=f;q[a+18120>>2]=0;if(q[s+544>>2]){if(q[a+124>>2]==-1e3){f=a;h:{i:{g=q[a+14228>>2];if((g|0)!=1002){if(g){break i}g=s+564|0;break h}g=s+572|0;break h}g=s+568|0}ma=C(+x(x(x(1)-u[g>>2])*x(100))+.5);j:{if(y(ma)<2147483648){g=~~ma;break j}g=-2147483648}q[f+140>>2]=g}f=a;g=q[s+576>>2];h=1101;k:{if((g|0)<13){break k}h=1102;if((g|0)<15){break k}h=1103;if((g|0)<17){break k}h=(g|0)<19?1104:1105}q[f+18120>>2]=h}n=x(0);if(!(q[a+120>>2]==1|q[a+112>>2]!=2)){n=ef(b,c,q[a+144>>2],a+14260|0)}f=c;if(!f){f=q[a+144>>2]/400|0}l:{m:{m=q[a+164>>2];if((m|0)!=-1e3){if((m|0)==-1){break m}g=q[a+144>>2];break l}g=q[a+144>>2];m=w(g,q[a+112>>2])+((w(g,60)|0)/(f|0)|0)|0;break l}g=q[a+144>>2];m=(w(H,g)<<3)/(f|0)|0}q[a+160>>2]=m;O=(g|0)/(c|0)|0;n:{o:{p:{U=q[a+148>>2];q:{if(!U){h=(w(g,12)|0)/(c|0)|0;f=(((h|0)/2|0)+((w(m,12)|0)/8|0)|0)/(h|0)|0;H=(f|0)<(H|0)?f:H;m=(w(H,h)<<3)/12|0;q[a+160>>2]=m;f=1;if((H|0)<2){break q}}r:{if((H|0)<3|(w(O,24)|0)>(m|0)){break r}ba=w(H,O);if((O|0)>49){break p}if((ba|0)<300){break r}if((m|0)>=2400){break o}}f=H}b=q[a+14240>>2];h=b?b:1101;g=0;m=0;b=q[a+14224>>2];i=(O|0)>100?1002:b?b:1e3;b=(O|0)==25&(i|0)!=1e3;c=b?50:O;s:{if((c|0)>16){break s}if(!((c|0)==10|(i|0)!=1e3?(e|0)!=1:0)){b=(c|0)<13;i=1e3;c=(c|0)==12?25:16;break s}g=50/(c|0)|0;b=3;c=50}if((c|0)<=399){while(1){m=m+1|0;c=c<<1;if((c|0)<400){continue}break}m=m<<3}t:{if((h|0)>=1104){e=1103;if((i|0)==1e3){break t}}if((h|0)==1102){e=1101;if((i|0)==1002){break t}}e=(h|0)<1105?(i|0)==1001?1104:h:h}h=q[a+14192>>2];c=d;u:{v:{switch(i-1e3|0){case 0:e=m-16|(e<<5)+96&224;break u;case 2:e=(((e|0)>1102?e:1102)<<5)- -64&96|m|128;break u;default:break v}}e=m+240|e<<4|96}o[c|0]=e|(((h|0)==2)<<2|b);if((b|0)==3){o[d+1|0]=g}m=b>>>0<2?1:2;if(q[a+148>>2]){break a}a=(f|0)>(m|0)?f:m;m=zc(d,m,a)?-3:a;break a}i=q[a+40>>2];S=q[a+44>>2];A=q[a+112>>2];f=m;if((O|0)==50){break n}da=1;f=w(w(A,-40)-20|0,O-50|0)+m|0;break n}i=q[a+40>>2];S=q[a+44>>2];A=q[a+112>>2];f=m}h=U?f:f+((f|0)/-12|0)|0;f=S+90|0;t=(w(h,f)|0)/100|0;Y=w(i,12)+20|0;k=(w(t,i)|0)/(Y|0)|0;j=127;w:{x:{switch(q[a+124>>2]-3001|0){case 1:j=0;break w;case 0:break w;default:break x}}h=q[a+140>>2];if((h|0)>=0){j=w(h,327)>>8;if(q[a+108>>2]!=2049){break w}j=(j|0)<115?j:115;break w}j=q[a+108>>2]==2048?115:48}h=q[a+120>>2];y:{z:{if((h|0)!=-1e3){if((A|0)!=2){break z}q[a+14192>>2]=h;A=h;break y}if((A|0)!=2){break z}A=((w(w(j,j),2e3)>>>14|0)+(q[a+14192>>2]==2?16e3:18e3)|0)<(t-k|0)?2:1}q[a+14192>>2]=A}E=!(q[s+544>>2]|aa)&q[a+184>>2]!=0;q[a+56>>2]=E;k=da?w(w(A,-40)-20|0,O-50|0)+m|0:m;I=(w(U?k:((k|0)/-12|0)+k|0,f)|0)/100|0;h=(w(I,i)|0)/(Y|0)|0;D=q[a+108>>2];A:{if((D|0)==2051){k=1002;q[a+14224>>2]=1002;J=a+14224|0;h=((g|0)/100|0)>(c|0);break A}t=q[a+136>>2];B:{if((t|0)==-1e3){k=a;Z=I-h|0;K=x(x(1)-n);v=x(x(n*x(1e4))+x(K*x(1e4)));C:{if(x(y(v))>14)|0;h=(D|0)==2048?h+8e3|0:h;I=h-4e3|0;D=h+4e3|0;t=h;h=q[a+14228>>2];t=(Z|0)<(((h|0)==1002?I:(h|0)>0?D:t)|0)?1e3:1002;q[k+14224>>2]=t;if(!(!q[a+48>>2]|128-j>>4>=(i|0))){q[a+14224>>2]=1e3;t=1e3}h=(w(da?9e3:6e3,c)|0)/(g<<3)|0;if((h|0)<=(H|0)?!(E&(j|0)>100):0){break B}t=(h|0)>(H|0)?1002:1e3}q[a+14224>>2]=t}J=a+14224|0;g=(g|0)/100|0;h=(g|0)>(c|0);if((c|0)>=(g|0)){k=t;break A}k=1002;if((t|0)==1002){k=t;break A}q[J>>2]=1002}if(q[a+176>>2]){q[J>>2]=1002;k=1002}E:{F:{G:{D=q[a+14228>>2];if((D|0)<1){break G}if(!((k|0)!=1002?(D|0)==1002:0)){if((k|0)!=1002){break G}g=1002;if((D|0)==1002){break F}}g=1002;ga=1;H:{if((k|0)!=1002){I=1;g=k;break H}I=0;t=0;if(h){break E}q[J>>2]=D;ga=0;T=1;g=D}t=1;break E}g=k}ga=1;I=0;t=0}I:{J:{if((A|0)!=1|q[a+14232>>2]!=2|(q[a+68>>2]|(D|0)==1002)){break J}if((g|0)==1002){break J}A=2;q[a+14192>>2]=2;q[a+68>>2]=1;break I}q[a+68>>2]=0}ea=a+Q|0;m=da?w(w(A,-40)-20|0,O-50|0)+m|0:m;A=(w(U?m:((m|0)/-12|0)+m|0,f)|0)/100|0;K:{L:{M:{N:{O:{P:{Q:{if((g&-2)==1e3){A=(S|0)<=1?(A<<2)/5|0:A;f=(w(A,i)|0)/(w(i,6)+10|0)|0;break Q}k=1002;if((g|0)==1002){h=1;if((S|0)>4){break P}A=(w(A,9)|0)/10|0;break P}f=(w(i,A)|0)/(Y|0)|0}k=1002;A=A-f|0;h=1;if((D|0)==1002){Cb(ea,q[a+180>>2],s+440|0);ha=1;g=q[a+14224>>2]}if((g|0)==1002){break P}h=0;if(q[a+84>>2]?0:!q[a+14252>>2]){break O}k=g}f=w(j,j);g=(w(f,2e3)>>14)+12e3|0;j=(w(f,2500)>>14)+11e3|0;R:{S:{i=q[a+14252>>2];if(!i){m=1105;f=1;if((g+(q[a+14244>>2]<1105?2e3:-2e3)|0)<=(A|0)){break M}if(i){break R}if(q[a+14244>>2]<1104){break S}j=j-1e3|0;break R}if((g|0)>(A|0)){break R}q[a+14240>>2]=1105;q[a+14244>>2]=1105;m=1105;break L}j=j+1e3|0}if((j|0)<=(A|0)){m=1104;f=1;break M}if(!i){m=1103;f=0;if(((q[a+14244>>2]<1103?9700:8300)|0)<=(A|0)){break M}m=9e3;if(i){break N}m=q[a+14244>>2]<1102?9700:8300;break N}m=9e3;if((A|0)<9e3){break N}q[a+14240>>2]=1103;q[a+14244>>2]=1103;m=1103;break L}m=q[a+14240>>2];break K}m=(m|0)>(A|0)?1101:1103;f=0}q[a+14240>>2]=m;q[a+14244>>2]=m;if(h|i|(q[a+88>>2]|f^1)){break L}m=1103;q[a+14240>>2]=1103}g=k}f=q[a+132>>2];if((f|0)<(m|0)){q[a+14240>>2]=f;m=f}i=q[a+128>>2];if((i|0)!=-1e3){q[a+14240>>2]=i;m=i}if(!((g|0)==1002|(ba|0)>1874)){m=(m|0)<1103?m:1103;q[a+14240>>2]=m}g=q[a+144>>2];T:{if((g|0)>24e3){f=m;break T}f=1104;U:{V:{W:{X:{if((m|0)<=1104){if((g|0)>=16001){f=m;break T}if((m|0)>1103){break X}if((g|0)<12001){break W}f=m;break T}q[a+14240>>2]=1104;if((g|0)>=16001){break T}}f=1103;q[a+14240>>2]=1103;if((g|0)>=12001){break T}break V}if((m|0)>1102){break V}if((g|0)>8e3){f=m;break T}f=m;if((m|0)!=1102){break T}break U}f=1102;q[a+14240>>2]=1102;if((g|0)>8e3){break T}}f=1101;q[a+14240>>2]=1101}Y:{if((i|0)!=-1e3){break Y}g=q[a+18120>>2];if(!g){break Y}i=q[a+14192>>2];Z:{_:{if((w(i,18e3)|0)>=(A|0)){m=1101;if(!h){break _}break Z}m=1102;if((w(i,24e3)|0)>=(A|0)&h){break Z}}m=1103;if((w(i,3e4)|0)>=(A|0)){break Z}m=(w(i,44e3)|0)<(A|0)?1105:1104}g=(g|0)>(m|0)?g:m;q[a+18120>>2]=g;f=(f|0)<(g|0)?f:g;q[a+14240>>2]=f}g=a;i=h;h=q[a+40>>2];j=0;$:{if(i|(!q[a+48>>2]|!h)){break $}D=125-((h|0)<25?h:25)|0;k=q[a+52>>2];j=(k|0)==1;i=(h|0)<6;m=f;aa:{while(1){h=m<<3;E=q[h+31596>>2];h=w(D,(q[h+31592>>2]-(j?E:0)|0)+(k?0:E)|0);h=(w(h&65535,655)>>>16|0)+w(h>>16,655)|0;if((h|0)<(A|0)|i){break aa}if((m|0)>1101){m=m-1|0;q[a+14240>>2]=m;continue}break}q[a+14240>>2]=f;j=0;break $}j=(h|0)<(A|0)}q[g+52>>2]=j;q[s+400>>2]=R;oa(B,4036,s+400|0);m=q[a+14224>>2];if(!((m|0)!=1002|q[a+14240>>2]!=1102)){q[a+14240>>2]=1103}ba:{ca:{da:{ea:{fa:{ga:{if(q[a+176>>2]){k=1101;q[a+14240>>2]=1101;break ga}k=q[a+14240>>2];if((m|0)!=1e3){break ga}if((k|0)>1103){break fa}}if(!((m|0)!=1001|(k|0)>1103)){q[J>>2]=1e3;m=1e3}h=q[a+144>>2];g=(h|0)/50|0;if((g|0)<(c|0)){break ea}i=m;break da}i=1001;q[a+14224>>2]=1001;h=q[a+144>>2];g=(h|0)/50|0;if((g|0)<(c|0)|((w(h,3)|0)/50|0)<(c|0)){break ca}break ba}i=1e3;if((m|0)!=1e3){break ca}}j=w(h,3);f=(j|0)/50|0;if((f|0)>=(c|0)){break ba}if((i|0)!=1e3){break ca}if(((h<<1)/25|0)==(c|0)){g=(h|0)/25|0;break ca}g=((j|0)/25|0)==(c|0)?f:g}c=(c|0)/(g|0)|0;if((P|0)!=-1){q[a+7640>>2]=X;q[a+7636>>2]=P}m=cf(a,b,c,g,d,e,T,R,l);break a}if(q[a+14248>>2]){q[a+14248>>2]=0;ha=2;I=1;t=1}m=q[a+160>>2];P=0;ha:{if(t){X=0;j=0;if((i|0)==1002){break ha}X=1;g=q[a+14192>>2];e=w(g,40)+20|0;f=(w(m+w(e,200-O|0)|0,3)|0)/3200|0;e=(e+((w((H<<3)-(e<<1)|0,240)|0)/((48e3/(O|0)|0)+240|0)|0)|0)/8|0;e=(e|0)>(f|0)?f:e;P=(e|0)>(g<<3|4)?(e|0)<257?e:257:0;j=1;if(P){break ha}P=0}X=0;j=0}R=d+1|0;S=H-1|0;_b(s+440|0,R,S);Y=c+W|0;e=s-((w(Y,q[a+112>>2])<<2)+15&-16)|0;U=e;ca=e;fa=a+14280|0;e=q[a+112>>2];M=ka(U,fa+(w(e,q[a+172>>2]-W|0)<<2)|0,w(e,W)<<2);i=(w(c,m)|0)/(h<<3)|0;g=a;ia:{if(q[a+14224>>2]==1002){e=pa(60)<<8;break ia}e=q[ea+8>>2]}f=q[a+14200>>2];e=e-f|0;e=w(e>>16,983)+f+(w(e&65535,983)>>>16)|0;q[g+14200>>2]=e;e=Na(e>>8);g=q[a+112>>2];D=M+(w(W,g)<<2)|0;f=q[a+144>>2];ja:{if(q[a+108>>2]==2048){if((c|0)<1){break ja}T=(w(e<<16>>16,2471)|0)/((f|0)/1e3|0)|0;e=T<<16>>16;h=((w(e,T>>16)+(w(e,T&65535)>>16)|0)+w(T,(T>>15)+1>>1)|0)-8388608|0;e=h<<16>>16;t=w(T,-471)+268435456|0;m=t>>6;f=m&65535;Z=w(e,f)>>16;E=e;e=t>>22;na=x(x((Z+w(E,e)|0)+w(m,(h>>15)+1>>1)|0)*x(3.725290298461914e-9));h=e;e=m<<16>>16;L=x(x((w(m,(t>>21)+1>>1)+w(h,e)|0)+(w(e,f)>>16)|0)*x(3.725290298461914e-9));N=x(x(w(T,942)-536870912|0)*x(3.725290298461914e-9));V=x(x(t|0)*x(3.725290298461914e-9));n=u[a+14212>>2];F=u[a+14208>>2];m=0;while(1){e=w(g,m)<<2;K=u[e+b>>2];v=x(V*K);_=x(F+v);v=x(x(v-x(L*_))+x(1.0000000031710769e-30));u[a+14212>>2]=v;F=x(x(N*K)+x(n-x(na*_)));u[a+14208>>2]=F;u[e+D>>2]=_;n=v;m=m+1|0;if((m|0)!=(c|0)){continue}break}if((g|0)!=2){break ja}g=D+4|0;f=b+4|0;n=u[a+14220>>2];F=u[a+14216>>2];m=0;while(1){e=m<<3;K=u[e+f>>2];v=x(V*K);_=x(F+v);v=x(x(v-x(L*_))+x(1.0000000031710769e-30));u[a+14220>>2]=v;F=x(x(N*K)+x(n-x(na*_)));u[a+14216>>2]=F;u[e+g>>2]=_;n=v;m=m+1|0;if((m|0)!=(c|0)){continue}break}g=2;break ja}N=x(x(18.900001525878906)/x(f|0));V=x(x(1)-N);n=u[a+14208>>2];if((g|0)==2){L=u[a+14216>>2];if((c|0)>=1){m=0;while(1){f=m<<3;e=f|4;K=u[e+b>>2];v=u[b+f>>2];u[f+D>>2]=v-n;u[e+D>>2]=K-L;n=x(x(V*n)+x(x(N*v)+x(1.0000000031710769e-30)));L=x(x(V*L)+x(x(N*K)+x(1.0000000031710769e-30)));m=m+1|0;if((m|0)!=(c|0)){continue}break}}u[a+14216>>2]=L;u[a+14208>>2]=n;g=2;break ja}if((c|0)>=1){m=0;while(1){e=m<<2;v=u[e+b>>2];u[e+D>>2]=v-n;n=x(x(V*n)+x(x(N*v)+x(1.0000000031710769e-30)));m=m+1|0;if((m|0)!=(c|0)){continue}break}}u[a+14208>>2]=n}ka:{if(!l){break ka}f=M+(w(g,W)<<2)|0;n=x(0);e=w(c,g);if((e|0)>=1){m=0;while(1){v=n;n=u[f+(m<<2)>>2];n=x(v+x(n*n));m=m+1|0;if((e|0)!=(m|0)){continue}break}}if(n==n?!(n>2]=0;q[e+4>>2]=0;q[a+14208>>2]=0;q[a+14212>>2]=0}F=x(1);la:{if(q[J>>2]!=1002){e=1;t=U-((w(c,g)<<1)+15&-16)|0;ca=t;v=u[s+580>>2];T=q[s+544>>2];f=H-P|0;f=w((((f|0)<(i|0)?f:i)<<3)-8|0,O);ma:{na:{oa:{Z=a;pa:{qa:{ra:{$=q[J>>2];if(($|0)==1001){D=(q[a+52>>2]<<1)+(q[a+144>>2]==(w(c,50)|0)?2:1)|0;h=q[a+148>>2];m=q[a+14192>>2];E=(f|0)/(m|0)|0;if((E|0)<12e3){break ra}e=2;if((E|0)<16e3){break ra}e=3;if((E|0)<2e4){break ra}e=4;if((E|0)<24e3){break ra}e=5;if((E|0)<32e3){break ra}e=6;if((E|0)<64e3){break ra}e=q[(D<<2)+40568>>2]+((E-64e3|0)/2|0)|0;break qa}q[a+36>>2]=f;l=q[a+14256>>2];if(l){break pa}g=f;break ma}e=w(e,20);g=e+40448|0;l=q[g>>2];e=e+40428|0;i=q[e>>2];ia=e;e=D<<2;e=(w(q[ia+e>>2],l-E|0)+w(q[e+g>>2],E-i|0)|0)/(l-i|0)|0}e=h?e:e+100|0;e=w((k|0)==1104?e+300|0:e,m);g=(m|0)==2?(E|0)>11999?e-1e3|0:e:e;q[Z+36>>2]=g;l=q[a+14256>>2];if(!l){break oa}f=g}if(q[a+148>>2]){break na}g=f;break ma}F=x(x(1)-x(Da(+x(x(g-f|0)*x(.0009765625))*.6931471805599453)));break ma}if(q[a+176>>2]){g=f;break ma}L=x(8e3);h=13;sa:{ta:{ua:{D=q[a+14240>>2];switch(D-1101|0){case 0:break sa;case 1:break ua;default:break ta}}L=x(12e3);h=15;break sa}L=x(16e3);h=17}n=x(0);Q=q[a+112>>2];if((Q|0)>=1){e=0;while(1){i=w(e,21);m=0;while(1){K=u[(i+m<<2)+l>>2];E=Kx(-2);n=g?x(.5):x(-2);n=g?E?K:n:n;n=x(N+(n>x(0)?x(n*x(.5)):n));m=m+1|0;if((m|0)!=(h|0)){continue}break}e=e+1|0;if((Q|0)!=(e|0)){continue}break}}e=(0-(f<<1)|0)/3|0;n=x(L*x(x(x(n/x(h|0))*x(Q|0))+x(.20000000298023224)));va:{if(x(y(n))>2]=g}i=q[a+112>>2];q[a+8>>2]=i;E=q[a+14192>>2];q[a+12>>2]=E;Q=q[a+144>>2];q[a+32>>2]=(w(c,1e3)|0)/(Q|0);m=8e3;l=8e3;wa:{xa:{switch(k-1101|0){default:l=12e3;m=16e3;if((k|0)==1103|($|0)==1001){break wa}ja(40234,40321,1755);G();case 0:break wa;case 1:break xa}}m=12e3;l=12e3}q[a+28>>2]=m;ya:{if(($|0)==1001){q[a+20>>2]=16e3;q[a+24>>2]=16e3;break ya}q[a+20>>2]=16e3;q[a+24>>2]=8e3;if(($|0)!=1e3){break ya}e=da?(ba<<4)/3|0:ba<<3;if((e|0)>7999){break ya}q[a+20>>2]=12e3;q[a+28>>2]=l;if((e|0)>6999){break ya}q[a+28>>2]=8e3;q[a+20>>2]=8e3}h=v>=x(.10000000149011612);m=S<<3;q[a- -64>>2]=m;f=q[a+148>>2];q[a+60>>2]=!f;za:{Aa:{Ba:{Ca:{if(!(j^1|(P|0)<2)){e=(P<<3^-1)+m|0;q[a+64>>2]=e;if(($|0)!=1001){break za}m=e-20|0;q[a+64>>2]=m;if(!f){break Aa}break Ca}if(!f){break Ba}if(($|0)!=1001){break za}}g=1;D=(q[a+52>>2]<<1)+((Q|0)==(w(c,50)|0)?2:1)|0;Z=a;e=E;Da:{Ea:{m=((w(m,Q)|0)/(c|0)|0)/(E|0)|0;if((m|0)<12e3){break Ea}g=2;if((m|0)<16e3){break Ea}g=3;if((m|0)<2e4){break Ea}g=4;if((m|0)<24e3){break Ea}g=5;if((m|0)<32e3){break Ea}g=6;if((m|0)<64e3){break Ea}f=q[(D<<2)+40568>>2]+((m-64e3|0)/2|0)|0;break Da}f=w(g,20);g=f+40448|0;l=q[g>>2];f=f+40428|0;j=q[f>>2];ia=f;f=D<<2;f=(w(q[ia+f>>2],l-m|0)+w(q[f+g>>2],m-j|0)|0)/(l-j|0)|0}e=w(e,(k|0)==1104?f+300|0:f);q[Z+64>>2]=(w((E|0)==2?(m|0)>11999?e-1e3|0:e:e,c)|0)/(Q|0);break za}if(($|0)!=1001){break za}}e=(w(c,g)|0)/(Q|0)|0;q[a+64>>2]=(e|0)>(m|0)?m:e}l=a+8|0;j=T?h:-1;if(ha){m=0;q[s+432>>2]=0;g=(Q|0)/400|0;f=w((q[a+172>>2]-g|0)-q[a+116>>2]|0,i)<<2;e=(f+a|0)+14280|0;h=e;e=q[s+612>>2];Cc(h,h,x(0),x(1),q[e+4>>2],g,i,q[e+60>>2],Q);la(fa,0,f);g=q[a+172>>2];f=w(g,q[a+112>>2]);if((f|0)>=1){while(1){h=t+(m<<1)|0;n=x(u[((m<<2)+a|0)+14280>>2]*x(32768));n=n>x(-32768)?n:x(-32768);n=zg(n>1]=e;m=m+1|0;if((f|0)!=(m|0)){continue}break}}Gc(ea,l,t,g,0,s+432|0,ha,j);q[a+72>>2]=0;i=q[a+112>>2]}m=1;h=w(c,i);Ga:{if((h|0)<1){break Ga}e=t;f=w(i,W);n=x(u[M+(f<<2)>>2]*x(32768));n=n>x(-32768)?n:x(-32768);n=zg(n>1]=g;if((h|0)==1){break Ga}while(1){g=t+(m<<1)|0;n=x(u[M+(f+m<<2)>>2]*x(32768));n=n>x(-32768)?n:x(-32768);n=zg(n>1]=e;m=m+1|0;if((h|0)!=(m|0)){continue}break}}Ja:{if(Gc(ea,l,t,c,s+440|0,s+620|0,0,j)){l=-3}else{e=q[a+80>>2];Ka:{La:{f=q[a+14224>>2];if((f|0)==1e3){if((e|0)==8e3){k=1101;break Ka}if((e|0)==16e3){break La}if((e|0)!=12e3){break Ka}k=1102;break Ka}if((e|0)==16e3){break Ka}ja(40340,40321,1863);G()}k=1103}Ma:{if(q[a+96>>2]){e=q[a+18132>>2];q[a+72>>2]=!e;if(!q[s+620>>2]){break Ma}if(e){break Ja}q[a+14248>>2]=1;I=0;g=q[a+14192>>2];e=w(g,40)+20|0;f=(w(q[a+160>>2]+w(e,200-O|0)|0,3)|0)/3200|0;e=(e+((w((H<<3)-(e<<1)|0,240)|0)/((48e3/(O|0)|0)+240|0)|0)|0)/8|0;e=(e|0)>(f|0)?f:e;P=(e|0)>(g<<3|4)?(e|0)<257?e:257:0;X=(P|0)!=0;break Ja}q[a+72>>2]=0;if(q[s+620>>2]){break Ja}}m=0;q[a+18136>>2]=0;c=q[a+144>>2]/(c|0)|0;if((c|0)<=399){while(1){m=m+1|0;c=c<<1;if((c|0)<400){continue}break}m=m<<3}Na:{Oa:{switch(f-1e3|0){case 0:b=m-16|(k<<5)+96&224;break Na;case 2:b=(((k|0)>1102?k:1102)<<5)- -64&96|m|128;break Na;default:break Oa}}b=m+240|k<<4|96}o[d|0]=b|(q[a+14192>>2]==2)<<2;l=1}break la}}e=s;f=k-1101|0;if(f>>>0<=3){f=q[(f<<2)+40588>>2]}else{f=21}q[e+384>>2]=f;oa(B,10012,s+384|0);q[s+368>>2]=q[a+14192>>2];oa(B,10008,s+368|0);q[s+352>>2]=-1;oa(B,4002,s+352|0);Pa:{if(q[a+14224>>2]==1e3){m=q[a+112>>2];j=U-(((w(m,q[a+144>>2])|0)/400<<2)+15&-16)|0;ca=j;break Pa}q[s+336>>2]=0;oa(B,4006,s+336|0);q[s+320>>2]=!q[a+76>>2]<<1;oa(B,10002,s+320|0);f=q[a+148>>2];e=q[a+14224>>2];Qa:{Ra:{Sa:{if((e|0)==1001){if(!f){i=q[a+144>>2];m=q[a+112>>2];f=(w(i,m)|0)/400|0;j=U-((f<<2)+15&-16)|0;ca=j;e=1001;break Qa}q[s+256>>2]=q[a+160>>2]-q[a+36>>2];oa(B,4002,s+256|0);q[s+240>>2]=0;oa(B,4020,s+240|0);break Sa}if(!f){break Ra}q[s+304>>2]=1;oa(B,4006,s+304|0);q[s+288>>2]=q[a+152>>2];oa(B,4020,s+288|0);q[s+272>>2]=q[a+160>>2];oa(B,4002,s+272|0)}e=q[J>>2]}i=q[a+144>>2];m=q[a+112>>2];f=(w(i,m)|0)/400|0;j=U-((f<<2)+15&-16)|0;ca=j;if((e|0)==1e3){break Pa}}g=e;e=q[a+14228>>2];if((g|0)==(e|0)|(e|0)<1){break Pa}ka(j,((w(q[a+172>>2]+(((i|0)/-400|0)-W|0)|0,m)<<2)+a|0)+14280|0,f<<2)}f=q[a+172>>2];e=w(f-Y|0,m);Ta:{if((e|0)>=1){f=a+14280|0;e=e<<2;ra(fa,f+(w(c,m)<<2)|0,e);ka(e+f|0,M,w(m,Y)<<2);break Ta}ka(fa,M+(w(Y-f|0,m)<<2)|0,w(f,m)<<2)}n=u[a+14204>>2];if(!(n>2];Cc(M,M,n,F,q[e+4>>2],c,q[a+112>>2],q[e+60>>2],q[a+144>>2])}u[a+14204>>2]=F;t=q[a+14224>>2];if(!(q[a+14192>>2]!=1?(t|0)==1001:0)){e=a;f=16384;Ua:{if((A|0)>32e3){break Ua}f=0;if((A|0)<16e3){break Ua}f=16384-((65536e3-(A<<11)|0)/(A-14e3|0)|0)|0}q[e+92>>2]=f}Va:{if(q[a+14256>>2]|q[a+112>>2]!=2){break Va}g=p[a+14196>>1];l=q[a+92>>2];if((l|0)>16383?(g|0)>=16384:0){break Va}V=x(x(1)-x(x(l|0)*x(6103515625e-14)));m=0;f=q[s+612>>2];i=48e3/q[a+144>>2]|0;e=q[f+4>>2]/(i|0)|0;if((e|0)>0){K=x(x(1)-x(x(g|0)*x(6103515625e-14)));h=q[f+60>>2];while(1){g=m<<3;f=g+M|0;v=u[f>>2];A=f;N=v;n=u[h+(w(i,m)<<2)>>2];n=x(n*n);f=M+(g|4)|0;v=u[f>>2];n=x(x(x(V*n)+x(K*x(x(1)-n)))*x(x(N-v)*x(.5)));u[A>>2]=N-n;u[f>>2]=v+n;m=m+1|0;if((e|0)!=(m|0)){continue}break}m=e}if((c|0)>(m|0)){while(1){f=m<<3;e=f+M|0;n=u[e>>2];g=e;N=n;e=M+(f|4)|0;v=u[e>>2];n=x(V*x(x(n-v)*x(.5)));u[g>>2]=N-n;u[e>>2]=v+n;m=m+1|0;if((m|0)!=(c|0)){continue}break}}p[a+14196>>1]=l}Wa:{Xa:{if((t|0)==1002|(z(q[s+468>>2])+(q[s+460>>2]+((t|0)==1001?5:-15)|0)|0)>S<<3){break Xa}if((t|0)==1001){va(s+440|0,X,12)}if(!X){break Xa}f=1;va(s+440|0,I,1);i=q[J>>2];e=S-((z(q[s+468>>2])+(q[s+460>>2]+((i|0)==1001?-21:-32)|0)|0)+7>>3)|0;e=(e|0)<(P|0)?e:P;e=(e|0)>2?e:2;g=(e|0)<257?e:257;h=0;if((i|0)!=1001){break Wa}Pa(s+440|0,g-2|0,256);break Wa}f=0;q[a+14248>>2]=0;h=1;g=0}D=q[J>>2];Ya:{if((D|0)==1e3){i=q[s+468>>2];e=q[s+460>>2];Zb(s+440|0);m=(e+z(i)|0)-25>>3;i=m;break Ya}m=S-g|0;Oa(s+440|0,m);i=0}Za:{if(!(q[J>>2]!=1e3|f)){e=I;t=0;break Za}q[s+224>>2]=s+544;oa(B,10022,s+224|0);if(q[J>>2]==1001){q[s+432>>2]=q[a+100>>2];q[s+436>>2]=q[a+104>>2];q[s+208>>2]=s+432;oa(B,10028,s+208|0)}e=I;t=0;if(!(f&e)){break Za}q[s+192>>2]=0;oa(B,10010,s+192|0);q[s+176>>2]=0;oa(B,4006,s+176|0);q[s+160>>2]=-1;oa(B,4002,s+160|0);l=-3;if((Va(B,M,q[a+144>>2]/200|0,m+R|0,g,0)|0)<0){break la}q[s+144>>2]=s+616;oa(B,4031,s+144|0);oa(B,4028,0);e=1;t=1}q[s+128>>2]=(D|0)==1002?0:17;oa(B,10010,s+128|0);l=q[J>>2];_a:{if((l|0)==1e3){break _a}I=l;l=q[a+14228>>2];if(!((I|0)==(l|0)|(l|0)<1)){oa(B,4028,0);Va(B,j,q[a+144>>2]/400|0,s+432|0,2,0);q[s+112>>2]=0;oa(B,10002,s+112|0)}if(((q[s+460>>2]+z(q[s+468>>2])|0)-32|0)>m<<3){break _a}if(!(!q[a+148>>2]|(!t|q[J>>2]!=1001))){q[s+96>>2]=q[a+160>>2]-q[a+36>>2];oa(B,4002,s+96|0)}q[s+80>>2]=q[a+148>>2];oa(B,4006,s+80|0);i=Va(B,M,c,0,m,s+440|0);l=-3;if((i|0)<0){break la}if(!q[a+148>>2]|(!t|q[J>>2]!=1001)){break _a}ra(i+R|0,m+R|0,g);m=g+m|0}if(!(e|h)){e=q[a+144>>2];oa(B,4028,0);q[s+64>>2]=0;oa(B,10010,s- -64|0);q[s+48>>2]=0;oa(B,10002,s+48|0);q[s+32>>2]=0;oa(B,4006,s+32|0);q[s+16>>2]=-1;oa(B,4002,s+16|0);if(q[a+14224>>2]==1001){Oa(s+440|0,i);m=i}j=(e|0)/200|0;h=c-j|0;e=(e|0)/400|0;Va(B,M+(w(q[a+112>>2],h-e|0)<<2)|0,e,s+432|0,2,0);l=-3;if((Va(B,M+(w(h,q[a+112>>2])<<2)|0,j,m+R|0,g,0)|0)<=-1){break la}q[s>>2]=s+616;oa(B,4031,s)}h=q[a+14224>>2];m=0;e=q[a+144>>2]/(c|0)|0;if((e|0)<=399){while(1){m=m+1|0;e=e<<1;if((e|0)<400){continue}break}m=m<<3}e=d;$a:{ab:{switch(h-1e3|0){case 0:h=m-16|(k<<5)+96&224;break $a;case 2:h=(((k|0)>1102?k:1102)<<5)- -64&96|m|128;break $a;default:break ab}}h=m+240|k<<4|96}o[e|0]=h|(q[a+14192>>2]==2)<<2;h=q[s+468>>2];q[a+18136>>2]=h^q[s+616>>2];q[a+14228>>2]=ga?q[J>>2]:1002;q[a+14252>>2]=0;q[a+14236>>2]=c;e=q[a+14192>>2];q[a+14232>>2]=e;bb:{if(!(!q[a+184>>2]|!(q[s+544>>2]|aa))){cb:{if(!(qa^1|u[s+580>>2]>2];n=x(0);j=w(q[a+112>>2],c);if((j|0)>=1){m=0;while(1){N=n;n=u[(m<<2)+b>>2];n=x(N+x(n*n));m=m+1|0;if((j|0)!=(m|0)){continue}break}}aa=v>=x(x(n/x(j|0))*x(316.2300109863281))}if(aa){b=q[a+18124>>2];q[a+18124>>2]=b+1;if((b|0)<10){break bb}if((b|0)<30){break cb}q[a+18124>>2]=10;break bb}q[a+18124>>2]=0;break bb}m=0;q[a+18136>>2]=0;b=q[a+14224>>2];a=q[a+144>>2]/(c|0)|0;if((a|0)<=399){while(1){m=m+1|0;a=a<<1;if((a|0)<400){continue}break}m=m<<3}db:{eb:{switch(b-1e3|0){case 0:a=m-16|(k<<5)+96&224;break db;case 2:a=(((k|0)>1102?k:1102)<<5)- -64&96|m|128;break db;default:break eb}}a=m+240|k<<4|96}o[d|0]=a|((e|0)==2)<<2;l=1;break la}q[a+18124>>2]=0}fb:{if(((q[s+460>>2]+z(h)|0)-32|0)>S<<3){o[R|0]=0;q[a+18136>>2]=0;i=1;break fb}if(q[J>>2]!=1e3|f|(i|0)<3){break fb}while(1){if(r[d+i|0]){break fb}b=(i|0)>3;i=i-1|0;if(b){continue}break}i=2}b=(g+i|0)+1|0;gb:{if(q[a+148>>2]){H=b;break gb}l=-3;if(zc(d,b,H)){break la}}l=H}m=l}ca=s+624|0;return m}function Va(a,b,c,d,e,f){var g=x(0),h=x(0),i=0,j=x(0),k=0,l=0,m=x(0),n=0,t=0,v=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,xa=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=x(0),Ka=0,La=x(0),Ma=x(0),Na=x(0),Qa=x(0),Ra=x(0),Sa=x(0);E=ca-192|0;ca=E;t=q[a+8>>2];P=q[a+4>>2];q[E+28>>2]=15;q[E+24>>2]=0;q[E+20>>2]=0;q[E+16>>2]=0;q[E+4>>2]=0;D=q[a+36>>2];I=q[a+32>>2];H=q[a>>2];X=q[H+32>>2];Y=q[H+4>>2];Q=q[H+8>>2];q[E+12>>2]=0;v=-1;a:{if(!b|(e|0)<2){break a}i=q[H+36>>2];if((i|0)<0){break a}U=w(q[a+28>>2],c);c=q[H+44>>2];while(1){if(c<(F|0);F=F+1|0;if(l){continue}break a}break}b:{if(!f){ua=1;i=1;k=0;break b}ua=wa(f);c=q[f+20>>2]+z(q[f+28>>2])|0;i=c-32|0;k=c-28>>3}c:{d:{if(!q[a+48>>2]){L=Y+1024|0;M=(e|0)<1275?e:1275;l=M-k|0;c=q[a+40>>2];e:{if(q[a+44>>2]){if((c|0)==-1){break d}e=q[H>>2];ea=(w(c,U)+(e>>4)|0)/(e>>3)|0;n=ea>>6;break e}if((c|0)==-1){break d}e=q[H>>2];e=((w(c,U)+((i|0)>1?i:0)|0)+(e<<2)|0)/(e<<3)|0;e=(e|0)>(M|0)?M:e;M=(e|0)>2?e:2;n=M-k|0}v=c;break c}ja(39674,39710,1547);G()}n=l}if(!f){_b(E+32|0,d,M);f=E+32|0}e=a+244|0;d=w(P,L)<<2;qa=w(P,Q);fa=3-F|0;Z=w(M,400)>>fa;f:{if(!q[a+52>>2]|(ea|0)<1){break f}c=((i|0)==1)<<1;L=(ea<<1)-q[a+208>>2]>>6;c=(c|0)>(L|0)?c:L;if((c|0)>=(l|0)){break f}M=c+k|0;Oa(f,M);l=c}T=d+e|0;ga=qa<<2;L=(v|0)>(Z|0);xa=w(t,40);ha=400>>>F|0;za=U+Y|0;K=E-((w(za,P)<<2)+15&-16)|0;V=K;ca=K;m=u[a+224>>2];N=q[a+28>>2];d=(w(U-Y|0,t)|0)/(N|0)|0;g:{h:{if((d|0)>=1){c=0;while(1){j=u[(c<<2)+b>>2];g=gj?h:j;c=c+1|0;if((d|0)!=(c|0)){continue}break}g=x(-g);if((g>2];g=gm?h:m;c=c+1|0;if((d|0)!=(c|0)){continue}break}break h}if(m>x(0)){break g}}g=x(-g);m=g>2];sa=1;g=x(0);L=(w(t,Y)|0)/(N|0)|0;i:{if((L|0)<1){h=x(0);break i}d=(d<<2)+b|0;c=0;h=x(0);while(1){j=u[d+(c<<2)>>2];g=gj?h:j;c=c+1|0;if((L|0)!=(c|0)){continue}break}}c=J<<2;d=(D|0)>(O|0);J=M<<3;g=x(-g);g=g>2]=g;g=g>2]));va(f,i,15);if(i^1){i=1;break j}S=1;k:{if((ea|0)<1){i=J;break k}l=2;i=k+2|0;n=(i|0)>(M|0)?M:i;Oa(f,n);M=n;i=n<<3;J=i}q[f+20>>2]=(i-z(q[f+28>>2])|0)+32;sa=0}e=c+e|0;L=1<1?P:1;d=H+16|0;k=K+(Y<<2)|0;c=0;while(1){Y=c<<2;nf(Y+b|0,k+(w(c,za)<<2)|0,U,P,q[a+28>>2],d,(a+Y|0)+192|0,q[a+16>>2]!=0&g>x(65536));c=c+1|0;if((Ka|0)!=(c|0)){continue}break}c=0;if(!(q[a+20>>2]|(!(q[a+64>>2]!=0&(l|0)>3|(w(t,12)|0)<(l|0))|(I|S)))){c=q[a+24>>2]>4}Ga=q[a+100>>2];ia=a+120|0;oa=mf(a,K,e,P,U,Ga,E+28|0,E+24|0,E+80|0,c,l,ia);La=u[E+24>>2];l:{if(!(La>x(.4000000059604645))){ba=0;if(u[a+108>>2]>x(.4000000059604645)^1){break l}}if(q[ia>>2]){ba=0;if(+u[a+124>>2]>.3^1){break l}}Aa=+q[E+28>>2];Ba=+q[a+104>>2];ba=Aa>Ba*1.26|Aa(J|0)|I){break m}va(f,0,1);break m}va(f,1,1);b=q[E+28>>2]+1|0;c=z(b);d=27-c|0;Pa(f,d,6);ya(f,b+(-16<>2],3);ma(f,Ga,39730,2)}Ca=1;N=0;if(!(q[a+64>>2]|q[a+24>>2]<1)){c=0;N=lf(K,za,P,E+12|0,E+16|0,!I|(n|0)>14?c:q[a+184>>2]!=2,E+4|0)}k=H;n:{o:{if(!(!F|((q[f+20>>2]+z(q[f+28>>2])|0)-29|0)>(J|0))){if(N){break o}Ca=0}i=V-((w(P,U)<<2)+15&-16)|0;c=i;ca=c;c=(qa<<2)+15&-16;V=i-c|0;d=V;ca=d;e=d-c|0;c=e;ca=c;_=w(t,Q);R=c-((_<<2)+15&-16)|0;v=R;ca=v;Da=1;N=0;b=0;break n}i=V-((w(P,U)<<2)+15&-16)|0;c=i;ca=c;c=(qa<<2)+15&-16;V=i-c|0;d=V;ca=d;e=d-c|0;c=e;ca=c;_=w(t,Q);R=c-((_<<2)+15&-16)|0;v=R;ca=v;p:{if(q[a+24>>2]<8){Ca=0;break p}Ca=0;Bb(H,0,K,i,t,P,F,q[a+28>>2]);mb(H,i,V,W,t,F);pb(H,W,D,V,R,t);pa=1;if((_|0)<1){break p}g=x(x(F|0)*x(.5));c=0;while(1){d=(c<<2)+R|0;u[d>>2]=g+u[d>>2];c=c+1|0;if((_|0)!=(c|0)){continue}break}}b=L}Y=b;Bb(k,Y,K,i,t,P,F,q[a+28>>2]);q:{r:{g=u[i>>2];if(g==g){if((t|0)==1){break r}g=u[(U<<2)+i>>2];b=0;if(g==g){break q}}ja(39733,39710,1729);G()}b=0;if((P|0)!=2){break q}q[E+16>>2]=0;b=1}za=b;mb(H,i,V,W,t,F);if(!(!q[a+64>>2]|(D|0)<3)){g=x(u[V>>2]*x(9999999747378752e-20));c=2;while(1){b=(c<<2)+V|0;h=u[b>>2];h=g>h?h:g;u[b>>2]=h>x(1.0000000036274937e-15)?h:x(1.0000000036274937e-15);c=c+1|0;if((D|0)!=(c|0)){continue}break}}pb(H,W,D,V,e,t);b=v-((_<<2)+15&-16)|0;ta=b;ca=b;Ea=D<<2;aa=la(b,0,Ea);h=x(0);s:{t:{if(I){break t}da=q[a+236>>2];h=x(0);if(!da){break t}b=q[a+64>>2];if(b){break s}u:{v:{w:{if((t|0)<1){break w}b=q[a+92>>2];k=(b|0)>2?b:2;Ha=1-k|0;d=s[X>>1];S=0;v=0;h=x(0);g=x(0);while(1){Ia=w(Q,S);b=d;c=0;while(1){m=u[da+(c+Ia<<2)>>2];$=mx(-2);h=Fa?x(.25):x(-2);h=Fa?$?m:h:h;m=h>x(0)?x(h*x(.5)):h;h=x(Ja+x(m*x(Ha+(c<<1)|0)));$=b<<16;c=c+1|0;b=p[(c<<1)+X>>1];$=b-($>>16)|0;g=x(g+x(m*x($|0)));v=v+$|0;if((c|0)!=(k|0)){continue}break}S=S+1|0;if((S|0)!=(t|0)){continue}break}c=0;if((v|0)<=0){break w}h=x(x(x(h*x(6))/x(w(k+1|0,w(k-1|0,w(k,t)))|0))*x(.5));h=h>1]/2<<16>>16;while(1){b=c;c=c+1|0;if((d|0)>p[(c<<1)+X>>1]){continue}break}m=h>x(-.03099999949336052)?h:x(-.03099999949336052);g=x(g+x(.20000000298023224));c=0;d=0;while(1){v=c<<2;j=u[v+da>>2];if((t|0)==2){h=u[da+(c+Q<<2)>>2];j=hx(.25)^1)){u[v+aa>>2]=h+x(-.25);d=d+1|0}c=c+1|0;if((k|0)!=(c|0)){continue}break}if((d|0)<3){break u}h=x(g+x(.25));g=x(0);if(!(h>x(0)^1)){break v}c=0;while(1){b=aa+(c<<2)|0;u[b>>2]=B(x(u[b>>2]+x(-.25)),x(0));c=c+1|0;if((k|0)!=(c|0)){continue}break}g=h;break u}ja(39806,39710,1770);G()}la(aa,0,k<<2);m=x(0)}Ra=x(m*x(64));h=x(g+x(.20000000298023224))}Ja=h;b=q[a+64>>2];if(b){break s}h=x(0);if((D|0)>(I|0)){g=Da?x(0):x(x(F|0)*x(.5));j=x(-10);c=I;while(1){m=x(j+x(-1));j=x(u[(c<<2)+e>>2]-g);j=j>2]-g);j=j>m?j:m}h=x(h+j);c=c+1|0;if((D|0)!=(c|0)){continue}break}}g=u[a+240>>2];Ma=x(A(x(B(x(x(h/x(D-I|0))-g),x(-1.5))),x(3)));u[a+240>>2]=g+x(Ma*x(.019999999552965164));b=0}if(!pa){ka(R,e,_<<2)}c=ga;ga=T+ga|0;$=c+ga|0;Da=c+$|0;c=ra?Z:na;na=xa+20|0;Z=c-w(na,ha-50|0)|0;x:{if(!F){break x}c=(q[f+20>>2]+z(q[f+28>>2])|0)-29|0;y:{if((J|0)<(c|0)|N){break y}N=0;if(b|I|q[a+24>>2]<5){break y}c=1;j=u[T>>2];z:{A:{if((t|0)==1){u[E+80>>2]=j;if((D|0)<2){break z}while(1){g=x(j+x(-1));b=c<<2;h=u[b+T>>2];j=g>h?g:h;u[b+(E+80|0)>>2]=j;c=c+1|0;if((D|0)!=(c|0)){continue}break}break A}g=u[(Q<<2)+T>>2];j=g>2]=j;if((D|0)<2){break z}while(1){k=c<<2;g=u[k+T>>2];h=u[(c+Q<<2)+T>>2];b=g>h;m=x(j+x(-1));d=m>(b?g:h);g=d?m:g;j=b?g:d?g:h;u[k+(E+80|0)>>2]=j;c=c+1|0;if((D|0)!=(c|0)){continue}break}}if((D|0)<2){break z}c=D-2|0;while(1){b=(E+80|0)+(c<<2)|0;g=u[b>>2];h=x(u[b+4>>2]+x(-1));u[b>>2]=g>h?g:h;b=(c|0)>0;c=c-1|0;if(b){continue}break}}b=(t|0)>1?t:1;k=D-1|0;d=0;v=(D|0)<4;j=x(0);while(1){if(!v){N=w(d,Q);c=2;while(1){j=x(j+x(B(x(x(B(u[(c+N<<2)+e>>2],x(0)))-x(B(u[(E+80|0)+(c<<2)>>2],x(0)))),x(0))));c=c+1|0;if((k|0)!=(c|0)){continue}break}}d=d+1|0;if((b|0)!=(d|0)){continue}break}N=0;if(!(x(j/x(w(D-3|0,t)|0))>x(1)^1)){Bb(H,L,K,i,t,P,F,q[a+28>>2]);mb(H,i,V,W,t,F);pb(H,W,D,V,e,t);if((_|0)>=1){g=x(x(F|0)*x(.5));c=0;while(1){b=(c<<2)+R|0;u[b>>2]=g+u[b>>2];c=c+1|0;if((_|0)!=(c|0)){continue}break}}q[E+12>>2]=1045220557;N=1;Y=L}c=(q[f+20>>2]+z(q[f+28>>2])|0)-29|0}if((c|0)>(J|0)){break x}va(f,N,3)}S=ta-((w(t,U)<<2)+15&-16)|0;b=S;ca=b;md(H,i,b,V,W,t,L);v=0;if(!((w(t,15)|0)>(n|0)|I|q[a+24>>2]<2)){v=!q[a+64>>2]}c=b;b=(Q<<2)+15&-16;P=c-b|0;c=P;ca=c;c=c-b|0;ca=c;ra=c-b|0;d=ra;ca=d;Sa=kf(e,R,Q,I,D,t,P,q[a+60>>2],q[H+56>>2],N,q[a+44>>2],q[a+52>>2],X,F,n,E+8|0,q[a+64>>2],aa,ia,c,d);R=d-b|0;d=R;ca=d;B:{if(v){b=20480/(n|0)|0;b=jf(H,W,N,R,(b|0)<78?80:b+2|0,S,U,F,u[E+12>>2],q[E+16>>2],c);if((D|0)<=(O|0)){break B}c=(R+(W<<2)|0)-4|0;while(1){q[R+(O<<2)>>2]=q[c>>2];O=O+1|0;if((O|0)!=(D|0)){continue}break}break B}if(!(!I|!q[E+4>>2])){b=0;if((D|0)<1){break B}c=0;while(1){q[R+(c<<2)>>2]=1;c=c+1|0;if((D|0)!=(c|0)){continue}break}break B}if(!(!I|(n|0)>14|q[a+184>>2]==2)){b=N;if((D|0)<1){break B}la(R,0,Ea);break B}b=0;if((D|0)<1){break B}c=0;while(1){q[R+(c<<2)>>2]=N;c=c+1|0;if((D|0)!=(c|0)){continue}break}}xa=(t|0)>1?t:1;aa=d-((_<<2)+15&-16)|0;pa=aa;ca=aa;i=0;while(1){da=(D|0)<=(I|0);if(!da){k=w(i,Q);c=I;while(1){d=c+k<<2;v=d+e|0;g=u[v>>2];if(!(x(y(x(g-u[d+T>>2])))>2]=g+x(u[d+Da>>2]*x(-.25))}c=c+1|0;if((D|0)!=(c|0)){continue}break}}i=i+1|0;if((xa|0)!=(i|0)){continue}break}yd(H,I,D,W,e,T,J,aa,f,t,F,l,q[a+12>>2],a+84|0,q[a+24>>2]>3,q[a+56>>2],q[a+64>>2]);K=0;i=q[f+4>>2]<<3;v=(q[f+20>>2]+z(q[f+28>>2])|0)-32|0;d=N?2:4;O=(F|0)!=0&i>>>0>=v+(d|1)>>>0;k=0;C:{if(da){break C}c=R+(I<<2)|0;ta=i-O|0;D:{if(ta>>>0>=d+v>>>0){va(f,q[c>>2],d);v=(q[f+20>>2]+z(q[f+28>>2])|0)-32|0;k=q[c>>2];break D}q[c>>2]=0;k=0}c=I+1|0;if((D|0)==(c|0)){break C}ha=N?4:5;i=k;while(1){d=R+(c<<2)|0;E:{if(ta>>>0>=v+ha>>>0){va(f,q[d>>2]^i,ha);i=q[d>>2];k=k|i;v=(q[f+20>>2]+z(q[f+28>>2])|0)-32|0;break E}q[d>>2]=i}c=c+1|0;if((D|0)!=(c|0)){continue}break}}F:{if(!O){break F}d=(F<<3)+1152|0;c=N<<2;if(r[d+(c+k|0)|0]==r[d+((c|2)+k|0)|0]){break F}va(f,b,1);K=b<<1}if(!da){b=(N<<2)+K|0;d=(F<<3)+1152|0;c=I;while(1){i=R+(c<<2)|0;q[i>>2]=o[d+(b+q[i>>2]|0)|0];c=c+1|0;if((D|0)!=(c|0)){continue}break}}d=a+100|0;if(((q[f+20>>2]+z(q[f+28>>2])|0)-28|0)<=(J|0)){G:{if(q[a+64>>2]){c=2;q[a+80>>2]=2;q[a+100>>2]=0;break G}b=a;H:{I:{J:{if(I){if(!q[a+24>>2]){break I}if(N){break J}c=3;break H}c=q[a+24>>2];if(!((c|0)>2?!((w(t,10)|0)>(l|0)|Y):0)){if(!c){break I}break J}c=kd(H,S,a+88|0,q[a+80>>2],a+96|0,d,(oa|0)!=0,W,t,L,ra);break H}c=2;break H}c=0}q[b+80>>2]=c}ma(f,c,39832,5)}if(q[a+64>>2]){q[P>>2]=(n|0)>26?8:(n|0)/3|0}L=pa-((Q<<2)+15&-16)|0;W=L;ca=L;$b(H,L,F,t);J=J<<3;d=0;v=wa(f);if(!da){l=6;n=I;while(1){c=n;n=c+1|0;i=c<<2;k=i+P|0;b=0;K:{if(((l<<3)+v|0)>=(J-d|0)){break K}L:{O=i+L|0;if(q[O>>2]<=0){i=0;break L}c=w(p[(n<<1)+X>>1]-p[(c<<1)+X>>1]|0,t)<48?c:48;K=(c|0)>(i|0)?i:c;i=l;c=0;while(1){oa=q[k>>2];va(f,(oa|0)>(c|0),i);v=wa(f);if((c|0)>=(oa|0)){i=c;break L}b=b+K|0;d=d+K|0;if((v+8|0)<(J-d|0)){i=1;c=c+1|0;if(q[O>>2]<=(b|0)){break L}continue}break}l=(l|0)>2?l-1|0:2;break K}if(!i){break K}l=(l|0)>2?l-1|0:2}q[k>>2]=b;if((D|0)!=(n|0)){continue}break}}if((t|0)==2){if(F){b=q[H+32>>2];k=s[b>>1];g=x(1.0000000036274937e-15);i=0;m=x(1.0000000036274937e-15);while(1){c=k<<16>>16<>1];l=k<>2];j=u[S+(c+U<<2)>>2];m=x(m+x(x(y(x(h+j)))+x(y(x(h-j)))));g=x(g+x(x(y(h))+x(y(j))));c=c+1|0;if((l|0)!=(c|0)){continue}break}}if((i|0)!=13){continue}break}b=p[b+26>>1]<>2]=x(x(m*x(.7071070075035095))*x(b+(F>>>0<2?5:13)|0))>x(g*x(b|0))}b=nd(x((Z|0)/1e3|0),q[a+232>>2]);b=(b|0)<(I|0)?I:b;q[a+232>>2]=(b|0)>(D|0)?D:b}i=5;if((v+48|0)<=(J-d|0)){b=f;M:{if(!(q[a+64>>2]?0:(I|0)<=0)){q[a+228>>2]=0;i=5;break M}g=x(4);N:{if((Z|0)<64e3){break N}g=x(5);if((Z|0)>79999){break N}g=x(x(x(Z-64e3>>10)*x(.0625))+x(4))}Na=u[E+12>>2];if((t|0)==2){n=q[a+232>>2];l=q[H+32>>2];i=s[l>>1];h=x(0);k=0;while(1){c=i<<16;j=x(0);k=k+1|0;i=p[l+(k<<1)>>1];c=c>>16;v=i-c<=1){c=c<>2]*u[K+X>>2]));c=c+1|0;if((v|0)!=(c|0)){continue}break}}h=x(h+j);if((k|0)!=8){continue}break}m=x(A(x(y(x(h*x(.125)))),x(1)));h=m;if((n|0)>=9){i=s[l+16>>1];k=8;h=m;while(1){c=i<<16;j=x(0);k=k+1|0;i=p[l+(k<<1)>>1];c=c>>16;v=i-c<=1){c=c<>2]*u[K+X>>2]));c=c+1|0;if((v|0)!=(c|0)){continue}break}}j=x(y(j));h=h>2]+x(.25));m=x(Ba*1.4426950408889634);j=x(m*x(.5));Qa=x(Aa*1.4426950408889634);j=x((j>Qa?j:Qa)*x(-.5));u[a+228>>2]=h=2){n=w(q[H+8>>2],k);c=0;while(1){j=x(j+x(u[(c+n<<2)+e>>2]*x(l+(c<<1)|0)));c=c+1|0;if((i|0)!=(c|0)){continue}break}}k=k+1|0;if((xa|0)!=(k|0)){continue}break}m=g;g=x(x(x(j/x(w(i,t)|0))+x(1))/x(6));c=g>x(2);e=g>2]){m=g;g=x(u[a+128>>2]+x(.05000000074505806));g=x(g+g);c=g>x(2);e=g0?c:0}ma(b,i,40020,7);v=wa(f)}if((ea|0)>=1){c=q[H+36>>2];if(I){b=(w(t,-72)+ea|0)-32|0;b=(b|0)>0?b:0}else{b=ea-(na<<3)|0}X=c-F|0;K=q[a+52>>2];b=K?(q[a+216>>2]>>X)+b|0:b;c=1275>>>fa|0;M=(c|0)>(M|0)?M:c;pa=M;P:{Q:{R:{if(!I){J=q[H+32>>2];c=q[a+92>>2];ua=q[H+8>>2];l=c?c:ua;c=p[J+(l<<1)>>1];n=q[a+232>>2];O=q[a+236>>2];fa=q[a+64>>2];g=u[a+228>>2];h=u[E+12>>2];ha=q[E+8>>2];if((t|0)==2){c=c+p[J+(((l|0)>(n|0)?n:l)<<1)>>1]|0}k=c<>2];c=b;S:{if(!na){break S}m=u[a+136>>2];c=b;if(+m<.4^1){break S}c=b;m=x(x(x(.4000000059604645)-m)*x(k<<3));T:{if(x(y(m))(n|0)?n:l;l=(p[J+(l<<1)>>1]<j?j:g;U:{if(x(y(g))>2]+x(-.15000000596046448));m=x(x(g*x(1.2000000476837158))*(m>2;k=e;g=x(Sa*x(w(p[(J+(ua<<1)|0)-4>>1]<(n|0)?l:n;e=(c|0)>(e|0)?k:c;if(!(!K|ba^1)){g=x(x(e-b|0)*x(.6700000166893005));_:{if(x(y(g))>2];c=(c+((b|0)<100?96>>>fa|0:0)|0)-((b|0)>100?144>>>fa|0:0)|0;g=u[E+12>>2];h=x(x(g+x(-.25))*x(400));$:{if(x(y(h))x(.699999988079071)?(b|0)>400?b:400:b;b=((d+v|0)+63>>6)+2|0;c=(d+ua|0)+359>>6;b=(b|0)>(c|0)?b:c;break P}c=e- -2147483648|0}e=c;b=b<<1;e=(b|0)<(e|0)?b:e;b=((d+v|0)+63>>6)+2|0}e=e+v|0;c=e+32>>6;b=(b|0)>(c|0)?b:c;c=(b|0)>(M|0)?pa:b;j=x(.0010000000474974513);b=q[a+220>>2];if((b|0)<=969){q[a+220>>2]=b+1;j=x(x(1)/x(b+21|0))}b=sa?c:2;aa:{if(!K){break aa}d=q[a+208>>2]+((sa?c<<6:128)-ea|0)|0;q[a+208>>2]=d;c=a;n=c;l=q[c+212>>2];g=x(j*x((((sa?e-ea|0:0)<>2]|0)-l|0));ba:{if(x(y(g))>2]=c;q[a+216>>2]=0-c;if((d|0)>-1){break aa}q[a+208>>2]=0;b=(sa?0-d>>>6|0:0)+b|0}M=(b|0)>(M|0)?M:b;Oa(f,M)}c=(Q<<2)+15&-16;b=W-c|0;ca=b;d=b-c|0;ca=d;e=d-c|0;fa=e;ca=e;k=0;K=H;W=I;ra=D;ba=P;ta=L;pa=i;oa=a+232|0;Ea=E+20|0;ha=M<<6;J=ha+(wa(f)^-1)|0;c=J;i=0;ca:{if(F>>>0<2){break ca}i=0;if(!N){break ca}k=(J|0)>=((F<<3)+16|0);i=k<<3}J=i;Fa=c-J|0;Ha=E+80|0;P=d;v=b;L=e;n=t;l=F;i=f;Ia=q[a+92>>2];if(q[ia>>2]){ia=q[a+152>>2];c=ia;O=13;da:{if((Z|0)<(w(t,32e3)|0)){break da}O=16;if((Z|0)<(w(t,48e3)|0)){break da}O=18;if((Z|0)<(w(t,6e4)|0)){break da}O=(Z|0)<(w(t,8e4)|0)?19:20}c=(O|0)<(ia|0)?c:O}else{c=D-1|0}l=Ob(K,W,ra,ba,ta,pa,oa,Ea,Fa,Ha,P,v,L,n,l,i,1,Ia,q[a+64>>2]?1:c);c=l;i=a;n=q[a+92>>2];if(n){c=n+1|0;n=n-1|0;n=(l|0)<(n|0)?n:l;c=(c|0)<(n|0)?c:n}q[i+92>>2]=c;xd(H,I,D,T,aa,b,f,t);i=0;c=fa-(_+15&-16)|0;ca=c;Lb(1,H,I,D,S,(t|0)==2?S+(U<<2)|0:0,c,V,d,Y,q[a+80>>2],q[E+20>>2],q[a+232>>2],R,ha-J|0,q[E+80>>2],f,F,l,a+76|0,q[a+24>>2],q[a+72>>2],q[a+68>>2]);if(k){ya(f,q[a+116>>2]<2,1)}wd(H,I,D,T,aa,b,e,(((M<<3)-q[f+20>>2]|0)-z(q[f+28>>2])|0)+32|0,f,t);b=qa<<2;e=la(Da,0,b);while(1){if(!da){l=w(i,Q);c=I;while(1){n=c+l<<2;g=u[n+aa>>2];d=g>x(.5);L=e+n|0;n=(d?x(.5):g)>2]=d?h:n?h:g;c=c+1|0;if((D|0)!=(c|0)){continue}break}}i=i+1|0;if((xa|0)!=(i|0)){continue}break}if(!((_|0)<1|sa)){c=0;while(1){q[(c<<2)+T>>2]=-1042284544;c=c+1|0;if((_|0)!=(c|0)){continue}break}}c=q[E+28>>2];q[a+112>>2]=Ga;u[a+108>>2]=La;q[a+104>>2]=c;if(za){c=Q<<2;ka(c+T|0,T,c)}ea:{if(N){c=0;if((qa|0)<=0){break ea}while(1){b=c<<2;d=b+ga|0;g=u[d>>2];h=u[b+T>>2];u[d>>2]=g>2]=0;q[b+$>>2]=-1042284544;q[b+ga>>2]=-1042284544;c=c+1|0;if((I|0)!=(c|0)){continue}break}}if((D|0)<(Q|0)){i=w(e,Q);c=D;while(1){b=c+i<<2;q[b+T>>2]=0;q[b+$>>2]=-1042284544;q[b+ga>>2]=-1042284544;c=c+1|0;if((Q|0)!=(c|0)){continue}break}}e=e+1|0;if((Ka|0)!=(e|0)){continue}break}q[a+116>>2]=!N&(Ca^-1)?0:q[a+116>>2]+1|0;q[a+76>>2]=q[f+28>>2];Zb(f);v=q[f+44>>2]?-3:M}ca=E+192|0;return v}function _e(a,b,c,d,e,f,g,h,i,j,k){var l=x(0),m=0,n=x(0),p=x(0),r=0,s=x(0),t=x(0),v=x(0),z=x(0),D=0,E=x(0),G=0,H=x(0),I=0,J=x(0),K=0,L=x(0),M=0,N=x(0),O=x(0),P=x(0),Q=x(0),R=0,S=x(0),T=x(0),U=x(0),V=x(0),W=x(0),X=x(0),Y=x(0),Z=0,_=0,$=x(0),aa=x(0),ba=x(0),da=x(0),ea=x(0),fa=x(0),ga=x(0),ha=x(0),ia=0,ja=0,la=x(0),ma=x(0),na=0,oa=0,pa=0,qa=x(0),ra=x(0),sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=x(0),za=x(0),Aa=x(0),Ba=x(0),Ca=x(0),Da=0,Ea=0,Fa=x(0),Ga=x(0);m=ca-11360|0;ca=m;if(c){r=(w(h,95)|0)/50|0;d=d&-2;ua=(d|0)>(r|0)?r:d;ia=q[a+7440>>2];ja=ua-ia|0;if((ja|0)>=1){va=a+7464|0;Da=a+3852|0;Ea=a+4812|0;wa=a+7592|0;na=a+2892|0;pa=(h|0)/50|0;l=x(x(.0005699999746866524)/x(1<<((i|0)>8?i:8)-8));qa=x(l*l);Fa=x(qa*x(3));while(1){if(!q[a+7460>>2]){q[a+7460>>2]=1;q[a+5772>>2]=240}r=(ja|0)>(pa|0)?pa:ja;oa=q[a+7436>>2];h=q[a+8>>2];a:{if((h|0)!=16e3){d=ia;if((h|0)!=48e3){break a}r=(r|0)/2|0;d=(ia|0)/2|0;break a}r=(w(r,3)|0)/2|0;d=(w(ia,3)|0)/2|0}G=q[b+72>>2];I=q[a+5772>>2];D=720-I|0;Y=x(wc(j,c,((I<<2)+a|0)+2892|0,wa,(r|0)<(D|0)?r:D,d,f,g,h)+u[a+7456>>2]);u[a+7456>>2]=Y;h=q[a+5772>>2]+r|0;b:{if((h|0)<=719){q[a+5772>>2]=h;break b}sa=oa+1|0;fa=x(x(1)/x(((oa|0)<100?sa:100)|0));D=q[a+7444>>2];q[a+7444>>2]=((D|0)>98?-99:1)+D;K=df(na,i);h=0;while(1){I=(m+5760|0)+(h<<3)|0;M=h<<2;l=u[M+40608>>2];M=M+na|0;u[I>>2]=l*u[M>>2];u[I+4>>2]=l*u[M+960>>2];I=479-h|0;M=(m+5760|0)+(I<<3)|0;u[M>>2]=l*u[(I<<2)+na>>2];u[M+4>>2]=l*u[(719-h<<2)+na>>2];h=h+1|0;if((h|0)!=240){continue}break}ka(na,Ea,960);h=q[a+5772>>2];r=h+r|0;l=wc(j,c,Da,wa,r-720|0,(d-h|0)+720|0,f,g,q[a+8>>2]);q[a+5772>>2]=r-480;u[a+7456>>2]=l;M=(D<<6)+a|0;I=M+7604|0;if(K){d=q[a+7444>>2];d=(((d|0)<2?98:-2)+d<<6)+a|0;h=d+7660|0;r=q[h+4>>2];q[I+56>>2]=q[h>>2];q[I+60>>2]=r;h=d+7652|0;r=q[h+4>>2];q[I+48>>2]=q[h>>2];q[I+52>>2]=r;h=d+7644|0;r=q[h+4>>2];q[I+40>>2]=q[h>>2];q[I+44>>2]=r;h=d+7636|0;r=q[h+4>>2];q[I+32>>2]=q[h>>2];q[I+36>>2]=r;h=d+7628|0;r=q[h+4>>2];q[I+24>>2]=q[h>>2];q[I+28>>2]=r;h=d+7620|0;r=q[h+4>>2];q[I+16>>2]=q[h>>2];q[I+20>>2]=r;h=d+7612|0;r=q[h+4>>2];q[I+8>>2]=q[h>>2];q[I+12>>2]=r;d=d+7604|0;h=q[d+4>>2];q[I>>2]=q[d>>2];q[I+4>>2]=h;break b}pg(G,m+5760|0,m+1920|0);h=1;J=u[m+1920>>2];if(J!=J){q[I>>2]=0;break b}while(1){d=((0-h<<3)+m|0)+5760|0;l=u[d>>2];r=(m+1920|0)+(h<<3)|0;p=u[r>>2];z=x(l-p);s=u[r+4>>2];N=u[d+4>>2];E=x(s+N);n=x(0);D=h<<2;r=D+a|0;K=r;L=x(p+l);l=x(L*L);s=x(s-N);p=x(s*s);v=x(0);c:{if(x(l+p)>2]);l=x(L-u[r+972>>2]);p=x(z*z);s=x(E*E);d:{if(x(p+s)s^1)){n=x((z>2]=x(y(n))+x(y(l));d=r+1932|0;z=u[d>>2];l=x(l*l);l=x(l*l);u[D+(m+1e4|0)>>2]=x(x(1)/x(x(l*x(62341.81640625))+x(1)))+x(-.014999999664723873);n=x(n*n);u[D+(m+960|0)>>2]=x(x(1)/x(x(x(x(x(z+x(n*n))+x(l+l))*x(.25))*x(62341.81640625))+x(1)))+x(-.014999999664723873);u[K+12>>2]=p;u[r+972>>2]=s;u[d>>2]=l;h=h+1|0;if((h|0)!=240){continue}break}h=2;s=u[m+10008>>2];while(1){d=h<<2;r=d+(m+960|0)|0;n=u[r>>2];p=u[(d+m|0)+9996>>2];h=h+1|0;l=u[(m+1e4|0)+(h<<2)>>2];d=p>l;D=r;r=(d?p:l)>s;p=r?s:p;p=x((d?p:r?p:l)+x(-.10000000149011612));u[D>>2]=(p>2]=0;Z=q[a+7436>>2];if(!Z){q[a+7008>>2]=1343554297;q[a+7012>>2]=1343554297;q[a+7080>>2]=-803929351;q[a+7084>>2]=-803929351;q[a+7088>>2]=-803929351;q[a+7092>>2]=-803929351;q[a+7016>>2]=1343554297;q[a+7020>>2]=1343554297;q[a+7096>>2]=-803929351;q[a+7100>>2]=-803929351;q[a+7024>>2]=1343554297;q[a+7028>>2]=1343554297;q[a+7104>>2]=-803929351;q[a+7108>>2]=-803929351;q[a+7032>>2]=1343554297;q[a+7036>>2]=1343554297;q[a+7112>>2]=-803929351;q[a+7116>>2]=-803929351;q[a+7040>>2]=1343554297;q[a+7044>>2]=1343554297;q[a+7048>>2]=1343554297;q[a+7052>>2]=1343554297;q[a+7120>>2]=-803929351;q[a+7124>>2]=-803929351;q[a+7056>>2]=1343554297;q[a+7060>>2]=1343554297;q[a+7136>>2]=-803929351;q[a+7140>>2]=-803929351;q[a+7128>>2]=-803929351;q[a+7132>>2]=-803929351;q[a+7064>>2]=1343554297;q[a+7068>>2]=1343554297;q[a+7072>>2]=1343554297;q[a+7144>>2]=-803929351;q[a+7148>>2]=-803929351;q[a+7076>>2]=1343554297}l=x(J+J);p=x(l*l);l=u[m+1924>>2];l=x(l+l);p=x(p+x(l*l));l=u[m+1928>>2];n=x(l*l);l=u[m+5752>>2];n=x(n+x(l*l));l=u[m+1932>>2];n=x(n+x(l*l));l=u[m+5756>>2];p=x(p+x(n+x(l*l)));l=u[m+1936>>2];n=x(l*l);l=u[m+5744>>2];n=x(n+x(l*l));l=u[m+1940>>2];n=x(n+x(l*l));l=u[m+5748>>2];p=x(p+x(n+x(l*l)));l=u[m+1944>>2];n=x(l*l);l=u[m+5736>>2];n=x(n+x(l*l));l=u[m+1948>>2];n=x(n+x(l*l));l=u[m+5740>>2];E=x(x(Ua(+x(x(p+x(n+x(l*l)))+x(1.000000013351432e-10))))*x(.7213475108146667));u[m+9888>>2]=E;J=x(0);d=0;h=4;L=x(0);N=x(0);S=x(0);ga=x(0);ha=x(0);O=x(0);while(1){z=x(0);H=x(0);s=x(0);D=d+1|0;K=D<<2;r=q[K+41568>>2];if((r|0)>(h|0)){while(1){G=(m+1920|0)+(h<<3)|0;l=u[G>>2];p=x(l*l);R=((0-h<<3)+m|0)+5760|0;l=u[R>>2];p=x(p+x(l*l));l=u[G+4>>2];p=x(p+x(l*l));l=u[R+4>>2];l=x(p+x(l*l));s=x(s+l);G=h<<2;H=x(H+x(l*x(B(u[G+(m+960|0)>>2],x(0)))));z=x(z+x(x(l+l)*x(x(.5)-u[m+G>>2])));h=h+1|0;if((r|0)!=(h|0)){continue}break}}if(!(s==s?!(s>2]=0;break b}G=d<<2;h=G+(w(q[a+7432>>2],72)+a|0)|0;u[h+5856>>2]=s;U=x(s+x(1.000000013351432e-10));l=x(Ua(+U));u[K+(m+9888|0)>>2]=l*x(.7213475108146667);u[G+(m+11200|0)>>2]=l;u[h+6432>>2]=l;h=a+G|0;K=h+7008|0;R=h+7080|0;g:{if(Z){_=a+G|0;p=u[_+7008>>2];n=u[_+7080>>2];break g}_=a+G|0;u[_+7080>>2]=l;u[_+7008>>2]=l;p=l;n=l}h:{if(+n>+p+7.5^1){break h}if(!(x(n-l)>x(l-p)^1)){n=x(n+x(-.009999999776482582));u[R>>2]=n;break h}p=x(p+x(.009999999776482582));u[K>>2]=p}P=x(s+x(1.0000000036274937e-15));i:{if(!(l>n^1)){u[R>>2]=l;n=x(l+x(-15));p=p>2]=p;n=l;break i}if(l>2]=l;p=x(l+x(15));n=p>2]=n;p=l}s=x(H/P);K=h+5776|0;H=u[h+5856>>2];Q=u[h+5928>>2];V=u[h+6e3>>2];W=u[h+6072>>2];X=u[h+6144>>2];$=u[h+6216>>2];aa=u[h+6288>>2];T=u[h+6360>>2];H=x(A(x(x(x(x(x(x(x(x(x(x(F(H))+x(0))+x(F(Q)))+x(F(V)))+x(F(W)))+x(F(X)))+x(F($)))+x(F(aa)))+x(F(T)))/x(F(+x(x(x(x(x(x(x(x(x(H+x(0))+Q)+V)+W)+X)+$)+aa)+T)*x(8))+1e-15))),x(.9900000095367432)));H=x(H*H);H=x(H*H);Q=x(u[K>>2]*H);s=s>Q?s:Q;u[G+(m+11280|0)>>2]=s;J=x(J+s);J=d>>>0>=9?x(J-u[(m+G|0)+11244>>2]):J;O=x(O+x(F(U)));N=x(N+x(z/P));ga=x(ga+H);ha=x(ha+x(x(l-p)/x(x(n-p)+x(9999999747378752e-21))));u[K>>2]=s;l=x(x(x(x(d-18|0)*x(.029999999329447746))+x(1))*J);L=l>2]=E;s=x(E+x(-2.5));u[m+9728>>2]=s;d=1;r=4;z=E;while(1){D=d<<2;h=q[D+41568>>2];l=x(h-r|0);p=x(x(l+l)*x(.25));l=x(z+p);n=u[D+(m+9888|0)>>2];z=l>2]=z;l=x(s-p);n=x(n+x(-2.5));s=l>n?l:n;u[D+(m+9728|0)>>2]=s;r=h;d=d+1|0;if((d|0)!=19){continue}break}d=16;r=192;l=u[m+9796>>2];s=u[m+9876>>2];while(1){h=d;D=h<<2;G=D+(m+9808|0)|0;d=r;r=q[D+41568>>2];n=x(d-r|0);n=x(x(n+n)*x(.25));p=x(s+n);s=u[G>>2];s=p>2]=s;l=x(l-n);D=D+(m+9728|0)|0;n=u[D>>2];l=l>n?l:n;u[D>>2]=l;d=h-1|0;if(h){continue}break}h=0;while(1){s=x(0);r=(h+M|0)+7648|0;d=h<<2;xa=C(+x(x(x(B(x(u[d+(m+9728|0)>>2]-E),x(0)))+x(B(x(E-x(u[d+(m+9808|0)>>2]+x(2.5))),x(0))))*x(64))+.5);j:{if(y(xa)<2147483648){d=~~xa;break j}d=-2147483648}o[r|0]=(d|0)<255?d:255;r=0;h=h+1|0;if((h|0)!=19){E=u[(m+9888|0)+(h<<2)>>2];continue}break}while(1){d=w(r,72)+a|0;n=u[d+6500>>2];p=u[d+6496>>2];z=u[d+6448>>2];E=u[d+6444>>2];J=u[d+6440>>2];H=u[d+6436>>2];P=u[d+6432>>2];U=u[d+6492>>2];Q=u[d+6488>>2];V=u[d+6484>>2];W=u[d+6480>>2];X=u[d+6476>>2];$=u[d+6472>>2];aa=u[d+6468>>2];T=u[d+6464>>2];ba=u[d+6460>>2];da=u[d+6456>>2];ea=u[d+6452>>2];l=x(999999986991104);d=0;while(1){h=w(d,72)+a|0;t=x(P-u[h+6432>>2]);v=x(x(t*t)+x(0));t=x(H-u[h+6436>>2]);v=x(v+x(t*t));t=x(J-u[h+6440>>2]);v=x(v+x(t*t));t=x(E-u[h+6444>>2]);v=x(v+x(t*t));t=x(z-u[h+6448>>2]);v=x(v+x(t*t));t=x(ea-u[h+6452>>2]);v=x(v+x(t*t));t=x(da-u[h+6456>>2]);v=x(v+x(t*t));t=x(ba-u[h+6460>>2]);v=x(v+x(t*t));t=x(T-u[h+6464>>2]);v=x(v+x(t*t));t=x(aa-u[h+6468>>2]);v=x(v+x(t*t));t=x($-u[h+6472>>2]);v=x(v+x(t*t));t=x(X-u[h+6476>>2]);v=x(v+x(t*t));t=x(W-u[h+6480>>2]);v=x(v+x(t*t));t=x(V-u[h+6484>>2]);v=x(v+x(t*t));t=x(Q-u[h+6488>>2]);v=x(v+x(t*t));t=x(U-u[h+6492>>2]);v=x(v+x(t*t));t=x(p-u[h+6496>>2]);v=x(v+x(t*t));t=x(n-u[h+6500>>2]);t=x(v+x(t*t));l=(d|0)==(r|0)?l:l>2];d=0;r=4;K=0;n=x(0);H=x(0);z=x(0);while(1){l=x(0);h=r;D=d+1|0;G=q[(D<<2)+41568>>2];if((h|0)<(G|0)){while(1){E=l;Z=(m+1920|0)+(h<<3)|0;l=u[Z>>2];v=x(l*l);_=((0-h<<3)+m|0)+5760|0;l=u[_>>2];v=x(v+x(l*l));l=u[Z+4>>2];v=x(v+x(l*l));l=u[_+4>>2];l=x(E+x(v+x(l*l)));h=h+1|0;if((G|0)!=(h|0)){continue}break}}h=d<<2;Z=(h+a|0)+7152|0;E=x(J*u[Z>>2]);E=l>2]=E;n=lE?l:E)?D:K}r=d>>>0<11;H=r?x(H+l):H;z=r?z:x(z+l);q[h+(m+10960|0)>>2]=x(p*((d|0)<(R|0)?x(.009999999776482582):x(.05000000074505806)))>l;p=x(p*x(.05000000074505806));p=l>2]==48e3){n=x(J*u[a+7224>>2]);l=x(Y*x(.00027777778450399637));n=l>2]=n;d=(R|0)==20;E=d?x(10):x(30);K=(l>x(x(qa*E)*x(160))^1?!(x(x(qa*x(E*x(3)))*x(160))<(l>n?l:n)):0)?K:20;q[m+11032>>2]=l>2]=z>H?x(H/z):x(1);k:{if((K|0)==20){K=q[m+11032>>2]?18:20;break k}d=K-1|0;if(d>>>0>17){break k}K=q[(m+10960|0)+(d<<2)>>2]?d:K}Ga=x(F(p));s=x(u[a+7424>>2]+x(-.003000000026077032));p=x(x(db(+O))*x(20));s=p>2]=s;z=l;l=x(x(x(1)-l)*u[a+7428>>2]);u[a+7428>>2]=p>2];d=0;l=u[m+11204>>2];p=u[m+11200>>2];s=u[m+11260>>2];z=u[m+11256>>2];E=u[m+11252>>2];J=u[m+11248>>2];H=u[m+11244>>2];O=u[m+11240>>2];P=u[m+11236>>2];Y=u[m+11232>>2];fa=u[m+11228>>2];U=u[m+11224>>2];Q=u[m+11220>>2];V=u[m+11216>>2];W=u[m+11212>>2];X=u[m+11208>>2];while(1){h=d<<6;u[(m+11168|0)+(d<<2)>>2]=x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(p*u[h+41648>>2])+x(0))+x(l*u[(h|4)+41648>>2]))+x(X*u[(h|8)+41648>>2]))+x(W*u[(h|12)+41648>>2]))+x(V*u[(h|16)+41648>>2]))+x(Q*u[(h|20)+41648>>2]))+x(U*u[(h|24)+41648>>2]))+x(fa*u[(h|28)+41648>>2]))+x(Y*u[(h|32)+41648>>2]))+x(P*u[(h|36)+41648>>2]))+x(O*u[(h|40)+41648>>2]))+x(H*u[(h|44)+41648>>2]))+x(J*u[(h|48)+41648>>2]))+x(E*u[(h|52)+41648>>2]))+x(z*u[(h|56)+41648>>2]))+x(s*u[(h|60)+41648>>2]);d=d+1|0;if((d|0)!=8){continue}break}r=0;while(1){d=r<<4;l=x(0);h=0;while(1){G=(h<<2)+a|0;l=x(l+x(x(u[(d+h<<2)+41648>>2]*x(.5))*x(u[G+7080>>2]+u[G+7008>>2])));h=h+1|0;if((h|0)!=16){continue}break}u[(m+9968|0)+(r<<2)>>2]=l;r=r+1|0;if((r|0)!=8){continue}break}H=x(N/x(18));u[ta>>2]=H+x(x(x(1)-H)*((D|0)<10?x(.5):x(ha/x(18))));l=x(L/x(9));p=x(u[a+5848>>2]*x(.800000011920929));l=l>p?l:p;u[a+5848>>2]=l;h=M+7612|0;u[h>>2]=S*x(.015625);r=(D|0)<9999?D+1|0:1e4;q[a+7436>>2]=r;q[a+7432>>2]=(q[a+7432>>2]+1|0)%8;G=M+7608|0;u[G>>2]=l;ha=u[a+7260>>2];P=u[a+7228>>2];Y=u[a+7292>>2];J=x(P+Y);p=u[m+11168>>2];t=u[a+7324>>2];T=x(p+t);ba=u[a+7356>>2];L=x(x(x(ha*x(.6969299912452698))+x(x(J*x(.49195000529289246))-x(T*x(.12298999726772308))))-x(ba*x(1.4349000453948975)));u[m+11056>>2]=L;fa=u[a+7264>>2];U=u[a+7232>>2];Q=u[a+7296>>2];da=x(U+Q);s=u[m+11172>>2];ea=u[a+7328>>2];la=x(s+ea);ma=u[a+7360>>2];N=x(x(x(fa*x(.6969299912452698))+x(x(da*x(.49195000529289246))-x(la*x(.12298999726772308))))-x(ma*x(1.4349000453948975)));u[m+11060>>2]=N;V=u[a+7268>>2];W=u[a+7236>>2];X=u[a+7300>>2];ra=x(W+X);z=u[m+11176>>2];ya=u[a+7332>>2];za=x(z+ya);Aa=u[a+7364>>2];S=x(x(x(V*x(.6969299912452698))+x(x(ra*x(.49195000529289246))-x(za*x(.12298999726772308))))-x(Aa*x(1.4349000453948975)));u[m+11064>>2]=S;Ba=u[a+7272>>2];$=u[a+7240>>2];aa=u[a+7304>>2];E=u[m+11180>>2];Ca=u[a+7336>>2];l=u[a+7368>>2];O=x(x(x(Ba*x(.6969299912452698))+x(x(x($+aa)*x(.49195000529289246))-x(x(E+Ca)*x(.12298999726772308))))-x(l*x(1.4349000453948975)));u[m+11068>>2]=O;v=l;l=x(x(1)-n);u[a+7368>>2]=x(n*E)+x(v*l);u[a+7364>>2]=x(n*z)+x(l*Aa);u[a+7360>>2]=x(n*s)+x(l*ma);u[a+7356>>2]=x(n*p)+x(l*ba);u[m+11096>>2]=x(x(za*x(.5345199704170227))-x(ra*x(.26725998520851135)))-x(V*x(.5345199704170227));u[m+11092>>2]=x(x(la*x(.5345199704170227))-x(da*x(.26725998520851135)))-x(fa*x(.5345199704170227));T=x(x(x(T*x(.5345199704170227))-x(J*x(.26725998520851135)))-x(ha*x(.5345199704170227)));u[m+11088>>2]=T;ba=x(x(x(E-Ca)*x(.6324599981307983))+x(x($-aa)*x(.31622999906539917)));u[m+11084>>2]=ba;da=x(x(x(z-ya)*x(.6324599981307983))+x(x(W-X)*x(.31622999906539917)));u[m+11080>>2]=da;ea=x(x(x(s-ea)*x(.6324599981307983))+x(x(U-Q)*x(.31622999906539917)));u[m+11076>>2]=ea;t=x(x(x(p-t)*x(.6324599981307983))+x(x(P-Y)*x(.31622999906539917)));u[m+11072>>2]=t;d=(D|0)<3?20:K;ra=x(ga/x(18));J=u[a+7388>>2];l:{if((r|0)<=5){L=u[a+7420>>2];N=u[a+7412>>2];S=u[a+7408>>2];ga=u[a+7404>>2];O=u[a+7400>>2];la=u[a+7396>>2];ma=u[a+7392>>2];break l}J=x(x(L*x(n*L))+x(l*J));u[a+7388>>2]=J;ma=x(x(N*x(n*N))+x(l*u[a+7392>>2]));u[a+7392>>2]=ma;la=x(x(S*x(n*S))+x(l*u[a+7396>>2]));u[a+7396>>2]=la;O=x(x(O*x(n*O))+x(l*u[a+7400>>2]));u[a+7400>>2]=O;ga=x(x(t*x(n*t))+x(l*u[a+7404>>2]));u[a+7404>>2]=ga;S=x(x(ea*x(n*ea))+x(l*u[a+7408>>2]));u[a+7408>>2]=S;N=x(x(da*x(n*da))+x(l*u[a+7412>>2]));u[a+7412>>2]=N;u[a+7416>>2]=x(ba*x(n*ba))+x(l*u[a+7416>>2]);L=x(x(T*x(n*T))+x(l*u[a+7420>>2]));u[a+7420>>2]=L}u[m+11056>>2]=p-u[m+9968>>2];u[m+11060>>2]=s-u[m+9972>>2];u[m+11064>>2]=z-u[m+9976>>2];u[m+11068>>2]=E-u[m+9980>>2];u[a+7260>>2]=P;u[a+7328>>2]=Q;u[a+7228>>2]=p;u[a+7296>>2]=fa;u[a+7264>>2]=U;u[a+7332>>2]=X;u[a+7232>>2]=s;u[a+7300>>2]=V;u[a+7268>>2]=W;u[a+7336>>2]=aa;u[a+7236>>2]=z;u[a+7304>>2]=Ba;u[a+7272>>2]=$;u[a+7240>>2]=E;u[a+7324>>2]=Y;u[a+7292>>2]=ha;l=u[a+7308>>2];u[a+7308>>2]=u[a+7276>>2];u[a+7340>>2]=l;u[a+7276>>2]=u[a+7244>>2];u[a+7244>>2]=u[m+11184>>2];u[a+7344>>2]=u[a+7312>>2];u[a+7312>>2]=u[a+7280>>2];u[a+7280>>2]=u[a+7248>>2];u[a+7248>>2]=u[m+11188>>2];u[a+7348>>2]=u[a+7316>>2];u[a+7316>>2]=u[a+7284>>2];u[a+7284>>2]=u[a+7252>>2];u[a+7252>>2]=u[m+11192>>2];u[a+7352>>2]=u[a+7320>>2];u[a+7320>>2]=u[a+7288>>2];u[a+7288>>2]=u[a+7256>>2];u[a+7256>>2]=u[m+11196>>2];u[m+11132>>2]=x(F(L))+x(-1.9187949895858765);u[m+11124>>2]=x(F(N))+x(-1.260756015777588);u[m+11120>>2]=x(F(S))+x(-2.1633129119873047);u[m+11116>>2]=x(F(ga))+x(-3.7732150554656982);u[m+11112>>2]=x(F(O))+x(-1.599784016609192);u[m+11108>>2]=x(F(la))+x(-1.7706340551376343);u[m+11104>>2]=x(F(ma))+x(-3.475287914276123);u[m+11100>>2]=x(F(J))+x(-5.6849470138549805);u[m+11128>>2]=Ga+x(-.7799999713897705);u[m+11136>>2]=u[G>>2]+x(-.15472300350666046);l=u[ta>>2];u[m+11144>>2]=ra+x(-.7437170147895813);u[m+11140>>2]=l+x(-.7246429920196533);u[m+11148>>2]=u[h>>2]+x(.06921599805355072);u[m+11152>>2]=u[a+7428>>2]+x(-.06792999804019928);vc(43808,m+9600|0,m+11056|0);Ze(va,m+9600|0);vc(48032,m+11048|0,va);u[M+7640>>2]=u[m+11052>>2];l=u[m+11048>>2];q[M+7636>>2]=d;u[M+7624>>2]=l;q[a+5852>>2]=d;u[M+7616>>2]=H;q[I>>2]=1}ia=ia+pa|0;ja=ja-pa|0;if((ja|0)>0){continue}break}}q[a+7440>>2]=ua-e}$e(a,k,e);ca=m+11360|0}function Ra(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=ca-16|0;ca=m;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{k:{l:{m:{if(a>>>0<=244){h=q[14673];g=a>>>0<11?16:a+11&-8;a=g>>>3|0;b=h>>>a|0;if(b&3){c=a+((b^-1)&1)|0;e=c<<3;b=q[e+58740>>2];a=b+8|0;d=q[b+8>>2];e=e+58732|0;n:{if((d|0)==(e|0)){n=58692,o=Ag(-2,c)&h,q[n>>2]=o;break n}q[d+12>>2]=e;q[e+8>>2]=d}c=c<<3;q[b+4>>2]=c|3;b=b+c|0;q[b+4>>2]=q[b+4>>2]|1;break a}f=q[14675];if(f>>>0>=g>>>0){break m}if(b){c=2<>>12&16;c=b;a=a>>>b|0;b=a>>>5&8;c=c|b;a=a>>>b|0;b=a>>>2&4;c=c|b;a=a>>>b|0;b=a>>>1&2;c=c|b;a=a>>>b|0;b=a>>>1&1;c=(c|b)+(a>>>b|0)|0;d=c<<3;b=q[d+58740>>2];a=q[b+8>>2];d=d+58732|0;o:{if((a|0)==(d|0)){h=Ag(-2,c)&h;q[14673]=h;break o}q[a+12>>2]=d;q[d+8>>2]=a}a=b+8|0;q[b+4>>2]=g|3;i=b+g|0;c=c<<3;e=c-g|0;q[i+4>>2]=e|1;q[b+c>>2]=e;if(f){c=f>>>3|0;b=(c<<3)+58732|0;d=q[14678];c=1<>2]}q[b+8>>2]=d;q[c+12>>2]=d;q[d+12>>2]=b;q[d+8>>2]=c}q[14678]=i;q[14675]=e;break a}k=q[14674];if(!k){break m}a=(k&0-k)-1|0;b=a>>>12&16;c=b;a=a>>>b|0;b=a>>>5&8;c=c|b;a=a>>>b|0;b=a>>>2&4;c=c|b;a=a>>>b|0;b=a>>>1&2;c=c|b;a=a>>>b|0;b=a>>>1&1;d=q[((c|b)+(a>>>b|0)<<2)+58996>>2];c=(q[d+4>>2]&-8)-g|0;b=d;while(1){q:{a=q[b+16>>2];if(!a){a=q[b+20>>2];if(!a){break q}}e=(q[a+4>>2]&-8)-g|0;b=e>>>0>>0;c=b?e:c;d=b?a:d;b=a;continue}break}l=d+g|0;if(l>>>0<=d>>>0){break l}j=q[d+24>>2];e=q[d+12>>2];if((e|0)!=(d|0)){a=q[d+8>>2];q[a+12>>2]=e;q[e+8>>2]=a;break b}b=d+20|0;a=q[b>>2];if(!a){a=q[d+16>>2];if(!a){break k}b=d+16|0}while(1){i=b;e=a;b=a+20|0;a=q[b>>2];if(a){continue}b=e+16|0;a=q[e+16>>2];if(a){continue}break}q[i>>2]=0;break b}g=-1;if(a>>>0>4294967231){break m}a=a+11|0;g=a&-8;h=q[14674];if(!h){break m}i=31;if(g>>>0<=16777215){b=a>>>8|0;a=b+1048320>>>16&8;c=b<>>16&4;d=c<>>16&2;a=(d<>>15|0)-(c|(a|b))|0;i=(a<<1|g>>>a+21&1)+28|0}c=0-g|0;b=q[(i<<2)+58996>>2];r:{s:{t:{if(!b){a=0;break t}a=0;d=g<<((i|0)==31?0:25-(i>>>1|0)|0);while(1){u:{f=(q[b+4>>2]&-8)-g|0;if(f>>>0>=c>>>0){break u}e=b;c=f;if(c){break u}c=0;a=b;break s}f=q[b+20>>2];b=q[((d>>>29&4)+b|0)+16>>2];a=f?(f|0)==(b|0)?a:f:a;d=d<<1;if(b){continue}break}}if(!(a|e)){a=2<>>12&16;d=b;a=a>>>b|0;b=a>>>5&8;d=d|b;a=a>>>b|0;b=a>>>2&4;d=d|b;a=a>>>b|0;b=a>>>1&2;d=d|b;a=a>>>b|0;b=a>>>1&1;a=q[((d|b)+(a>>>b|0)<<2)+58996>>2]}if(!a){break r}}while(1){d=(q[a+4>>2]&-8)-g|0;b=d>>>0>>0;c=b?d:c;e=b?a:e;b=q[a+16>>2];if(b){a=b}else{a=q[a+20>>2]}if(a){continue}break}}if(!e|q[14675]-g>>>0<=c>>>0){break m}f=e+g|0;if(f>>>0<=e>>>0){break l}j=q[e+24>>2];d=q[e+12>>2];if((e|0)!=(d|0)){a=q[e+8>>2];q[a+12>>2]=d;q[d+8>>2]=a;break c}b=e+20|0;a=q[b>>2];if(!a){a=q[e+16>>2];if(!a){break j}b=e+16|0}while(1){i=b;d=a;b=a+20|0;a=q[b>>2];if(a){continue}b=d+16|0;a=q[d+16>>2];if(a){continue}break}q[i>>2]=0;break c}b=q[14675];if(b>>>0>=g>>>0){a=q[14678];c=b-g|0;v:{if(c>>>0>=16){q[14675]=c;d=a+g|0;q[14678]=d;q[d+4>>2]=c|1;q[a+b>>2]=c;q[a+4>>2]=g|3;break v}q[14678]=0;q[14675]=0;q[a+4>>2]=b|3;b=a+b|0;q[b+4>>2]=q[b+4>>2]|1}a=a+8|0;break a}c=q[14676];if(c>>>0>g>>>0){b=c-g|0;q[14676]=b;a=q[14679];c=a+g|0;q[14679]=c;q[c+4>>2]=b|1;q[a+4>>2]=g|3;a=a+8|0;break a}a=0;f=g+47|0;d=f;if(q[14791]){b=q[14793]}else{q[14794]=-1;q[14795]=-1;q[14792]=4096;q[14793]=4096;q[14791]=m+12&-16^1431655768;q[14796]=0;q[14784]=0;b=4096}i=d+b|0;j=0-b|0;d=i&j;if(d>>>0<=g>>>0){break a}e=q[14783];if(e){h=q[14781];b=h+d|0;if(b>>>0<=h>>>0|b>>>0>e>>>0){break a}}if(r[59136]&4){break f}w:{e=q[14679];if(e){k=g+48|0;a=59140;while(1){b=q[a>>2];if(e>>>0>=b>>>0){h=q[a+4>>2];if(e>>>0>>0){break w}}a=q[a+8>>2];if(a){continue}break}}a=Jg();x:{c=q[14650];if(c>>>0<=a<<16>>>0){break x}if(L(c|0)|0){break x}q[14656]=48;break g}q[14650]=c;if((c|0)==-1){break g}i=d;a=q[14792];b=a-1|0;if(b&c){i=(d-c|0)+(b+c&0-a)|0}if(i>>>0>2147483646|g>>>0>=i>>>0){break g}b=q[14783];if(b){e=q[14781];a=e+i|0;if(a>>>0<=e>>>0|a>>>0>b>>>0){break g}}b=i+3&-4;a=b+c|0;y:{if(a>>>0<=c>>>0?(b|0)>=1:0){break y}if(a>>>0>Jg()<<16>>>0){if(!(L(a|0)|0)){break y}}q[14650]=a;break e}q[14656]=48;if((c|0)!=-1){break g}break e}i=j&i-c;if(i>>>0>2147483646){break g}c=q[14650];j=i+3&-4;e=c+j|0;if(c>>>0>=e>>>0?(j|0)>=1:0){break i}if(e>>>0>Jg()<<16>>>0){if(!(L(e|0)|0)){break i}h=q[a+4>>2];b=q[a>>2]}q[14650]=e;if((b+h|0)==(c|0)){if((c|0)==-1){break g}break e}if(!((c|0)==-1|i>>>0>=k>>>0)){a=q[14793];e=a+(f-i|0)&0-a;if(e>>>0>2147483646){break e}b=q[14650];f=e+3&-4;a=b+f|0;z:{if((f|0)<1|a>>>0>b>>>0){if(Jg()<<16>>>0>=a>>>0){break z}if(L(a|0)|0){break z}a=q[14650]}else{a=b}q[14656]=48;break h}q[14650]=a;if((b|0)==-1){break h}i=e+i|0;break e}if((c|0)!=-1){break e}break g}G()}e=0;break b}d=0;break c}q[14656]=48;break g}c=3-i&-4;b=c+a|0;A:{if(a>>>0>=b>>>0?(c|0)>=1:0){break A}if(b>>>0>Jg()<<16>>>0){if(!(L(b|0)|0)){break A}}q[14650]=b;break g}q[14656]=48}q[14784]=q[14784]|4}if(d>>>0>2147483646){break d}c=q[14650];b=d+3&-4;a=c+b|0;B:{C:{if((b|0)<1|a>>>0>c>>>0){if(Jg()<<16>>>0>=a>>>0){break C}if(L(a|0)|0){break C}a=q[14650]}else{a=c}q[14656]=48;c=-1;break B}q[14650]=a}if(Jg()<<16>>>0>>0){if(!(L(a|0)|0)){break d}}q[14650]=a;if((c|0)==-1|a>>>0<=c>>>0|(a|0)==-1){break d}i=a-c|0;if(i>>>0<=g+40>>>0){break d}}a=q[14781]+i|0;q[14781]=a;if(a>>>0>t[14782]){q[14782]=a}D:{E:{F:{f=q[14679];if(f){a=59140;while(1){b=q[a>>2];d=q[a+4>>2];if((b+d|0)==(c|0)){break F}a=q[a+8>>2];if(a){continue}break}break E}a=q[14677];if(!(a>>>0<=c>>>0?a:0)){q[14677]=c}a=0;q[14786]=i;q[14785]=c;q[14681]=-1;q[14682]=q[14791];q[14788]=0;while(1){b=a<<3;d=b+58732|0;q[b+58740>>2]=d;q[b+58744>>2]=d;a=a+1|0;if((a|0)!=32){continue}break}a=i-40|0;b=c+8&7?-8-c&7:0;d=a-b|0;q[14676]=d;b=b+c|0;q[14679]=b;q[b+4>>2]=d|1;q[(a+c|0)+4>>2]=40;q[14680]=q[14795];break D}if(q[a+12>>2]&8|(c>>>0<=f>>>0|b>>>0>f>>>0)){break E}q[a+4>>2]=d+i;a=f+8&7?-8-f&7:0;b=a+f|0;q[14679]=b;c=q[14676]+i|0;a=c-a|0;q[14676]=a;q[b+4>>2]=a|1;q[(c+f|0)+4>>2]=40;q[14680]=q[14795];break D}e=q[14677];if(e>>>0>c>>>0){q[14677]=c;e=0}b=c+i|0;a=59140;G:{H:{I:{J:{K:{L:{while(1){if((b|0)!=q[a>>2]){a=q[a+8>>2];if(a){continue}break L}break}if(!(r[a+12|0]&8)){break K}}a=59140;while(1){b=q[a>>2];if(b>>>0<=f>>>0){d=b+q[a+4>>2]|0;if(d>>>0>f>>>0){break J}}a=q[a+8>>2];continue}}q[a>>2]=c;q[a+4>>2]=q[a+4>>2]+i;j=(c+8&7?-8-c&7:0)+c|0;q[j+4>>2]=g|3;h=b+(b+8&7?-8-b&7:0)|0;d=(h-j|0)-g|0;g=g+j|0;if((f|0)==(h|0)){q[14679]=g;a=q[14676]+d|0;q[14676]=a;q[g+4>>2]=a|1;break H}if(q[14678]==(h|0)){q[14678]=g;a=q[14675]+d|0;q[14675]=a;q[g+4>>2]=a|1;q[a+g>>2]=a;break H}a=q[h+4>>2];if((a&3)==1){f=a&-8;M:{if(a>>>0<=255){c=a>>>3|0;a=q[h+8>>2];b=q[h+12>>2];if((b|0)==(a|0)){n=58692,o=q[14673]&Ag(-2,c),q[n>>2]=o;break M}q[a+12>>2]=b;q[b+8>>2]=a;break M}i=q[h+24>>2];b=q[h+12>>2];N:{if((h|0)!=(b|0)){a=q[h+8>>2];q[a+12>>2]=b;q[b+8>>2]=a;break N}O:{a=h+20|0;c=q[a>>2];if(c){break O}a=h+16|0;c=q[a>>2];if(c){break O}b=0;break N}while(1){e=a;b=c;a=b+20|0;c=q[a>>2];if(c){continue}a=b+16|0;c=q[b+16>>2];if(c){continue}break}q[e>>2]=0}if(!i){break M}a=q[h+28>>2];c=(a<<2)+58996|0;P:{if(q[c>>2]==(h|0)){q[c>>2]=b;if(b){break P}n=58696,o=q[14674]&Ag(-2,a),q[n>>2]=o;break M}q[i+(q[i+16>>2]==(h|0)?16:20)>>2]=b;if(!b){break M}}q[b+24>>2]=i;a=q[h+16>>2];if(a){q[b+16>>2]=a;q[a+24>>2]=b}a=q[h+20>>2];if(!a){break M}q[b+20>>2]=a;q[a+24>>2]=b}h=f+h|0;d=d+f|0}q[h+4>>2]=q[h+4>>2]&-2;q[g+4>>2]=d|1;q[d+g>>2]=d;if(d>>>0<=255){b=d>>>3|0;a=(b<<3)+58732|0;c=q[14673];b=1<>2]}q[a+8>>2]=g;q[b+12>>2]=g;q[g+12>>2]=a;q[g+8>>2]=b;break H}a=31;if(d>>>0<=16777215){b=d>>>8|0;a=b+1048320>>>16&8;c=b<>>16&4;e=c<>>16&2;a=(e<>>15|0)-(c|(a|b))|0;a=(a<<1|d>>>a+21&1)+28|0}q[g+28>>2]=a;q[g+16>>2]=0;q[g+20>>2]=0;b=(a<<2)+58996|0;c=q[14674];e=1<>2]=g;q[g+24>>2]=b;break R}a=d<<((a|0)==31?0:25-(a>>>1|0)|0);b=q[b>>2];while(1){c=b;if((q[b+4>>2]&-8)==(d|0)){break I}b=a>>>29|0;a=a<<1;e=c+(b&4)|0;b=q[e+16>>2];if(b){continue}break}q[e+16>>2]=g;q[g+24>>2]=c}q[g+12>>2]=g;q[g+8>>2]=g;break H}a=i-40|0;b=c+8&7?-8-c&7:0;e=a-b|0;q[14676]=e;b=b+c|0;q[14679]=b;q[b+4>>2]=e|1;q[(a+c|0)+4>>2]=40;q[14680]=q[14795];a=(d+(d-39&7?39-d&7:0)|0)-47|0;b=a>>>0>>0?f:a;q[b+4>>2]=27;a=q[14788];q[b+16>>2]=q[14787];q[b+20>>2]=a;a=q[14786];q[b+8>>2]=q[14785];q[b+12>>2]=a;q[14787]=b+8;q[14786]=i;q[14785]=c;q[14788]=0;a=b+24|0;while(1){q[a+4>>2]=7;c=a+8|0;a=a+4|0;if(c>>>0>>0){continue}break}if((b|0)==(f|0)){break D}q[b+4>>2]=q[b+4>>2]&-2;c=b-f|0;q[f+4>>2]=c|1;q[b>>2]=c;if(c>>>0<=255){b=c>>>3|0;a=(b<<3)+58732|0;c=q[14673];b=1<>2]}q[a+8>>2]=f;q[b+12>>2]=f;q[f+12>>2]=a;q[f+8>>2]=b;break D}a=31;q[f+16>>2]=0;q[f+20>>2]=0;if(c>>>0<=16777215){b=c>>>8|0;a=b+1048320>>>16&8;d=b<>>16&4;e=d<>>16&2;a=(e<>>15|0)-(d|(a|b))|0;a=(a<<1|c>>>a+21&1)+28|0}q[f+28>>2]=a;b=(a<<2)+58996|0;d=q[14674];e=1<>2]=f;break T}a=c<<((a|0)==31?0:25-(a>>>1|0)|0);d=q[b>>2];while(1){b=d;if((c|0)==(q[b+4>>2]&-8)){break G}d=a>>>29|0;a=a<<1;e=(d&4)+b|0;d=q[e+16>>2];if(d){continue}break}q[e+16>>2]=f}q[f+24>>2]=b;q[f+12>>2]=f;q[f+8>>2]=f;break D}a=q[c+8>>2];q[a+12>>2]=g;q[c+8>>2]=g;q[g+24>>2]=0;q[g+12>>2]=c;q[g+8>>2]=a}a=j+8|0;break a}a=q[b+8>>2];q[a+12>>2]=f;q[b+8>>2]=f;q[f+24>>2]=0;q[f+12>>2]=b;q[f+8>>2]=a}a=q[14676];if(a>>>0<=g>>>0){break d}b=a-g|0;q[14676]=b;a=q[14679];c=a+g|0;q[14679]=c;q[c+4>>2]=b|1;q[a+4>>2]=g|3;a=a+8|0;break a}a=0;q[14656]=48;break a}U:{if(!j){break U}a=q[e+28>>2];b=(a<<2)+58996|0;V:{if(q[b>>2]==(e|0)){q[b>>2]=d;if(d){break V}h=Ag(-2,a)&h;q[14674]=h;break U}q[j+(q[j+16>>2]==(e|0)?16:20)>>2]=d;if(!d){break U}}q[d+24>>2]=j;a=q[e+16>>2];if(a){q[d+16>>2]=a;q[a+24>>2]=d}a=q[e+20>>2];if(!a){break U}q[d+20>>2]=a;q[a+24>>2]=d}W:{if(c>>>0<=15){a=c+g|0;q[e+4>>2]=a|3;a=a+e|0;q[a+4>>2]=q[a+4>>2]|1;break W}q[e+4>>2]=g|3;q[f+4>>2]=c|1;q[c+f>>2]=c;if(c>>>0<=255){b=c>>>3|0;a=(b<<3)+58732|0;c=q[14673];b=1<>2]}q[a+8>>2]=f;q[b+12>>2]=f;q[f+12>>2]=a;q[f+8>>2]=b;break W}a=31;if(c>>>0<=16777215){b=c>>>8|0;a=b+1048320>>>16&8;d=b<>>16&4;g=d<>>16&2;a=(g<>>15|0)-(d|(a|b))|0;a=(a<<1|c>>>a+21&1)+28|0}q[f+28>>2]=a;q[f+16>>2]=0;q[f+20>>2]=0;b=(a<<2)+58996|0;Y:{d=1<>2]=f;break Z}a=c<<((a|0)==31?0:25-(a>>>1|0)|0);g=q[b>>2];while(1){b=g;if((q[b+4>>2]&-8)==(c|0)){break Y}d=a>>>29|0;a=a<<1;d=(d&4)+b|0;g=q[d+16>>2];if(g){continue}break}q[d+16>>2]=f}q[f+24>>2]=b;q[f+12>>2]=f;q[f+8>>2]=f;break W}a=q[b+8>>2];q[a+12>>2]=f;q[b+8>>2]=f;q[f+24>>2]=0;q[f+12>>2]=b;q[f+8>>2]=a}a=e+8|0;break a}_:{if(!j){break _}a=q[d+28>>2];b=(a<<2)+58996|0;$:{if(q[b>>2]==(d|0)){q[b>>2]=e;if(e){break $}n=58696,o=Ag(-2,a)&k,q[n>>2]=o;break _}q[j+(q[j+16>>2]==(d|0)?16:20)>>2]=e;if(!e){break _}}q[e+24>>2]=j;a=q[d+16>>2];if(a){q[e+16>>2]=a;q[a+24>>2]=e}a=q[d+20>>2];if(!a){break _}q[e+20>>2]=a;q[a+24>>2]=e}aa:{if(c>>>0<=15){a=c+g|0;q[d+4>>2]=a|3;a=a+d|0;q[a+4>>2]=q[a+4>>2]|1;break aa}q[d+4>>2]=g|3;q[l+4>>2]=c|1;q[c+l>>2]=c;if(f){b=f>>>3|0;a=(b<<3)+58732|0;e=q[14678];b=1<>2]}q[a+8>>2]=e;q[b+12>>2]=e;q[e+12>>2]=a;q[e+8>>2]=b}q[14678]=l;q[14675]=c}a=d+8|0}ca=m+16|0;return a|0}function Sf(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,n=0,r=0,t=0,v=0,z=x(0),A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=x(0),L=0,M=0,N=0,O=0,P=0,Q=0,R=x(0),S=x(0),T=x(0),U=x(0),V=0,W=x(0),X=x(0);m=ca-11552|0;ca=m;a:{b:{c:{d:{e:{f:{g:{h:{if(!(!(1<>>0>16)){if((j|0)<=-1){break h}if((j|0)>=3){break g}A=w(k,5);D=A+20|0;n=D<<3;t=w(i,D);i:{if((i|0)==16){if((t|0)>=1){l=t;while(1){r=l-1|0;N=(m+2720|0)+(r<<1)|0;z=zg(u[(r<<2)+a>>2]);j:{if(x(y(z))-32768?v:-32768;p[N>>1]=(v|0)<32767?v:32767;v=(l|0)>1;l=r;if(v){continue}break}}q[m+8544>>2]=0;q[m+8548>>2]=0;Rc(m+8544|0,m+8896|0,m+2720|0,t);if((A|0)<-19){break i}l=n;while(1){t=l-1|0;u[(m+10176|0)+(t<<2)>>2]=p[(m+8896|0)+(t<<1)>>1];r=(l|0)>1;l=t;if(r){continue}break}break i}if((i|0)==12){if((t|0)>=1){l=t;while(1){r=l-1|0;N=(m+2720|0)+(r<<1)|0;z=zg(u[(r<<2)+a>>2]);k:{if(x(y(z))-32768?v:-32768;p[N>>1]=(v|0)<32767?v:32767;v=(l|0)>1;l=r;if(v){continue}break}}l=m+8560|0;q[l>>2]=0;q[l+4>>2]=0;q[m+8552>>2]=0;q[m+8556>>2]=0;q[m+8544>>2]=0;q[m+8548>>2]=0;Uf(m+8544|0,m+8896|0,m+2720|0,t);if((A|0)<-19){break i}l=n;while(1){t=l-1|0;u[(m+10176|0)+(t<<2)>>2]=p[(m+8896|0)+(t<<1)>>1];r=(l|0)>1;l=t;if(r){continue}break}break i}if((i|0)!=8){break f}if((A|0)<-19){break i}l=n;while(1){t=l-1|0;v=(m+8896|0)+(t<<1)|0;z=zg(u[(t<<2)+a>>2]);l:{if(x(y(z))-32768?r:-32768;p[v>>1]=(r|0)<32767?r:32767;r=(l|0)>1;l=t;if(r){continue}break}}t=D<<2;q[m+8544>>2]=0;q[m+8548>>2]=0;Rc(m+8544|0,m+8576|0,m+8896|0,n);m:{if((A|0)<-19){break m}l=t;while(1){n=l-1|0;u[(m+9536|0)+(n<<2)>>2]=p[(m+8576|0)+(n<<1)>>1];r=(l|0)>1;l=n;if(r){continue}break}if((A|0)<-19){break m}l=t;while(1){K=u[((l<<2)+m|0)+9528>>2];n=l-1|0;r=(m+9536|0)+(n<<2)|0;z=u[r>>2];n:{if(x(y(z))x(32767)){break o}z=x(-32768);if(K>2]=A|0;r=(l|0)>2;l=n;if(r){continue}break}}r=0;la(m+6160|0,0,w(k,596));if((k|0)>=2){l=k>>1;D=(l|0)>1?l:1;v=(m+9536|0)+(t<<2)|0;l=m+9856|0;while(1){t=l+160|0;if(t>>>0>v>>>0){break e}n=l-32|0;if(n>>>0>>0){break d}if(v>>>0>>0){break c}lb(l,l-288|0,m+5888|0,40,65);z=u[m+6144>>2];F=ta(l,40)+ta(n,40)+16e4;B=+z;u[m+6192>>2]=u[m+6192>>2]+x((B+B)/F);l=9;while(1){A=(m+6160|0)+(l<<2)|0;N=A;z=u[A>>2];B=+u[((0-l<<2)+m|0)+6176>>2];V=B+B;A=n-4|0;B=+u[A>>2];O=B*B;B=+u[n+156>>2];F=F+(O-B*B);u[N>>2]=z+x(V/F);n=A;l=l+1|0;if((l|0)!=73){continue}break}l=t;r=r+1|0;if((D|0)!=(r|0)){continue}break}}A=i<<1;P=w(i,5);L=w(i,18);E=L-1|0;t=k<<2;l=72;while(1){n=(m+6160|0)+(l<<2)|0;z=u[n>>2];u[n>>2]=z+x(x(z*x(l|0))*x(-.000244140625));n=l>>>0>8;l=l-1|0;if(n){continue}break}n=(j<<1)+4|0;Tf(m+6192|0,m+5744|0,n);q:{z=u[m+6192>>2];r:{if(!(z1?n:1;l=0;while(1){r=l<<2;if(g>2]^1){n=l;break s}r=r+(m+5744|0)|0;q[r>>2]=(q[r>>2]<<1)+16;l=l+1|0;if((t|0)!=(l|0)){continue}break}}l=0;if((n|0)<=0){break b}la(m+5462|0,0,274);while(1){p[(m+5440|0)+(q[(m+5744|0)+(l<<2)>>2]<<1)>>1]=1;l=l+1|0;if((n|0)!=(l|0)){continue}break}l=146;t=s[m+5730>>1];while(1){n=t;r=(m+5440|0)+(l<<1)|0;t=s[r-4>>1];p[r>>1]=s[r>>1]+(n+t|0);n=16;r=l>>>0>16;l=l-1|0;if(r){continue}break}D=0;while(1){l=n+1|0;if(p[(m+5440|0)+(l<<1)>>1]>=1){q[(m+5744|0)+(D<<2)>>2]=n;D=D+1|0}n=l;if((l|0)!=144){continue}break}n=146;t=s[m+5728>>1];r=s[m+5730>>1];while(1){l=r;r=t;v=(m+5440|0)+(n<<1)|0;t=s[v-6>>1];p[v>>1]=s[v>>1]+((l+r|0)+t|0);l=16;v=n>>>0>16;n=n-1|0;if(v){continue}break}t=0;while(1){if(p[(m+5440|0)+(l<<1)>>1]>=1){p[(m+5440|0)+(t<<1)>>1]=l-2;t=t+1|0}l=l+1|0;if((l|0)!=147){continue}break}r=0;la(m+6160|0,0,2384);if((k|0)>=1){n=(i|0)==8?a+640|0:m+10816|0;v=(t|0)<1;while(1){B=ta(n,40);if(!v){O=B+1;l=0;while(1){z=x(0);C=p[(m+5440|0)+(l<<1)>>1]<<2;H=n-C|0;B=Wa(H,n,40);if(!(B>0^1)){z=x((B+B)/(O+ta(H,40)))}u[C+((m+6160|0)+w(r,596)|0)>>2]=z;l=l+1|0;if((t|0)!=(l|0)){continue}break}}n=n+160|0;r=r+1|0;if((r|0)!=(k|0)){continue}break}}if((f|0)<1){S=x(0)}else{f=(i|0)==12?(f<<1)/3|0:f>>>((i|0)==16)|0;S=x(db(+x(f|0))*3.32192809488736)}if((D|0)>=1){v=0;l=(k|0)==4;r=l?(i|0)==8?(j|0)>0?11:3:3:3;I=l?9008:8969;Q=l?11:3;R=x(k|0);W=x(R*h);T=x(R*x(.20000000298023224));C=-1;h=x(-1e3);K=x(0);M=(k|0)<1;J=(f|0)<1;f=0;while(1){t=q[(m+5744|0)+(v<<2)>>2];n=0;while(1){H=(m+5840|0)+(n<<2)|0;q[H>>2]=0;z=x(0);l=0;if(!M){while(1){z=x(u[((m+6160|0)+w(l,596)|0)+(t+o[I+(w(l,Q)+n|0)|0]<<2)>>2]+z);l=l+1|0;if((l|0)!=(k|0)){continue}break}u[H>>2]=z}n=n+1|0;if((r|0)!=(n|0)){continue}break}z=x(-1e3);l=0;n=0;while(1){g=u[(m+5840|0)+(l<<2)>>2];H=g>z;z=H?g:z;n=H?l:n;l=l+1|0;if((r|0)!=(l|0)){continue}break}U=x(db(+x(t|0))*3.32192809488736);g=x(z-x(T*U));if(!J){X=g;g=x(U-S);g=x(g*g);g=x(X-x(x(g*x(T*u[e>>2]))/x(g+x(.5))))}if(!(z>W^1|g>h^1)){C=t;h=g;K=z;f=n}v=v+1|0;if((D|0)!=(v|0)){continue}break}if((C|0)!=-1){break q}}q[b>>2]=0;q[b+4>>2]=0;q[b+8>>2]=0;q[b+12>>2]=0}q[e>>2]=0;p[c>>1]=0;o[d|0]=0;l=1;break a}u[e>>2]=K/R;N=c;t:{if((i|0)<=8){l=0;if((k|0)>0){while(1){a=o[I+(w(l,Q)+f|0)|0]+C|0;a=(a|0)>16?a:16;q[(l<<2)+b>>2]=(a|0)<144?a:144;l=l+1|0;if((l|0)!=(k|0)){continue}break}}a=C-16|0;break t}u:{if((i|0)==12){e=w(C<<16>>16,3);f=(e>>1)+(e&1)|0;break u}f=C<<1}v:{if((A|0)>=(L|0)){e=A;if((f|0)>(A|0)){break v}e=(f|0)<(E|0)?E:f;break v}e=E;if((f|0)>=(L|0)){break v}e=(f|0)<(A|0)?A:f}I=8976;f=9e3;t=12;C=12;w:{switch(k-2|0){default:ja(37111,36670,518);G();case 2:f=(j<<3)+9200|0;t=o[j+9224|0];I=9056;C=34;break;case 0:break w}}l=e+2|0;Q=(l|0)<(E|0)?l:E;l=e-2|0;D=(l|0)>(A|0)?l:A;M=0-D<<2;i=w(i,80)+a|0;v=i;r=0;while(1){a=r<<1;E=o[(a|1)+f|0];a=o[a+f|0];l=1-a|0;lb(v,(v+M|0)-(E<<2)|0,m+2720|0,P,l+E|0);n=(a|0)>(E|0);if(!n){J=l+(n?a:E)|0;l=0;n=a;while(1){u[(m+11456|0)+(l<<2)>>2]=u[(m+2720|0)+(E-n<<2)>>2];n=n+1|0;l=l+1|0;if((J|0)!=(l|0)){continue}break}}if((t|0)>=1){E=w(r,C);J=(m+11456|0)+(0-a<<2)|0;l=0;while(1){n=J+(o[(l+E|0)+I|0]<<2)|0;H=q[n+4>>2];a=(w(r,680)+m|0)+w(l,20)|0;q[a>>2]=q[n>>2];q[a+4>>2]=H;q[a+16>>2]=q[n+16>>2];H=q[n+12>>2];q[a+8>>2]=q[n+8>>2];q[a+12>>2]=H;l=l+1|0;if((t|0)!=(l|0)){continue}break}}v=(P<<2)+v|0;r=r+1|0;if((r|0)!=(k|0)){continue}break}I=8976;a=9e3;t=12;n=12;x:{switch(k-2|0){default:ja(37111,36670,584);G();case 2:a=(j<<3)+9200|0;t=o[j+9224|0];I=9056;n=34;break;case 0:break x}}v=i;r=0;while(1){l=r<<1;f=o[l+a|0];C=v-(f+D<<2)|0;F=ta(C,P)+.001;u[m+11456>>2]=F;E=o[(l|1)+a|0];if((E|0)>(f|0)){l=1;E=(E-f|0)+1|0;while(1){B=+u[C+(P-l<<2)>>2];O=F-B*B;M=l<<2;B=+u[C-M>>2];F=O+B*B;u[M+(m+11456|0)>>2]=F;l=l+1|0;if((E|0)!=(l|0)){continue}break}}if((t|0)>=1){E=w(n,r);M=(m+11456|0)+(0-f<<2)|0;l=0;while(1){C=M+(o[(l+E|0)+I|0]<<2)|0;J=q[C+4>>2];f=((m+2720|0)+w(r,680)|0)+w(l,20)|0;q[f>>2]=q[C>>2];q[f+4>>2]=J;q[f+16>>2]=q[C+16>>2];J=q[C+12>>2];q[f+8>>2]=q[C+8>>2];q[f+12>>2]=J;l=l+1|0;if((t|0)!=(l|0)){continue}break}}v=(P<<2)+v|0;r=r+1|0;if((r|0)!=(k|0)){continue}break}y:{if((k|0)!=4){I=8976;v=12;a=12;break y}I=9056;v=34;a=o[j+9224|0]}B=ta(i,w(k,P));f=0;if((D|0)<=(Q|0)){h=x(x(.05000000074505806)/x(e|0));O=B+1;i=(Q-D|0)+1|0;g=x(-1e3);r=0;while(1){t=0;if((a|0)>0){while(1){z=x(0);z:{if((k|0)<1){break z}F=0;l=0;B=O;while(1){C=r<<2;n=w(t,20);j=w(l,680);B=B+ +u[C+(n+(j+(m+2720|0)|0)|0)>>2];F=F+ +u[C+(n+(j+m|0)|0)>>2];l=l+1|0;if((l|0)!=(k|0)){continue}break}if(F>0^1){break z}z=x(x(x(1)-x(h*x(t|0)))*x((F+F)/B))}if(!(g=(L|0))){f=t;g=z;e=D}t=t+1|0;if((a|0)!=(t|0)){continue}break}}D=D+1|0;r=r+1|0;if((i|0)!=(r|0)){continue}break}}if((k|0)>=1){l=0;while(1){a=(l<<2)+b|0;j=o[(w(l,v)+f|0)+I|0]+e|0;q[a>>2]=j;t=a;A:{if((A|0)>(L|0)){a=A;i=a;if((a|0)<(j|0)){break A}i=(j|0)<(L|0)?L:j;break A}a=L;i=a;if((a|0)<(j|0)){break A}i=(j|0)<(A|0)?A:j}q[t>>2]=i;l=l+1|0;if((l|0)!=(k|0)){continue}break}}a=e-A|0}p[N>>1]=a;o[d|0]=f;l=0;if(p[c>>1]>-1){break a}ja(37078,36670,474);G()}ja(36608,36670,112);G()}ja(36707,36670,115);G()}ja(36759,36670,116);G()}ja(36811,36670,151);G()}ja(36841,36670,173);G()}ja(36921,36670,178);G()}ja(36963,36670,179);G()}ja(37042,36670,241);G()}ca=m+11552|0;return l}function Bf(a,b,c,d,e,f,g,h,i,j,k,l,m,n,t){var u=0,v=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ea=0,fa=0,ga=0,ha=0,ia=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0;u=ca;_=u;q[b+4340>>2]=o[c+34|0];Q=q[b+4328>>2];R=r[c+31|0];E=o[c+29|0];H=o[c+30|0];A=q[a+4592>>2];x=q[a+4584>>2];u=A+x|0;N=_-((u<<2)+15&-16)|0;ca=N;U=N-((u<<1)+15&-16)|0;u=U;ca=u;v=q[a+4588>>2];V=u-((v<<2)+15&-16)|0;ca=V;q[b+4332>>2]=A;q[b+4336>>2]=A;a:{b:{c:{u=q[a+4580>>2];if((u|0)>=1){O=n<<16>>16;H=p[((E<<1&-4)+6416|0)+(H<<1)>>1];W=H+944|0;$=w(O,W<<16>>16);sa=w(61865984-(H<<16)>>16,O);aa=(R|0)==4;ta=aa?3:1;ua=H-80|0;va=H-944|0;wa=b+3900|0;u=n>>>1|0;xa=512-u|0;X=u-512|0;ba=t<<16>>16;Y=(A<<1)+b|0;R=w(H,O);ya=(n|0)<2049;F=b+3840|0;ea=F;while(1){A=J<<2;L=q[A+i>>2];q[b+4348>>2]=0;y=1;D=((J>>>1|aa)<<5)+f|0;d:{if((E&255)!=2){break d}E=2;Q=q[(J<<2)+m>>2];if(J&ta){break d}t=q[a+4592>>2];u=q[a+4640>>2];n=(t-Q|0)-u|0;if((n|0)<=2){break c}n=n-2|0;ib((n<<1)+U|0,(n+w(v,J)<<1)+b|0,D,t-n|0,u);q[b+4348>>2]=1;q[b+4332>>2]=q[a+4592>>2];E=r[c+29|0];y=0}K=l+A|0;t=q[K>>2];x=(t|0)>1?t:1;u=z(x);v=x<>16;C=536870911/(B|0)|0;I=C<<16;n=I>>16;v=0-(w(n,B)+(w(n,v&65535)>>16)<<3)|0;n=((I+w(v,(C>>15)+1>>1)|0)+w(n,v>>16)|0)+(w(n,v&65528)>>16)|0;C=q[m+A>>2];e:{if(x>>>0<=131071){u=u-15|0;x=2147483647>>>u|0;v=-2147483648>>u;n=((n|0)>(x|0)?x:(n|0)<(v|0)?v:n)<>15-u}B=q[a+4588>>2];if((B|0)>=1){x=(n>>4)+1|0;u=x<<15>>16;x=(x>>16)+1>>1;v=0;while(1){I=s[(v<<1)+d>>1];P=I<<16;q[(v<<2)+V>>2]=(w(u,P>>31)+w(x,P>>16)|0)+(w(u,I)>>16);v=v+1|0;if((B|0)!=(v|0)){continue}break}}f:{if(y){break f}n=J?n:w(n>>16,ba)+(w(n&65535,ba)>>16)<<2;u=q[b+4332>>2];v=(u-C|0)-2|0;if((v|0)>=(u|0)){break f}x=n&65535;n=n>>16;while(1){y=p[(v<<1)+U>>1];q[(v<<2)+N>>2]=(w(y,x)>>16)+w(n,y);v=v+1|0;if((u|0)!=(v|0)){continue}break}}n=q[b+4344>>2];if((n|0)!=(t|0)){u=n;n=n>>31;x=z(u+n^n);u=u<>31;y=z(n+t^n);t=t<>16)<<16>>16;u=(w(n,u&65535)>>16)+w(n,u>>16)|0;t=yg(u,u>>31,t,t>>31);t=S-(((da&536870911)<<3|t>>>29)&-8)|0;n=(w(t>>16,n)+u|0)+(w(n,t&65535)>>16)|0;t=(x-y|0)+29|0;g:{if((t|0)<=15){t=16-t|0;u=2147483647>>>t|0;x=-2147483648>>t;n=((n|0)>(u|0)?u:(n|0)<(x|0)?x:n)<>t-16:0}t=q[a+4592>>2];if((t|0)>=1){u=n&65535;x=n>>16;v=q[b+4336>>2]-t|0;while(1){y=((v<<2)+b|0)+1280|0;B=q[y>>2];t=B<<16>>16;q[y>>2]=(w(t,x)+(w(t,u)>>16)|0)+w(n,(B>>15)+1>>1);v=v+1|0;if((v|0)>2]){continue}break}}h:{if(q[b+4348>>2]|(E&255)!=2){break h}t=q[b+4332>>2];v=(t-C|0)-2|0;if((v|0)>=(t|0)){break h}x=n&65535;y=n>>16;while(1){B=(v<<2)+N|0;C=q[B>>2];u=C<<16>>16;q[B>>2]=(w(u,y)+(w(u,x)>>16)|0)+w(n,(C>>15)+1>>1);v=v+1|0;if((t|0)!=(v|0)){continue}break}}u=q[b+4320>>2];x=u<<16>>16;t=n&65535;y=w(x,t)>>16;S=x;x=n>>16;q[b+4320>>2]=(y+w(S,x)|0)+w(n,(u>>15)+1>>1);u=q[b+4324>>2];y=u<<16>>16;q[b+4324>>2]=((w(y,t)>>16)+w(x,y)|0)+w(n,(u>>15)+1>>1);v=0;u=0;while(1){B=((u<<2)+b|0)+3840|0;C=q[B>>2];y=C<<16>>16;q[B>>2]=(w(x,y)+(w(t,y)>>16)|0)+w(n,(C>>15)+1>>1);u=u+1|0;if((u|0)!=16){continue}break}while(1){y=((v<<2)+b|0)+4224|0;B=q[y>>2];u=B<<16>>16;q[y>>2]=(w(u,x)+(w(t,u)>>16)|0)+w(n,(B>>15)+1>>1);v=v+1|0;if((v|0)!=24){continue}break}q[b+4344>>2]=q[K>>2];B=q[a+4588>>2];t=q[K>>2]}if((B|0)>=1){K=w(J,10)+g|0;C=0;fa=(E&255)!=2;za=fa|(Q|0)>0;n=L>>2;ga=(n|L<<15)>>16;u=q[k+A>>2];ha=u>>16;I=q[a+4636>>2];Aa=I>>1;Ba=I&1;ia=q[a+4640>>2];Ca=ia>>1;ka=t<<10>>16;la=n<<16>>16;ma=u<<16>>16;Da=(t>>21)+1>>1;T=w(J,48)+h|0;n=I-1|0;Ea=T+(n<<1)|0;S=((n<<2)+b|0)+4224|0;L=((q[b+4336>>2]-Q<<2)+b|0)+1284|0;E=((q[b+4332>>2]-Q<<2)+N|0)+8|0;na=p[j+A>>1];v=q[b+4340>>2];y=wa;while(1){q[b+4340>>2]=w(v,196314165)+907633515;t=p[D>>1];n=q[y>>2];u=(w(t,n>>16)+Ca|0)+(w(t,n&65535)>>16)|0;t=p[D+2>>1];n=q[y-4>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+4>>1];n=q[y-8>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+6>>1];n=q[y-12>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+8>>1];n=q[y-16>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+10>>1];n=q[y-20>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+12>>1];n=q[y-24>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+14>>1];n=q[y-28>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+16>>1];n=q[y-32>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+18>>1];n=q[y-36>>2];P=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;if((ia|0)==16){t=p[D+20>>1];n=q[y-40>>2];u=(w(t,n>>16)+P|0)+(w(t,n&65535)>>16)|0;t=p[D+22>>1];n=q[y-44>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+24>>1];n=q[y-48>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+26>>1];n=q[y-52>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+28>>1];n=q[y-56>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[D+30>>1];n=q[y-60>>2];P=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0}Z=0;if(!fa){t=p[K>>1];n=q[E>>2];u=w(t,n>>16)+(w(t,n&65535)>>16)|0;t=p[K+2>>1];n=q[E-4>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[K+4>>1];n=q[E-8>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[K+6>>1];n=q[E-12>>2];u=(u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0;t=p[K+8>>1];n=q[E-16>>2];Z=((u+w(t,n>>16)|0)+(w(t,n&65535)>>16)|0)+2|0;E=E+4|0}if(Ba){break b}u=q[b+4224>>2];n=q[b+4324>>2];q[b+4224>>2]=n;t=p[T>>1];x=(w(t,n>>16)+Aa|0)+(w(t,n&65535)>>16)|0;v=2;if((I|0)>=3){while(1){n=b+4224|0;A=v-1|0;M=n+(A<<2)|0;t=q[M>>2];q[M>>2]=u;M=n+(v<<2)|0;n=q[M>>2];A=p[(A<<1)+T>>1];q[M>>2]=t;x=(w(A,u>>16)+x|0)+(w(A,u&65535)>>16)|0;u=p[(v<<1)+T>>1];x=(x+w(u,t>>16)|0)+(w(u,t&65535)>>16)|0;u=n;v=v+2|0;if((I|0)>(v|0)){continue}break}}q[S>>2]=u;if(!za){break a}n=q[b+4320>>2];t=n&65535;n=n>>16;A=p[Ea>>1];M=((w(t,na)>>16)+w(n,na)|0)+((w(A,u>>16)+x|0)+(w(A,u&65535)>>16)<<1)|0;t=w(n,ha)+(w(t,ha)>>16)|0;n=q[((q[b+4336>>2]<<2)+b|0)+1276>>2];oa=(t+w(n>>16,ma)|0)+(w(n&65535,ma)>>16)|0;n=((P<<2)-M|0)-oa|0;i:{if((Q|0)>=1){u=n;n=q[L-8>>2]+q[L>>2]|0;t=q[L-4>>2];v=((u-(w(n&65535,la)>>16)|0)-(w(t&65535,ga)>>16)-(w(t>>16,ga)+w(n>>16,la))<<1)+Z>>2;L=L+4|0;break i}v=n>>1}j:{k:{l:{m:{pa=q[(C<<2)+V>>2];n=pa-(v+1>>1)|0;n=q[b+4340>>2]<0?0-n|0:n;n=(n|0)>-31744?n:-31744;v=(n|0)<30720?n:30720;t=v-H|0;n=t;n:{if(ya){break n}n=t-X|0;if((t|0)>(X|0)){break n}if((t|0)>=(xa|0)){break m}n=t+X|0}t=n;if((t|0)>=1024){u=(t&-1024)+ua|0;x=w(u<<16>>16,O);A=u+1024|0;n=w(A<<16>>16,O);break j}u=H;A=W;x=R;n=$;switch((t>>10)+1|0){case 1:break j;case 0:break l;default:break k}}u=H;A=W;x=R;n=$;if((t|0)>=0){break j}}u=va;A=H;x=sa;n=R;break j}u=H+(t&-1024|80)|0;A=u+1024|0;t=u<<16;n=w(-67108864-t>>16,O);x=w(0-t>>16,O)}qa=e+C|0;t=n;n=v-A<<16>>16;t=t+w(n,n)|0;n=v-u<<16>>16;n=(t|0)<(w(n,n)+x|0)?A:u;o[qa|0]=(n>>>9|0)+1>>>1;n=n<<4;u=(Z<<1)+(q[b+4340>>2]<0?0-n|0:n)|0;n=u+(P<<4)|0;t=(w(n>>16,ka)+w(n,Da)|0)+(w(n&65534,ka)>>16)|0;p[(C<<1)+Y>>1]=(t|0)>8388479?32767:(t|0)<-8388736?-32768:(t>>>7|0)+1>>>1|0;q[y+4>>2]=n;n=n-(pa<<4)|0;t=n-(M<<2)|0;q[b+4320>>2]=t;q[b+4324>>2]=n;q[((q[b+4336>>2]<<2)+b|0)+1280>>2]=t-(oa<<2);n=q[b+4332>>2];q[(n<<2)+N>>2]=u<<1;q[b+4332>>2]=n+1;q[b+4336>>2]=q[b+4336>>2]+1;v=q[b+4340>>2]+o[qa|0]|0;q[b+4340>>2]=v;y=y+4|0;C=C+1|0;if((C|0)!=(B|0)){continue}break}}n=(B<<2)+b|0;t=n+3896|0;u=q[t+4>>2];q[ea+56>>2]=q[t>>2];q[ea+60>>2]=u;t=n+3888|0;u=q[t+4>>2];q[F+48>>2]=q[t>>2];q[F+52>>2]=u;t=n+3880|0;u=q[t+4>>2];q[F+40>>2]=q[t>>2];q[F+44>>2]=u;t=n+3872|0;u=q[t+4>>2];q[F+32>>2]=q[t>>2];q[F+36>>2]=u;t=n+3864|0;u=q[t+4>>2];q[F+24>>2]=q[t>>2];q[F+28>>2]=u;t=n+3856|0;u=q[t+4>>2];q[F+16>>2]=q[t>>2];q[F+20>>2]=u;t=n+3848|0;u=q[t+4>>2];q[F+8>>2]=q[t>>2];q[F+12>>2]=u;n=n+3840|0;t=q[n+4>>2];q[F>>2]=q[n>>2];q[F+4>>2]=t;u=q[a+4580>>2];J=J+1|0;if((u|0)>(J|0)){v=q[a+4588>>2];e=v+e|0;n=v<<1;d=n+d|0;Y=n+Y|0;E=r[c+29|0];continue}break}x=q[a+4584>>2];A=q[a+4592>>2]}q[b+4328>>2]=q[((u<<2)+m|0)-4>>2];b=ra(b,(x<<1)+b|0,A<<1)+1280|0;ra(b,b+(q[a+4584>>2]<<2)|0,q[a+4592>>2]<<2);ca=_;return}ja(37992,38024,146);G()}ja(38035,38024,250);G()}ja(38082,38024,258);G()}function Gc(a,b,c,d,e,f,g,h){var i=0,j=0,k=0,l=0,m=0,n=0,t=0,u=0,v=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;v=ca-32|0;x=v;ca=v;if(q[b+68>>2]){q[a+14728>>2]=1;q[a+4664>>2]=1}q[a+5748>>2]=0;q[a+15812>>2]=0;if(!bg(b)){Q=a+10064|0;q[b+88>>2]=0;a:{if(q[b+4>>2]<=q[a+20196>>2]){break a}t=hb(Q,q[a+5092>>2]);q[a+20144>>2]=1;q[a+20148>>2]=0;q[a+20136>>2]=0;q[a+20140>>2]=0;q[a+20128>>2]=0;q[a+20152>>2]=1;q[a+20156>>2]=16384;if(q[a+20192>>2]!=2){break a}ka(a+15840|0,a+5776|0,300);i=q[a+4>>2];q[a+10064>>2]=q[a>>2];q[a+10068>>2]=i}C=q[b+24>>2];b:{if((C|0)!=q[a+4612>>2]){j=q[b+4>>2];i=1;break b}j=q[b+4>>2];i=(j|0)!=q[a+20196>>2]}k=q[b>>2];q[a+20196>>2]=j;q[a+20192>>2]=k;m=w(d,100);k=q[b+8>>2];n=(m|0)/(k|0)|0;c:{d:{e:{f:{if(g){if((n|0)!=1){break c}if((g|0)==2){k=q[a+28>>2];q[x+24>>2]=q[a+24>>2];q[x+28>>2]=k;k=q[a+20>>2];q[x+16>>2]=q[a+16>>2];q[x+20>>2]=k;y=q[a+4576>>2]}g:{if((j|0)>0){m=(g|0)!=2;break g}q[b+24>>2]=10;R=q[b+36>>2];q[b+36>>2]=0;break f}h:{while(1){k=w(l,10064)+a|0;J=hb(k,q[k+5092>>2]);if(!m){j=q[x+20>>2];q[k+16>>2]=q[x+16>>2];q[k+20>>2]=j;j=q[x+28>>2];q[k+24>>2]=q[x+24>>2];q[k+28>>2]=j;q[k+32>>2]=y}if(!J){j=q[b+4>>2];l=l+1|0;if((j|0)<=(l|0)){break h}continue}break}ja(39202,39187,222);G()}C=q[b+24>>2];q[b+24>>2]=10;R=q[b+36>>2];t=0;q[b+36>>2]=0;if((j|0)<1){break f}while(1){k=w(t,10064)+a|0;q[k+4680>>2]=1;q[k+4668>>2]=0;t=t+1|0;if((t|0)!=(j|0)){continue}break}t=0;break f}if((m|0)!=(w(k,n)|0)|(d|0)<0){break d}k=w(k,C);C=0;if((k|0)<(w(d,1e3)|0)){break e}}i:{j:{k:{l:{if((j|0)<1){break l}u=i^-1;i=0;while(1){j=0;l=w(i,10064)+a|0;t=$f(l,b,q[a+20208>>2],i,(i|0)==1?q[a+4576>>2]:0);if(t){break j}if(!(u&!q[l+4664>>2]|q[a+5744>>2]<1)){while(1){q[(l+(j<<2)|0)+4724>>2]=0;j=j+1|0;if((j|0)>2]){continue}break}}q[l+6080>>2]=q[l+6076>>2];i=i+1|0;k=q[b+4>>2];if((i|0)<(k|0)){continue}break}t=0;if((k|0)!=1){break l}j=q[a+4576>>2];break k}j=q[a+4576>>2];if((j|0)!=q[a+14640>>2]){break i}}H=(n|0)>1?n>>1:1;V=H<<1;W=H-1|0;X=a+10212|0;J=a+17232|0;S=a+14784|0;Y=a+15164|0;Z=a+5100|0;_=a+20128|0;D=a+20180|0;$=a+14788|0;K=a+20162|0;L=a+15160|0;M=a+15840|0;E=a+5096|0;I=a+5776|0;T=w(n,10);N=w(T,j);A=v-(((w(N,q[a+4556>>2])|0)/(w(j,1e3)|0)<<1)+15&-16)|0;ca=A;m:{while(1){i=q[a+5740>>2];k=q[a+4584>>2]-i|0;k=(k|0)<(N|0)?k:N;v=(w(k,q[a+4556>>2])|0)/(w(q[a+4576>>2],1e3)|0)|0;n:{o:{p:{q:{r:{s:{t:{switch(q[b>>2]-1|0){case 1:u:{switch(q[b+4>>2]-1|0){case 1:m=q[a+5748>>2];j=0;l=(v|0)<1;if(!l){while(1){p[(j<<1)+A>>1]=s[(j<<2)+c>>1];j=j+1|0;if((v|0)!=(j|0)){continue}break}}if(!(q[a+20200>>2]!=1|m)){ka(M,I,300)}i=Aa(I,((i<<1)+E|0)+4|0,A,v);q[a+5740>>2]=k+q[a+5740>>2];k=q[a+15804>>2];m=q[a+14648>>2]-k|0;n=w(q[a+14640>>2],T);m=(m|0)<(n|0)?m:n;j=0;if(!l){while(1){p[(j<<1)+A>>1]=s[(j<<2|2)+c>>1];j=j+1|0;if((v|0)!=(j|0)){continue}break}}k=Aa(M,((k<<1)+L|0)+4|0,A,v);q[a+15804>>2]=m+q[a+15804>>2];t=k+(i+t|0)|0;j=q[a+5740>>2];break s;case 0:break u;default:break r}}j=0;if((v|0)>=1){while(1){m=j<<2;m=p[(m|2)+c>>1]+p[c+m>>1]|0;p[(j<<1)+A>>1]=(m>>>1|0)+(m&1);j=j+1|0;if((v|0)!=(j|0)){continue}break}}t=Aa(I,((i<<1)+E|0)+4|0,A,v)+t|0;v:{if(q[a+5748>>2]|q[a+20200>>2]!=2){break v}t=Aa(M,((q[a+15804>>2]<<1)+L|0)+4|0,A,v)+t|0;i=q[a+4584>>2];if((i|0)<1){break v}m=q[a+15804>>2];l=q[a+5740>>2];j=0;while(1){n=j+2|0;u=(n+l<<1)+E|0;p[u>>1]=p[(m+n<<1)+L>>1]+p[u>>1]>>>1;j=j+1|0;if((i|0)!=(j|0)){continue}break}}j=k+q[a+5740>>2]|0;q[a+5740>>2]=j;break s;case 0:break t;default:break r}}if(q[b+4>>2]!=1){break r}i=Aa(I,((i<<1)+E|0)+4|0,ka(A,c,v<<1),v);j=k+q[a+5740>>2]|0;q[a+5740>>2]=j;t=i+t|0}aa=q[b>>2];q[a+20208>>2]=0;k=q[a+4584>>2];i=0;if((k|0)>(j|0)){break m}if((j|0)!=(k|0)){break q}i=q[b+4>>2];if(q[a+15804>>2]!=q[a+14648>>2]?(i|0)!=1:0){break p}if(q[a+5748>>2]|g){break n}u=0;p[x+14>>1]=0;o[x+14|0]=0-(256>>>w(i,q[a+5744>>2]+1|0)|0);ma(e,0,x+14|0,8);n=q[b+4>>2];if((n|0)<=0){break o}while(1){j=0;l=0;k=w(u,10064)+a|0;i=q[k+5744>>2];if((i|0)>=1){while(1){l=q[(k+(j<<2)|0)+4724>>2]<0;if(!(!l|(i|0)<2)){ma(e,l-1|0,q[(i<<2)+6384>>2],8);n=q[b+4>>2]}u=u+1|0;if((u|0)<(n|0)){continue}break}break o}ja(39352,39187,320);G()}ja(39438,39187,336);G()}ja(39537,39187,337);G()}i=0;j=q[a+5744>>2];if((j|0)>0){while(1){if((n|0)>=1){y=i-1|0;O=i+D|0;U=i<<2;u=U+$|0;j=w(i,6)+K|0;l=0;while(1){k=w(l,10064)+a|0;if(q[(k+U|0)+4724>>2]){w:{if((n|0)!=2|l){break w}Yc(e,j);if(q[u>>2]){break w}Xc(e,o[O|0])}m=k;n=e;B=i;x:{if(i){P=2;if(q[(k+(y<<2)|0)+4724>>2]){break x}}P=0}Gb(m,n,B,1,P);m=k+w(i,36)|0;Fb(e,o[m+6129|0],o[m+6130|0],(k+w(i,320)|0)+6208|0,q[k+4584>>2]);n=q[b+4>>2]}l=l+1|0;if((l|0)<(n|0)){continue}break}j=q[a+5744>>2]}i=i+1|0;if((i|0)<(j|0)){continue}break}}j=0;if((n|0)>0){while(1){i=w(j,10064)+a|0;q[i+4724>>2]=0;q[i+4728>>2]=0;q[i+4732>>2]=0;j=j+1|0;if((j|0)>2]){continue}break}}q[a+20184>>2]=(q[e+20>>2]+z(q[e+28>>2])|0)-32}_f(a);m=q[b+24>>2];i=q[b+28>>2];k=(w(m,i)|0)/1e3|0;if(!g){k=k-q[a+20184>>2]|0}k=(k|0)/q[a+5744>>2]|0;l=w(k<<16>>16,(m|0)==10?100:50)-(q[a+20188>>2]<<1)|0;y:{if(g){break y}m=q[a+5748>>2];if((m|0)<1){break y}l=((q[a+20184>>2]+((w(k,m)-q[e+20>>2]|0)-z(q[e+28>>2])|0)<<1)+l|0)- -64|0}z:{if((i|0)>=5001){k=i;if((i|0)<(l|0)){break z}k=(l|0)>5e3?l:5e3;break z}k=5e3;if((l|0)>5e3){break z}k=(i|0)>(l|0)?i:l}A:{if(q[b+4>>2]==2){i=q[a+5748>>2];Yf(_,Z,Y,w(i,6)+K|0,i+D|0,x+16|0,k,q[a+4532>>2],q[b+60>>2],q[a+4576>>2],q[a+4584>>2]);i=q[a+5748>>2];B:{if(!r[i+D|0]){if(q[a+20212>>2]==1){i=J;q[i>>2]=0;q[i+4>>2]=0;q[i+8>>2]=0;q[a+10080>>2]=0;q[a+10084>>2]=0;la(X,0,4384);o[a+17232|0]=10;q[a+14540>>2]=100;q[a+14608>>2]=100;o[a+14605|0]=0;q[a+14728>>2]=1;q[a+14556>>2]=65536}Hc(Q,h);break B}o[i+S|0]=0}if(g){break A}Yc(e,w(q[a+5748>>2],6)+K|0);i=q[a+5748>>2];if(r[i+S|0]){break A}Xc(e,o[i+D|0]);break A}q[a+5096>>2]=q[a+20132>>2];i=(q[a+4584>>2]<<1)+E|0;q[a+20132>>2]=s[i>>1]|s[i+2>>1]<<16}Hc(a,h);y=q[b+4>>2];if((y|0)>=1){O=!F&(H|0)==2;j=0;while(1){m=q[b+56>>2];i=(w(m,3)|0)/5|0;C:{if(O){break C}i=m;if((H|0)!=3){break C}i=(m<<1)/5|0;if(!F){break C}i=m;if((F|0)!=1){break C}i=(w(m,3)|0)/4|0}n=i;u=(F|0)==(W|0)&q[b+52>>2]!=0;D:{if((y|0)==1){l=k;break D}l=q[(x+16|0)+(j<<2)>>2];if(q[x+20>>2]<1|j){break D}n=n-((m|0)/(V|0)|0)|0;u=0}if((l|0)>=1){i=w(j,10064)+a|0;pf(i,l);m=f;l=e;B=0;E:{if(q[a+5748>>2]<=(j|0)){break E}if(j){B=1;if(q[a+20212>>2]){break E}}B=2}t=qf(i,m,l,B,n,u);y=q[b+4>>2]}i=w(j,10064)+a|0;q[i+5740>>2]=0;q[i+4668>>2]=0;q[i+5748>>2]=q[i+5748>>2]+1;j=j+1|0;if((y|0)>(j|0)){continue}break}}m=w(v,aa)<<1;d=d-v|0;i=q[a+5748>>2];q[a+20212>>2]=o[(i+D|0)-1|0];F:{if((i|0)!=q[a+5744>>2]|q[f>>2]<1){break F}u=0;l=0;if((y|0)>=1){while(1){j=0;k=w(u,10064)+a|0;n=q[k+5744>>2];if((n|0)>=1){while(1){l=o[(j+k|0)+4720|0]|l<<1;j=j+1|0;if((n|0)!=(j|0)){continue}break}}l=o[k+4723|0]|l<<1;u=u+1|0;if((u|0)!=(y|0)){continue}break}}if(!g){Nd(e,l,w(i+1|0,y))}if(!(!q[a+6080>>2]|(q[a+16144>>2]?0:q[b+4>>2]!=1))){q[f>>2]=0}i=q[b+24>>2];k=(q[a+20188>>2]+(q[f>>2]<<3)|0)+((w(i,q[b+28>>2])|0)/-1e3|0)|0;k=(k|0)>0?k:0;q[a+20188>>2]=(k|0)<1e4?k:1e4;k=q[a+20204>>2];if(q[a+4532>>2]<((w(k<<16>>16,3188)>>16)+13|0)){q[a+20204>>2]=0;q[a+20208>>2]=1;break F}q[a+20208>>2]=0;q[a+20204>>2]=i+k}c=c+m|0;F=F+1|0;if(d){continue}break}i=q[a+20208>>2]}d=q[b+4>>2];q[a+20200>>2]=d;q[b+76>>2]=i;f=q[a+4576>>2];q[b+80>>2]=(f|0)==16?!q[a+28>>2]:0;q[b+72>>2]=w(f<<16>>16,1e3);j=0;q[b+84>>2]=q[b+60>>2]?0:p[a+20156>>1];G:{if(!g){break G}q[b+36>>2]=R;q[b+24>>2]=C;if((d|0)<1){break G}while(1){c=w(j,10064)+a|0;q[c+4680>>2]=0;q[c+4668>>2]=0;j=j+1|0;if((d|0)!=(j|0)){continue}break}}c=o[a+4765|0];q[b+92>>2]=c;q[b+96>>2]=p[((c<<1&-4)+6416|0)+(o[a+4766|0]<<1)>>1]}ca=x+32|0;return t}ja(39225,39187,262);G()}ja(39167,39187,241);G()}ja(39167,39187,235);G()}ja(39167,39187,206);G()}ja(39167,39187,170);G()}function Lb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,s,t,v,y,z,A,B,C,D){var E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=x(0),ba=x(0),da=0,ea=x(0),fa=x(0),ga=0,ha=0,ia=0,la=0,ma=0,na=0,oa=0,pa=x(0),qa=0,ra=0,sa=0,ta=0,ua=0,va=0,xa=0,ya=0,za=0,Aa=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0;E=ca-1568|0;ca=E;F=1;S=q[b+32>>2];Ra=S+(c<<1)|0;ia=p[Ra>>1];la=f?2:1;L=E-((w(la,p[((q[b+8>>2]<<1)+S|0)-2>>1]-ia<>2];N=p[((H<<1)+S|0)-2>>1];ga=N<7;qa=ma|!a;T=j?1<>1]-N<>2]=v;q[E+1540>>2]=h;q[E+1520>>2]=m;q[E+1504>>2]=a;q[E+1512>>2]=b;a=q[A>>2];q[E+1556>>2]=D;q[E+1548>>2]=C;q[E+1524>>2]=k;q[E+1544>>2]=a;j=(T|0)>1;q[E+1560>>2]=j;q[E+1552>>2]=0;q[E+1508>>2]=qa;gb=A;if((c|0)<(d|0)){hb=f?L:0;ib=j|(k|0)!=3;R=v+28|0;P=v+8|0;jb=qa^1;Wa=la-1|0;Xa=c+2|0;na=c+1|0;Ya=d-1|0;sa=ia<>2]=H;b:{c:{C=H+1|0;Q=(H<<1)+S|0;a=p[Q>>1];k=p[(C<<1)+S>>1]-a|0;A=k<0){B=a<>2]=a-1;Za=t-((c|0)==(H|0)?0:ta)|0;j=0;d:{if((z|0)<=(H|0)){break d}t=z-H|0;t=q[(H<<2)+i>>2]+((Za|0)/(((t|0)<3?t:3)|0)|0)|0;a=(a|0)<(t|0)?a:t;j=16383;if((a|0)>16383){break d}j=(a|0)>0?a:0}a=B<<2;N=!qa|(p[Q>>1]-k<>1]<>2];F=p[t+(na<<1)>>1];B=F-p[t+(c<<1)>>1]<>1]-F<>2];q[E+1528>>2]=t;F=(H|0)>2];I=F?O:0;W=(H|0)==(Ya|0);O=W?0:I;M=-1;f:{if(!N){a=ga;J=a;break f}a=ga;J=a;if(!((t|0)<0|ib)){break f}a=p[(N<<1)+S>>1]-(k+ia|0)<0?a:0;a=sa+M|0;t=N;while(1){D=t;t=t-1|0;if((a|0)>1]<p[(k<<1)+S>>1]<>1]-ia<>2]=x(u[F>>2]+u[l+da>>2])*x(.5);t=t+1|0;if((k|0)!=(t|0)){continue}break}break c}if((m|0)==(H|0)){break c}k=M<<2;F=(M|0)==-1;K=F?0:k+L|0;t=j>>>1|0;h:{if((H|0)==(Ya|0)){k=F?0:k+da|0;B=Ba(E+1504|0,B,A,t,T,K,y,0,x(1),O,a);a=0;break h}k=F?0:k+da|0;B=Ba(E+1504|0,B,A,t,T,K,y,(p[Q>>1]<>1]<>2];fa=u[(H+q[b+8>>2]<<2)+h>>2];$a=q[v+4>>2];ab=q[v>>2];l=q[P+12>>2];va=E+1496|0;k=va;q[k>>2]=q[P+8>>2];q[k+4>>2]=l;k=q[P+4>>2];q[E+1488>>2]=q[P>>2];q[E+1492>>2]=k;ha=q[v+24>>2];bb=E+1480|0;q[bb>>2]=q[R+16>>2];l=q[R+12>>2];xa=E+1472|0;k=xa;q[k>>2]=q[R+8>>2];q[k+4>>2]=l;k=q[R+4>>2];q[E+1464>>2]=q[R>>2];q[E+1468>>2]=k;cb=E+1408|0;oa=E+1560|0;q[cb>>2]=q[oa>>2];U=E+1552|0;l=U;t=q[l+4>>2];ya=E+1400|0;k=ya;q[k>>2]=q[l>>2];q[k+4>>2]=t;X=E+1544|0;l=X;t=q[l+4>>2];za=E+1392|0;k=za;q[k>>2]=q[l>>2];q[k+4>>2]=t;Y=E+1536|0;l=Y;t=q[l+4>>2];Aa=E+1384|0;k=Aa;q[k>>2]=q[l>>2];q[k+4>>2]=t;Z=E+1528|0;l=Z;t=q[l+4>>2];Ca=E+1376|0;k=Ca;q[k>>2]=q[l>>2];q[k+4>>2]=t;_=E+1520|0;l=_;t=q[l+4>>2];Da=E+1368|0;k=Da;q[k>>2]=q[l>>2];q[k+4>>2]=t;$=E+1512|0;l=$;t=q[l+4>>2];Ea=E+1360|0;k=Ea;q[k>>2]=q[l>>2];q[k+4>>2]=t;k=q[E+1508>>2];q[E+1352>>2]=q[E+1504>>2];q[E+1356>>2]=k;K=A<<2;Fa=ka(Sa,B,K);Ga=ka(Ta,D,K);q[U>>2]=-1;t=0;db=a|J;aa=x(0);J=(M|0)==-1?0:(M<<2)+L|0;l=Kb(E+1504|0,B,D,A,j,T,J,y,W?0:(p[Q>>1]<>2]*u[a+B>>2]));t=t+1|0;if((A|0)!=(t|0)){continue}break}t=0;while(1){a=t<<2;aa=x(aa+x(u[a+Ga>>2]*u[a+D>>2]));t=t+1|0;if((A|0)!=(t|0)){continue}break}k=q[v+44>>2];M=E+1456|0;a=M;q[a>>2]=q[v+40>>2];q[a+4>>2]=k;k=q[v+36>>2];Ha=E+1448|0;a=Ha;q[a>>2]=q[v+32>>2];q[a+4>>2]=k;k=q[v+28>>2];Ia=E+1440|0;a=Ia;q[a>>2]=q[v+24>>2];q[a+4>>2]=k;k=q[v+20>>2];Ja=E+1432|0;a=Ja;q[a>>2]=q[v+16>>2];q[a+4>>2]=k;k=q[P+4>>2];Ka=E+1424|0;a=Ka;q[a>>2]=q[P>>2];q[a+4>>2]=k;a=q[v>>2];k=q[v+4>>2];F=q[$+4>>2];La=E+1296|0;t=La;q[t>>2]=q[$>>2];q[t+4>>2]=F;F=q[_+4>>2];Ma=E+1304|0;t=Ma;q[t>>2]=q[_>>2];q[t+4>>2]=F;F=q[Z+4>>2];Na=E+1312|0;t=Na;q[t>>2]=q[Z>>2];q[t+4>>2]=F;F=q[Y+4>>2];Oa=E+1320|0;t=Oa;q[t>>2]=q[Y>>2];q[t+4>>2]=F;F=q[X+4>>2];Pa=E+1328|0;t=Pa;q[t>>2]=q[X>>2];q[t+4>>2]=F;F=q[U+4>>2];Qa=E+1336|0;t=Qa;q[t>>2]=q[U>>2];q[t+4>>2]=F;F=E+1344|0;q[F>>2]=q[oa>>2];q[E+1416>>2]=a;q[E+1420>>2]=k;a=q[E+1508>>2];q[E+1288>>2]=q[E+1504>>2];q[E+1292>>2]=a;lb=ka(Ua,B,K);mb=ka(Va,D,K);if(!W){ka(ra,(p[Q>>1]<>2]=$a;q[v>>2]=ab;a=q[va+4>>2];q[P+8>>2]=q[va>>2];q[P+12>>2]=a;a=q[I+1492>>2];q[P>>2]=q[I+1488>>2];q[P+4>>2]=a;q[v+24>>2]=ha;q[R+16>>2]=q[bb>>2];a=q[xa+4>>2];q[R+8>>2]=q[xa>>2];q[R+12>>2]=a;a=q[I+1468>>2];q[R>>2]=q[I+1464>>2];q[R+4>>2]=a;a=q[Ea+4>>2];q[$>>2]=q[Ea>>2];q[$+4>>2]=a;a=q[Da+4>>2];q[_>>2]=q[Da>>2];q[_+4>>2]=a;a=q[Ca+4>>2];q[Z>>2]=q[Ca>>2];q[Z+4>>2]=a;a=q[Aa+4>>2];q[Y>>2]=q[Aa>>2];q[Y+4>>2]=a;a=q[za+4>>2];q[X>>2]=q[za>>2];q[X+4>>2]=a;a=q[ya+4>>2];q[U>>2]=q[ya>>2];q[U+4>>2]=a;q[oa>>2]=q[cb>>2];a=q[I+1356>>2];q[I+1504>>2]=q[I+1352>>2];q[I+1508>>2]=a;a=ka(B,Fa,K);k=ka(D,Ga,K);if(!_a){t=q[b+32>>2];D=p[t+(na<<1)>>1];B=D-p[t+(c<<1)>>1]<>1]-D<>2]=1;t=0;pa=x((fa>ea?ea:fa)/x(3));fa=x(fa+pa);ea=x(ea+pa);pa=x(x(ea*ba)+x(fa*aa));aa=x(0);B=Kb(I+1504|0,a,k,A,j,T,J,y,W?0:(p[Q>>1]<>2]*u[a+D>>2]));t=t+1|0;if((A|0)!=(t|0)){continue}break}t=0;while(1){D=t<<2;aa=x(aa+x(u[D+Ga>>2]*u[k+D>>2]));t=t+1|0;if((A|0)!=(t|0)){continue}break}if(!(pa>=x(x(ea*ba)+x(fa*aa))^1)){t=q[I+1420>>2];q[v>>2]=q[I+1416>>2];q[v+4>>2]=t;t=q[M+4>>2];q[v+40>>2]=q[M>>2];q[v+44>>2]=t;t=q[Ha+4>>2];q[v+32>>2]=q[Ha>>2];q[v+36>>2]=t;t=q[Ia+4>>2];q[v+24>>2]=q[Ia>>2];q[v+28>>2]=t;t=q[Ja+4>>2];q[v+16>>2]=q[Ja>>2];q[v+20>>2]=t;t=q[Ka+4>>2];q[P>>2]=q[Ka>>2];q[P+4>>2]=t;t=q[La+4>>2];q[$>>2]=q[La>>2];q[$+4>>2]=t;t=q[Ma+4>>2];q[_>>2]=q[Ma>>2];q[_+4>>2]=t;t=q[Na+4>>2];q[Z>>2]=q[Na>>2];q[Z+4>>2]=t;t=q[Oa+4>>2];q[Y>>2]=q[Oa>>2];q[Y+4>>2]=t;t=q[Pa+4>>2];q[X>>2]=q[Pa>>2];q[X+4>>2]=t;t=q[Qa+4>>2];q[U>>2]=q[Qa>>2];q[U+4>>2]=t;q[oa>>2]=q[F>>2];t=q[I+1292>>2];q[I+1504>>2]=q[I+1288>>2];q[I+1508>>2]=t;ka(a,lb,K);ka(k,mb,K);if(!W){ka((p[Q>>1]<>2]=0;B=Kb(E+1504|0,B,D,A,j,T,(M|0)==-1?0:(M<<2)+L|0,y,W?0:(p[Q>>1]<>1]<>2];q[E+1560>>2]=0;t=a+(ta+Za|0)|0;F=A<<3<(j|0);if((d|0)!=(C|0)){continue}break}a=q[E+1544>>2]}q[gb>>2]=a;ca=E+1568|0}function qf(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,t=0,v=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=x(0),W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0;i=ca-13584|0;ca=i;q[i+40>>2]=0;q[i+44>>2]=0;q[i+32>>2]=0;q[i+36>>2]=0;g=q[a+4620>>2];o[a+4770|0]=g&3;q[a+4620>>2]=g+1;g=q[a+4592>>2];Wf(a+16|0,a+5098|0,q[a+4584>>2]);Q=a+7180|0;n=g<<2;t=Q+n|0;k=w(q[a+4576>>2],5);v=t+(k<<2)|0;g=q[a+4584>>2];if((g|0)>=1){h=g;while(1){j=h-1|0;u[v+(j<<2)>>2]=p[((h<<1)+a|0)+5096>>1];m=(h|0)>1;h=j;if(m){continue}break}}u[v>>2]=u[v>>2]+x(9.999999974752427e-7);g=g>>3;h=(g+k<<2)+t|0;u[h>>2]=u[h>>2]+x(9.999999974752427e-7);h=(k+(g<<1)<<2)+t|0;u[h>>2]=u[h>>2]+x(-9.999999974752427e-7);h=(k+w(g,3)<<2)+t|0;u[h>>2]=u[h>>2]+x(-9.999999974752427e-7);h=(k+(g<<2)<<2)+t|0;u[h>>2]=u[h>>2]+x(9.999999974752427e-7);h=(k+w(g,5)<<2)+t|0;u[h>>2]=u[h>>2]+x(9.999999974752427e-7);h=(k+w(g,6)<<2)+t|0;u[h>>2]=u[h>>2]+x(-9.999999974752427e-7);g=(k+w(g,7)<<2)+t|0;u[g>>2]=u[g>>2]+x(-9.999999974752427e-7);a:{if(q[a+4680>>2]){break a}D=a+4736|0;Rf(a,i+8480|0,i+5792|0,t);g=n+(i+5792|0)|0;Of(a,i+8480|0,g,t);sf(a,i+8480|0,g,t,d);rf(a,i+8480|0,d);if(!(!q[a+6092>>2]|q[a+4532>>2]<78)){g=q[a+5748>>2];q[((g<<2)+a|0)+4724>>2]=1;ka(i+9232|0,a+148|0,4352);g=(w(g,36)+a|0)+6100|0;h=a+4768|0;h=s[h>>1]|s[h+2>>1]<<16;p[g+32>>1]=h;p[g+34>>1]=h>>>16;h=a+4760|0;j=s[h+4>>1]|s[h+6>>1]<<16;h=s[h>>1]|s[h+2>>1]<<16;p[g+24>>1]=h;p[g+26>>1]=h>>>16;p[g+28>>1]=j;p[g+30>>1]=j>>>16;h=a+4752|0;j=s[h+4>>1]|s[h+6>>1]<<16;h=s[h>>1]|s[h+2>>1]<<16;p[g+16>>1]=h;p[g+18>>1]=h>>>16;p[g+20>>1]=j;p[g+22>>1]=j>>>16;h=a+4744|0;j=s[h+4>>1]|s[h+6>>1]<<16;h=s[h>>1]|s[h+2>>1]<<16;p[g+8>>1]=h;p[g+10>>1]=h>>>16;p[g+12>>1]=j;p[g+14>>1]=j>>>16;h=s[a+4740>>1]|s[a+4742>>1]<<16;j=s[a+4736>>1]|s[a+4738>>1]<<16;p[g>>1]=j;p[g+2>>1]=j>>>16;p[g+4>>1]=h;p[g+6>>1]=h>>>16;h=q[a+4580>>2];ka(i+48|0,i+8480|0,h<<2);j=q[a+5748>>2];if(!(q[((j<<2)+a|0)+4720>>2]?j:0)){o[a+4540|0]=r[a+7168|0];j=r[g|0]+r[a+6096|0]|0;o[g|0]=j<<24>>24<63?j:63}Wb(i+1344|0,g,a+4540|0,(d|0)==2,h);j=q[a+4580>>2];if((j|0)>=1){h=0;while(1){k=h<<2;u[k+(i+8480|0)>>2]=x(q[k+(i+1344|0)>>2])*x(152587890625e-16);h=h+1|0;if((j|0)!=(h|0)){continue}break}}Lc(a,i+8480|0,g,i+9232|0,(w(q[a+5748>>2],320)+a|0)+6208|0,t);ka(i+8480|0,i+48|0,q[a+4580>>2]<<2)}j=Vb(D,q[a+4580>>2]);h=q[c+44>>2];J=i+5784|0;g=J;q[g>>2]=q[c+40>>2];q[g+4>>2]=h;h=q[c+36>>2];K=i+5776|0;g=K;q[g>>2]=q[c+32>>2];q[g+4>>2]=h;h=q[c+28>>2];L=i+5768|0;g=L;q[g>>2]=q[c+24>>2];q[g+4>>2]=h;h=q[c+20>>2];M=i+5760|0;g=M;q[g>>2]=q[c+16>>2];q[g+4>>2]=h;h=q[c+12>>2];N=i+5752|0;g=N;q[g>>2]=q[c+8>>2];q[g+4>>2]=h;g=q[c+4>>2];q[i+5744>>2]=q[c>>2];q[i+5748>>2]=g;E=a+148|0;ka(i+9232|0,E,4352);_=a+4736|0;R=(d|0)==2;$=e-5|0;O=a+7168|0;I=a+4772|0;S=q[a+5768>>2];T=s[a+5772>>1];aa=r[a+4770|0];n=256;v=-1;k=0;h=0;U=-1;while(1){m=(j|0)==(v|0);b:{if(m){g=k;break b}if((j|0)==(U|0)){g=h;break b}if(A){g=q[i+5748>>2];q[c>>2]=q[i+5744>>2];q[c+4>>2]=g;g=q[J+4>>2];q[c+40>>2]=q[J>>2];q[c+44>>2]=g;g=q[K+4>>2];q[c+32>>2]=q[K>>2];q[c+36>>2]=g;g=q[L+4>>2];q[c+24>>2]=q[L>>2];q[c+28>>2]=g;g=q[M+4>>2];q[c+16>>2]=q[M>>2];q[c+20>>2]=g;g=q[N+4>>2];q[c+8>>2]=q[N>>2];q[c+12>>2]=g;ka(E,i+9232|0,4352);p[a+5772>>1]=T;o[a+4770|0]=aa;q[a+5768>>2]=S}Lc(a,i+8480|0,D,E,I,t);l=(A|0)!=6|F;if(!l){y=q[c+20>>2];g=i+5736|0;q[g>>2]=q[c+16>>2];q[g+4>>2]=y;y=q[c+12>>2];g=i+5728|0;q[g>>2]=q[c+8>>2];q[g+4>>2]=y;g=q[c+4>>2];q[i+5720>>2]=q[c>>2];q[i+5724>>2]=g;y=q[c+24>>2];B=q[c+40>>2];g=i+5704|0;q[g>>2]=q[c+36>>2];q[g+4>>2]=B;q[i+5712>>2]=q[c+44>>2];g=q[c+32>>2];q[i+5696>>2]=q[c+28>>2];q[i+5700>>2]=g}Gb(a,c,q[a+5748>>2],0,d);Fb(c,o[a+4765|0],o[a+4766|0],I,q[a+4584>>2]);g=(q[c+20>>2]+z(q[c+28>>2])|0)-32|0;if(!(l|(g|0)<=(e|0))){g=q[i+5724>>2];q[c>>2]=q[i+5720>>2];q[c+4>>2]=g;g=i+5736|0;l=q[g+4>>2];q[c+16>>2]=q[g>>2];q[c+20>>2]=l;g=i+5728|0;l=q[g+4>>2];q[c+8>>2]=q[g>>2];q[c+12>>2]=l;q[c+24>>2]=y;q[c+44>>2]=q[i+5712>>2];g=i+5704|0;l=q[g+4>>2];q[c+36>>2]=q[g>>2];q[c+40>>2]=l;g=q[i+5700>>2];q[c+28>>2]=q[i+5696>>2];q[c+32>>2]=g;g=r[i+9224|0];o[a+7168|0]=g;l=q[a+4580>>2];if((l|0)>=1){la(_,4,l)}if(!R){o[D|0]=g}q[a+5768>>2]=S;p[a+5772>>1]=T;g=q[a+4584>>2];if((g|0)>=1){la(I,0,g)}Gb(a,c,q[a+5748>>2],0,d);Fb(c,o[a+4765|0],o[a+4766|0],I,q[a+4584>>2]);g=(q[c+20>>2]+z(q[c+28>>2])|0)-32|0}if(f|A){break b}if((e|0)>=(g|0)){break a}}c:{d:{e:{f:{if((A|0)==6){if(!F|!(m|(e|0)<(g|0))){break a}d=q[i+5724>>2];q[c>>2]=q[i+5720>>2];q[c+4>>2]=d;d=i+5736|0;e=q[d+4>>2];q[c+16>>2]=q[d>>2];q[c+20>>2]=e;d=i+5728|0;e=q[d+4>>2];q[c+8>>2]=q[d>>2];q[c+12>>2]=e;q[c+24>>2]=y;q[c+44>>2]=q[i+5712>>2];d=i+5704|0;e=q[d+4>>2];q[c+36>>2]=q[d>>2];q[c+40>>2]=e;d=q[i+5700>>2];q[c+28>>2]=q[i+5696>>2];q[c+32>>2]=d;if(y>>>0>=1276){break f}ka(q[c>>2],i+48|0,y);ka(E,i+1344|0,4352);o[O|0]=ba;break a}g:{h:{i:{if((e|0)<(g|0)){if(A>>>0<2|F){break i}V=x(u[i+9172>>2]*x(1.5));u[i+9172>>2]=V>x(1.5)?V:x(1.5);o[a+4766|0]=0;g=h;j=-1;P=0;break h}if((g|0)>=($|0)){break a}if(!m){v=q[c+20>>2];k=i+5736|0;q[k>>2]=q[c+16>>2];q[k+4>>2]=v;v=q[c+12>>2];k=i+5728|0;q[k>>2]=q[c+8>>2];q[k+4>>2]=v;k=q[c+4>>2];q[i+5720>>2]=q[c>>2];q[i+5724>>2]=k;y=q[c+24>>2];v=q[c+40>>2];k=i+5704|0;q[k>>2]=q[c+36>>2];q[k+4>>2]=v;q[i+5712>>2]=q[c+44>>2];k=q[c+32>>2];q[i+5696>>2]=q[c+28>>2];q[i+5700>>2]=k;if(y>>>0>=1276){break e}ka(i+48|0,q[c>>2],y);ka(i+1344|0,E,4352);ba=r[O|0]}H=n<<16>>16;F=1;if(!P){break g}k=g;g=h;v=j;break d}W=n<<16>>16;P=1}U=j;j:{if(!F){X=q[a+4580>>2];if((X|0)<1){break j}m=0;C=q[a+4588>>2];j=C;while(1){B=0;h=w(m,C);l=m+1|0;if((h|0)<(w(l,C)|0)){while(1){Y=o[(a+h|0)+4772|0];Z=Y>>31;B=((Z^Z+Y)&255)+B|0;h=h+1|0;if((j|0)!=(h|0)){continue}break}}k:{l:{if(A){h=m<<2;if(q[h+i>>2]<=(B|0)|q[h+(i+32|0)>>2]){break l}}p[(i+24|0)+(m<<1)>>1]=n;q[(m<<2)+i>>2]=B;break k}q[h+(i+32|0)>>2]=1}j=j+C|0;m=l;if((m|0)!=(X|0)){continue}break}break j}if(F&P){break d}}n=n<<16>>16<16384?n<<1:32767;break c}k=Na(((g-e<<7)/q[a+4584>>2]|0)+2048|0);n=(w(k&65535,H)>>>16|0)+w(k>>16,H)|0;k=g;g=h;v=j;break c}ja(38569,38616,251);G()}ja(38646,38616,281);G()}j=W-H|0;m=((w(j,e-k|0)|0)/(g-k|0)|0)+H|0;h=m<<16>>16;j=j>>2;n=j+H|0;if((h|0)>(n|0)){break c}j=W-j|0;n=(h|0)<(j|0)?j:m}h=0;m=q[a+4580>>2];if((m|0)>=1){while(1){j=n;l=h<<2;j=q[l+(i+32|0)>>2]?p[(i+24|0)+(h<<1)>>1]:j;C=l+(i+1328|0)|0;j=j<<16>>16;l=q[(i+l|0)+9208>>2];j=(w(j,l&65535)>>16)+w(j,l>>16)|0;j=(j|0)>-8388608?j:-8388608;q[C>>2]=((j|0)<8388607?j:8388607)<<8;h=h+1|0;if((m|0)!=(h|0)){continue}break}}o[a+7168|0]=r[i+9224|0];Xb(D,i+1328|0,O,R,m);j=Vb(D,q[a+4580>>2]);h=0;m=q[a+4580>>2];if((m|0)>=1){while(1){l=h<<2;u[l+(i+8480|0)>>2]=x(q[l+(i+1328|0)>>2])*x(152587890625e-16);h=h+1|0;if((m|0)!=(h|0)){continue}break}}A=A+1|0;h=g;continue}}ra(Q,((q[a+4584>>2]<<2)+a|0)+7180|0,q[a+4592>>2]+w(q[a+4576>>2],5)<<2);if(q[a+4680>>2]){a=0}else{d=q[((q[a+4580>>2]<<2)+i|0)+8704>>2];q[a+4664>>2]=0;o[a+4541|0]=r[a+4765|0];q[a+4544>>2]=d;a=(q[c+20>>2]+z(q[c+28>>2])|0)-25>>3}q[b>>2]=a;ca=i+13584|0;return 0}function Df(a,b,c,d,e,f,g,h,i,j,k,l,m,n,t){var u=0,v=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;u=ca-176|0;N=u;ca=u;O=q[b+4328>>2];u=u-(w(q[a+4628>>2],1300)+15&-16)|0;y=u;ca=u;A=q[a+4628>>2];J=la(u,0,w(A,1300));if((A|0)>=1){F=b+4224|0;x=b+3840|0;C=q[((q[a+4592>>2]<<2)+b|0)+1276>>2];D=q[b+4324>>2];K=q[b+4320>>2];L=r[c+34|0];while(1){B=w(v,1300)+J|0;q[B+1296>>2]=0;u=v+L&3;q[B+1292>>2]=u;q[B+1288>>2]=u;q[B+1284>>2]=D;q[B+1280>>2]=K;q[B+1024>>2]=C;u=x;H=q[u+4>>2];q[B>>2]=q[u>>2];q[B+4>>2]=H;H=q[u+12>>2];q[B+8>>2]=q[u+8>>2];q[B+12>>2]=H;H=q[u+20>>2];q[B+16>>2]=q[u+16>>2];q[B+20>>2]=H;H=q[u+28>>2];q[B+24>>2]=q[u+24>>2];q[B+28>>2]=H;H=q[u+36>>2];q[B+32>>2]=q[u+32>>2];q[B+36>>2]=H;H=q[u+44>>2];q[B+40>>2]=q[u+40>>2];q[B+44>>2]=H;H=q[u+52>>2];q[B+48>>2]=q[u+48>>2];q[B+52>>2]=H;H=q[u+60>>2];q[B+56>>2]=q[u+56>>2];q[B+60>>2]=H;ka(B+1184|0,F,96);v=v+1|0;if((A|0)!=(v|0)){continue}break}}F=r[c+29|0];x=o[c+30|0];q[N+172>>2]=0;v=q[a+4588>>2];B=(v|0)<40?v:40;a:{if((F|0)==2){C=q[a+4580>>2];if((C|0)<1){break a}u=0;while(1){D=q[(u<<2)+m>>2]-3|0;B=(B|0)<(D|0)?B:D;u=u+1|0;if((C|0)!=(u|0)){continue}break}break a}if((O|0)<1){break a}u=O-3|0;B=(u|0)>(B|0)?B:u}D=r[c+31|0];C=y;u=q[a+4592>>2];y=u+q[a+4584>>2]|0;Q=C-((y<<2)+15&-16)|0;C=Q;ca=C;R=C-((y<<1)+15&-16)|0;y=R;ca=y;S=y-((v<<2)+15&-16)|0;ca=S;q[b+4332>>2]=u;q[b+4336>>2]=u;K=(u<<1)+b|0;b:{C=q[a+4580>>2];if((C|0)>=1){Y=p[((F<<24>>24<<1&-4)+6416|0)+(x<<1)>>1];U=(D|0)==4;Z=U?3:1;V=t<<16>>16;t=0;L=0;while(1){H=t<<2;W=q[H+i>>2];q[b+4348>>2]=0;y=1;X=((t>>>1|U)<<5)+f|0;c:{if((F|0)!=2){break c}F=2;O=q[(t<<2)+m>>2];if(t&Z){break c}d:{if((t|0)!=2){break d}x=0;u=0;A=q[a+4628>>2];if((A|0)>=2){y=q[J+1296>>2];v=1;while(1){C=q[(w(v,1300)+J|0)+1296>>2];F=(C|0)<(y|0);y=F?C:y;u=F?v:u;v=v+1|0;if((A|0)!=(v|0)){continue}break}}if((A|0)>0){while(1){if((u|0)!=(x|0)){v=w(x,1300)+J|0;q[v+1296>>2]=q[v+1296>>2]+134217727}x=x+1|0;if((A|0)!=(x|0)){continue}break}}if((B|0)<1){L=0;break d}v=q[N+172>>2]+B|0;L=0;x=0;while(1){y=x-B|0;v=(v-1|0)%40|0;v=(v|0)<0?v+40|0:v;A=(w(u,1300)+J|0)+(v<<2)|0;o[y+e|0]=(q[A+544>>2]>>>9|0)+1>>>1;C=q[l+4>>2];D=C<<16>>16;F=q[A+704>>2];F=((w(D,F&65535)>>16)+w(D,F>>16)|0)+w(F,(C>>15)+1>>1)|0;p[(y<<1)+K>>1]=(F|0)>536862719?32767:(F|0)<-536879104?-32768:(F>>>13|0)+1>>>1|0;q[((y+q[b+4336>>2]<<2)+b|0)+1280>>2]=q[A+1024>>2];x=x+1|0;if((B|0)!=(x|0)){continue}break}}u=q[a+4592>>2];x=q[a+4640>>2];v=(u-O|0)-x|0;if((v|0)<=2){break b}v=v-2|0;ib((v<<1)+R|0,(v+w(q[a+4588>>2],t)<<1)+b|0,X,u-v|0,x);v=q[a+4592>>2];q[b+4348>>2]=1;q[b+4332>>2]=v;F=r[c+29|0];y=0}T=l+H|0;x=q[T>>2];A=(x|0)>1?x:1;u=z(A);C=A<>16;M=536870911/(D|0)|0;E=M<<16;v=E>>16;C=0-(w(v,D)+(w(v,C&65535)>>16)<<3)|0;v=((E+w(C,(M>>15)+1>>1)|0)+w(v,C>>16)|0)+(w(v,C&65528)>>16)|0;C=q[m+H>>2];M=q[a+4628>>2];e:{if(A>>>0<=131071){u=u-15|0;A=2147483647>>>u|0;D=-2147483648>>u;v=((v|0)>(A|0)?A:(v|0)<(D|0)?D:v)<>15-u}A=q[a+4588>>2];if((A|0)>=1){u=(v>>4)+1|0;D=u<<15>>16;E=(u>>16)+1>>1;u=0;while(1){I=s[(u<<1)+d>>1];P=I<<16;q[(u<<2)+S>>2]=(w(D,P>>31)+w(E,P>>16)|0)+(w(D,I)>>16);u=u+1|0;if((A|0)!=(u|0)){continue}break}}f:{if(y){break f}v=t?v:w(v>>16,V)+(w(v&65535,V)>>16)<<2;y=q[b+4332>>2];u=(y-C|0)-2|0;if((u|0)>=(y|0)){break f}D=v&65535;v=v>>16;while(1){E=p[(u<<1)+R>>1];q[(u<<2)+Q>>2]=(w(E,D)>>16)+w(v,E);u=u+1|0;if((y|0)!=(u|0)){continue}break}}v=q[b+4344>>2];if((v|0)!=(x|0)){u=v;v=v>>31;y=z(u+v^v);u=u<>31;A=z(v+x^v);x=x<>16)<<16>>16;u=(w(v,u&65535)>>16)+w(v,u>>16)|0;x=yg(u,u>>31,x,x>>31);x=D-(((da&536870911)<<3|x>>>29)&-8)|0;v=(w(x>>16,v)+u|0)+(w(v,x&65535)>>16)|0;u=(y-A|0)+29|0;g:{if((u|0)<=15){u=16-u|0;x=2147483647>>>u|0;y=-2147483648>>u;u=((v|0)>(x|0)?x:(v|0)<(y|0)?y:v)<>u-16:0}v=q[a+4592>>2];if((v|0)>=1){y=u&65535;A=u>>16;x=q[b+4336>>2]-v|0;while(1){D=((x<<2)+b|0)+1280|0;E=q[D>>2];v=E<<16>>16;q[D>>2]=(w(v,A)+(w(v,y)>>16)|0)+w(u,(E>>15)+1>>1);x=x+1|0;if((x|0)>2]){continue}break}}h:{if(q[b+4348>>2]|(F|0)!=2){break h}v=q[b+4332>>2];x=(v-C|0)-2|0;y=v-B|0;if((x|0)>=(y|0)){break h}A=u&65535;C=u>>16;while(1){D=(x<<2)+Q|0;E=q[D>>2];v=E<<16>>16;q[D>>2]=(w(v,C)+(w(v,A)>>16)|0)+w(u,(E>>15)+1>>1);x=x+1|0;if((y|0)!=(x|0)){continue}break}}if((M|0)>=1){x=u&65535;A=u>>16;C=0;while(1){D=w(C,1300)+J|0;y=q[D+1280>>2];v=y<<16>>16;q[D+1280>>2]=(w(v,A)+(w(v,x)>>16)|0)+w(u,(y>>15)+1>>1);v=q[D+1284>>2];y=v<<16>>16;q[D+1284>>2]=((w(y,x)>>16)+w(y,A)|0)+w(u,(v>>15)+1>>1);v=0;while(1){E=D+(v<<2)|0;I=q[E>>2];y=I<<16>>16;q[E>>2]=(w(y,A)+(w(x,y)>>16)|0)+w(u,(I>>15)+1>>1);y=0;v=v+1|0;if((v|0)!=16){continue}break}v=0;while(1){I=(D+(v<<2)|0)+1184|0;P=q[I>>2];E=P<<16>>16;q[I>>2]=(w(A,E)+(w(x,E)>>16)|0)+w(u,(P>>15)+1>>1);v=v+1|0;if((v|0)!=24){continue}break}while(1){v=D+(y<<2)|0;E=q[v+864>>2];I=E<<16>>16;q[v+864>>2]=((w(I,x)>>16)+w(A,I)|0)+w(u,(E>>15)+1>>1);E=v+1024|0;I=q[E>>2];v=I<<16>>16;q[E>>2]=(w(v,A)+(w(v,x)>>16)|0)+w(u,(I>>15)+1>>1);y=y+1|0;if((y|0)!=40){continue}break}C=C+1|0;if((M|0)!=(C|0)){continue}break}}q[b+4344>>2]=q[T>>2];M=q[a+4628>>2];A=q[a+4588>>2];x=q[T>>2]}Cf(b,J,F<<24>>24,S,e,K,Q,N,X,w(t,10)+g|0,w(t,48)+h|0,O,W<<15&-65536|W>>2,q[j+H>>2],q[k+H>>2],x,n,Y,A,L,q[a+4636>>2],q[a+4640>>2],q[a+4672>>2],M,N+172|0,B);v=q[a+4588>>2];e=v+e|0;u=v<<1;K=u+K|0;t=t+1|0;C=q[a+4580>>2];if((t|0)<(C|0)){L=L+1|0;d=d+u|0;F=r[c+29|0];continue}break}A=q[a+4628>>2]}y=0;if((A|0)>=2){x=q[J+1296>>2];u=1;while(1){f=q[(w(u,1300)+J|0)+1296>>2];d=(f|0)<(x|0);x=d?f:x;y=d?u:y;u=u+1|0;if((A|0)!=(u|0)){continue}break}}d=c;c=w(y,1300)+J|0;o[d+34|0]=q[c+1292>>2];d=b;f=c;if((B|0)>=1){A=q[N+172>>2]+B|0;h=q[((C<<2)+l|0)-4>>2];g=h<<10>>16;k=(h>>21)+1>>1;u=0;while(1){h=u-B|0;i=(A-1|0)%40|0;A=(i|0)<0?i+40|0:i;i=c+(A<<2)|0;o[h+e|0]=(q[i+544>>2]>>>9|0)+1>>>1;j=q[i+704>>2];j=(w(g,j>>16)+w(j,k)|0)+(w(g,j&65535)>>16)|0;p[(h<<1)+K>>1]=(j|0)>8388479?32767:(j|0)<-8388736?-32768:(j>>>7|0)+1>>>1|0;q[((h+q[b+4336>>2]<<2)+b|0)+1280>>2]=q[i+1024>>2];u=u+1|0;if((B|0)!=(u|0)){continue}break}v=q[a+4588>>2]}e=(v<<2)+f|0;f=q[e+4>>2];q[d+3840>>2]=q[e>>2];q[d+3844>>2]=f;f=q[e+60>>2];d=b+3896|0;q[d>>2]=q[e+56>>2];q[d+4>>2]=f;f=q[e+52>>2];d=b+3888|0;q[d>>2]=q[e+48>>2];q[d+4>>2]=f;f=q[e+44>>2];d=b+3880|0;q[d>>2]=q[e+40>>2];q[d+4>>2]=f;f=q[e+36>>2];d=b+3872|0;q[d>>2]=q[e+32>>2];q[d+4>>2]=f;f=q[e+28>>2];d=b+3864|0;q[d>>2]=q[e+24>>2];q[d+4>>2]=f;f=q[e+20>>2];d=b+3856|0;q[d>>2]=q[e+16>>2];q[d+4>>2]=f;f=q[e+12>>2];d=b+3848|0;q[d>>2]=q[e+8>>2];q[d+4>>2]=f;ka(b+4224|0,c+1184|0,96);q[b+4320>>2]=q[c+1280>>2];q[b+4324>>2]=q[c+1284>>2];q[b+4328>>2]=q[((q[a+4580>>2]<<2)+m|0)-4>>2];b=ra(b,(q[a+4584>>2]<<1)+b|0,q[a+4592>>2]<<1)+1280|0;ra(b,b+(q[a+4584>>2]<<2)|0,q[a+4592>>2]<<2);ca=N+176|0;return}ja(37849,37881,253);G()}function Cf(a,b,c,d,e,f,g,h,i,j,k,l,m,n,r,s,t,u,v,x,y,z,A,B,C,D){var E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0;N=ca;ta=N;a:{if((B|0)>0){H=N-(w(B,56)+15&-16)|0;ca=H;if((v|0)>=1){ua=s>>6;J=t<<16>>16;s=u<<16;N=w(J,s>>16);U=u+944|0;_=w(U<<16>>16,J);va=w(61865984-s>>16,J);wa=u-80|0;xa=u-944|0;$=r>>16;ya=y>>1;za=y&1;Aa=z>>1;aa=m>>16;s=t>>>1|0;Ba=512-s|0;V=s-512|0;ba=r<<16>>16;da=n<<16>>16;I=A<<16>>16;ea=m<<16>>16;fa=y-1|0;Ca=(fa<<1)+k|0;O=((q[a+4336>>2]-l<<2)+a|0)+1284|0;K=((q[a+4332>>2]-l<<2)+g|0)+8|0;Da=(c|0)!=2;Ea=(y|0)<3;Fa=(t|0)<2049;Ga=(x|0)>0;while(1){b:{if(Da){T=0;break b}c=p[j>>1];m=q[K>>2];n=w(c,m>>16)+(w(c,m&65535)>>16)|0;c=p[j+2>>1];m=q[K-4>>2];n=(n+w(c,m>>16)|0)+(w(c,m&65535)>>16)|0;c=p[j+4>>1];m=q[K-8>>2];n=(n+w(c,m>>16)|0)+(w(c,m&65535)>>16)|0;c=p[j+6>>1];m=q[K-12>>2];n=(n+w(c,m>>16)|0)+(w(c,m&65535)>>16)|0;c=p[j+8>>1];m=q[K-16>>2];T=((n+w(c,m>>16)|0)+(w(c,m&65535)>>16)<<1)+4|0;K=K+4|0}P=0;c:{if((l|0)<1){ga=0;break c}m=q[O-4>>2];c=q[O-8>>2]+q[O>>2]|0;ga=T-(((w(m>>16,aa)+w(c>>16,ea)|0)+(w(c&65535,ea)>>16)|0)+(w(m&65535,aa)>>16)<<2)|0;O=O+4|0}M=L+15|0;Q=L<<2;R=Q+d|0;ha=p[i+18>>1];ia=p[i+16>>1];la=p[i+14>>1];ma=p[i+12>>1];na=p[i+10>>1];oa=p[i+8>>1];pa=p[i+6>>1];qa=p[i+4>>1];ra=p[i+2>>1];sa=p[i>>1];while(1){E=w(P,1300)+b|0;q[E+1288>>2]=w(q[E+1288>>2],196314165)+907633515;n=E+(M<<2)|0;c=q[n>>2];m=(w(c>>16,sa)+Aa|0)+(w(c&65535,sa)>>16)|0;c=q[n-4>>2];m=(m+w(c>>16,ra)|0)+(w(c&65535,ra)>>16)|0;c=q[n-8>>2];m=(m+w(c>>16,qa)|0)+(w(c&65535,qa)>>16)|0;c=q[n-12>>2];m=(m+w(c>>16,pa)|0)+(w(c&65535,pa)>>16)|0;c=q[n-16>>2];m=(m+w(c>>16,oa)|0)+(w(c&65535,oa)>>16)|0;c=q[n-20>>2];m=(m+w(c>>16,na)|0)+(w(c&65535,na)>>16)|0;c=q[n-24>>2];m=(m+w(c>>16,ma)|0)+(w(c&65535,ma)>>16)|0;c=q[n-28>>2];m=(m+w(c>>16,la)|0)+(w(c&65535,la)>>16)|0;c=q[n-32>>2];m=(m+w(c>>16,ia)|0)+(w(c&65535,ia)>>16)|0;c=q[n-36>>2];m=(m+w(c>>16,ha)|0)+(w(c&65535,ha)>>16)|0;if((z|0)==16){r=m;c=p[i+20>>1];m=q[n-40>>2];r=(r+w(c,m>>16)|0)+(w(c,m&65535)>>16)|0;c=p[i+22>>1];m=q[n-44>>2];r=(r+w(c,m>>16)|0)+(w(c,m&65535)>>16)|0;c=p[i+24>>1];m=q[n-48>>2];r=(r+w(c,m>>16)|0)+(w(c,m&65535)>>16)|0;c=p[i+26>>1];m=q[n-52>>2];r=(r+w(c,m>>16)|0)+(w(c,m&65535)>>16)|0;c=p[i+28>>1];m=q[n-56>>2];n=(r+w(c,m>>16)|0)+(w(c,m&65535)>>16)|0;c=p[i+30>>1];m=q[E+Q>>2];m=(n+w(c,m>>16)|0)+(w(c,m&65535)>>16)|0}if(za){break a}W=m<<4;m=q[E+1184>>2];n=(q[E+1284>>2]+w(I,m>>16)|0)+(w(I,m&65535)>>16)|0;q[E+1184>>2]=n;c=p[k>>1];s=(w(c,n>>16)+ya|0)+(w(c,n&65535)>>16)|0;c=q[E+1188>>2]-n|0;t=(m+w(I,c>>16)|0)+(w(I,c&65535)>>16)|0;m=2;if(!Ea){while(1){F=E+1184|0;A=m-1|0;x=F+(A<<2)|0;r=q[x>>2];n=m<<2;c=n+F|0;S=q[c>>2];q[x>>2]=t;n=q[F+(n|4)>>2];x=p[(A<<1)+k>>1];A=c;c=S-t|0;r=(r+w(I,c>>16)|0)+(w(I,c&65535)>>16)|0;q[A>>2]=r;c=p[(m<<1)+k>>1];s=(((w(x,t>>16)+s|0)+(w(x,t&65535)>>16)|0)+w(c,r>>16)|0)+(w(c,r&65535)>>16)|0;c=n-r|0;t=(S+w(I,c>>16)|0)+(w(I,c&65535)>>16)|0;m=m+2|0;if((y|0)>(m|0)){continue}break}}q[(E+(fa<<2)|0)+1184>>2]=t;d:{e:{f:{g:{A=q[R>>2];c=q[E+1280>>2];n=c&65535;m=c>>16;c=p[Ca>>1];X=((w(n,da)>>16)+w(m,da)|0)+((w(c,t>>16)+s|0)+(w(c,t&65535)>>16)<<1)<<2;x=q[C>>2];c=q[(E+(x<<2)|0)+1024>>2];Y=((w(m,$)+(w(n,$)>>16)|0)+w(c>>16,ba)|0)+(w(c&65535,ba)>>16)<<2;c=A-((((W+ga|0)-X|0)-Y>>3)+1>>1)|0;Z=q[E+1288>>2]<0;c=Z?0-c|0:c;c=(c|0)>-31744?c:-31744;F=(c|0)<30720?c:30720;t=F-u|0;s=t;h:{if(Fa){break h}s=t-V|0;if((t|0)>(V|0)){break h}if((t|0)>=(Ba|0)){break g}s=t+V|0}if((s|0)>=1024){m=(s&-1024)+wa|0;c=w(m<<16>>16,J);r=m+1024|0;n=w(r<<16>>16,J);break d}c=N;n=_;m=u;r=U;switch((s>>10)+1|0){case 1:break d;case 0:break f;default:break e}}c=N;n=_;m=u;r=U;if((t|0)>=0){break d}}c=va;n=N;m=xa;r=u;break d}m=(s&-1024|80)+u|0;r=m+1024|0;c=m<<16;n=w(-67108864-c>>16,J);c=w(0-c>>16,J)}S=q[E+1296>>2];E=w(P,56)+H|0;s=c;c=F-m<<16>>16;t=s+w(c,c)>>10;c=F-r<<16>>16;n=w(c,c)+n>>10;F=(t|0)<(n|0);s=F?r:m;q[E+28>>2]=s;c=F?m:r;q[E>>2]=c;q[E+32>>2]=S+(F?n:t);q[E+4>>2]=S+(F?t:n);c=c<<4;n=(Z?0-c|0:c)+T|0;q[E+24>>2]=n;c=s<<4;m=(Z?0-c|0:c)+T|0;q[E+52>>2]=m;c=n+W|0;q[E+8>>2]=c;n=m+W|0;q[E+36>>2]=n;m=c;c=A<<4;m=m-c|0;q[E+16>>2]=m;c=n-c|0;q[E+44>>2]=c;m=m-X|0;q[E+12>>2]=m;c=c-X|0;q[E+40>>2]=c;q[E+20>>2]=m-Y;q[E+48>>2]=c-Y;P=P+1|0;if((P|0)!=(B|0)){continue}break}t=0;c=(x-1|0)%40|0;x=(c|0)<0?c+40|0:c;q[C>>2]=x;c=0;s=(B|0)<2;if(!s){r=q[H+4>>2];m=1;while(1){n=q[(w(m,56)+H|0)+4>>2];A=(n|0)<(r|0);r=A?n:r;c=A?m:c;m=m+1|0;if((B|0)!=(m|0)){continue}break}}R=(x+D|0)%40<<2;M=R+(w(c,1300)+b|0)|0;c=q[M+384>>2];while(1){if((c|0)!=q[(R+(w(t,1300)+b|0)|0)+384>>2]){m=w(t,56)+H|0;q[m+4>>2]=q[m+4>>2]+134217727;q[m+32>>2]=q[m+32>>2]+134217727}t=t+1|0;if((B|0)!=(t|0)){continue}break}m=q[H+32>>2];r=q[H+4>>2];c=0;t=1;n=0;if(!s){while(1){x=w(t,56)+H|0;s=q[x+4>>2];A=(s|0)>(r|0);r=A?s:r;s=q[x+32>>2];x=(s|0)<(m|0);m=x?s:m;n=A?t:n;c=x?t:c;t=t+1|0;if((B|0)!=(t|0)){continue}break}}if((m|0)<(r|0)){ka((w(n,1300)+b|0)+Q|0,(w(c,1300)+b|0)+Q|0,1300-Q|0);n=w(n,56)+H|0;m=w(c,56)+H|0;q[n+24>>2]=q[m+52>>2];c=q[m+48>>2];q[n+16>>2]=q[m+44>>2];q[n+20>>2]=c;c=q[m+40>>2];q[n+8>>2]=q[m+36>>2];q[n+12>>2]=c;c=q[m+32>>2];q[n>>2]=q[m+28>>2];q[n+4>>2]=c}if(!((D|0)>(L|0)?!Ga:0)){c=L-D|0;o[c+e|0]=(q[M+544>>2]>>>9|0)+1>>>1;r=(c<<1)+f|0;m=q[h+R>>2];c=m<<16>>16;n=q[M+704>>2];c=((w(c,n&65535)>>16)+w(c,n>>16)|0)+w(n,(m>>15)+1>>1)|0;p[r>>1]=(c|0)>8388479?32767:(c|0)<-8388736?-32768:(c>>>7|0)+1>>>1|0;q[((q[a+4336>>2]-D<<2)+a|0)+1280>>2]=q[M+1024>>2];q[(q[a+4332>>2]-D<<2)+g>>2]=q[M+864>>2]}q[a+4336>>2]=q[a+4336>>2]+1;q[a+4332>>2]=q[a+4332>>2]+1;m=L+16|0;r=0;while(1){s=w(r,1300)+b|0;n=w(r,56)+H|0;q[s+1280>>2]=q[n+12>>2];q[s+1284>>2]=q[n+16>>2];c=q[n+8>>2];q[s+(m<<2)>>2]=c;q[(s+(q[C>>2]<<2)|0)+704>>2]=c;c=q[n>>2];q[(s+(q[C>>2]<<2)|0)+544>>2]=c;q[(s+(q[C>>2]<<2)|0)+864>>2]=q[n+24>>2]<<1;q[(s+(q[C>>2]<<2)|0)+1024>>2]=q[n+20>>2];c=q[s+1288>>2]+((c>>9)+1>>1)|0;q[s+1288>>2]=c;q[(s+(q[C>>2]<<2)|0)+384>>2]=c;q[s+1296>>2]=q[n+4>>2];r=r+1|0;if((B|0)!=(r|0)){continue}break}q[(q[C>>2]<<2)+h>>2]=ua;L=L+1|0;if((L|0)!=(v|0)){continue}break}}r=0;c=v<<2;while(1){e=w(r,1300)+b|0;d=e+c|0;a=q[d+4>>2];q[e>>2]=q[d>>2];q[e+4>>2]=a;a=q[d+60>>2];q[e+56>>2]=q[d+56>>2];q[e+60>>2]=a;a=q[d+52>>2];q[e+48>>2]=q[d+48>>2];q[e+52>>2]=a;a=q[d+44>>2];q[e+40>>2]=q[d+40>>2];q[e+44>>2]=a;a=q[d+36>>2];q[e+32>>2]=q[d+32>>2];q[e+36>>2]=a;a=q[d+28>>2];q[e+24>>2]=q[d+24>>2];q[e+28>>2]=a;a=q[d+20>>2];q[e+16>>2]=q[d+16>>2];q[e+20>>2]=a;a=q[d+12>>2];q[e+8>>2]=q[d+8>>2];q[e+12>>2]=a;r=r+1|0;if((B|0)!=(r|0)){continue}break}ca=ta;return}ja(37900,37881,364);G()}ja(37945,37881,422);G()}function af(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=ca-208|0;ca=d;q[d+204>>2]=c;e=q[a>>2]+a|0;c=-5;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{k:{l:{m:{n:{o:{p:{q:{r:{s:{t:{u:{v:{w:{x:{y:{switch(b-4e3|0){default:z:{switch(b-10015|0){case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 10:break a;case 0:break b;case 11:break d;case 9:break e;default:break z}}switch(b-11002|0){case 17:break w;case 16:break x;case 0:break f;default:break a};case 0:b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];e=b-2048|0;if(e>>>0>3|(e|0)==2|((b|0)!=q[a+108>>2]?!q[a+14252>>2]:0)){break a}q[a+108>>2]=b;q[a+192>>2]=b;c=0;break a;case 1:b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+108>>2];c=0;break a;case 2:b=q[d+204>>2];q[d+204>>2]=b+4;f=a;b=q[b>>2];A:{if((b|0)==-1e3){e=b;break A}c=-1;e=b;if((b|0)==-1){break A}if((b|0)<1){break a}e=500;if((b|0)<501){break A}a=w(q[a+112>>2],3e5);e=(a|0)<(b|0)?a:b}q[f+164>>2]=e;c=0;break a;case 3:b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}f=q[a+14236>>2];if(!f){f=q[a+144>>2]/400|0}c=q[a+164>>2];B:{if((c|0)!=-1){if((c|0)!=-1e3){break B}c=q[a+112>>2];a=q[a+144>>2];c=w(c,a)+((w(a,60)|0)/(f|0)|0)|0;break B}c=(w(q[a+144>>2],10208)|0)/(f|0)|0}q[b>>2]=c;c=0;break a;case 22:b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];C:{if((b|0)>=1){c=-1;if((b|0)<=q[a+112>>2]){break C}break a}c=-1;if((b|0)!=-1e3){break a}}q[a+120>>2]=b;c=0;break a;case 23:b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+120>>2];c=0;break a;case 4:b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];e=b-1101|0;if(e>>>0>4){break a}q[a+132>>2]=b;D:{switch(e|0){case 0:q[a+20>>2]=8e3;c=0;break a;case 1:q[a+20>>2]=12e3;c=0;break a;default:break D}}q[a+20>>2]=16e3;c=0;break a;case 5:b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+132>>2];c=0;break a;case 8:b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];e=b-1101|0;if(e>>>0>=5){c=-1;if((b|0)!=-1e3){break a}}q[a+128>>2]=b;E:{switch(e|0){case 0:q[a+20>>2]=8e3;c=0;break a;case 1:q[a+20>>2]=12e3;c=0;break a;default:break E}}q[a+20>>2]=16e3;c=0;break a;case 9:b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+14240>>2];c=0;break a;case 16:b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>1){break a}q[a+184>>2]=b;c=0;break a;case 17:b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+184>>2];c=0;break a;case 10:b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>10){break a}q[a+44>>2]=b;q[d>>2]=b;oa(e,4010,d);c=0;break a;case 11:b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+44>>2];c=0;break a;case 12:b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>1){break a}q[a+48>>2]=b;c=0;break a;case 13:b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+48>>2];c=0;break a;case 14:b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>100){break a}q[a+40>>2]=b;q[d+16>>2]=b;oa(e,4014,d+16|0);c=0;break a;case 15:b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+40>>2];c=0;break a;case 6:b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>1){break a}q[a+148>>2]=b;q[a+60>>2]=1-b;c=0;break a;case 18:case 19:case 26:case 30:case 32:case 33:case 34:case 35:case 38:case 39:case 44:case 45:case 48:break a;case 43:break j;case 42:break k;case 41:break l;case 40:break m;case 37:break n;case 36:break o;case 31:break p;case 29:break q;case 27:break r;case 25:break s;case 24:break t;case 21:break u;case 20:break v;case 7:break y;case 49:break c;case 28:break g;case 47:break h;case 46:break i}}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+148>>2];c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];if(b+1>>>0>101){break a}q[a+140>>2]=b;c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+140>>2];c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>1){break a}q[a+152>>2]=b;c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+152>>2];c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(b-3001>>>0>=2){c=-1;if((b|0)!=-1e3){break a}}q[a+124>>2]=b;c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+124>>2];c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}e=q[a+144>>2]/400|0;q[b>>2]=e;c=0;if(q[a+108>>2]==2051){break a}q[b>>2]=e+q[a+116>>2];break a}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+144>>2];c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+18136>>2];c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];if(b-8>>>0>16){break a}q[a+168>>2]=b;c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+168>>2];c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];if(b-5e3>>>0>9){break a}q[a+156>>2]=b;c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+156>>2];c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>1){break a}q[a+76>>2]=b;c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+76>>2];c=0;break a}a=q[d+204>>2];q[d+204>>2]=a+4;c=-1;a=q[a>>2];if(a>>>0>1){break a}q[d+32>>2]=a;oa(e,4046,d+32|0);c=0;break a}a=q[d+204>>2];q[d+204>>2]=a+4;a=q[a>>2];if(!a){c=-1;break a}q[d+48>>2]=a;oa(e,4047,d+48|0);c=0;break a}b=q[a+4>>2];xc(a+188|0);c=0;la(a+14192|0,0,3948);oa(e,4028,0);Cb(a+b|0,q[a+180>>2],d+104|0);q[a+14252>>2]=1;q[a+14204>>2]=1065353216;p[a+14196>>1]=16384;q[a+14240>>2]=1105;q[a+14224>>2]=1001;q[a+14192>>2]=q[a+112>>2];i=a,j=pa(60)<<8,q[i+14200>>2]=j;break a}b=q[d+204>>2];q[d+204>>2]=b+4;b=q[b>>2];if(b-1e3>>>0>=3){c=-1;if((b|0)!=-1e3){break a}}q[a+136>>2]=b;c=0;break a}b=q[d+204>>2];q[d+204>>2]=b+4;c=a;a=q[b>>2];q[c+176>>2]=a;q[d+64>>2]=a;c=oa(e,10024,d- -64|0);break a}b=q[d+204>>2];q[d+204>>2]=b+4;c=a;a=q[b>>2];q[c+14256>>2]=a;q[d+80>>2]=a;c=oa(e,10026,d+80|0);break a}b=q[d+204>>2];q[d+204>>2]=b+4;g=q[b>>2];if(!g){c=-1;break a}if(!(!q[a+56>>2]|(q[a+14228>>2]&-2)!=1e3)){b=q[a+4>>2];q[g>>2]=1;if(q[a+12>>2]<1){c=0;break a}h=a+b|0;e=1;while(1){b=0;b=e?q[(w(f,10064)+h|0)+6084>>2]>9:b;q[g>>2]=b;c=0;e=b;f=f+1|0;if((f|0)>2]){continue}break}break a}if(q[a+184>>2]){q[g>>2]=q[a+18124>>2]>9;c=0;break a}c=0;q[g>>2]=0;break a}a=q[d+204>>2];q[d+204>>2]=a+4;a=q[a>>2];if(!a){c=-1;break a}q[d+96>>2]=a;c=oa(e,10015,d+96|0)}ca=d+208|0;return c}function Ed(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,s=0,t=0,u=0,v=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;j=ca-32|0;H=j;ca=j;D=j-((q[a+2336>>2]<<1)+15&-16)|0;ca=D;j=q[a+2328>>2];B=D-((j+q[a+2336>>2]<<2)+15&-16)|0;ca=B;g=q[a+2332>>2]<<2;F=B-(g+15&-16)|0;e=F;ca=e;g=e-(g+79&-16)|0;ca=g;v=o[a+2767|0];if((j|0)>=1){i=p[((o[a+2765|0]<<1&-4)+6416|0)+(o[a+2766|0]<<1)>>1]<<4;A=o[a+2770|0];while(1){n=(h<<2)+a|0;j=p[(h<<1)+d>>1];e=j<<14;q[n+4>>2]=e;f=w(A,196314165)+907633515|0;m=n;a:{if((j|0)>=1){e=e-1280|0}else{if((j|0)>-1){break a}e=e|1280}q[m+4>>2]=e}e=e+i|0;q[n+4>>2]=(f|0)<0?0-e|0:e;A=f+j|0;h=h+1|0;if((h|0)>2]){continue}break}}d=q[a+1288>>2];q[g>>2]=q[a+1284>>2];q[g+4>>2]=d;d=a+1340|0;j=q[d+4>>2];q[g+56>>2]=q[d>>2];q[g+60>>2]=j;d=a+1332|0;j=q[d+4>>2];q[g+48>>2]=q[d>>2];q[g+52>>2]=j;d=a+1324|0;j=q[d+4>>2];q[g+40>>2]=q[d>>2];q[g+44>>2]=j;d=a+1316|0;j=q[d+4>>2];q[g+32>>2]=q[d>>2];q[g+36>>2]=j;d=a+1308|0;j=q[d+4>>2];q[g+24>>2]=q[d>>2];q[g+28>>2]=j;d=a+1300|0;j=q[d+4>>2];q[g+16>>2]=q[d>>2];q[g+20>>2]=j;d=a+1292|0;j=q[d+4>>2];q[g+8>>2]=q[d>>2];q[g+12>>2]=j;b:{if(q[a+2324>>2]>=1){E=a+4|0;A=q[a+2336>>2];R=(v|0)<4;v=0;j=c;while(1){k=((v<<4&-32)+b|0)+32|0;n=ka(H,k,q[a+2340>>2]<<1);s=(v<<2)+b|0;y=q[s+16>>2];d=y>>31;i=d^d+y;h=z(i);f=y<>16;m=536870911/(d|0)|0;t=m<<16;e=t>>16;d=0-(w(d,e)+(w(e,f&65535)>>16)<<3)|0;d=((t+w(d,(m>>15)+1>>1)|0)+w(e,d>>16)|0)+(w(e,d&65528)>>16)|0;c:{if(i>>>0<=131071){i=h-15|0;m=2147483647>>>i|0;t=-2147483648>>i;m=((d|0)>(m|0)?m:(d|0)<(t|0)?t:d)<>15-h}t=r[a+2765|0];d=65536;i=q[a>>2];if((i|0)!=(y|0)){u=i;d=i>>31;i=z(d+i^d);d=u<>16)+(w(e,d&65535)>>16)|0;f=yg(d,d>>31,f,f>>31);f=u-(((da&536870911)<<3|f>>>29)&-8)|0;d=(w(e,f>>16)+d|0)+(w(e,f&65535)>>16)|0;e=(i-h|0)+29|0;d:{if((e|0)<=15){e=16-e|0;h=2147483647>>>e|0;f=-2147483648>>e;d=((d|0)>(h|0)?h:(d|0)<(f|0)?f:d)<>e-16:0}f=d&65535;i=d>>16;e=0;while(1){u=g+(e<<2)|0;C=q[u>>2];h=C<<16>>16;q[u>>2]=(w(h,i)+(w(f,h)>>16)|0)+w((C>>15)+1>>1,d);e=e+1|0;if((e|0)!=16){continue}break}}i=w(v,10)+b|0;q[a>>2]=y;e:{f:{g:{if(!(!q[a+4160>>2]|q[a+4164>>2]!=2|((t|0)==2|v>>>0>1))){p[i+96>>1]=0;p[i+98>>1]=0;p[i+100>>1]=0;p[i+102>>1]=0;p[i+104>>1]=0;p[i+100>>1]=4096;e=s;s=q[a+2308>>2];q[e>>2]=s;break g}if((t|0)!=2){f=q[a+2332>>2];d=E;break f}s=q[s>>2]}h:{if(!((v|0)==2&R?0:v)){h=q[a+2336>>2];f=q[a+2340>>2];d=(h-s|0)-f|0;if((d|0)<=2){break b}if((v|0)==2){ka(((h<<1)+a|0)+1348|0,c,q[a+2332>>2]<<2);f=q[a+2340>>2];h=q[a+2336>>2]}d=d-2|0;ib((d<<1)+D|0,((d+w(q[a+2332>>2],v)<<1)+a|0)+1348|0,k,h-d|0,f);if(!v){d=p[b+136>>1];m=(w(d,m&65535)>>16)+w(d,m>>16)<<2}if((s|0)<-1){break h}h=s+1|0;f=m&65535;m=m>>16;t=q[a+2336>>2];e=0;while(1){k=e^-1;d=p[(k+t<<1)+D>>1];q[(k+A<<2)+B>>2]=w(d,m)+(w(d,f)>>16);d=(e|0)==(h|0);e=e+1|0;if(!d){continue}break}break h}if((d|0)==65536|(s|0)<-1){break h}f=s+1|0;m=d&65535;t=d>>16;e=0;while(1){k=((e^-1)+A<<2)+B|0;u=q[k>>2];h=u<<16>>16;q[k>>2]=(w(h,t)+(w(h,m)>>16)|0)+w((u>>15)+1>>1,d);h=(e|0)!=(f|0);e=e+1|0;if(h){continue}break}}f=q[a+2332>>2];if((f|0)<1){break e}e=((A-s<<2)+B|0)+8|0;d=p[i+104>>1];s=p[i+102>>1];m=p[i+100>>1];t=p[i+98>>1];i=p[i+96>>1];h=0;while(1){u=h<<2;k=q[e>>2];x=w(i,k>>16)+(w(i,k&65535)>>16)|0;k=q[e-4>>2];x=(x+w(t,k>>16)|0)+(w(t,k&65535)>>16)|0;k=q[e-8>>2];x=(x+w(m,k>>16)|0)+(w(m,k&65535)>>16)|0;k=q[e-12>>2];x=(x+w(s,k>>16)|0)+(w(s,k&65535)>>16)|0;k=q[e-16>>2];k=(q[u+E>>2]+((x+w(d,k>>16)|0)+(w(d,k&65535)>>16)<<1)|0)+4|0;q[u+F>>2]=k;q[(A<<2)+B>>2]=k<<1;A=A+1|0;e=e+4|0;h=h+1|0;if((h|0)!=(f|0)){continue}break}d=F}if((f|0)<1){break e}i=y<<10>>16;s=q[a+2340>>2];S=s>>>1|0;T=(y>>21)+1>>1;h=0;y=p[n+30>>1];m=p[n+28>>1];t=p[n+26>>1];k=p[n+24>>1];u=p[n+22>>1];C=p[n+20>>1];I=p[n+18>>1];J=p[n+16>>1];K=p[n+14>>1];L=p[n+12>>1];M=p[n+10>>1];N=p[n+8>>1];O=p[n+6>>1];P=p[n+4>>1];Q=p[n+2>>1];n=p[n>>1];while(1){i:{switch(s-10|0){default:ja(9349,9330,199);G();case 0:case 6:break i}}x=h<<2;e=x+g|0;f=q[e+60>>2];l=(w(n,f>>16)+S|0)+(w(n,f&65535)>>16)|0;f=q[e+56>>2];l=(l+w(f>>16,Q)|0)+(w(f&65535,Q)>>16)|0;f=q[e+52>>2];l=(l+w(f>>16,P)|0)+(w(f&65535,P)>>16)|0;f=q[e+48>>2];l=(l+w(f>>16,O)|0)+(w(f&65535,O)>>16)|0;f=q[e+44>>2];l=(l+w(f>>16,N)|0)+(w(f&65535,N)>>16)|0;f=q[e+40>>2];l=(l+w(f>>16,M)|0)+(w(f&65535,M)>>16)|0;f=q[e+36>>2];l=(l+w(f>>16,L)|0)+(w(f&65535,L)>>16)|0;f=q[e+32>>2];l=(l+w(f>>16,K)|0)+(w(f&65535,K)>>16)|0;f=q[e+28>>2];l=(l+w(f>>16,J)|0)+(w(f&65535,J)>>16)|0;f=q[e+24>>2];f=(l+w(f>>16,I)|0)+(w(f&65535,I)>>16)|0;U=g+(h+16<<2)|0;if((s|0)==16){l=q[e+20>>2];l=(f+w(l>>16,C)|0)+(w(l&65535,C)>>16)|0;f=q[e+16>>2];l=(l+w(u,f>>16)|0)+(w(u,f&65535)>>16)|0;f=q[e+12>>2];l=(l+w(k,f>>16)|0)+(w(k,f&65535)>>16)|0;f=q[e+8>>2];l=(l+w(t,f>>16)|0)+(w(t,f&65535)>>16)|0;f=q[e+4>>2];e=q[e>>2];f=(((l+w(m,f>>16)|0)+(w(m,f&65535)>>16)|0)+w(y,e>>16)|0)+(w(y,e&65535)>>16)|0}e=(f|0)>-134217728?f:-134217728;e=((e|0)<134217727?e:134217727)<<4;f=q[d+x>>2];x=e+f|0;j:{if((x|0)>=0){e=(e&f)>-1?x:-2147483648;break j}e=(e|f)>-1?2147483647:x}q[U>>2]=e;e=(w(i,e>>16)+w(e,T)|0)+(w(i,e&65535)>>16)|0;p[(h<<1)+j>>1]=(e|0)>8388479?32767:(e|0)<-8388736?-32768:(e>>>7|0)+1>>>1|0;f=q[a+2332>>2];h=h+1|0;if((f|0)>(h|0)){continue}break}}e=f<<2;d=e+g|0;h=q[d+4>>2];q[g>>2]=q[d>>2];q[g+4>>2]=h;h=q[d+60>>2];q[g+56>>2]=q[d+56>>2];q[g+60>>2]=h;h=q[d+52>>2];q[g+48>>2]=q[d+48>>2];q[g+52>>2]=h;h=q[d+44>>2];q[g+40>>2]=q[d+40>>2];q[g+44>>2]=h;h=q[d+36>>2];q[g+32>>2]=q[d+32>>2];q[g+36>>2]=h;h=q[d+28>>2];q[g+24>>2]=q[d+24>>2];q[g+28>>2]=h;h=q[d+20>>2];q[g+16>>2]=q[d+16>>2];q[g+20>>2]=h;h=q[d+12>>2];q[g+8>>2]=q[d+8>>2];q[g+12>>2]=h;j=(f<<1)+j|0;E=e+E|0;v=v+1|0;if((v|0)>2]){continue}break}}b=q[g+4>>2];a=a+1284|0;q[a>>2]=q[g>>2];q[a+4>>2]=b;b=q[g+60>>2];q[a+56>>2]=q[g+56>>2];q[a+60>>2]=b;b=q[g+52>>2];q[a+48>>2]=q[g+48>>2];q[a+52>>2]=b;b=q[g+44>>2];q[a+40>>2]=q[g+40>>2];q[a+44>>2]=b;b=q[g+36>>2];q[a+32>>2]=q[g+32>>2];q[a+36>>2]=b;b=q[g+28>>2];q[a+24>>2]=q[g+24>>2];q[a+28>>2]=b;b=q[g+20>>2];q[a+16>>2]=q[g+16>>2];q[a+20>>2]=b;b=q[g+12>>2];q[a+8>>2]=q[g+8>>2];q[a+12>>2]=b;ca=H+32|0;return}ja(9298,9330,144);G()}function Ma(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=x(0),m=0,n=0,o=0,r=0,s=0,t=0,v=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0;f=ca-192|0;ca=f;q[f+136>>2]=0;g=-2;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{k:{D=q[a+12>>2];s=(D|0)/50|0;y=s>>3;l:{if((y|0)>(e|0)){break l}J=q[a>>2];n=q[a+4>>2];r=s>>2;h=s>>1;g=w((D|0)/25|0,3);g=(e|0)<(g|0)?e:g;A=f;m:{n:{o:{p:{q:{r:{s:{t:{u:{v:{w:{x:{y:{if((c|0)<=1){b=q[a+64>>2];g=(b|0)>(g|0)?g:b;break y}if(b){break x}}e=q[a+60>>2];if(!e){a=w(q[a+8>>2],g);if((a|0)<1){break l}la(d,0,a<<2);break l}if((g|0)>(s|0)){e=g;while(1){b=Ma(a,0,0,d,(e|0)<(s|0)?e:s);if((b|0)<0){g=b;break l}d=(w(b,q[a+8>>2])<<2)+d|0;e=e-b|0;if((e|0)>0){continue}break}break l}if((g|0)>=(s|0)){break w}m=1;if((g|0)>(h|0)){k=h;break u}if((e|0)==1e3){b=0;e=1e3;k=g;break s}k=(g|0)>(r|0)?(g|0)<(h|0)?r:g:g;break u}E=q[a+52>>2];e=q[a+56>>2];k=q[a+64>>2];oc(f+144|0,b,c);o=1;t=q[a+60>>2];if((t|0)<1){m=1;break t}z:{if(!(q[a+68>>2]?0:!((t|0)==1002|(e|0)!=1002))){if((e|0)==1002){e=1002;m=1;break t}if((t|0)==1002){break z}m=1;break t}if((e|0)==1002){break v}}m=w(r,q[a+8>>2]);H=1;break t}if((e|0)!=1002){m=1;b=0;k=g;break s}A=f-16|0;i=A;ca=i;m=1;k=g;b=0;C=1;break q}B=f-((w(r,q[a+8>>2])<<2)+15&-16)|0;e=B;ca=e;Ma(a,0,0,e,(k|0)>(r|0)?r:k);v=-1;if((g|0)<(k|0)){break m}A=e-16|0;i=A;ca=i;H=1;m=1;C=1;break q}b=0}v=-1;if((g|0)<(k|0)){break m}t=1002;C=1;g=1;if((e|0)==1002){break r}}C=0;t=e;g=w(q[a+8>>2],(h|0)>(k|0)?h:k)}A=A-((g<<1)+15&-16)|0;i=A;ca=i;F=(t|0)!=1002;if(F){break p}}F=0;t=1002;break o}B=a+n|0;if(q[a+60>>2]==1002){rb(B)}e=(w(k,1e3)|0)/q[a+12>>2]|0;q[a+32>>2]=(e|0)>10?e:10;A:{if(o){q[a+20>>2]=q[a+48>>2];e=a;if((t|0)==1e3){g=E-1101|0;if(g>>>0>=3){break A}g=w(g,4e3)+8e3|0}else{g=16e3}q[e+28>>2]=g}I=a+16|0;j=!b;g=0;e=A;while(1){B:{if(!Bd(B,I,j,!g,f+144|0,e,f+140|0)){h=q[f+140>>2];n=w(h,q[a+8>>2]);break B}v=-3;if(!j){break m}q[f+140>>2]=k;n=w(q[a+8>>2],k);if((n|0)>=1){la(e,0,n<<1)}h=k}e=(n<<1)+e|0;g=g+h|0;if((k|0)>(g|0)){continue}break}B=0;j=17;if(!(o&1)|(((q[f+164>>2]+z(q[f+172>>2])|0)+(q[a+56>>2]==1001?20:0)|0)-15|0)>c<<3){break o}C:{if((t|0)==1001){h=sa(f+144|0,12);if(!h){t=1001;break o}g=sa(f+144|0,1);e=Qa(f+144|0,256)+2|0;n=z(q[f+172>>2]);t=1001;o=q[f+164>>2];break C}h=1;g=sa(f+144|0,1);o=q[f+164>>2];n=z(q[f+172>>2]);e=c-((o+n|0)-25>>3)|0}v=e;c=c-e|0;e=((n+o|0)-32|0)>c<<3;n=e?0:v;q[f+148>>2]=q[f+148>>2]-n;c=e?0:c;e=e?0:h;break n}q[a+28>>2]=16e3;ja(34124,33038,389);G()}n=0;g=0;e=0}v=e;h=i-(((v?1:m)<<2)+15&-16)|0;ca=h;I=!v;H=I&H;if(!(!F|!H)){Ma(a,0,0,h,(k|0)>(r|0)?r:k);B=h}i=a+J|0;e=13;D:{E:{F:{G:{switch(E-1101|0){case 3:e=19;break F;case 4:e=21;break F;case 0:break F;case 1:case 2:break G;default:break E}}e=17}q[f+128>>2]=e;if(!ua(i,10012,f+128|0)){break D}ja(34144,33038,491);G()}if(E){break a}}q[f+112>>2]=q[a+48>>2];if(ua(i,10008,f+112|0)){break k}H:{if(!v){m=0;g=(g|0)!=0;o=h-16|0;ca=o;break H}o=h-((w(r,q[a+8>>2])<<2)+15&-16)|0;ca=o;if(!g){m=0;g=0;break H}q[f+96>>2]=0;if(ua(i,10010,f+96|0)){break j}jb(i,b+c|0,n,o,r,0);q[f+80>>2]=f+136;m=1;g=1;if(ua(i,4031,f+80|0)){break i}}q[f+64>>2]=j;if(ua(i,10010,f- -64|0)){break h}I:{if((t|0)!=1e3){e=q[a+60>>2];if(!(q[a+68>>2]|((e|0)==(t|0)|(e|0)<1))){if(ua(i,4028,0)){break g}}h=jb(i,b,c,d,(k|0)>(s|0)?s:k,f+144|0);break I}p[f+132>>1]=65535;e=w(q[a+8>>2],k);if((e|0)>=1){la(d,0,e<<2)}if(!(q[a+60>>2]!=1001|(q[a+68>>2]?m:0))){q[f+48>>2]=0;if(ua(i,10010,f+48|0)){break f}jb(i,f+132|0,2,d,y,0)}h=0}J:{if(C){break J}j=w(q[a+8>>2],k);if((j|0)<1){break J}e=0;while(1){s=(e<<2)+d|0;u[s>>2]=u[s>>2]+x(x(p[(e<<1)+A>>1])*x(30517578125e-15));e=e+1|0;if((j|0)!=(e|0)){continue}break}}q[f+32>>2]=f+132;if(ua(i,10015,f+32|0)){break e}A=h;s=q[q[f+132>>2]+60>>2];K:{if(g|I){break K}if(ua(i,4028,0)){break d}q[f+16>>2]=0;if(ua(i,10010,f+16|0)){break c}jb(i,b+c|0,n,o,r,0);q[f>>2]=f+136;if(ua(i,4031,f)){break b}b=q[a+8>>2];if((b|0)<1){break K}i=48e3/q[a+12>>2]|0;j=(w(b,y)<<2)+o|0;n=(w(b,k-y|0)<<2)+d|0;h=0;C=(D|0)<400;while(1){e=0;if(!C){while(1){E=w(b,e)+h<<2;F=E+n|0;l=u[s+(w(e,i)<<2)>>2];l=x(l*l);u[F>>2]=x(l*u[j+E>>2])+x(x(x(1)-l)*u[F>>2]);e=e+1|0;if((y|0)!=(e|0)){continue}break}}h=h+1|0;if((b|0)!=(h|0)){continue}break}}L:{if(!m){break L}b=q[a+8>>2];if((b|0)<1){break L}i=(y|0)>1?y:1;h=0;m=(D|0)<400;while(1){e=0;if(!m){while(1){j=w(b,e)+h<<2;u[j+d>>2]=u[j+o>>2];e=e+1|0;if((i|0)!=(e|0)){continue}break}}h=h+1|0;if((b|0)!=(h|0)){continue}break}if((b|0)<1){break L}h=48e3/q[a+12>>2]|0;e=w(b,y)<<2;i=e+d|0;m=e+o|0;j=0;o=(D|0)<400;while(1){e=0;if(!o){while(1){n=w(b,e)+j<<2;C=n+i|0;l=u[s+(w(e,h)<<2)>>2];l=x(l*l);u[C>>2]=x(l*u[C>>2])+x(x(x(1)-l)*u[m+n>>2]);e=e+1|0;if((y|0)!=(e|0)){continue}break}}j=j+1|0;if((b|0)!=(j|0)){continue}break}}M:{if(!H){break M}b=q[a+8>>2];if((k|0)>=(r|0)){h=w(b,y);if((h|0)>=1){e=0;while(1){i=e<<2;u[i+d>>2]=u[i+B>>2];e=e+1|0;if((h|0)!=(e|0)){continue}break}}if((b|0)<1){break M}i=48e3/q[a+12>>2]|0;e=h<<2;h=e+d|0;B=e+B|0;j=0;m=(D|0)<400;while(1){e=0;if(!m){while(1){r=w(b,e)+j<<2;o=r+h|0;l=u[s+(w(e,i)<<2)>>2];l=x(l*l);u[o>>2]=x(l*u[o>>2])+x(x(x(1)-l)*u[r+B>>2]);e=e+1|0;if((y|0)!=(e|0)){continue}break}}j=j+1|0;if((b|0)!=(j|0)){continue}break}break M}if((b|0)<1){break M}h=48e3/q[a+12>>2]|0;j=0;i=(D|0)<400;while(1){e=0;if(!i){while(1){m=w(b,e)+j<<2;r=m+d|0;l=u[s+(w(e,h)<<2)>>2];l=x(l*l);u[r>>2]=x(l*u[r>>2])+x(x(x(1)-l)*u[m+B>>2]);e=e+1|0;if((y|0)!=(e|0)){continue}break}}j=j+1|0;if((b|0)!=(j|0)){continue}break}}b=q[a+40>>2];N:{if(!b){break N}e=q[a+8>>2];K=Da(+x(x(b|0)*x(.0006488140788860619))*.6931471805599453);b=w(e,k);if((b|0)<1){break N}l=x(K);e=0;while(1){h=(e<<2)+d|0;u[h>>2]=u[h>>2]*l;e=e+1|0;if((b|0)!=(e|0)){continue}break}}b=q[f+136>>2];d=q[f+172>>2];q[a+60>>2]=t;q[a+68>>2]=(g^1)&(v|0)!=0;q[a+84>>2]=(c|0)<2?0:b^d;v=(A|0)<0?A:k}g=v}ca=f+192|0;return g}ja(34279,33038,493);G()}ja(34438,33038,502);G()}ja(34561,33038,505);G()}ja(34706,33038,509);G()}ja(34847,33038,516);G()}ja(34438,33038,531);G()}ja(34918,33038,549);G()}ja(34847,33038,556);G()}ja(34438,33038,557);G()}ja(34561,33038,560);G()}ja(34124,33038,488);G()}function jb(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,s=0,t=0,v=0,y=0,A=x(0),B=0,C=0,D=0,E=0,F=x(0),G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=x(0),$=0,aa=0,ba=0,da=0,ea=0;m=ca-80|0;ca=m;K=q[a+8>>2];q[m+12>>2]=0;q[m+8>>2]=0;v=q[a+12>>2];ng(a);j=-1;k=q[a>>2];g=q[k+36>>2];a:{if((g|0)<0){break a}y=w(q[a+16>>2],e);l=q[a+24>>2];e=q[k+44>>2];while(1){if(e<(h|0);h=h+1|0;if(n){continue}break a}break}if(!d|c>>>0>1275){break a}Q=q[k+4>>2];i=Q+2048|0;t=(((w(i,K)<<2)+a|0)+w(K,96)|0)+92|0;s=q[k+8>>2];e=s<<3;E=t+e|0;L=E+e|0;$=L+e|0;n=q[a+20>>2];R=q[k+32>>2];T=(K|0)>1?K:1;g=0;e=0-y<<2;while(1){j=g<<2;D=((w(g,i)<<2)+a|0)+92|0;q[j+(m+24|0)>>2]=D;q[j+(m+16|0)>>2]=(e+D|0)- -8192;g=g+1|0;if((T|0)!=(g|0)){continue}break}if(!((c|0)>1?b:0)){lg(a,y,h);bd(m+16|0,d,y,K,q[a+16>>2],k+16|0,a+84|0);j=(y|0)/q[a+16>>2]|0;break a}Y=q[k+12>>2];g=0;q[a+56>>2]=q[a+52>>2]!=0;if(!f){oc(m+32|0,b,c);f=m+32|0}O=1;if(!((v|0)!=1|(s|0)<1)){while(1){b=(g<<2)+t|0;A=u[b>>2];F=u[(g+s<<2)+t>>2];u[b>>2]=A>F?A:F;g=g+1|0;if((s|0)!=(g|0)){continue}break}}i=z(q[f+28>>2]);g=(i+q[f+20>>2]|0)-32|0;C=c<<3;b:{if((g|0)<(C|0)){O=0;b=0;if((g|0)!=1){break b}O=sa(f,15);if(!O){O=0;g=1;b=0;break b}i=z(q[f+28>>2])}q[f+20>>2]=(C-i|0)+32;g=C;b=1}aa=b;A=x(0);i=!h;e=C;if(!((g+16|0)>(C|0)|n)){b=0;c:{if(!sa(f,1)){break c}b=Qa(f,6);U=(za(f,b+4|0)+(16<>2]+z(q[f+28>>2])|0)-30|0)<=(C|0)){b=na(f,32951,2)}else{b=0}}V=b;g=(q[f+20>>2]+z(q[f+28>>2])|0)-32|0}g=g+3|0;if(!(i|(e|0)<(g|0))){H=sa(f,3);g=(q[f+20>>2]+z(q[f+28>>2])|0)-29|0}b=k;e=n;i=l;B=t;if((g|0)<=(C|0)){g=sa(f,3)}else{g=0}vd(b,e,i,B,g,f,v,h);P=m-((s<<2)+15&-16)|0;B=P;ca=B;g=q[f+4>>2]<<3;e=(q[f+20>>2]+z(q[f+28>>2])|0)-32|0;b=H?2:4;D=(h|0)!=0&g>>>0>=e+(b|1)>>>0;j=0;G=(l|0)<=(n|0);d:{if(G){break d}N=g-D|0;if(N>>>0>=b+e>>>0){j=sa(f,b);e=(q[f+20>>2]+z(q[f+28>>2])|0)-32|0}q[(n<<2)+P>>2]=j;g=n+1|0;if((l|0)==(g|0)){break d}b=H?4:5;i=j;while(1){if(N>>>0>=b+e>>>0){i=sa(f,b)^i;j=i|j;e=(q[f+20>>2]+z(q[f+28>>2])|0)-32|0}q[(g<<2)+P>>2]=i;g=g+1|0;if((l|0)!=(g|0)){continue}break}}g=0;e:{if(!D){break e}e=(h<<3)+1152|0;b=H<<2;if(r[e+(b+j|0)|0]==r[e+((b|2)+j|0)|0]){break e}g=sa(f,1)<<1}if(!G){b=(H<<2)+g|0;e=(h<<3)+1152|0;g=n;while(1){i=(g<<2)+P|0;q[i>>2]=o[e+(b+q[i>>2]|0)|0];g=g+1|0;if((l|0)!=(g|0)){continue}break}}Z=2;if(((q[f+20>>2]+z(q[f+28>>2])|0)-28|0)<=(C|0)){Z=na(f,32954,5)}e=(s<<2)+15&-16;W=B-e|0;b=W;ca=b;$b(k,b,h,v);B=6;D=c<<6;N=b-e|0;I=N;ca=I;c=wa(f);f:{if(G){e=D;break f}b=n;e=D;while(1){g=b;b=b+1|0;i=w(p[R+(b<<1)>>1]-p[R+(g<<1)>>1]|0,v)<48?i:48;J=(i|0)>(j|0)?j:i;M=g<<2;S=W+M|0;g=e;i=B;j=0;while(1){g:{e=g;G=j;if(((i<<3)+c|0)>=(g|0)|(j|0)>=q[S>>2]){break g}g=e-J|0;j=J+G|0;X=sa(f,i);c=wa(f);i=1;if(X){continue}}break}q[M+N>>2]=G;B=(G|0)>0?(B|0)>2?B-1|0:2:B;if((b|0)!=(l|0)){continue}break}}J=I-((s<<2)+15&-16)|0;b=J;ca=b;i=5;if((c+48|0)<=(e|0)){i=na(f,32958,7)}e=D+(wa(f)^-1)|0;g=0;S=1<>>0<2){b=0;c=0;break h}b=0;c=0;if(!H){break h}b=(e|0)>=((h<<3)+16|0);c=b<<3}j=Ob(j,G,R,N,W,i,ba,da,ea-c|0,m+4|0,I,J,M,v,h,f,0,0,0);ud(k,n,l,t,J,f,v);e=(((Q|0)/2|0)-y<<2)- -8192|0;while(1){i=q[(m+24|0)+(g<<2)>>2];ra(i,i+(y<<2)|0,e);g=g+1|0;if((T|0)!=(g|0)){continue}break}i=w(s,v);g=B-(i+15&-16)|0;ca=g;e=g-((w(v,y)<<2)+15&-16)|0;ca=e;Lb(0,k,n,l,e,(v|0)==2?e+(y<<2)|0:0,g,0,I,X,Z,q[m+8>>2],q[m+12>>2],P,D-c|0,q[m+4>>2],f,h,j,a+40|0,0,q[a+36>>2],q[a+32>>2]);i:{if(b){b=za(f,1);Pb(k,n,l,t,J,M,((C-q[f+20>>2]|0)-z(q[f+28>>2])|0)+32|0,f,v);if(!b){break i}ld(k,e,g,h,v,y,n,l,t,E,L,I,q[a+40>>2]);break i}Pb(k,n,l,t,J,M,((C-q[f+20>>2]|0)-z(q[f+28>>2])|0)+32|0,f,v)}if(!(aa^1|(i|0)<1)){g=0;while(1){q[(g<<2)+t>>2]=-1042284544;g=g+1|0;if((i|0)!=(g|0)){continue}break}}ad(k,e,m+16|0,t,n,(l|0)>(Y|0)?Y:l,v,K,H,h,q[a+16>>2],O);g=0;while(1){b=q[a+60>>2];c=(b|0)>15?b:15;q[a+60>>2]=c;b=q[a+64>>2];e=(b|0)>15?b:15;q[a+64>>2]=e;b=q[(m+16|0)+(g<<2)>>2];Ta(b,b,e,c,q[k+44>>2],u[a+72>>2],u[a+68>>2],q[a+80>>2],q[a+76>>2],q[k+60>>2],Q);if(h){c=q[k+44>>2];b=b+(c<<2)|0;Ta(b,b,q[a+60>>2],U,y-c|0,u[a+68>>2],A,q[a+76>>2],V,q[k+60>>2],Q)}g=g+1|0;if((T|0)!=(g|0)){continue}break}q[a+64>>2]=q[a+60>>2];F=u[a+68>>2];u[a+68>>2]=A;u[a+72>>2]=F;b=q[a+76>>2];q[a+76>>2]=V;q[a+80>>2]=b;q[a+60>>2]=U;if(h){q[a+80>>2]=V;u[a+72>>2]=A;q[a+64>>2]=U}if((v|0)==1){b=s<<2;ka(b+t|0,t,b)}b=s<<1;j:{if(H){if((s|0)<1){break j}b=(b|0)>1?b:1;h=0;while(1){c=h<<2;e=c+E|0;A=u[e>>2];F=u[c+t>>2];u[e>>2]=A>2]<10?x(x(S|0)*x(.0010000000474974513)):x(1);b=(b|0)>1?b:1;h=0;while(1){c=h<<2;e=c+$|0;A=x(F+u[e>>2]);_=u[c+t>>2];u[e>>2]=A<_?A:_;h=h+1|0;if((b|0)!=(h|0)){continue}break}}h=0;if((n|0)>0){while(1){b=h<<2;q[b+t>>2]=0;q[b+L>>2]=-1042284544;q[b+E>>2]=-1042284544;h=h+1|0;if((n|0)!=(h|0)){continue}break}}if((l|0)<(s|0)){h=l;while(1){b=h<<2;q[b+t>>2]=0;q[b+L>>2]=-1042284544;q[b+E>>2]=-1042284544;h=h+1|0;if((s|0)!=(h|0)){continue}break}}h=0;if((n|0)>0){while(1){b=h+s<<2;q[b+t>>2]=0;q[b+L>>2]=-1042284544;q[b+E>>2]=-1042284544;h=h+1|0;if((n|0)!=(h|0)){continue}break}}if((l|0)<(s|0)){while(1){b=l+s<<2;q[b+t>>2]=0;q[b+L>>2]=-1042284544;q[b+E>>2]=-1042284544;l=l+1|0;if((s|0)!=(l|0)){continue}break}}q[a+40>>2]=q[f+28>>2];bd(m+16|0,d,y,K,q[a+16>>2],k+16|0,a+84|0);q[a+52>>2]=0;j=-3;if(((q[f+20>>2]+z(q[f+28>>2])|0)-32|0)<=(C|0)){if(q[f+44>>2]){q[a+44>>2]=1}j=(y|0)/q[a+16>>2]|0}}ca=m+80|0;return j}function Vf(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,t=0,u=0,v=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;h=ca+ -64|0;ca=h;y=h-((q[a+2328>>2]+q[a+2336>>2]<<2)+15&-16)|0;d=y;ca=d;n=d-((q[a+2336>>2]<<1)+15&-16)|0;ca=n;q[h+8>>2]=q[a+4244>>2]>>6;D=q[a+4248>>2];E=D>>6;q[h+12>>2]=E;if(q[a+2376>>2]){d=a+4210|0;p[d>>1]=0;p[d+2>>1]=0;p[d+4>>1]=0;p[d+6>>1]=0;d=a+4202|0;p[d>>1]=0;p[d+2>>1]=0;p[d+4>>1]=0;p[d+6>>1]=0;d=a+4194|0;p[d>>1]=0;p[d+2>>1]=0;p[d+4>>1]=0;p[d+6>>1]=0;d=a+4186|0;p[d>>1]=0;p[d+2>>1]=0;p[d+4>>1]=0;p[d+6>>1]=0}Qf(h+52|0,h+60|0,h+48|0,h+56|0,a+4|0,h+8|0,q[a+2332>>2],q[a+2324>>2]);k=q[a+4256>>2];a:{if(q[h+52>>2]>>q[h+56>>2]>2]>>q[h+60>>2]){o=k-1|0;k=q[a+4260>>2];break a}o=q[a+4260>>2]}C=s[a+4228>>1];d=q[a+4160>>2];g=q[a+4164>>2];e=a+4186|0;Jb(e,q[a+2340>>2],64881);f=q[a+2340>>2];ka(h+16|0,e,f<<1);m=((d|0)<1?d:1)<<1;u=p[((g|0)==2?m+1914|0:m+1918|0)>>1];b:{if(q[a+4160>>2]){break b}if(q[a+4164>>2]==2){d=16384-(s[a+4184>>1]+(s[a+4182>>1]+(s[a+4180>>1]+(s[a+4176>>1]+s[a+4178>>1]|0)|0)|0)|0)|0;C=w(p[a+4240>>1],(d<<16>>16>3277?d:3277)&65535)>>>14|0;break b}d=qb(e,f);d=(d|0)<134217728?d:134217728;d=(d|0)>4194304?d:4194304;u=(w(d<<3&65528,u)>>16)+w(d>>>13&65535,u)>>14;f=q[a+2340>>2];C=16384}d=q[a+2336>>2];i=(q[a+4172>>2]>>7)+1>>1;e=(d-i|0)-f|0;if((e|0)>2){H=q[a+4224>>2];g=e-2|0;e=g<<1;ib(e+n|0,(a+e|0)+1348|0,h+16|0,d-g|0,f);e=q[a+4248>>2];f=e>>31;v=f^e+f;f=z(v);j=e<>16;A=536870911/(x|0)|0;B=A<<16;e=B>>16;j=0-(w(e,x)+(w(e,j&65535)>>16)<<3)|0;e=((B+w(j,(A>>15)+1>>1)|0)+w(e,j>>16)|0)+(w(e,j&65528)>>16)|0;c:{if(v>>>0<=65535){f=f-16|0;j=2147483647>>>f|0;v=-2147483648>>f;e=((e|0)>(j|0)?j:(e|0)<(v|0)?v:e)<>16-f}v=q[a+2340>>2];f=v+g|0;x=q[a+2336>>2];if((f|0)<(x|0)){e=(e|0)<1073741823?e:1073741823;g=e&65535;e=e>>16;while(1){j=p[n+(f<<1)>>1];q[y+(f<<2)>>2]=(w(j,g)>>16)+w(e,j);f=f+1|0;if((x|0)>(f|0)){continue}break}}F=q[a+2324>>2];if((F|0)>=1){e=w(k,o);I=((((e|0)>128?e:128)<<2)+a|0)-508|0;j=p[m+1910>>1];A=w(p[a+2316>>1],4608);J=u<<16>>16;f=s[a+4184>>1];m=s[a+4182>>1];e=s[a+4180>>1];k=s[a+4178>>1];g=s[a+4176>>1];B=q[a+2332>>2];K=r[a+2765|0];while(1){d:{if((B|0)<=0){n=C<<16>>16;o=f<<16>>16;m=m<<16>>16;e=e<<16>>16;k=k<<16>>16;g=g<<16>>16;break d}n=C<<16>>16;o=f<<16>>16;m=m<<16>>16;e=e<<16>>16;k=k<<16>>16;g=g<<16>>16;f=(y+(d-i<<2)|0)+8|0;u=0;while(1){i=q[f>>2];t=w(i>>16,g)+(w(i&65535,g)>>16)|0;i=q[f-4>>2];t=(t+w(i>>16,k)|0)+(w(i&65535,k)>>16)|0;i=q[f-8>>2];t=(t+w(i>>16,e)|0)+(w(i&65535,e)>>16)|0;i=q[f-12>>2];t=(t+w(i>>16,m)|0)+(w(i&65535,m)>>16)|0;i=q[f-16>>2];t=(t+w(i>>16,o)|0)+(w(i&65535,o)>>16)|0;H=w(H,196314165)+907633515|0;i=q[I+(H>>>23&508)>>2];q[y+(d<<2)>>2]=((t+w(i>>16,n)|0)+(w(i&65535,n)>>16)<<2)+8;d=d+1|0;f=f+4|0;u=u+1|0;if((B|0)!=(u|0)){continue}break}}f=q[a+4172>>2];f=w(f>>16,655)+f+(w(f&65535,655)>>>16)|0;f=(f|0)<(A|0)?f:A;q[a+4172>>2]=f;i=(f>>7)+1>>1;C=K?w(n,J)>>>15|0:C;f=w(j,o)>>>15|0;m=w(j,m)>>>15|0;e=w(e,j)>>>15|0;k=w(k,j)>>>15|0;g=w(g,j)>>>15|0;l=l+1|0;if((F|0)!=(l|0)){continue}break}p[a+4184>>1]=f;p[a+4182>>1]=m;p[a+4180>>1]=e;p[a+4178>>1]=k;p[a+4176>>1]=g}d=q[a+1288>>2];g=(y+(x<<2)|0)+ -64|0;e=g;q[e>>2]=q[a+1284>>2];q[e+4>>2]=d;d=a+1340|0;e=q[d+4>>2];q[g+56>>2]=q[d>>2];q[g+60>>2]=e;d=a+1332|0;e=q[d+4>>2];q[g+48>>2]=q[d>>2];q[g+52>>2]=e;d=a+1324|0;e=q[d+4>>2];q[g+40>>2]=q[d>>2];q[g+44>>2]=e;d=a+1316|0;e=q[d+4>>2];q[g+32>>2]=q[d>>2];q[g+36>>2]=e;d=a+1308|0;e=q[d+4>>2];q[g+24>>2]=q[d>>2];q[g+28>>2]=e;d=a+1300|0;e=q[d+4>>2];q[g+16>>2]=q[d>>2];q[g+20>>2]=e;d=a+1292|0;e=q[d+4>>2];q[g+8>>2]=q[d>>2];q[g+12>>2]=e;if((v|0)>=10){u=q[a+2328>>2];if((u|0)>=1){M=v>>>1|0;j=E<<16>>16;N=(D>>21)+1>>1;d=q[g+28>>2];n=q[g+36>>2];o=q[g+44>>2];e=q[g+52>>2];f=q[g+60>>2];y=p[h+34>>1];x=p[h+32>>1];A=p[h+30>>1];B=p[h+28>>1];D=p[h+26>>1];E=p[h+24>>1];F=p[h+22>>1];I=p[h+20>>1];J=p[h+18>>1];K=p[h+16>>1];O=(v|0)<11;k=0;while(1){l=(w(K,f>>16)+M|0)+(w(K,f&65535)>>16)|0;f=g+(k<<2)|0;m=q[f+56>>2];l=(((l+w(J,m>>16)|0)+(w(J,m&65535)>>16)|0)+w(I,e>>16)|0)+(w(I,e&65535)>>16)|0;e=q[f+48>>2];l=(((l+w(F,e>>16)|0)+(w(F,e&65535)>>16)|0)+w(E,o>>16)|0)+(w(E,o&65535)>>16)|0;o=q[f+40>>2];l=(((l+w(D,o>>16)|0)+(w(D,o&65535)>>16)|0)+w(B,n>>16)|0)+(w(B,n&65535)>>16)|0;n=q[f+32>>2];l=(((l+w(A,n>>16)|0)+(w(A,n&65535)>>16)|0)+w(x,d>>16)|0)+(w(x,d&65535)>>16)|0;d=q[f+24>>2];d=(l+w(y,d>>16)|0)+(w(y,d&65535)>>16)|0;l=k+16|0;f=10;if(!O){while(1){t=p[(h+16|0)+(f<<1)>>1];L=q[g+(l+(f^-1)<<2)>>2];d=(d+w(t,L>>16)|0)+(w(t,L&65535)>>16)|0;f=f+1|0;if((v|0)!=(f|0)){continue}break}}t=g+(l<<2)|0;f=q[t>>2];d=(d|0)>-134217728?d:-134217728;d=((d|0)<134217727?d:134217727)<<4;l=f+d|0;e:{if((l|0)>=0){f=(d&f)>-1?l:-2147483648;break e}f=(d|f)>-1?2147483647:l}q[t>>2]=f;d=(w(j,f>>16)+w(f,N)|0)+(w(j,f&65535)>>16)|0;p[(k<<1)+c>>1]=(d|0)>8388479?32767:(d|0)<-8388736?-32768:(d>>>7|0)+1>>>1|0;d=n;n=o;o=e;e=m;k=k+1|0;if((u|0)!=(k|0)){continue}break}}c=g+(u<<2)|0;e=q[c+4>>2];d=a+1284|0;q[d>>2]=q[c>>2];q[d+4>>2]=e;e=q[c+60>>2];q[d+56>>2]=q[c+56>>2];q[d+60>>2]=e;e=q[c+52>>2];q[d+48>>2]=q[c+48>>2];q[d+52>>2]=e;e=q[c+44>>2];q[d+40>>2]=q[c+40>>2];q[d+44>>2]=e;e=q[c+36>>2];q[d+32>>2]=q[c+32>>2];q[d+36>>2]=e;e=q[c+28>>2];q[d+24>>2]=q[c+24>>2];q[d+28>>2]=e;e=q[c+20>>2];q[d+16>>2]=q[c+16>>2];q[d+20>>2]=e;e=q[c+12>>2];q[d+8>>2]=q[c+8>>2];q[d+12>>2]=e;p[a+4228>>1]=C;q[a+4224>>2]=H;q[b+12>>2]=i;q[b+8>>2]=i;q[b+4>>2]=i;q[b>>2]=i;ca=h- -64|0;return}ja(1959,1948,350);G()}ja(1922,1948,294);G()}function Bd(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,r=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0;m=ca-656|0;ca=m;k=m;q[k+652>>2]=0;q[k+640>>2]=0;q[k+644>>2]=0;a:{b:{c:{d:{e:{h=q[b+4>>2];if(h-1>>>0<2){if(d){while(1){q[(w(i,4264)+a|0)+2388>>2]=0;i=i+1|0;if((i|0)!=(h|0)){continue}break}}if(q[a+8544>>2]<(h|0)){n=Db(a+4264|0);h=q[b+4>>2]}if(!((h|0)!=1|q[a+8544>>2]!=2)){z=q[b+12>>2]==(w(q[a+2316>>2],1e3)|0)}f:{if(!(q[a+2388>>2]|(h|0)<1)){i=0;while(1){d=2;j=1;g:{h:{i:{j:{k:{h=q[b+16>>2];switch(h|0){case 0:case 10:break g;case 20:break i;case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 11:case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:break j;default:break k}}if((h|0)==40){break h}if((h|0)!=60){break j}d=4;j=3;break g}ja(9729,9714,146);G()}d=4;break g}d=4;j=2}h=w(i,4264)+a|0;q[h+2324>>2]=d;q[h+2392>>2]=j;d=q[b+12>>2]>>10;if(d>>>0>15|!(1<>2])+n|0;h=q[b+4>>2];i=i+1|0;if((h|0)>(i|0)){continue}break}}i=2;d=q[b>>2];l:{if((d|0)!=2){i=d;break l}if((h|0)!=2){break l}if(q[a+8540>>2]!=1){h=2;if(q[a+8544>>2]!=1){break l}}q[a+8536>>2]=0;q[a+8528>>2]=0;ka(a+6696|0,a+2432|0,300);h=q[b+4>>2];i=q[b>>2]}q[a+8544>>2]=h;q[a+8540>>2]=i;i=-200;if(q[b+8>>2]-8e3>>>0>4e4){break a}m:{if(q[a+2388>>2]|(c|0)==1){break m}n:{if((h|0)<1){break n}j=0;while(1){h=0;d=w(j,4264)+a|0;if(q[d+2392>>2]>0){i=d+2392|0;while(1){B=(d+(h<<2)|0)+2404|0,C=sa(e,1),q[B>>2]=C;h=h+1|0;if((h|0)>2]){continue}break}}B=d,C=sa(e,1),q[B+2416>>2]=C;h=q[b+4>>2];j=j+1|0;if((h|0)>(j|0)){continue}break}d=0;if((h|0)<=0){break n}while(1){i=w(d,4264)+a|0;q[i+2420>>2]=0;q[i+2424>>2]=0;q[i+2428>>2]=0;o:{if(!q[i+2416>>2]){break o}j=q[i+2392>>2];if((j|0)==1){q[i+2420>>2]=1;break o}j=na(e,q[(j<<2)+6384>>2],8);l=q[i+2392>>2];if((l|0)<1){break o}j=j+1|0;h=0;while(1){q[(i+(h<<2)|0)+2420>>2]=j>>>h&1;h=h+1|0;if((l|0)>(h|0)){continue}break}}h=q[b+4>>2];d=d+1|0;if((h|0)>(d|0)){continue}break}}if(c){break m}i=q[a+2392>>2];if((i|0)<1){break m}l=a+6684|0;j=0;while(1){if((h|0)>=1){t=j-1|0;r=j<<2;x=r+l|0;d=0;while(1){i=w(d,4264)+a|0;if(q[(r+i|0)+2420>>2]){p:{if((h|0)!=2|d){break p}tb(e,k+640|0);if(q[x>>2]){break p}bc(e,k+652|0)}u=i;y=e;h=j;q:{if(j){v=2;if(q[((t<<2)+i|0)+2420>>2]){break q}}v=0}ac(u,y,h,1,v);Yb(e,k,o[i+2765|0],o[i+2766|0],q[i+2328>>2]);h=q[b+4>>2]}d=d+1|0;if((h|0)>(d|0)){continue}break}i=q[a+2392>>2]}j=j+1|0;if((j|0)<(i|0)){continue}break}}if((h|0)!=2){break b}r:{switch(c|0){case 0:tb(e,k+640|0);if(!q[((q[a+2388>>2]<<2)+a|0)+6668>>2]){break d}break c;case 2:if(q[((q[a+2388>>2]<<2)+a|0)+2420>>2]==1){break e}break;default:break r}}q[k+640>>2]=p[a+8528>>1];q[k+644>>2]=p[a+8530>>1];break b}ja(9729,9714,152);G()}ja(9623,9714,107);G()}tb(e,k+640|0);if(q[((q[a+2388>>2]<<2)+a|0)+6684>>2]){break c}}bc(e,k+652|0);break b}q[k+652>>2]=0}h=q[b+4>>2];s:{if(q[k+652>>2]|(h|0)!=2){break s}h=2;if(q[a+8548>>2]!=1){break s}la(a+5548|0,0,1024);q[a+8428>>2]=0;o[a+6576|0]=10;q[a+6572>>2]=100;q[a+6640>>2]=1;h=q[b+4>>2]}l=(w(q[b+12>>2],h)|0)>=(w(q[b>>2],q[b+8>>2])|0);t:{if(!l){j=f;d=a+2328|0;break t}j=k-((w(q[a+2328>>2]+2|0,h)<<1)+15&-16)|0;m=j;ca=j;d=a+2328|0}i=q[d>>2];d=1;q[k>>2]=j;t=((i<<1)+j|0)+4|0;q[k+4>>2]=t;u:{v:{if(!c){d=!q[k+652>>2];break v}if(!q[a+8548>>2]){break v}d=0;h=q[b+4>>2];if((c|0)!=2|(h|0)!=2){break u}d=q[((q[a+6652>>2]<<2)+a|0)+6684>>2]==1}h=q[b+4>>2]}w:{x:{if((h|0)<1){break x}i=q[a+2388>>2];i=Rb(a,e,j+4|0,k+648|0,c,(c|0)!=2|(i|0)<1?((i|0)>0)<<1:(q[((i<<2)+a|0)+2416>>2]!=0)<<1);h=1;r=q[b+4>>2];q[a+2388>>2]=q[a+2388>>2]+1;n=i+n|0;if((r|0)<2){break x}while(1){y:{if(d){v=w(h,4264)+a|0;u=e;x=q[(h<<2)+k>>2]+4|0;A=k+648|0;y=c;i=q[a+2388>>2]-h|0;r=0;z:{if((i|0)<1){break z}r=(q[((w(h,4264)+a|0)+(i<<2)|0)+2416>>2]!=0)<<1;if((c|0)==2){break z}r=q[a+8548>>2]?1:2}n=Rb(v,u,x,A,y,r)+n|0;break y}la(q[(h<<2)+k>>2]+4|0,0,q[k+648>>2]<<1)}i=w(h,4264)+a|0;q[i+2388>>2]=q[i+2388>>2]+1;h=h+1|0;i=q[b+4>>2];if((h|0)<(i|0)){continue}break}if((i|0)!=2|q[b>>2]!=2){break x}Dd(a+8528|0,j,t,k+640|0,q[a+2316>>2],q[k+648>>2]);e=q[k+648>>2];break w}d=q[a+8532>>2];p[j>>1]=d;p[j+2>>1]=d>>>16;e=q[k+648>>2];d=(e<<1)+j|0;q[a+8532>>2]=s[d>>1]|s[d+2>>1]<<16}d=(w(q[b+8>>2],e)|0)/(w(p[a+2316>>1],1e3)|0)|0;q[g>>2]=d;j=d;d=q[b>>2];i=(d|0)==2;j=m-(((i?j:1)<<1)+15&-16)|0;m=j;ca=j;h=q[b+4>>2];if(!l){u=m;m=q[a+2328>>2];l=w(m+2|0,h)<<1;t=u-(l+15&-16)|0;ca=t;l=ka(t,f,l);q[k+4>>2]=(l+(m<<1)|0)+4;q[k>>2]=l}j=i?j:f;A:{if((((d|0)<(h|0)?d:h)|0)<1){break A}i=0;while(1){e=Aa((w(i,4264)+a|0)+2432|0,j,q[(i<<2)+k>>2]+2|0,e);d=q[b>>2];B:{if((d|0)!=2){break B}h=0;m=q[g>>2];if((m|0)<1){break B}while(1){l=h<<1;p[(l+i<<1)+f>>1]=s[j+l>>1];h=h+1|0;if((m|0)!=(h|0)){continue}break}}n=e+n|0;i=i+1|0;h=q[b+4>>2];if((i|0)>=(((d|0)<(h|0)?d:h)|0)){break A}e=q[k+648>>2];continue}}C:{D:{E:{if((d|0)!=2|(h|0)!=1){break E}if(z){break D}h=0;d=q[g>>2];if((d|0)<=0){break E}while(1){e=h<<2;p[(e|2)+f>>1]=s[e+f>>1];h=h+1|0;if((d|0)!=(h|0)){continue}break}}i=n;break C}i=Aa(a+6696|0,j,q[k>>2]+2|0,q[k+648>>2])+n|0;d=q[g>>2];if((d|0)<1){break C}h=0;while(1){p[(h<<2|2)+f>>1]=s[j+(h<<1)>>1];h=h+1|0;if((d|0)!=(h|0)){continue}break}}h=0;q[b+20>>2]=q[a+4164>>2]==2?w(q[(q[a+2316>>2]-8&-4)+9752>>2],q[a+2308>>2]):0;F:{if((c|0)==1){b=q[a+8544>>2];if((b|0)<1){break F}while(1){o[(w(h,4264)+a|0)+2312|0]=10;h=h+1|0;if((b|0)!=(h|0)){continue}break}break F}q[a+8548>>2]=q[k+652>>2]}}ca=k+656|0;return i}function cg(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,t=0,u=0,v=0,x=0,y=0;g=ca-48|0;k=g;ca=g;j=q[a+4584>>2];if((j|0)<321){if((j|0)==(j&-8)){q[k>>2]=0;h=j>>3;e=j>>2;d=h+e|0;q[k+4>>2]=d;f=d+h|0;q[k+8>>2]=f;c=f+e|0;q[k+12>>2]=c;n=g;g=j>>1;i=n-((g+c<<1)+15&-16)|0;ca=i;Hb(b,a+36|0,i,i+(c<<1)|0,q[a+4584>>2]);Hb(i,a+44|0,i,i+(f<<1)|0,g);Hb(i,a+52|0,i,i+(d<<1)|0,e);d=h-1|0;b=i+(d<<1)|0;f=p[b>>1]>>1;p[b>>1]=f;if((j|0)>=16){b=f;while(1){g=d-1|0;e=i+(g<<1)|0;c=p[e>>1]>>1;p[e>>1]=c;p[i+(d<<1)>>1]=b-c;e=(d|0)>1;b=c;d=g;if(e){continue}break}}p[i>>1]=s[i>>1]-s[a+92>>1];p[a+92>>1]=f;while(1){b=q[a+4584>>2];g=l<<2;t=g+(k+32|0)|0;j=a+g|0;h=q[j+60>>2];q[t>>2]=h;f=b;b=4-l|0;e=f>>(b>>>0<3?b:3);c=(e|0)>3;a:{if(!c){b=(h|0)>-1?h:2147483647;d=0;break a}m=e>>2;o=(m|0)>1?m:1;r=g+k|0;g=q[r>>2];d=0;f=0;while(1){b=p[i+(d+g<<1)>>1]>>3;f=w(b,b)+f|0;d=d+1|0;if((o|0)!=(d|0)){continue}break}b=f+h|0;b=(b|0)>-1?b:2147483647;d=0;if(!c){break a}c=q[r>>2];f=0;while(1){g=p[i+(c+(d+m|0)<<1)>>1]>>3;f=w(g,g)+f|0;d=d+1|0;if((o|0)!=(d|0)){continue}break}b=b+f|0;b=(b|0)>-1?b:2147483647;d=0;h=(e|0)<4;if(h){break a}e=m<<1;c=q[r>>2];f=0;while(1){g=p[i+(c+(d+e|0)<<1)>>1]>>3;f=w(g,g)+f|0;d=d+1|0;if((o|0)!=(d|0)){continue}break}b=b+f|0;b=(b|0)>-1?b:2147483647;d=0;if(h){break a}e=w(m,3);c=q[r>>2];f=0;while(1){g=p[i+(c+(f+e|0)<<1)>>1]>>3;d=w(g,g)+d|0;f=f+1|0;if((o|0)!=(f|0)){continue}break}}b=(d>>>1|0)+b|0;q[t>>2]=(b|0)>-1?b:2147483647;q[j+60>>2]=d;l=l+1|0;if((l|0)!=4){continue}break}d=0;b=q[a+144>>2];if((b|0)<=999){q[a+144>>2]=b+1;d=32767/((b>>4)+1|0)|0}f=128;g=q[k+32>>2];b=g+q[a+128>>2]|0;c=(b|0)>-1?b:2147483647;j=2147483647/(c|0)|0;b=a;e=q[b+96>>2];h=128;b:{if((c|0)>e<<3){break b}h=1024;if((c|0)<(e|0)){break b}c=e<<16>>16;c=(w(c,j>>16)+w(j,(e>>15)+1>>1)|0)+(w(c,j&65535)>>16)|0;h=c>>5&-2048|c>>>5&2047}n=b;b=((d|0)<(h|0)?h:d)<<16>>16;e=q[a+112>>2];c=j-e|0;b=(w(b,c>>16)+e|0)+(w(b,c&65535)>>16)|0;q[n+112>>2]=b;b=2147483647/(b|0)|0;l=(b|0)<16777215?b:16777215;q[a+96>>2]=l;r=q[k+36>>2];b=r+q[a+132>>2]|0;b=(b|0)>-1?b:2147483647;e=2147483647/(b|0)|0;c=q[a+100>>2];c:{if((b|0)>c<<3){break c}f=1024;if((b|0)<(c|0)){break c}b=c<<16>>16;b=(w(b,e>>16)+w(e,(c>>15)+1>>1)|0)+(w(b,e&65535)>>16)|0;f=b>>5&-2048|b>>>5&2047}b=((d|0)<(f|0)?f:d)<<16>>16;h=e;e=q[a+116>>2];c=h-e|0;b=(w(b,c>>16)+e|0)+(w(b,c&65535)>>16)|0;q[a+116>>2]=b;b=2147483647/(b|0)|0;q[a+100>>2]=(b|0)<16777215?b:16777215;t=q[k+40>>2];b=t+q[a+136>>2]|0;c=(b|0)>-1?b:2147483647;j=2147483647/(c|0)|0;f=128;b=a;e=q[b+104>>2];h=128;d:{if((c|0)>e<<3){break d}h=1024;if((c|0)<(e|0)){break d}c=e<<16>>16;c=(w(c,j>>16)+w(j,(e>>15)+1>>1)|0)+(w(c,j&65535)>>16)|0;h=c>>5&-2048|c>>>5&2047}n=b;b=((d|0)<(h|0)?h:d)<<16>>16;e=q[a+120>>2];c=j-e|0;b=(w(b,c>>16)+e|0)+(w(b,c&65535)>>16)|0;q[n+120>>2]=b;b=2147483647/(b|0)|0;q[a+104>>2]=(b|0)<16777215?b:16777215;j=q[k+44>>2];b=j+q[a+140>>2]|0;b=(b|0)>-1?b:2147483647;e=2147483647/(b|0)|0;c=q[a+108>>2];e:{if((b|0)>c<<3){break e}f=1024;if((b|0)<(c|0)){break e}b=c<<16>>16;b=(w(b,e>>16)+w(e,(c>>15)+1>>1)|0)+(w(b,e&65535)>>16)|0;f=b>>5&-2048|b>>>5&2047}b=((d|0)<(f|0)?f:d)<<16>>16;h=e;e=q[a+124>>2];c=h-e|0;b=(w(b,c>>16)+e|0)+(w(b,c&65535)>>16)|0;q[a+124>>2]=b;b=2147483647/(b|0)|0;q[a+108>>2]=(b|0)<16777215?b:16777215;i=0;b=g;e=0;d=0;while(1){f=b-l|0;f:{if((f|0)>=1){h=d<<2;u=b<<8;n=b;b=b>>>0<8388608;b=((b?u:n)|0)/((b?l:l>>8)+1|0)|0;q[h+(k+16|0)>>2]=b;b=(pa(b)<<16)-67108864>>16;e=w(b,b)+e|0;u=i;if((f|0)<=1048575){i=z(f);o=i-24|0;l=(i&1?32768:46214)>>>(i>>>1)|0;n=l;m=24-i|0;c=f;g:{if(!m){break g}c=f<>>56-i;if(f>>>0<=127){break g}c=f<>>m}c=w((w(n,w(c&127,13959168)>>>16|0)>>>16|0)+l>>>10|0,b);h:{if(!m){break h}if(f>>>0<=127){f=f<>>56-i;break h}f=f<>>m}b=w(l+(w(l,w(f&127,13959168)>>>16|0)>>>16|0)<<6&65472,b)+(c<<16)>>16}c=q[h+35328>>2];i=(u+w(c>>16,b)|0)+(w(c&65535,b)>>16)|0;break f}q[(k+16|0)+(d<<2)>>2]=256}d=d+1|0;if((d|0)!=4){c=d<<2;b=q[c+(k+32|0)>>2];l=q[(a+c|0)+96>>2];continue}break}d=(e|0)/4|0;if((e|0)>=4){c=z(d);b=24-c|0;i:{if(!b){break i}if(d>>>0<=127){d=d<>>56-c;break i}d=d<>>b}b=(c&1?32768:46214)>>>(c>>>1)|0;b=(w(w((w(b,w(d&127,13959168)>>>16|0)>>>16|0)+b|0,196608)>>16,45e3)>>16)-128|0}else{b=-128}d=La(b);v=a,x=(La(i)<<1)-32768|0,q[v+4712>>2]=x;c=q[a+4584>>2];f=q[a+4576>>2];b=(((r-q[a+100>>2]>>3&-2)+(g-q[a+96>>2]>>4)|0)+w(t-q[a+104>>2]>>4,3)|0)+(j-q[a+108>>2]>>2&-4)>>((c|0)==(w(f,20)|0));j:{if((b|0)<=0){d=d>>1;break j}if((b|0)>16383){break j}b=b<<16;e=z(b);g=(e&1?32768:46214)>>>(e>>>1)|0;g=(g+(w(g,(v=0,x=w(Ag(b,e+8|0)&127,13959168)>>>16|0,y=(e|0)==24,y?v:x))>>>16|0)|0)+32768|0;b=d<<16>>16;d=(w(g&65535,b)>>16)+w(b,g>>>16|0)|0}b=d>>7;q[a+4532>>2]=(b|0)<255?b:255;c=w(d<<16>>16,d)>>((c|0)==(w(f,10)|0)?21:20);g=q[a+76>>2];b=q[k+16>>2]-g|0;b=(w(c,b>>16)+g|0)+(w(c,b&65535)>>16)|0;q[a+76>>2]=b;v=a,x=La(w(pa(b),3)-5120>>4),q[v+4696>>2]=x;g=q[a+80>>2];b=q[k+20>>2]-g|0;b=(w(c,b>>16)+g|0)+(w(c,b&65535)>>16)|0;q[a+80>>2]=b;v=a+4700|0,x=La(w(pa(b),3)-5120>>4),q[v>>2]=x;g=q[a+84>>2];b=q[k+24>>2]-g|0;b=(w(c,b>>16)+g|0)+(w(c,b&65535)>>16)|0;q[a+84>>2]=b;v=a+4704|0,x=La(w(pa(b),3)-5120>>4),q[v>>2]=x;g=q[a+88>>2];b=q[k+28>>2]-g|0;b=(w(c,b>>16)+g|0)+(w(c,b&65535)>>16)|0;q[a+88>>2]=b;v=a+4708|0,x=La(w(pa(b),3)-5120>>4),q[v>>2]=x;ca=k+48|0;return}ja(35230,35219,106);G()}ja(35160,35219,104);G()}function kf(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,t,v,z,A,D,E){var F=x(0),G=x(0),H=0,I=0,J=x(0),K=x(0),L=x(0),M=x(0),N=0,O=0,P=0,Q=x(0),R=0,S=0,T=0,U=x(0),V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=x(0);Z=ca;I=(w(c,f)<<2)+15&-16;N=Z-I|0;ca=N;R=N-I|0;T=R;ca=R;_=la(g,0,c<<2);H=(e|0)<1;if(!H){F=x(9-h|0);g=0;while(1){I=g<<2;h=g+5|0;u[I+R>>2]=x(x(w(h,h)|0)*x(.006200000178068876))+x(x(x(x(x(p[(g<<1)+i>>1])*x(.0625))+x(.5))+F)-u[I+24768>>2]);g=g+1|0;if((g|0)!=(e|0)){continue}break}}W=(f|0)>1?f:1;U=x(-31.899999618530273);a:{b:{c:{d:{while(1){if(!H){h=w(c,O);g=0;while(1){F=x(u[(g+h<<2)+a>>2]-u[(g<<2)+R>>2]);U=F>2]=u[a+I>>2]-u[I+R>>2];h=h+1|0;if((h|0)!=(e|0)){continue}break}if(!((f|0)!=2|(e|0)<1)){h=0;while(1){H=h<<2;I=H+g|0;G=u[I>>2];F=x(u[(c+h<<2)+a>>2]-u[H+R>>2]);u[I>>2]=F1){break c}h=e-2|0;I=0;break b}O=O+1|0;if((W|0)!=(O|0)){continue}break}h=(c<<2)+15&-16;g=T-h|0;ca=g;i=g-h|0;ca=i}ka(i,g,e<<2);h=e-2|0;$=(f|0)==2;I=0;break a}F=u[g>>2];i=1;while(1){h=(i<<2)+g|0;G=u[h>>2];F=x(F+x(-2));F=F>2]=F;i=i+1|0;if((i|0)!=(e|0)){continue}break}h=e-2|0;I=0;if((e|0)<=1){break b}i=h;while(1){I=(i<<2)+g|0;G=u[I>>2];F=x(u[I+4>>2]+x(-3));u[I>>2]=F0;i=i-1|0;if(I){continue}break}I=1}$=(f|0)==2;if((e|0)<1){break a}G=x(B(x(U+x(-12)),x(0)));i=0;while(1){H=i<<2;F=u[H+g>>2];F=x(C(x(x(u[H+T>>2]-(F0?0:0-O|0;q[X>>2]=32>>>((H|0)<5?H:5);i=i+1|0;if((i|0)!=(e|0)){continue}break}}f:{if(!(v|((n|0)<1|(o|0)<51))){aa=e-3|0;i=0;O=(e|0)>4;T=e-1<<2;v=0;while(1){V=w(c,v);g=V<<2;P=g+N|0;Y=b+g|0;K=u[Y>>2];u[P>>2]=K;F=K;g=1;if(I){while(1){E=(g+V<<2)+b|0;G=u[E-4>>2];F=x(F+x(1.5));J=u[E>>2];F=F>2]=F;i=J>x(G+x(.5))?g:i;g=g+1|0;if((g|0)!=(e|0)){continue}break}}if((i|0)>=1){F=u[P+(i<<2)>>2];g=i;while(1){E=g-1|0;H=P+(E<<2)|0;J=u[H>>2];F=x(F+x(2));G=u[(E+V<<2)+b>>2];S=F>2]=F;H=(g|0)>1;g=E;if(H){continue}break}}g=2;if(O){while(1){S=(g+V<<2)+b|0;E=S-8|0;L=u[E>>2];G=u[E+4>>2];H=L>G;Q=u[S+4>>2];F=u[S+8>>2];E=Q>F;M=H?L:G;J=E?Q:F;G=H?G:L;F=E?F:Q;H=G>F;Q=H?M:J;G=H?G:F;E=P+(g<<2)|0;F=u[E>>2];ba=F;L=u[S>>2];M=H?J:M;H=L>M^1;g:{if(!H){J=G>L?L:G;if(!(G>M^1)){break g}J=M>Q?Q:M;break g}J=G>M?M:G;if(!(G>L^1)){break g}J=Lx(J+x(-1)))){h:{if(!H){F=G>L?L:G;if(!(G>M^1)){break h}F=M>Q?Q:M;break h}F=G>M?M:G;if(!(G>L^1)){break h}F=L>2]=F;g=g+1|0;if((h|0)!=(g|0)){continue}break}}J=u[Y+4>>2];g=J>2];i:{if(FG){break i}F=G}G=u[P>>2];K=x(F+x(-1));u[P>>2]=G>K?G:K;F=u[P+4>>2];u[P+4>>2]=F>K?F:K;E=(V+aa<<2)+b|0;J=u[E>>2];K=u[E+4>>2];g=J>K;F=g?J:K;G=u[E+8>>2];j:{if(FG){break j}F=G}g=P+(h<<2)|0;G=u[g>>2];K=x(F+x(-1));u[g>>2]=G>K?G:K;g=P+T|0;F=u[g>>2];u[g>>2]=F>K?F:K;g=0;if((e|0)>=1){while(1){H=g<<2;E=H+P|0;G=u[E>>2];F=u[H+R>>2];u[E>>2]=F=(e|0)){break k}g=d;while(1){c=g<<2;b=c+N|0;u[b>>2]=B(x(u[a+c>>2]-u[b>>2]),x(0));g=g+1|0;if((g|0)!=(e|0)){continue}break}break k}if((d|0)>=(e|0)){break k}g=d;while(1){h=c+g<<2;i=h+N|0;G=u[i>>2];b=g<<2;v=b+N|0;F=x(u[v>>2]+x(-4));F=F>2]=F;G=u[v>>2];F=x(F+x(-4));F=F>2]=F;u[v>>2]=x(x(B(x(u[a+b>>2]-F),x(0)))+x(B(x(u[a+h>>2]-u[i>>2]),x(0))))*x(.5);g=g+1|0;if((g|0)!=(e|0)){continue}break}}c=(d|0)<(e|0);l:{if(!c){break l}g=d;while(1){b=g<<2;a=b+N|0;G=u[a>>2];F=u[b+z>>2];u[a>>2]=F>2];F=x(C(x(x(x(Da(+(F>2]=b;g=g+1|0;if((g|0)!=(e|0)){continue}break}}h=!l;if(!(h&(k|0)!=0|j|(d|0)>=(e|0))){g=d;while(1){a=(g<<2)+N|0;u[a>>2]=u[a>>2]*x(.5);g=g+1|0;if((g|0)!=(e|0)){continue}break}}c=(d|0)>=(e|0);if(!c){g=d;while(1){F=x(2);n:{if((g|0)>=8){F=x(.5);if((g|0)<12){break n}}a=(g<<2)+N|0;u[a>>2]=u[a>>2]*F}g=g+1|0;if((g|0)!=(e|0)){continue}break}}o:{if(!q[A>>2]){break o}b=(e|0)<19?e:19;if((b|0)<=(d|0)){break o}g=d;while(1){a=(g<<2)+N|0;u[a>>2]=u[a>>2]+x(x(r[(g+A|0)+44|0])*x(.015625));g=g+1|0;if((b|0)!=(g|0)){continue}break}}i=0;if(c){break f}b=0;j=(h|(j|0)!=0)&(k|0)!=0;l=(o<<1)/3|0;h=s[(d<<1)+m>>1];while(1){k=d<<2;a=k+N|0;F=u[a>>2];F=F>2]=F;a=h<<16;o=l;c=d+1|0;h=p[(c<<1)+m>>1];a=w(h-(a>>16)|0,f)<=49){F=x(F*x(8));q:{if(x(y(F))=i>>6|j)){i=l<<6;q[(d<<2)+_>>2]=i-b;break f}q[k+_>>2]=g;b=i;d=c;if((e|0)!=(d|0)){continue}break}break f}i=0;if((d|0)>=(e|0)){break f}while(1){q[(d<<2)+D>>2]=13;d=d+1|0;if((e|0)!=(d|0)){continue}break}}q[t>>2]=i;ca=Z;return U}function Ob(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,t,u,v,x){var y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;y=ca;V=y;i=(i|0)>0?i:0;U=((i|0)>7)<<3;J=i-U|0;D=q[a+8>>2];a:{if((n|0)!=2){break a}I=r[(c-b|0)+25264|0];if((I|0)>(J|0)){I=0;break a}i=J-I|0;L=((i|0)>7)<<3;J=i-L|0}i=(D<<2)+15&-16;O=y-i|0;y=O;ca=y;M=y-i|0;y=M;ca=y;P=y-i|0;y=P;ca=y;H=n<<3;K=y-i|0;ca=K;N=(b|0)>=(c|0);if(!N){z=o+3|0;B=w((f-o|0)-5|0,n);E=q[a+32>>2];A=s[E+(b<<1)>>1];i=b;while(1){y=A<<16;C=i<<2;f=i+1|0;A=p[E+(f<<1)>>1];y=A-(y>>16)|0;F=w(y,3)<>4;q[C+P>>2]=(H|0)>(F|0)?H:F;q[C+K>>2]=(w(y,w(B,(i^-1)+c|0))<>6)-(y<>2];f=Q-1|0;C=1;b:{while(1){E=f+C>>1;if(!N){T=w(D,E);R=q[a+32>>2];z=s[R+(c<<1)>>1];S=q[a+52>>2];A=0;B=0;i=c;while(1){y=z<<16>>16;i=i-1|0;z=p[R+(i<<1)>>1];F=w(w(y-z|0,n),r[S+(i+T|0)|0])<>2;if((F|0)>=4){y=y+q[K+(i<<2)>>2]|0;y=(y|0)>0?y:0}F=i<<2;y=q[F+d>>2]+y|0;c:{if(!((y|0)>2]?!B:0)){B=q[e+F>>2];y=(y|0)<(B|0)?y:B;B=1;break c}y=(y|0)<(H|0)?0:H;B=0}A=y+A|0;if((b|0)<(i|0)){continue}break}i=(A|0)>(J|0);C=i?C:E+1|0;f=i?E-1|0:f;if((C|0)<=(f|0)){continue}E=b;if(N){break b}T=w(C,D);R=w(D,C-1|0);S=q[a+32>>2];B=s[S+(b<<1)>>1];A=q[a+52>>2];i=b;E=i;while(1){y=B<<16;f=i+1|0;B=p[S+(f<<1)>>1];y=w(B-(y>>16)|0,n);D=w(y,r[A+(i+R|0)|0])<=(Q|0)){y=q[(i<<2)+e>>2]}else{y=w(y,r[A+(i+T|0)|0])<>2}z=D>>2;if((D|0)>=4){z=q[K+(i<<2)>>2]+z|0;z=(z|0)>0?z:0}if((y|0)>=1){y=q[K+(i<<2)>>2]+y|0;y=(y|0)>0?y:0}F=z;z=i<<2;D=q[z+d>>2];F=F+((C|0)>1?D:0)|0;q[z+O>>2]=F;y=D+(y-F|0)|0;q[z+M>>2]=(y|0)>0?y:0;E=(D|0)>0?i:E;i=f;if((i|0)!=(c|0)){continue}break}break b}i=(J|0)<0;C=i?C:E+1|0;f=i?E-1|0:f;if((C|0)<=(f|0)){continue}break}E=b}K=(n|0)>1;d=64;B=0;y=0;while(1){d:{C=d+B>>1;f=c;A=0;z=0;if(!N){while(1){f=f-1|0;D=f<<2;i=(w(C,q[D+M>>2])>>6)+q[D+O>>2]|0;e:{if(!((i|0)>2]?!z:0)){z=q[e+D>>2];i=(i|0)<(z|0)?i:z;z=1;break e}i=(i|0)<(H|0)?0:H;z=0}A=i+A|0;if((b|0)<(f|0)){continue}break}f=(A|0)>(J|0);B=f?B:C;d=f?C:d;y=y+1|0;if((y|0)!=6){continue}i=0;A=c;z=0;while(1){A=A-1|0;d=A<<2;f=q[d+O>>2]+(w(q[d+M>>2],B)>>6)|0;y=f;F=d+k|0;f=(y|0)>=q[d+P>>2];y=z?y:f?y:(y|0)<(H|0)?0:H;d=q[d+e>>2];d=(d|0)>(y|0)?y:d;q[F>>2]=d;i=d+i|0;z=f|z;if((b|0)<(A|0)){continue}break}break d}i=0;f=(J|0)<0;B=f?B:C;d=f?C:d;y=y+1|0;if((y|0)!=6){continue}}break}B=c-1|0;f:{g:{if((E|0)>=(B|0)){f=c;y=I;break g}O=b+2|0;d=H+8|0;z=c;while(1){y=q[a+32>>2];A=p[y+(z<<1)>>1];f=B;M=p[y+(f<<1)>>1];B=A-M|0;N=f<<2;D=N+k|0;C=q[D>>2];F=J-i|0;y=p[y+(b<<1)>>1];Q=(F>>>0)/(A-y>>>0)|0;y=F+w(Q,y-A|0)+(y-M)|0;A=(C+w(Q,B)|0)+((y|0)>0?y:0)|0;y=q[P+N>>2];if((A|0)>=(((d|0)<(y|0)?y:d)|0)){h:{i:{if(u){if(!((z|0)<=(O|0)|(w(B,(z|0)>17?(v|0)<(z|0)?9:7:0)<>4<(A|0)?(f|0)<=(x|0):0))){va(t,0,1);break h}va(t,1,1);break i}if(!sa(t,1)){break h}}f=z;y=I;break f}A=A-8|0;C=q[D>>2];i=i+8|0}y=I;if((y|0)>=1){y=r[(f-b|0)+25264|0]}z=(A|0)<(H|0)?0:H;q[D>>2]=z;i=(z+(i-(C+I|0)|0)|0)+y|0;I=y;z=f;B=z-1|0;if((E|0)<(B|0)){continue}break}}J=J+U|0}j:{k:{l:{if((b|0)<(f|0)){m:{n:{o:{p:{x=L;q:{if((y|0)>=1){if(!u){break p}v=q[g>>2];v=(f|0)>(v|0)?v:f;q[g>>2]=v;Pa(t,v-b|0,(f-b|0)+1|0);d=q[g>>2];break q}q[g>>2]=0;d=0}d=(d|0)>(b|0);A=d?0:x;if(!L|!d){break n}if(!u){break o}va(t,q[h>>2],1);break m}d=Qa(t,(f-b|0)+1|0)+b|0;q[g>>2]=d;d=(b|0)<(d|0);A=d?0:L;if(!L|!d){break n}}W=h,X=sa(t,1),q[W>>2]=X;break m}q[h>>2]=0}L=o<<3;I=q[a+32>>2];d=p[I+(b<<1)>>1];u=(J-i|0)+A|0;i=p[I+(f<<1)>>1];t=(u>>>0)/(i-d>>>0)|0;v=w(t,d-i|0);A=d;i=b;while(1){x=A<<16;y=(i<<2)+k|0;i=i+1|0;A=p[I+(i<<1)>>1];q[y>>2]=q[y>>2]+w(t,A-(x>>16)|0);if((f|0)!=(i|0)){continue}break}i=u+v|0;z=d;y=b;while(1){t=z<<16;u=(y<<2)+k|0;y=y+1|0;z=p[I+(y<<1)>>1];t=z-(t>>16)|0;t=(i|0)<(t|0)?i:t;q[u>>2]=t+q[u>>2];i=i-t|0;if((f|0)!=(y|0)){continue}break}C=(n|0)>1?4:3;J=0-(n<<3)|0;x=0;r:{while(1){if((b|0)==(f|0)){break r}t=b<<2;u=t+k|0;i=q[u>>2];if((i|0)<=-1){break l}y=d<<16;v=i+x|0;i=b+1|0;d=p[I+(i<<1)>>1];z=d-(y>>16)<=2){y=0;E=v;v=v-q[e+t>>2]|0;A=(v|0)>0?v:0;B=E-A|0;q[u>>2]=B;v=w(n,z);if(!(q[h>>2]|((z|0)==2|(n|0)!=2))){y=q[g>>2]>(b|0)}v=v+y|0;E=v<<3;y=w(v,L+p[q[a+56>>2]+(b<<1)>>1]|0);b=(w(v,-21)+((z|0)==2?E>>2:0)|0)+(y>>1)|0;z=B+b|0;t:{if((z|0)>2)+b|0;break t}if((z|0)>=(w(v,24)|0)){break t}b=(y>>3)+b|0}y=l+t|0;z=(B+(v<<2)|0)+b|0;z=(((z|0)>0?z:0)>>>0)/(v>>>0)>>>3|0;q[y>>2]=z;v=q[u>>2];if((w(n,z)|0)>v>>3){z=v>>K>>3;q[y>>2]=z}v=(z|0)<8?z:8;q[y>>2]=v;q[m+t>>2]=(q[u>>2]+b|0)<=(w(v,E)|0);q[u>>2]=q[u>>2]+w(J,q[y>>2]);break s}b=v-H|0;A=(b|0)>0?b:0;q[u>>2]=v-A;q[l+t>>2]=0;q[m+t>>2]=1}if(A){b=A>>>C|0;v=l+t|0;y=q[v>>2];z=8-y|0;b=(b|0)<(z|0)?b:z;q[v>>2]=b+y;b=w(b,H);q[m+t>>2]=(b|0)>=(A-x|0);x=A-b|0}else{x=0}if(q[u>>2]<=-1){break k}b=i;if(q[l+t>>2]>-1){continue}break}ja(25368,25325,514);G()}q[j>>2]=x;if((c|0)>(f|0)){i=f;while(1){a=i<<2;d=a+l|0;b=a+k|0;e=q[b>>2]>>K>>3;q[d>>2]=e;if(q[b>>2]!=(w(e,H)|0)){break j}q[b>>2]=0;q[a+m>>2]=q[d>>2]<1;i=i+1|0;if((i|0)!=(c|0)){continue}break}}ca=V;return f}ja(25288,25325,391);G()}ja(25337,25325,442);G()}ja(25337,25325,513);G()}ja(25400,25325,524);G()}function Of(a,b,c,d){var e=0,f=x(0),g=x(0),h=0,i=0,j=x(0),k=0,l=x(0),m=0,n=x(0),s=0,t=x(0),v=0,z=0,A=0,B=0,C=x(0),D=0,E=x(0),G=0,H=0,I=0;m=ca-1184|0;ca=m;s=q[a+4600>>2];e=q[a+4716>>2];l=x(x(x(q[a+4700>>2]+q[a+4696>>2]|0)*x(.5))*x(30517578125e-15));u[b+696>>2]=l;t=x(e|0);n=x(t*x(.0078125));f=x(1/(Da(+x(x(n+x(-20))*x(-.25)))+1));u[b+700>>2]=f;if(!q[a+4676>>2]){j=x(x(x(q[a+4532>>2])*x(-.00390625))+x(1));n=x(n-x(j*x(j*x(x(x(l*x(.5))+x(.5))*x(f+f)))))}a:{if(r[a+4765|0]==2){o[a+4766|0]=0;f=u[a+10060>>2];f=x(f+f);break a}i=w(p[a+4580>>1],5);e=(i|0)/2|0;if((i|0)>=2){i=q[a+4576>>2]<<1;C=x(i|0);f=x(0);k=i<<2;while(1){j=x(db(+x(C+x(ta(c,i))))*3.32192809488736);g=h?x(g+x(y(x(j-f)))):g;c=c+k|0;f=j;h=h+1|0;if((e|0)!=(h|0)){continue}break}}f=x(x(x(x(t*x(-.4000000059604645))*x(.0078125))+x(6))*x(x(1)-l));if(!(x(x(e-1|0)*x(.6000000238418579))>2];b:{if((c|0)<1){break b}s=d-(s<<2)|0;C=x(n+f);f=x(u[b+704>>2]*x(.0010000000474974513));E=x(x(.9399999976158142)/x(x(f*f)+x(1)));l=x(x(x(q[a+4672>>2])*x(152587890625e-16))+x(u[b+700>>2]*x(.009999999776482582)));t=x(x(1)-x(l*l));while(1){d=q[a+4576>>2];e=w(d,3);c=(q[a+4604>>2]-e|0)/2|0;gb(m+224|0,s,1,c);i=c<<2;ka(i+(m+224|0)|0,i+s|0,w(d,12));d=c+e<<2;gb(d+(m+224|0)|0,d+s|0,2,c);e=q[a+4588>>2];c=q[a+4636>>2];d=q[a+4604>>2];c:{if(q[a+4672>>2]>=1){Pf(m+112|0,m+224|0,l,d,c);break c}Uc(m+112|0,m+224|0,d,c+1|0)}f=u[m+112>>2];u[m+112>>2]=f+x(x(f*x(29999999242136255e-21))+x(1));f=Tc(m,m+112|0,q[a+4636>>2]);i=(w(z,96)+b|0)+244|0;Sc(i,m,q[a+4636>>2]);d=(z<<2)+b|0;f=x(F(f));u[d>>2]=f;c=q[a+4636>>2];if(q[a+4672>>2]>=1){g=u[(i+(c<<2)|0)-4>>2];if((c|0)>=2){h=c-2|0;while(1){g=x(u[i+(h<<2)>>2]-x(l*g));k=(h|0)>0;h=h-1|0;if(k){continue}break}}u[d>>2]=f*x(x(1)/x(x(l*g)+x(1)))}G=e<<2;fb(i,c,E);h=q[a+4636>>2];d:{if(q[a+4672>>2]>=1){c=h-1|0;D=(h|0)<2;if(!D){g=u[i+(c<<2)>>2];e=c;while(1){d=e-1|0;k=i+(d<<2)|0;g=x(u[k>>2]-x(l*g));u[k>>2]=g;k=(e|0)>1;e=d;if(k){continue}break}}d=(h|0)<1;if(d){break d}f=u[i>>2];n=x(t/x(x(l*f)+x(1)));f=x(n*f);u[i>>2]=f;k=1;if((h|0)!=1){while(1){e=i+(k<<2)|0;u[e>>2]=n*u[e>>2];k=k+1|0;if((h|0)!=(k|0)){continue}break}if(d){break d}k=(h|0)==1}H=i+(c<<2)|0;A=0;v=0;while(1){j=x(y(f));d=j>x(-1);g=d?j:x(-1);v=d?0:v;e=1;if((h|0)!=1){while(1){j=x(y(u[i+(e<<2)>>2]));d=j>g;g=d?j:g;v=d?e:v;e=e+1|0;if((h|0)!=(e|0)){continue}break}}if(g<=x(3.999000072479248)){break d}e=1;if(!D){while(1){j=f;d=i+(e<<2)|0;f=u[d>>2];u[d-4>>2]=j+x(l*f);e=e+1|0;if((h|0)!=(e|0)){continue}break}}f=x(x(1)/n);e=0;while(1){d=i+(e<<2)|0;u[d>>2]=f*u[d>>2];e=e+1|0;if((h|0)!=(e|0)){continue}break}fb(i,h,x(x(.9900000095367432)-x(x(x(x(x(A|0)*x(.10000000149011612))+x(.800000011920929))*x(g+x(-3.999000072479248)))/x(g*x(v+1|0)))));if(!D){g=u[H>>2];e=c;while(1){d=e-1|0;B=i+(d<<2)|0;g=x(u[B>>2]-x(l*g));u[B>>2]=g;B=(e|0)>1;e=d;if(B){continue}break}}f=u[i>>2];n=x(t/x(x(l*f)+x(1)));f=x(n*f);u[i>>2]=f;e=1;if(!k){while(1){d=i+(e<<2)|0;u[d>>2]=n*u[d>>2];e=e+1|0;if((h|0)!=(e|0)){continue}break}}A=A+1|0;if((A|0)!=10){continue}break}break d}d=0;c=0;if((h|0)<1){break d}while(1){g=x(-1);e=0;while(1){f=x(y(u[i+(e<<2)>>2]));k=f>g;g=k?f:g;c=k?e:c;e=e+1|0;if((h|0)!=(e|0)){continue}break}if(g<=x(3.999000072479248)){break d}fb(i,h,x(x(.9900000095367432)-x(x(x(x(x(d|0)*x(.10000000149011612))+x(.800000011920929))*x(g+x(-3.999000072479248)))/x(g*x(c+1|0)))));d=d+1|0;if((d|0)!=10){continue}break}}s=s+G|0;c=q[a+4580>>2];z=z+1|0;if((c|0)>(z|0)){continue}break}I=Ab(+x(C*x(-.1599999964237213)));h=0;e=0;if((c|0)<1){break b}e=(c|0)>0;f=x(I);while(1){d=(h<<2)+b|0;u[d>>2]=x(u[d>>2]*f)+x(1.2483305931091309);h=h+1|0;if((h|0)!=(c|0)){continue}break}}d=e;g=x(q[a+4532>>2]);j=x(x(g*x(.00390625))*x(x(x(x(x(x(q[a+4696>>2])*x(30517578125e-15))+x(-1))*x(.5))+x(1))*x(4)));e:{f:{g:{h=r[a+4765|0];if((h|0)==2){if(d){l=x(x(.20000000298023224)/x(q[a+4576>>2]));e=0;while(1){i=(e<<2)+b|0;f=x(l+x(x(3)/x(q[i+228>>2])));u[i+628>>2]=f+x(-1);u[i+644>>2]=x(x(1)-f)-x(j*f);e=e+1|0;if((e|0)!=(c|0)){continue}break}}f=x(x(x(g*x(-.26249998807907104))*x(.00390625))+x(-.25));break g}f=x(x(1.2999999523162842)/x(q[a+4576>>2]));g=x(f+x(-1));u[b+628>>2]=g;u[b+644>>2]=x(x(1)-f)+x(x(j*f)*x(-.6000000238418579));e=1;if((c|0)>1){i=b+644|0;while(1){s=e<<2;u[(s+b|0)+628>>2]=g;u[i+s>>2]=u[b+644>>2];e=e+1|0;if((e|0)!=(c|0)){continue}break}f=x(-.25);break g}if(!d){break e}f=x(-.25);j=x(0);break f}if((h|0)==2){if(!d){break e}j=x(x(F(u[a+10060>>2]))*x(x(x(x(1)-x(x(x(1)-u[b+700>>2])*u[b+696>>2]))*x(.20000000298023224))+x(.30000001192092896)));break f}j=x(0);if(!d){break e}}h=0;while(1){g=u[a+7172>>2];g=x(g+x(x(j-g)*x(.4000000059604645)));u[a+7172>>2]=g;d=(h<<2)+b|0;u[d+676>>2]=g;g=u[a+7176>>2];g=x(g+x(x(f-g)*x(.4000000059604645)));u[a+7176>>2]=g;u[d+660>>2]=g;h=h+1|0;if((h|0)!=(c|0)){continue}break}}ca=m+1184|0}function rg(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,t=0,u=0,v=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;k=ca-32|0;l=k;ca=k;j=q[a+2316>>2];if((j|0)!=q[a+4156>>2]){g=q[a+2340>>2];m=32767/(g+1|0)|0;if((g|0)>=1){while(1){f=f+m|0;p[((e<<1)+a|0)+4052>>1]=f;e=e+1|0;if((g|0)!=(e|0)){continue}break}}q[a+4156>>2]=j;e=a+4148|0;q[e>>2]=0;q[e+4>>2]=3176576}a:{b:{if(!q[a+4160>>2]){c:{if(q[a+4164>>2]){break c}e=0;g=q[a+2340>>2];if((g|0)>0){while(1){j=(e<<1)+a|0;m=j+4052|0;f=p[m>>1];j=p[j+2344>>1]-f|0;p[m>>1]=f+((w(j&65535,16348)>>>16|0)+w(j>>>16|0,16348)|0);e=e+1|0;if((g|0)!=(e|0)){continue}break}}j=a+2772|0;e=0;m=q[a+2324>>2];d:{if((m|0)<=0){g=0;break d}g=0;f=0;while(1){n=q[((e<<2)+b|0)+16>>2];h=(n|0)>(f|0);f=h?n:f;g=h?e:g;e=e+1|0;if((m|0)!=(e|0)){continue}break}}e=q[a+2332>>2];ra(((e<<2)+a|0)+2772|0,j,w(e,(m<<2)-4|0));e=q[a+2332>>2];ka(j,((w(e,g)<<2)+a|0)+4|0,e<<2);g=q[a+2324>>2];if((g|0)<1){break c}e=q[a+4148>>2];f=0;while(1){j=e;e=q[((f<<2)+b|0)+16>>2]-e|0;e=j+w(e>>16,4634)+(w(e&65535,4634)>>>16)|0;q[a+4148>>2]=e;f=f+1|0;if((g|0)!=(f|0)){continue}break}}if(!q[a+4160>>2]){break b}}h=k-((d<<2)+79&-16)|0;ca=h;e=s[a+4228>>1];b=e<<16;f=q[a+4248>>2];g=f<<16>>16;f=((w(e,g)>>16)+w(g,b>>31)|0)+w((f>>15)+1>>1,b>>16)|0;g=f>>16;e=q[a+4148>>2];e:{if(!((e|0)<8388609?(f|0)<=2097151:0)){e=e>>16;e=w(e,e)-(w(g,g)<<5)|0;b=0;if((e|0)<1){break e}b=z(e);f=24-b|0;f:{if(!f){break f}if(e>>>0<=127){e=e<>>56-b;break f}e=e<>>f}b=w(w(e&127,13959168)>>>16|65536,(b&1?32768:46214)>>>(b>>>1)|0)&-65536;break e}j=e<<16>>16;m=f<<16>>16;e=((w(j,e>>16)-(((w(m,f&65535)>>16)+w(g,m)|0)+w(f,(f>>15)+1>>>1|0)<<5)|0)+(w(j,e&65535)>>16)|0)+w(e,(e>>15)+1>>1)|0;b=0;if((e|0)<1){break e}b=z(e);f=24-b|0;g:{if(!f){break g}if(e>>>0<=127){e=e<>>56-b;break g}e=e<>>f}b=(b&1?32768:46214)>>>(b>>>1)|0;b=(w(b,w(e&127,13959168)>>>16|0)>>>16|0)+b<<8}j=h- -64|0;f=255;while(1){e=f;f=e>>1;if((d|0)<(e|0)){continue}break}g=q[a+4152>>2];if((d|0)>=1){f=0;while(1){g=w(g,196314165)+907633515|0;q[j+(f<<2)>>2]=q[(((e&g>>24)<<2)+a|0)+2772>>2];f=f+1|0;if((f|0)!=(d|0)){continue}break}}q[a+4152>>2]=g;Ga(l,a+4052|0,q[a+2340>>2]);e=a+4140|0;f=q[e+4>>2];q[h+56>>2]=q[e>>2];q[h+60>>2]=f;e=a+4132|0;f=q[e+4>>2];q[h+48>>2]=q[e>>2];q[h+52>>2]=f;e=a+4124|0;f=q[e+4>>2];q[h+40>>2]=q[e>>2];q[h+44>>2]=f;e=a+4116|0;f=q[e+4>>2];q[h+32>>2]=q[e>>2];q[h+36>>2]=f;e=a+4108|0;f=q[e+4>>2];q[h+24>>2]=q[e>>2];q[h+28>>2]=f;e=a+4100|0;f=q[e+4>>2];q[h+16>>2]=q[e>>2];q[h+20>>2]=f;e=a+4092|0;f=q[e+4>>2];q[h+8>>2]=q[e>>2];q[h+12>>2]=f;k=a+4084|0;e=k;f=q[e+4>>2];q[h>>2]=q[e>>2];q[h+4>>2]=f;h:{i:{n=q[a+2340>>2];switch(n-10|0){case 0:case 6:break h;default:break i}}ja(1721,1788,149);G()}if((d|0)>=1){M=n>>>1|0;o=b<<10>>16;N=(b>>21)+1>>1;a=q[h+28>>2];g=q[h+36>>2];j=q[h+44>>2];b=q[h+52>>2];e=q[h+60>>2];r=p[l+30>>1];t=p[l+28>>1];u=p[l+26>>1];v=p[l+24>>1];x=p[l+22>>1];y=p[l+20>>1];A=p[l+18>>1];B=p[l+16>>1];C=p[l+14>>1];D=p[l+12>>1];E=p[l+10>>1];F=p[l+8>>1];H=p[l+6>>1];I=p[l+4>>1];J=p[l+2>>1];K=p[l>>1];f=0;while(1){i=(w(e>>16,K)+M|0)+(w(e&65535,K)>>16)|0;e=h+(f<<2)|0;m=q[e+56>>2];i=(((i+w(m>>16,J)|0)+(w(m&65535,J)>>16)|0)+w(b>>16,I)|0)+(w(b&65535,I)>>16)|0;b=q[e+48>>2];i=(((i+w(b>>16,H)|0)+(w(b&65535,H)>>16)|0)+w(j>>16,F)|0)+(w(j&65535,F)>>16)|0;j=q[e+40>>2];i=(((i+w(j>>16,E)|0)+(w(j&65535,E)>>16)|0)+w(g>>16,D)|0)+(w(g&65535,D)>>16)|0;g=q[e+32>>2];i=(((i+w(g>>16,C)|0)+(w(g&65535,C)>>16)|0)+w(a>>16,B)|0)+(w(a&65535,B)>>16)|0;a=q[e+24>>2];a=(i+w(a>>16,A)|0)+(w(a&65535,A)>>16)|0;if((n|0)==16){i=a;a=q[e+20>>2];i=(i+w(a>>16,y)|0)+(w(a&65535,y)>>16)|0;a=q[e+16>>2];i=(i+w(a>>16,x)|0)+(w(a&65535,x)>>16)|0;a=q[e+12>>2];i=(i+w(a>>16,v)|0)+(w(a&65535,v)>>16)|0;a=q[e+8>>2];i=(i+w(a>>16,u)|0)+(w(a&65535,u)>>16)|0;a=q[e+4>>2];i=(i+w(a>>16,t)|0)+(w(a&65535,t)>>16)|0;a=q[e>>2];a=(i+w(a>>16,r)|0)+(w(a&65535,r)>>16)|0}a=(a|0)>-134217728?a:-134217728;a=((a|0)<134217727?a:134217727)<<4;L=h+(f+16<<2)|0;e=q[L>>2];i=a+e|0;j:{if((i|0)>=0){e=(a&e)>-1?i:-2147483648;break j}e=(a|e)>-1?2147483647:i}q[L>>2]=e;i=(f<<1)+c|0;a=(w(e>>16,o)+w(e,N)|0)+(w(e&65535,o)>>16)|0;a=p[i>>1]+((a|0)>8388479?32767:(a|0)<-8388736?-32768:(a>>7)+1>>1)|0;a=(a|0)>-32768?a:-32768;p[i>>1]=(a|0)<32767?a:32767;a=g;g=j;j=b;b=m;f=f+1|0;if((f|0)!=(d|0)){continue}break}}a=h+(d<<2)|0;b=q[a+4>>2];q[k>>2]=q[a>>2];q[k+4>>2]=b;b=q[a+60>>2];q[k+56>>2]=q[a+56>>2];q[k+60>>2]=b;b=q[a+52>>2];q[k+48>>2]=q[a+48>>2];q[k+52>>2]=b;b=q[a+44>>2];q[k+40>>2]=q[a+40>>2];q[k+44>>2]=b;b=q[a+36>>2];q[k+32>>2]=q[a+32>>2];q[k+36>>2]=b;b=q[a+28>>2];q[k+24>>2]=q[a+24>>2];q[k+28>>2]=b;b=q[a+20>>2];q[k+16>>2]=q[a+16>>2];q[k+20>>2]=b;b=q[a+12>>2];q[k+8>>2]=q[a+8>>2];q[k+12>>2]=b;break a}la(a+4084|0,0,q[a+2340>>2]<<2)}ca=l+32|0}function uc(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0;k=ca;x=k;e=q[a+268>>2];j=q[a+276>>2];k=k-((e+j<<2)+15&-16)|0;ca=k;u=a+24|0;n=ka(k,u,j<<2);k=q[a+296>>2];v=k+4|0;s=q[a+272>>2];h=k;while(1){o=(d|0)<(e|0)?d:e;yc(a,(j<<2)+n|0,c,h,o);r=o<<16;a:{b:{c:{d:{e:{t=q[a+276>>2];switch(t-18|0){case 18:break b;case 6:break d;case 0:break e;default:break c}}if((r|0)<1){break a}g=q[a+280>>2];y=g<<16>>16;h=0;while(1){l=w(h&65535,y)>>16;e=w(l,18)+v|0;i=p[e>>1];j=(h>>16<<2)+n|0;f=q[j>>2];m=(w(i,f&65535)>>16)+w(i,f>>16)|0;i=p[e+2>>1];f=q[j+4>>2];m=(m+w(i,f>>16)|0)+(w(i,f&65535)>>16)|0;i=p[e+4>>1];f=q[j+8>>2];m=(m+w(i,f>>16)|0)+(w(i,f&65535)>>16)|0;i=p[e+6>>1];f=q[j+12>>2];m=(m+w(i,f>>16)|0)+(w(i,f&65535)>>16)|0;i=p[e+8>>1];f=q[j+16>>2];m=(m+w(i,f>>16)|0)+(w(i,f&65535)>>16)|0;i=p[e+10>>1];f=q[j+20>>2];m=(m+w(i,f>>16)|0)+(w(i,f&65535)>>16)|0;i=p[e+12>>1];f=q[j+24>>2];m=(m+w(i,f>>16)|0)+(w(i,f&65535)>>16)|0;i=p[e+14>>1];f=q[j+28>>2];i=(m+w(i,f>>16)|0)+(w(i,f&65535)>>16)|0;e=p[e+16>>1];f=q[j+32>>2];i=(i+w(e,f>>16)|0)+(w(e,f&65535)>>16)|0;e=w(g+(l^-1)|0,18)+v|0;l=p[e>>1];f=q[j+68>>2];i=(i+w(l,f>>16)|0)+(w(l,f&65535)>>16)|0;l=p[e+2>>1];f=q[j+64>>2];i=(i+w(l,f>>16)|0)+(w(l,f&65535)>>16)|0;l=p[e+4>>1];f=q[j+60>>2];i=(i+w(l,f>>16)|0)+(w(l,f&65535)>>16)|0;l=p[e+6>>1];f=q[j+56>>2];i=(i+w(l,f>>16)|0)+(w(l,f&65535)>>16)|0;l=p[e+8>>1];f=q[j+52>>2];i=(i+w(l,f>>16)|0)+(w(l,f&65535)>>16)|0;l=p[e+10>>1];f=q[j+48>>2];i=(i+w(l,f>>16)|0)+(w(l,f&65535)>>16)|0;l=p[e+12>>1];f=q[j+44>>2];i=(i+w(l,f>>16)|0)+(w(l,f&65535)>>16)|0;l=p[e+14>>1];f=q[j+40>>2];e=p[e+16>>1];j=q[j+36>>2];j=(((i+w(l,f>>16)|0)+(w(l,f&65535)>>16)|0)+w(e,j>>16)|0)+(w(e,j&65535)>>16)|0;e=(j>>5)+1>>1;p[b>>1]=(j|0)>2097119?32767:(e|0)>-32768?e:-32768;b=b+2|0;h=h+s|0;if((r|0)>(h|0)){continue}break}break a}j=0;if((r|0)<=0){break a}while(1){g=p[k+4>>1];h=(j>>16<<2)+n|0;e=q[h+92>>2]+q[h>>2]|0;f=(w(g,e&65535)>>16)+w(g,e>>16)|0;g=p[k+6>>1];e=q[h+88>>2]+q[h+4>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+8>>1];e=q[h+84>>2]+q[h+8>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+10>>1];e=q[h+80>>2]+q[h+12>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+12>>1];e=q[h+76>>2]+q[h+16>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+14>>1];e=q[h+72>>2]+q[h+20>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+16>>1];e=q[h+68>>2]+q[h+24>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+18>>1];e=q[h+64>>2]+q[h+28>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+20>>1];e=q[h+60>>2]+q[h+32>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+22>>1];e=q[h+56>>2]+q[h+36>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+24>>1];e=q[h+52>>2]+q[h+40>>2]|0;g=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;e=p[k+26>>1];h=q[h+48>>2]+q[h+44>>2]|0;h=(g+w(e,h>>16)|0)+(w(e,h&65535)>>16)|0;e=(h>>5)+1>>1;p[b>>1]=(h|0)>2097119?32767:(e|0)>-32768?e:-32768;b=b+2|0;j=j+s|0;if((r|0)>(j|0)){continue}break}break a}ja(2400,2420,139);G()}j=0;if((r|0)<=0){break a}while(1){g=p[k+4>>1];h=(j>>16<<2)+n|0;e=q[h+140>>2]+q[h>>2]|0;f=(w(g,e&65535)>>16)+w(g,e>>16)|0;g=p[k+6>>1];e=q[h+136>>2]+q[h+4>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+8>>1];e=q[h+132>>2]+q[h+8>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+10>>1];e=q[h+128>>2]+q[h+12>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+12>>1];e=q[h+124>>2]+q[h+16>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+14>>1];e=q[h+120>>2]+q[h+20>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+16>>1];e=q[h+116>>2]+q[h+24>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+18>>1];e=q[h+112>>2]+q[h+28>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+20>>1];e=q[h+108>>2]+q[h+32>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+22>>1];e=q[h+104>>2]+q[h+36>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+24>>1];e=q[h+100>>2]+q[h+40>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+26>>1];e=q[h+96>>2]+q[h+44>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+28>>1];e=q[h+92>>2]+q[h+48>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+30>>1];e=q[h+88>>2]+q[h+52>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+32>>1];e=q[h+84>>2]+q[h+56>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+34>>1];e=q[h+80>>2]+q[h+60>>2]|0;f=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;g=p[k+36>>1];e=q[h+76>>2]+q[h+64>>2]|0;g=(f+w(g,e>>16)|0)+(w(g,e&65535)>>16)|0;e=p[k+38>>1];h=q[h+72>>2]+q[h+68>>2]|0;h=(g+w(e,h>>16)|0)+(w(e,h&65535)>>16)|0;e=(h>>5)+1>>1;p[b>>1]=(h|0)>2097119?32767:(e|0)>-32768?e:-32768;b=b+2|0;j=j+s|0;if((r|0)>(j|0)){continue}break}}d=d-o|0;if((d|0)>=2){ka(n,(o<<2)+n|0,t<<2);c=(o<<1)+c|0;h=q[a+296>>2];j=q[a+276>>2];e=q[a+268>>2];continue}break}ka(u,(o<<2)+n|0,t<<2);ca=x}function Ya(a,b){var c=0,d=x(0),e=x(0),f=x(0),g=x(0),h=0,i=0,j=x(0),k=0,l=0,m=0,n=0,o=x(0),r=x(0),t=x(0),v=x(0),y=0,z=0,A=0,B=x(0),C=x(0),D=0,E=0,F=0,H=x(0),I=0,J=0,K=0,L=x(0),M=0,N=0,O=0,P=0,Q=x(0),R=x(0),S=x(0),T=x(0),U=x(0),V=x(0),W=x(0),X=x(0),Y=x(0),Z=x(0),_=0,$=x(0),aa=x(0),ba=x(0),da=x(0),ea=x(0);I=ca-32|0;ca=I;A=q[a+8>>2];q[I>>2]=1;F=a+12|0;k=1;while(1){c=h;l=c<<2;i=s[F+(l|2)>>1];h=c+1|0;k=w(p[l+F>>1],k);q[(h<<2)+I>>2]=k;if((i|0)!=1){continue}break}_=(A|0)>0?A:0;F=p[((h<<2)+a|0)+10>>1];a:{while(1){i=F;h=0;F=1;A=c;b:{c:{d:{e:{f:{if(c){F=p[((A<<2)+a|0)+10>>1];c=A<<1}else{c=0}switch(p[((c<<1)+a|0)+12>>1]-2|0){case 3:break c;case 1:break d;case 2:break e;case 0:break f;default:break b}}if((i|0)!=4){break a}c=b;i=q[(A<<2)+I>>2];if((i|0)<=0){break b}while(1){e=u[c>>2];d=u[c+32>>2];u[c+32>>2]=e-d;u[c>>2]=d+e;e=u[c+36>>2];d=u[c+4>>2];u[c+4>>2]=e+d;u[c+36>>2]=d-e;j=u[c+8>>2];g=u[c+40>>2];d=u[c+44>>2];f=x(x(g+d)*x(.7071067690849304));u[c+40>>2]=j-f;e=u[c+12>>2];d=x(x(d-g)*x(.7071067690849304));u[c+44>>2]=e-d;u[c+8>>2]=j+f;u[c+12>>2]=d+e;g=u[c+48>>2];f=u[c+16>>2];e=u[c+52>>2];u[c+48>>2]=f-e;d=u[c+20>>2];u[c+52>>2]=g+d;u[c+20>>2]=d-g;u[c+16>>2]=e+f;j=u[c+24>>2];g=u[c+60>>2];d=u[c+56>>2];f=x(x(g-d)*x(.7071067690849304));u[c+56>>2]=j-f;e=u[c+28>>2];d=x(x(g+d)*x(-.7071067690849304));u[c+60>>2]=e-d;u[c+28>>2]=d+e;u[c+24>>2]=j+f;c=c- -64|0;h=h+1|0;if((i|0)!=(h|0)){continue}break}break b}N=q[(A<<2)+I>>2];if((i|0)==1){c=b;if((N|0)<1){break b}while(1){o=u[c>>2];B=u[c+16>>2];e=x(o+B);C=u[c+8>>2];r=u[c+24>>2];d=x(C+r);u[c+16>>2]=e-d;u[c>>2]=e+d;f=u[c+4>>2];e=u[c+20>>2];t=x(f+e);v=u[c+12>>2];d=u[c+28>>2];j=x(v+d);u[c+20>>2]=t-j;g=x(f-e);f=x(C-r);u[c+28>>2]=g+f;e=x(o-B);d=x(v-d);u[c+24>>2]=e-d;u[c+12>>2]=g-f;u[c+8>>2]=e+d;u[c+4>>2]=t+j;c=c+32|0;h=h+1|0;if((N|0)!=(h|0)){continue}break}break b}if((N|0)<1){break b}J=w(i,3);M=i<<1;z=N<<_;O=w(z,3);P=z<<1;l=q[a+48>>2];D=0;while(1){if((i|0)>=1){c=(w(D,F)<<3)+b|0;K=0;h=l;n=h;k=h;while(1){Q=u[c>>2];E=(M<<3)+c|0;R=u[E+4>>2];S=u[n>>2];j=u[E>>2];g=u[n+4>>2];T=x(x(S*R)+x(j*g));U=u[c+4>>2];H=x(T+U);V=u[k>>2];m=(i<<3)+c|0;L=u[m+4>>2];o=u[m>>2];f=u[k+4>>2];B=x(x(V*L)+x(o*f));C=u[h>>2];y=(J<<3)+c|0;r=u[y+4>>2];e=u[y>>2];d=u[h+4>>2];t=x(x(C*r)+x(e*d));v=x(B+t);u[E+4>>2]=H-v;j=x(x(j*S)-x(R*g));g=x(Q+j);f=x(x(o*V)-x(L*f));e=x(x(e*C)-x(r*d));d=x(f+e);u[E>>2]=g-d;u[c+4>>2]=v+H;u[c>>2]=g+d;g=x(U-T);f=x(f-e);u[m+4>>2]=g-f;e=x(Q-j);d=x(B-t);u[m>>2]=e+d;u[y+4>>2]=g+f;u[y>>2]=e-d;c=c+8|0;h=(O<<3)+h|0;n=(P<<3)+n|0;k=(z<<3)+k|0;K=K+1|0;if((i|0)!=(K|0)){continue}break}}D=D+1|0;if((N|0)!=(D|0)){continue}break}break b}J=q[(A<<2)+I>>2];if((J|0)<1){break b}O=i<<1;l=q[a+48>>2];M=J<<_;L=u[(l+(w(M,i)<<3)|0)+4>>2];P=M<<1;y=0;while(1){c=(w(y,F)<<3)+b|0;n=l;k=l;h=i;while(1){m=(i<<3)+c|0;o=u[m>>2];B=u[k>>2];C=u[m+4>>2];f=u[k+4>>2];r=x(x(o*B)-x(C*f));z=(O<<3)+c|0;t=u[z>>2];v=u[n>>2];e=u[z+4>>2];d=u[n+4>>2];j=x(x(t*v)-x(e*d));g=x(r+j);u[m>>2]=u[c>>2]-x(g*x(.5));f=x(x(B*C)+x(o*f));e=x(x(v*e)+x(t*d));d=x(f+e);u[m+4>>2]=u[c+4>>2]-x(d*x(.5));u[c>>2]=g+u[c>>2];u[c+4>>2]=d+u[c+4>>2];e=x(L*x(f-e));u[z>>2]=e+u[m>>2];d=x(L*x(r-j));u[z+4>>2]=u[m+4>>2]-d;u[m>>2]=u[m>>2]-e;u[m+4>>2]=d+u[m+4>>2];c=c+8|0;n=(P<<3)+n|0;k=(M<<3)+k|0;h=h-1|0;if(h){continue}break}y=y+1|0;if((J|0)!=(y|0)){continue}break}break b}z=q[(A<<2)+I>>2];if((z|0)<1){break b}E=q[a+48>>2];J=z<<_;c=w(J,i);h=E+(c<<4)|0;W=u[h+4>>2];X=u[h>>2];h=E+(c<<3)|0;Y=u[h+4>>2];Z=u[h>>2];M=i<<2;O=w(i,3);P=i<<1;m=0;while(1){if((i|0)>=1){c=(w(m,F)<<3)+b|0;h=c+(i<<3)|0;n=(P<<3)+c|0;k=(O<<3)+c|0;D=(M<<3)+c|0;K=0;while(1){$=u[c>>2];aa=u[c+4>>2];y=w(J,K);l=E+(y<<4)|0;ea=u[l>>2];Q=u[n+4>>2];R=u[n>>2];g=u[l+4>>2];S=x(x(ea*Q)+x(R*g));l=E+w(y,24)|0;T=u[l>>2];U=u[k+4>>2];H=u[k>>2];f=u[l+4>>2];V=x(x(T*U)+x(H*f));ba=x(S+V);l=E+(y<<3)|0;L=u[l>>2];o=u[h+4>>2];r=u[h>>2];e=u[l+4>>2];B=x(x(L*o)+x(r*e));l=E+(y<<5)|0;t=u[l>>2];v=u[D+4>>2];j=u[D>>2];d=u[l+4>>2];C=x(x(t*v)+x(j*d));da=x(B+C);u[c+4>>2]=aa+x(ba+da);g=x(x(R*ea)-x(Q*g));f=x(x(H*T)-x(U*f));H=x(g+f);e=x(x(r*L)-x(o*e));d=x(x(j*t)-x(v*d));o=x(e+d);u[c>>2]=$+x(H+o);r=x(g-f);t=x(e-d);v=x(x(W*r)+x(Y*t));g=x(aa+x(x(X*ba)+x(Z*da)));u[h+4>>2]=v+g;f=x($+x(x(X*H)+x(Z*o)));j=x(S-V);e=x(B-C);d=x(x(W*j)+x(Y*e));u[h>>2]=f-d;u[D+4>>2]=g-v;u[D>>2]=d+f;g=x(x(W*t)-x(Y*r));f=x(aa+x(x(Z*ba)+x(X*da)));u[n+4>>2]=g+f;e=x(x(Y*j)-x(W*e));d=x($+x(x(Z*H)+x(X*o)));u[n>>2]=e+d;u[k+4>>2]=f-g;u[k>>2]=d-e;D=D+8|0;k=k+8|0;n=n+8|0;h=h+8|0;c=c+8|0;K=K+1|0;if((i|0)!=(K|0)){continue}break}}m=m+1|0;if((z|0)!=(m|0)){continue}break}}c=A-1|0;if((A|0)>0){continue}break}ca=I+32|0;return}ja(31793,31777,76);G()}function lg(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=x(0),k=0,l=0,m=x(0),n=0,o=x(0),r=0,s=0,t=0,v=0,y=0,z=0,A=0,B=x(0),C=0,D=0,E=0,G=0,H=x(0),I=0,J=0,K=x(0),L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ma=0,na=0,oa=0,pa=0,qa=0,sa=0;k=ca-4320|0;f=k;ca=f;n=q[a+8>>2];L=(n|0)>1?n:1;U=0-b|0;t=q[a>>2];l=q[t+4>>2];g=l+2048|0;M=q[t+32>>2];v=q[t+8>>2];while(1){h=e<<2;d=((w(e,g)<<2)+a|0)+92|0;q[h+(f+4312|0)>>2]=d;q[h+(f+4304|0)>>2]=(d+(U<<2)|0)- -8192;e=e+1|0;if((L|0)!=(e|0)){continue}break}Q=((w(g,n)<<2)+a|0)+92|0;d=q[a+20>>2];C=q[a+52>>2];a:{if(!(q[a+56>>2]?0:!(d|(C|0)>4))){D=Q+w(n,96)|0;h=v<<3;y=((D+h|0)+h|0)+h|0;m=C?x(.5):x(1.5);r=q[a+24>>2];h=q[t+12>>2];E=(h|0)>(r|0)?r:h;z=k-((w(b,n)<<2)+15&-16)|0;ca=z;g=0;while(1){if((d|0)<(r|0)){G=w(g,v);e=d;while(1){k=e+G<<2;h=k+D|0;j=u[k+y>>2];H=x(u[h>>2]-m);u[h>>2]=j>H?j:H;e=e+1|0;if((r|0)!=(e|0)){continue}break}}g=g+1|0;if((L|0)!=(g|0)){continue}break}v=(d|0)>(E|0)?d:E;g=q[a+40>>2];if((n|0)>=1){r=0;while(1){if((d|0)<(E|0)){G=w(b,r);h=d;while(1){k=p[M+(h<<1)>>1];y=G+(k<>1]-k<=1){while(1){g=w(g,1664525)+1013904223|0;u[z+(e+y<<2)>>2]=g>>20;e=e+1|0;if((k|0)!=(e|0)){continue}break}}nb(z+(y<<2)|0,k,x(1));if((h|0)!=(v|0)){continue}break}}r=r+1|0;if((n|0)!=(r|0)){continue}break}}q[a+40>>2]=g;l=((l>>>1|0)-b<<2)- -8192|0;e=0;while(1){h=q[(f+4312|0)+(e<<2)>>2];ra(h,h+(b<<2)|0,l);e=e+1|0;if((L|0)!=(e|0)){continue}break}ad(t,z,f+4304|0,D,d,v,n,n,0,c,q[a+16>>2],0);break a}b:{if(!C){c=q[a+36>>2];dd(f+4312|0,f+112|0,2048,n,c);cd(f+1552|0,f+112|0,1328,620,f);c=720-q[f>>2]|0;q[a+48>>2]=c;H=x(1);break b}c=q[a+48>>2];H=x(.800000011920929)}d=c<<1;s=(d|0)<1024?d:1024;d=(s|0)>-1?s:-1;e=(d|0)<1?d:1;d=0-s|0;d=w(e,((d|0)<(s|0)?s:d)>>>1|0);X=(d|0)>1?d:1;N=k-((l<<2)+15&-16)|0;d=N;ca=d;Y=1024-s|0;Z=1024-(s>>1)|0;R=s<<2;V=(f-R|0)+4304|0;_=(l|0)/2|0;$=1024-c|0;A=b+l|0;aa=A<<2;I=2048-b|0;W=I<<2;S=d-(R+15&-16)|0;ca=S;O=f+208|0;P=q[t+60>>2];ba=2047-b<<2;da=2046-b<<2;ea=2045-b<<2;fa=2044-b<<2;ga=2043-b<<2;ha=2042-b<<2;ia=2041-b<<2;ja=2040-b<<2;ma=2039-b<<2;na=2038-b<<2;oa=2037-b<<2;pa=2036-b<<2;qa=2035-b<<2;sa=2034-b<<2;n=2033-b<<2;t=2032-b<<2;E=2031-b<<2;z=2030-b<<2;r=2029-b<<2;M=2028-b<<2;D=2027-b<<2;v=2026-b<<2;y=2025-b<<2;G=2024-b<<2;while(1){h=q[(f+4312|0)+(J<<2)>>2];e=0;while(1){d=e<<2;u[d+(f+112|0)>>2]=u[(d+h|0)+4e3>>2];e=e+1|0;if((e|0)!=1048){continue}break}c:{if(C){e=w(J,24);break c}ed(O,f,P,l,24,1024);u[f>>2]=u[f>>2]*x(1.000100016593933);e=1;while(1){d=(e<<2)+f|0;j=u[d>>2];m=j;o=x(j*x(-6400000711437315e-20));j=x(e|0);u[d>>2]=m+x(x(o*j)*j);e=e+1|0;if((e|0)!=25){continue}break}e=w(J,24);gd(Q+(e<<2)|0,f,24)}k=Q+(e<<2)|0;tg(V,k,S,s);ka(V,S,R);o=x(1);e=0;m=x(1);if((c|0)>=1){while(1){j=u[O+(e+Y<<2)>>2];o=x(o+x(j*j));j=u[O+(e+Z<<2)>>2];m=x(m+x(j*j));e=e+1|0;if((X|0)!=(e|0)){continue}break}}i=ra(h,h+(b<<2)|0,W);K=x(0);B=x(0);T=(A|0)<1;if(!T){m=x(F(x((m(e|0);o=d?o:x(m*o);h=e-(d?0:c)|0;d=h+$|0;u[i+(g+I<<2)>>2]=o*u[O+(d<<2)>>2];e=h+1|0;j=u[(i+(d-b<<2)|0)+4096>>2];B=x(B+x(j*j));g=g+1|0;if((A|0)!=(g|0)){continue}break}}u[f>>2]=u[i+ba>>2];u[f+4>>2]=u[i+da>>2];u[f+8>>2]=u[i+ea>>2];u[f+12>>2]=u[i+fa>>2];u[f+16>>2]=u[i+ga>>2];u[f+20>>2]=u[i+ha>>2];u[f+24>>2]=u[i+ia>>2];u[f+28>>2]=u[i+ja>>2];u[f+32>>2]=u[i+ma>>2];u[f+36>>2]=u[i+na>>2];u[f+40>>2]=u[i+oa>>2];u[f+44>>2]=u[i+pa>>2];u[f+48>>2]=u[i+qa>>2];u[f+52>>2]=u[i+sa>>2];u[f+56>>2]=u[i+n>>2];u[f+60>>2]=u[i+t>>2];u[f+64>>2]=u[i+E>>2];u[f+68>>2]=u[i+z>>2];u[f+72>>2]=u[i+r>>2];u[f+76>>2]=u[i+M>>2];u[f+80>>2]=u[i+D>>2];u[f+84>>2]=u[i+v>>2];u[f+88>>2]=u[i+y>>2];u[f+92>>2]=u[i+G>>2];h=i- -8192|0;d=h+(U<<2)|0;sg(d,k,d,A,f);g=0;d:{e:{if(!T){while(1){j=u[i+(g+I<<2)>>2];K=x(K+x(j*j));g=g+1|0;if((A|0)!=(g|0)){continue}break}if(x(K*x(.20000000298023224))x(0))){break d}}if(B=1){j=x(x(1)-m);g=0;while(1){d=i+(g+I<<2)|0;u[d>>2]=u[d>>2]*x(x(1)-x(j*u[P+(g<<2)>>2]));g=g+1|0;if((l|0)!=(g|0)){continue}break}}g=l;if((b|0)<=0){break d}while(1){d=i+(g+I<<2)|0;u[d>>2]=m*u[d>>2];g=g+1|0;if((A|0)>(g|0)){continue}break}}g=0;d=q[a+60>>2];e=d;j=x(-u[a+68>>2]);d=q[a+76>>2];Ta(N,h,e,e,l,j,j,d,d,0,0);if((l|0)>=2){while(1){h=g<<2;d=l+(g^-1)<<2;u[(h+i|0)- -8192>>2]=x(u[h+P>>2]*u[d+N>>2])+x(u[d+P>>2]*u[h+N>>2]);g=g+1|0;if((_|0)!=(g|0)){continue}break}}J=J+1|0;if((L|0)!=(J|0)){continue}break}}q[a+52>>2]=C+1;ca=f+4320|0}function Yf(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,n=0,t=0,u=0,v=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;l=ca-16|0;u=l;ca=l;C=b-4|0;l=k+2|0;F=u-((l<<1)+15&-16)|0;t=F;ca=t;if((k|0)>=-1){A=(l|0)>1?l:1;l=0;while(1){m=l<<1;x=m-4|0;v=p[x+c>>1];x=p[b+x>>1];n=x+v|0;p[m+C>>1]=(n>>>1|0)+(n&1);B=m+F|0;m=x-v|0;m=(m>>1)+(m&1)|0;p[B>>1]=(m|0)<32767?m:32767;l=l+1|0;if((A|0)!=(l|0)){continue}break}}l=q[a+4>>2];p[C>>1]=l;p[C+2>>1]=l>>>16;v=q[a+8>>2];q[F>>2]=v;l=k<<1;m=l+C|0;q[a+4>>2]=s[m>>1]|s[m+2>>1]<<16;m=l+F|0;q[a+8>>2]=s[m>>1]|s[m+2>>1]<<16;m=l+15&-16;B=t-m|0;t=B;ca=t;l=0;A=t-m|0;x=A;ca=x;a:{if((k|0)<=0){l=(k<<1)+15&-16;x=x-l|0;m=x;ca=m;n=m-l|0;ca=n;break a}m=v>>>16|0;t=s[C>>1];while(1){n=l<<1;t=p[n+b>>1]+(t<<16>>16)|0;D=t;l=l+1|0;t=p[(l<<1)+C>>1];y=(D+(t<<1)>>>1|0)+1>>>1|0;p[n+B>>1]=y;p[n+A>>1]=t-y;if((k|0)!=(l|0)){continue}break}l=(k<<1)+15&-16;x=x-l|0;t=x;ca=t;n=t-l|0;ca=n;if((k|0)<1){break a}t=0;while(1){l=m;y=t<<1;m=p[(y+F|0)+4>>1];v=((m+(v<<16>>16)|0)+(l<<16>>16<<1)>>>1|0)+1>>>1|0;p[x+y>>1]=v;p[n+y>>1]=l-v;v=l;t=t+1|0;if((t|0)!=(k|0)){continue}break}}l=(w(j,10)|0)==(k|0);m=l?328:655;h=h<<16>>16;h=w(h,h);t=(w(m,h&65535)>>>16|0)+w(m,h>>>16|0)|0;x=Vc(u+4|0,B,x,a+12|0,k,t);q[u+8>>2]=x;A=Vc(u,A,n,a+20|0,k,t);q[u+12>>2]=A;B=(l?-1200:-600)+g|0;m=(B|0)>1?B:1;n=z(m);g=q[u>>2]+w(p[u+4>>1],3)|0;v=(g|0)<65536?g:65536;y=w(v,3);g=y+851968|0;h=g>>31;l=m<>31;g=536870911/(g>>16)<<16>>16;h=(w(g,l&65535)>>16)+w(g,l>>16)|0;l=yg(G,H,h,h>>31);l=D-(((da&536870911)<<3|l>>>29)&-8)|0;g=(w(l>>16,g)+h|0)+(w(g,l&65535)>>16)|0;l=w(j<<16>>16,600)+2e3|0;D=f;n=(n-E|0)+10|0;b:{if((n|0)<=-1){n=0-n|0;E=2147483647>>>n|0;h=-2147483648>>n;g=((g|0)>(E|0)?E:(g|0)<(h|0)?h:g)<>n:0}q[D>>2]=g;D=a;c:{if((g|0)<(l|0)){q[f>>2]=l;g=m-l|0;q[f+4>>2]=g;g=(g<<1)-l|0;h=g>>31;n=l<<16>>16;n=w(n,y+65536>>16)+(w(n,y&65535)>>16)|0;y=n>>31;E=z(h^g+h);h=g<>16)<<16>>16;h=(w(g,h&65535)>>16)+w(g,h>>16)|0;n=yg(h,h>>31,n,n>>31);n=G-(((da&536870911)<<3|n>>>29)&-8)|0;g=(w(n>>16,g)+h|0)+(w(g,n&65535)>>16)|0;h=(E-y|0)+13|0;d:{if((h|0)<=-1){h=0-h|0;n=2147483647>>>h|0;y=-2147483648>>h;g=((g|0)>(n|0)?n:(g|0)<(y|0)?y:g)<>h:0}g=(g|0)>0?g:0;h=(g|0)<16384?g:16384;break c}q[f+4>>2]=m-g;h=16384}g=p[a+28>>1];h=h-g|0;p[D+28>>1]=((w(h&65535,t<<16>>16)>>>16|0)+w(t,h>>>16|0)|0)+g;g=0;o[e|0]=0;e:{f:{g:{h:{i:{j:{if(i){q[u+8>>2]=0;q[u+12>>2]=0;Xa(u+8|0,d);break j}h=m<<3;k:{if(!s[a+30>>1]){l:{if((h|0)<(w(l,13)|0)){l=p[a+28>>1];break l}l=p[a+28>>1];if(((w(l,v&65535)>>16)+w(v>>16,l)|0)>818){break k}}q[u+12>>2]=w(A<<16>>16,l)>>14;q[u+8>>2]=w(x<<16>>16,l)>>14;Xa(u+8|0,d);q[u+8>>2]=0;q[u+12>>2]=0;q[f+4>>2]=0;q[f>>2]=m;o[e|0]=1;break i}m:{if((h|0)<(w(l,11)|0)){l=p[a+28>>1];break m}l=p[a+28>>1];if(((w(l,v&65535)>>16)+w(v>>16,l)|0)>327){break k}}q[u+12>>2]=w(A<<16>>16,l)>>14;q[u+8>>2]=w(x<<16>>16,l)>>14;Xa(u+8|0,d);q[u+8>>2]=0;q[u+12>>2]=0;break j}if((l|0)>=15566){Xa(u+8|0,d);g=16384;break j}q[u+12>>2]=w(A<<16>>16,l)>>14;q[u+8>>2]=w(x<<16>>16,l)>>14;Xa(u+8|0,d);g=p[a+28>>1]}if(r[e|0]!=1){break h}}d=s[a+32>>1]+(k-(j<<3)|0)|0;p[a+32>>1]=d;if((w(j,5)|0)>d<<16>>16){o[e|0]=0;break f}p[a+32>>1]=1e4;break g}p[a+32>>1]=0}if(r[e|0]){break e}}if(q[f+4>>2]>0){break e}q[f+4>>2]=1;q[f>>2]=(m|0)>2?B-1|0:1}l=j<<3;f=65536/(l|0)|0;d=q[u+12>>2];e=q[u+8>>2];if((j|0)>=1){f=f<<16>>16;i=p[a+30>>1];h=g-i|0;x=(w(f,h&65535)>>16)+w(f,h>>16)<<10;h=s[a+2>>1];n=(w(f,d-h<<16>>16)>>15)+1>>1;j=s[a>>1];B=(w(f,e-j<<16>>16)>>15)+1>>1;y=(l|0)>1?l:1;t=0;m=0-j|0;h=0-h|0;f=i<<10;while(1){i=t<<1;t=t+1|0;v=t<<1;j=p[v+F>>1];v=p[v+C>>1];A=(p[b+i>>1]+p[i+C>>1]|0)+(v<<1)|0;D=(c+i|0)-2|0;f=f+x|0;h=h-n|0;i=h<<16>>16;j=((w(j,f>>16)+w(i,v>>5)|0)+(w(j,f&64512)>>16)|0)+(w(i,v<<11&63488)>>16)|0;m=m-B|0;i=m<<16>>16;i=(j+w(i,A>>7)|0)+(w(i,A<<9&65024)>>16)|0;j=(i>>7)+1>>1;p[D>>1]=(i|0)>8388479?32767:(j|0)>-32768?j:-32768;if((t|0)!=(y|0)){continue}break}}if((k|0)>(l|0)){t=g>>6;A=g<<10&64512;h=0-(d<<16)>>16;i=0-(e<<16)>>16;while(1){f=l<<1;l=l+1|0;m=l<<1;j=p[m+F>>1];m=p[m+C>>1];v=(p[b+f>>1]+p[f+C>>1]|0)+(m<<1)|0;x=(c+f|0)-2|0;f=((((w(j,t)+w(h,m>>5)|0)+(w(j,A)>>16)|0)+(w(h,m<<11&63488)>>16)|0)+w(i,v>>7)|0)+(w(i,v<<9&65024)>>16)|0;j=(f>>7)+1>>1;p[x>>1]=(f|0)>8388479?32767:(j|0)>-32768?j:-32768;if((k|0)!=(l|0)){continue}break}}p[a+30>>1]=g;p[a+2>>1]=d;p[a>>1]=e;ca=u+16|0}function yb(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0;g=ca-80|0;ca=g;q[g+76>>2]=1024;y=g+55|0;v=g+56|0;a:{b:while(1){c:{if((n|0)<0){break c}if((2147483647-n|0)<(e|0)){q[14656]=61;n=-1;break c}n=e+n|0}d:{e:{f:{g:{k=q[g+76>>2];e=k;f=r[e|0];if(f){while(1){h:{f=f&255;i:{if(!f){f=e;break i}if((f|0)!=37){break h}f=e;while(1){if(r[e+1|0]!=37){break i}h=e+2|0;q[g+76>>2]=h;f=f+1|0;i=r[e+2|0];e=h;if((i|0)==37){continue}break}}e=f-k|0;if(a){Ha(a,k,e)}if(e){continue b}f=q[g+76>>2];e=f+1|0;u=-1;h=o[f+1|0];if(!(r[f+2|0]!=36|h-48>>>0>=10)){u=h-48|0;x=1;e=f+3|0}q[g+76>>2]=e;m=0;i=o[e|0];h=i-32|0;j:{if(h>>>0>31){f=e;break j}f=e;h=1<>2]=f;m=h|m;i=o[e+1|0];h=i-32|0;if(h>>>0>=32){break j}e=f;h=1<>>0>=10)){q[((e<<2)+d|0)-192>>2]=10;e=f+3|0;x=1;s=q[((o[f+1|0]<<3)+c|0)-384>>2];break l}if(x){break g}e=f+1|0;if(!a){q[g+76>>2]=e;x=0;s=0;break k}f=q[b>>2];q[b>>2]=f+4;x=0;s=q[f>>2]}q[g+76>>2]=e;if((s|0)>-1){break k}s=0-s|0;m=m|8192;break k}s=gc(g+76|0);if((s|0)<0){break g}e=q[g+76>>2]}j=-1;m:{if(r[e|0]!=46){break m}if(r[e+1|0]==42){f=o[e+2|0];n:{if(!(r[e+3|0]!=36|f-48>>>0>=10)){q[((f<<2)+d|0)-192>>2]=10;j=q[((o[e+2|0]<<3)+c|0)-384>>2];e=e+4|0;break n}if(x){break g}e=e+2|0;if(!a){j=0;break n}f=q[b>>2];q[b>>2]=f+4;j=q[f>>2]}q[g+76>>2]=e;break m}q[g+76>>2]=e+1;j=gc(g+76|0);e=q[g+76>>2]}h=0;while(1){l=h;i=-1;t=e;if(o[e|0]-65>>>0>57){break a}e=t+1|0;q[g+76>>2]=e;h=r[(o[t|0]+w(l,58)|0)+57055|0];if(h-1>>>0<8){continue}break}o:{p:{if((h|0)!=19){if(!h){break a}if((u|0)>=0){q[(u<<2)+d>>2]=h;e=(u<<3)+c|0;f=q[e+4>>2];q[g+64>>2]=q[e>>2];q[g+68>>2]=f;break p}if(!a){break d}fc(g- -64|0,h,b);break o}if((u|0)>-1){break a}}e=0;if(!a){continue b}}f=m&-65537;h=m&8192?f:m;i=0;u=57584;m=v;q:{z=a;A=s;r:{s:{t:{u:{v:{w:{x:{y:{z:{e=o[t|0];e=l?(e&15)==3?e&-33:e:e;A:{if((e|0)<=98){if((e|0)==67){break t}if((e|0)==83){break u}if((e|0)==88){break A}break e}B:{switch(e-99|0){case 18:l=q[g+64>>2];t=q[g+68>>2];u=57584;break x;case 11:e=0;C:{switch(l&255){case 0:q[q[g+64>>2]>>2]=n;continue b;case 1:q[q[g+64>>2]>>2]=n;continue b;case 2:f=q[g+64>>2];q[f>>2]=n;q[f+4>>2]=n>>31;continue b;case 3:p[q[g+64>>2]>>1]=n;continue b;case 4:o[q[g+64>>2]]=n;continue b;case 6:q[q[g+64>>2]>>2]=n;continue b;case 7:break C;default:continue b}}f=q[g+64>>2];q[f>>2]=n;q[f+4>>2]=n>>31;continue b;case 0:break q;case 16:break v;case 1:case 6:break y;case 12:break z;case 21:break A;case 13:break B;default:break e}}j=j>>>0>8?j:8;h=h|8;e=120}f=q[g+68>>2];t=f;l=q[g+64>>2];k=me(l,f,v,e&32);if(!(h&8)|!(l|f)){break w}h=(j|0)>-1?h&-65537:h;f=(l|0)!=0|(t|0)!=0;u=(e>>>4|0)+57584|0;i=2;break f}e=q[g+68>>2];t=e;l=q[g+64>>2];k=le(l,e,v);if(!(h&8)){break w}e=v-k|0;j=(e|0)<(j|0)?j:e+1|0;break w}e=q[g+68>>2];t=e;l=q[g+64>>2];if((e|0)<-1?1:(e|0)<=-1){t=0-(t+((l|0)!=0)|0)|0;l=0-l|0;q[g+64>>2]=l;q[g+68>>2]=t;i=1;u=57584;break x}if(h&2048){i=1;u=57585;break x}i=h&1;u=i?57586:57584}k=ke(l,t,v)}h=(j|0)>-1?h&-65537:h;f=(l|0)!=0|(t|0)!=0;if(l|t|j){break f}j=0;k=v;m=k;break e}e=q[g+64>>2];k=e?e:57594;e=je(k,j);m=e?e:j+k|0;h=f;j=e?e-k|0:j;break e}k=q[g+64>>2];if(j){break s}Fa(a,32,s,0,h);i=0;break r}q[g+12>>2]=0;q[g+8>>2]=q[g+64>>2];q[g+64>>2]=g+8;j=-1;k=g+8|0}f=k;e=0;D:{while(1){i=q[f>>2];if(!i){break D}i=ec(g+4|0,i);m=(i|0)<0;if(!(m|i>>>0>j-e>>>0)){f=f+4|0;e=e+i|0;if(j>>>0>e>>>0){continue}break D}break}i=-1;if(m){break a}}Fa(a,32,s,e,h);f=0;i=0;if(!e){break r}while(1){E:{i=q[k>>2];if(!i){break E}i=ec(g+4|0,i);f=i+f|0;if((f|0)>(e|0)){break E}Ha(a,g+4|0,i);k=k+4|0;if(e>>>0>f>>>0){continue}}break}i=e}Fa(z,32,A,i,h^8192);e=(i|0)<(s|0)?s:i;continue b}o[g+55|0]=q[g+64>>2];j=1;k=y;h=f;break e}h=e+1|0;q[g+76>>2]=h;f=r[e+1|0];e=h;continue}}i=n;if(a){break a}if(!x){break d}e=1;while(1){a=q[(e<<2)+d>>2];if(a){fc((e<<3)+c|0,a,b);i=1;e=e+1|0;if((e|0)!=10){continue}break a}break}i=1;if(e>>>0>=10){break a}f=0;while(1){if(f){break g}e=e+1|0;if((e|0)==10){break a}f=q[(e<<2)+d>>2];continue}}i=-1;break a}e=(v-k|0)+(f^1)|0;j=(e|0)<(j|0)?j:e}m=m-k|0;l=(j|0)<(m|0)?m:j;f=l+i|0;e=(f|0)>(s|0)?f:s;Fa(a,32,e,f,h);Ha(a,u,i);Fa(a,48,e,f,h^65536);Fa(a,48,l,m,0);Ha(a,k,m);Fa(a,32,e,f,h^8192);continue}break}i=0}ca=g+80|0;return i}function hd(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,n=0,o=0,r=x(0),s=x(0),t=0,v=0,y=0,A=0,B=x(0),C=0,D=0,E=0;C=q[a+36>>2];t=q[a+28>>2];A=q[a+16>>2];D=q[a>>2];l=1;m=(e|0)==2&(j|0)!=0;n=(e<<1)+(m?-2:-1)|0;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{k:{l:{o=q[f>>2];E=q[a+8>>2];y=q[a+12>>2];i=p[q[E+56>>2]+(y<<1)>>1]+(i<<3)|0;v=(o-i|0)-32|0;i=(o+w(n,(i>>1)+(m?-16:-4)|0)|0)/(n|0)|0;i=(i|0)>(v|0)?v:i;i=(i|0)<64?i:64;if((i|0)>=4){l=(p[((i&7)<<1)+31344>>1]>>14-(i>>>3|0))+1&-2;if((l|0)>=257){break l}}n=j?(A|0)<=(y|0)?1:l:l;m:{n:{o:{if(D){i=od(c,d,j,e);A=wa(t);if((n|0)==1){break m}p:{q:{if(j){a=q[a+48>>2];if(a){break q}l=w(i,n)- -8192>>14;break p}m=w(i,n);o=m- -8192|0;i=o>>14;r:{if((i|0)>=(n|0)){l=i;break r}if((m|0)<8192){l=i;break r}if(!q[a+56>>2]){l=i;break r}m=((o&-16384)>>>0)/(n>>>0)<<16;a=w(m>>13,m>>16)+32768>>16;o=((w((w((w(a,-626)+16384>>15)+8277|0,a)<<1)-501383168>>16,a)+16384>>>15|0)-a<<16)- -2147483648>>16;v=z(o);a=1073741824-m|0;a=w(a>>13,a>>16)+32768>>16;a=((w((w((w(a,-626)+16384>>15)+8277|0,a)<<1)-501383168>>16,a)+16384>>>15|0)-a<<16)- -2147483648>>16;m=z(a);o=o<>16;a=a<>16;a=w((v-m<<11)-(w((w(o,-2597)+16384>>15)+7932|0,o)+16384>>>15|0)+(w((w(a,-2597)+16384>>15)+7932|0,a)+16384>>>15)<<16>>16,(e<<23)-8388608>>16)+16384>>15;m=q[f>>2];if((a|0)>(m|0)){break r}l=(a|0)<(0-m|0)?0:i}if((h|0)<2){break o}break i}h=(a^-1)>>>31|0;a=w(i,n)+((((i|0)>8192?32767:-32767)|0)/(n|0)|0)|0;a=(a|0)<0?0:a>>14;l=h+((a|0)<(n|0)?a:n-1|0)|0}if((e|0)<=2){break i}a=(n|0)/2|0;h=w(a,3)+3|0;i=w(l,3);m=(a|0)<(l|0);$a(t,m?(h+(a^-1)|0)+l|0:i,m?(h-a|0)+l|0:i+3|0,a+h|0);break h}A=wa(t);if((n|0)==1){break k}if(!(!j|(e|0)<3)){a=t;v=a;h=(n|0)/2|0;m=h+1|0;i=w(m,3);o=h+i|0;l=jc(a,o);s:{if((i|0)>(l|0)){l=(l|0)/3|0;break s}l=l-(m<<1)|0}m=w(l,3);a=(h|0)<(l|0);xb(v,a?l+(i+(h^-1)|0)|0:m,a?(i-h|0)+l|0:m+3|0,o);break h}if(j?0:(h|0)<=1){break n}l=Qa(t,n+1|0);break h}h=n-l|0;m=h+1|0;o=l+1|0;a=n>>1;v=(a|0)<(l|0);a=a+1|0;i=w(a,a);h=v?i-(w(m,h+2|0)>>1)|0:w(l,o)>>1;$a(t,h,h+(v?m:o)|0,i);break h}d=t;i=n>>1;c=i+1|0;h=w(c,c);a=jc(t,h);t:{if((a|0)>1){c=Nb(a<<3|1)-1>>>1|0;a=c+1|0;i=w(a,c)>>>1|0;break t}i=n+1|0;c=(i<<1)-Nb(h+(a^-1)<<3|1)>>>1|0;a=i-c|0;i=h-(w(a,(n-c|0)+2|0)>>1)|0}xb(d,i,a+i|0,h);i=(c<<14>>>0)/(n>>>0)|0;break e}if(!j){break e}l=0;h=0;u:{if(q[a+52>>2]|(i|0)<8193){break u}h=1;if((e|0)<1){break u}j=0;while(1){h=(j<<2)+d|0;u[h>>2]=-u[h>>2];h=1;j=j+1|0;if((j|0)!=(e|0)){continue}break}}if((e|0)<1){break j}r=u[(y<<2)+C>>2];s=u[(q[E+8>>2]+y<<2)+C>>2];B=x(x(F(x(x(x(r*r)+x(1.0000000036274937e-15))+x(s*s))))+x(1.0000000036274937e-15));s=x(s/B);r=x(r/B);while(1){i=l<<2;j=i+c|0;u[j>>2]=x(r*u[j>>2])+x(s*u[d+i>>2]);l=l+1|0;if((l|0)!=(e|0)){continue}break}break j}ja(31360,30999,669);G()}h=0;if(!j){break g}}c=0;v:{if(q[f>>2]<17){break v}c=0;if(q[a+32>>2]<17){break v}if(D){va(t,h,2);c=h;break v}c=sa(t,2)}h=q[a+52>>2]?0:c;break g}Pa(t,l,n+1|0)}if((l|0)<=-1){break f}a=l<<14;i=(a>>>0)/(n>>>0)|0;if(!j|!D){break e}if(a>>>0>>0){h=0;if((e|0)<1){break g}r=u[(y<<2)+C>>2];s=u[(q[E+8>>2]+y<<2)+C>>2];B=x(x(F(x(x(x(r*r)+x(1.0000000036274937e-15))+x(s*s))))+x(1.0000000036274937e-15));s=x(s/B);r=x(r/B);l=0;while(1){a=l<<2;i=a+c|0;u[i>>2]=x(r*u[i>>2])+x(s*u[a+d>>2]);l=l+1|0;if((l|0)!=(e|0)){continue}break}break g}if((e|0)<1){break e}l=0;while(1){a=l<<2;h=a+c|0;r=x(u[h>>2]*x(.7071067690849304));a=a+d|0;s=x(u[a>>2]*x(.7071067690849304));u[h>>2]=r+s;u[a>>2]=s-r;l=l+1|0;if((l|0)!=(e|0)){continue}break}break e}a=wa(t)-A|0;q[f>>2]=q[f>>2]-a;break d}ja(31304,30999,838);G()}a=wa(t)-A|0;q[f>>2]=q[f>>2]-a;l=16384;if((i|0)==16384){break c}if(i){break b}h=i}q[k>>2]=q[k>>2]&(-1<>2]=q[k>>2]&(-1<>13,f>>16)+32768>>16;d=((w((w((w(c,-626)+16384>>15)+8277|0,c)<<1)-501383168>>16,c)+16384>>>15|0)-c<<16)- -2147483648>>16;g=z(d);c=1073741824-f|0;c=w(c>>13,c>>16)+32768>>16;c=((w((w((w(c,-626)+16384>>15)+8277|0,c)<<1)-501383168>>16,c)+16384>>>15|0)-c<<16)- -2147483648>>16;f=z(c);i=g-f<<11;g=d<>16;f=c<>16;e=w(i-(w((w(g,-2597)+16384>>15)+7932|0,g)+16384>>>15|0)+(w((w(f,-2597)+16384>>15)+7932|0,f)+16384>>>15)<<16>>16,(e<<23)-8388608>>16)+16384>>15}q[b+20>>2]=a;q[b+16>>2]=l;q[b+12>>2]=e;q[b+8>>2]=c;q[b+4>>2]=d;q[b>>2]=h}function $f(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0;q[a+6076>>2]=q[b+48>>2];q[a+4676>>2]=q[b+52>>2];f=q[b+8>>2];q[a+4556>>2]=f;q[a+4564>>2]=q[b+12>>2];q[a+4568>>2]=q[b+16>>2];q[a+4572>>2]=q[b+20>>2];q[a+6088>>2]=q[b+40>>2];q[a+5752>>2]=q[b>>2];g=q[b+4>>2];q[a+5760>>2]=d;q[a+4536>>2]=c;q[a+5756>>2]=g;a:{b:{if(!(q[a+4680>>2]|!q[a+4668>>2])){b=0;if((f|0)==q[a+4560>>2]){break b}c=q[a+4576>>2];if((c|0)<1){break b}return Zc(a,c)}c=(j=e,k=ag(a,b),l=e,l?j:k);h=Zc(a,c);d=q[b+24>>2];if((d|0)!=q[a+4612>>2]){c:{d:{switch(d-10|0){default:if((d|0)==40|(d|0)==60){break c}break;case 0:case 10:break c;case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:break d}}i=-103}e:{if((d|0)<=10){q[a+5744>>2]=1;q[a+4580>>2]=(d|0)==10?2:1;e=c<<16>>16;q[a+4584>>2]=w(e,d<<16>>16);q[a+4548>>2]=w(e,14);if(q[a+4576>>2]==8){q[a+4688>>2]=2745;break e}q[a+4688>>2]=2733;break e}q[a+4580>>2]=4;q[a+5744>>2]=(d>>>0)/20;e=c<<16>>16;q[a+4584>>2]=w(e,20);q[a+4548>>2]=w(e,24);if(q[a+4576>>2]==8){q[a+4688>>2]=2722;break e}q[a+4688>>2]=2688}q[a+4608>>2]=0;q[a+4612>>2]=d}f:{g:{h:{i:{if(!(!(1<>>0>16)){j:{k:{f=q[a+4580>>2];switch(f-2|0){case 0:case 2:break j;default:break k}}ja(35511,35490,242);G()}l:{if((c|0)==q[a+4576>>2]){e=q[a+4584>>2];d=q[a+4588>>2];break l}q[a+7168>>2]=0;q[a+7172>>2]=0;q[a+5748>>2]=0;q[a+5740>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;q[a+4608>>2]=0;q[a+7176>>2]=0;la(a+148|0,0,4384);d=10;o[a+7168|0]=10;q[a+4664>>2]=1;q[a+4544>>2]=100;q[a+4576>>2]=c;o[a+4541|0]=0;q[a+4492>>2]=65536;q[a+4476>>2]=100;m:{if((c|0)==8){q[a+4688>>2]=(f|0)==4?2722:2745;e=4152;break m}q[a+4688>>2]=(f|0)==4?2688:2733;d=(c|0)==12;e=d?4152:6276;d=d?10:16}q[a+4692>>2]=e;q[a+4640>>2]=d;d=w(c,5);q[a+4588>>2]=d;q[a+4596>>2]=c<<1;q[a+4592>>2]=w(c,20);q[a+4552>>2]=w(c,18);e=w(f,w(c,327680)>>16);q[a+4584>>2]=e;q[a+4548>>2]=w(c,(f|0)==4?24:14);n:{switch(c-12|0){case 4:q[a+4684>>2]=6448;d=80;break l;case 0:q[a+4684>>2]=6442;d=60;break l;default:break n}}q[a+4684>>2]=6433}if((w(d,f)|0)!=(e|0)){break i}d=q[b+36>>2];if(d>>>0>=11){break h}if(!d){q[a+4652>>2]=52429;g=0;q[a+4644>>2]=0;q[a+4636>>2]=12;q[a+4660>>2]=2;q[a+4628>>2]=1;q[a+4632>>2]=0;e=w(c,3);q[a+4600>>2]=e;f=6;break f}if((d|0)<=1){q[a+4652>>2]=49807;q[a+4644>>2]=1;q[a+4636>>2]=14;q[a+4660>>2]=3;q[a+4628>>2]=1;q[a+4632>>2]=0;break g}if((d|0)==2){q[a+4652>>2]=52429;q[a+4644>>2]=0;q[a+4648>>2]=6;q[a+4636>>2]=12;q[a+4660>>2]=2;q[a+4628>>2]=2;q[a+4632>>2]=0;e=w(c,3);q[a+4600>>2]=e;g=0;f=6;break f}if((d|0)<=3){q[a+4652>>2]=49807;q[a+4644>>2]=1;q[a+4648>>2]=8;q[a+4636>>2]=14;q[a+4660>>2]=4;q[a+4628>>2]=2;q[a+4632>>2]=0;break g}if((d|0)<=5){q[a+4652>>2]=48497;q[a+4644>>2]=1;q[a+4648>>2]=10;q[a+4636>>2]=16;q[a+4660>>2]=6;q[a+4628>>2]=2;q[a+4632>>2]=1;e=w(c,5);q[a+4600>>2]=e;g=w(c,983);f=10;break f}if((d|0)<=7){q[a+4652>>2]=47186;q[a+4644>>2]=1;q[a+4648>>2]=12;q[a+4636>>2]=20;q[a+4660>>2]=8;q[a+4628>>2]=3;q[a+4632>>2]=1;e=w(c,5);q[a+4600>>2]=e;g=w(c,983);f=12;break f}q[a+4652>>2]=45875;q[a+4644>>2]=2;q[a+4648>>2]=16;q[a+4636>>2]=24;q[a+4660>>2]=16;q[a+4628>>2]=4;q[a+4632>>2]=1;e=w(c,5);q[a+4600>>2]=e;g=w(c,983);f=16;break f}ja(35428,35490,241);G()}ja(35584,35490,302);G()}ja(35682,35490,315);G()}e=w(c,5);q[a+4600>>2]=e;g=0;f=8}q[a+4672>>2]=g;q[a+4624>>2]=d;q[a+4604>>2]=w(c,5)+(e<<1);c=q[a+4640>>2];c=(c|0)>(f|0)?f:c;q[a+4648>>2]=c;if((c|0)>=17){break a}c=q[b+32>>2];q[a+4616>>2]=c;d=q[a+6092>>2];b=q[b+44>>2];q[a+6092>>2]=b;if(b){b=a;if(d){c=(w(c>>16,-26214)-(w(c&65535,26214)>>>16|0)|0)+7|0;c=(c|0)>2?c:2}else{c=7}q[b+6096>>2]=c}b=h+i|0;q[a+4668>>2]=1}return b}ja(35736,35490,393);G()}function Gf(a,b,c,d,e,f,g,h,i,j){var k=0,l=0,m=0,n=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;k=ca-320|0;ca=k;m=g<<16>>16;g=-10;while(1){l=g<<10;a:{if((g|0)>=1){u=l|922;l=l-102|0;break a}u=l+1024|0;b:{switch(g+1|0){case 1:u=l|922;break a;default:u=u|102;break;case 0:break b}}l=l|102}n=(g<<2)+40|0;q[n+k>>2]=w(u<<16>>16,m)>>16;q[(k+80|0)+n>>2]=w(l<<16>>16,m)>>16;g=g+1|0;if((g|0)!=10){continue}break}p[k+224>>1]=0;q[k+192>>2]=0;if((j|0)<1){b=0}else{C=i<<16>>16;i=j;u=1;while(1){F=i;i=i-1|0;c:{d:{e:{A=(u|0)<1;f:{if(A){break f}g=i<<1;m=p[g+e>>1]+f|0;n=s[b+g>>1];z=r[d+i|0];x=p[c+g>>1];g=0;while(1){y=(k+224|0)+(g<<1)|0;v=w(z,p[y>>1])>>8;l=w(n-v<<16>>16,h)>>16;l=(l|0)>-10?l:-10;l=(l|0)<9?l:9;o[((k+240|0)+(g<<4)|0)+i|0]=l;t=y;y=(l<<2)+40|0;D=v+q[y+(k+80|0)>>2]|0;p[t>>1]=D;E=g+u|0;y=v+q[k+y>>2]|0;p[(k+224|0)+(E<<1)>>1]=y;t=(k+192|0)+(g<<2)|0;v=q[t>>2];G=t;H=v;g:{if((l|0)>=3){if((l|0)==3){t=280;B=r[m+7|0];break g}l=w(l,43);t=l+151|0;B=l+108|0;break g}if((l|0)<=-4){if((l|0)==-4){t=r[m+1|0];B=280;break g}l=w(l,-43);t=l+65|0;B=l+108|0;break g}l=l+m|0;t=r[l+5|0];B=r[l+4|0]}l=n-D<<16>>16;q[G>>2]=(H+w(B,C)|0)+w(x,w(l,l));l=n-y<<16>>16;q[(k+192|0)+(E<<2)>>2]=(v+w(t,C)|0)+w(x,w(l,l));g=g+1|0;if((u|0)!=(g|0)){continue}break}if((u|0)>=3){l=0;g=q[k+208>>2];m=q[k+192>>2];if((g|0)<(m|0)){break e}x=g;g=m;break d}g=0;if(A){break f}while(1){o[((k+240|0)+(g+u<<4)|0)+i|0]=r[((k+240|0)+(g<<4)|0)+i|0]+1;g=g+1|0;if((u|0)!=(g|0)){continue}break}}u=u<<1;g=u;if((g|0)>3){break c}while(1){o[((k+240|0)+(g<<4)|0)+i|0]=r[((k+240|0)+(g-u<<4)|0)+i|0];g=g+1|0;if((g|0)!=4){continue}break}break c}q[k+208>>2]=m;q[k+192>>2]=g;l=s[k+224>>1];p[k+224>>1]=s[k+232>>1];p[k+232>>1]=l;l=4;x=m}q[k+176>>2]=g;q[k+160>>2]=x;q[k+304>>2]=l;m=1;l=q[k+212>>2];n=q[k+196>>2];h:{if((l|0)>=(n|0)){v=l;l=n;break h}q[k+212>>2]=n;q[k+196>>2]=l;m=s[k+226>>1];p[k+226>>1]=s[k+234>>1];p[k+234>>1]=m;m=5;v=n}q[k+180>>2]=l;q[k+164>>2]=v;q[k+308>>2]=m;m=2;n=q[k+216>>2];z=q[k+200>>2];i:{if((n|0)>=(z|0)){A=n;n=z;break i}q[k+216>>2]=z;q[k+200>>2]=n;m=s[k+228>>1];p[k+228>>1]=s[k+236>>1];p[k+236>>1]=m;m=6;A=z}q[k+184>>2]=n;q[k+168>>2]=A;q[k+312>>2]=m;t=3;m=q[k+220>>2];y=q[k+204>>2];j:{if((m|0)>=(y|0)){z=m;m=y;break j}q[k+220>>2]=y;q[k+204>>2]=m;z=s[k+230>>1];p[k+230>>1]=s[k+238>>1];p[k+238>>1]=z;t=7;z=y}q[k+188>>2]=m;q[k+172>>2]=z;q[k+316>>2]=t;while(1){y=(x|0)>(v|0);v=y?v:x;x=(v|0)>(A|0);A=x?A:v;v=(A|0)>(z|0);t=(g|0)>0?g:0;g=(t|0)<(l|0);t=g?l:t;l=(t|0)<(n|0);t=l?n:t;n=(t|0)<(m|0);if(((v?z:A)|0)<((n?m:t)|0)){g=n?3:l?2:g;l=g<<2;m=v?3:x?2:y;n=m<<2;q[(l|k+304)>>2]=q[(n|k+304)>>2]^4;x=m|4;q[(l|k+192)>>2]=q[(k+192|0)+(x<<2)>>2];q[(l|k+176)>>2]=0;p[(k+224|g<<1)>>1]=s[(k+224|x<<1)>>1];q[(n|k+160)>>2]=2147483647;l=(k+240|0)+(m<<4)|0;m=q[l+4>>2];g=(k+240|0)+(g<<4)|0;q[g>>2]=q[l>>2];q[g+4>>2]=m;m=q[l+12>>2];q[g+8>>2]=q[l+8>>2];q[g+12>>2]=m;m=q[k+188>>2];z=q[k+172>>2];n=q[k+184>>2];A=q[k+168>>2];l=q[k+180>>2];v=q[k+164>>2];g=q[k+176>>2];x=q[k+160>>2];continue}break}g=(k+240|0)+i|0;o[g|0]=r[g|0]+(q[k+304>>2]>>>2|0);o[g+16|0]=r[g+16|0]+(q[k+308>>2]>>>2|0);o[g+48|0]=r[g+48|0]+(q[k+316>>2]>>>2|0);o[g+32|0]=r[g+32|0]+(q[k+312>>2]>>>2|0)}if((F|0)>1){continue}break}g=q[k+220>>2];l=q[k+216>>2];u=q[k+212>>2];m=q[k+208>>2];n=q[k+204>>2];i=q[k+200>>2];x=q[k+196>>2];b=q[k+192>>2]}c=(b|0)>(x|0);d=c;b=c?x:b;c=(b|0)>(i|0);d=c?2:d;b=c?i:b;c=(b|0)>(n|0);d=c?3:d;b=c?n:b;c=(b|0)>(m|0);d=c?4:d;b=c?m:b;c=(b|0)>(u|0);d=c?5:d;b=c?u:b;c=(b|0)>(l|0);e=c?6:d;c=c?l:b;d=(c|0)>(g|0);b=d?7:e;if((j|0)>0){ka(a,(k+240|0)+((b&3)<<4)|0,j)}o[a|0]=r[a|0]+(b>>>2|0);ca=k+320|0;return d?g:c}function Ze(a,b){var c=x(0),d=0,e=0,f=x(0),g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,r=x(0),s=x(0);h=ca-512|0;ca=h;g=q[11992];a:{if((g|0)<1){break a}j=q[11991];e=q[11988];while(1){u[(h+256|0)+(d<<2)>>2]=o[d+e|0];d=d+1|0;if((g|0)!=(d|0)){continue}break}if((g|0)<1){break a}l=w(g,3);m=q[11989];e=0;n=(j|0)<1;while(1){if(!n){i=(h+256|0)+(e<<2)|0;c=u[i>>2];d=0;while(1){c=x(c+x(u[(d<<2)+b>>2]*x(o[m+(w(d,l)+e|0)|0])));d=d+1|0;if((j|0)!=(d|0)){continue}break}u[i>>2]=c}e=e+1|0;if((g|0)!=(e|0)){continue}break}n=q[11990];e=0;while(1){i=(h+256|0)+(e<<2)|0;c=u[i>>2];d=0;while(1){c=x(c+x(u[(d<<2)+a>>2]*x(o[n+(w(d,l)+e|0)|0])));d=d+1|0;if((g|0)!=(d|0)){continue}break}u[i>>2]=c;e=e+1|0;if((g|0)!=(e|0)){continue}break}d=0;if((g|0)<=0){break a}while(1){i=(h+256|0)+(d<<2)|0;c=x(x(u[i>>2]*x(.0078125))*x(.5));f=x(1);b:{if(cx(-8)^1){break b}f=x(.5);if(c!=c){break b}k=c>2];f=x(f+x(x(e|0)*x(-.03999999910593033)));c=x(c+x(x(x(1)-x(c*f))*x(f*x(x(1)-x(c*c)))));f=x(x((k?x(-c):c)*x(.5))+x(.5))}u[i>>2]=f;d=d+1|0;if((g|0)!=(d|0)){continue}break}if((g|0)<1){break a}e=q[11988];d=0;while(1){u[(h+128|0)+(d<<2)>>2]=o[e+(d+g|0)|0];d=d+1|0;if((g|0)!=(d|0)){continue}break}if((g|0)<1){break a}i=g+m|0;e=0;k=(j|0)<1;while(1){if(!k){p=(h+128|0)+(e<<2)|0;c=u[p>>2];d=0;while(1){c=x(c+x(u[(d<<2)+b>>2]*x(o[i+(w(d,l)+e|0)|0])));d=d+1|0;if((j|0)!=(d|0)){continue}break}u[p>>2]=c}e=e+1|0;if((g|0)!=(e|0)){continue}break}i=g+n|0;e=0;while(1){k=(h+128|0)+(e<<2)|0;c=u[k>>2];d=0;while(1){c=x(c+x(u[(d<<2)+a>>2]*x(o[i+(w(d,l)+e|0)|0])));d=d+1|0;if((g|0)!=(d|0)){continue}break}u[k>>2]=c;e=e+1|0;if((g|0)!=(e|0)){continue}break}d=0;if((g|0)<=0){break a}while(1){i=(h+128|0)+(d<<2)|0;c=x(x(u[i>>2]*x(.0078125))*x(.5));f=x(1);d:{if(cx(-8)^1){break d}f=x(.5);if(c!=c){break d}k=c>2];f=x(f+x(x(e|0)*x(-.03999999910593033)));c=x(c+x(x(x(1)-x(c*f))*x(f*x(x(1)-x(c*c)))));f=x(x((k?x(-c):c)*x(.5))+x(.5))}u[i>>2]=f;d=d+1|0;if((g|0)!=(d|0)){continue}break}if((g|0)<1){break a}e=g<<1;i=q[11988];d=0;while(1){u[(d<<2)+h>>2]=o[i+(d+e|0)|0];d=d+1|0;if((g|0)!=(d|0)){continue}break}d=0;if((g|0)<=0){break a}while(1){e=d<<2;u[e+(h+384|0)>>2]=u[a+e>>2]*u[e+(h+128|0)>>2];d=d+1|0;if((g|0)!=(d|0)){continue}break}if((g|0)<1){break a}e=m;m=g<<1;i=e+m|0;e=0;k=(j|0)<1;while(1){if(!k){p=(e<<2)+h|0;c=u[p>>2];d=0;while(1){c=x(c+x(u[(d<<2)+b>>2]*x(o[i+(w(d,l)+e|0)|0])));d=d+1|0;if((j|0)!=(d|0)){continue}break}u[p>>2]=c}e=e+1|0;if((g|0)!=(e|0)){continue}break}b=m+n|0;e=0;while(1){j=(e<<2)+h|0;c=u[j>>2];d=0;while(1){c=x(c+x(u[(h+384|0)+(d<<2)>>2]*x(o[b+(w(d,l)+e|0)|0])));d=d+1|0;if((g|0)!=(d|0)){continue}break}u[j>>2]=c;e=e+1|0;if((g|0)!=(e|0)){continue}break}d=0;if((g|0)<=0){break a}while(1){b=d<<2;c=u[b+(h+256|0)>>2];r=x(c*u[a+b>>2]);s=x(x(1)-c);e=b+h|0;c=x(u[e>>2]*x(.0078125));f=x(1);f:{if(cx(-8)^1){break f}f=x(0);if(c!=c){break f}j=c>2];f=x(f+x(x(b|0)*x(-.03999999910593033)));c=x(c+x(x(x(1)-x(c*f))*x(f*x(x(1)-x(c*c)))));f=j?x(-c):c}u[e>>2]=r+x(s*f);d=d+1|0;if((g|0)!=(d|0)){continue}break}if((g|0)<1){break a}ka(a,h,g<<2)}ca=h+512|0}function oa(a,b,c){var d=0,e=0,f=0,g=0,h=0;d=ca-16|0;ca=d;q[d+12>>2]=c;c=-5;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{k:{l:{m:{n:{o:{p:{q:{r:{s:{t:{u:{v:{w:{switch(b-4002|0){default:switch(b-10002|0){case 6:break o;case 0:break t;case 10:break u;case 8:break v;case 24:break c;case 22:break d;case 13:break f;case 26:break g;case 20:break h;case 14:break i;default:break a};case 1:case 2:case 3:case 5:case 6:case 7:case 9:case 10:case 11:case 13:case 14:case 15:case 16:case 17:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 27:case 28:case 30:case 31:case 32:case 33:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:break a;case 26:break j;case 45:break k;case 44:break l;case 35:break m;case 34:break n;case 0:break p;case 4:break q;case 18:break r;case 12:break s;case 8:break w;case 29:break e}}b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>10){break a}q[a+24>>2]=b;break b}b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if((b|0)<0|(b|0)>=q[q[a>>2]+8>>2]){break a}q[a+32>>2]=b;break b}b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if((b|0)<1|(b|0)>q[q[a>>2]+8>>2]){break a}q[a+36>>2]=b;break b}b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>2){break a}q[a+12>>2]=!b;q[a+20>>2]=(b|0)!=2;break b}b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>100){break a}q[a+56>>2]=b;break b}b=q[d+12>>2];q[d+12>>2]=b+4;q[a+52>>2]=q[b>>2];break b}b=q[d+12>>2];q[d+12>>2]=b+4;q[a+44>>2]=q[b>>2];break b}b=q[d+12>>2];q[d+12>>2]=b+4;b=q[b>>2];if((b|0)<=500){c=-1;if((b|0)!=-1){break a}}c=a;a=w(q[a+4>>2],26e4);q[c+40>>2]=(a|0)>(b|0)?b:a;break b}b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if(b-1>>>0>1){break a}q[a+8>>2]=b;break b}b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if(b-8>>>0>16){break a}q[a+60>>2]=b;break b}b=q[d+12>>2];q[d+12>>2]=b+4;q[q[b>>2]>>2]=q[a+60>>2];break b}b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>1){break a}q[a+68>>2]=b;break b}b=q[d+12>>2];q[d+12>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+68>>2];break b}c=0;b=q[a+4>>2];e=q[a>>2];f=q[e+4>>2];g=q[e+8>>2];la(a+76|0,0,w(b,((f<<2)+(g<<4)|0)+4096|0)+168|0);e=w(b,q[e+8>>2]);if((e|0)>=1){h=(w(b,f+1024|0)<<2)+a|0;f=w(b,g)<<2;b=(h+f|0)+244|0;f=b+f|0;while(1){g=c<<2;q[g+f>>2]=-1042284544;q[b+g>>2]=-1042284544;c=c+1|0;if((e|0)!=(c|0)){continue}break}}c=0;q[a+216>>2]=0;q[a+96>>2]=0;q[a+100>>2]=0;q[a+88>>2]=256;q[a+80>>2]=2;q[a+84>>2]=1065353216;break a}b=q[d+12>>2];q[d+12>>2]=b+4;q[a+48>>2]=q[b>>2];break b}b=q[d+12>>2];q[d+12>>2]=b+4;c=0;b=q[b>>2];if(!b){break a}e=q[b+4>>2];q[a+120>>2]=q[b>>2];q[a+124>>2]=e;e=q[b+60>>2];q[a+176>>2]=q[b+56>>2];q[a+180>>2]=e;e=q[b+52>>2];q[a+168>>2]=q[b+48>>2];q[a+172>>2]=e;e=q[b+44>>2];q[a+160>>2]=q[b+40>>2];q[a+164>>2]=e;e=q[b+36>>2];q[a+152>>2]=q[b+32>>2];q[a+156>>2]=e;e=q[b+28>>2];q[a+144>>2]=q[b+24>>2];q[a+148>>2]=e;e=q[b+20>>2];q[a+136>>2]=q[b+16>>2];q[a+140>>2]=e;e=q[b+12>>2];q[a+128>>2]=q[b+8>>2];q[a+132>>2]=e;break a}b=q[d+12>>2];q[d+12>>2]=b+4;c=0;b=q[b>>2];if(!b){break a}e=q[b+4>>2];q[a+184>>2]=q[b>>2];q[a+188>>2]=e;break a}b=q[d+12>>2];q[d+12>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a>>2];break b}b=q[d+12>>2];q[d+12>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+76>>2];break b}b=q[d+12>>2];q[d+12>>2]=b+4;q[a+64>>2]=q[b>>2];break b}b=q[d+12>>2];q[d+12>>2]=b+4;q[a+236>>2]=q[b>>2]}c=0}ca=d+16|0;return c}function Fb(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;g=ca;J=g;a:{b:{c:{h=e&-16;if((h|0)<(e|0)){if((e|0)!=120){break c}o[d+120|0]=0;o[d+121|0]=0;o[d+122|0]=0;o[d+123|0]=0;o[d+124|0]=0;o[d+125|0]=0;o[d+126|0]=0;o[d+127|0]=0;h=128;o[d+128|0]=0;o[d+129|0]=0;o[d+130|0]=0;o[d+131|0]=0;o[d+132|0]=0;o[d+133|0]=0;o[d+134|0]=0;o[d+135|0]=0;s=g-512|0;k=s;ca=k;u=8;break b}u=e>>4;s=g-(h<<2)|0;k=s;ca=k;if((e|0)>15){break b}f=(u<<2)+15&-16;t=k-f|0;h=t;ca=h;y=h-f|0;ca=y;break a}ja(36154,36196,89);G()}while(1){j=o[d+f|0];g=j>>31;q[(f<<2)+s>>2]=(g^g+j)&255;j=f|1;i=o[j+d|0];g=i>>31;q[(j<<2)+s>>2]=(g^g+i)&255;j=f|2;i=o[j+d|0];g=i>>31;q[(j<<2)+s>>2]=(g^g+i)&255;j=f|3;i=o[j+d|0];g=i>>31;q[(j<<2)+s>>2]=(g^g+i)&255;f=f+4|0;if((h|0)>(f|0)){continue}break}f=(u<<2)+15&-16;t=k-f|0;h=t;ca=h;y=h-f|0;ca=y;K=r[7510];F=r[7509];A=r[7508];v=r[7507];h=0;k=0;f=s;while(1){g=C<<2;H=g+y|0;q[H>>2]=0;L=g+t|0;B=q[f+4>>2];n=q[f>>2];x=0;while(1){D=1;d:{e:{f:{g:{h:{g=n+B|0;i:{if((v|0)<(g|0)){g=h;break i}i=q[f+12>>2]+q[f+8>>2]|0;if((v|0)>=(i|0)){break h}}i=l;break g}l=q[f+20>>2]+q[f+16>>2]|0;if((v|0)<(l|0)){break g}j=q[f+28>>2]+q[f+24>>2]|0;if((v|0)<(j|0)){break f}h=q[f+36>>2]+q[f+32>>2]|0;if((h|0)>(v|0)){break e}k=q[f+44>>2]+q[f+40>>2]|0;if((k|0)>(v|0)){p=h;break e}m=q[f+52>>2]+q[f+48>>2]|0;if((m|0)>(v|0)){p=h;z=k;break e}p=q[f+60>>2]+q[f+56>>2]|0;E=(p|0)>(v|0);I=E?I:p;p=h;z=k;M=m;break d}l=k}j=m}E=1}j:{k:{l:{h=g+i|0;m:{if((A|0)<(h|0)){h=g;break m}g=j+l|0;if((A|0)>=(g|0)){break l}}g=i;break k}k=p+z|0;if((A|0)<(k|0)){break k}l=I+M|0;D=(l|0)>(A|0);m=D?j:l;break j}k=l;m=j}l=k+m|0;j=(l|0)>(F|0);N=g;l=j?g:l;i=g+h|0;g=(i|0)>(F|0);l=g?N:l;n:{h=g?h:i;i=l+h|0;if((i|0)<=(K|0)){q[L>>2]=i;if((D+E|0)==(0-(g|j)|0)){break n}}x=x+1|0;q[H>>2]=x;B=B>>1;q[f+4>>2]=B;n=n>>1;q[f>>2]=n;q[f+8>>2]=q[f+8>>2]>>1;q[f+12>>2]=q[f+12>>2]>>1;q[f+16>>2]=q[f+16>>2]>>1;q[f+20>>2]=q[f+20>>2]>>1;q[f+24>>2]=q[f+24>>2]>>1;q[f+28>>2]=q[f+28>>2]>>1;q[f+32>>2]=q[f+32>>2]>>1;q[f+36>>2]=q[f+36>>2]>>1;q[f+40>>2]=q[f+40>>2]>>1;q[f+44>>2]=q[f+44>>2]>>1;q[f+48>>2]=q[f+48>>2]>>1;q[f+52>>2]=q[f+52>>2]>>1;q[f+56>>2]=q[f+56>>2]>>1;q[f+60>>2]=q[f+60>>2]>>1;continue}break}f=f- -64|0;x=1;C=C+1|0;if((C|0)!=(u|0)){continue}break}}m=2147483647;p=b>>1;k=w(p,9)+7920|0;n=0;j=0;while(1){h=r[k+n|0];if(x){i=w(n,18)+7712|0;l=i+17|0;f=0;while(1){g=l;z=f<<2;if(q[z+y>>2]<=0){g=i+q[t+z>>2]|0}h=r[g|0]+h|0;f=f+1|0;if((u|0)!=(f|0)){continue}break}}f=(h|0)<(m|0);j=f?n:j;m=f?h:m;n=n+1|0;if((n|0)!=9){continue}break}ma(a,j,w(p,9)+7888|0,8);o:{if(!x){break o}h=w(j,18)+7520|0;k=0;while(1){g=k<<2;f=q[g+y>>2];p:{if(!f){ma(a,q[g+t>>2],h,8);break p}ma(a,17,h,8);if((f|0)>=2){l=f-1|0;f=0;while(1){ma(a,17,7682,8);f=f+1|0;if((l|0)!=(f|0)){continue}break}}ma(a,q[g+t>>2],7682,8)}k=k+1|0;if((u|0)!=(k|0)){continue}break}if(!x){break o}f=0;while(1){if(q[(f<<2)+t>>2]>=1){Ld(a,(f<<6)+s|0)}f=f+1|0;if((u|0)!=(f|0)){continue}break}if(!x){break o}m=0;while(1){h=q[(m<<2)+y>>2];if((h|0)>=1){p=(m<<4)+d|0;i=0;while(1){g=o[i+p|0];f=g>>31;l=(f^f+g)<<24>>24;f=h;if((f|0)!=1){while(1){g=f-1|0;ma(a,l>>>g&1,6400,8);k=(f|0)>2;f=g;if(k){continue}break}}ma(a,l&1,6400,8);i=i+1|0;if((i|0)!=16){continue}break}}m=m+1|0;if((u|0)!=(m|0)){continue}break}}Jd(a,d,e,b,c,t);ca=J}function Ba(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,n=0,o=0,p=0,s=x(0),t=0,v=0,y=x(0),z=0,A=0,B=0,C=0,D=0,E=0;C=(c>>>0)/(e>>>0)|0;D=q[a>>2];a:{if((c|0)==1){f=0;if(q[a+32>>2]>=8){c=q[a+28>>2];b:{if(D){f=u[b>>2]>2]=q[a+32>>2]-8}if(q[a+4>>2]){u[b>>2]=f?x(-1):x(1)}k=1;if(!h){break a}u[h>>2]=u[b>>2];return 1}z=q[a+24>>2];l=(z|0)>0;c:{if(!f){j=f;break c}if(!j){j=f;break c}if(!(!(C&1)&(z|0)!=0|((z|0)>0|(e|0)>1))){j=f;break c}ka(j,f,c<<2)}v=l?z:0;if((z|0)>=1){l=0;while(1){d:{if(D){if((l|0)==31){break d}t=c>>l;f=t>>1;A=(f|0)>1?f:1;n=1<=2){while(1){o=(w(f,p)+m<<2)+b|0;y=x(u[o>>2]*x(.7071067690849304));B=o;o=(((f<<1|1)<>2]*x(.7071067690849304));u[B>>2]=y+s;u[o>>2]=y-s;f=f+1|0;if((A|0)!=(f|0)){continue}break}}m=m+1|0;if((n|0)!=(m|0)){continue}break}}if(!j|(l|0)==31){break d}t=c>>l;f=t>>1;A=(f|0)>1?f:1;n=1<=2){while(1){o=(w(f,p)+m<<2)+j|0;y=x(u[o>>2]*x(.7071067690849304));B=o;o=(((f<<1|1)<>2]*x(.7071067690849304));u[B>>2]=y+s;u[o>>2]=y-s;f=f+1|0;if((A|0)!=(f|0)){continue}break}}m=m+1|0;if((n|0)!=(m|0)){continue}break}}k=r[(k&15)+31120|0]|r[(k>>4)+31120|0]<<2;l=l+1|0;if((v|0)!=(l|0)){continue}break}}m=e>>v;o=C<-1)){A=z;while(1){p=o>>1;if(!(!D|(m|0)<1)){C=(p|0)>1?p:1;t=m<<1;n=0;while(1){f=0;if((o|0)>=2){while(1){l=(w(f,t)+n<<2)+b|0;y=x(u[l>>2]*x(.7071067690849304));B=l;l=(w(f<<1|1,m)+n<<2)+b|0;s=x(u[l>>2]*x(.7071067690849304));u[B>>2]=y+s;u[l>>2]=y-s;f=f+1|0;if((C|0)!=(f|0)){continue}break}}n=n+1|0;if((n|0)!=(m|0)){continue}break}}f:{if(!((m|0)>0?j:0)){l=m<<1;break f}C=(p|0)>1?p:1;l=m<<1;n=0;while(1){f=0;if((o|0)>=2){while(1){t=(w(f,l)+n<<2)+j|0;y=x(u[t>>2]*x(.7071067690849304));B=t;t=(w(f<<1|1,m)+n<<2)+j|0;s=x(u[t>>2]*x(.7071067690849304));u[B>>2]=y+s;u[t>>2]=y-s;f=f+1|0;if((C|0)!=(f|0)){continue}break}}n=n+1|0;if((n|0)!=(m|0)){continue}break}}E=E+1|0;k=k<>v,l<>v,l<>2]){break a}if((l|0)>=2){ug(b,p>>v,l<>1;o=k>>>n|0;if((l|0)>=2){d=p>>1;g=(d|0)>1?d:1;e=l&-2;j=0;while(1){f=0;if((p|0)>=2){while(1){d=(w(e,f)+j<<2)+b|0;s=x(u[d>>2]*x(.7071067690849304));l=d;d=(w(f<<1|1,n)+j<<2)+b|0;i=x(u[d>>2]*x(.7071067690849304));u[l>>2]=s+i;u[d>>2]=s-i;f=f+1|0;if((g|0)!=(f|0)){continue}break}}j=j+1|0;if((n|0)!=(j|0)){continue}break}}k=k|o;l=n;a=a+1|0;if((E|0)!=(a|0)){continue}break}}l=0;if((z|0)>0){while(1){k=r[k+31136|0];if((l|0)!=31){o=c>>l;a=o>>1;g=(a|0)>1?a:1;e=1<=2){while(1){a=(w(d,f)+j<<2)+b|0;s=x(u[a>>2]*x(.7071067690849304));m=a;a=(((f<<1|1)<>2]*x(.7071067690849304));u[m>>2]=s+i;u[a>>2]=s-i;f=f+1|0;if((g|0)!=(f|0)){continue}break}}j=j+1|0;if((e|0)!=(j|0)){continue}break}}l=l+1|0;if((v|0)!=(l|0)){continue}break}}d=n<>2]=u[a+b>>2]*i;f=f+1|0;if((f|0)!=(c|0)){continue}break}}k=(-1<0?c:0;j=f+w(r,-24)|0;l=q[13569];i=d-1|0;if((l+i|0)>=0){f=d+l|0;c=r-i|0;while(1){v[(h+320|0)+(g<<3)>>3]=(c|0)<0?0:+q[(c<<2)+54288>>2];c=c+1|0;g=g+1|0;if((f|0)!=(g|0)){continue}break}}m=j-24|0;f=0;s=(l|0)>0?l:0;g=(d|0)<1;while(1){a:{if(g){e=0;break a}k=f+i|0;c=0;e=0;while(1){e=e+v[(c<<3)+a>>3]*v[(h+320|0)+(k-c<<3)>>3];c=c+1|0;if((d|0)!=(c|0)){continue}break}}v[(f<<3)+h>>3]=e;c=(f|0)==(s|0);f=f+1|0;if(!c){continue}break}z=47-j|0;t=48-j|0;A=j-25|0;f=l;b:{while(1){e=v[(f<<3)+h>>3];c=0;g=f;o=(f|0)<1;if(!o){while(1){k=(h+480|0)+(c<<2)|0;n=e;e=e*5.960464477539063e-8;c:{if(y(e)<2147483648){i=~~e;break c}i=-2147483648}e=+(i|0);n=n+e*-16777216;d:{if(y(n)<2147483648){i=~~n;break d}i=-2147483648}q[k>>2]=i;g=g-1|0;e=v[(g<<3)+h>>3]+e;c=c+1|0;if((f|0)!=(c|0)){continue}break}}e=Ja(e,m);e=e+C(e*.125)*-8;e:{if(y(e)<2147483648){k=~~e;break e}k=-2147483648}e=e- +(k|0);f:{g:{h:{u=(m|0)<1;i:{if(!u){g=(f<<2)+h|0;i=q[g+476>>2];c=i>>t;p=g;g=i-(c<>2]=g;k=c+k|0;i=g>>z;break i}if(m){break h}i=q[((f<<2)+h|0)+476>>2]>>23}if((i|0)<1){break f}break g}i=2;if(!(e>=.5^1)){break g}i=0;break f}c=0;g=0;if(!o){while(1){p=(h+480|0)+(c<<2)|0;o=q[p>>2];x=16777215;j:{k:{if(g){break k}x=16777216;if(o){break k}g=0;break j}q[p>>2]=x-o;g=1}c=c+1|0;if((f|0)!=(c|0)){continue}break}}l:{if(u){break l}m:{switch(A|0){case 0:c=(f<<2)+h|0;q[c+476>>2]=q[c+476>>2]&8388607;break l;case 1:break m;default:break l}}c=(f<<2)+h|0;q[c+476>>2]=q[c+476>>2]&4194303}k=k+1|0;if((i|0)!=2){break f}e=1-e;i=2;if(!g){break f}e=e-Ja(1,m)}if(e==0){g=0;n:{c=f;if((l|0)>=(c|0)){break n}while(1){c=c-1|0;g=q[(h+480|0)+(c<<2)>>2]|g;if((c|0)>(l|0)){continue}break}if(!g){break n}j=m;while(1){j=j-24|0;f=f-1|0;if(!q[(h+480|0)+(f<<2)>>2]){continue}break}break b}c=1;while(1){g=c;c=c+1|0;if(!q[(h+480|0)+(l-g<<2)>>2]){continue}break}g=f+g|0;while(1){i=d+f|0;f=f+1|0;v[(h+320|0)+(i<<3)>>3]=q[(r+f<<2)+54288>>2];c=0;e=0;if((d|0)>=1){while(1){e=e+v[(c<<3)+a>>3]*v[(h+320|0)+(i-c<<3)>>3];c=c+1|0;if((d|0)!=(c|0)){continue}break}}v[(f<<3)+h>>3]=e;if((f|0)<(g|0)){continue}break}f=g;continue}break}e=Ja(e,24-j|0);o:{if(!(e>=16777216^1)){d=(h+480|0)+(f<<2)|0;n=e;e=e*5.960464477539063e-8;p:{if(y(e)<2147483648){c=~~e;break p}c=-2147483648}e=n+ +(c|0)*-16777216;q:{if(y(e)<2147483648){a=~~e;break q}a=-2147483648}q[d>>2]=a;f=f+1|0;break o}if(y(e)<2147483648){c=~~e}else{c=-2147483648}j=m}q[(h+480|0)+(f<<2)>>2]=c}e=Ja(1,j);if((f|0)>=0){c=f;while(1){v[(c<<3)+h>>3]=e*+q[(h+480|0)+(c<<2)>>2];e=e*5.960464477539063e-8;a=0;d=(c|0)>0;c=c-1|0;if(d){continue}break}g=f;while(1){d=a>>>0>s>>>0?s:a;c=0;e=0;while(1){e=e+v[(c<<3)+57056>>3]*v[(c+g<<3)+h>>3];j=(c|0)!=(d|0);c=c+1|0;if(j){continue}break}v[(h+160|0)+(f-g<<3)>>3]=e;g=g-1|0;c=(a|0)!=(f|0);a=a+1|0;if(c){continue}break}}e=0;if((f|0)>=0){c=f;while(1){e=e+v[(h+160|0)+(c<<3)>>3];a=(c|0)>0;c=c-1|0;if(a){continue}break}}v[b>>3]=i?-e:e;e=v[h+160>>3]-e;c=1;if((f|0)>=1){while(1){e=e+v[(h+160|0)+(c<<3)>>3];a=(c|0)!=(f|0);c=c+1|0;if(a){continue}break}}v[b+8>>3]=i?-e:e;ca=h+560|0;return k&7}function Ca(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;a:{if(!a){break a}d=a-8|0;b=q[a-4>>2];a=b&-8;f=d+a|0;b:{if(b&1){break b}if(!(b&3)){break a}b=q[d>>2];d=d-b|0;if(d>>>0>>0<=255){e=q[d+8>>2];b=b>>>3|0;c=q[d+12>>2];if((c|0)==(e|0)){i=58692,j=q[14673]&Ag(-2,b),q[i>>2]=j;break b}q[e+12>>2]=c;q[c+8>>2]=e;break b}h=q[d+24>>2];b=q[d+12>>2];c:{if((d|0)!=(b|0)){c=q[d+8>>2];q[c+12>>2]=b;q[b+8>>2]=c;break c}d:{e=d+20|0;c=q[e>>2];if(c){break d}e=d+16|0;c=q[e>>2];if(c){break d}b=0;break c}while(1){g=e;b=c;e=b+20|0;c=q[e>>2];if(c){continue}e=b+16|0;c=q[b+16>>2];if(c){continue}break}q[g>>2]=0}if(!h){break b}e=q[d+28>>2];c=(e<<2)+58996|0;e:{if(q[c>>2]==(d|0)){q[c>>2]=b;if(b){break e}i=58696,j=q[14674]&Ag(-2,e),q[i>>2]=j;break b}q[h+(q[h+16>>2]==(d|0)?16:20)>>2]=b;if(!b){break b}}q[b+24>>2]=h;c=q[d+16>>2];if(c){q[b+16>>2]=c;q[c+24>>2]=b}c=q[d+20>>2];if(!c){break b}q[b+20>>2]=c;q[c+24>>2]=b;break b}b=q[f+4>>2];if((b&3)!=3){break b}q[14675]=a;q[f+4>>2]=b&-2;q[d+4>>2]=a|1;q[a+d>>2]=a;return}if(d>>>0>=f>>>0){break a}b=q[f+4>>2];if(!(b&1)){break a}f:{if(!(b&2)){if(q[14679]==(f|0)){q[14679]=d;a=q[14676]+a|0;q[14676]=a;q[d+4>>2]=a|1;if(q[14678]!=(d|0)){break a}q[14675]=0;q[14678]=0;return}if(q[14678]==(f|0)){q[14678]=d;a=q[14675]+a|0;q[14675]=a;q[d+4>>2]=a|1;q[a+d>>2]=a;return}a=(b&-8)+a|0;g:{if(b>>>0<=255){c=q[f+8>>2];b=b>>>3|0;e=q[f+12>>2];if((c|0)==(e|0)){i=58692,j=q[14673]&Ag(-2,b),q[i>>2]=j;break g}q[c+12>>2]=e;q[e+8>>2]=c;break g}h=q[f+24>>2];b=q[f+12>>2];h:{if((f|0)!=(b|0)){c=q[f+8>>2];q[c+12>>2]=b;q[b+8>>2]=c;break h}i:{e=f+20|0;c=q[e>>2];if(c){break i}e=f+16|0;c=q[e>>2];if(c){break i}b=0;break h}while(1){g=e;b=c;e=b+20|0;c=q[e>>2];if(c){continue}e=b+16|0;c=q[b+16>>2];if(c){continue}break}q[g>>2]=0}if(!h){break g}e=q[f+28>>2];c=(e<<2)+58996|0;j:{if(q[c>>2]==(f|0)){q[c>>2]=b;if(b){break j}i=58696,j=q[14674]&Ag(-2,e),q[i>>2]=j;break g}q[h+(q[h+16>>2]==(f|0)?16:20)>>2]=b;if(!b){break g}}q[b+24>>2]=h;c=q[f+16>>2];if(c){q[b+16>>2]=c;q[c+24>>2]=b}c=q[f+20>>2];if(!c){break g}q[b+20>>2]=c;q[c+24>>2]=b}q[d+4>>2]=a|1;q[a+d>>2]=a;if(q[14678]!=(d|0)){break f}q[14675]=a;return}q[f+4>>2]=b&-2;q[d+4>>2]=a|1;q[a+d>>2]=a}if(a>>>0<=255){a=a>>>3|0;b=(a<<3)+58732|0;c=q[14673];a=1<>2]}q[b+8>>2]=d;q[a+12>>2]=d;q[d+12>>2]=b;q[d+8>>2]=a;return}e=31;q[d+16>>2]=0;q[d+20>>2]=0;if(a>>>0<=16777215){b=a>>>8|0;g=b+1048320>>>16&8;b=b<>>16&4;b=b<>>16&2;b=(b<>>15|0)-(c|(e|g))|0;e=(b<<1|a>>>b+21&1)+28|0}q[d+28>>2]=e;g=(e<<2)+58996|0;l:{m:{c=q[14674];b=1<>2]=d;q[d+24>>2]=g;break n}e=a<<((e|0)==31?0:25-(e>>>1|0)|0);b=q[g>>2];while(1){c=b;if((q[b+4>>2]&-8)==(a|0)){break m}b=e>>>29|0;e=e<<1;g=c+(b&4)|0;b=q[g+16>>2];if(b){continue}break}q[g+16>>2]=d;q[d+24>>2]=c}q[d+12>>2]=d;q[d+8>>2]=d;break l}a=q[c+8>>2];q[a+12>>2]=d;q[c+8>>2]=d;q[d+24>>2]=0;q[d+12>>2]=c;q[d+8>>2]=a}a=q[14681]-1|0;q[14681]=a?a:-1}}function jf(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,n=0,r=0,s=0,t=0,v=0,z=0,A=0,C=0,D=0,E=0,F=x(0),G=0,H=0,I=0,J=x(0),K=0,L=0,M=x(0),N=0,O=0,P=x(0),Q=0;l=ca;K=l;A=1;m=(b<<2)+15&-16;D=l-m|0;ca=D;l=q[a+32>>2];G=b-1|0;n=(p[l+(b<<1)>>1]-p[(G<<1)+l>>1]<=1){J=x(x(B(x(x(.5)-i),x(-.25)))*x(.03999999910593033));M=x(J*x((c?h:0)|0));E=1<>1];t=p[(C<<1)+l>>1]-g|0;n=t<>2])));l=l+1|0;if((n|0)!=(l|0)){continue}break}}F=x(i+x(M*i));l=0;g=0;a:{if(!c){break a}g=0;if((t|0)==1){break a}g=ka(z,r,m);Mb(g,n>>h,E);m=0;i=x(0);if(!v){while(1){i=x(i+x(y(u[g+(m<<2)>>2])));m=m+1|0;if((n|0)!=(m|0)){continue}break}}i=x(i+x(P*i));g=0;if(i=1){while(1){Mb(r,n>>l,1<>2])));l=l+1|0;if((n|0)!=(l|0)){continue}break}}i=x(i+x(x(J*x(Q|0))*i));l=i>2]=g;if(!(((g|0)!=(O|0)?g:0)|t)){q[j>>2]=g-1}if((b|0)!=(C|0)){l=q[a+32>>2];j=C;continue}break}C=q[D>>2]}f=(h<<3)+1152|0;n=c<<2;g=o[f+n|0]<<1;j=C-g|0;a=j>>31;a=a^a+j;j=q[k>>2];l=w(a,j);m=o[f+(n|1)|0]<<1;r=C-m|0;a=r>>31;a=w(j,a^a+r);r=c?0:e;a=a+r|0;b:{if((b|0)<=1){g=a;break b}t=0-m|0;v=0-g|0;while(1){g=e+l|0;s=A<<2;z=q[s+D>>2];E=z+v|0;m=E>>31;s=q[k+s>>2];E=w(s,m^m+E);m=a+e|0;l=E+((l|0)<(m|0)?l:m)|0;z=t+z|0;m=z>>31;g=w(m^m+z,s)+((a|0)>(g|0)?g:a)|0;a=g;A=A+1|0;if((A|0)!=(b|0)){continue}break}}m=1;A=o[f+(n|2)|0]<<1;t=C-A|0;a=t>>31;a=w(j,a^a+t);t=o[f+(n|3)|0]<<1;v=C-t|0;f=v>>31;f=w(j,f^f+v)+r|0;r=(g|0)>(l|0)?l:g;c:{if((b|0)<=1){l=f;break c}t=0-t|0;A=0-A|0;while(1){g=a+e|0;v=m<<2;s=q[v+D>>2];z=s+A|0;l=z>>31;v=q[k+v>>2];z=w(v,l^l+z);l=e+f|0;a=z+((a|0)<(l|0)?a:l)|0;s=t+s|0;l=s>>31;l=w(l^l+s,v)+((f|0)>(g|0)?g:f)|0;f=l;m=m+1|0;if((m|0)!=(b|0)){continue}break}}m=1;g=(h<<3)+1152|0;f=(c|0)!=0&(r|0)>(((a|0)<(l|0)?a:l)|0);h=n|(f?2:0);n=o[g+h|0]<<1;l=C-n|0;a=l>>31;l=w(j,a^a+l);g=o[g+(h|1)|0]<<1;h=C-g|0;a=h>>31;a=w(j,a^a+h)+(c?0:e)|0;d:{if((b|0)>1){C=0-n|0;n=0-g|0;break d}q[(G<<2)+d>>2]=(a|0)<=(l|0);ca=K;return f}while(1){c=m<<2;g=a+e|0;q[c+H>>2]=(g|0)<=(l|0);h=e+l|0;q[c+I>>2]=(h|0)>=(a|0);r=q[c+D>>2];A=r+n|0;j=A>>31;s=j^j+A;j=q[c+k>>2];a=w(s,j)+((a|0)>(h|0)?h:a)|0;h=r+C|0;c=h>>31;l=w(j,c^c+h)+((g|0)>(l|0)?l:g)|0;m=m+1|0;if((m|0)!=(b|0)){continue}break}a=(a|0)<=(l|0);q[(G<<2)+d>>2]=a;if((b|0)>=2){l=b-2|0;while(1){b=l<<2;a=q[(b+((a|0)==1?I:H)|0)+4>>2];q[b+d>>2]=a;b=(l|0)>0;l=l-1|0;if(b){continue}break}}ca=K;return f}function $e(a,b,c){var d=0,e=0,f=x(0),g=x(0),h=x(0),i=0,j=0,k=0,l=x(0),m=x(0),n=0,o=0,p=x(0),r=0,s=0,t=x(0),v=x(0);e=q[a+8>>2];i=q[a+7452>>2]+((c|0)/((e|0)/400|0)|0)|0;q[a+7452>>2]=i;j=q[a+7448>>2];k=j;if((i|0)>=8){d=(i-((i|0)<15?i:15)|0)+7|0;k=(j+(d>>>3|0)|0)+1|0;q[a+7448>>2]=k;q[a+7452>>2]=(i-(d&-8)|0)-8}i=q[a+7444>>2];if((k|0)>=100){q[a+7448>>2]=k-100}r=6;d=j+1|0;c=(i|0)==(j|0)?j:((e|0)/50|0)>=(c|0)?j:(d|0)==100?0:d;c=c-((c|0)==(i|0))|0;c=(c|0)<0?99:c;k=(c<<6)+a|0;e=k+7660|0;d=q[e+4>>2];q[b+56>>2]=q[e>>2];q[b+60>>2]=d;e=k+7652|0;d=q[e+4>>2];q[b+48>>2]=q[e>>2];q[b+52>>2]=d;e=k+7644|0;d=q[e+4>>2];q[b+40>>2]=q[e>>2];q[b+44>>2]=d;e=k+7636|0;d=q[e+4>>2];q[b+32>>2]=q[e>>2];q[b+36>>2]=d;e=k+7628|0;d=q[e+4>>2];q[b+24>>2]=q[e>>2];q[b+28>>2]=d;e=k+7620|0;d=q[e+4>>2];q[b+16>>2]=q[e>>2];q[b+20>>2]=d;e=k+7612|0;d=q[e+4>>2];q[b+8>>2]=q[e>>2];q[b+12>>2]=d;d=k+7604|0;e=q[d+4>>2];d=q[d>>2];q[b>>2]=d;q[b+4>>2]=e;if(d){s=i-j|0;k=(s|0)<0;i=s+100|0;f=u[b+4>>2];g=x(1);o=c+1|0;j=(o|0)==100?0:o;n=q[a+7444>>2];a:{if((j|0)==(n|0)){h=f;break a}d=(j<<6)+a|0;g=u[d+7608>>2];e=q[b+32>>2];d=q[d+7636>>2];e=(d|0)<(e|0)?e:d;q[b+32>>2]=e;h=f>g?f:g;f=x(f+g);d=j+1|0;j=(d|0)==100?0:d;if((j|0)==(n|0)){r=5;g=x(2);break a}d=(j<<6)+a|0;g=u[d+7608>>2];d=q[d+7636>>2];e=(d|0)<(e|0)?e:d;q[b+32>>2]=e;h=g>2];d=q[d+7636>>2];q[b+32>>2]=(d|0)<(e|0)?e:d;h=g>2];i=q[((e<<6)+a|0)+7636>>2];q[b+32>>2]=(i|0)<(k|0)?k:i;d=d+1|0;if((r|0)!=(d|0)){continue}}break}f=x(f/g);h=x(h+x(-.20000000298023224));u[b+4>>2]=f>h?f:h;d=c;e=d;if((j|0)>=16){d=((c|0)>94?-95:5)+c|0;o=d+1|0;e=((c|0)>98?-99:1)+c|0}i=a+7604|0;t=u[(i+(e<<6)|0)+36>>2];f=x(B(t,x(.10000000149011612)));h=x(u[(i+(d<<6)|0)+20>>2]*f);d=(o|0)==100?0:o;b:{if((n|0)==(d|0)){g=x(1);break b}g=x(1);while(1){e=e+1|0;e=(e|0)==100?0:e;if((n|0)==(e|0)){break b}v=u[(i+(e<<6)|0)+36>>2];p=x(x(t-v)*x(10));l=x(x(h+p)/f);m=l>m?l:m;l=x(x(h-p)/f);g=g>l?l:g;l=x(B(v,x(.10000000149011612)));h=x(h+x(u[(i+(d<<6)|0)+20>>2]*l));f=x(f+l);d=d+1|0;d=(d|0)==100?0:d;if((n|0)!=(d|0)){continue}break}}f=x(h/f);u[b+20>>2]=f;h=f>m?f:m;m=hx(0)?h:x(0);if((j|0)<=9){h=f;g=m;d=q[a+7436>>2];if((d|0)>=2){d=(d|0)>15?15:d-1|0;d=(d|0)>1?d:1;e=0;while(1){c=(c|0)<1?99:c-1|0;l=u[((c<<6)+a|0)+7624>>2];g=g>l?g:l;h=h>2]=m;u[b+24>>2]=f}}function Kc(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,H=x(0),I=x(0),J=x(0),K=0,L=0,M=0;h=ca-992|0;ca=h;g=w(d,e);if((g|0)<385){y=ta(b,g);la(h+800|0,0,192);if((e|0)>=1){while(1){g=1;if((f|0)>=1){m=(w(d,i)<<2)+b|0;while(1){n=(g<<3)+h|0;L=n+792|0,M=Wa(m,m+(g<<2)|0,d-g|0)+v[n+792>>3],v[L>>3]=M;n=(f|0)!=(g|0);g=g+1|0;if(n){continue}break}}i=i+1|0;if((i|0)!=(e|0)){continue}break}}ka(h+608|0,h+800|0,192);D=y*9999999747378752e-21;r=y+D+9.999999717180685e-10;v[h+192>>3]=r;v[h+400>>3]=r;a:{b:{if((f|0)<1){k=1;break b}z=+c;i=0;B=2;A=1;E=1;q=1;c:{while(1){if((e|0)>=1){s=d-i|0;t=s-1|0;n=0;while(1){m=(w(d,n)<<2)+b|0;c=u[m+(t<<2)>>2];l=+c;H=u[m+(i<<2)>>2];k=+H;g=0;if(i){while(1){p=g<<3;o=p+(h+800|0)|0;I=u[m+((g^-1)+i<<2)>>2];v[o>>3]=v[o>>3]- +x(H*I);o=p+(h+608|0)|0;J=u[m+(g+s<<2)>>2];v[o>>3]=v[o>>3]- +x(c*J);j=v[h+p>>3];k=k+j*+I;l=l+j*+J;g=g+1|0;if((i|0)!=(g|0)){continue}break}}g=0;while(1){p=g<<3;o=p+(h+400|0)|0;v[o>>3]=v[o>>3]-k*+u[m+(i-g<<2)>>2];p=p+(h+192|0)|0;v[p>>3]=v[p>>3]-l*+u[m+(g+t<<2)>>2];g=g+1|0;if((A|0)!=(g|0)){continue}break}n=n+1|0;if((n|0)!=(e|0)){continue}break}}t=i<<3;k=v[t+(h+608|0)>>3];l=v[t+(h+800|0)>>3];g=0;if(i){while(1){j=v[(g<<3)+h>>3];m=(g^-1)+i<<3;k=k+j*v[m+(h+800|0)>>3];l=l+j*v[m+(h+608|0)>>3];g=g+1|0;if((i|0)!=(g|0)){continue}break}}m=i+1|0;g=m<<3;v[g+(h+400|0)>>3]=l;p=g+(h+192|0)|0;v[p>>3]=k;g=0;l=v[h+192>>3];r=v[h+400>>3];j=r;if(i){while(1){C=v[(g<<3)+h>>3];n=g+1|0;s=n<<3;j=j+C*v[s+(h+400|0)>>3];l=l+C*v[s+(h+192|0)>>3];k=k+C*v[(h+192|0)+(i-g<<3)>>3];g=n;if((i|0)!=(g|0)){continue}break}}l=k*-2/(j+l);j=q*(1-l*l);n=z>=j;if(!(n^1)){j=F(1-z/q);l=k>0?-j:j;j=z}if(m&2147483646){s=A>>>1|0;g=0;while(1){o=(g<<3)+h|0;q=v[o>>3];K=o;o=((g^-1)+i<<3)+h|0;k=v[o>>3];v[K>>3]=q+l*k;v[o>>3]=k+l*q;g=g+1|0;if((s|0)!=(g|0)){continue}break}}v[h+t>>3]=l;d:{if(!n){q=v[p>>3];v[p>>3]=q+l*r;v[h+400>>3]=r+l*q;g=1;while(1){i=(h+192|0)+(m-g<<3)|0;q=v[i>>3];n=i;i=(h+400|0)+(g<<3)|0;k=v[i>>3];v[n>>3]=q+l*k;v[i>>3]=k+l*q;g=g+1|0;if((B|0)!=(g|0)){continue}break}break d}if((f|0)>(m|0)){la((m<<3)+h|0,0,f-m<<3)}if(!E){break c}g=0;while(1){u[(g<<2)+a>>2]=-x(v[(g<<3)+h>>3]);g=g+1|0;if((g|0)!=(f|0)){continue}break}g=0;if((e|0)>0){while(1){y=y-ta((w(d,g)<<2)+b|0,f);g=g+1|0;if((g|0)!=(e|0)){continue}break}}j=j*y;break a}B=B+1|0;A=A+1|0;E=(f|0)>(m|0);q=j;i=m;if((i|0)!=(f|0)){continue}break}r=v[h+400>>3]}k=1;if((f|0)<1){break b}g=0;while(1){b=g+1|0;z=v[(h+400|0)+(b<<3)>>3];j=v[(g<<3)+h>>3];u[(g<<2)+a>>2]=-x(j);r=r+j*z;k=k+j*j;g=b;if((g|0)!=(f|0)){continue}break}}j=r-D*k}ca=h+992|0;return x(j)}ja(38137,38197,55);G()}function Ga(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,s=0,t=0,u=0,v=0,x=0;g=ca-320|0;ca=g;a:{switch(c-10|0){default:ja(1674,1707,89);G();case 0:case 6:break a}}i=(c|0)==16?1648:1664;while(1){h=p[(f<<1)+b>>1];d=(h>>8<<1)+1376|0;e=p[d>>1];q[(g+224|0)+(r[f+i|0]<<2)>>2]=(w(p[d+2>>1]-e|0,h&255)+(e<<8)>>3)+1>>1;f=f+1|0;if((f|0)!=(c|0)){continue}break}h=65536;q[g+160>>2]=65536;e=0-q[g+224>>2]|0;q[g+164>>2]=e;f=1;k=c>>1;b:{v=(c|0)<4;if(v){break b}b=e;while(1){s=q[(g+224|0)+(f<<3)>>2];i=s;l=i;m=i>>31;i=yg(i,m,b,b>>31);j=da;d=j>>>15|0;j=((j&32767)<<17|i>>>15)+1|0;if(j>>>0<1){d=d+1|0}i=f+1|0;t=(g+160|0)+(i<<2)|0;q[t>>2]=(h<<1)-((d&1)<<31|j>>>1);d=f<<2;j=d+(g+160|0)|0;x=g;if(f>>>0>=2){n=j;e=q[(d+g|0)+152>>2];o=e+b|0;b=yg(h,h>>31,l,m);h=da;d=h>>>15|0;b=((h&32767)<<17|b>>>15)+1|0;if(b>>>0<1){d=d+1|0}q[n>>2]=o-((d&1)<<31|b>>>1);if((f|0)!=2){while(1){b=f-1|0;d=(g+160|0)+(b<<2)|0;n=d;h=q[((f<<2)+g|0)+148>>2];o=h+q[d>>2]|0;e=yg(e,e>>31,l,m);u=da;d=u>>>15|0;e=((u&32767)<<17|e>>>15)+1|0;if(e>>>0<1){d=d+1|0}q[n>>2]=o-((d&1)<<31|e>>>1);d=(f|0)>3;f=b;e=h;if(d){continue}break}}e=q[g+164>>2]}e=e-s|0;q[x+164>>2]=e;if((i|0)==(k|0)){break b}b=q[t>>2];h=q[j>>2];f=i;continue}}h=65536;q[g+96>>2]=65536;e=0-q[g+228>>2]|0;q[g+100>>2]=e;c:{if(v){break c}v=g+224|4;f=1;b=e;while(1){s=q[v+(f<<3)>>2];i=s;l=i;m=i>>31;i=yg(i,m,b,b>>31);j=da;d=j>>>15|0;j=((j&32767)<<17|i>>>15)+1|0;if(j>>>0<1){d=d+1|0}i=f+1|0;t=(g+96|0)+(i<<2)|0;q[t>>2]=(h<<1)-((d&1)<<31|j>>>1);d=f<<2;j=d+(g+96|0)|0;x=g;if(f>>>0>=2){n=j;e=q[(d+g|0)+88>>2];o=e+b|0;b=yg(h,h>>31,l,m);h=da;d=h>>>15|0;b=((h&32767)<<17|b>>>15)+1|0;if(b>>>0<1){d=d+1|0}q[n>>2]=o-((d&1)<<31|b>>>1);if((f|0)!=2){while(1){b=f-1|0;d=(g+96|0)+(b<<2)|0;n=d;h=q[((f<<2)+g|0)+84>>2];o=h+q[d>>2]|0;e=yg(e,e>>31,l,m);u=da;d=u>>>15|0;e=((u&32767)<<17|e>>>15)+1|0;if(e>>>0<1){d=d+1|0}q[n>>2]=o-((d&1)<<31|e>>>1);d=(f|0)>3;f=b;e=h;if(d){continue}break}}e=q[g+100>>2]}e=e-s|0;q[x+100>>2]=e;if((i|0)==(k|0)){break c}b=q[t>>2];h=q[j>>2];f=i;continue}}if((c|0)>=2){d=(k|0)>1?k:1;h=q[g+96>>2];b=q[g+160>>2];f=0;while(1){e=f+1|0;k=e<<2;i=q[k+(g+96|0)>>2];h=i-h|0;l=b;b=q[k+(g+160|0)>>2];k=l+b|0;q[(f<<2)+g>>2]=0-(h+k|0);q[((f^-1)+c<<2)+g>>2]=h-k;h=i;f=e;if((d|0)!=(f|0)){continue}break}}Cd(a,g,c);d:{if(qb(a,c)){break d}e=0;while(1){sb(g,c,(-2<>1]=(q[(f<<2)+g>>2]>>>4|0)+1>>>1;f=f+1|0;if((f|0)!=(c|0)){continue}break}b=qb(a,c);if(e>>>0>14){break d}e=e+1|0;if(!b){continue}break}}ca=g+320|0}function Lc(a,b,c,d,e,f){var g=0,h=x(0),i=0,j=0,k=0,l=0,m=0,n=0,s=0,t=0;i=ca-1008|0;ca=i;a:{b:{n=q[a+4580>>2];if((n|0)<1){break b}k=q[a+4636>>2];m=(k|0)<1;while(1){if(!m){s=w(j,24);g=0;while(1){l=g+s|0;t=(i+48|0)+(l<<1)|0;h=zg(x(u[((l<<2)+b|0)+244>>2]*x(8192)));c:{if(x(y(h))>1]=l;g=g+1|0;if((k|0)!=(g|0)){continue}break}}j=j+1|0;if((n|0)!=(j|0)){continue}break}j=0;if((n|0)<=0){break b}while(1){g=j<<2;k=g+b|0;h=zg(x(u[k+644>>2]*x(16384)));d:{if(x(y(h))>2]*x(16384)));e:{if(x(y(h))>2]=m&65535|l<<16;m=g+(i+16|0)|0;h=zg(x(u[k+660>>2]*x(16384)));f:{if(x(y(h))>2]=l;g=g+i|0;h=zg(x(u[k+676>>2]*x(16384)));g:{if(x(y(h))>2]=l;j=j+1|0;if((n|0)!=(j|0)){continue}break}h=zg(x(u[b+692>>2]*x(1024)));h:{if(x(y(h))1?g:1;g=0;while(1){m=(i+240|0)+(g<<1)|0;h=zg(x(u[((g<<2)+b|0)+144>>2]*x(16384)));i:{if(x(y(h))>1]=j;g=g+1|0;if((k|0)!=(g|0)){continue}break}break a}h=zg(x(u[b+692>>2]*x(1024)));j:{if(x(y(h))>2];k:{if((j|0)<=0){break k}while(1){m=(i+288|0)+(g<<1)|0;h=zg(x(u[((g<<2)+b|0)+16>>2]*x(4096)));l:{if(x(y(h))>1]=k;g=g+1|0;if((j|0)!=(g|0)){continue}break}g=0;if((j|0)<=0){break k}while(1){m=(g<<1)+i|0;h=zg(x(u[((g<<2)+b|0)+80>>2]*x(4096)));m:{if(x(y(h))>1]=k;g=g+1|0;if((j|0)!=(g|0)){continue}break}}g=0;if((n|0)>0){while(1){j=g<<2;k=j+(i+352|0)|0;h=zg(x(u[b+j>>2]*x(65536)));n:{if(x(y(h))>2]=j;g=g+1|0;if((n|0)!=(g|0)){continue}break}}g=0;j=0;j=r[c+29|0]==2?p[(o[c+33|0]<<1)+6424>>1]:j;k=q[a+4584>>2];if((k|0)>=1){while(1){m=(i+368|0)+(g<<1)|0;h=zg(u[(g<<2)+f>>2]);o:{if(x(y(h))>1]=n;g=g+1|0;if((k|0)!=(g|0)){continue}break}}p:{if(!(q[a+4672>>2]<1?q[a+4628>>2]<=1:0)){Df(a,d,c,i+368|0,e,i+288|0,i+240|0,i+48|0,i,i+16|0,i+32|0,i+352|0,b+228|0,l,j);break p}Bf(a,d,c,i+368|0,e,i+288|0,i+240|0,i+48|0,i,i+16|0,i+32|0,i+352|0,b+228|0,l,j)}ca=i+1008|0}function qb(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,s=0,t=0,u=0;i=ca-96|0;a:{b:{if((b|0)>0){while(1){j=p[(d<<1)+a>>1];q[(d<<2)+i>>2]=j<<12;f=f+j|0;d=d+1|0;if((d|0)!=(b|0)){continue}break}if((f|0)>4095){return 0}d=b-1|0;a=1073741824;if((b|0)<2){f=d;break b}while(1){j=d;f=q[(d<<2)+i>>2];if(f+16773022>>>0>33546044){return 0}d=a;c=h;a=0-(f<<7)|0;h=a>>31;l=a;yg(a,h,a,h);a=1073741824-da|0;f=yg(d,c,a,a>>31);s=((da&1073741823)<<2|f>>>30)&-4;d=0;if((s|0)<107374){break a}f=0;d=a;a=a>>31;m=z(d+a^a);d=d<>16;g=536870911/(c|0)|0;e=g<<16;a=e>>16;d=0-(w(a,c)+(w(a,d&65535)>>16)<<3)|0;a=((e+w(d,(g>>15)+1>>1)|0)+w(a,d>>16)|0)+(w(a,d&65528)>>16)|0;n=a;o=a>>31;a=b>>>1|0;u=a>>>0>1?a:1;d=31-m|0;while(1){r=(f<<2)+i|0;c=q[r>>2];k=c;t=(j+(f^-1)<<2)+i|0;g=q[t>>2];a=g;e=yg(a,a>>31,l,h);b=da;a=b>>>30|0;b=((b&1073741823)<<2|e>>>30)+1|0;if(b>>>0<1){a=a+1|0}b=(a&1)<<31|b>>>1;e=k-b|0;a=(e|0)>-1;a=(((a?b:c)^-1)&(a?c:b))>-1?e:a?-2147483648:2147483647;e=yg(a,a>>31,n,o);a=da;c:{d:{e:{if((m|0)==31){b=a;a=a>>1;k=(b&1)<<31|e>>>1;e=k+(e&1)|0;b=e>>>0>>0?a+1|0:a;a=b;if(!(e- -2147483648>>>0<2147483648?a+1|0:a)){break e}return 0}b=a;k=e;a=d;e=a&31;if((a&63)>>>0>=32){a=b>>31;b=b>>e}else{a=b>>e;b=((1<>>e}b=b+1|0;if(b>>>0<1){a=a+1|0}e=(a&1)<<31|b>>>1;a=a>>1;if(!(e- -2147483648>>>0<2147483648?a+1|0:a)){break d}return 0}q[r>>2]=e;c=yg(c,c>>31,l,h);b=da;a=b>>>30|0;b=((b&1073741823)<<2|c>>>30)+1|0;if(b>>>0<1){a=a+1|0}b=(a&1)<<31|b>>>1;c=g-b|0;a=(c|0)>-1;a=(((a?b:g)^-1)&(a?g:b))>-1?c:a?-2147483648:2147483647;a=yg(a,a>>31,n,o);e=a&1;c=a;b=da;a=b>>1;c=(b&1)<<31|c>>>1;b=e+c|0;a=b>>>0>>0?a+1|0:a;break c}q[r>>2]=e;c=yg(c,c>>31,l,h);b=da;a=b>>>30|0;b=((b&1073741823)<<2|c>>>30)+1|0;if(b>>>0<1){a=a+1|0}b=(a&1)<<31|b>>>1;c=g-b|0;a=(c|0)>-1;a=(((a?b:g)^-1)&(a?g:b))>-1?c:a?-2147483648:2147483647;a=yg(a,a>>31,n,o);c=da;g=a;a=d;b=a&31;if((a&63)>>>0>=32){a=c>>31;b=c>>b}else{a=c>>b;b=((1<>>b}c=b+1|0;b=c>>>0<1?a+1|0:a;a=b>>1;b=(b&1)<<31|c>>>1}if(b- -2147483648>>>0<2147483648){a=a+1|0}if(a){return 0}q[t>>2]=b;f=f+1|0;if((u|0)!=(f|0)){continue}break}d=j-1|0;a=s;h=a>>31;f=0;b=j;if((b|0)>1){continue}break}break b}f=b-1|0;a=1073741824}d=0;if(q[(f<<2)+i>>2]+16773022>>>0>33546044){break a}d=a;b=0-(q[i>>2]<<7)|0;a=b>>31;yg(b,a,b,a);b=1073741824-(da&2147483647)|0;a=yg(d,h,b,b>>31);a=((da&1073741823)<<2|a>>>30)&-4;d=(a|0)<107374?0:a}return d}function pe(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;g=ca-48|0;ca=g;Hg(+a);d=Eg(1)|0;f=Eg(0)|0;a:{b:{e=d;d=e;h=e&2147483647;c:{if(h>>>0<=1074752122){if((d&1048575)==598523){break c}if(h>>>0<=1073928572){if((e|0)>0?1:(e|0)>=0){a=a+ -1.5707963267341256;c=a+ -6.077100506506192e-11;v[b>>3]=c;v[b+8>>3]=a-c+ -6.077100506506192e-11;d=1;break a}a=a+1.5707963267341256;c=a+6.077100506506192e-11;v[b>>3]=c;v[b+8>>3]=a-c+6.077100506506192e-11;d=-1;break a}if((e|0)>0?1:(e|0)>=0){a=a+ -3.1415926534682512;c=a+ -1.2154201013012384e-10;v[b>>3]=c;v[b+8>>3]=a-c+ -1.2154201013012384e-10;d=2;break a}a=a+3.1415926534682512;c=a+1.2154201013012384e-10;v[b>>3]=c;v[b+8>>3]=a-c+1.2154201013012384e-10;d=-2;break a}if(h>>>0<=1075594811){if(h>>>0<=1075183036){if((h|0)==1074977148){break c}if((e|0)>0?1:(e|0)>=0){a=a+ -4.712388980202377;c=a+ -1.8231301519518578e-10;v[b>>3]=c;v[b+8>>3]=a-c+ -1.8231301519518578e-10;d=3;break a}a=a+4.712388980202377;c=a+1.8231301519518578e-10;v[b>>3]=c;v[b+8>>3]=a-c+1.8231301519518578e-10;d=-3;break a}if((h|0)==1075388923){break c}if((e|0)>0?1:(e|0)>=0){a=a+ -6.2831853069365025;c=a+ -2.430840202602477e-10;v[b>>3]=c;v[b+8>>3]=a-c+ -2.430840202602477e-10;d=4;break a}a=a+6.2831853069365025;c=a+2.430840202602477e-10;v[b>>3]=c;v[b+8>>3]=a-c+2.430840202602477e-10;d=-4;break a}if(h>>>0>1094263290){break b}}j=a*.6366197723675814+6755399441055744+ -6755399441055744;c=a+j*-1.5707963267341256;i=j*6.077100506506192e-11;a=c-i;v[b>>3]=a;Hg(+a);d=Eg(1)|0;Eg(0)|0;e=h>>>20|0;f=(e-(d>>>20&2047)|0)<17;if(y(j)<2147483648){d=~~j}else{d=-2147483648}d:{if(f){break d}i=c;a=j*6.077100506303966e-11;c=c-a;i=j*2.0222662487959506e-21-(i-c-a);a=c-i;v[b>>3]=a;f=e;Hg(+a);e=Eg(1)|0;Eg(0)|0;if((f-(e>>>20&2047)|0)<50){break d}i=c;a=j*2.0222662487111665e-21;c=c-a;i=j*8.4784276603689e-32-(i-c-a);a=c-i;v[b>>3]=a}v[b+8>>3]=c-a-i;break a}if(h>>>0>=2146435072){a=a-a;v[b>>3]=a;v[b+8>>3]=a;d=0;break a}Fg(0,f|0);Fg(1,e&1048575|1096810496);a=+Gg();d=0;f=1;while(1){k=(g+16|0)+(d<<3)|0;if(y(a)<2147483648){d=~~a}else{d=-2147483648}c=+(d|0);v[k>>3]=c;a=(a-c)*16777216;d=1;k=f&1;f=0;if(k){continue}break}v[g+32>>3]=a;e:{if(a!=0){d=2;break e}f=1;while(1){d=f;f=d-1|0;if(v[(g+16|0)+(d<<3)>>3]==0){continue}break}}d=qe(g+16|0,g,(h>>>20|0)-1046|0,d+1|0);a=v[g>>3];if((e|0)<-1?1:(e|0)<=-1){v[b>>3]=-a;v[b+8>>3]=-v[g+8>>3];d=0-d|0;break a}v[b>>3]=a;v[b+8>>3]=v[g+8>>3]}ca=g+48|0;return d}function yd(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,r){var s=0,t=0,v=x(0),B=0,C=0,D=0,E=0,F=0,G=x(0),H=0,I=x(0),J=0,K=0,L=0;t=ca-96|0;s=t;ca=s;F=1;a:{if(m){break a}F=0;if(o){break a}m=w(c-b|0,j);if(u[n>>2]>x(m<<1)^1){break a}F=(l|0)>(m|0)}G=x(x(x(u[n>>2]*x(g>>>0))*x(p|0))/x(j<<9));D=(j|0)>1?j:1;C=q[a+8>>2];p=0;while(1){if((b|0)<(d|0)){H=w(p,C);m=b;while(1){I=v;B=m+H<<2;v=x(u[B+e>>2]-u[f+B>>2]);v=x(I+x(v*v));m=m+1|0;if((m|0)!=(d|0)){continue}break}}p=p+1|0;if((D|0)!=(p|0)){continue}break}d=q[i+20>>2];D=q[i+28>>2];m=q[i+20>>2];q[s+88>>2]=q[i+16>>2];q[s+92>>2]=m;m=q[i+12>>2];q[s+80>>2]=q[i+8>>2];q[s+84>>2]=m;m=q[i+4>>2];q[s+72>>2]=q[i>>2];q[s+76>>2]=m;m=q[i+24>>2];p=q[i+40>>2];q[s+56>>2]=q[i+36>>2];q[s+60>>2]=p;q[s- -64>>2]=q[i+44>>2];p=q[i+32>>2];q[s+48>>2]=q[i+28>>2];q[s+52>>2]=p;C=t-((w(j,C)<<2)+15&-16)|0;p=C;ca=p;t=w(q[a+8>>2],j)<<2;p=p-(t+15&-16)|0;B=p;ca=p;C=ka(C,f,t);I=(c-b|0)>10?x(A(x(x(l|0)*x(.125)),x(16))):x(16);l=0;t=o;o=d+z(D)|0;d=o-29>>>0>g>>>0;K=d?0:t;t=d?0:F;D=K|t;if(x(y(G))>2];q[s+40>>2]=q[i+20>>2];o=q[i+16>>2];q[s+32>>2]=q[i+12>>2];q[s+36>>2]=o;o=q[i+8>>2];q[s+24>>2]=q[i+4>>2];q[s+28>>2]=o;D=q[i+24>>2];H=i+28|0;o=H+8|0;J=q[o+4>>2];q[s+8>>2]=q[o>>2];q[s+12>>2]=J;q[s+16>>2]=q[i+44>>2];o=q[i+32>>2];q[s>>2]=q[i+28>>2];q[s+4>>2]=o;o=D-m|0;B=B-((o?o:1)+15&-16)|0;ca=B;E=B;B=m+t|0;J=ka(E,B,o);E=q[s+92>>2];q[i+16>>2]=q[s+88>>2];q[i+20>>2]=E;E=q[s+84>>2];q[i+8>>2]=q[s+80>>2];q[i+12>>2]=E;E=q[s+76>>2];q[i>>2]=q[s+72>>2];q[i+4>>2]=E;q[i+24>>2]=m;q[i+44>>2]=q[s- -64>>2];m=q[s+60>>2];q[H+8>>2]=q[s+56>>2];q[H+12>>2]=m;m=q[s+52>>2];q[i+28>>2]=q[s+48>>2];q[i+32>>2]=m;b=Qb(a,b,c,e,f,g,F,w(k,84)+24880|0,h,i,j,k,0,G,r);if(!K){break c}if((b|0)<=(l|0)){if((b|0)!=(l|0)){break c}if((L|0)>=(wa(i)+d|0)){break c}}q[i>>2]=t;q[i+20>>2]=q[s+40>>2];b=q[s+36>>2];q[i+12>>2]=q[s+32>>2];q[i+16>>2]=b;b=q[s+28>>2];q[i+4>>2]=q[s+24>>2];q[i+8>>2]=b;q[i+24>>2]=D;q[i+44>>2]=q[s+16>>2];b=q[s+12>>2];q[i+36>>2]=q[s+8>>2];q[i+40>>2]=b;b=q[s+4>>2];q[i+28>>2]=q[s>>2];q[i+32>>2]=b;ka(B,J,o);b=j<<2;ka(f,C,w(b,q[a+8>>2]));ka(h,p,w(b,q[a+8>>2]));break b}b=j<<2;ka(f,C,w(b,q[a+8>>2]));ka(h,p,w(b,q[a+8>>2]));break b}I=v;v=u[(k<<2)+25216>>2];v=x(I+x(x(v*v)*u[n>>2]))}u[n>>2]=v;ca=s+96|0}function Kb(a,b,c,d,e,f,g,h,i,j,k){var l=x(0),m=0,n=0,o=0,p=x(0),r=0,s=0,t=x(0),v=0,w=x(0),y=0,z=x(0),A=0;n=ca-32|0;ca=n;q[n+24>>2]=k;q[n+28>>2]=e;e=q[a+28>>2];v=q[a>>2];a:{if((d|0)==1){d=0;k=q[a+32>>2];if((k|0)>=8){b:{if(v){d=u[b>>2]>2]-8|0;q[a+32>>2]=k}h=q[a+4>>2];if(h){u[b>>2]=d?x(-1):x(1)}if(c){g=c?2:1;f=1;while(1){d=0;if((k|0)>=8){c:{if(v){d=u[c>>2]>2]-8|0;q[a+32>>2]=k;h=q[a+4>>2]}if(h){u[c>>2]=d?x(-1):x(1)}f=f+1|0;if((g|0)!=(f|0)){continue}break}}h=1;if(!i){break a}u[i>>2]=u[b>>2];break a}hd(a,n,b,c,d,n+28|0,f,f,h,1,n+24|0);l=x(x(q[n+8>>2])*x(30517578125e-15));w=x(x(q[n+4>>2])*x(30517578125e-15));m=q[n+20>>2];o=q[n+16>>2];A=q[n>>2];d:{if((d|0)==2){r=q[n+28>>2];y=o&-16385;s=((y|0)!=0)<<3;q[a+32>>2]=q[a+32>>2]-(s+m|0);o=(o|0)>8192;m=o?b:c;o=o?c:b;s=r-s|0;r=0;e:{if(!y){break e}if(v){r=x(x(u[o>>2]*u[m+4>>2])-x(u[o+4>>2]*u[m>>2]))>2]=u[o+4>>2]*x(0-e|0);u[m+4>>2]=u[o>>2]*x(e|0);if(!q[a+4>>2]){break d}u[b>>2]=w*u[b>>2];u[b+4>>2]=w*u[b+4>>2];p=x(l*u[c>>2]);u[c>>2]=p;u[c+4>>2]=l*u[c+4>>2];l=u[b>>2];u[b>>2]=l-p;u[c>>2]=l+u[c>>2];l=u[b+4>>2];u[b+4>>2]=l-u[c+4>>2];u[c+4>>2]=l+u[c+4>>2];break d}e=q[n+28>>2];r=q[n+12>>2];v=q[a+32>>2]-m|0;q[a+32>>2]=v;k=q[n+24>>2];s=e;m=(e-r|0)/2|0;e=(e|0)<(m|0)?e:m;e=(e|0)>0?e:0;m=s-e|0;if((e|0)>=(m|0)){g=Ba(a,b,d,e,f,g,h,i,x(1),j,k);e=e+(q[a+32>>2]-v|0)|0;h=g|Ba(a,c,d,(o?(e|0)>24?e-24|0:0:0)+m|0,f,0,h,0,l,0,k>>f);break d}s=Ba(a,c,d,m,f,0,h,0,l,0,k>>f);m=m+(q[a+32>>2]-v|0)|0;h=s|Ba(a,b,d,e+((o|0)!=16384?(m|0)>24?m-24|0:0:0)|0,f,g,h,i,x(1),j,k)}if(!q[a+4>>2]){break a}f:{if((d|0)==2){break f}p=x(0);g:{if((d|0)<1){l=x(0);break g}a=0;l=x(0);while(1){e=a<<2;t=u[e+c>>2];l=x(l+x(t*u[b+e>>2]));p=x(p+x(t*t));a=a+1|0;if((d|0)!=(a|0)){continue}break}}h:{p=x(x(w*w)+p);l=x(w*l);l=x(l+l);t=x(p+l);if(!(t>2]);e=c+e|0;z=u[e>>2];u[f>>2]=t*x(l-z);u[e>>2]=p*x(l+z);a=a+1|0;if((d|0)!=(a|0)){continue}break}}if(!A|(d|0)<1){break a}a=0;while(1){b=(a<<2)+c|0;u[b>>2]=-u[b>>2];a=a+1|0;if((d|0)!=(a|0)){continue}break}}ca=n+32|0;return h}function Za(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0,n=0,o=0,s=0,t=0,v=0,y=x(0),z=x(0),A=0;l=ca-32|0;ca=l;q[l+24>>2]=i;q[l+28>>2]=d;j=q[a+8>>2];m=q[j+100>>2]+p[q[j+96>>2]+(q[a+12>>2]+w(q[j+8>>2],g+1|0)<<1)>>1]|0;k=r[m|0];n=-1;o=q[a+28>>2];s=q[a+20>>2];v=q[a>>2];a:{if(!((g|0)==-1|(c|0)<3|(r[k+m|0]+12|0)>=(d|0))){n=c>>>1|0;j=(n<<2)+b|0;if((e|0)==1){q[l+24>>2]=i&1|i<<1}o=e+1>>1;s=g-1|0;hd(a,l,b,j,n,l+28|0,o,e,s,0,l+24|0);y=x(q[l+8>>2]);z=x(q[l+4>>2]);d=q[l+20>>2];i=q[l+12>>2];v=q[l+16>>2];c=i;b:{if(!(v&16383)|(e|0)<2){break b}c=i-(i>>5-g)|0;if((v|0)>=8193){break b}c=(n<<3>>6-g)+i|0;c=c>>31&c}i=c;y=x(y*x(30517578125e-15));z=x(z*x(30517578125e-15));k=q[l+28>>2];g=q[a+32>>2]-d|0;q[a+32>>2]=g;d=f?(n<<2)+f|0:0;m=k;c=(k-i|0)/2|0;c=(c|0)>(k|0)?k:c;k=(c|0)>0?c:0;i=m-k|0;if((i|0)<=(k|0)){c=b;b=q[l+24>>2];f=Za(a,c,n,k,o,f,s,x(z*h),b);c=a;a=k+(q[a+32>>2]-g|0)|0;j=f|Za(c,j,n,i+(v?(a|0)>24?a-24|0:0:0)|0,o,d,s,x(y*h),b>>o)<<(e>>1);break a}c=d;d=q[l+24>>2];c=Za(a,j,n,i,o,c,s,x(y*h),d>>o);j=a;a=i+(q[a+32>>2]-g|0)|0;j=Za(j,b,n,k+((v|0)!=16384?(a|0)>24?a-24|0:0:0)|0,o,f,s,x(z*h),d)|c<<(e>>1);break a}t=d-1|0;j=k+1>>>1|0;d=(t|0)>r[j+m|0];g=d?k:j;d=d?j:0;k=(g+d|0)+1>>>1|0;j=(t|0)>r[k+m|0];g=j?g:k;d=j?k:d;k=(g+d|0)+1>>>1|0;j=(t|0)>r[k+m|0];g=j?g:k;d=j?k:d;k=(g+d|0)+1>>>1|0;j=(t|0)>r[k+m|0];g=j?g:k;d=j?k:d;k=(g+d|0)+1>>1;j=(t|0)>r[k+m|0];g=j?g:k;d=j?k:d;k=(g+d|0)+1>>1;j=(t|0)>r[k+m|0];g=j?g:k;d=j?k:d;if(d){n=r[d+m|0]}d=(t-n|0)>(r[g+m|0]-t|0)?g:d;if(d){A=r[d+m|0]+1|0}j=q[a+32>>2]-A|0;q[a+32>>2]=j;c:{d:{if((j|0)>-1){g=d;break d}if((d|0)<1){g=d;break d}while(1){j=j+A|0;q[a+32>>2]=j;g=d-1|0;if(!g){q[a+32>>2]=j;break c}A=r[g+m|0]+1|0;j=j-A|0;q[a+32>>2]=j;if((j|0)>-1){break d}k=(d|0)>1;d=g;if(k){continue}break}}if(!g){break c}g=(g|0)>=8?(g&7|8)<<(g>>>3|0)-1:g;if(v){j=qd(b,c,g,s,e,o,h,q[a+4>>2]);break a}j=pd(b,c,g,s,e,o,h);break a}if(!q[a+4>>2]){j=0;break a}j=-1<>2]=e;if(!e){j=0;la(b,0,c<<2);break a}e:{if(f){if((c|0)>=1){d=q[a+40>>2];g=0;while(1){i=g<<2;d=w(d,1664525)+1013904223|0;u[i+b>>2]=u[f+i>>2]+(d&32768?x(.00390625):x(-.00390625));g=g+1|0;if((g|0)!=(c|0)){continue}break}q[a+40>>2]=d}j=e;break e}if((c|0)<1){break e}d=q[a+40>>2];g=0;while(1){d=w(d,1664525)+1013904223|0;u[(g<<2)+b>>2]=d>>20;g=g+1|0;if((g|0)!=(c|0)){continue}break}q[a+40>>2]=d}nb(b,c,h)}ca=l+32|0;return j}function eb(a,b,c,d,e){var f=0,g=0,h=0;a:{if((d|0)>=(e|0)){b:{c:{switch(e-6|0){case 0:if((d|0)<7){break b}g=6;while(1){h=g<<2;f=h+c|0;u[a+h>>2]=u[f>>2]-x(x(x(x(x(x(u[f-4>>2]*u[b>>2])+x(u[f-8>>2]*u[b+4>>2]))+x(u[f-12>>2]*u[b+8>>2]))+x(u[f-16>>2]*u[b+12>>2]))+x(u[f-20>>2]*u[b+16>>2]))+x(u[f-24>>2]*u[b+20>>2]));g=g+1|0;if((g|0)!=(d|0)){continue}break}break b;case 2:if((d|0)<9){break b}g=8;while(1){h=g<<2;f=h+c|0;u[a+h>>2]=u[f>>2]-x(x(x(x(x(x(x(x(u[f-4>>2]*u[b>>2])+x(u[f-8>>2]*u[b+4>>2]))+x(u[f-12>>2]*u[b+8>>2]))+x(u[f-16>>2]*u[b+12>>2]))+x(u[f-20>>2]*u[b+16>>2]))+x(u[f-24>>2]*u[b+20>>2]))+x(u[f-28>>2]*u[b+24>>2]))+x(u[f-32>>2]*u[b+28>>2]));g=g+1|0;if((g|0)!=(d|0)){continue}break}break b;case 4:if((d|0)<11){break b}g=10;while(1){h=g<<2;f=h+c|0;u[a+h>>2]=u[f>>2]-x(x(x(x(x(x(x(x(x(x(u[f-4>>2]*u[b>>2])+x(u[f-8>>2]*u[b+4>>2]))+x(u[f-12>>2]*u[b+8>>2]))+x(u[f-16>>2]*u[b+12>>2]))+x(u[f-20>>2]*u[b+16>>2]))+x(u[f-24>>2]*u[b+20>>2]))+x(u[f-28>>2]*u[b+24>>2]))+x(u[f-32>>2]*u[b+28>>2]))+x(u[f-36>>2]*u[b+32>>2]))+x(u[f-40>>2]*u[b+36>>2]));g=g+1|0;if((g|0)!=(d|0)){continue}break}break b;case 6:if((d|0)<13){break b}g=12;while(1){h=g<<2;f=h+c|0;u[a+h>>2]=u[f>>2]-x(x(x(x(x(x(x(x(x(x(x(x(u[f-4>>2]*u[b>>2])+x(u[f-8>>2]*u[b+4>>2]))+x(u[f-12>>2]*u[b+8>>2]))+x(u[f-16>>2]*u[b+12>>2]))+x(u[f-20>>2]*u[b+16>>2]))+x(u[f-24>>2]*u[b+20>>2]))+x(u[f-28>>2]*u[b+24>>2]))+x(u[f-32>>2]*u[b+28>>2]))+x(u[f-36>>2]*u[b+32>>2]))+x(u[f-40>>2]*u[b+36>>2]))+x(u[f-44>>2]*u[b+40>>2]))+x(u[f-48>>2]*u[b+44>>2]));g=g+1|0;if((g|0)!=(d|0)){continue}break}break b;case 10:break c;default:break a}}if((d|0)<17){break b}g=16;while(1){h=g<<2;f=h+c|0;u[a+h>>2]=u[f>>2]-x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(x(u[f-4>>2]*u[b>>2])+x(u[f-8>>2]*u[b+4>>2]))+x(u[f-12>>2]*u[b+8>>2]))+x(u[f-16>>2]*u[b+12>>2]))+x(u[f-20>>2]*u[b+16>>2]))+x(u[f-24>>2]*u[b+20>>2]))+x(u[f-28>>2]*u[b+24>>2]))+x(u[f-32>>2]*u[b+28>>2]))+x(u[f-36>>2]*u[b+32>>2]))+x(u[f-40>>2]*u[b+36>>2]))+x(u[f-44>>2]*u[b+40>>2]))+x(u[f-48>>2]*u[b+44>>2]))+x(u[f-52>>2]*u[b+48>>2]))+x(u[f-56>>2]*u[b+52>>2]))+x(u[f-60>>2]*u[b+56>>2]))+x(u[f+ -64>>2]*u[b+60>>2]));g=g+1|0;if((g|0)!=(d|0)){continue}break}}la(a,0,e<<2);return}ja(36422,36456,218);G()}ja(36493,36456,242);G()}function Vc(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,r=0,s=0;j=ca-16|0;ca=j;Ka(j+4|0,j+12|0,b,e);Ka(j,j+8|0,c,e);g=q[j+12>>2];k=q[j+8>>2];i=(g|0)>(k|0)?g:k;i=(i&1)+i|0;q[j>>2]=q[j>>2]>>i-k;g=q[j+4>>2]>>i-g;q[j+4>>2]=(g|0)>1?g:1;k=Zf(b,c,i,e);c=k>>31;b=q[j+4>>2];e=b>>31;m=z(c^c+k);g=k<>16)<<16>>16;g=(w(c,g&65535)>>16)+w(c,g>>16)|0;e=yg(g,g>>31,e,e>>31);e=h-(((da&536870911)<<3|e>>>29)&-8)|0;e=(w(e>>16,c)+g|0)+(w(c,e&65535)>>16)|0;c=f;g=(m-l|0)+16|0;a:{if((g|0)<=-1){g=0-g|0;m=2147483647>>>g|0;l=-2147483648>>g;e=((e|0)>(m|0)?m:(e|0)<(l|0)?l:e)<>g:0}e=(e|0)>-16384?e:-16384;g=(e|0)<16384?e:16384;p=(w(g&65535,g)>>16)+w(g,g>>16)|0;e=p>>31;h=c;c=e^e+p;e=(c|0)<(f|0)?h:c;m=i>>1;f=0;l=q[d>>2];r=d;b:{if((b|0)<=0){c=e<<16>>16;e=w(c,0-l>>16);break b}f=z(b);i=f-24|0;h=(f&1?32768:46214)>>>(f>>>1)|0;o=h;n=24-f|0;c=b;c:{if(!n){break c}c=b<>>56-f;if(b>>>0<=127){break c}c=b<>>n}s=((w(o,w(c&127,13959168)>>>16|0)>>>16|0)+h<>16;c=e<<16>>16;o=h;e=b;d:{if(!n){break d}e=b<>>56-f;if(b>>>0<=127){break d}e=b<>>n}f=o+(w(h,w(e&127,13959168)>>>16|0)>>>16|0)|0;e=w(c,s)}l=(e+l|0)+(w((f<>16)|0;q[r>>2]=l;f=d;h=q[d+4>>2];r=h;d=p<<16>>16;e=q[j>>2]+(((w(d,b&65535)>>16)+w(d,b>>16)<<6)-(w(g,k>>16)+(w(g,k&65535)>>16)<<4)|0)|0;e:{if((e|0)<1){e=0;b=0;break e}d=z(e);n=d-24|0;i=(d&1?32768:46214)>>>(d>>>1)|0;o=i;k=24-d|0;b=e;f:{if(!k){break f}b=e<>>56-d;if(e>>>0<=127){break f}b=e<>>k}b=(w(o,w(b&127,13959168)>>>16|0)>>>16|0)+i|0;g:{if(!k){break g}if(e>>>0<=127){e=e<>>56-d;break g}e=e<>>k}e=i+(w(i,w(e&127,13959168)>>>16|0)>>>16|0)|0;b=b<>16,c)|0)+(w((e<>16)|0;q[f+4>>2]=b;e=(l|0)>1?l:1;c=z(e);d=b;b=b>>31;f=z(d+b^b);d=d<>16)<<16>>16;d=(w(b,d&65535)>>16)+w(b,d>>16)|0;e=yg(d,d>>31,e,e>>31);e=h-(((da&536870911)<<3|e>>>29)&-8)|0;b=(w(e>>16,b)+d|0)+(w(b,e&65535)>>16)|0;h=a;c=(f-c|0)+15|0;h:{if((c|0)<=-1){c=0-c|0;d=2147483647>>>c|0;e=-2147483648>>c;b=((b|0)>(d|0)?d:(b|0)<(e|0)?e:b)<>c:0}a=(b|0)>0?b:0;q[h>>2]=(a|0)<32767?a:32767;ca=j+16|0;return g}function qg(a,b,c,d,e){var f=x(0),g=0,h=x(0),i=0,j=0,k=0,l=x(0),m=x(0),n=0,o=x(0),p=0,r=0,s=x(0),t=x(0),v=x(0),y=0,z=0,A=0,C=x(0),D=0,E=x(0),G=x(0),H=x(0),I=x(0),J=0,K=0,L=x(0);j=q[c>>2]/2|0;j=(j|0)<512?j:511;k=a+2048|0;n=(b|0)/2|0;D=(d|0)/-2|0;if((b|0)>=2){a=k-(j<<2)|0;d=0;while(1){g=d<<2;f=u[g+k>>2];t=x(t+x(f*u[a+g>>2]));m=x(m+x(f*f));d=d+1|0;if((n|0)!=(d|0)){continue}break}}p=ca-2064|0;u[p>>2]=m;d=1;f=m;while(1){h=f;a=d<<2;f=u[k-a>>2];h=x(h+x(f*f));f=u[(n-d<<2)+k>>2];f=x(h-x(f*f));u[a+p>>2]=B(f,x(0));a=(d|0)!=512;d=d+1|0;if(a){continue}break}E=x(e*x(.5));z=j<<1;v=u[(j<<2)+p>>2];o=x(t/x(F(x(x(m*v)+x(1)))));G=x(o*x(.8500000238418579));H=x(o*x(.8999999761581421));I=x(o*x(.699999988079071));i=2;a=j;while(1){d=i<<1;g=(i+z>>>0)/(d>>>0)|0;if((g|0)>=7){a:{if((i|0)==2){d=g+j|0;d=(d|0)>512?j:d;break a}d=(w(q[(i<<2)+31616>>2],z)+i>>>0)/(d>>>0)|0}r=d<<2;A=g<<2;f=x(0);b:{if((b|0)<2){l=x(0);break b}J=k-r|0;K=k-A|0;d=0;l=x(0);while(1){y=d<<2;s=u[y+k>>2];f=x(f+x(s*u[y+J>>2]));l=x(l+x(s*u[y+K>>2]));d=d+1|0;if((n|0)!=(d|0)){continue}break}}l=x(x(l+f)*x(.5));s=x(x(u[p+A>>2]+u[p+r>>2])*x(.5));f=x(l/x(F(x(x(m*s)+x(1)))));L=G;r=g+D|0;d=r>>31;d=d^d+r;h=e;c:{if(d>>>0<2){break c}h=x(0);if((d|0)!=2){break c}h=(j|0)>(w(w(i,i),5)|0)?E:x(0)}C=h;h=x(B(x(L-h),x(.4000000059604645)));d:{if((g|0)<21){break d}h=x(B(x(I-C),x(.30000001192092896)));if((g|0)>=14){break d}h=x(B(x(H-C),x(.5)))}if(!(h=v)){m=x(e/x(v+x(1)))}j=1;e:{if((b|0)<2){l=x(0);e=x(0);break e}g=(1-a<<2)+k|0;d=0;while(1){i=d<<2;f=x(f+x(u[i+k>>2]*u[g+i>>2]));d=d+1|0;if((n|0)!=(d|0)){continue}break}l=x(0);if((b|0)<=1){e=x(0);break e}g=k-(a<<2)|0;d=0;while(1){i=d<<2;l=x(l+x(u[i+k>>2]*u[g+i>>2]));d=d+1|0;if((n|0)!=(d|0)){continue}break}e=x(0);if((b|0)<2){break e}b=((a^-1)<<2)+k|0;d=0;while(1){g=d<<2;e=x(e+x(u[g+k>>2]*u[b+g>>2]));d=d+1|0;if((n|0)!=(d|0)){continue}break}}f:{if(x(e-f)>x(x(l-f)*x(.699999988079071))){break f}j=-1;if(x(f-e)>x(x(l-e)*x(.699999988079071))){break f}j=0}a=(a<<1)+j|0;q[c>>2]=(a|0)<15?15:a;return m>o?o:m}function cd(a,b,c,d,e){var f=0,g=x(0),h=x(0),i=0,j=x(0),k=0,l=x(0),m=0,n=x(0),o=0,p=x(0),r=0,s=0,t=0,v=0,w=x(0),y=0;f=ca;y=f;a:{if((c|0)>0){if((d|0)<=0){break a}k=c>>>2|0;m=f-((k<<2)+15&-16)|0;f=m;ca=f;i=c+d|0;o=f-((i&-4)+15&-16)|0;f=o;ca=f;r=d>>>1|0;s=f-((r<<2)+15&-16)|0;ca=s;if(k){f=0;while(1){u[m+(f<<2)>>2]=u[(f<<3)+a>>2];f=f+1|0;if((k|0)!=(f|0)){continue}break}}if((i|0)>=4){f=i>>2;i=(f|0)>1?f:1;f=0;while(1){u[o+(f<<2)>>2]=u[(f<<3)+b>>2];f=f+1|0;if((i|0)!=(f|0)){continue}break}}v=d>>2;lb(m,o,s,k,v);g=x(1);if(k){f=0;while(1){j=u[o+(f<<2)>>2];g=x(g+x(j*j));f=f+1|0;if((k|0)!=(f|0)){continue}break}}m=0;i=1;if((d|0)>3){p=x(-1);f=0;j=x(-1);while(1){d=f<<2;h=u[d+s>>2];b:{if(h>x(0)^1){break b}h=x(h*x(9.999999960041972e-13));h=x(h*h);if(x(n*h)>x(j*g)^1){break b}if(x(l*h)>x(p*g)){i=m;m=f;j=p;p=h;n=l;l=g;break b}i=f;j=h;n=g}h=g;g=u[o+(f+k<<2)>>2];w=x(g*g);g=u[d+o>>2];g=x(B(x(h+x(w-x(g*g))),x(1)));f=f+1|0;if((v|0)!=(f|0)){continue}break}}c:{if(!r){k=c>>1;break c}k=c>>1;o=0-(i<<1)|0;v=0-(m<<1)|0;while(1){f=t<<2;m=f+s|0;q[m>>2]=0;d=t+v|0;i=d>>31;d:{if((i^d+i)>>>0>=3){d=o+t|0;i=d>>31;if((i^d+i)>>>0>2){break d}}g=x(0);if((c|0)>=2){i=b+f|0;f=0;while(1){d=f<<2;g=x(g+x(u[d+a>>2]*u[d+i>>2]));f=f+1|0;if((k|0)!=(f|0)){continue}break}}u[m>>2]=B(g,x(-1))}t=t+1|0;if((t|0)!=(r|0)){continue}break}}g=x(1);if((c|0)>1){f=0;while(1){l=u[(f<<2)+b>>2];g=x(g+x(l*l));f=f+1|0;if((k|0)!=(f|0)){continue}break}}d=0;e:{if(!r){a=0;break e}p=x(-1);l=x(0);a=0;f=0;n=x(0);j=x(-1);while(1){c=f<<2;h=u[c+s>>2];f:{if(h>x(0)^1){break f}h=x(h*x(9.999999960041972e-13));h=x(h*h);if(x(n*h)>x(j*g)^1){break f}if(x(l*h)>x(p*g)){a=f;j=p;p=h;n=l;l=g;break f}j=h;n=g}h=g;g=u[(f+k<<2)+b>>2];w=x(g*g);g=u[b+c>>2];g=x(B(x(h+x(w-x(g*g))),x(1)));f=f+1|0;if((r|0)!=(f|0)){continue}break}if((a|0)<1|(r-1|0)<=(a|0)){break e}b=(a<<2)+s|0;j=u[b+4>>2];n=u[b-4>>2];l=u[b>>2];if(x(j-n)>x(x(l-n)*x(.699999988079071))){d=-1;break e}if(!(x(n-j)>x(x(l-j)*x(.699999988079071)))){break e}d=1}q[e>>2]=(a<<1)+d;ca=y;return}ja(31592,31579,302);G()}ja(31549,31579,303);G()}function mf(a,b,c,d,e,f,g,h,i,j,k,l){var m=0,n=x(0),o=0,p=x(0),r=0,s=0,t=x(0),v=0,z=0,A=0,B=0,D=0,E=0,F=0,G=x(0),H=0,I=x(0),J=0,K=0,L=0,M=0;o=ca-16|0;ca=o;B=q[a>>2];v=q[B+4>>2];s=e+1024|0;m=o-((w(s,d)<<2)+15&-16)|0;z=m;ca=m;q[o+12>>2]=m+(s<<2);q[o+8>>2]=m;D=(d|0)>1?d:1;E=e<<2;F=e+v|0;r=(v<<2)+b|0;m=0;while(1){ka(ka(q[(o+8|0)+(m<<2)>>2],(m<<12)+c|0,4096)+4096|0,r+(w(m,F)<<2)|0,E);m=m+1|0;if((D|0)!=(m|0)){continue}break}a:{if(j){j=z-((s<<1&-4)+15&-16)|0;ca=j;dd(o+8|0,j,s,d,q[a+72>>2]);cd(j+2048|0,j,e,979,o+4|0);q[o+4>>2]=1024-q[o+4>>2];n=qg(j,e,o+4|0,q[a+104>>2],u[a+108>>2]);if(q[o+4>>2]>=1023){q[o+4>>2]=1022}n=x(n*x(.699999988079071));d=q[a+56>>2];n=(d|0)>2?x(n*x(.5)):n;n=(d|0)>8?x(0):(d|0)>4?x(n*x(.5)):n;break a}q[o+4>>2]=15;n=x(0)}n=q[l>>2]?x(n*u[l+40>>2]):n;s=0;z=0;l=q[o+4>>2];d=q[a+104>>2];m=l-d|0;j=m>>31;p=(l|0)<(w(j^j+m,10)|0)?x(.4000000059604645):x(.20000000298023224);p=(k|0)<25?x(p+x(.10000000149011612)):p;p=(k|0)<35?x(p+x(.10000000149011612)):p;I=x(p+x(-.10000000149011612));t=p;p=u[a+108>>2];t=p>x(.4000000059604645)?I:t;t=p>x(.550000011920929)?x(t+x(-.10000000149011612)):t;if(!((t>x(.20000000298023224)?t:x(.20000000298023224))>n)){z=1;n=x(C(x(x(x((x(y(x(n-p)))7?7:j-1|0;s=(j|0)>0?j:0;G=x(x(s+1|0)*x(.09375))}j=v<<2;k=e<<2;J=4096-k|0;n=x(-G);K=(e|0)<1025;L=0-e<<2;m=0;while(1){l=q[B+44>>2];q[a+104>>2]=(d|0)>15?d:15;H=((w(m,v)<<2)+a|0)+244|0;d=ka((w(m,F)<<2)+b|0,H,j);l=l-v|0;if(l){r=q[a+104>>2];A=r;p=x(-u[a+108>>2]);r=q[a+112>>2];Ta(d+j|0,q[(o+8|0)+(m<<2)>>2]+4096|0,A,A,l,p,p,r,r,0,0)}r=l<<2;M=r+(d+j|0)|0;A=r;r=(o+8|0)+(m<<2)|0;Ta(M,(A+q[r>>2]|0)+4096|0,q[a+104>>2],q[o+4>>2],e-l|0,x(-u[a+108>>2]),n,q[a+112>>2],f,q[B+60>>2],v);ka(H,d+k|0,j);d=(m<<12)+c|0;c:{if(!K){ka(d,k+q[r>>2]|0,4096);break c}ka((ra(d,d+k|0,J)+L|0)+4096|0,q[r>>2]+4096|0,E)}m=m+1|0;if((D|0)!=(m|0)){d=q[a+104>>2];continue}break}u[h>>2]=G;q[g>>2]=q[o+4>>2];q[i>>2]=s;ca=o+16|0;return z}function ob(a,b,c,d,e,f){var g=x(0),h=x(0),i=x(0),j=0,k=x(0),l=0,m=0,n=0,o=0,p=0,r=0,s=0,t=0,v=0,y=0;a:{if(!f|e<<1>=(b|0)){break a}i=x(x(b|0)/x(w(q[(f<<2)+30692>>2],e)+b|0));i=x(x(i*i)*x(.5));t=ic(+x(i*x(1.5707963705062866)));v=ic(+x(x(x(1)-i)*x(1.5707963705062866)));f=0;if(d<<3<=(b|0)){m=d>>2;e=1;while(1){f=e;e=e+1|0;if((m+w(w(f,f)+f|0,d)|0)<(b|0)){continue}break}}if((d|0)<1){break a}i=x(t);k=x(v);p=(b>>>0)/(d>>>0)|0;o=p-1|0;m=o-(f<<1)|0;r=p-f|0;n=p-3|0;y=(c|0)>-1;c=0;while(1){j=w(c,p);b:{if(!y){c:{if(!f){break c}b=0;l=(j<<2)+a|0;e=l;if((r|0)>=1){while(1){s=(f<<2)+e|0;g=u[s>>2];h=u[e>>2];u[s>>2]=x(h*i)+x(g*k);u[e>>2]=x(h*k)-x(g*i);e=e+4|0;b=b+1|0;if((r|0)!=(b|0)){continue}break}}if((m|0)<0){break c}e=l+(m<<2)|0;b=m;while(1){l=(f<<2)+e|0;g=u[l>>2];h=u[e>>2];u[l>>2]=x(h*i)+x(g*k);u[e>>2]=x(h*k)-x(g*i);e=e-4|0;l=(b|0)>0;b=b-1|0;if(l){continue}break}}j=(j<<2)+a|0;if((o|0)>=1){g=u[j>>2];b=0;e=j;while(1){h=u[e+4>>2];u[e>>2]=x(g*i)-x(h*k);g=x(x(g*k)+x(h*i));u[e+4>>2]=g;e=e+4|0;b=b+1|0;if((o|0)!=(b|0)){continue}break}}if((n|0)<0){break b}e=j+(n<<2)|0;b=n;while(1){g=u[e>>2];h=u[e+4>>2];u[e+4>>2]=x(g*k)+x(h*i);u[e>>2]=x(g*i)-x(h*k);e=e-4|0;j=(b|0)>0;b=b-1|0;if(j){continue}break}break b}j=(j<<2)+a|0;if((o|0)>=1){g=u[j>>2];b=0;e=j;while(1){h=u[e+4>>2];u[e>>2]=x(g*i)+x(h*k);g=x(x(h*i)-x(g*k));u[e+4>>2]=g;e=e+4|0;b=b+1|0;if((o|0)!=(b|0)){continue}break}}if((n|0)>=0){e=j+(n<<2)|0;b=n;while(1){g=u[e+4>>2];h=u[e>>2];u[e+4>>2]=x(g*i)-x(h*k);u[e>>2]=x(h*i)+x(g*k);e=e-4|0;l=(b|0)>0;b=b-1|0;if(l){continue}break}}if(!f){break b}b=0;e=j;if((r|0)>=1){while(1){l=(f<<2)+e|0;g=u[l>>2];h=u[e>>2];u[l>>2]=x(g*k)-x(h*i);u[e>>2]=x(h*k)+x(g*i);e=e+4|0;b=b+1|0;if((r|0)!=(b|0)){continue}break}}if((m|0)<0){break b}e=j+(m<<2)|0;b=m;while(1){j=(f<<2)+e|0;g=u[j>>2];h=u[e>>2];u[j>>2]=x(g*k)-x(h*i);u[e>>2]=x(h*k)+x(g*i);e=e-4|0;j=(b|0)>0;b=b-1|0;if(j){continue}break}}c=c+1|0;if((d|0)!=(c|0)){continue}break}}}function hg(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0;i=ca-112|0;ca=i;a:{b:{c:{d:{e:{f:{g:{h=q[a+8>>2];if(h-1>>>0<2){g=q[a+12>>2];h:{if((g|0)<=15999){if((g|0)==8e3|(g|0)==12e3){break h}break a}if((g|0)==16e3|(g|0)==24e3){break h}if((g|0)!=48e3){break a}}if((g|0)!=q[a+24>>2]){break g}f=q[a+28>>2];i:{if((f|0)<=11999){if(!f|(f|0)==8e3){break i}break b}if((f|0)==12e3){break i}if((f|0)!=16e3){break b}}if((h|0)!=q[a+16>>2]){break f}if(t[a+20>>2]>=3){break e}f=q[a+32>>2];if(f>>>0>20|!(1<>2];if((f|0)>-1){if(f){break m}f=-1;if(q[a+48>>2]-1>>>0>=2){break l}n:{if(!b|!c){if((e|0)%(((g&65535)>>>0)/400|0)|0){break n}}if(!(c?b:0)){c=Ma(a,0,0,d,e);if((c|0)<0){f=c;break n}b=c;while(1){if((c|0)<(e|0)){c=b;f=Ma(a,0,0,(w(q[a+8>>2],b)<<2)+d|0,e-b|0);b=f+b|0;g=(f|0)<0;c=g?c:b;if(!g){continue}break n}break}if((c|0)!=(e|0)){break k}q[a+72>>2]=e;f=b;break n}if((c|0)<0){break n}f=r[b|0];o:{if(f&128){j=1002;f=f>>>5&3;h=f?f+1102|0:1101;break o}p:{if((f&96)==96){j=1001;h=f&16?1105:1104;break p}j=1e3;h=(f>>>5&3)+1101|0}}k=Ib(b,g);l=r[b|0];g=_c(b,c,i+107|0,0,i,i+108|0);if((g|0)<0){f=g;break n}b=q[i+108>>2]+b|0;f=-2;if((w(g,k)|0)>(e|0)){break n}q[a+64>>2]=k;q[a+52>>2]=h;q[a+56>>2]=j;q[a+48>>2]=l&4?2:1;c=0;q:{if((g|0)<1){f=0;break q}f=0;while(1){j=(c<<1)+i|0;h=Ma(a,b,p[j>>1],(w(q[a+8>>2],f)<<2)+d|0,e-f|0);if((h|0)<0){f=h;break n}if((h|0)!=(k|0)){break j}f=f+k|0;b=p[j>>1]+b|0;c=c+1|0;if((g|0)!=(c|0)){continue}break}}q[a+72>>2]=f;kg(d,f,q[a+8>>2],a+76|0)}ca=i+112|0;return f}ja(33977,33038,92);G()}ja(34009,33038,93);G()}ja(34053,33038,95);G()}ja(32996,33038,652);G()}ja(33109,33038,724);G()}ja(33374,33038,87);G()}ja(33207,33038,85);G()}function Wc(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=q[a+2316>>2];if((e|0)!=q[a+4252>>2]){q[a+4252>>2]=e;f=a+4244|0;q[f>>2]=65536;q[f+4>>2]=65536;f=a+4256|0;q[f>>2]=2;q[f+4>>2]=20;q[a+4172>>2]=q[a+2328>>2]<<7}if(d){Vf(a,b,c);q[a+4160>>2]=q[a+4160>>2]+1;return}c=o[a+2765|0];q[a+4164>>2]=c;a:{if((c|0)==2){d=0;c=q[a+2324>>2];b:{if(!c){break b}e=c-1|0;i=(e<<2)+b|0;g=q[i>>2];if((g|0)<1){break b}f=a+4176|0;d=w(e,10)+b|0;d=(((p[d+98>>1]+p[d+96>>1]|0)+p[d+100>>1]|0)+p[d+102>>1]|0)+p[d+104>>1]|0;c:{if((d|0)<1){d=0;break c}e=w(e<<16>>16,10)+b|0;p[f+8>>1]=s[e+104>>1];g=s[e+100>>1]|s[e+102>>1]<<16;e=s[e+96>>1]|s[e+98>>1]<<16;p[f>>1]=e;p[f+2>>1]=e>>>16;p[f+4>>1]=g;p[f+6>>1]=g>>>16;q[a+4172>>2]=q[i>>2]<<8;g=q[i>>2]}h=1;if((c|0)==1){break b}k=q[a+2332>>2];if((k|0)>=(g|0)){break b}while(1){j=(h^-1)+c|0;e=w(j,10)+b|0;e=(((p[e+98>>1]+p[e+96>>1]|0)+p[e+100>>1]|0)+p[e+102>>1]|0)+p[e+104>>1]|0;if((e|0)>(d|0)){d=w(j<<16>>16,10)+b|0;p[f+8>>1]=s[d+104>>1];g=s[d+100>>1]|s[d+102>>1]<<16;d=s[d+96>>1]|s[d+98>>1]<<16;p[f>>1]=d;p[f+2>>1]=d>>>16;p[f+4>>1]=g;p[f+6>>1]=g>>>16;q[a+4172>>2]=q[(j<<2)+b>>2]<<8;g=q[i>>2];d=e}h=h+1|0;if((h|0)==(c|0)){break b}if((w(h,k)|0)<(g|0)){continue}break}}e=a+4176|0;q[e>>2]=0;q[e+4>>2]=0;p[a+4184>>1]=0;p[a+4180>>1]=d;if((d|0)<=11468){f=a+4182|0;p[f>>1]=0;p[f+2>>1]=0;p[e>>1]=0;p[e+2>>1]=0;p[a+4180>>1]=w(11744256/(((d|0)>1?d:1)>>>0)<<16>>16,d<<16>>16)>>>10;break a}if((d|0)<15566){break a}e=a+4182|0;p[e>>1]=0;p[e+2>>1]=0;e=a+4176|0;p[e>>1]=0;p[e+2>>1]=0;p[a+4180>>1]=w(255016960/(d>>>0)|0,d<<16>>16)>>>14;break a}c=a+4176|0;q[c>>2]=0;q[c+4>>2]=0;p[a+4184>>1]=0;q[a+4172>>2]=w(e<<16>>16,4608);c=q[a+2324>>2]}ka(a+4186|0,b- -64|0,q[a+2340>>2]<<1);p[a+4240>>1]=q[b+136>>2];b=(c<<2)+b|0;d=q[b+12>>2];e=a+4244|0;q[e>>2]=q[b+8>>2];q[e+4>>2]=d;q[a+4260>>2]=q[a+2332>>2];q[a+4256>>2]=c}function ua(a,b,c){var d=0,e=0,f=0,g=0,h=0;d=ca-16|0;ca=d;q[d+12>>2]=c;c=-5;a:{b:{c:{d:{e:{f:{g:{h:{switch(b-4027|0){default:i:{switch(b-10007|0){case 3:b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if((b|0)<0|(b|0)>=q[q[a>>2]+8>>2]){break a}q[a+20>>2]=b;break b;case 5:b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if((b|0)<1|(b|0)>q[q[a>>2]+8>>2]){break a}q[a+24>>2]=b;break b;case 1:b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if(b-1>>>0>1){break a}q[a+12>>2]=b;break b;case 0:break i;case 9:break f;case 8:break g;default:break a}}b=q[d+12>>2];q[d+12>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+44>>2];c=0;q[a+44>>2]=0;break a;case 0:b=q[d+12>>2];q[d+12>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+4>>2]/q[a+16>>2];break b;case 1:f=q[a+4>>2];c=0;e=q[a>>2];b=q[e+8>>2];g=(q[e+4>>2]<<2)+8288|0;e=q[a+8>>2];la(a+40|0,0,((b<<5)+w(g,e)|0)+52|0);if((b|0)>=1){e=((w(e,f+2048|0)<<2)+a|0)+w(e,96)|0;f=b<<3;e=(e+f|0)+92|0;f=e+f|0;b=b<<1;h=(b|0)>1?b:1;b=0;while(1){g=b<<2;q[f+g>>2]=-1042284544;q[e+g>>2]=-1042284544;b=b+1|0;if((h|0)!=(b|0)){continue}break}}q[a+56>>2]=1;break a;case 2:case 3:case 5:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:case 15:case 16:case 17:case 18:break a;case 20:break c;case 19:break d;case 4:break e;case 6:break h}}b=q[d+12>>2];q[d+12>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+60>>2];break b}b=q[d+12>>2];q[d+12>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a>>2];break b}b=q[d+12>>2];q[d+12>>2]=b+4;q[a+28>>2]=q[b>>2];break b}b=q[d+12>>2];q[d+12>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+40>>2];break b}b=q[d+12>>2];q[d+12>>2]=b+4;c=-1;b=q[b>>2];if(b>>>0>1){break a}q[a+32>>2]=b;break b}b=q[d+12>>2];q[d+12>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+32>>2]}c=0}ca=d+16|0;return c}function Zb(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;e=q[a+28>>2];g=z(e);b=2147483647>>>g|0;c=q[a+32>>2];d=b+c&-2147483648>>g;a:{b:{if((d|b)>>>0>=c+e>>>0){b=b>>>1|0;d=b+c&(b^-1);g=g+1|0;break b}if(!g){break a}}c=g;while(1){h=d>>>23|0;c:{if((h|0)!=255){g=d>>>31|0;f=q[a+40>>2];if((f|0)>=0){b=a;e=q[a+24>>2];if(t[a+4>>2]>e+q[a+8>>2]>>>0){q[a+24>>2]=e+1;o[e+q[a>>2]|0]=g+f;f=0}else{f=-1}q[b+44>>2]=f|q[a+44>>2]}b=q[a+36>>2];if(b){i=g-1|0;while(1){e=-1;g=a;f=q[a+24>>2];if(t[a+4>>2]>f+q[a+8>>2]>>>0){q[a+24>>2]=f+1;o[f+q[a>>2]|0]=i;e=0;b=q[a+36>>2]}b=b-1|0;q[g+36>>2]=b;q[a+44>>2]=q[a+44>>2]|e;if(b){continue}break}}q[a+40>>2]=h&255;break c}q[a+36>>2]=q[a+36>>2]+1}d=d<<8&2147483392;b=(c|0)>8;g=c-8|0;c=g;if(b){continue}break}}c=q[a+40>>2];d:{e:{f:{if((c|0)<=-1){b=q[a+36>>2];if(b){break f}break d}b=a;d=q[a+24>>2];if(t[a+4>>2]>d+q[a+8>>2]>>>0){q[a+24>>2]=d+1;o[d+q[a>>2]|0]=c;d=0}else{d=-1}q[b+44>>2]=d|q[a+44>>2];b=q[a+36>>2];if(!b){break e}}while(1){e=-1;d=a;c=q[a+24>>2];if(t[a+4>>2]>c+q[a+8>>2]>>>0){q[a+24>>2]=c+1;o[c+q[a>>2]|0]=255;e=0;b=q[a+36>>2]}b=b-1|0;q[d+36>>2]=b;q[a+44>>2]=q[a+44>>2]|e;if(b){continue}break}}q[a+40>>2]=0}e=q[a+12>>2];d=q[a+16>>2];g:{if((d|0)<=7){c=q[a+44>>2];break g}b=d;while(1){d=a;f=q[a+4>>2];c=q[a+8>>2];if(f>>>0>c+q[a+24>>2]>>>0){c=c+1|0;q[a+8>>2]=c;o[q[a>>2]+(f-c|0)|0]=e;c=0}else{c=-1}c=c|q[a+44>>2];q[d+44>>2]=c;e=e>>>8|0;f=(b|0)>15;d=b-8|0;b=d;if(f){continue}break}}h:{if(c){break h}b=q[a+24>>2];la(b+q[a>>2]|0,0,(q[a+4>>2]-b|0)-q[a+8>>2]|0);if((d|0)<1){break h}b=q[a+8>>2];c=q[a+4>>2];if(b>>>0>=c>>>0){q[a+44>>2]=-1;return}f=d;d=0-g|0;if(!((f|0)<=(d|0)|c>>>0>b+q[a+24>>2]>>>0)){q[a+44>>2]=-1;e=(-1<>2]+(c+(b^-1)|0)|0;o[a|0]=r[a|0]|e}}function ac(a,b,c,d,e){var f=0,g=0,h=0,i=0;f=ca-48|0;ca=f;g=a+2766|0;a:{if(!(q[((c<<2)+a|0)+2404>>2]?0:!d)){c=na(b,6405,8)+2|0;break a}c=na(b,6409,8)}o[g|0]=c&1;c=c>>>1|0;o[a+2765|0]=c;b:{if((e|0)==2){h=a,i=na(b,6832,8),o[h+2736|0]=i;break b}h=a,i=na(b,(c<<24>>21)+6800|0,8)<<3,o[h+2736|0]=i;h=a,i=na(b,6448,8)+r[a+2736|0]|0,o[h+2736|0]=i}if(q[a+2324>>2]>=2){d=1;while(1){h=(a+d|0)+2736|0,i=na(b,6832,8),o[h|0]=i;d=d+1|0;if((d|0)>2]){continue}break}}c=q[a+2732>>2];c=na(b,q[c+16>>2]+w(p[c>>1],o[a+2765|0]>>1)|0,8);o[a+2744|0]=c;ab(f+16|0,f,q[a+2732>>2],c<<24>>24);c=q[a+2732>>2];g=p[c+2>>1];if((g|0)==q[a+2340>>2]){d=0;if((g|0)>0){while(1){c:{d:{e:{c=na(b,q[c+28>>2]+p[(f+16|0)+(d<<1)>>1]|0,8);switch(c|0){case 8:break d;case 0:break e;default:break c}}c=0-na(b,6456,8)|0;break c}c=na(b,6456,8)+8|0}d=d+1|0;o[(d+a|0)+2744|0]=c-4;c=q[a+2732>>2];if(p[c+2>>1]>(d|0)){continue}break}}d=a+2767|0;if(q[a+2324>>2]==4){c=na(b,6411,8)}else{c=4}o[d|0]=c;if(r[a+2765|0]==2){f:{g:{if((e|0)!=2|q[a+2396>>2]!=2){break g}c=na(b,2656,8);if(c<<16<1){break g}c=(c+s[a+2400>>1]|0)-9|0;p[a+2762>>1]=c;break f}c=a+2762|0;h=c,i=w(na(b,2624,8),q[a+2316>>2]>>>1|0),p[h>>1]=i;d=c;c=na(b,q[a+2380>>2],8)+s[c>>1]|0;p[d>>1]=c}p[a+2400>>1]=c;h=a+2764|0,i=na(b,q[a+2384>>2],8),o[h|0]=i;c=na(b,6873,8);o[a+2768|0]=c;d=1;h:{if(q[a+2324>>2]<1){break h}h=a+2740|0,i=na(b,q[(c<<24>>22)+6944>>2],8),o[h|0]=i;if(q[a+2324>>2]<2){break h}while(1){h=(a+d|0)+2740|0,i=na(b,q[(o[a+2768|0]<<2)+6944>>2],8),o[h|0]=i;d=d+1|0;if((d|0)>2]){continue}break}}d=a+2769|0;if(e){c=0}else{c=na(b,6402,8)}o[d|0]=c}q[a+2396>>2]=o[a+2765|0];h=a+2770|0,i=na(b,6433,8),o[h|0]=i;ca=f+48|0;return}ja(7423,7485,82);G()}function lf(a,b,c,d,e,f,g){var h=0,i=x(0),j=0,k=x(0),l=0,m=x(0),n=x(0),o=0,p=0,s=0,t=0,v=0,z=0,D=x(0),E=0,H=0,I=x(0),J=0,K=0,L=0,M=x(0);h=ca;z=h;j=h-((b<<2)+15&-16)|0;ca=j;q[g>>2]=0;p=(b|0)/2|0;a:{b:{h=0;c:{if((c|0)<1){break c}D=f?x(.03125):x(.0625);E=p-5|0;H=w(p,6)-102|0;I=x(p|0);J=+(p|0);K=(b|0)<1;L=(b|0)<36;while(1){if(!K){o=w(b,t);k=x(0);h=0;m=x(0);while(1){i=u[(h+o<<2)+a>>2];n=x(k+i);u[(h<<2)+j>>2]=n;k=x(x(m+n)-x(i+i));m=x(i+x(n*x(-.5)));h=h+1|0;if((h|0)!=(b|0)){continue}break}}q[j>>2]=0;q[j+4>>2]=0;q[j+40>>2]=0;q[j+44>>2]=0;q[j+32>>2]=0;q[j+36>>2]=0;q[j+24>>2]=0;q[j+28>>2]=0;q[j+16>>2]=0;q[j+20>>2]=0;q[j+8>>2]=0;q[j+12>>2]=0;h=0;k=x(0);n=x(0);m=x(0);o=(b|0)>1;i=x(0);d:{if(!o){break d}while(1){l=h<<3;i=u[l+j>>2];M=x(i*i);i=u[(l|4)+j>>2];i=x(M+x(i*i));m=x(m+x(D*x(i-m)));u[(h<<2)+j>>2]=m;k=x(k+i);h=h+1|0;if((p|0)!=(h|0)){continue}break}h=p;m=x(0);i=k;if(!o){break d}while(1){o=h-1|0;l=(o<<2)+j|0;n=x(n+x(x(u[l>>2]-n)*x(.125)));u[l>>2]=n;m=n1;h=o;if(l){continue}break}n=m;i=k}k=u[j>>2];if(k!=k){break b}k=x(I/x(x(F(+x(i*n)*.5*J))+x(1.0000000036274937e-15)));if(k!=k){break a}o=0;if(!L){i=x(k*x(64));h=12;while(1){k=x(C(x(i*x(u[(h<<2)+j>>2]+x(1.0000000036274937e-15)))));l=x(A(k,x(127)))x(127)?s:l?s:+k;e:{if(y(s)<2147483648){l=~~s;break e}l=-2147483648}o=r[l+40032|0]+o|0;h=h+4|0;if((E|0)>(h|0)){continue}break}}h=(o<<8)/(H|0)|0;if((h|0)>(v|0)){q[e>>2]=t;v=h}t=t+1|0;if((t|0)!=(c|0)){continue}break}h=(v|0)>200;if(!f|v-201>>>0>398){break c}q[g>>2]=1;h=0}u[d>>2]=F(B(+x(x(A(x(B(x(x(F(+(w(v,27)|0)))+x(-42)),x(0))),x(163)))*x(.006899999920278788))+ -.139,0));ca=z;return h}ja(40160,39710,369);G()}ja(40198,39710,370);G()}function Gb(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0;h=ca-48|0;ca=h;a:{b:{f=d?(w(c,36)+a|0)+6100|0:a+4736|0;c=(o[f+29|0]<<1)+o[f+30|0]|0;if(c>>>0<6){if((c|0)<=1?d:0){break b}c:{if(!((c|0)<2?!d:0)){ma(b,c-2|0,6405,8);break c}ma(b,c,6409,8)}c=o[f|0];d:{if((e|0)==2){ma(b,c,6832,8);break d}ma(b,c>>3,(o[f+29|0]<<3)+6800|0,8);ma(b,r[f|0]&7,6448,8)}if(q[a+4580>>2]>=2){d=1;while(1){ma(b,o[d+f|0],6832,8);d=d+1|0;if((d|0)>2]){continue}break}}c=q[a+4692>>2];ma(b,o[f+8|0],q[c+16>>2]+w(p[c>>1],o[f+29|0]>>1)|0,8);ab(h+16|0,h,q[a+4692>>2],o[f+8|0]);g=q[a+4692>>2];c=p[g+2>>1];if((c|0)!=q[a+4640>>2]){break a}d=0;if((c|0)>0){while(1){c=d;d=c+1|0;i=f+d|0;j=o[i+8|0];e:{if((j|0)>=4){ma(b,8,q[g+28>>2]+p[(h+16|0)+(c<<1)>>1]|0,8);ma(b,o[i+8|0]-4|0,6456,8);break e}if((j|0)<=-4){ma(b,0,q[g+28>>2]+p[(h+16|0)+(c<<1)>>1]|0,8);ma(b,-4-o[i+8|0]|0,6456,8);break e}ma(b,j+4|0,q[g+28>>2]+p[(h+16|0)+(c<<1)>>1]|0,8)}g=q[a+4692>>2];if(p[g+2>>1]>(d|0)){continue}break}}if(q[a+4580>>2]==4){ma(b,o[f+31|0],6411,8)}f:{if(r[f+29|0]!=2){break f}g:{if(!((e|0)!=2|q[a+5768>>2]!=2)){d=p[f+26>>1]-p[a+5772>>1]|0;c=d+8|0;ma(b,c>>>0>19?0:d+9|0,2656,8);if(c>>>0<20){break g}}c=p[f+26>>1];d=q[a+4576>>2]>>1;g=(c|0)/(d|0)|0;ma(b,g,2624,8);ma(b,c-w(g<<16>>16,d<<16>>16)|0,q[a+4684>>2],8)}p[a+5772>>1]=s[f+26>>1];ma(b,o[f+28|0],q[a+4688>>2],8);ma(b,o[f+32|0],6873,8);if(q[a+4580>>2]>=1){d=0;while(1){ma(b,o[(d+f|0)+4|0],q[(o[f+32|0]<<2)+6944>>2],8);d=d+1|0;if((d|0)>2]){continue}break}}if(e){break f}ma(b,o[f+33|0],6402,8)}q[a+5768>>2]=o[f+29|0];ma(b,o[f+34|0],6433,8);ca=h+48|0;return}ja(35956,36008,59);G()}ja(36030,36008,60);G()}ja(36084,36008,93);G()}function Ac(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;f=-1;a:{if(q[a+4>>2]<(b|0)|(b|0)<=0){break a}j=a+200|0;b:{c:{d:{e:{f:{g:{i=b;switch(i-1|0){case 1:break f;case 0:break g;default:break e}}g=p[j>>1]+1|0;f=-2;if((g|0)>(d|0)){break a}o[c|0]=r[a|0]&252;f=c+1|0;break d}f=s[j>>1];g=f<<16>>16;h=s[j+2>>1];if((h|0)==(f|0)){g=g<<1|1;f=-2;if((g|0)>(d|0)){break a}o[c|0]=r[a|0]&252|1;f=c+1|0;break d}g=((g+(h<<16>>16)|0)+((g|0)>251)|0)+2|0;f=-2;if((g|0)>(d|0)){break a}o[c|0]=r[a|0]&252|2;f=c+1|0;f=$c(p[j>>1],f)+f|0;break d}f=c;if((i|0)>2){break c}}if(!e|(d|0)<=(g|0)){break b}}k=p[j>>1];h:{if((i|0)>=2){f=1;m=1;i:{l=k&65535;if((l|0)==s[j+2>>1]){g=2;while(1){h=g;if((g|0)==(i|0)){break i}g=h+1|0;if(s[(h<<1)+j>>1]==(l|0)){continue}break}m=(i|0)>(h|0)}g=(k+2|0)+((k|0)>251?2:1)|0;h=b-1|0;if((h|0)>=2){while(1){l=g;g=p[(f<<1)+j>>1];g=(l+g|0)+((g|0)>251?2:1)|0;f=f+1|0;if((h|0)!=(f|0)){continue}break}}g=p[(i-1<<1)+j>>1]+g|0;f=-2;if((g|0)>(d|0)){break a}f=r[a|0];h=i|-128;o[c+1|0]=h;o[c|0]=f|3;break h}m=(i|0)>(h|0)}g=w(i,k)+2|0;f=-2;if((g|0)>(d|0)){break a}f=r[a|0];o[c+1|0]=i;o[c|0]=f|3;h=i}f=c+2|0;j:{if(!e){break j}k=d-g|0;if(!k){break j}o[c+1|0]=h|64;g=(k-1|0)/255|0;if((k|0)>=256){h=f;f=(g|0)>1?g:1;la(h,255,f);f=(c+f|0)+2|0}o[f|0]=(k+w(g,-255)|0)-1;f=f+1|0;g=d}if(m^1|(i|0)<2){break b}b=b-1|0;h=(b|0)>1?b:1;b=0;while(1){f=$c(p[(b<<1)+j>>1],f)+f|0;b=b+1|0;if((h|0)!=(b|0)){continue}break}}if((i|0)>=1){b=a+8|0;a=0;while(1){h=f;f=(a<<1)+j|0;f=ra(h,q[b+(a<<2)>>2],p[f>>1])+p[f>>1]|0;a=a+1|0;if((i|0)!=(a|0)){continue}break}}if(!(!e|c+d>>>0<=f>>>0)){la(f,0,(d-f|0)+c|0)}f=g}return f}function Kd(a,b,c){var d=0,e=0,f=0,g=0,h=0;g=a;a:{b:{if((c|0)<1){break b}f=c;c=na(b,r[c+8592|0]+8432|0,8);f=f-c|0;c=c<<16;if((c|0)<1){break b}d=c>>16;c=na(b,r[d+8592|0]+8272|0,8);d=d-c|0;c=c<<16;if((c|0)<=0){break b}e=c>>16;c=na(b,r[e+8592|0]+8112|0,8);e=e-c|0;if(c<<16<1){break b}h=na(b,r[(c&65535)+8592|0]+7952|0,8);p[a>>1]=h;c=c-h|0;break a}p[a>>1]=0;c=0}p[g+2>>1]=c;g=a;c:{if(e<<16>=1){c=na(b,r[(e&65535)+8592|0]+7952|0,8);p[a+4>>1]=c;c=e-c|0;break c}p[a+4>>1]=0;c=0}p[g+6>>1]=c;e=0;g=a;d:{e:{c=d<<16;if((c|0)<=0){d=a+8|0;break e}d=a+8|0;e=c>>16;c=na(b,r[e+8592|0]+8112|0,8);e=e-c|0;if(c<<16<1){break e}d=na(b,r[(c&65535)+8592|0]+7952|0,8);p[a+8>>1]=d;c=c-d|0;break d}p[d>>1]=0;c=0}p[g+10>>1]=c;g=a;f:{if(e<<16>=1){c=na(b,r[(e&65535)+8592|0]+7952|0,8);p[a+12>>1]=c;c=e-c|0;break f}p[a+12>>1]=0;c=0}p[g+14>>1]=c;e=0;c=0;g=a;g:{h:{i:{d=f<<16;if((d|0)>=1){c=d>>16;d=na(b,r[c+8592|0]+8272|0,8);c=c-d|0;d=d<<16;if((d|0)>0){break i}}f=a+16|0;break h}f=a+16|0;e=d>>16;d=na(b,r[e+8592|0]+8112|0,8);e=e-d|0;if(d<<16<1){break h}f=na(b,r[(d&65535)+8592|0]+7952|0,8);p[a+16>>1]=f;f=d-f|0;break g}p[f>>1]=0;f=0}p[g+18>>1]=f;g=a;j:{if(e<<16>=1){d=na(b,r[(e&65535)+8592|0]+7952|0,8);p[a+20>>1]=d;f=e-d|0;break j}p[a+20>>1]=0;f=0}p[g+22>>1]=f;e=0;g=a;k:{l:{c=c<<16;if((c|0)<=0){d=a+24|0;break l}d=a+24|0;e=c>>16;c=na(b,r[e+8592|0]+8112|0,8);e=e-c|0;if(c<<16<1){break l}d=na(b,r[(c&65535)+8592|0]+7952|0,8);p[a+24>>1]=d;c=c-d|0;break k}p[d>>1]=0;c=0}p[g+26>>1]=c;if(e<<16>=1){b=na(b,r[(e&65535)+8592|0]+7952|0,8);p[a+28>>1]=b;p[a+30>>1]=e-b;return}p[a+28>>1]=0;p[a+30>>1]=0}function og(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=x(0),n=x(0),o=0,r=0,s=0,t=0,v=0,y=x(0),z=x(0),A=0,B=0,C=0,D=0,E=x(0);h=ca;D=h;j=(f<<2)+a|0;r=q[a+24>>2];o=q[a>>2];if((f|0)>=1){a=0;while(1){o=o>>1;r=(o<<2)+r|0;a=a+1|0;if((f|0)!=(a|0)){continue}break}}A=q[j+8>>2];v=e<<1&-4;s=o>>1;a=s<<2;f=(v+(a+b|0)|0)-4|0;j=h-(a+15&-16)|0;a=j;ca=a;B=e+3>>2;b=b+v|0;i=o>>2;l=a-((i<<3)+15&-16)|0;ca=l;a:{if((e|0)<1){h=0;a=j;break a}h=(B|0)>1?B:1;k=d+v|0;C=k-4|0;v=0-s<<2;a=j;while(1){m=u[C>>2];n=u[k>>2];u[a>>2]=x(m*u[(s<<2)+b>>2])+x(n*u[f>>2]);u[a+4>>2]=x(n*u[b>>2])-x(m*u[f+v>>2]);C=C-8|0;k=k+8|0;f=f-8|0;b=b+8|0;a=a+8|0;t=t+1|0;if((t|0)!=(h|0)){continue}break}}E=u[A+4>>2];t=i-B|0;if((t|0)>(h|0)){while(1){u[a>>2]=u[f>>2];u[a+4>>2]=u[b>>2];f=f-8|0;b=b+8|0;a=a+8|0;h=h+1|0;if((t|0)>(h|0)){continue}break}h=t}if((h|0)<(i|0)){k=((e<<2)+d|0)-4|0;e=0-s<<2;while(1){u[a>>2]=x(u[k>>2]*u[f>>2])-x(u[d>>2]*u[b+e>>2]);u[a+4>>2]=x(u[k>>2]*u[b>>2])+x(u[d>>2]*u[(s<<2)+f>>2]);k=k-8|0;d=d+8|0;f=f-8|0;b=b+8|0;a=a+8|0;h=h+1|0;if((i|0)!=(h|0)){continue}break}}if((o|0)<=3){Ya(A,l);ca=D;return}d=(i|0)>1?i:1;a=0;while(1){b=(p[q[A+44>>2]+(a<<1)>>1]<<3)+l|0;y=u[(a+i<<2)+r>>2];z=u[j>>2];m=u[(a<<2)+r>>2];n=u[j+4>>2];u[b+4>>2]=E*x(x(y*z)+x(m*n));u[b>>2]=E*x(x(m*z)-x(y*n));j=j+8|0;a=a+1|0;if((d|0)!=(a|0)){continue}break}Ya(A,l);if((o|0)>=4){e=(i|0)>1?i:1;a=0;f=(w(s-1|0,g)<<2)+c|0;d=g<<1;b=0-d<<2;while(1){y=u[l+4>>2];z=u[(a+i<<2)+r>>2];m=u[l>>2];n=u[(a<<2)+r>>2];u[c>>2]=x(y*z)-x(m*n);u[f>>2]=x(z*m)+x(y*n);l=l+8|0;f=b+f|0;c=(d<<2)+c|0;a=a+1|0;if((e|0)!=(a|0)){continue}break}}ca=D}function _c(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,s=0,t=0;s=-1;a:{if(!e|(b|0)<0){break a}s=-4;if(!b){break a}l=r[a|0];b:{if(l&128){g=(48e3<<(l>>>3&3)>>>0)/400|0;break b}g=l&8?960:480;if((l&96)==96){break b}h=l>>>3&3;g=2880;if((h|0)==3){break b}g=(48e3<>>0)/100|0}j=1;i=a+1|0;k=b-1|0;h=k;c:{d:{switch(l&3){case 1:if(k&1){break a}h=k>>>1|0;p[e>>1]=h;j=2;break c;case 2:if((b|0)<=1){p[e>>1]=65535;return-4}g=r[i|0];if(g>>>0>=252){j=2;if((b|0)<=2){p[e>>1]=65535;return-4}g=(r[a+2|0]<<2)+g|0}p[e>>1]=g;b=k-j|0;if((b|0)<(g|0)){break a}h=b-g|0;i=j+i|0;j=2;break c;case 0:break c;default:break d}}if((b|0)<2){break a}m=r[a+1|0];j=m&63;if(!j|w(g,j)>>>0>5760){break a}h=a+2|0;b=b-2|0;g=0;e:{if(!(m&64)){i=h;break e}while(1){if((b|0)<1){break a}i=r[h|0];k=(i|0)==255;i=(k?-2:i)&255;g=i+g|0;b=(i^-1)+b|0;i=h+1|0;h=i;if(k){continue}break}if((b|0)<0){break a}}if(m&128){if(j>>>0<2){h=b;break c}k=j-1|0;h=b;g=b;while(1){m=(t<<1)+e|0;if((g|0)<=0){p[m>>1]=65535;return-4}n=1;b=r[i|0];if(b>>>0>=252){if((g|0)<=1){p[m>>1]=65535;return-4}n=2;b=(r[i+1|0]<<2)+b|0}p[m>>1]=b;g=g-n|0;if((g|0)<(b|0)){break a}i=i+n|0;h=(h-n|0)-b|0;t=t+1|0;if((k|0)!=(t|0)){continue}break}if((h|0)>=0){break c}break a}h=(b|0)/(j|0)|0;if((w(j,h)|0)!=(b|0)){break a}if(j>>>0<2){break c}b=j-1|0;g=0;while(1){p[(g<<1)+e>>1]=h;g=g+1|0;if((b|0)!=(g|0)){continue}break}}if((h|0)>1275){break a}p[((j<<1)+e|0)-2>>1]=h;if(f){q[f>>2]=i-a}if(j){b=0;while(1){if(d){q[(b<<2)+d>>2]=i}i=p[(b<<1)+e>>1]+i|0;b=b+1|0;if((j|0)!=(b|0)){continue}break}}if(c){o[c|0]=l}s=j}return s}function cb(a,b,c,d){var e=0,f=0,g=0;a:{b:{e=la(a,0,300);a=e;c:{if(d){d:{if((b|0)<=15999){if((b|0)==8e3|(b|0)==12e3){break d}break a}if((b|0)==16e3|(b|0)==48e3){break d}if((b|0)!=24e3){break a}}if((c|0)!=16e3?!((c|0)==8e3|(c|0)==12e3):0){break a}d=(w((b>>>12|0)-((b|0)>16e3)>>((b|0)>24e3),3)+(c>>>12|0)|0)+2487|0;break c}if((b|0)!=12e3?!((b|0)==8e3|(b|0)==16e3):0){break b}e:{if((c|0)<=15999){if((c|0)==8e3|(c|0)==12e3){break e}break b}if((c|0)==16e3|(c|0)==24e3){break e}if((c|0)!=48e3){break b}}d=(w(b>>>12|0,5)+((c>>>12|0)-((c|0)>16e3)>>((c|0)>24e3))|0)+2500|0}q[a+292>>2]=o[d|0];q[e+288>>2]=((c&65535)>>>0)/1e3;a=((b&65535)>>>0)/1e3|0;q[e+284>>2]=a;q[e+268>>2]=w(a,10);f:{if((b|0)<(c|0)){a=1;if(b<<1==(c|0)){q[e+264>>2]=1;a=0;break f}q[e+264>>2]=2;break f}if((b|0)>(c|0)){q[e+264>>2]=3;a=c<<2;if((a|0)==(w(b,3)|0)){q[e+296>>2]=2e3;q[e+276>>2]=18;q[e+280>>2]=3;a=0;break f}d=w(c,3);if((d|0)==b<<1){q[e+296>>2]=2064;q[e+276>>2]=18;q[e+280>>2]=2;a=0;break f}if(c<<1==(b|0)){q[e+296>>2]=2112;q[e+276>>2]=24;q[e+280>>2]=1;a=0;break f}if((b|0)==(d|0)){q[e+296>>2]=2144;q[e+276>>2]=36;q[e+280>>2]=1;a=0;break f}if((a|0)==(b|0)){q[e+296>>2]=2192;q[e+276>>2]=36;q[e+280>>2]=1;a=0;break f}if((w(c,6)|0)==(b|0)){q[e+296>>2]=2240;q[e+276>>2]=36;q[e+280>>2]=1;a=0;break f}ja(2454,2474,154);G()}a=0;q[e+264>>2]=0}f=b<>16;g=(c>>>15|0)+1>>>1|0;b=(b<<(a|14))/(c|0)<<2;while(1){a=b;b=b+1|0;if(((w(d,a>>16)+w(a,g)|0)+(w(d,a&65535)>>16)|0)<(f|0)){continue}break}q[e+272>>2]=a;return 0}ja(2454,2474,101);G()}ja(2454,2474,94);G()}function dd(a,b,c,d,e){var f=x(0),g=0,h=0,i=x(0),j=0,k=0,l=x(0),m=0,n=0,o=x(0),p=x(0),r=x(0),s=x(0),t=x(0),v=x(0),w=x(0),y=x(0);g=ca-48|0;ca=g;k=c>>1;j=q[a>>2];if((c|0)>=4){m=(k|0)>2?k:2;h=1;while(1){n=h<<3;e=n+j|0;u[(h<<2)+b>>2]=x(u[e>>2]+x(x(u[e-4>>2]+u[(n|4)+j>>2])*x(.5)))*x(.5);h=h+1|0;if((m|0)!=(h|0)){continue}break}}f=x(x(x(u[j+4>>2]*x(.5))+u[j>>2])*x(.5));u[b>>2]=f;if((d|0)==2){a=q[a+4>>2];if((c|0)>=4){d=(k|0)>2?k:2;h=1;while(1){j=(h<<2)+b|0;e=j;i=u[j>>2];j=h<<3;m=j+a|0;u[e>>2]=i+x(x(u[m>>2]+x(x(u[m-4>>2]+u[a+(j|4)>>2])*x(.5)))*x(.5));h=h+1|0;if((d|0)!=(h|0)){continue}break}}u[b>>2]=f+x(x(x(u[a+4>>2]*x(.5))+u[a>>2])*x(.5))}h=0;ed(b,g+16|0,0,0,4,k);u[g+16>>2]=u[g+16>>2]*x(1.000100016593933);f=u[g+20>>2];u[g+20>>2]=f-x(x(f*x(.00800000037997961))*x(.00800000037997961));f=u[g+24>>2];u[g+24>>2]=f-x(x(f*x(.01600000075995922))*x(.01600000075995922));f=u[g+28>>2];u[g+28>>2]=f-x(x(f*x(.024000000208616257))*x(.024000000208616257));f=u[g+32>>2];u[g+32>>2]=f-x(x(f*x(.03200000151991844))*x(.03200000151991844));gd(g,g+16|0,4);if((c|0)>=2){f=x(u[g+12>>2]*x(.6560999155044556));i=x(u[g+8>>2]*x(.7289999127388));r=x(f+x(i*x(.800000011920929)));l=i;i=x(u[g+4>>2]*x(.809999942779541));s=x(l+x(i*x(.800000011920929)));l=i;i=x(u[g>>2]*x(.8999999761581421));t=x(l+x(i*x(.800000011920929)));v=x(f*x(.800000011920929));w=x(i+x(.800000011920929));f=x(0);i=x(0);while(1){a=(h<<2)+b|0;l=u[a>>2];u[a>>2]=x(v*y)+x(x(r*o)+x(x(s*p)+x(x(t*f)+x(x(w*i)+l))));y=o;o=p;p=f;f=i;i=l;h=h+1|0;if((k|0)!=(h|0)){continue}break}}ca=g+48|0}function Tb(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,q=0;m=(c<<1)+b|0;k=c-1|0;l=(k<<1)+a|0;q=(c|0)<2;a:{while(1){g=p[a>>1];h=p[b>>1];f=g-h|0;d=1;e=0;if(!q){while(1){i=g<<16;j=d<<1;g=p[j+a>>1];j=(g-(i>>16)|0)-p[b+j>>1]|0;i=(j|0)<(f|0);f=i?j:f;e=i?d:e;d=d+1|0;if((d|0)!=(c|0)){continue}break}}i=p[m>>1];g=32768-(i+p[l>>1]|0)|0;d=(g|0)<(f|0);if(((d?g:f)|0)>-1){break a}g=d?c:e;b:{if(!g){p[a>>1]=h;break b}c:{d:{if((c|0)!=(g|0)){if((g|0)>=1){break d}h=0;break c}p[l>>1]=-32768-i;break b}d=1;if((g|0)==1){break c}while(1){h=p[(d<<1)+b>>1]+h|0;d=d+1|0;if((g|0)!=(d|0)){continue}break}}e=h;j=g<<1;n=j+b|0;h=p[n>>1]>>1;f=e+h|0;e=32768;e:{if((c|0)<=(g|0)){break e}e=32768-i|0;d=k;if((g|0)>=(d|0)){break e}while(1){e=e-p[(d<<1)+b>>1]|0;d=d-1|0;if((g|0)<(d|0)){continue}break}}i=a+j|0;j=(g-1<<1)+a|0;d=p[i>>1]+p[j>>1]|0;g=(d>>1)+(d&1)|0;d=e-h|0;f:{if((d|0)<(f|0)){e=f;if((g|0)>(f|0)){break f}e=(d|0)>(g|0)?d:g;break f}e=d;if((d|0)<(g|0)){break f}e=(g|0)<(f|0)?f:g}e=e-h|0;p[j>>1]=e;p[i>>1]=e+s[n>>1]}o=o+1|0;if((o|0)!=20){continue}break}Hd(a,c);e=p[a>>1];d=p[b>>1];f=(d|0)<(e|0)?e:d;p[a>>1]=f;k=(c|0)<2;if(!k){d=1;while(1){g=d<<1;h=g+a|0;e=p[h>>1];f=p[b+g>>1]+(f<<16>>16)|0;f=(f|0)<32767?f:32767;f=(f|0)>-32768?f:-32768;f=(e|0)>(f|0)?e:f;p[h>>1]=f;d=d+1|0;if((d|0)!=(c|0)){continue}break}}e=p[l>>1];d=32768-p[m>>1]|0;f=(d|0)>(e|0)?e:d;p[l>>1]=f;if(k){break a}d=c-2|0;while(1){e=d<<1;k=e+a|0;c=p[k>>1];e=(f<<16>>16)-p[(b+e|0)+2>>1]|0;f=(c|0)<(e|0)?c:e;p[k>>1]=f;c=(d|0)>0;d=d-1|0;if(c){continue}break}}}function kg(a,b,c,d){var e=x(0),f=0,g=0,h=0,i=x(0),j=0,k=x(0),l=0,m=0,n=0,o=0,p=0,q=x(0),r=x(0),s=x(0);if(!(!d|!a|((b|0)<1|(c|0)<1))){h=w(b,c);if((h|0)>=1){while(1){l=(g<<2)+a|0;e=u[l>>2];f=e>x(2);j=l;l=(f?x(2):e)>2]=f?i:l?i:e;g=g+1|0;if((h|0)!=(g|0)){continue}break}}while(1){f=o<<2;m=f+a|0;p=d+f|0;i=u[p>>2];g=0;while(1){f=(w(c,g)<<2)+m|0;e=u[f>>2];k=x(i*e);if(!(k>=x(0))){u[f>>2]=e+x(e*k);g=g+1|0;if((g|0)!=(b|0)){continue}}break}r=u[m>>2];f=0;while(1){a:{l=f;b:{h=f;if((f|0)>=(b|0)){break b}while(1){e=u[(w(c,h)<<2)+m>>2];if(e>x(1)|e>31&h;i=u[(w(c,h)<<2)+m>>2];e=x(y(i));f=h;while(1){c:{g=f;if((f|0)<1){g=j;break c}f=g-1|0;if(x(i*u[(w(f,c)<<2)+m>>2])>=x(0)){continue}}break}f=h;d:{if((f|0)>=(b|0)){break d}while(1){k=u[(w(c,f)<<2)+m>>2];if(x(i*k)>=x(0)^1){break d}k=x(y(k));j=k>e;h=j?f:h;e=j?k:e;f=f+1|0;if((f|0)!=(b|0)){continue}break}f=b}j=0;j=g?j:x(i*u[m>>2])>=x(0);e=x(x(e+x(-1))/x(e*e));e=x(e+x(e*x(2.399999914359796e-7)));e=i>x(0)?x(-e):e;if((f|0)>(g|0)){while(1){n=(w(c,g)<<2)+m|0;i=u[n>>2];u[n>>2]=i+x(i*x(e*i));g=g+1|0;if((g|0)!=(f|0)){continue}break}}if(!(j^1|(h|0)<2|(h|0)<=(l|0))){i=x(r-u[m>>2]);s=x(i/x(h|0));while(1){i=x(i-s);j=(w(c,l)<<2)+m|0;k=x(i+u[j>>2]);g=k>x(1);n=j;j=(g?x(1):k)>2]=g?q:j?q:k;l=l+1|0;if((l|0)!=(h|0)){continue}break}}if((b|0)!=(f|0)){continue}}break}u[p>>2]=e;o=o+1|0;if((o|0)!=(c|0)){continue}break}}}function Qa(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(b>>>0>1){k=b-1|0;a:{if(k>>>0>=256){d=q[a+28>>2];i=24-z(k)|0;c=k>>>i|0;g=c+1|0;b=(d>>>0)/(g>>>0)|0;q[a+36>>2]=b;f=q[a+32>>2];j=(f>>>0)/(b>>>0)|0;e=j+1|0;g=e-g|0;l=(g>>>0>e>>>0?0:g)+(c-j|0)|0;c=w(b,c-l|0);h=f-c|0;q[a+32>>2]=h;c=l?b:d-c|0;q[a+28>>2]=c;if(c>>>0<=8388608){d=q[a+24>>2];g=q[a+40>>2];f=q[a+20>>2];m=q[a+4>>2];while(1){j=c<<8;q[a+28>>2]=j;f=f+8|0;q[a+20>>2]=f;b=0;if(d>>>0>>0){e=d+1|0;q[a+24>>2]=e;b=r[q[a>>2]+d|0];d=e}q[a+40>>2]=b;h=((g<<8|b)>>>1&255|h<<8&2147483392)^255;q[a+32>>2]=h;e=c>>>0<32769;g=b;c=j;if(e){continue}break}}j=l<>2];b=q[a+16>>2];b:{if(i>>>0<=b>>>0){f=b;break b}c=q[a+8>>2];d=q[a+4>>2];while(1){if(c>>>0>>0){c=c+1|0;q[a+8>>2]=c;e=r[q[a>>2]+(d-c|0)|0]}else{e=0}h=e<>2]=f-i;q[a+12>>2]=h>>>i;q[a+20>>2]=i+q[a+20>>2];i=j|(-1<>>0>=i>>>0){break a}q[a+44>>2]=1;return k}g=q[a+28>>2];c=(g>>>0)/(b>>>0)|0;q[a+36>>2]=c;f=q[a+32>>2];j=(f>>>0)/(c>>>0)|0;e=j+1|0;d=e-b|0;i=((j^-1)+b|0)+(d>>>0>e>>>0?0:d)|0;b=w(c,(i^-1)+b|0);h=f-b|0;q[a+32>>2]=h;c=i?c:g-b|0;q[a+28>>2]=c;if(c>>>0>8388608){break a}d=q[a+24>>2];g=q[a+40>>2];f=q[a+20>>2];k=q[a+4>>2];while(1){j=c<<8;q[a+28>>2]=j;f=f+8|0;q[a+20>>2]=f;b=0;if(d>>>0>>0){e=d+1|0;q[a+24>>2]=e;b=r[q[a>>2]+d|0];d=e}q[a+40>>2]=b;h=((g<<8|b)>>>1&255|h<<8&2147483392)^255;q[a+32>>2]=h;e=c>>>0<32769;g=b;c=j;if(e){continue}break}}return i}ja(6759,6783,203);G()}function Jf(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,s=0,t=0,u=0;g=ca-144|0;ca=g;q[g+12>>2]=g+16;q[g+8>>2]=g+80;i=c>>1;Pc(b,g+80|0,g+16|0,i);l=g+80|0;r=p[688];d=Ea(g+80|0,r,i);if((d|0)<=-1){p[a>>1]=0;l=g+16|0;m=1;d=Ea(g+16|0,r,i)}a:while(1){j=1;e=0;n=r;while(1){b:{c:{d:{e:{o=(d|0)>0;u=(j<<1)+1376|0;f=p[u>>1];s=Ea(l,f,i);if(!((d|0)<0|(0-e|0)<(s|0)?!((s|0)>=(e|0)?!o:0):0)){k=-256;e=f+n|0;h=(e>>1)+(e&1)|0;e=Ea(l,h,i);f:{if(!((e|0)<=-1|o)){f=h;break f}if(!((d|0)<0|(e|0)>=1)){f=h;break f}k=-128;n=h;d=e;e=s}h=f+n|0;h=(h>>1)+(h&1)|0;o=Ea(l,h,i);if((o|0)<=-1|(d|0)>0){break e}break d}h=(j|0)<128;e=0;n=f;d=s;j=j+1|0;if(h){continue}if(t>>>0>=16){j=1;b=32768/(c+1|0)|0;p[a>>1]=b;if((c|0)<2){break b}d=b;while(1){d=b+d|0;p[(j<<1)+a>>1]=d;j=j+1|0;if((j|0)!=(c|0)){continue}break}break b}sb(b,c,(-2<-1){continue a}p[a>>1]=0;m=1;l=g+16|0;d=Ea(g+16|0,r,i);t=e;continue a}if((o|0)<1?(d|0)>=0:0){break d}k=k|64;n=h;d=o;break c}f=h;e=o}f=f+n|0;f=Ea(l,(f>>1)+(f&1)|0,i);g:{if(!((f|0)<=-1|(d|0)>0)){e=f;break g}if(!((d|0)<0|(f|0)>=1)){e=f;break g}k=k+32|0;d=f}f=d-e|0;e=d>>31;h:{if((e+d^e)>>>0>=65536){k=((d|0)/(f>>5)|0)+k|0;break h}if(!f){break h}k=(((d<<5)+(f>>1)|0)/(f|0)|0)+k|0}e=(j<<8)+k|0;p[(m<<1)+a>>1]=(e|0)<32767?e:32767;m=m+1|0;if((m|0)>=(c|0)){break b}e=!s;d=4096-(m<<12&8192)|0;n=p[u-2>>1];l=q[(g+8|0)+((m&1)<<2)>>2];continue}break}break}ca=g+144|0}function wc(a,b,c,d,e,f,g,h,i){var j=x(0),k=0,l=x(0),m=x(0),n=x(0),o=x(0),p=x(0),q=0,r=x(0),s=x(0),t=0;k=ca;q=k;if(!e){ca=q;return x(0)}a:{if((i|0)==48e3){f=f<<1;e=e<<1;break a}if((i|0)!=16e3){break a}f=(f<<1)/3|0;e=(e<<1)/3|0}k=k-((e<<2)+15&-16)|0;t=k;ca=k;ea[a|0](b,k,e,f,0,g,h);l=(g|0)==-2?x(x(30517578125e-15)/x(h|0)):(g|0)>-1?x(152587890625e-16):x(30517578125e-15);if((e|0)>=1){g=0;while(1){a=k+(g<<2)|0;u[a>>2]=l*u[a>>2];g=g+1|0;if((g|0)!=(e|0)){continue}break}}b:{if((i|0)==48e3){l=x(0);if((e|0)<2){break b}a=(e|0)/2|0;g=0;while(1){b=g<<3;j=u[b+k>>2];m=u[d>>2];n=x(x(j-m)*x(.6074370741844177));u[d>>2]=j+n;j=u[k+(b|4)>>2];o=u[d+4>>2];p=x(x(j-o)*x(.15062999725341797));u[d+4>>2]=j+p;r=u[d+8>>2];s=x(x(x(-j)-r)*x(.15062999725341797));u[d+8>>2]=s-j;j=x(m+n);u[(g<<2)+c>>2]=x(x(o+j)+p)*x(.5);m=l;l=x(x(j+r)+s);l=x(m+x(l*l));g=g+1|0;if((a|0)!=(g|0)){continue}break}break b}l=x(0);if((i|0)!=16e3){if((i|0)!=24e3){break b}ka(c,k,e<<2);break b}b=w(e,3);a=t-((b<<2)+15&-16)|0;ca=a;if((e|0)>=1){g=0;while(1){f=a+w(g,12)|0;j=u[k+(g<<2)>>2];u[f+8>>2]=j;u[f+4>>2]=j;u[f>>2]=j;g=g+1|0;if((g|0)!=(e|0)){continue}break}}e=(b|0)/2|0;if((b|0)>=2){g=0;while(1){b=g<<3;j=u[b+a>>2];m=u[d>>2];n=x(x(j-m)*x(.6074370741844177));u[d>>2]=j+n;j=u[a+(b|4)>>2];o=u[d+4>>2];p=x(x(j-o)*x(.15062999725341797));u[d+4>>2]=j+p;u[d+8>>2]=x(x(x(-j)-u[d+8>>2])*x(.15062999725341797))-j;u[(g<<2)+c>>2]=x(x(o+x(m+n))+p)*x(.5);g=g+1|0;if((e|0)!=(g|0)){continue}break}}}ca=q;return l}function Ff(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,t=0,u=0,v=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0;h=ca-128|0;l=h;ca=h;if(g>>>0<3){Tb(b,q[c+36>>2],p[c+2>>1]);h=h-((s[c>>1]<<2)+15&524272)|0;ca=h;Hf(h,b,q[c+8>>2],q[c+12>>2],p[c>>1],p[c+2>>1]);m=(f<<2)+15&-16;u=h-m|0;i=u;ca=i;Ub(h,i,p[c>>1],f);v=i-m|0;h=v;ca=h;x=h-(f<<4)|0;ca=x;if((f|0)>=1){C=g>>>1|0;D=e<<14>>16;m=0;while(1){A=m<<2;t=q[A+u>>2];y=p[c+2>>1];if((y|0)>=1){g=w(t,y);E=g+q[c+8>>2]|0;F=q[c+12>>2]+(g<<1)|0;g=0;while(1){h=g<<1;i=p[h+F>>1];p[h+(l+80|0)>>1]=w(i,s[b+h>>1]-(r[g+E|0]<<7)<<16>>16)>>>14;j=p[d+h>>1];k=j>>31;i=w(i,i);n=z(i);B=z(k^k+j);j=j<>16)<<16>>16;j=(w(i,j&65535)>>16)+w(i,j>>16)|0;k=yg(j,j>>31,k,k>>31);k=H-(((da&536870911)<<3|k>>>29)&-8)|0;i=(w(k>>16,i)+j|0)+(w(i,k&65535)>>16)|0;j=h+(l+48|0)|0;h=(B-n|0)+29|0;a:{if((h|0)<=20){h=21-h|0;k=2147483647>>>h|0;n=-2147483648>>h;h=((i|0)>(k|0)?k:(i|0)<(n|0)?n:i)<>h-21:0}p[j>>1]=h;g=g+1|0;if((y|0)!=(g|0)){continue}break}}ab(l,l+32|0,c,t);h=v+A|0;I=h,J=Gf((m<<4)+x|0,l+80|0,l+48|0,l+32|0,l,q[c+32>>2],p[c+4>>1],p[c+6>>1],e,p[c+2>>1]),q[I>>2]=J;g=q[c+16>>2]+w(p[c>>1],C)|0;i=h;if(t){g=g+t|0;j=r[g-1|0]}else{j=256}I=i,J=w(67108864-(pa(j-r[g|0]|0)<<16)>>16,D)+q[h>>2]|0,q[I>>2]=J;m=m+1|0;if((m|0)!=(f|0)){continue}break}}Ub(v,l+124|0,f,1);d=q[l+124>>2];o[a|0]=q[(d<<2)+u>>2];ka(a+1|0,(d<<4)+x|0,p[c+2>>1]);Sb(b,a,c);ca=l+128|0;return}ja(37560,37613,63);G()}function lb(a,b,c,d,e){var f=0,g=0,h=x(0),i=x(0),j=x(0),k=0,l=x(0),m=x(0),n=x(0),o=x(0),p=x(0),q=0,r=0,s=x(0),t=0,v=x(0),w=x(0),y=x(0),z=x(0),A=x(0),B=0,C=0,D=x(0),E=0,F=0,H=0;if((e|0)>=1){a:{if((e|0)<4){break a}if((d|0)>=3){t=e-3|0;E=d-3|0;F=(d|0)==3;B=d&-4;C=B|1;H=(C+1|0)>=(d|0);while(1){r=q<<2;f=r+b|0;g=f+12|0;i=u[f+8>>2];j=u[f+4>>2];s=u[f>>2];l=x(0);m=x(0);n=x(0);o=x(0);f=a;k=0;p=x(0);if(!F){while(1){v=u[f>>2];p=u[g>>2];w=u[f+4>>2];h=u[g+4>>2];y=u[f+8>>2];A=u[g+8>>2];z=u[f+12>>2];D=u[g+12>>2];l=x(x(x(x(l+x(v*p))+x(w*h))+x(y*A))+x(z*D));m=x(x(x(x(m+x(i*v))+x(p*w))+x(h*y))+x(A*z));n=x(x(x(x(n+x(j*v))+x(i*w))+x(p*y))+x(h*z));o=x(x(x(x(o+x(s*v))+x(j*w))+x(i*y))+x(p*z));g=g+16|0;f=f+16|0;s=h;i=D;j=A;k=k+4|0;if((E|0)>(k|0)){continue}break}}if(!((d|0)<=(B|0))){h=u[f>>2];p=u[g>>2];l=x(l+x(h*p));m=x(m+x(i*h));n=x(n+x(j*h));o=x(o+x(s*h));g=g+4|0;f=f+4|0}k=f;f=g;if(!((d|0)<=(C|0))){h=u[k>>2];s=u[f>>2];l=x(l+x(h*s));m=x(m+x(p*h));n=x(n+x(i*h));o=x(o+x(j*h));k=k+4|0;f=f+4|0}g=f;f=c+r|0;if(!H){j=u[k>>2];l=x(l+x(j*u[g>>2]));n=x(n+x(p*j));m=x(m+x(s*j));o=x(o+x(i*j))}u[f>>2]=o;u[(r|4)+c>>2]=n;u[(r|8)+c>>2]=m;u[(r|12)+c>>2]=l;q=q+4|0;if((t|0)>(q|0)){continue}break}break a}ja(31680,31705,69);G()}if((e|0)>(q|0)){k=(d|0)<1;while(1){f=q<<2;i=x(0);if(!k){r=b+f|0;g=0;while(1){t=g<<2;i=x(i+x(u[t+a>>2]*u[r+t>>2]));g=g+1|0;if((g|0)!=(d|0)){continue}break}}u[c+f>>2]=i;q=q+1|0;if((q|0)!=(e|0)){continue}break}}return}ja(31549,31579,251);G()}function vc(a,b,c){var d=x(0),e=x(0),f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=q[a+12>>2];a:{if((h|0)<1){break a}i=q[a+8>>2];g=q[a>>2];while(1){u[(f<<2)+b>>2]=o[f+g|0];f=f+1|0;if((h|0)!=(f|0)){continue}break}if((h|0)<1){break a}k=q[a+4>>2];g=0;l=(i|0)<1;while(1){if(!l){j=(g<<2)+b|0;d=u[j>>2];f=0;while(1){d=x(d+x(u[(f<<2)+c>>2]*x(o[(w(f,h)+g|0)+k|0])));u[j>>2]=d;f=f+1|0;if((i|0)!=(f|0)){continue}break}}g=g+1|0;if((g|0)!=(h|0)){continue}break}if((h|0)<1){break a}f=0;while(1){c=(f<<2)+b|0;u[c>>2]=u[c>>2]*x(.0078125);f=f+1|0;if((h|0)!=(f|0)){continue}break}}b:{if(q[a+16>>2]){f=0;if((h|0)<=0){break b}while(1){c=(f<<2)+b|0;d=x(u[c>>2]*x(.5));e=x(1);c:{if(dx(-8)^1){break c}e=x(.5);if(d!=d){break c}g=d>2];e=x(e+x(x(a|0)*x(-.03999999910593033)));d=x(d+x(x(x(1)-x(d*e))*x(e*x(x(1)-x(d*d)))));e=x(x((g?x(-d):d)*x(.5))+x(.5))}u[c>>2]=e;f=f+1|0;if((h|0)!=(f|0)){continue}break}break b}f=0;if((h|0)<=0){break b}while(1){c=(f<<2)+b|0;d=u[c>>2];e=x(1);e:{if(dx(-8)^1){break e}e=x(0);if(d!=d){break e}g=d>2];e=x(e+x(x(a|0)*x(-.03999999910593033)));d=x(d+x(x(x(1)-x(d*e))*x(e*x(x(1)-x(d*d)))));e=g?x(-d):d}u[c>>2]=e;f=f+1|0;if((h|0)!=(f|0)){continue}break}}}function Qb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var p=0,s=x(0),t=0,v=x(0),A=0,D=x(0),E=x(0),F=x(0),G=0,H=x(0),I=x(0),J=x(0),K=0,L=0,M=0,N=0,O=0,P=0,Q=0;p=ca-16|0;ca=p;q[p+8>>2]=0;q[p+12>>2]=0;if((g+3|0)<=(f|0)){va(j,m,3)}if(m){D=x(.149993896484375)}else{g=l<<2;J=u[g+25216>>2];D=u[g+25232>>2]}g=0;if((b|0)<(c|0)){K=(k|0)>1?k:1;L=w(k,3);M=f+32|0;f=q[a+8>>2];l=b;while(1){N=(o|0)!=0&(l|0)>1;O=w(l-c|0,L);k=((l|0)<20?l:20)<<1;P=k+h|0;Q=(k|1)+h|0;k=0;while(1){f=w(f,k)+l<<2;s=u[f+d>>2];v=u[e+f>>2];E=x(x(B(v,x(-28)))-n);f=s>2];H=x(x(s-F)-v);I=x(C(x(H+x(.5))));a:{if(x(y(I))-1)){s=x(E-s);b:{if(x(y(s))>31&f}q[p+4>>2]=m;t=(M-q[j+20>>2]|0)-z(q[j+28>>2])|0;f=m;c:{if((b|0)==(l|0)){break c}A=t+O|0;if((A|0)>23){break c}f=(m|0)<1?m:1;q[p+4>>2]=f;if((A|0)>15){break c}f=(f|0)>-1?f:-1;q[p+4>>2]=f}if(N){f=f>>31&f;q[p+4>>2]=f}d:{if((t|0)>=15){Ad(j,p+4|0,r[P|0]<<7,r[Q|0]<<6);break d}if((t|0)>=2){f=(f|0)<1?f:1;f=(f|0)>-1?f:-1;q[p+4>>2]=f;ma(j,f<<1^f>>31,25248,2);break d}if((t|0)==1){f=f>>31&f;q[p+4>>2]=f;va(j,0-f|0,1);break d}q[p+4>>2]=-1}f=q[a+8>>2];t=w(k,f)+l<<2;A=q[p+4>>2];s=x(A|0);u[t+i>>2]=H-s;u[e+t>>2]=x(v+F)+s;u[G>>2]=x(v+s)-x(D*s);t=m-A|0;m=t>>31;g=(m^m+t)+g|0;k=k+1|0;if((K|0)!=(k|0)){continue}break}l=l+1|0;if((l|0)!=(c|0)){continue}break}}ca=p+16|0;return o?0:g}function rf(a,b,c){var d=0,e=0,f=0,g=x(0),h=0,i=0,j=x(0),k=0;h=ca-16|0;ca=h;a:{if(r[a+4765|0]!=2){f=q[a+4580>>2];break a}i=Da(+x(x(u[b+708>>2]+x(-12))*x(-.25)));f=q[a+4580>>2];if((f|0)<1){break a}g=x(x(x(1/(i+1))*x(-.5))+x(1));while(1){e=(d<<2)+b|0;u[e>>2]=g*u[e>>2];d=d+1|0;if((f|0)!=(d|0)){continue}break}}d=0;e=q[a+4588>>2];i=Ab(+x(x(x(x(q[a+4716>>2])*x(-.0078125))+x(21))*x(.33000001311302185)));b:{if((f|0)<=0){break b}j=x(i/+(e|0));while(1){e=(d<<2)+b|0;g=u[e>>2];g=x(F(x(x(g*g)+x(u[e+712>>2]*j))));u[e>>2]=g>2]*x(65536));c:{if(x(y(g))>2]=e;d=d+1|0;if((f|0)!=(d|0)){continue}break}}ka(b+728|0,h,f<<2);o[b+744|0]=r[a+7168|0];Xb(a+4736|0,h,a+7168|0,(c|0)==2,q[a+4580>>2]);c=q[a+4580>>2];if((c|0)>=1){d=0;while(1){f=d<<2;u[f+b>>2]=x(q[f+h>>2])*x(152587890625e-16);d=d+1|0;if((c|0)!=(d|0)){continue}break}}c=r[a+4765|0];d:{if((c|0)!=2){d=o[a+4766|0];break d}d=x(u[b+708>>2]+x(x(q[a+4712>>2])*x(30517578125e-15)))>x(1)^1;o[a+4766|0]=d}u[b+692>>2]=x(x(x(p[((c<<24>>24<<1&-4)+6416|0)+(d<<1)>>1])*x(.0009765625))*x(.800000011920929))+x(x(x(x(x(x(q[a+4628>>2])*x(-.05000000074505806))+x(1.2000000476837158))+x(x(x(q[a+4532>>2])*x(.20000000298023224))*x(-.00390625)))+x(u[b+696>>2]*x(-.10000000149011612)))-x(u[b+700>>2]*x(.20000000298023224)));ca=h+16|0}function Wf(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;e=ca-32|0;ca=e;l=q[a+12>>2];if(l){m=q[a+8>>2];d=m<<10;f=262144-d|0;a:{if((f|0)<=262143){f=f>>16;d=0-d&64512;if(d){i=f+1|0;if(d>>>0>=32768){d=d<<16>>16;g=w(i,12)+6464|0;j=q[g+8>>2];h=w(f,12)+6464|0;k=j-q[h+8>>2]|0;q[e+24>>2]=(w(d,k>>16)+j|0)+(w(d,k&65535)>>16);j=q[g+4>>2];k=j-q[h+4>>2]|0;q[e+20>>2]=(w(d,k>>16)+j|0)+(w(d,k&65535)>>16);g=q[g>>2];h=g-q[h>>2]|0;q[e+16>>2]=(w(d,h>>16)+g|0)+(w(d,h&65535)>>16);i=(i<<3)+6528|0;g=q[i+4>>2];f=(f<<3)+6528|0;h=g-q[f+4>>2]|0;q[e+12>>2]=(w(d,h>>16)+g|0)+(w(d,h&65535)>>16);i=q[i>>2];f=i-q[f>>2]|0;q[e+8>>2]=(w(d,f>>16)+i|0)+(w(d,f&65535)>>16);break a}g=w(i,12)+6464|0;h=w(f,12)+6464|0;j=q[h+8>>2];k=q[g+8>>2]-j|0;q[e+24>>2]=w(d,k>>16)+j+(w(d,k&65535)>>>16);j=q[h+4>>2];k=q[g+4>>2]-j|0;q[e+20>>2]=w(d,k>>16)+j+(w(d,k&65535)>>>16);j=q[g>>2];g=q[h>>2];h=j-g|0;q[e+16>>2]=w(d,h>>16)+g+(w(d,h&65535)>>>16);i=(i<<3)+6528|0;f=(f<<3)+6528|0;g=q[f+4>>2];h=q[i+4>>2]-g|0;q[e+12>>2]=w(d,h>>16)+g+(w(d,h&65535)>>>16);f=q[f>>2];i=q[i>>2]-f|0;q[e+8>>2]=w(d,i>>16)+f+(w(d,i&65535)>>>16);break a}d=w(f,12)+6464|0;q[e+24>>2]=q[d+8>>2];i=q[d+4>>2];q[e+16>>2]=q[d>>2];q[e+20>>2]=i;d=(f<<3)+6528|0;f=q[d+4>>2];q[e+8>>2]=q[d>>2];q[e+12>>2]=f;break a}q[e+24>>2]=q[1630];d=q[1629];q[e+16>>2]=q[1628];q[e+20>>2]=d;d=q[1641];q[e+8>>2]=q[1640];q[e+12>>2]=d}d=l+m|0;d=(d|0)>0?d:0;q[a+8>>2]=(d|0)<256?d:256;Xf(b,e+16|0,e+8|0,a,b,c)}ca=e+32|0}function Dd(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,t=0,u=0;g=s[a+4>>1]|s[a+6>>1]<<16;p[b>>1]=g;p[b+2>>1]=g>>>16;g=s[a+8>>1]|s[a+10>>1]<<16;p[c>>1]=g;p[c+2>>1]=g>>>16;g=f<<1;i=g+b|0;i=s[i>>1]|s[i+2>>1]<<16;p[a+4>>1]=i;p[a+6>>1]=i>>>16;g=c+g|0;g=s[g>>1]|s[g+2>>1]<<16;p[a+8>>1]=g;p[a+10>>1]=g>>>16;g=e<<3;h=65536/(g|0)|0;i=q[d+4>>2];n=q[d>>2];if((e|0)>=1){d=h<<16>>16;k=s[a+2>>1];r=(w(d,i-k<<16>>16)>>15)+1>>1;h=s[a>>1];t=(w(d,n-h<<16>>16)>>15)+1>>1;u=(g|0)>1?g:1;d=0;while(1){e=d+1|0;m=e<<1;j=m+c|0;d=(d<<1)+b|0;l=p[d+4>>1]+p[d>>1]|0;d=p[b+m>>1];m=l+(d<<1)|0;l=j;k=k+r|0;o=k<<16>>16;j=(w(o,d>>5)+(p[j>>1]<<8)|0)+(w(d<<11&63488,o)>>16)|0;h=h+t|0;d=h<<16>>16;d=(j+w(d,m>>7)|0)+(w(d,m<<9&65024)>>16)|0;j=(d>>7)+1>>1;p[l>>1]=(d|0)>8388479?32767:(j|0)>-32768?j:-32768;d=e;if((u|0)!=(d|0)){continue}break}}if((f|0)>(g|0)){d=i<<16>>16;e=n<<16>>16;while(1){h=g<<1;g=g+1|0;j=g<<1;k=j+c|0;h=b+h|0;l=p[h+4>>1]+p[h>>1]|0;h=p[b+j>>1];j=l+(h<<1)|0;l=k;k=(((w(d,h>>5)+(p[k>>1]<<8)|0)+(w(d,h<<11&63488)>>16)|0)+w(e,j>>7)|0)+(w(e,j<<9&65024)>>16)|0;h=(k>>7)+1>>1;p[l>>1]=(k|0)>8388479?32767:(h|0)>-32768?h:-32768;if((f|0)!=(g|0)){continue}break}}p[a+2>>1]=i;p[a>>1]=n;if((f|0)>=1){g=0;while(1){g=g+1|0;d=g<<1;e=d+b|0;a=p[e>>1];j=e;d=c+d|0;e=p[d>>1];i=e+a|0;i=(i|0)<32767?i:32767;p[j>>1]=(i|0)>-32768?i:-32768;a=a-e|0;a=(a|0)<32767?a:32767;p[d>>1]=(a|0)>-32768?a:-32768;if((f|0)!=(g|0)){continue}break}}}function rd(a,b,c,d){var e=0,f=x(0),g=x(0),h=0,i=0,j=x(0),k=0,l=0,m=x(0),n=x(0),o=x(0),p=0,r=0,s=0,t=x(0),v=x(0);s=ca;h=(d<<2)+15&-16;e=s-h|0;ca=e;p=e-h|0;ca=p;k=(d|0)>1?d:1;l=la(e,0,k<<2);e=0;while(1){h=e<<2;i=h+a|0;f=u[i>>2];q[h+p>>2]=f>2]=y(f);q[b+h>>2]=0;e=e+1|0;if((k|0)!=(e|0)){continue}break}f=x(0);if(d>>1<(c|0)){e=0;while(1){f=x(f+u[(e<<2)+a>>2]);e=e+1|0;if((k|0)!=(e|0)){continue}break}g=x(x(c|0)+x(.800000011920929));if(!(fx(1.0000000036274937e-15)^1):0)){q[a>>2]=1065353216;la(a+4|0,0,(((d|0)>2?d:2)<<2)-4|0);f=x(1)}m=x(g*x(x(1)/f));h=0;f=x(0);while(1){i=h<<2;r=i+b|0;n=u[a+i>>2];g=x(C(x(m*n)));a:{if(x(y(g))>2]=e;g=x(e|0);u[i+l>>2]=g+g;j=x(j+x(n*g));c=c-e|0;f=x(f+x(g*g));h=h+1|0;if((k|0)!=(h|0)){continue}break}}b:{if((d+3|0)<(c|0)){j=u[l>>2];q[b>>2]=q[b>>2]+c;o=f;f=x(c|0);f=x(x(o+x(f*f))+x(j*f));break b}if((c|0)<1){break b}r=(d|0)>2?d:2;n=u[a>>2];d=0;while(1){m=x(f+x(1));f=x(m+u[l>>2]);g=x(j+n);g=x(g*g);e=1;h=0;while(1){i=e<<2;t=x(m+u[i+l>>2]);o=f;f=x(j+u[a+i>>2]);v=x(f*f);i=x(o*v)>x(g*t);f=i?t:o;g=i?v:g;h=i?e:h;e=e+1|0;if((r|0)!=(e|0)){continue}break}e=h<<2;g=u[e+a>>2];h=e+l|0;f=u[h>>2];u[h>>2]=f+x(2);e=b+e|0;q[e>>2]=q[e>>2]+1;f=x(m+f);j=x(j+g);d=d+1|0;if((d|0)!=(c|0)){continue}break}}e=0;while(1){a=e<<2;c=a+b|0;a=q[a+p>>2];q[c>>2]=(q[c>>2]^0-a)+a;e=e+1|0;if((k|0)!=(e|0)){continue}break}ca=s;return f}function hf(a,b,c,d){var e=0,f=0,g=0;e=ca-32|0;ca=e;g=-1;a:{b:{if((b|0)<=15999){if((b|0)==8e3|(b|0)==12e3){break b}break a}if((b|0)==16e3|(b|0)==48e3){break b}if((b|0)!=24e3){break a}}if(c-1>>>0>1){break a}f=d-2048|0;if(f>>>0>3|(f|0)==2){break a}q[e+28>>2]=20216;q[e+28>>2]=q[e+28>>2]+3&-4;a=la(a,0,(q[e+28>>2]+w(((q[2442]<<2)+(q[2443]<<4)|0)+4096|0,c)|0)+18384|0);q[e+28>>2]=20216;g=q[e+28>>2]+3&-4;q[e+28>>2]=g;q[a+14192>>2]=c;q[a+112>>2]=c;q[a+4>>2]=18140;q[a+180>>2]=0;q[a+144>>2]=b;f=g+18140|0;q[a>>2]=f;g=-3;if(Cb(a+18140|0,0,a+8|0)){break a}q[a+8>>2]=c;q[a+12>>2]=c;q[a+76>>2]=0;q[a+56>>2]=0;q[a+60>>2]=0;q[a+44>>2]=9;q[a+48>>2]=0;q[a+36>>2]=25e3;q[a+40>>2]=0;q[a+28>>2]=16e3;q[a+32>>2]=20;q[a+20>>2]=16e3;q[a+24>>2]=8e3;q[a+16>>2]=q[a+144>>2];f=a+f|0;if(of(f,b,c,q[a+180>>2])){break a}g=0;q[e+16>>2]=0;oa(f,10016,e+16|0);q[e>>2]=q[a+44>>2];oa(f,4010,e);q[a+148>>2]=1;q[a+152>>2]=1;q[a+160>>2]=w(b,c)+3e3;q[a+128>>2]=-1e3;q[a+132>>2]=1105;q[a+108>>2]=d;q[a+136>>2]=-1e3;q[a+140>>2]=-1;q[a+120>>2]=-1e3;q[a+124>>2]=-1e3;q[a+164>>2]=-1e3;q[a+168>>2]=24;q[a+156>>2]=5e3;q[a+14204>>2]=1065353216;p[a+14196>>1]=16384;b=q[a+144>>2];q[a+172>>2]=(b|0)/100;q[a+116>>2]=(b|0)/250;b=pa(60);q[a+14252>>2]=1;q[a+14240>>2]=1105;q[a+14224>>2]=1001;q[a+14200>>2]=b<<8;b=a+188|0;q[b+8>>2]=q[a+144>>2];q[b>>2]=0;la(b+12|0,0,13992);q[a+192>>2]=q[a+108>>2]}ca=e+32|0;return g}function sf(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=x(0);f=ca-2064|0;ca=f;a:{b:{h=q[a+4580>>2];c:{if((h|0)>=1){while(1){i=g<<2;u[i+(f+1568|0)>>2]=x(1)/u[b+i>>2];g=g+1|0;if((h|0)!=(g|0)){continue}break}if(r[a+4765|0]==2){break c}if((h|0)<1){break b}e=q[a+4640>>2];g=d-(e<<2)|0;i=q[a+4588>>2];d=0;c=f;while(1){Nf(c,g,u[(f+1568|0)+(d<<2)>>2],e+i|0);i=q[a+4588>>2];g=(i<<2)+g|0;e=q[a+4640>>2];c=(i+e<<2)+c|0;d=d+1|0;h=q[a+4580>>2];if((d|0)<(h|0)){continue}break}break b}if(r[a+4765|0]!=2){break b}}if((q[b+228>>2]+2|0)<=(q[a+4592>>2]-q[a+4640>>2]|0)){g=c;c=b+228|0;Kf(f+1664|0,f+1584|0,g,c,q[a+4588>>2],h);g=b+144|0;xf(g,a+4740|0,a+4768|0,a+4656|0,b+708|0,f+1664|0,f+1584|0,q[a+4588>>2],q[a+4580>>2]);wf(a,b,e);e=d;d=q[a+4640>>2];vf(f,e-(d<<2)|0,g,c,f+1568|0,q[a+4588>>2],q[a+4580>>2],d);break a}ja(38419,38536,62);G()}la(b+144|0,0,w(h,20));q[b+708>>2]=0;q[a+4656>>2]=0}c=a;e=f+1536|0;d=f;if(q[a+4664>>2]){j=x(.009999999776482582)}else{j=u[b+700>>2];j=x(x(x(Ab(+x(u[b+708>>2]/x(3))))/x(1e4))/x(x(j*x(.75))+x(.25)))}uf(c,e,d,j);c=b+16|0;yf(a,c,f+1536|0,a+4500|0);tf(b+712|0,f,c,b,q[a+4588>>2],q[a+4580>>2],q[a+4640>>2]);c=f+1560|0;d=q[c+4>>2];b=a+4524|0;q[b>>2]=q[c>>2];q[b+4>>2]=d;c=f+1552|0;d=q[c+4>>2];b=a+4516|0;q[b>>2]=q[c>>2];q[b+4>>2]=d;c=q[f+1548>>2];b=a+4508|0;q[b>>2]=q[f+1544>>2];q[b+4>>2]=c;b=q[f+1540>>2];q[a+4500>>2]=q[f+1536>>2];q[a+4504>>2]=b;ca=f+2064|0}function fg(a,b,c){var d=0,e=0,f=0;d=ca-48|0;ca=d;f=q[a+4>>2];e=q[a>>2];q[d+44>>2]=c;e=a+e|0;c=-5;a:{b:{switch(b-4009|0){case 0:b=q[d+44>>2];q[d+44>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+52>>2];c=0;break a;case 22:b=q[d+44>>2];q[d+44>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+84>>2];c=0;break a;case 19:q[a+48>>2]=0;q[a+52>>2]=0;q[a+80>>2]=0;q[a+84>>2]=0;q[a+72>>2]=0;q[a+76>>2]=0;b=a- -64|0;q[b>>2]=0;q[b+4>>2]=0;q[a+56>>2]=0;q[a+60>>2]=0;c=0;ua(e,4028,0);rb(a+f|0);q[a+48>>2]=q[a+8>>2];q[b>>2]=q[a+12>>2]/400;break a;case 20:b=q[d+44>>2];q[d+44>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+12>>2];c=0;break a;case 24:b=q[d+44>>2];q[d+44>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}if(q[a+60>>2]==1002){q[d>>2]=b;c=ua(e,4033,d);break a}q[b>>2]=q[a+36>>2];c=0;break a;case 36:b=q[d+44>>2];q[d+44>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+40>>2];c=0;break a;case 25:b=q[d+44>>2];q[d+44>>2]=b+4;c=-1;b=q[b>>2];if(b+32768>>>0>65535){break a}q[a+40>>2]=b;c=0;break a;case 30:b=q[d+44>>2];q[d+44>>2]=b+4;b=q[b>>2];if(!b){c=-1;break a}q[b>>2]=q[a+72>>2];c=0;break a;case 37:a=q[d+44>>2];q[d+44>>2]=a+4;c=-1;a=q[a>>2];if(a>>>0>1){break a}q[d+16>>2]=a;c=ua(e,4046,d+16|0);break a;case 38:break b;default:break a}}a=q[d+44>>2];q[d+44>>2]=a+4;a=q[a>>2];if(!a){c=-1;break a}q[d+32>>2]=a;c=ua(e,4047,d+32|0)}ca=d+48|0;return c}function ad(a,b,c,d,e,f,g,h,i,j,k,l){var m=0,n=0,o=0,p=0,r=0,s=0,t=0,v=0,y=0,z=0;m=ca;y=m;v=q[a+8>>2];p=q[a+4>>2];s=q[a+44>>2];o=s<>2]-(i?0:j)|0;r=1<>2]+((p|0)/2<<2)|0,n,o<<2);if((m|0)<1){break a}d=a- -64|0;j=0;while(1){kb(d,b+(j<<2)|0,q[c>>2]+(w(i,j)<<2)|0,q[a+60>>2],p,t,m);j=j+1|0;if((m|0)!=(j|0)){continue}break}if((m|0)<1){break a}b=a- -64|0;j=0;while(1){kb(b,(j<<2)+n|0,q[c+4>>2]+(w(i,j)<<2)|0,q[a+60>>2],p,t,m);j=j+1|0;if((m|0)!=(j|0)){continue}break}break a}if(!((h|0)==1?(g|0)==2:0)){h=(h|0)>1?h:1;s=a- -64|0;g=0;while(1){_a(a,(w(g,o)<<2)+b|0,n,(w(g,v)<<2)+d|0,e,f,r,k,l);if((m|0)>=1){z=(g<<2)+c|0;j=0;while(1){kb(s,(j<<2)+n|0,q[z>>2]+(w(i,j)<<2)|0,q[a+60>>2],p,t,m);j=j+1|0;if((m|0)!=(j|0)){continue}break}}g=g+1|0;if((h|0)!=(g|0)){continue}break}break a}g=q[c>>2];_a(a,b,n,d,e,f,r,k,l);h=(o<<2)+b|0;b=g+((p|0)/2<<2)|0;_a(a,h,b,(v<<2)+d|0,e,f,r,k,l);j=0;if((o|0)>0){while(1){d=j<<2;e=d+n|0;u[e>>2]=x(u[e>>2]*x(.5))+x(u[b+d>>2]*x(.5));j=j+1|0;if((o|0)!=(j|0)){continue}break}}if((m|0)<1){break a}b=a- -64|0;j=0;while(1){kb(b,(j<<2)+n|0,q[c>>2]+(w(i,j)<<2)|0,q[a+60>>2],p,t,m);j=j+1|0;if((m|0)!=(j|0)){continue}break}}ca=y}function sd(a,b,c,d){var e=0,f=x(0),g=0,h=0,i=0,j=x(0),k=0,l=0;g=d;d=c+1|0;e=(b|0)>(c|0);e=Qa(g,q[q[((e?d:b)<<2)+25488>>2]+(((b|0)>(d|0)?b:d)<<2)>>2]+q[q[(((b|0)<(c|0)?b:c)<<2)+25488>>2]+((e?b:c)<<2)>>2]|0);a:{if((c|0)>0){if((b|0)<2){break a}if((b|0)!=2){while(1){g=b;b:{if((b|0)<=(c|0)){d=c;k=g<<2;l=q[k+25488>>2];i=q[(l+(c<<2)|0)+4>>2];h=i>>>0<=e>>>0?-1:0;e=e-(h&i)|0;c:{if(e>>>0>2]){while(1){b=b-1|0;i=q[k+q[(b<<2)+25488>>2]>>2];if(e>>>0>>0){continue}break c}}while(1){b=d;d=b-1|0;i=q[l+(b<<2)>>2];if(e>>>0>>0){continue}break}}c=(h^(c+h|0)-b)<<16>>16;q[a>>2]=c;j=f;f=x(c|0);f=x(j+x(f*f));c=b;e=e-i|0;break b}d=g<<2;k=c+1|0;b=q[d+q[(k<<2)+25488>>2]>>2];h=q[d+q[(c<<2)+25488>>2]>>2];if(!(b>>>0<=e>>>0|h>>>0>e>>>0)){q[a>>2]=0;e=e-h|0;break b}h=e;e=b>>>0<=e>>>0?-1:0;h=h-(e&b)|0;while(1){b=c;c=b-1|0;l=q[d+q[(c<<2)+25488>>2]>>2];if(l>>>0>h>>>0){continue}break}b=(e^(e+k|0)-b)<<16>>16;q[a>>2]=b;j=f;f=x(b|0);f=x(j+x(f*f));e=h-l|0}b=g-1|0;a=a+4|0;if((g|0)>3){continue}break}}d=c<<1|1;g=d>>>0<=e>>>0;b=g?-1:0;g=c-g|0;d=e-(b&d)|0;e=d+1|0;c=e>>>1|0;b=(b^g-c)<<16>>16;q[a>>2]=b;g=a;a=d-(c?(e&-2)-1|0:0)|0;a=(c-a^0-a)<<16>>16;q[g+4>>2]=a;j=f;f=x(b|0);j=x(j+x(f*f));f=x(a|0);return x(j+x(f*f))}ja(25448,25471,469);G()}ja(30672,25471,470);G()}function Ta(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=x(0),n=x(0),o=x(0),p=x(0),q=x(0),r=0,s=x(0),t=0,v=0,y=0,z=0,A=x(0),B=x(0),C=x(0),D=x(0),E=x(0),F=x(0),G=x(0);a:{if(!(f!=x(0)|g!=x(0))){if((a|0)==(b|0)){break a}ra(a,b,e<<2);return}l=(d|0)>15?d:15;t=-2-l|0;v=l^-1;y=1-l|0;z=0-l|0;d=w(i,12);A=x(u[d+1112>>2]*g);B=x(u[d+1108>>2]*g);C=x(u[d+1104>>2]*g);d=f==g?(h|0)==(i|0)?0:k:k;i=(c|0)>15?c:15;c=(i|0)==(l|0)?d:k;if((c|0)>=1){d=w(h,12);D=x(u[d+1112>>2]*f);E=x(u[d+1108>>2]*f);F=x(u[d+1104>>2]*f);d=2-l|0;m=u[(y<<2)+b>>2];n=u[(z<<2)+b>>2];o=u[(v<<2)+b>>2];f=u[(t<<2)+b>>2];k=0;while(1){h=k<<2;p=u[h+j>>2];q=x(p*p);s=x(x(1)-q);r=a+h|0;p=u[(d+k<<2)+b>>2];G=u[b+h>>2];h=(k-i<<2)+b|0;u[r>>2]=x(x(f+p)*x(A*q))+x(x(x(m+o)*x(B*q))+x(x(n*x(C*q))+x(x(x(G+x(u[h>>2]*x(F*s)))+x(x(E*s)*x(u[h+4>>2]+u[h-4>>2])))+x(x(D*s)*x(u[h+8>>2]+u[h-8>>2])))));f=o;o=n;n=m;m=p;k=k+1|0;if((c|0)!=(k|0)){continue}break}r=c}if(g==x(0)){if((a|0)==(b|0)){break a}d=c<<2;ra(a+d|0,b+d|0,e-c<<2);return}h=e-r|0;if((h|0)<1){break a}e=r<<2;d=a+e|0;c=2-l|0;b=b+e|0;o=u[b+(t<<2)>>2];f=u[b+(v<<2)>>2];m=u[b+(z<<2)>>2];n=u[b+(y<<2)>>2];k=0;while(1){a=k<<2;g=u[b+(c+k<<2)>>2];u[a+d>>2]=x(A*x(o+g))+x(x(B*x(f+n))+x(x(C*m)+u[a+b>>2]));o=f;f=m;m=n;n=g;k=k+1|0;if((h|0)!=(k|0)){continue}break}}}function kd(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,n=0,o=x(0),r=0,t=0,v=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=x(0);a:{b:{c:{if((h|0)>0){y=q[a+32>>2];m=y+(h<<1)|0;d:{if((w(p[m>>1]-p[m-2>>1]|0,j)|0)<9){break d}F=w(q[a+44>>2],j);H=(i|0)>1?i:1;I=s[y>>1];while(1){J=(w(z,F)<<2)+b|0;A=I;m=0;while(1){l=A<<16;E=m+1|0;A=p[(E<<1)+y>>1];l=l>>16;n=w(A-l|0,j);if((n|0)>=9){K=(w(j,l)<<2)+J|0;L=x(n|0);B=0;r=0;t=0;l=0;while(1){o=u[(l<<2)+K>>2];o=x(x(o*o)*L);B=(o>2]-4|0)<(m|0)?((r+t<<5>>>0)/(n>>>0)|0)+v|0:v;m=q[(m<<2)+k>>2];C=w(m,((r<<1>=(n|0))+(t<<1>=(n|0))|0)+(B<<1>=(n|0))|0)+C|0;D=m+D|0}m=E;if((m|0)!=(h|0)){continue}break}z=z+1|0;if((H|0)!=(z|0)){continue}break}if(g){l=q[e>>2]+(v?(v>>>0)/(w((h-q[a+8>>2]|0)+4|0,i)>>>0)|0:0)>>1;q[e>>2]=l;e:{f:{switch(q[f>>2]){case 2:l=l+4|0;break e;case 0:break f;default:break e}}l=l-4|0}q[f>>2]=(l|0)>22?2:(l|0)>18}if((D|0)<=0){break c}if((C|0)<=-1){break b}a=q[c>>2]+((C<<8>>>0)/(D>>>0)|0)>>1;q[c>>2]=a;l=3;a=(w(a,3)-(d<<7)|0)+448|0;if((a|0)<318){break d}l=2;if((a|0)>=1022){break a}}return l}ja(31012,30999,489);G()}ja(31036,30999,545);G()}ja(31064,30999,546);G()}return(a|0)<1534}function Rf(a,b,c,d){var e=0,f=0,g=0,h=0,i=x(0),j=0,k=0,l=0;e=ca-1744|0;ca=e;j=q[a+4592>>2];h=q[a+4596>>2];g=h+q[a+4584>>2]|0;k=j+g|0;f=q[a+4548>>2];if((k|0)>=(f|0)){g=((g<<2)+d|0)-(f<<2)|0;gb(e,g,1,h);h=q[a+4596>>2];f=h<<2;g=f+g|0;l=e+f|0;f=q[a+4548>>2]-(h<<1)<<2;gb(ka(l,g,f)+f|0,g+f|0,2,h);Uc(e+1664|0,e,q[a+4548>>2],q[a+4648>>2]+1|0);i=u[e+1664>>2];u[e+1664>>2]=i+x(x(i*x(.0010000000474974513))+x(1));i=Tc(e+1536|0,e+1664|0,q[a+4648>>2]);u[b+704>>2]=u[e+1664>>2]/(i>x(1)?i:x(1));Sc(e+1600|0,e+1536|0,q[a+4648>>2]);fb(e+1600|0,q[a+4648>>2],x(.9900000095367432));eb(c,e+1600|0,d-(j<<2)|0,k,q[a+4648>>2]);a:{if(!(q[a+4664>>2]|!r[a+4765|0])){if(!Sf(c,b+228|0,a+4762|0,a+4764|0,a+10060|0,q[a+4544>>2],x(x(q[a+4652>>2])*x(152587890625e-16)),x(x(x(x(x(x(q[a+4648>>2])*x(-.004000000189989805))+x(.6000000238418579))+x(x(x(q[a+4532>>2])*x(.10000000149011612))*x(-.00390625)))+x(x(o[a+4541|0]>>1)*x(-.15000000596046448)))+x(x(x(q[a+4712>>2])*x(.10000000149011612))*x(-30517578125e-15))),q[a+4576>>2],q[a+4644>>2],q[a+4580>>2])){o[a+4765|0]=2;break a}o[a+4765|0]=1;break a}q[b+228>>2]=0;q[b+232>>2]=0;q[b+236>>2]=0;q[b+240>>2]=0;q[a+10060>>2]=0;o[a+4764|0]=0;p[a+4762>>1]=0}ca=e+1744|0;return}ja(37162,37224,59);G()}function bg(a){var b=0,c=0,d=0;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{if(a){b=q[a+8>>2];k:{if((b|0)<=23999){if((b|0)==8e3|(b|0)==12e3){break k}if((b|0)!=16e3){break a}break k}if((b|0)<=44099){if((b|0)==24e3|(b|0)==32e3){break k}break a}if((b|0)==48e3){break k}if((b|0)!=44100){break a}}b=q[a+20>>2];if((b|0)!=12e3?!((b|0)==8e3|(b|0)==16e3):0){break a}c=q[a+12>>2];if((c|0)!=12e3?!((c|0)==8e3|(c|0)==16e3):0){break a}d=q[a+16>>2];if(((d|0)!=12e3?!((d|0)==8e3|(d|0)==16e3):0)|((b|0)<(d|0)|(b|0)>(c|0))){break a}if((c|0)<(d|0)){break a}l:{m:{b=q[a+24>>2];switch(b-10|0){case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:break j;case 0:case 10:break l;default:break m}}if((b|0)==40){break l}if((b|0)!=60){break j}}if(t[a+32>>2]>=101){break i}if(t[a+48>>2]>=2){break h}if(t[a+52>>2]>=2){break g}if(t[a+40>>2]>=2){break f}b=q[a>>2];if(b-1>>>0>=2){break e}c=q[a+4>>2];if(c-1>>>0>=2){break d}if((b|0)<(c|0)){break c}if(t[a+36>>2]>=11){break b}return 0}ja(35344,35381,41);G()}ja(35408,35381,69);G()}ja(35408,35381,73);G()}ja(35408,35381,77);G()}ja(35408,35381,81);G()}ja(35408,35381,85);G()}ja(35408,35381,89);G()}ja(35408,35381,93);G()}ja(35408,35381,97);G()}ja(35408,35381,101);G()}ja(35408,35381,62);G()}function Td(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if(qa(a,q[b+8>>2],e)){if(!(q[b+28>>2]==1|q[b+4>>2]!=(c|0))){q[b+28>>2]=d}return}a:{if(qa(a,q[b>>2],e)){if(!(q[b+20>>2]!=(c|0)?q[b+16>>2]!=(c|0):0)){if((d|0)!=1){break a}q[b+32>>2]=1;return}q[b+32>>2]=d;if(q[b+44>>2]!=4){f=a+16|0;i=f+(q[a+12>>2]<<3)|0;j=b;b:{c:{while(1){d:{if(f>>>0>=i>>>0){break d}p[b+52>>1]=0;ub(f,b,c,c,1,e);if(r[b+54|0]){break d}e:{if(!r[b+53|0]){break e}if(r[b+52|0]){d=1;if(q[b+24>>2]==1){break c}h=1;g=1;if(r[a+8|0]&2){break e}break c}h=1;d=g;if(!(o[a+8|0]&1)){break c}}f=f+8|0;continue}break}d=g;a=4;if(!h){break b}}a=3}q[j+44>>2]=a;if(d&1){break a}}q[b+20>>2]=c;q[b+40>>2]=q[b+40>>2]+1;if(q[b+36>>2]!=1|q[b+24>>2]!=2){break a}o[b+54|0]=1;return}g=q[a+12>>2];f=a+16|0;bb(f,b,c,d,e);if((g|0)<2){break a}g=f+(g<<3)|0;f=a+24|0;a=q[a+8>>2];if(!(q[b+36>>2]!=1?!(a&2):0)){while(1){if(r[b+54|0]){break a}bb(f,b,c,d,e);f=f+8|0;if(g>>>0>f>>>0){continue}break}break a}if(!(a&1)){while(1){if(r[b+54|0]|q[b+36>>2]==1){break a}bb(f,b,c,d,e);f=f+8|0;if(g>>>0>f>>>0){continue}break a}}while(1){if(r[b+54|0]|(q[b+24>>2]==1?q[b+36>>2]==1:0)){break a}bb(f,b,c,d,e);f=f+8|0;if(g>>>0>f>>>0){continue}break}}}function ef(a,b,c,d){var e=x(0),f=x(0),g=x(0),h=x(0),i=x(0),j=0,k=x(0),l=x(0),m=x(0),n=x(0),o=x(0),p=x(0),q=x(0),r=0;j=(c|0)/(b|0)|0;i=x(x(x(-25)/x(((j|0)>50?j:50)|0))+x(1));a:{b:{if((b|0)>=4){r=b-3|0;c=0;while(1){b=c<<3;g=u[b+a>>2];k=u[(b|4)+a>>2];l=u[(b|8)+a>>2];m=u[(b|12)+a>>2];n=u[(b|16)+a>>2];o=u[(b|20)+a>>2];p=u[(b|24)+a>>2];q=u[(b|28)+a>>2];h=x(h+x(x(x(x(g*k)+x(l*m))+x(n*o))+x(p*q)));e=x(e+x(x(x(x(k*k)+x(m*m))+x(o*o))+x(q*q)));f=x(f+x(x(x(x(g*g)+x(l*l))+x(n*n))+x(p*p)));c=c+4|0;if((r|0)>(c|0)){continue}break}if(f>2];e=x(B(x(g+x(i*x(e-g))),x(0)));u[d+8>>2]=e;g=u[d+4>>2];h=x(B(x(g+x(i*x(h-g))),x(0)));u[d+4>>2]=h;g=u[d>>2];f=x(B(x(g+x(i*x(f-g))),x(0)));u[d>>2]=f;c:{if(!((ex(.0007999999797903001))){e=u[d+16>>2];break c}f=x(F(f));i=x(F(e));e=x(f*i);h=e>h?h:e;u[d+4>>2]=h;g=u[d+12>>2];f=x(F(f));i=x(F(i));e=x(h/x(e+x(1.0000000036274937e-15)));e=x(x(x(x(y(x(f-i)))/x(x(f+x(1.0000000036274937e-15))+i))*x(F(x(x(1)-x(e*e)))))-g);f=x(j|0);e=x(g+x(e/f));u[d+12>>2]=e;f=x(u[d+16>>2]+x(x(-.019999999552965164)/f));e=e>2]=e}return x(A(x(e*x(20)),x(1)))}function bd(a,b,c,d,e,f,g){var h=0,i=x(0),j=x(0),k=0,l=0,m=0,n=x(0),o=0,p=0,r=0,s=0,t=x(0),v=0;h=ca;m=h;if(!((d|0)!=2|(e|0)!=1)){i=u[g+4>>2];j=u[g>>2];if((c|0)>=1){d=q[a+4>>2];a=q[a>>2];n=u[f>>2];h=0;while(1){e=h<<2;t=u[e+d>>2];f=h<<3;j=x(j+x(u[a+e>>2]+x(1.0000000031710769e-30)));u[f+b>>2]=j*x(30517578125e-15);i=x(i+x(t+x(1.0000000031710769e-30)));u[(f|4)+b>>2]=i*x(30517578125e-15);i=x(n*i);j=x(n*j);h=h+1|0;if((h|0)!=(c|0)){continue}break}}u[g+4>>2]=i;u[g>>2]=j;ca=m;return}v=(d|0)>1?d:1;o=(c|0)/(e|0)|0;k=h-((c<<2)+15&-16)|0;ca=k;j=u[f>>2];f=0;while(1){h=l<<2;p=h+b|0;r=q[a+h>>2];s=g+h|0;i=u[s>>2];a:{if((e|0)<=1){h=0;if((c|0)<=0){break a}while(1){i=x(i+x(u[(h<<2)+r>>2]+x(1.0000000031710769e-30)));u[(w(d,h)<<2)+p>>2]=i*x(30517578125e-15);i=x(j*i);h=h+1|0;if((h|0)!=(c|0)){continue}break}break a}f=1;h=0;if((c|0)<1){break a}while(1){f=h<<2;i=x(i+x(u[f+r>>2]+x(1.0000000031710769e-30)));u[f+k>>2]=i;i=x(j*i);f=1;h=h+1|0;if((h|0)!=(c|0)){continue}break}}u[s>>2]=i;b:{if(!f){break b}h=0;if((o|0)<1){break b}while(1){u[(w(d,h)<<2)+p>>2]=u[(w(e,h)<<2)+k>>2]*x(30517578125e-15);h=h+1|0;if((o|0)!=(h|0)){continue}break}}l=l+1|0;if((v|0)!=(l|0)){continue}break}ca=m}function od(a,b,c,d){var e=x(0),f=x(0),g=x(0),h=x(0),i=x(0),j=0;a:{if(c){f=x(1.0000000036274937e-15);if((d|0)<1){e=x(1.0000000036274937e-15);break a}c=0;e=x(1.0000000036274937e-15);while(1){g=e;j=c<<2;h=u[j+a>>2];i=u[b+j>>2];e=x(h-i);e=x(g+x(e*e));g=f;f=x(h+i);f=x(g+x(f*f));c=c+1|0;if((d|0)!=(c|0)){continue}break}break a}if((d|0)<1){e=x(1.0000000036274937e-15);f=x(1.0000000036274937e-15);break a}c=0;while(1){e=u[(c<<2)+a>>2];f=x(f+x(e*e));c=c+1|0;if((d|0)!=(c|0)){continue}break}f=x(f+x(1.0000000036274937e-15));c=0;e=x(0);while(1){g=e;e=u[(c<<2)+b>>2];e=x(g+x(e*e));c=c+1|0;if((d|0)!=(c|0)){continue}break}e=x(e+x(1.0000000036274937e-15))}h=x(F(e));e=x(h*h);i=x(F(f));f=x(i*i);g=x(0);b:{if(x(e+f)f^1)){break b}g=x(x(x(x(x(h*i)*x(f+x(e*x(.43157973885536194))))/x(x(f+x(e*x(.6784840226173401)))*x(f+x(e*x(.0859554186463356)))))+x(1.5707963705062866))+x(-1.5707963705062866))}e=x(C(x(x(g*x(10430.3818359375))+x(.5))));if(x(y(e))>2];n=q[a>>2];if((f|0)>=1){while(1){n=n>>1;i=(n<<2)+i|0;h=h+1|0;if((h|0)!=(f|0)){continue}break}}h=(e<<1&-4)+c|0;r=q[((f<<2)+a|0)+8>>2];a:{if((n|0)<=3){Ya(r,h);break a}o=n>>2;A=(o|0)>1?o:1;f=0;s=n>>1;a=(w(s-1|0,g)<<2)+b|0;t=q[r+44>>2];g=g<<1;B=0-g<<2;while(1){v=p[t>>1]<<3;l=u[a>>2];m=u[(f<<2)+i>>2];j=u[b>>2];k=u[(f+o<<2)+i>>2];u[(v|4)+h>>2]=x(l*m)+x(j*k);u[h+v>>2]=x(m*j)-x(l*k);t=t+2|0;a=a+B|0;b=(g<<2)+b|0;f=f+1|0;if((A|0)!=(f|0)){continue}break}Ya(r,h);if((n|0)<4){break a}a=o+1>>1;a=(a|0)>1?a:1;b=(s<<2)+h|0;f=0;while(1){g=b-4|0;l=u[g>>2];b=b-8|0;m=u[b>>2];j=u[h+4>>2];k=u[(f<<2)+i>>2];y=u[h>>2];z=u[(f+o<<2)+i>>2];u[h>>2]=x(j*k)+x(y*z);u[g>>2]=x(j*z)-x(y*k);g=f^-1;j=u[(g+o<<2)+i>>2];k=u[(g+s<<2)+i>>2];u[b>>2]=x(l*j)+x(m*k);u[h+4>>2]=x(l*k)-x(m*j);h=h+8|0;f=f+1|0;if((a|0)!=(f|0)){continue}break}}a=(e|0)/2|0;if((e|0)>=2){b=e<<2;i=b+c|0;h=b+d|0;f=0;while(1){l=u[c>>2];h=h-4|0;m=u[h>>2];i=i-4|0;j=u[i>>2];k=u[d>>2];u[c>>2]=x(l*m)-x(j*k);u[i>>2]=x(j*m)+x(l*k);d=d+4|0;c=c+4|0;f=f+1|0;if((a|0)!=(f|0)){continue}break}}}function ng(a){var b=0,c=0;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{k:{l:{m:{n:{o:{p:{q:{r:{if(q[a>>2]==9764){if(q[a+4>>2]!=120){break r}if(q[a+8>>2]-1>>>0>=2){break q}if(q[a+12>>2]-1>>>0>=2){break p}if(q[a+16>>2]<=0){break o}b=q[a+20>>2];if(!(!b|(b|0)==17)){ja(32110,31888,124);G()}c=q[a+24>>2];if((b|0)>=(c|0)){break n}if((c|0)>=22){break m}b=q[a+36>>2];if((b|0)<=-1){break l}if(b){break k}b=q[a+48>>2];if((b|0)>=721){break j}if(b?(b|0)<=99:0){break i}b=q[a+60>>2];if((b|0)>=1024){break h}if(b?(b|0)<=14:0){break g}b=q[a+64>>2];if((b|0)>=1024){break f}if(b?(b|0)<=14:0){break e}b=q[a+76>>2];if((b|0)>=3){break d}if((b|0)<=-1){break c}a=q[a+80>>2];if((a|0)>=3){break b}if((a|0)<=-1){break a}return}ja(31816,31888,118);G()}ja(31908,31888,119);G()}ja(31945,31888,121);G()}ja(32002,31888,122);G()}ja(32073,31888,123);G()}ja(32162,31888,125);G()}ja(32200,31888,126);G()}ja(32232,31888,128);G()}ja(32264,31888,129);G()}ja(32308,31888,131);G()}ja(32368,31888,132);G()}ja(32457,31888,133);G()}ja(32510,31888,134);G()}ja(32604,31888,135);G()}ja(32661,31888,136);G()}ja(32763,31888,137);G()}ja(32808,31888,138);G()}ja(32853,31888,139);G()}ja(32902,31888,140);G()}function sg(a,b,c,d,e){var f=0,g=0,h=x(0),i=0,j=0,k=0,l=0,m=x(0),n=x(0),o=0,p=0,q=0,r=0;g=ca-16|0;i=g;ca=g;l=g-96|0;g=l;ca=g;g=d+24|0;k=l-((g<<2)+15&-16)|0;ca=k;j=g;while(1){u[(f<<2)+l>>2]=u[((f^-1)+24<<2)+b>>2];f=f+1|0;if((f|0)!=24){continue}break}f=0;while(1){u[(f<<2)+k>>2]=-u[((f^-1)+24<<2)+e>>2];f=f+1|0;if((f|0)!=24){continue}break}if((j|0)>24){la(k+96|0,0,g-24<<2)}g=0;if((d|0)>=4){r=d-3|0;while(1){j=g<<2;u[i>>2]=u[j+a>>2];o=j|4;u[i+4>>2]=u[o+a>>2];p=j|8;u[i+8>>2]=u[p+a>>2];q=j|12;u[i+12>>2]=u[q+a>>2];fd(l,j+k|0,i);f=(g+24<<2)+k|0;h=u[i>>2];u[f>>2]=-h;u[c+j>>2]=h;m=x(u[i+4>>2]-x(h*u[b>>2]));u[f+4>>2]=-m;u[c+o>>2]=m;n=x(x(u[i+8>>2]-x(m*u[b>>2]))-x(h*u[b+4>>2]));u[f+8>>2]=-n;u[c+p>>2]=n;h=x(x(x(u[i+12>>2]-x(n*u[b>>2]))-x(m*u[b+4>>2]))-x(h*u[b+8>>2]));u[f+12>>2]=-h;u[c+q>>2]=h;g=g+4|0;if((r|0)>(g|0)){continue}break}}if((d|0)>(g|0)){while(1){b=g<<2;h=u[b+a>>2];f=0;while(1){h=x(h-x(u[(f<<2)+l>>2]*u[(f+g<<2)+k>>2]));f=f+1|0;if((f|0)!=24){continue}break}u[(g+24<<2)+k>>2]=h;u[b+c>>2]=h;g=g+1|0;if((g|0)!=(d|0)){continue}break}}f=0;while(1){u[(f<<2)+e>>2]=u[((f^-1)+d<<2)+c>>2];f=f+1|0;if((f|0)!=24){continue}break}ca=i+16|0}function Yb(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;i=ca-160|0;ca=i;m=8;g=na(a,w(c>>1,9)+7888|0,8);a:{b:{if((e&-16)<(e|0)){if((e|0)==120){break b}ja(8821,8863,59);G()}if((e|0)<16){break a}m=e>>4}h=w(g,18)+7520|0;while(1){g=f<<2;k=g+i|0;q[k>>2]=0;l=g+(i+80|0)|0;j=na(a,h,8);q[l>>2]=j;g=0;if((j|0)==17){while(1){g=g+1|0;j=na(a,((g|0)==10)+7682|0,8);q[l>>2]=j;if((j|0)==17){continue}break}q[k>>2]=g}f=f+1|0;if((m|0)!=(f|0)){continue}break}g=0;while(1){f=(g<<16>>11)+b|0;h=q[(i+80|0)+(g<<2)>>2];c:{if((h|0)>=1){Kd(f,a,h);break c}p[f>>1]=0;p[f+2>>1]=0;p[f+4>>1]=0;p[f+6>>1]=0;p[f+24>>1]=0;p[f+26>>1]=0;p[f+28>>1]=0;p[f+30>>1]=0;p[f+16>>1]=0;p[f+18>>1]=0;p[f+20>>1]=0;p[f+22>>1]=0;p[f+8>>1]=0;p[f+10>>1]=0;p[f+12>>1]=0;p[f+14>>1]=0}g=g+1|0;if((m|0)!=(g|0)){continue}break}h=0;while(1){j=h<<2;k=q[j+i>>2];if((k|0)>=1){o=(h<<16>>11)+b|0;f=0;while(1){n=(f<<1)+o|0;g=s[n>>1];l=0;while(1){g=na(a,6400,8)+(g<<1)|0;l=l+1|0;if((k|0)!=(l|0)){continue}break}p[n>>1]=g;f=f+1|0;if((f|0)!=16){continue}break}f=j+(i+80|0)|0;q[f>>2]=q[f>>2]|k<<5}h=h+1|0;if((m|0)!=(h|0)){continue}break}}Id(a,b,e,c,d,i+80|0);ca=i+160|0}function ka(a,b,c){var d=0,e=0,f=0;if(c>>>0>=512){Y(a|0,b|0,c|0)|0;return a}e=a+c|0;a:{if(!((a^b)&3)){b:{if((c|0)<1){c=a;break b}if(!(a&3)){c=a;break b}c=a;while(1){o[c|0]=r[b|0];b=b+1|0;c=c+1|0;if(e>>>0<=c>>>0){break b}if(c&3){continue}break}}d=e&-4;c:{if(d>>>0<64){break c}f=d+ -64|0;if(f>>>0>>0){break c}while(1){q[c>>2]=q[b>>2];q[c+4>>2]=q[b+4>>2];q[c+8>>2]=q[b+8>>2];q[c+12>>2]=q[b+12>>2];q[c+16>>2]=q[b+16>>2];q[c+20>>2]=q[b+20>>2];q[c+24>>2]=q[b+24>>2];q[c+28>>2]=q[b+28>>2];q[c+32>>2]=q[b+32>>2];q[c+36>>2]=q[b+36>>2];q[c+40>>2]=q[b+40>>2];q[c+44>>2]=q[b+44>>2];q[c+48>>2]=q[b+48>>2];q[c+52>>2]=q[b+52>>2];q[c+56>>2]=q[b+56>>2];q[c+60>>2]=q[b+60>>2];b=b- -64|0;c=c- -64|0;if(f>>>0>=c>>>0){continue}break}}if(c>>>0>=d>>>0){break a}while(1){q[c>>2]=q[b>>2];b=b+4|0;c=c+4|0;if(d>>>0>c>>>0){continue}break}break a}if(e>>>0<4){c=a;break a}d=e-4|0;if(d>>>0>>0){c=a;break a}c=a;while(1){o[c|0]=r[b|0];o[c+1|0]=r[b+1|0];o[c+2|0]=r[b+2|0];o[c+3|0]=r[b+3|0];b=b+4|0;c=c+4|0;if(d>>>0>=c>>>0){continue}break}}if(c>>>0>>0){while(1){o[c|0]=r[b|0];b=b+1|0;c=c+1|0;if((e|0)!=(c|0)){continue}break}}return a}function Uf(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0;e=ca-1936|0;ca=e;g=a;f=q[g+4>>2];q[e>>2]=q[g>>2];q[e+4>>2]=f;f=q[g+12>>2];q[e+8>>2]=q[g+8>>2];q[e+12>>2]=f;x=g+16|0;l=p[1144];r=p[1145];m=p[1143];n=p[1142];y=e+16|0;while(1){g=(d|0)<480?d:480;yc(x,y,c,2280,g);if((g|0)>=3){h=q[e>>2];f=e;j=g;while(1){o=w(h>>16,n)+(w(h&65535,n)>>16)|0;h=q[f+4>>2];i=h>>16;k=h&65535;h=q[f+8>>2];s=(w(h&65535,r)>>16)+w(h>>16,r)|0;h=q[f+12>>2];t=h>>16;u=h&65535;o=((((o+w(i,m)|0)+(w(k,m)>>16)|0)+s|0)+w(t,l)|0)+(w(u,l)>>16)|0;v=(o>>5)+1>>1;p[b>>1]=(o|0)>2097119?32767:(v|0)>-32768?v:-32768;k=(s+((w(m,t)+(w(m,u)>>16)|0)+w(i,l)|0)|0)+(w(l,k)>>16)|0;i=q[f+16>>2];i=(k+w(i>>16,n)|0)+(w(i&65535,n)>>16)|0;k=(i>>5)+1>>1;p[b+2>>1]=(i|0)>2097119?32767:(k|0)>-32768?k:-32768;b=b+4|0;f=f+12|0;i=(j|0)>5;j=j-3|0;if(i){continue}break}}d=d-g|0;if((d|0)>=1){f=(g<<2)+e|0;j=q[f+4>>2];q[e>>2]=q[f>>2];q[e+4>>2]=j;j=q[f+12>>2];q[e+8>>2]=q[f+8>>2];q[e+12>>2]=j;c=(g<<1)+c|0;continue}break}b=(g<<2)+e|0;c=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=c;c=q[b+12>>2];q[a+8>>2]=q[b+8>>2];q[a+12>>2]=c;ca=e+1936|0}function ld(a,b,c,d,e,f,g,h,i,j,k,l,m){var n=x(0),o=0,s=0,t=0,v=0,y=x(0),z=0,A=x(0),C=0,D=0,E=0,G=x(0),H=0,I=0,J=0,K=0,L=0,M=x(0),N=0,O=x(0),P=0,Q=0;if((g|0)<(h|0)){s=1<1?s:1;J=(e|0)>1?e:1;K=(d|0)==3;L=(d|0)==31;while(1){t=q[a+32>>2];s=g;g=s+1|0;D=s<<1;C=p[t+(g<<1)>>1]-p[t+D>>1]|0;E=C<>2]+1>>>0)/(C>>>0)>>>d|0)*x(-.125))*.6931471805599453))*x(.5));N=w(e,s);t=0;while(1){v=q[a+8>>2];o=s+w(v,t)<<2;n=u[o+k>>2];y=u[j+o>>2];O=u[i+o>>2];if((e|0)==1){o=s+v<<2;A=u[o+k>>2];n=n>A?n:A;A=u[j+o>>2];y=y>A?y:A}P=Da(+x(B(x(O-(n>y?y:n)),x(0)))*-.6931471805599453);a:{if(L){break a}H=((w(f,t)<<2)+b|0)+(p[q[a+32>>2]+D>>1]<G?G:n));y=x(-n);o=0;v=0;while(1){z=r[Q|0]>>>v&1;o=z?o:1;b:{if(z){break b}z=0;if((C|0)<1){break b}while(1){m=w(m,1664525)+1013904223|0;u[((z<>2]=m&32768?n:y;o=1;z=z+1|0;if((C|0)!=(z|0)){continue}break}}v=v+1|0;if((I|0)!=(v|0)){continue}break}if(!o){break a}nb(H,E,x(1))}t=t+1|0;if((J|0)!=(t|0)){continue}break}if((g|0)!=(h|0)){continue}break}}}function Af(a,b,c,d,e,f,g,h,i,j,k,l){var m=0,n=0,p=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0;s=q[f+16>>2];m=q[f>>2];n=q[f+4>>2];p=q[f+8>>2];f=q[f+12>>2];q[c>>2]=2147483647;q[b>>2]=2147483647;o[a|0]=0;if((l|0)>=1){u=0-(f<<7)|0;v=0-(p<<7)|0;x=0-(n<<7)|0;y=0-(m<<7)|0;z=j<<16>>16;A=0-(s<<8)|0;j=0;while(1){p=o[g|0];n=o[g+1|0];m=o[g+2|0];s=o[g+3|0];f=o[g+4|0];t=w(p,q[e>>2])+((((w(n,q[e+4>>2])+y|0)+w(m,q[e+8>>2])|0)+w(s,q[e+12>>2])|0)+w(f,q[e+16>>2])<<1)|0;t=w(t>>16,p)+(w(p,t&65535)>>16)|0;p=w(n,q[e+24>>2])+(((w(m,q[e+28>>2])+x|0)+w(s,q[e+32>>2])|0)+w(f,q[e+36>>2])<<1)|0;p=(t+w(n,p>>16)|0)+(w(n,p&65535)>>16)|0;n=w(m,q[e+48>>2])+((w(s,q[e+52>>2])+v|0)+w(f,q[e+56>>2])<<1)|0;p=(p+w(m,n>>16)|0)+(w(m,n&65535)>>16)|0;m=w(f,q[e+96>>2])+A|0;n=w(s,q[e+72>>2])+(w(f,q[e+76>>2])+u<<1)|0;f=((((p+w(f,m>>16)|0)+w(s,n>>16)|0)+(w(f,m&65535)>>16)|0)+(w(s,n&65535)>>16)|0)+32801|0;a:{if((f|0)<0){break a}s=r[h+j|0];m=s-k|0;m=f+(((m|0)>0?m:0)<<11)|0;f=w((pa(m)<<16)-125829120>>16,z)+(r[i+j|0]<<2)|0;if((f|0)>q[c>>2]){break a}q[c>>2]=f;q[b>>2]=m;o[a|0]=j;q[d>>2]=s}g=g+5|0;j=j+1|0;if((l|0)!=(j|0)){continue}break}}}function Fd(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0;f=ca+ -64|0;ca=f;Wb(b+16|0,a+2736|0,a+2312|0,(c|0)==2,q[a+2324>>2]);Sb(f+32|0,a+2744|0,q[a+2732>>2]);d=b- -64|0;Ga(d,f+32|0,q[a+2340>>2]);h=b+32|0;a:{b:{if(q[a+2376>>2]==1){o[a+2767|0]=4;break b}j=o[a+2767|0];if((j|0)>3){break b}e=q[a+2340>>2];if((e|0)>=1){c=0;while(1){g=c<<1;i=p[(g+a|0)+2344>>1];p[f+g>>1]=(w(p[g+(f+32|0)>>1]-i|0,j)>>>2|0)+i;c=c+1|0;if((e|0)!=(c|0)){continue}break}}Ga(h,f,e);break a}ka(h,d,q[a+2340>>2]<<1)}c=q[a+2340>>2];ka(a+2344|0,f+32|0,c<<1);if(q[a+4160>>2]){Jb(h,c,63570);Jb(d,q[a+2340>>2],63570)}h=b;c:{if(r[a+2765|0]==2){Gd(p[a+2762>>1],o[a+2764|0],b,q[a+2316>>2],q[a+2324>>2]);g=q[a+2324>>2];if((g|0)>=1){i=q[(o[a+2768|0]<<2)+7328>>2];c=0;while(1){d=w(c,10)+b|0;e=i+w(o[(a+c|0)+2740|0],5)|0;p[d+96>>1]=o[e|0]<<7;p[d+98>>1]=o[e+1|0]<<7;p[d+100>>1]=o[e+2|0]<<7;p[d+102>>1]=o[e+3|0]<<7;p[d+104>>1]=o[e+4|0]<<7;c=c+1|0;if((g|0)!=(c|0)){continue}break}}a=p[(o[a+2769|0]<<1)+6424>>1];break c}la(la(b,0,q[a+2324>>2]<<2)+96|0,0,w(q[a+2324>>2],10));o[a+2768|0]=0;a=0}q[h+136>>2]=a;ca=f- -64|0}function Ld(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,s=0;c=q[b+4>>2]+q[b>>2]|0;j=q[b+12>>2]+q[b+8>>2]|0;d=c+j|0;e=q[b+20>>2]+q[b+16>>2]|0;k=q[b+28>>2]+q[b+24>>2]|0;l=e+k|0;f=d+l|0;g=q[b+36>>2]+q[b+32>>2]|0;m=q[b+44>>2]+q[b+40>>2]|0;h=g+m|0;i=q[b+52>>2]+q[b+48>>2]|0;n=q[b+60>>2]+q[b+56>>2]|0;o=i+n|0;p=h+o|0;s=f+p|0;if((s|0)>=1){ma(a,f,r[s+8592|0]+8432|0,8)}if((f|0)>=1){ma(a,d,r[f+8592|0]+8272|0,8)}if((d|0)>=1){ma(a,c,r[d+8592|0]+8112|0,8)}if((c|0)>=1){ma(a,q[b>>2],r[c+8592|0]+7952|0,8)}if((j|0)>=1){ma(a,q[b+8>>2],r[j+8592|0]+7952|0,8)}if((l|0)>=1){ma(a,e,r[l+8592|0]+8112|0,8)}if((e|0)>=1){ma(a,q[b+16>>2],r[e+8592|0]+7952|0,8)}if((k|0)>=1){ma(a,q[b+24>>2],r[k+8592|0]+7952|0,8)}if((p|0)>=1){ma(a,h,r[p+8592|0]+8272|0,8)}if((h|0)>=1){ma(a,g,r[h+8592|0]+8112|0,8)}if((g|0)>=1){ma(a,q[b+32>>2],r[g+8592|0]+7952|0,8)}if((m|0)>=1){ma(a,q[b+40>>2],r[m+8592|0]+7952|0,8)}if((o|0)>=1){ma(a,i,r[o+8592|0]+8112|0,8)}if((i|0)>=1){ma(a,q[b+48>>2],r[i+8592|0]+7952|0,8)}if((n|0)>=1){ma(a,q[b+56>>2],r[n+8592|0]+7952|0,8)}}function Nc(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0,n=0,r=0,s=0,t=0,u=0,v=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;j=ca-16|0;ca=j;x=(i|0)<1;v=2147483647;while(1){r=q[d>>2];a:{if(x){n=0;l=0;m=r;break a}y=o[s+7420|0];m=s<<2;z=q[m+7408>>2];A=q[m+7328>>2];B=q[m+7024>>2];t=0;l=0;n=0;u=g;k=f;while(1){Af((j+12|0)+t|0,j+8|0,j+4|0,j,k,u,A,z,B,h,Na(6229-r|0)-51|0,y);m=0;l=q[j+4>>2]+l|0;l=(l|0)>-1?l:2147483647;n=q[j+8>>2]+n|0;n=(n|0)>-1?n:2147483647;u=u+20|0;k=k+100|0;if((pa(q[j>>2]+51|0)+r|0)>=896){m=(pa(q[j>>2]+51|0)+r|0)-896|0}r=m;t=t+1|0;if((t|0)!=(i|0)){continue}break}}if((l|0)<=(v|0)){o[c|0]=s;ka(b,j+12|0,i);C=m;v=l}s=s+1|0;if((s|0)!=3){continue}break}if((i|0)>=1){c=q[(o[c|0]<<2)+7328>>2];k=0;while(1){f=w(k,10)+a|0;g=b+k|0;p[f>>1]=o[c+w(o[g|0],5)|0]<<7;p[f+2>>1]=o[(c+w(o[g|0],5)|0)+1|0]<<7;p[f+4>>1]=o[(c+w(o[g|0],5)|0)+2|0]<<7;p[f+6>>1]=o[(c+w(o[g|0],5)|0)+3|0]<<7;p[f+8>>1]=o[(c+w(o[g|0],5)|0)+4|0]<<7;k=k+1|0;if((k|0)!=(i|0)){continue}break}}q[d>>2]=C;D=e,E=w((pa(n>>((i|0)==2?1:2))<<16)-125829120>>16,-3),q[D>>2]=E;ca=j+16|0}function Ec(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;f=ca;l=f;e=q[a+268>>2];f=f-((e<<2)+31&-16)|0;ca=f;h=q[a+36>>2];q[f+8>>2]=q[a+32>>2];q[f+12>>2]=h;h=q[a+28>>2];q[f>>2]=q[a+24>>2];q[f+4>>2]=h;m=f+16|0;n=q[a+272>>2];while(1){h=(d|0)<(e|0)?d:e;Ic(a,m,c,h);i=0;j=h<<17;if((j|0)>=1){while(1){k=w(i&65535,12)>>>16|0;g=(k<<3)+2304|0;e=f+(i>>16<<1)|0;o=((w(p[g+2>>1],p[e+2>>1])+w(p[g>>1],p[e>>1])|0)+w(p[g+4>>1],p[e+4>>1])|0)+w(p[g+6>>1],p[e+6>>1])|0;g=(0-k<<3)+2392|0;e=(((o+w(p[g+6>>1],p[e+8>>1])|0)+w(p[g+4>>1],p[e+10>>1])|0)+w(p[g+2>>1],p[e+12>>1])|0)+w(p[g>>1],p[e+14>>1])|0;g=(e>>14)+1>>1;p[b>>1]=(e|0)>1073725439?32767:(g|0)>-32768?g:-32768;b=b+2|0;i=i+n|0;if((j|0)>(i|0)){continue}break}}d=d-h|0;if((d|0)>=1){e=f+(h<<2)|0;i=q[e+4>>2];q[f>>2]=q[e>>2];q[f+4>>2]=i;i=q[e+12>>2];q[f+8>>2]=q[e+8>>2];q[f+12>>2]=i;c=(h<<1)+c|0;e=q[a+268>>2];continue}break}b=f+(h<<2)|0;c=q[b+4>>2];q[a+24>>2]=q[b>>2];q[a+28>>2]=c;c=q[b+12>>2];q[a+32>>2]=q[b+8>>2];q[a+36>>2]=c;ca=l}function Vd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;e=ca+ -64|0;ca=e;a:{if(qa(b,57892,0)){q[c>>2]=0;f=1;break a}if(Wd(a,b)){f=1;a=q[c>>2];if(!a){break a}q[c>>2]=q[a>>2];break a}if(!b){break a}b=xa(b,57900);if(!b){break a}d=q[c>>2];if(d){q[c>>2]=q[d>>2]}g=q[b+8>>2];d=q[a+8>>2];if(g&(d^-1)&7|(g^-1)&d&96){break a}f=1;if(qa(q[a+12>>2],q[b+12>>2],0)){break a}if(qa(q[a+12>>2],57912,0)){a=q[b+12>>2];if(!a){break a}f=!xa(a,57920);break a}f=0;d=q[a+12>>2];if(!d){break a}d=xa(d,57900);if(d){if(!(o[a+8|0]&1)){break a}f=Ud(d,q[b+12>>2]);break a}d=q[a+12>>2];if(!d){break a}d=xa(d,57932);if(d){if(!(o[a+8|0]&1)){break a}f=cc(d,q[b+12>>2]);break a}a=q[a+12>>2];if(!a){break a}d=xa(a,57672);if(!d){break a}a=q[b+12>>2];if(!a){break a}a=xa(a,57672);if(!a){break a}la(e+8|4,0,52);q[e+56>>2]=1;q[e+20>>2]=-1;q[e+16>>2]=d;q[e+8>>2]=a;ea[q[q[a>>2]+28>>2]](a,e+8|0,q[c>>2],1);a=q[e+32>>2];if(!(!q[c>>2]|(a|0)!=1)){q[c>>2]=q[e+24>>2]}f=(a|0)==1}ca=e- -64|0;return f|0}function cf(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0,n=0,o=0,p=0,r=0,s=0,t=0,u=0,v=0;j=ca-304|0;m=j;ca=j;o=c-1|0;k=(c|0)==2?-3:-2-(o<<1)|0;n=j;if(!(q[a+148>>2]|q[a+164>>2]==-1)){l=(w(q[a+160>>2],3)|0)/((w(q[a+144>>2],24)|0)/(w(c,d)|0)|0)|0;f=(f|0)>(l|0)?l:f}j=(f+k|0)/(c|0)|0;l=(j|0)<1276?j+1|0:1276;n=n-(w(l,c)+15&-16)|0;ca=n;q[m+4>>2]=0;t=q[a+136>>2];q[a+136>>2]=q[a+14224>>2];u=q[a+128>>2];q[a+128>>2]=q[a+14240>>2];v=q[a+120>>2];j=q[a+14192>>2];q[a+120>>2]=j;p=q[a+68>>2];a:{if(p){q[a+120>>2]=1;break a}q[a+14232>>2]=j}b:{if((c|0)>=1){j=0;while(1){q[a+68>>2]=0;q[a+18132>>2]=(j|0)<(o|0);if(!(!g|(j|0)!=(o|0))){q[a+136>>2]=1002}k=-3;r=w(j,l)+n|0;s=Dc(a,(w(q[a+112>>2],w(d,j))<<2)+b|0,d,r,l,h,0,0,0,0,0,i);if((s|0)<0){break b}if((Bc(m,r,s)|0)<0){break b}j=j+1|0;if((j|0)!=(c|0)){continue}break}}k=Ac(m,c,e,f,!q[a+148>>2]);if((k|0)<0){k=-3;break b}q[a+128>>2]=u;q[a+136>>2]=t;q[a+120>>2]=v;q[a+68>>2]=p}ca=m+304|0;return k}function wd(a,b,c,d,e,f,g,h,i,j){var k=0,l=0,m=0,n=0,o=0,p=0,r=x(0),s=0,t=0,v=0;s=(j|0)>1?j:1;m=(b|0)>=(c|0);a:{if(m|(h|0)<(j|0)){break a}l=b;while(1){k=l<<2;p=k+f|0;if(!(q[p>>2]>7|q[g+k>>2])){o=q[a+8>>2];k=0;while(1){n=u[(w(k,o)+l<<2)+e>>2]>2];t=w(o,k)+l<<2;v=t+d|0;r=x(x((n?x(-.5):x(.5))*x(1<<13-q[p>>2]))*x(6103515625e-14));u[v>>2]=u[v>>2]+r;n=e+t|0;u[n>>2]=u[n>>2]-r;k=k+1|0;if((s|0)!=(k|0)){continue}break}h=h-s|0}l=l+1|0;if((l|0)>=(c|0)){break a}if((h|0)>=(j|0)){continue}break}}b:{if((h|0)<(j|0)|m){break b}while(1){l=b<<2;o=l+f|0;if(!(q[o>>2]>7|q[g+l>>2]!=1)){l=q[a+8>>2];k=0;while(1){m=u[(w(k,l)+b<<2)+e>>2]>2];p=w(l,k)+b<<2;n=p+d|0;r=x(x((m?x(-.5):x(.5))*x(1<<13-q[o>>2]))*x(6103515625e-14));u[n>>2]=u[n>>2]+r;m=e+p|0;u[m>>2]=u[m>>2]-r;k=k+1|0;if((s|0)!=(k|0)){continue}break}h=h-s|0}b=b+1|0;if((c|0)<=(b|0)){break b}if((h|0)>=(j|0)){continue}break}}}function Xa(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,s=0,t=0,u=0,v=0;t=1;while(1){m=(c<<2)+a|0;h=w(c,3)+b|0;n=h;e=2147483647;c=0;a:{b:{while(1){j=c+1|0;k=p[(c<<1)+6320>>1];f=p[(j<<1)+6320>>1]-k|0;u=w(f&65535,6554)>>>16|0;v=f>>16;i=w(v,6554)+u|0;f=i+k|0;g=q[m>>2]-f|0;d=g>>31;d=d^d+g;if(d>>>0>=e>>>0){c=r[h|0];break a}o[h|0]=c;o[n+1|0]=0;l=w(i,3)+k|0;g=q[m>>2]-l|0;e=g>>31;s=d;d=e^e+g;if(s>>>0<=d>>>0){l=f;break a}o[h|0]=c;o[n+1|0]=1;f=w(i,5)+k|0;g=q[m>>2]-f|0;e=g>>31;s=d;d=e^e+g;if(s>>>0<=d>>>0){break a}o[h|0]=c;o[n+1|0]=2;l=w(i,7)+k|0;g=q[m>>2]-l|0;e=g>>31;s=d;d=e^e+g;if(s>>>0<=d>>>0){break b}o[h|0]=c;o[n+1|0]=3;i=q[m>>2]-(w(i,9)+k|0)|0;f=i>>31;e=f^f+i;if(d>>>0<=e>>>0){break a}l=(w(v,58986)+w(u,9)|0)+k|0;o[h|0]=c;o[n+1|0]=4;c=j;if((c|0)!=15){continue}break}c=14;break a}l=f}j=(c<<24>>24)/3|0;o[h+2|0]=j;o[h|0]=w(j,-3)+c;q[m>>2]=l;c=1;j=t;t=0;if(j){continue}break}q[a>>2]=q[a>>2]-q[a+4>>2]}function ag(a,b){var c=0,d=0,e=0,f=0;c=q[a+4576>>2];if(!c){c=q[a+32>>2]}d=c<<16;if(!d){b=q[a+4572>>2];a=q[a+4556>>2];return(((a|0)>(b|0)?b:a)|0)/1e3|0}d=w(d>>16,1e3);e=q[a+4556>>2];f=q[a+4564>>2];if(!((d|0)>=q[a+4568>>2]?!((d|0)>(e|0)|(d|0)>(f|0)):0)){b=(e|0)<(f|0)?e:f;a=q[a+4568>>2];return(((a|0)<(b|0)?b:a)|0)/1e3|0}f=q[a+24>>2];if((f|0)>=256){q[a+28>>2]=0}a:{b:{if(q[b+64>>2]?0:!q[a+4536>>2]){break b}e=q[a+4572>>2];if((e|0)<(d|0)){c:{d:{if(q[a+28>>2]){if(q[b+64>>2]){break d}if((f|0)>0){break c}break a}q[a+16>>2]=0;q[a+20>>2]=0;q[a+24>>2]=256;if(!q[b+64>>2]){break c}}q[a+28>>2]=0;return(c|0)==16?12:8}q[a+28>>2]=-2;return c}if((d|0)<(e|0)){if(q[b+64>>2]){q[a+16>>2]=0;q[a+20>>2]=0;q[a+24>>2]=0;q[a+28>>2]=1;return(c|0)==8?12:16}if(!q[a+28>>2]){break a}q[a+28>>2]=1;return c}if(q[a+28>>2]>-1){break b}q[a+28>>2]=1}return c}q[b+88>>2]=1;a=q[b+56>>2];q[b+56>>2]=a-((w(a,5)|0)/(q[b+24>>2]+5|0)|0);return c}function Pc(a,b,c,d){var e=0,f=0,g=0,h=0,i=0;e=d<<2;q[e+b>>2]=65536;q[c+e>>2]=65536;e=0;a:{if((d|0)<=0){break a}while(1){f=e<<2;g=(d+e<<2)+a|0;h=((e^-1)+d<<2)+a|0;q[f+b>>2]=0-(q[g>>2]+q[h>>2]|0);q[c+f>>2]=q[g>>2]-q[h>>2];e=e+1|0;if((e|0)!=(d|0)){continue}break}if((d|0)<=0){break a}e=d;while(1){a=e-1|0;f=a<<2;g=f+b|0;h=g;i=q[g>>2];g=e<<2;q[h>>2]=i-q[g+b>>2];f=c+f|0;q[f>>2]=q[f>>2]+q[c+g>>2];f=(e|0)>1;e=a;if(f){continue}break}a=2;if((d|0)<2){break a}while(1){e=d;if((e|0)>(a|0)){while(1){f=(e<<2)+b|0;g=f-8|0;q[g>>2]=q[g>>2]-q[f>>2];e=e-1|0;if((e|0)>(a|0)){continue}break}}f=2;e=(a<<2)+b|0;g=e-8|0;q[g>>2]=q[g>>2]-(q[e>>2]<<1);e=(a|0)!=(d|0);a=a+1|0;if(e){continue}break}while(1){e=d;if((f|0)<(e|0)){while(1){a=(e<<2)+c|0;b=a-8|0;q[b>>2]=q[b>>2]-q[a>>2];e=e-1|0;if((f|0)<(e|0)){continue}break}}a=(f<<2)+c|0;b=a-8|0;q[b>>2]=q[b>>2]-(q[a>>2]<<1);a=(d|0)!=(f|0);f=f+1|0;if(a){continue}break}}}function db(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;Hg(+a);b=Eg(1)|0;d=Eg(0)|0;a:{b:{c:{d:{if((b|0)>0?1:(b|0)>=0){e=b;if(b>>>0>1048575){break d}}if(!(b&2147483647|d)){return-1/(a*a)}if((b|0)>-1){break c}return(a-a)/0}if(e>>>0>2146435071){break a}b=1072693248;k=-1023;if((e|0)!=1072693248){b=e;break b}if(d){break b}return 0}Hg(+(a*0x40000000000000));b=Eg(1)|0;d=Eg(0)|0;k=-1077}b=b+614242|0;l=+((b>>>20|0)+k|0);f=l*.30102999566361177;Fg(0,d|0);Fg(1,(b&1048575)+1072079006|0);c=+Gg()+ -1;g=c*(c*.5);h=c/(c+2);i=h*h;a=i*i;Hg(+(c-g));b=Eg(1)|0;Eg(0)|0;Fg(0,0);Fg(1,b|0);j=+Gg();m=j*.4342944818781689;n=f+m;a=c-j-g+h*(g+(a*(a*(a*.15313837699209373+.22222198432149784)+.3999999999940942)+i*(a*(a*(a*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)));a=n+(m+(f-n)+(a*.4342944818781689+(l*3.694239077158931e-13+(a+j)*2.5082946711645275e-11)))}return a}function Ef(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=ca-96|0;ca=f;a:{b:{if(!(r[a+4767|0]!=4?q[a+4632>>2]!=1:0)){e=p[a+4532>>1];e=(w(e,-5)+(w(e,59246)>>16)|0)+3146|0;g=(q[a+4580>>2]==2?e>>1:0)+e|0;if((g|0)<=0){break b}Oc(f+32|0,c,q[a+4640>>2]);c:{if(q[a+4632>>2]!=1){break c}e=o[a+4767|0];if((e|0)>3){break c}Eb(f- -64|0,d,c,e,q[a+4640>>2]);Oc(f,f- -64|0,q[a+4640>>2]);k=1;h=q[a+4640>>2];if((h|0)<1){break c}e=r[a+4767|0];l=w(e,e)<<27>>16;e=0;while(1){i=e<<1;j=i+(f+32|0)|0;p[j>>1]=(p[j>>1]>>>1)+(w(p[f+i>>1],l)>>>16);e=e+1|0;if((h|0)!=(e|0)){continue}break}}Ff(a+4744|0,c,q[a+4692>>2],f+32|0,g,q[a+4660>>2],o[a+4765|0]);e=b+32|0;Ga(e,c,q[a+4640>>2]);d:{if(k){Eb(f- -64|0,d,c,o[a+4767|0],q[a+4640>>2]);Ga(b,f- -64|0,q[a+4640>>2]);break d}a=q[a+4640>>2];if((a|0)>=17){break a}ka(b,e,a<<1)}ca=f+96|0;return}ja(37632,37735,51);G()}ja(37756,37735,63);G()}ja(37790,37735,104);G()}function Zc(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=x(0),l=0,m=0;f=ca-304|0;i=f;ca=f;d=q[a+4576>>2];a:{if((d|0)==(b|0)){c=0;if(q[a+4560>>2]==q[a+4556>>2]){break a}}if(!d){c=cb(a+5776|0,q[a+4556>>2],w(b,1e3),1);break a}c=f;j=w(q[a+4580>>2],10)+5|0;d=w(j,d);f=w(b,j);h=c-((((d|0)>(f|0)?d:f)<<1)+15&-16)|0;l=h;ca=h;if((d|0)>=1){c=d;while(1){g=c-1|0;m=(g<<1)+h|0;k=zg(u[((g<<2)+a|0)+7180>>2]);b:{if(x(y(k))-32768?e:-32768;p[m>>1]=(e|0)<32767?e:32767;e=(c|0)>1;c=g;if(e){continue}break}}g=cb(i,w(p[a+4576>>1],1e3),q[a+4556>>2],0);e=w(j,q[a+4556>>2]/1e3|0);c=l-((e<<1)+15&-16)|0;ca=c;g=Aa(i,c,h,d)+g|0;d=a+5776|0;g=g+cb(d,q[a+4556>>2],w(b<<16>>16,1e3),1)|0;c=Aa(d,h,c,e);if((f|0)>=1){while(1){b=f-1|0;u[((b<<2)+a|0)+7180>>2]=p[(b<<1)+h>>1];d=(f|0)>1;f=b;if(d){continue}break}}c=c+g|0}q[a+4560>>2]=q[a+4556>>2];ca=i+304|0;return c}function If(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;g=ca-16|0;ca=g;a:{if(q[a+4160>>2]){Ka(a+4232|0,a+4236|0,b,c);q[a+4220>>2]=1;break a}b:{if(!q[a+4220>>2]){break b}Ka(g+8|0,g+12|0,b,c);d=q[g+12>>2];e=q[a+4236>>2];c:{if((d|0)>(e|0)){h=a+4232|0;q[h>>2]=q[h>>2]>>d-e;break c}if((d|0)>=(e|0)){break c}q[g+8>>2]=q[g+8>>2]>>e-d}i=q[g+8>>2];d=q[a+4232>>2];if((i|0)<=(d|0)){break b}f=d;d=z(d);f=f<>2]=f;h=0;e=0;d=25-d|0;d=i>>((d|0)>0?d:0);d=(f|0)/(((d|0)>1?d:1)|0)|0;if((d|0)>=1){e=z(d);i=24-e|0;d:{if(!i){break d}if(d>>>0<=127){d=d<>>56-e;break d}d=d<>>i}f=w(d&127,13959168)>>>16|0;d=(e&1?32768:46214)>>>(e>>>1)|0;e=(w(f,d)>>>16|0)+d<<4}if((c|0)<1){break b}i=(65536-e|0)/(c|0)<<2;while(1){f=(h<<1)+b|0;d=p[f>>1];p[f>>1]=w(d,e>>>16|0)+(w(d,e&65532)>>>16|0);e=e+i|0;if((e|0)>65536){break b}h=h+1|0;if((h|0)<(c|0)){continue}break}}q[a+4220>>2]=0}ca=g+16|0} + + + +function Ic(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,s=0,t=0;if((d|0)>=1){j=q[a+20>>2];g=q[a+16>>2];e=q[a+12>>2];h=q[a+8>>2];i=q[a+4>>2];f=q[a>>2];while(1){k=m<<2;n=p[(m<<1)+c>>1]<<10;l=n-f|0;l=(w(l&65535,1746)>>>16|0)+w(l>>16,1746)|0;r=f+l|0;f=r-i|0;s=(w(f&65535,14986)>>>16|0)+w(f>>16,14986)|0;f=i+s|0;i=f-h|0;f=((w(i&65535,-26453)>>16)+w(i>>16,-26453)|0)+f|0;h=(f>>9)+1>>1;p[k+b>>1]=(f|0)>33553919?32767:(h|0)>-32768?h:-32768;h=(k|2)+b|0;o=e;e=n-e|0;k=(w(e&65535,6854)>>>16|0)+w(e>>16,6854)|0;t=o+k|0;e=t-g|0;o=(w(e&65535,25769)>>>16|0)+w(e>>16,25769)|0;e=g+o|0;g=e-j|0;e=((w(g&65535,-9994)>>16)+w(g>>16,-9994)|0)+e|0;j=(e>>9)+1>>1;p[h>>1]=(e|0)>33553919?32767:(j|0)>-32768?j:-32768;j=e+g|0;h=f+i|0;g=t+o|0;i=r+s|0;e=k+n|0;f=n+l|0;m=m+1|0;if((m|0)!=(d|0)){continue}break}q[a+20>>2]=j;q[a+16>>2]=g;q[a+12>>2]=e;q[a+8>>2]=h;q[a+4>>2]=i;q[a>>2]=f}}function Ub(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;a:{b:{if((d|0)>0){if((c|0)<=0){break b}if((c|0)<(d|0)){break a}while(1){q[(e<<2)+b>>2]=e;e=e+1|0;if((e|0)!=(d|0)){continue}break}f=1;if((d|0)>1){while(1){j=q[(f<<2)+a>>2];e=f;c:{while(1){g=e-1|0;h=g<<2;k=q[h+a>>2];if((k|0)<=(j|0)){break c}i=e<<2;q[i+a>>2]=k;q[b+i>>2]=q[b+h>>2];h=(e|0)>1;e=g;if(h){continue}break}e=0}e=e<<2;q[e+a>>2]=j;q[b+e>>2]=f;f=f+1|0;if((f|0)!=(d|0)){continue}break}}if((c|0)>(d|0)){j=d-2|0;k=((d<<2)+a|0)-4|0;f=d;while(1){h=q[(f<<2)+a>>2];if((h|0)>2]){e=j;g=e;d:{if((d|0)<2){break d}while(1){g=e<<2;i=q[g+a>>2];if((i|0)<=(h|0)){g=e;break d}l=g+4|0;q[l+a>>2]=i;q[b+l>>2]=q[b+g>>2];g=-1;i=(e|0)>0;e=e-1|0;if(i){continue}break}}e=(g<<2)+4|0;q[e+a>>2]=h;q[b+e>>2]=f}f=f+1|0;if((f|0)!=(c|0)){continue}break}}return}ja(8884,8908,51);G()}ja(8920,8908,52);G()}ja(8944,8908,53);G()}function Da(a){var b=0,c=0,d=0,e=0,f=0,g=0;Hg(+a);e=Eg(1)|0;Eg(0)|0;b=e;e=b>>>31|0;a:{b:{c:{d:{d=a;e:{f:{b=b&2147483647;g:{if(b>>>0>=1082532651){Hg(+a);b=Eg(1)|0;b=b&2147483647;if((b|0)==2146435072&(Eg(0)|0)!=0|b>>>0>2146435072){return a}if(!(a>709.782712893384^1)){return a*8.98846567431158e+307}if(!(a<-745.1332191019411)|a<-708.3964185322641^1){break g}break b}if(b>>>0<1071001155){break d}if(b>>>0<1072734898){break f}}a=a*1.4426950408889634+v[(e<<3)+54256>>3];if(y(a)<2147483648){b=~~a;break e}b=-2147483648;break e}b=(e^1)-e|0}c=+(b|0);a=d+c*-.6931471803691238;f=c*1.9082149292705877e-10;d=a-f;break c}if(b>>>0<=1043333120){break a}b=0;d=a}c=d;g=a;c=c*c;a=d-c*(c*(c*(c*(c*4.1381367970572385e-8+ -16533902205465252e-22)+6613756321437934e-20)+ -.0027777777777015593)+.16666666666666602);c=g+(d*a/(2-a)-f)+1;if(!b){break b}c=Ja(c,b)}return c}return a+1}function uf(a,b,c,d){var e=0,f=0,g=0,h=0,i=x(0),j=x(0),k=0,l=0,m=0;e=ca-1696|0;ca=e;o[a+4767|0]=4;g=q[a+4640>>2];h=g+q[a+4588>>2]|0;i=Kc(e+1632|0,c,d,h,q[a+4580>>2],g);a:{if(q[a+4664>>2]|!q[a+4632>>2]|q[a+4580>>2]!=4){break a}f=3;d=Kc(e+1536|0,(h<<3)+c|0,d,h,2,q[a+4640>>2]);Mc(b,e+1536|0,q[a+4640>>2]);k=a+4500|0;l=h<<1;i=x(i-d);j=x(3.4028234663852886e+38);while(1){g=f;Eb(e+1600|0,k,b,g,q[a+4640>>2]);zf(e+1536|0,e+1600|0,q[a+4640>>2]);eb(e,e+1536|0,c,l,q[a+4640>>2]);f=q[a+4640>>2];m=ta((f<<2)+e|0,h-f|0);f=q[a+4640>>2];d=x(m+ta(((f<<2)+e|0)+(h<<2)|0,h-f|0));b:{if(!(dj){break a}}f=g-1|0;j=d;if(g){continue}break}}c:{if(r[a+4767|0]==4){Mc(b,e+1632|0,q[a+4640>>2]);if(r[a+4767|0]==4){break c}}if(q[a+4580>>2]==4?!(q[a+4664>>2]|!q[a+4632>>2]):0){break c}ja(38228,38393,103);G()}ca=e+1696|0}function ma(a,b,c,d){var e=0,f=0,g=0;f=q[a+28>>2];d=f>>>d|0;e=a;a:{if((b|0)>=1){b=b+c|0;c=b-1|0;q[a+32>>2]=(f+q[a+32>>2]|0)-w(d,r[c|0]);d=w(d,r[c|0]-r[b|0]|0);break a}d=f-w(d,r[b+c|0])|0}q[e+28>>2]=d;if(d>>>0<=8388608){b=q[a+32>>2];while(1){f=b>>>23|0;b:{if((f|0)!=255){c=b>>>31|0;e=q[a+40>>2];if((e|0)>=0){b=a;d=q[a+24>>2];if(t[a+4>>2]>d+q[a+8>>2]>>>0){q[a+24>>2]=d+1;o[d+q[a>>2]|0]=c+e;d=0}else{d=-1}q[b+44>>2]=d|q[a+44>>2]}b=q[a+36>>2];if(b){g=c-1|0;while(1){d=-1;c=a;e=q[a+24>>2];if(t[a+4>>2]>e+q[a+8>>2]>>>0){q[a+24>>2]=e+1;o[e+q[a>>2]|0]=g;d=0;b=q[a+36>>2]}b=b-1|0;q[c+36>>2]=b;q[a+44>>2]=q[a+44>>2]|d;if(b){continue}break}}q[a+40>>2]=f&255;d=q[a+28>>2];b=q[a+32>>2];break b}q[a+36>>2]=q[a+36>>2]+1}d=d<<8;q[a+28>>2]=d;b=b<<8&2147483392;q[a+32>>2]=b;q[a+20>>2]=q[a+20>>2]+8;if(d>>>0<8388609){continue}break}}}function Fe(a,b,c){var d=0,e=0,f=0;if(!(!(1<>>0>16)){a:{b:{d=q[a+2324>>2];switch(d-2|0){case 0:case 2:break a;default:break b}}ja(6652,6630,44);G()}q[a+2332>>2]=w(b,5);d=w(d,w(b,327680)>>16);c:{d:{if(!(q[a+2320>>2]==(c|0)?q[a+2316>>2]==(b|0):0)){e=cb(a+2432|0,w(b,1e3),c,0);q[a+2320>>2]=c;if(q[a+2316>>2]!=(b|0)){break d}}f=1;if((d|0)==q[a+2328>>2]){break c}}c=q[a+2324>>2]==4;q[a+2384>>2]=(b|0)==8?c?2722:2745:c?2688:2733;if(!f){q[a+2336>>2]=w(b,20);c=(b&-5)==8;q[a+2732>>2]=c?4152:6276;q[a+2340>>2]=c?10:16;c=6448;e:{f:{switch(b-12|0){default:c=6433;if((b|0)==8){break e}ja(6739,6630,89);G();case 0:break f;case 4:break e}}c=6442}q[a+2376>>2]=1;q[a+2380>>2]=c;q[a+4164>>2]=0;o[a+2312|0]=10;q[a+2308>>2]=100;la(a+1284|0,0,1024)}q[a+2328>>2]=d;q[a+2316>>2]=b}return e}ja(6568,6630,43);G()}function Tf(a,b,c){var d=0,e=0,f=0,g=x(0),h=0,i=x(0),j=0,k=0;a:{if((c|0)>0){if((c|0)>65){break a}while(1){q[(d<<2)+b>>2]=d;d=d+1|0;if((d|0)!=(c|0)){continue}break}e=1;if((c|0)>1){while(1){g=u[(e<<2)+a>>2];d=e;b:{while(1){f=d-1|0;h=f<<2;i=u[h+a>>2];if(i>2]=i;q[b+j>>2]=q[b+h>>2];h=(d|0)>1;d=f;if(h){continue}break}d=0}d=d<<2;u[d+a>>2]=g;q[b+d>>2]=e;e=e+1|0;if((e|0)!=(c|0)){continue}break}}if((c|0)<65){h=c-2|0;j=((c<<2)+a|0)-4|0;e=c;while(1){g=u[(e<<2)+a>>2];if(!(g>u[j>>2]^1)){d=h;f=d;c:{if((c|0)<2){break c}while(1){f=d<<2;i=u[f+a>>2];if(i>2]=i;q[b+k>>2]=q[b+f>>2];f=-1;k=(d|0)>0;d=d-1|0;if(k){continue}break}}d=(f<<2)+4|0;u[d+a>>2]=g;q[b+d>>2]=e}e=e+1|0;if((e|0)!=65){continue}break}}return}ja(36513,36537,50);G()}ja(36583,36537,52);G()}function Bb(a,b,c,d,e,f,g,h){var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,r=0,s=0,t=x(0);j=q[a+44>>2];l=q[a+4>>2];if(b){m=q[a+36>>2]}else{j=j<>2]-g|0}n=(f|0)>1?f:1;o=a- -64|0;i=w(b,j);p=l+i|0;while(1){if((b|0)>=1){r=w(i,k);s=(w(k,p)<<2)+c|0;g=0;while(1){og(o,(w(g,j)<<2)+s|0,(g+r<<2)+d|0,q[a+60>>2],l,m,b);g=g+1|0;if((g|0)!=(b|0)){continue}break}}k=k+1|0;if((n|0)!=(k|0)){continue}break}if(!((e|0)!=1|(f|0)!=2|(i|0)<1)){g=0;while(1){a=(g<<2)+d|0;u[a>>2]=x(u[a>>2]*x(.5))+x(u[(g+i<<2)+d>>2]*x(.5));g=g+1|0;if((i|0)!=(g|0)){continue}break}}if((h|0)!=1){e=(e|0)>1?e:1;b=(i|0)/(h|0)|0;f=i-b<<2;t=x(h|0);a=0;while(1){c=w(a,i);g=0;if((b|0)>=1){while(1){h=(c+g<<2)+d|0;u[h>>2]=u[h>>2]*t;g=g+1|0;if((b|0)!=(g|0)){continue}break}}la((b+c<<2)+d|0,0,f);a=a+1|0;if((e|0)!=(a|0)){continue}break}}}function Od(a,b,c){var d=0,e=0,f=0,g=0;f=q[a+28>>2];d=f>>>15|0;e=a;a:{if(b){q[a+32>>2]=q[a+32>>2]+(f+w(d,b-32768|0)|0);c=w(d,c-b|0);break a}c=f+w(d,c-32768|0)|0}q[e+28>>2]=c;if(c>>>0<=8388608){b=q[a+32>>2];while(1){f=b>>>23|0;b:{if((f|0)!=255){c=b>>>31|0;d=q[a+40>>2];if((d|0)>=0){b=a;e=q[a+24>>2];if(t[a+4>>2]>e+q[a+8>>2]>>>0){q[a+24>>2]=e+1;o[e+q[a>>2]|0]=c+d;e=0}else{e=-1}q[b+44>>2]=e|q[a+44>>2]}b=q[a+36>>2];if(b){g=c-1|0;while(1){c=-1;e=a;d=q[a+24>>2];if(t[a+4>>2]>d+q[a+8>>2]>>>0){q[a+24>>2]=d+1;o[d+q[a>>2]|0]=g;c=0;b=q[a+36>>2]}b=b-1|0;q[e+36>>2]=b;q[a+44>>2]=q[a+44>>2]|c;if(b){continue}break}}q[a+40>>2]=f&255;c=q[a+28>>2];b=q[a+32>>2];break b}q[a+36>>2]=q[a+36>>2]+1}c=c<<8;q[a+28>>2]=c;b=b<<8&2147483392;q[a+32>>2]=b;q[a+20>>2]=q[a+20>>2]+8;if(c>>>0<8388609){continue}break}}}function $a(a,b,c,d){var e=0,f=0,g=0;g=q[a+28>>2];f=(g>>>0)/(d>>>0)|0;e=a;a:{if(b){q[a+32>>2]=q[a+32>>2]+(g+w(f,b-d|0)|0);d=w(f,c-b|0);break a}d=g+w(f,c-d|0)|0}q[e+28>>2]=d;if(d>>>0<=8388608){b=q[a+32>>2];while(1){f=b>>>23|0;b:{if((f|0)!=255){c=b>>>31|0;e=q[a+40>>2];if((e|0)>=0){b=a;d=q[a+24>>2];if(t[a+4>>2]>d+q[a+8>>2]>>>0){q[a+24>>2]=d+1;o[d+q[a>>2]|0]=c+e;d=0}else{d=-1}q[b+44>>2]=d|q[a+44>>2]}b=q[a+36>>2];if(b){g=c-1|0;while(1){d=-1;c=a;e=q[a+24>>2];if(t[a+4>>2]>e+q[a+8>>2]>>>0){q[a+24>>2]=e+1;o[e+q[a>>2]|0]=g;d=0;b=q[a+36>>2]}b=b-1|0;q[c+36>>2]=b;q[a+44>>2]=q[a+44>>2]|d;if(b){continue}break}}q[a+40>>2]=f&255;d=q[a+28>>2];b=q[a+32>>2];break b}q[a+36>>2]=q[a+36>>2]+1}d=d<<8;q[a+28>>2]=d;b=b<<8&2147483392;q[a+32>>2]=b;q[a+20>>2]=q[a+20>>2]+8;if(d>>>0<8388609){continue}break}}}function Ea(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0;e=b<<4;d=q[(c<<2)+a>>2];if((c|0)!=8){if((c|0)>=1){f=b<<20>>16;e=(e>>15)+1>>1;while(1){b=c-1|0;d=q[(b<<2)+a>>2]+((w(d>>16,f)+w(d,e)|0)+(w(d&65535,f)>>16)|0)|0;g=(c|0)>1;c=b;if(g){continue}break}}return d}b=b<<20>>16;c=(e>>15)+1>>1;d=q[a+28>>2]+((w(b,d>>16)+w(c,d)|0)+(w(b,d&65535)>>16)|0)|0;e=q[a>>2];f=q[a+4>>2];g=q[a+8>>2];h=q[a+12>>2];i=q[a+16>>2];j=q[a+20>>2];a=((q[a+24>>2]+w(c,d)|0)+w(b,d>>16)|0)+(w(b,d&65535)>>16)|0;a=((j+w(a,c)|0)+w(b,a>>16)|0)+(w(b,a&65535)>>16)|0;a=((i+w(a,c)|0)+w(b,a>>16)|0)+(w(b,a&65535)>>16)|0;a=((h+w(a,c)|0)+w(b,a>>16)|0)+(w(b,a&65535)>>16)|0;a=((g+w(a,c)|0)+w(b,a>>16)|0)+(w(b,a&65535)>>16)|0;a=((f+w(a,c)|0)+w(b,a>>16)|0)+(w(b,a&65535)>>16)|0;return((e+w(a,c)|0)+w(b,a>>16)|0)+(w(b,a&65535)>>16)|0}function Xb(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0;if((e|0)>=1){while(1){l=(j<<2)+b|0;pa(q[l>>2]);h=a+j|0;g=w((pa(q[l>>2])<<16)-136970240>>16,2251);f=g>>>16|0;o[h|0]=f;if(o[c|0]>g<<8>>24){f=f+1|0;o[h|0]=f}f=f<<24>>24>0?f:0;g=f<<24>>24<63?f:63;o[h|0]=g;f=o[c|0];a:{if(!(d|j)){m=h;h=f-4|0;g=g&255;f=(f|0)>67?63:(g|0)<(h|0)?h:g;o[m|0]=f;o[c|0]=f;break a}f=g-f|0;o[h|0]=f;i=f<<24>>24;k=o[c|0];g=k+8|0;if((i|0)>(g|0)){f=g+((i-k|0)+505>>>1|0)|0;o[h|0]=f}f=f<<24>>24>-4?f:-4;i=f<<24>>24<36?f:36;o[h|0]=i;m=c;k=i<<24>>24;b:{if((k|0)>(g|0)){g=r[c|0]+((k<<1)-g|0)|0;f=g<<24>>24<63?g:63;break b}f=i+r[c|0]|0}o[m|0]=f;o[h|0]=r[h|0]+4;f=r[c|0]}f=f<<24>>24;f=(w(f,7281)>>16)+w(f,29)|0;n=l,p=Na(((f|0)<1877?f:1877)+2090|0),q[n>>2]=p;j=j+1|0;if((j|0)!=(e|0)){continue}break}}}function Rb(a,b,c,d,e,f){var g=0,h=0,i=0;g=ca-144|0;ca=g;h=q[a+2328>>2];q[g+136>>2]=0;a:{b:{if(h-1>>>0<320){c:{d:{e:{switch(e|0){case 2:if(q[((q[a+2388>>2]<<2)+a|0)+2420>>2]!=1){break d}break;case 0:break e;default:break d}}i=g-((h+15&2147483632)<<1)|0;ca=i;ac(a,b,q[a+2388>>2],e,f);e=b;b=a+2765|0;Yb(e,i,o[b|0],o[a+2766|0],q[a+2328>>2]);Fd(a,g,f);Ed(a,g,c,i);Wc(a,g,c,0);q[a+4160>>2]=0;b=o[b|0];q[a+4164>>2]=b;if(b>>>0>=3){break b}q[a+2376>>2]=0;break c}o[a+2765|0]=q[a+4164>>2];Wc(a,g,c,1)}e=q[a+2336>>2];b=q[a+2328>>2];if((e|0)<(b|0)){break a}f=a+1348|0;i=f+(b<<1)|0;b=e-b<<1;ka(ra(f,i,b)+b|0,c,q[a+2328>>2]<<1);rg(a,g,c,h);If(a,c,h);q[a+2308>>2]=q[((q[a+2324>>2]<<2)+g|0)-4>>2];q[d>>2]=h;ca=g+144|0;return 0}ja(9416,9465,58);G()}ja(9485,9465,94);G()}ja(9560,9465,107);G()}function xf(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0,n=x(0),o=0;j=ca-528|0;ca=j;l=w(i,25);if((l|0)>0){while(1){m=k<<2;o=m+(j+80|0)|0;n=zg(x(u[f+m>>2]*x(131072)));a:{if(x(y(n))>2]=m;k=k+1|0;if((l|0)!=(k|0)){continue}break}}b:{if((i|0)>=1){f=w(i,5);f=(f|0)>1?f:1;k=0;while(1){l=k<<2;m=l+j|0;n=zg(x(u[g+l>>2]*x(131072)));c:{if(x(y(n))>2]=l;k=k+1|0;if((f|0)!=(k|0)){continue}break}Nc(j+480|0,b,c,d,j+524|0,j+80|0,j,h,i);if((i|0)<1){break b}b=w(i,5);b=(b|0)>1?b:1;k=0;while(1){u[(k<<2)+a>>2]=x(p[(j+480|0)+(k<<1)>>1])*x(6103515625e-14);k=k+1|0;if((b|0)!=(k|0)){continue}break}break b}Nc(j+480|0,b,c,d,j+524|0,j+80|0,j,h,i)}u[e>>2]=x(q[j+524>>2])*x(.0078125);ca=j+528|0}function Pb(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0,n=0,o=0,p=0;n=(i|0)>1?i:1;l=(b|0)>=(c|0);a:{if(l|(g|0)<(i|0)){break a}k=b;while(1){j=k<<2;m=j+e|0;if(!(q[m>>2]>7|q[f+j>>2])){j=0;while(1){p=za(h,1);o=(w(q[a+8>>2],j)+k<<2)+d|0;u[o>>2]=u[o>>2]+x(x(x(x(p|0)+x(-.5))*x(1<<13-q[m>>2]))*x(6103515625e-14));j=j+1|0;if((n|0)!=(j|0)){continue}break}g=g-n|0}k=k+1|0;if((k|0)>=(c|0)){break a}if((g|0)>=(i|0)){continue}break}}b:{if((g|0)<(i|0)|l){break b}while(1){k=b<<2;l=k+e|0;c:{if(q[l>>2]>7){break c}j=0;if(q[f+k>>2]!=1){break c}while(1){k=za(h,1);m=(w(q[a+8>>2],j)+b<<2)+d|0;u[m>>2]=u[m>>2]+x(x(x(x(k|0)+x(-.5))*x(1<<13-q[l>>2]))*x(6103515625e-14));j=j+1|0;if((n|0)!=(j|0)){continue}break}g=g-n|0}b=b+1|0;if((c|0)<=(b|0)){break b}if((g|0)>=(i|0)){continue}break}}}function fd(a,b,c){var d=x(0),e=x(0),f=x(0),g=x(0),h=x(0),i=0,j=x(0),k=x(0),l=x(0),m=x(0);i=b+12|0;j=u[b+8>>2];k=u[b+4>>2];l=u[b>>2];e=u[c+12>>2];f=u[c+8>>2];g=u[c+4>>2];h=u[c>>2];b=0;while(1){d=u[a>>2];m=u[i>>2];e=x(x(d*m)+e);u[c+12>>2]=e;f=x(x(j*d)+f);u[c+8>>2]=f;g=x(x(k*d)+g);u[c+4>>2]=g;h=x(x(l*d)+h);u[c>>2]=h;d=u[a+4>>2];l=u[i+4>>2];e=x(e+x(d*l));u[c+12>>2]=e;f=x(f+x(m*d));u[c+8>>2]=f;g=x(g+x(j*d));u[c+4>>2]=g;h=x(h+x(k*d));u[c>>2]=h;d=u[a+8>>2];k=u[i+8>>2];e=x(e+x(d*k));u[c+12>>2]=e;f=x(f+x(l*d));u[c+8>>2]=f;g=x(g+x(m*d));u[c+4>>2]=g;h=x(h+x(j*d));u[c>>2]=h;d=u[a+12>>2];j=u[i+12>>2];e=x(e+x(d*j));u[c+12>>2]=e;f=x(f+x(k*d));u[c+8>>2]=f;g=x(g+x(l*d));u[c+4>>2]=g;h=x(h+x(m*d));u[c>>2]=h;i=i+16|0;a=a+16|0;b=b+4|0;if((b|0)<21){continue}break}}function nf(a,b,c,d,e,f,g,h){var i=x(0),j=x(0),k=0,l=x(0),m=x(0);j=u[g>>2];l=u[f>>2];a:{if(!((e|0)!=1|h|u[f+4>>2]!=x(0))){if((c|0)<1){break a}f=0;while(1){i=x(u[(w(d,f)<<2)+a>>2]*x(32768));u[(f<<2)+b>>2]=i-j;j=x(l*i);f=f+1|0;if((f|0)!=(c|0)){continue}break}break a}k=(c|0)/(e|0)|0;if((e|0)!=1){la(b,0,c<<2)}b:{if((k|0)<1){break b}f=0;while(1){u[(w(e,f)<<2)+b>>2]=u[(w(d,f)<<2)+a>>2]*x(32768);f=f+1|0;if((k|0)!=(f|0)){continue}break}if(!h|(k|0)<1){break b}f=0;while(1){d=(w(e,f)<<2)+b|0;i=u[d>>2];a=i>x(65536);h=d;d=(a?x(65536):i)>2]=a?m:d?m:i;f=f+1|0;if((k|0)!=(f|0)){continue}break}}if((c|0)<1){break a}f=0;while(1){a=(f<<2)+b|0;i=u[a>>2];u[a>>2]=i-j;j=x(l*i);f=f+1|0;if((f|0)!=(c|0)){continue}break}}u[g>>2]=j}function vd(a,b,c,d,e,f,g,h){var i=0,j=0,k=x(0),l=x(0),m=0,n=x(0),o=x(0),p=0,s=0,t=0,v=0;j=ca-16|0;ca=j;q[j+8>>2]=0;q[j+12>>2]=0;if(e){l=x(.149993896484375)}else{i=h<<2;o=u[i+25216>>2];l=u[i+25232>>2]}if((b|0)<(c|0)){p=(g|0)>1?g:1;s=(q[f+4>>2]<<3)+32|0;h=(w(h,84)+w(e,42)|0)+24880|0;while(1){e=((b|0)<20?b:20)<<1;t=e+h|0;v=h+(e|1)|0;e=0;while(1){i=(s-q[f+20>>2]|0)-z(q[f+28>>2])|0;a:{if((i|0)>=15){g=zd(f,r[t|0]<<7,r[v|0]<<6);break a}if((i|0)>=2){g=na(f,25248,2);g=g>>1^0-(g&1);break a}g=-1;if((i|0)!=1){break a}g=0-sa(f,1)|0}i=(w(q[a+8>>2],e)+b<<2)+d|0;m=(j+8|0)+(e<<2)|0;n=u[m>>2];k=x(g|0);u[i>>2]=x(n+x(o*x(B(u[i>>2],x(-9)))))+k;u[m>>2]=x(n+k)-x(l*k);e=e+1|0;if((p|0)!=(e|0)){continue}break}b=b+1|0;if((c|0)!=(b|0)){continue}break}}ca=j+16|0}function Ua(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;Hg(+a);b=Eg(1)|0;e=Eg(0)|0;a:{b:{c:{d:{if((b|0)>0?1:(b|0)>=0){f=b;if(b>>>0>1048575){break d}}if(!(b&2147483647|e)){return-1/(a*a)}if((b|0)>-1){break c}return(a-a)/0}if(f>>>0>2146435071){break a}b=1072693248;g=-1023;if((f|0)!=1072693248){b=f;break b}if(e){break b}return 0}Hg(+(a*0x40000000000000));b=Eg(1)|0;e=Eg(0)|0;g=-1077}b=b+614242|0;d=+((b>>>20|0)+g|0);Fg(0,e|0);Fg(1,(b&1048575)+1072079006|0);a=+Gg()+ -1;c=a/(a+2);h=d*.6931471803691238;i=a;j=d*1.9082149292705877e-10;k=c;d=a*(a*.5);c=c*c;a=c*c;a=h+(i+(j+k*(d+(a*(a*(a*.15313837699209373+.22222198432149784)+.3999999999940942)+c*(a*(a*(a*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)))-d))}return a}function va(a,b,c){var d=0,e=0,f=0,g=0;d=q[a+28>>2];c=d>>>c|0;d=d-c|0;a:{if(!b){c=d;break a}q[a+32>>2]=d+q[a+32>>2]}q[a+28>>2]=c;if(c>>>0<=8388608){b=q[a+32>>2];while(1){f=b>>>23|0;b:{if((f|0)!=255){c=b>>>31|0;e=q[a+40>>2];if((e|0)>=0){b=a;d=q[a+24>>2];if(t[a+4>>2]>d+q[a+8>>2]>>>0){q[a+24>>2]=d+1;o[d+q[a>>2]|0]=c+e;d=0}else{d=-1}q[b+44>>2]=d|q[a+44>>2]}b=q[a+36>>2];if(b){g=c-1|0;while(1){c=-1;d=a;e=q[a+24>>2];if(t[a+4>>2]>e+q[a+8>>2]>>>0){q[a+24>>2]=e+1;o[e+q[a>>2]|0]=g;c=0;b=q[a+36>>2]}b=b-1|0;q[d+36>>2]=b;q[a+44>>2]=q[a+44>>2]|c;if(b){continue}break}}q[a+40>>2]=f&255;c=q[a+28>>2];b=q[a+32>>2];break b}q[a+36>>2]=q[a+36>>2]+1}c=c<<8;q[a+28>>2]=c;b=b<<8&2147483392;q[a+32>>2]=b;q[a+20>>2]=q[a+20>>2]+8;if(c>>>0<8388609){continue}break}}}function ra(a,b,c){var d=0;a:{if((a|0)==(b|0)){break a}if((b-a|0)-c>>>0<=0-(c<<1)>>>0){return ka(a,b,c)}d=(a^b)&3;b:{c:{if(a>>>0>>0){if(d){d=a;break b}if(!(a&3)){d=a;break c}d=a;while(1){if(!c){break a}o[d|0]=r[b|0];b=b+1|0;c=c-1|0;d=d+1|0;if(d&3){continue}break}break c}d:{if(d){break d}if(a+c&3){while(1){if(!c){break a}c=c-1|0;d=c+a|0;o[d|0]=r[b+c|0];if(d&3){continue}break}}if(c>>>0<=3){break d}while(1){c=c-4|0;q[c+a>>2]=q[b+c>>2];if(c>>>0>3){continue}break}}if(!c){break a}while(1){c=c-1|0;o[c+a|0]=r[b+c|0];if(c){continue}break}break a}if(c>>>0<=3){break b}while(1){q[d>>2]=q[b>>2];b=b+4|0;d=d+4|0;c=c-4|0;if(c>>>0>3){continue}break}}if(!c){break a}while(1){o[d|0]=r[b|0];d=d+1|0;b=b+1|0;c=c-1|0;if(c){continue}break}}return a}function fe(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=ca-32|0;ca=d;g=q[a+28>>2];q[d+16>>2]=g;h=q[a+20>>2];q[d+28>>2]=c;q[d+24>>2]=b;b=h-g|0;q[d+20>>2]=b;g=b+c|0;h=2;b=d+16|0;a:{while(1){b:{c:{f=Z(q[a+60>>2],b|0,h|0,d+12|0)|0;e=0;d:{if(!f){break d}q[14656]=f;e=-1}e:{if(!e){e=q[d+12>>2];if((e|0)==(g|0)){break e}if((e|0)>-1){break c}break b}if((g|0)!=-1){break b}}b=q[a+44>>2];q[a+28>>2]=b;q[a+20>>2]=b;q[a+16>>2]=b+q[a+48>>2];a=c;break a}i=q[b+4>>2];f=i>>>0>>0;j=(f<<3)+b|0;i=e-(f?i:0)|0;q[j>>2]=i+q[j>>2];j=(f?12:4)+b|0;q[j>>2]=q[j>>2]-i;b=f?b+8|0:b;g=g-e|0;h=h-f|0;continue}break}q[a+28>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;q[a>>2]=q[a>>2]|32;a=0;if((h|0)==2){break a}a=c-q[b+4>>2]|0}ca=d+32|0;return a|0}function Cd(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=(c|0)<1;a:{b:{while(1){d=0;e=0;if(!j){while(1){g=q[(d<<2)+b>>2];f=g>>31;g=f^f+g;f=(g|0)>(e|0);e=f?g:e;i=f?d:i;d=d+1|0;if((d|0)!=(c|0)){continue}break}}d=(e>>4)+1>>1;if((d|0)>=32768){d=(d|0)<163838?d:163838;sb(b,c,65470-(((d<<14)-536854528|0)/(w(d,i+1|0)>>2)|0)|0);h=h+1|0;if((h|0)!=10){continue}break b}break}if((h|0)==10){break b}d=0;if((c|0)<=0){break a}while(1){p[(d<<1)+a>>1]=(q[(d<<2)+b>>2]>>4)+1>>1;d=d+1|0;if((d|0)!=(c|0)){continue}break}break a}if((c|0)<1){break a}d=0;while(1){g=(d<<1)+a|0;h=(d<<2)+b|0;f=q[h>>2]>>4;e=32767;c:{if((f|0)>65534){break c}e=-32768;if((f|0)<-65537){break c}e=f+1>>1}p[g>>1]=e;q[h>>2]=e<<5;d=d+1|0;if((d|0)!=(c|0)){continue}break}}}function tg(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=x(0),k=0,l=0,m=0;e=ca-16|0;f=e;ca=e;if((a|0)!=(c|0)){g=e-96|0;ca=g;e=0;while(1){u[(e<<2)+g>>2]=u[((e^-1)+24<<2)+b>>2];e=e+1|0;if((e|0)!=24){continue}break}b=0;if((d|0)>=4){h=d-3|0;while(1){e=b<<2;i=e+a|0;u[f>>2]=u[i>>2];k=e|4;u[f+4>>2]=u[k+a>>2];l=e|8;u[f+8>>2]=u[l+a>>2];m=e|12;u[f+12>>2]=u[m+a>>2];fd(g,i-96|0,f);u[c+e>>2]=u[f>>2];u[c+k>>2]=u[f+4>>2];u[c+l>>2]=u[f+8>>2];u[c+m>>2]=u[f+12>>2];b=b+4|0;if((h|0)>(b|0)){continue}break}}if((b|0)<(d|0)){while(1){h=b<<2;j=u[h+a>>2];i=b-24|0;e=0;while(1){j=x(j+x(u[(e<<2)+g>>2]*u[(e+i<<2)+a>>2]));e=e+1|0;if((e|0)!=24){continue}break}u[c+h>>2]=j;b=b+1|0;if((d|0)!=(b|0)){continue}break}}ca=f+16|0;return}ja(31388,31413,102);G()}function gg(a,b,c,d){var e=0,f=0,g=x(0),h=0,i=0,j=0;f=5760;i=ca;j=i;a:{b:{if(!(!b|(c|0)<1)){h=q[a+12>>2];e=1;c:{d:{switch((r[b|0]&3)-1|0){case 0:case 1:e=2;break c;case 2:break d;default:break c}}f=-4;if((c|0)<2){break b}e=r[b+1|0]&63}f=-4;e=w(Ib(b,h),e);if((e|0)<1|(w(e,25)|0)>(w(h,3)|0)){break b}f=(e|0)>5760?5760:e}e=q[a+8>>2];if(e-1>>>0>=2){break a}h=i-((w(e,f)<<2)+15&-16)|0;ca=h;e=0;f=hg(a,b,c,h,f);e:{if((f|0)<1){break e}b=w(q[a+8>>2],f);if((b|0)<1){break e}while(1){c=(e<<1)+d|0;g=x(u[h+(e<<2)>>2]*x(32768));g=g>x(-32768)?g:x(-32768);g=zg(g>1]=a;e=e+1|0;if((b|0)!=(e|0)){continue}break}}}ca=j;return f}ja(33150,33038,810);G()}function Pf(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=ca-416|0;ca=f;la(f+208|0,0,200);f=la(f,0,200);if(!(e&1)){if((d|0)>=1){g=e<<3;l=g+f|0;s=g+(f+208|0)|0;m=+c;t=(e|0)<1;while(1){j=+u[(k<<2)+b>>2];g=0;if(!t){while(1){h=g<<3;n=h|8;o=n+(f+208|0)|0;p=v[o>>3];v[h+(f+208|0)>>3]=j;h=f+h|0;q=v[f+208>>3];v[h>>3]=v[h>>3]+j*q;g=g+2|0;r=v[(f+208|0)+(g<<3)>>3];i=i+(p-j)*m;v[o>>3]=i;h=f+n|0;v[h>>3]=q*i+v[h>>3];j=p+(r-i)*m;i=r;if((e|0)>(g|0)){continue}break}}v[s>>3]=j;i=v[f+208>>3];v[l>>3]=v[l>>3]+j*i;k=k+1|0;if((k|0)!=(d|0)){continue}break}}g=0;if((e|0)>=0){while(1){u[(g<<2)+a>>2]=v[f+(g<<3)>>3];b=(e|0)!=(g|0);g=g+1|0;if(b){continue}break}}ca=f+416|0;return}ja(37257,37294,49);G()}function la(a,b,c){var d=0,e=0,f=0,g=0;a:{if(!c){break a}d=a+c|0;o[d-1|0]=b;o[a|0]=b;if(c>>>0<3){break a}o[d-2|0]=b;o[a+1|0]=b;o[d-3|0]=b;o[a+2|0]=b;if(c>>>0<7){break a}o[d-4|0]=b;o[a+3|0]=b;if(c>>>0<9){break a}d=0-a&3;e=d+a|0;b=w(b&255,16843009);q[e>>2]=b;c=c-d&-4;d=c+e|0;q[d-4>>2]=b;if(c>>>0<9){break a}q[e+8>>2]=b;q[e+4>>2]=b;q[d-8>>2]=b;q[d-12>>2]=b;if(c>>>0<25){break a}q[e+24>>2]=b;q[e+20>>2]=b;q[e+16>>2]=b;q[e+12>>2]=b;q[d-16>>2]=b;q[d-20>>2]=b;q[d-24>>2]=b;q[d-28>>2]=b;g=e&4|24;c=c-g|0;if(c>>>0<32){break a}d=b;f=b;b=e+g|0;while(1){q[b+24>>2]=f;q[b+28>>2]=d;q[b+16>>2]=f;q[b+20>>2]=d;q[b+8>>2]=f;q[b+12>>2]=d;q[b>>2]=f;q[b+4>>2]=d;b=b+32|0;c=c-32|0;if(c>>>0>31){continue}break}}return a}function _f(a){var b=0,c=0,d=0,e=0,f=0,g=0;if(r[a+4541|0]==2){b=pa((w(q[a+4576>>2],65536e3)|0)/q[a+4544>>2]|0);c=q[a+4696>>2];d=pa(3932160);e=pa(3932160);f=q[a+8>>2];g=c<<16>>16;c=0-(c<<2)|0;c=(w(g,c&65532)>>16)+w(c>>16,g)|0;b=(((b-(f>>8)|0)+w(c>>16,b-d<<16>>16)|0)+(w(c&65535,b-e<<16>>16)>>16)|0)-2048|0;b=(b|0)<0?w(b,3):b;b=(b|0)>-51?b:-51;b=w(p[a+4532>>1],(b|0)<51?b:51);q[a+8>>2]=w(b>>16,6554)+f+(w(b&65535,6554)>>>16);d=pa(60);e=pa(100);c=q[a+8>>2];b=a;a:{b:{if(d<<8>e<<8){if((c|0)>pa(60)<<8){a=pa(60)<<8;break a}if(q[a+8>>2]>=pa(100)<<8){break b}a=pa(100)<<8;break a}if((c|0)>pa(100)<<8){a=pa(100)<<8;break a}if(q[a+8>>2]>=pa(60)<<8){break b}a=pa(60)<<8;break a}a=q[a+8>>2]}q[b+8>>2]=a}}function bf(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=ca;k=h;i=-1;e=q[a+144>>2];j=(e|0)/400|0;a:{if((j|0)>(c|0)){break a}f=c;g=q[a+156>>2];if((g|0)!=5e3){f=g-5001|0;if(f>>>0>8){break a}f=(g|0)<=5005?j<(c|0)){break a}}if((f|0)<1){break a}g=w(f,50);if(!((g|0)==(w(e,6)|0)|((e|0)==(w(f,400)|0)|(e|0)==(w(f,200)|0)|(e|0)==(w(f,100)|0)|(e|0)==(g|0)|(e|0)==(w(f,25)|0)|(g|0)==(w(e,3)|0)|(g|0)==e<<2|(g|0)==(w(e,5)|0)))){break a}g=h-((w(q[a+112>>2],f)<<2)+15&-16)|0;ca=g;i=q[a+112>>2];h=w(i,f);if((h|0)>=1){e=0;while(1){u[g+(e<<2)>>2]=x(p[(e<<1)+b>>1])*x(30517578125e-15);e=e+1|0;if((h|0)!=(e|0)){continue}break}}i=Dc(a,g,f,d,3828,16,b,c,-2,i,1,0)}ca=k;return i}function ib(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;a:{b:{if((e|0)>5){if(e&1){break b}if((d|0)<(e|0)){break a}if((d|0)>(e|0)){m=(e|0)<7;h=e;while(1){l=h<<1;f=l+b|0;i=f-2|0;j=((((w(p[c+2>>1],p[f-4>>1])+w(p[c>>1],p[i>>1])|0)+w(p[c+4>>1],p[f-6>>1])|0)+w(p[c+6>>1],p[f-8>>1])|0)+w(p[c+8>>1],p[f-10>>1])|0)+w(p[c+10>>1],p[f-12>>1])|0;g=6;if(!m){while(1){k=g<<1;j=(j+w(p[k+c>>1],p[i-k>>1])|0)+w(p[(k|2)+c>>1],p[((g^-1)<<1)+i>>1])|0;g=g+2|0;if((g|0)<(e|0)){continue}break}}f=((p[f>>1]<<12)-j>>11)+1>>1;f=(f|0)>-32768?f:-32768;p[a+l>>1]=(f|0)<32767?f:32767;h=h+1|0;if((h|0)!=(d|0)){continue}break}}la(a,0,e<<1);return}ja(1799,1824,67);G()}ja(1851,1824,68);G()}ja(1882,1824,69);G()}function oc(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;q[a+24>>2]=0;q[a+28>>2]=128;q[a+16>>2]=0;q[a+20>>2]=9;q[a+8>>2]=0;q[a+12>>2]=0;q[a+4>>2]=c;q[a>>2]=b;if(c){q[a+24>>2]=1;e=r[b|0];f=1}q[a+44>>2]=0;q[a+40>>2]=e;q[a+28>>2]=32768;q[a+20>>2]=17;g=e>>>1^127;q[a+32>>2]=g;a:{if(c>>>0<=f>>>0){d=f;break a}d=f+1|0;q[a+24>>2]=d;h=r[b+f|0]}q[a+40>>2]=h;q[a+28>>2]=8388608;q[a+20>>2]=25;g=((e<<8|h)>>>1&255|g<<8)^255;q[a+32>>2]=g;f=0;i=a;b:{if(c>>>0<=d>>>0){e=d;d=0;break b}e=d+1|0;q[a+24>>2]=e;d=r[b+d|0]}q[i+40>>2]=d;q[a+28>>2]=-2147483648;q[a+20>>2]=33;g=((d|h<<8)>>>1&255|g<<8)^255;q[a+32>>2]=g;if(c>>>0>e>>>0){q[a+24>>2]=e+1;f=r[b+e|0]}q[a+40>>2]=f;q[a+32>>2]=((d<<8|f)>>>1&255|g<<8)^255}function Xf(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,s=0;if((f|0)>=1){h=0-q[c+4>>2]|0;l=h&16383;c=0-q[c>>2]|0;m=c&16383;n=h<<2>>16;o=c<<2>>16;c=q[d+4>>2];i=q[d>>2];while(1){j=c;r=k<<1;c=p[r+a>>1];h=q[b>>2];h=(w(c,h>>16)+i|0)+(w(c,h&65535)>>16)<<2;i=h>>16;g=h&65532;s=((j+w(i,o)|0)+(w(g,o)>>16)|0)+((w(i,m)+(w(g,m)>>>16|0)>>13)+1>>1)|0;q[d>>2]=s;j=q[b+4>>2];g=(w(i,n)+(w(g,n)>>16)|0)+((w(i,l)+(w(g,l)>>>16|0)>>13)+1>>1)|0;q[d+4>>2]=g;i=(w(c,j>>16)+(w(c,j&65535)>>16)|0)+s|0;q[d>>2]=i;j=g;g=q[b+8>>2];c=j+((w(c,g&65535)>>16)+w(c,g>>16)|0)|0;q[d+4>>2]=c;g=h+16383>>14;p[e+r>>1]=(h|0)>536854528?32767:(g|0)>-32768?g:-32768;k=k+1|0;if((k|0)!=(f|0)){continue}break}}}function fc(a,b,c){a:{if(b>>>0>20){break a}b:{switch(b-9|0){case 0:b=q[c>>2];q[c>>2]=b+4;q[a>>2]=q[b>>2];return;case 1:b=q[c>>2];q[c>>2]=b+4;b=q[b>>2];q[a>>2]=b;q[a+4>>2]=b>>31;return;case 2:b=q[c>>2];q[c>>2]=b+4;q[a>>2]=q[b>>2];q[a+4>>2]=0;return;case 3:b=q[c>>2]+7&-8;q[c>>2]=b+8;c=q[b+4>>2];q[a>>2]=q[b>>2];q[a+4>>2]=c;return;case 4:b=q[c>>2];q[c>>2]=b+4;b=p[b>>1];q[a>>2]=b;q[a+4>>2]=b>>31;return;case 5:b=q[c>>2];q[c>>2]=b+4;q[a>>2]=s[b>>1];q[a+4>>2]=0;return;case 6:b=q[c>>2];q[c>>2]=b+4;b=o[b|0];q[a>>2]=b;q[a+4>>2]=b>>31;return;case 7:b=q[c>>2];q[c>>2]=b+4;q[a>>2]=r[b|0];q[a+4>>2]=0;return;case 8:break b;default:break a}}b=q[c>>2]+7&-8;q[c>>2]=b+8;v[a>>3]=v[b>>3]}}function Qf(a,b,c,d,e,f,g,h){var i=0,j=0,k=0,l=0,m=0,n=0,o=0;k=ca;n=k;k=k-((g<<2)+15&-16)|0;ca=k;a:{if((g|0)<=0){l=k+(g<<1)|0;break a}m=w(h-2|0,g);i=q[f>>2];l=i<<16>>16;o=(i>>15)+1>>1;while(1){i=q[(j+m<<2)+e>>2];i=((w(l,i&65535)>>16)+w(l,i>>16)|0)+w(i,o)|0;p[k+(j<<1)>>1]=(i|0)>8388607?32767:(i|0)<-8388608?-32768:i>>>8|0;j=j+1|0;if((j|0)!=(g|0)){continue}break}l=k+(g<<1)|0;if((g|0)<1){break a}i=w(h-1|0,g);h=q[f+4>>2];f=h<<16>>16;m=(h>>15)+1>>1;j=0;while(1){h=q[(i+j<<2)+e>>2];h=((w(f,h&65535)>>16)+w(f,h>>16)|0)+w(h,m)|0;p[(j<<1)+l>>1]=(h|0)>8388607?32767:(h|0)<-8388608?-32768:h>>>8|0;j=j+1|0;if((j|0)!=(g|0)){continue}break}}Ka(a,b,k,g);Ka(c,d,l,g);ca=n}function Tc(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=ca-400|0;ca=e;if(c>>>0<=24){while(1){f=(d<<4)+e|0;g=+u[(d<<2)+b>>2];v[f>>3]=g;v[f+8>>3]=g;f=(c|0)!=(d|0);d=d+1|0;if(f){continue}break}if(c){b=0;g=v[e+8>>3];f=c;while(1){d=b;b=d+1|0;h=(b<<4)+e|0;i=-v[h>>3]/(g>9.999999717180685e-10?g:9.999999717180685e-10);u[(d<<2)+a>>2]=i;a:{if((c|0)<=(d|0)){break a}j=v[h>>3];v[h>>3]=j+i*g;g=g+i*j;d=1;if((f|0)==1){break a}while(1){h=(b+d<<4)+e|0;j=v[h>>3];l=h;h=(d<<4)+e|0;k=v[h+8>>3];v[l>>3]=j+i*k;v[h+8>>3]=k+i*j;d=d+1|0;if((f|0)!=(d|0)){continue}break}}f=f-1|0;if((b|0)!=(c|0)){continue}break}v[e+8>>3]=g}ca=e+400|0;return x(v[e+8>>3])}ja(36339,36399,44);G()}function Oc(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0;a:{if((c|0)>0){f=1;if(c&1){break a}e=p[b>>1];d=p[b+2>>1]-e|0;d=131072/(((d|0)>1?d:1)>>>0)|0;e=d+(131072/(((e|0)>1?e:1)>>>0)|0)|0;p[a>>1]=e>>>0<32767?e:32767;e=c-1|0;if((c|0)>=3){while(1){j=d;c=f<<1;g=c+2|0;h=g+b|0;d=p[h>>1]-p[b+c>>1]|0;i=131072/(((d|0)>1?d:1)>>>0)|0;d=j+i|0;p[a+c>>1]=d>>>0<32767?d:32767;f=f+2|0;c=p[(f<<1)+b>>1]-p[h>>1]|0;d=131072/(((c|0)>1?c:1)>>>0)|0;c=i+d|0;p[a+g>>1]=c>>>0<32767?c:32767;if((e|0)>(f|0)){continue}break}}c=e<<1;b=32768-p[c+b>>1]|0;b=(131072/(((b|0)>1?b:1)>>>0)|0)+d|0;p[a+c>>1]=b>>>0<32767?b:32767;return}ja(37334,37358,51);G()}ja(37388,37358,52);G()}function Cc(a,b,c,d,e,f,g,h,i){var j=x(0),k=0,l=0;l=48e3/(i|0)|0;i=(e|0)/(l|0)|0;a:{if((g|0)!=1){e=0;if((i|0)<=0){break a}while(1){k=e<<3;j=u[(w(e,l)<<2)+h>>2];j=x(j*j);j=x(x(j*d)+x(x(x(1)-j)*c));u[k+b>>2]=u[a+k>>2]*j;k=k|4;u[k+b>>2]=u[a+k>>2]*j;e=e+1|0;if((i|0)!=(e|0)){continue}break}break a}if((i|0)<1){break a}e=0;while(1){k=e<<2;j=u[(w(e,l)<<2)+h>>2];j=x(j*j);u[k+b>>2]=u[a+k>>2]*x(x(j*d)+x(x(x(1)-j)*c));e=e+1|0;if((i|0)!=(e|0)){continue}break}}l=(g|0)>1?g:1;h=0;while(1){e=i;if((f|0)>(e|0)){while(1){k=w(e,g)+h<<2;u[k+b>>2]=u[a+k>>2]*d;e=e+1|0;if((f|0)!=(e|0)){continue}break}}h=h+1|0;if((l|0)!=(h|0)){continue}break}}function jg(a,b,c){var d=0,e=0,f=0;d=ca-16|0;ca=d;f=-1;a:{b:{if((b|0)<=15999){if((b|0)==8e3|(b|0)==12e3){break b}break a}if((b|0)==16e3|(b|0)==48e3){break b}if((b|0)!=24e3){break a}}if(c-1>>>0>1){break a}q[d+12>>2]=8552;q[d+12>>2]=q[d+12>>2]+3&-4;a=la(a,0,(q[d+12>>2]+(w((q[2442]<<2)+8288|0,c)+(q[2443]<<5)|0)|0)+180|0);f=-3;q[d+8>>2]=8552;e=q[d+8>>2]+3&-4;q[d+8>>2]=e;q[a+48>>2]=c;q[a+8>>2]=c;q[a+4>>2]=88;q[a+24>>2]=b;q[a+12>>2]=b;q[a+16>>2]=c;e=e+88|0;q[a>>2]=e;if(rb(a+88|0)){break a}e=a+e|0;if(mg(e,b,c)){break a}f=0;q[d>>2]=0;ua(e,10016,d);q[a+64>>2]=((b&65535)>>>0)/400;q[a+60>>2]=0;q[a+44>>2]=0}ca=d+16|0;return f}function Aa(a,b,c,d){var e=0,f=0,g=0;a:{e=q[a+284>>2];if((e|0)<=(d|0)){g=q[a+292>>2];if((e|0)<(g|0)){break a}f=a+168|0;e=e-g<<1;ka(f+(g<<1)|0,c,e);b:{c:{switch(q[a+264>>2]-1|0){case 0:Fc(a,b,f,q[a+284>>2]);Fc(a,(q[a+288>>2]<<1)+b|0,c+e|0,d-q[a+284>>2]|0);break b;case 1:Ec(a,b,f,q[a+284>>2]);Ec(a,(q[a+288>>2]<<1)+b|0,c+e|0,d-q[a+284>>2]|0);break b;case 2:uc(a,b,f,q[a+284>>2]);uc(a,(q[a+288>>2]<<1)+b|0,c+e|0,d-q[a+284>>2]|0);break b;default:break c}}ka(ka(b,f,q[a+284>>2]<<1)+(q[a+288>>2]<<1)|0,c+e|0,d-q[a+284>>2]<<1)}a=q[a+292>>2];ka(f,(d-a<<1)+c|0,a<<1);return 0}ja(2521,2474,184);G()}ja(2561,2474,186);G()}function xd(a,b,c,d,e,f,g,h){var i=0,j=0,k=0,l=x(0),m=0,n=0,o=0,p=0,r=0,s=0,t=x(0),v=x(0);if((b|0)<(c|0)){r=(h|0)>1?h:1;while(1){o=(b<<2)+f|0;i=q[o>>2];if((i|0)>=1){m=65536<>16;s=m-1|0;t=x(m|0);k=q[a+8>>2];h=0;while(1){n=g;l=x(C(x(x(u[(w(h,k)+b<<2)+e>>2]+x(.5))*t)));a:{if(x(y(l))0?j:0;ya(n,j,i);k=q[a+8>>2];p=w(k,h)+b<<2;i=p+d|0;n=i;v=u[i>>2];i=q[o>>2];l=x(x(x(x(x(j|0)+x(.5))*x(1<<14-i))*x(6103515625e-14))+x(-.5));u[n>>2]=v+l;j=e+p|0;u[j>>2]=u[j>>2]-l;h=h+1|0;if((r|0)!=(h|0)){continue}break}}b=b+1|0;if((c|0)!=(b|0)){continue}break}}}function td(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0;a:{if((c|0)>0){if((b|0)<=1){break a}j=b-1|0;g=q[(j<<2)+a>>2];e=g>>31;e=e^e+g;h=g>>>31|0;while(1){g=j-1|0;f=b-g|0;h=q[q[(((e|0)>(f|0)?f:e)<<2)+25488>>2]+(((e|0)<(f|0)?f:e)<<2)>>2]+h|0;i=q[(g<<2)+a>>2];k=i>>31;e=(k^i+k)+e|0;if((i|0)<=-1){i=h;h=e+1|0;h=i+q[q[(((e|0)<(f|0)?h:f)<<2)+25488>>2]+(((h|0)<(f|0)?f:h)<<2)>>2]|0}f=(j|0)>1;j=g;if(f){continue}break}g=d;a=c+1|0;d=(b|0)>(c|0);Pa(g,h,q[q[((d?a:b)<<2)+25488>>2]+(((a|0)<(b|0)?b:a)<<2)>>2]+q[q[(((b|0)<(c|0)?b:c)<<2)+25488>>2]+((d?b:c)<<2)>>2]|0);return}ja(25448,25471,459);G()}ja(25548,25471,444);G()}function gd(a,b,c){var d=x(0),e=0,f=x(0),g=0,h=0,i=0,j=x(0),k=x(0),l=0,m=0,n=0;f=u[b>>2];h=la(a,0,c<<2);a:{if(u[b>>2]==x(0)){break a}l=(c|0)>0?c:0;i=1;while(1){if((e|0)==(l|0)){break a}c=0;d=x(0);if(e){while(1){d=x(d+x(u[(c<<2)+h>>2]*u[(e-c<<2)+b>>2]));c=c+1|0;if((e|0)!=(c|0)){continue}break}}a=e+1|0;d=x(x(-x(d+u[(a<<2)+b>>2]))/f);u[(e<<2)+h>>2]=d;if(e){m=i>>>1|0;c=0;while(1){g=(c<<2)+h|0;j=u[g>>2];n=g;g=((c^-1)+e<<2)+h|0;k=u[g>>2];u[n>>2]=j+x(d*k);u[g>>2]=k+x(d*j);c=c+1|0;if((m|0)!=(c|0)){continue}break}}i=i+1|0;e=a;f=x(f-x(f*x(d*d)));if(f>2]*x(.0010000000474974513))^1){continue}break}}}function Sb(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;g=ca-80|0;ca=g;ab(g+32|0,g- -64|0,c,o[b|0]);d=s[c+2>>1];i=d<<16>>16;h=(i|0)<1;if(!h){j=p[c+4>>1];while(1){e=o[b+d|0];f=e<<10;e=(e|0)>0?f-102|0:(f|102)&e>>31;f=d-1|0;k=(w(e>>16,j)+(w(r[f+(g- -64|0)|0],k<<16>>16)>>8)|0)+(w(e&65534,j)>>16)|0;p[(f<<1)+g>>1]=k;e=(d|0)>1;d=f;if(e){continue}break}}if(!h){b=w(o[b|0],i);e=b+q[c+8>>2]|0;f=q[c+12>>2]+(b<<1)|0;d=0;while(1){h=d<<1;b=((p[h+g>>1]<<14)/p[f+h>>1]|0)+(r[d+e|0]<<7)|0;b=(b|0)>0?b:0;p[a+h>>1]=(b|0)<32767?b:32767;d=d+1|0;i=p[c+2>>1];if((d|0)<(i|0)){continue}break}}Tb(a,q[c+36>>2],i);ca=g+80|0}function vf(a,b,c,d,e,f,g,h){var i=x(0),j=0,k=0,l=0,m=0,n=0,o=0,p=x(0),r=x(0),s=x(0),t=x(0),v=x(0),y=x(0);if((g|0)>=1){m=f+h|0;o=(m|0)<1;while(1){if(!o){h=w(k,20)+c|0;p=u[h+16>>2];r=u[h+12>>2];s=u[h+8>>2];t=u[h+4>>2];v=u[h>>2];h=k<<2;y=u[h+e>>2];h=b-(q[d+h>>2]<<2)|0;l=0;while(1){n=l<<2;j=n+a|0;i=u[b+n>>2];u[j>>2]=i;i=x(i-x(v*u[h+8>>2]));u[j>>2]=i;i=x(i-x(t*u[h+4>>2]));u[j>>2]=i;i=x(i-x(s*u[h>>2]));u[j>>2]=i;i=x(i-x(r*u[h-4>>2]));u[j>>2]=i;u[j>>2]=y*x(i-x(p*u[h-8>>2]));h=h+4|0;l=l+1|0;if((m|0)!=(l|0)){continue}break}}b=(f<<2)+b|0;a=(m<<2)+a|0;k=k+1|0;if((k|0)!=(g|0)){continue}break}}}function _a(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0,n=0,o=x(0),r=0;n=w(q[a+44>>2],g);l=q[a+32>>2];j=w(p[l+(f<<1)>>1],g);if((h|0)!=1){a=(n|0)/(h|0)|0;j=(a|0)>(j|0)?j:a}m=i?0:f;e=i?0:e;k=p[(e<<1)+l>>1];h=w(k,g);a=h<<2;f=c;if((h|0)>=1){f=la(c,0,a)+a|0}if((e|0)<(m|0)){a=a+b|0;b=e;while(1){h=b<<2;o=x(Da(+x(A(x(u[h+d>>2]+u[h+24768>>2]),x(32)))*.6931471805599453));h=w(g,k);b=b+1|0;k=p[(b<<1)+l>>1];r=w(k,g);while(1){u[f>>2]=u[a>>2]*o;f=f+4|0;a=a+4|0;h=h+1|0;if((r|0)>(h|0)){continue}break}if((b|0)!=(m|0)){continue}break}}if((e|0)>(m|0)){ja(30968,30999,263);G()}a=i?0:j;la((a<<2)+c|0,0,n-a<<2)}function ff(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;a:{b:{if((c|0)>=1){while(1){u[(h<<2)+b>>2]=p[(w(d+h|0,g)+e<<1)+a>>1];h=h+1|0;if((h|0)!=(c|0)){continue}break}if((f|0)<=-1){break b}if((c|0)<1){break a}h=0;while(1){e=(h<<2)+b|0;u[e>>2]=u[e>>2]+x(p[(w(d+h|0,g)+f<<1)+a>>1]);h=h+1|0;if((h|0)!=(c|0)){continue}break}break a}if((f|0)>-1){break a}}if((f|0)!=-2|(g|0)<2){break a}f=1;e=(c|0)<1;while(1){h=0;if(!e){while(1){i=(h<<2)+b|0;u[i>>2]=u[i>>2]+x(p[(w(d+h|0,g)+f<<1)+a>>1]);h=h+1|0;if((h|0)!=(c|0)){continue}break}}f=f+1|0;if((g|0)!=(f|0)){continue}break}}}function ed(a,b,c,d,e,f){var g=0,h=0,i=0,j=x(0),k=0;g=ca;k=g;g=g-((f<<2)+15&-16)|0;ca=g;a:{if((f|0)>0){if((d|0)<=-1){break a}if(d){g=ka(g,a,f<<2);while(1){i=h<<2;j=u[i+c>>2];u[g+i>>2]=u[a+i>>2]*j;i=(h^-1)+f<<2;u[i+g>>2]=j*u[a+i>>2];h=h+1|0;if((h|0)!=(d|0)){continue}break}a=g}d=f-e|0;lb(a,a,b,d,e+1|0);c=0;if((e|0)>=0){while(1){j=x(0);h=c+d|0;if((h|0)<(f|0)){while(1){j=x(j+x(u[(h<<2)+a>>2]*u[(h-c<<2)+a>>2]));h=h+1|0;if((h|0)!=(f|0)){continue}break}}g=(c<<2)+b|0;u[g>>2]=j+u[g>>2];g=(c|0)!=(e|0);c=c+1|0;if(g){continue}break}}ca=k;return}ja(31458,31413,228);G()}ja(31480,31413,229);G()}function Rd(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;if(qa(a,q[b+8>>2],f)){wb(b,c,d,e);return}h=r[b+53|0];g=q[a+12>>2];o[b+53|0]=0;i=r[b+52|0];o[b+52|0]=0;j=a+16|0;ub(j,b,c,d,e,f);k=r[b+53|0];h=h|k;l=r[b+52|0];i=i|l;a:{if((g|0)<2){break a}j=j+(g<<3)|0;g=a+24|0;while(1){if(r[b+54|0]){break a}b:{if(l){if(q[b+24>>2]==1){break a}if(r[a+8|0]&2){break b}break a}if(!k){break b}if(!(o[a+8|0]&1)){break a}}p[b+52>>1]=0;ub(g,b,c,d,e,f);k=r[b+53|0];h=k|h;l=r[b+52|0];i=l|i;g=g+8|0;if(j>>>0>g>>>0){continue}break}}o[b+53|0]=(h&255)!=0;o[b+52|0]=(i&255)!=0}function Ab(a){var b=0,c=0,d=0,e=0;a:{Hg(+a);b=Eg(1)|0;Eg(0)|0;c=b;b=b&2147483647;b:{if(b>>>0>=1083174912){if(!((c|0)<0|b>>>0<1083179008)){return a*8.98846567431158e+307}if(b>>>0>=2146435072){return-1/a}if(a<=-1075^1){break a}d=0;if((c|0)<-1?1:(c|0)<=-1){break b}break a}if(b>>>0>1016070143){break a}d=a+1}return d}e=a+26388279066624;Hg(+e);Eg(1)|0;c=(Eg(0)|0)+128|0;b=c<<4&4080;d=v[b+48064>>3];a=a-(e+ -26388279066624)-v[(b|8)+48064>>3];return Ja(d+d*a*(a*(a*(a*(a*.0013333559164630223+.009618129842126066)+.0555041086648214)+.2402265069591)+.6931471805599453),(c&-256)/256|0)}function Lf(a,b,c){var d=0,e=x(0),f=0,g=0,h=0,i=0,j=0,k=0,l=x(0);j=4;h=a+16|0;f=ta(h,b);u[c>>2]=f;d=1;while(1){e=u[h-(d<<2)>>2];l=x(e*e);e=u[(b-d<<2)+h>>2];f=f+ +x(l-x(e*e));u[(w(d,5)+d<<2)+c>>2]=f;d=d+1|0;if((d|0)!=5){continue}break}a=a+12|0;g=1;while(1){f=Wa(h,a,b);e=x(f);u[(w(g,5)<<2)+c>>2]=e;u[(g<<2)+c>>2]=e;d=1;if((5-g|0)>=2){while(1){k=d+g|0;i=d<<2;e=x(u[h-i>>2]*u[a-i>>2]);i=b-d<<2;f=f+ +x(e-x(u[i+h>>2]*u[a+i>>2]));e=x(f);u[(w(k,5)+d<<2)+c>>2]=e;u[(w(d,5)+k<<2)+c>>2]=e;d=d+1|0;if((j|0)!=(d|0)){continue}break}}j=j-1|0;a=a-4|0;g=g+1|0;if((g|0)!=5){continue}break}}function qd(a,b,c,d,e,f,g,h){var i=0,j=0,k=x(0),l=0;i=ca;j=i;a:{if((c|0)>0){if((b|0)<=1){break a}i=i-((b<<2)+27&-16)|0;ca=i;ob(a,b,1,e,c,d);k=rd(a,i,c,b);td(i,b,c,f);if(h){g=x(x(x(1)/x(F(k)))*g);f=0;while(1){h=f<<2;u[h+a>>2]=g*x(q[h+i>>2]);f=f+1|0;if((f|0)!=(b|0)){continue}break}ob(a,b,-1,e,c,d)}d=1;if((e|0)>=2){a=(b>>>0)/(e>>>0)|0;b=(a|0)>1?a:1;d=0;c=0;while(1){l=w(a,c);f=0;h=0;while(1){h=q[i+(f+l<<2)>>2]|h;f=f+1|0;if((b|0)!=(f|0)){continue}break}d=((h|0)!=0)<>>0>>0){h=b;b=0;break d}h=1;e=w(16384-c|0,32736-b|0)>>>15|0;e:{f:{if(!e){d=b;f=1;break f}f=1;while(1){e=e+1|0;i=e<<1;d=i+b|0;if(g>>>0>>0){h=e;break e}f=f+1|0;b=d;e=w(i-2|0,c)>>>15|0;if(e){continue}break}}c=g-d|0;b=(c&-2)+d|0;f=(c>>>1|0)+f|0}d=b+h|0;c=d>>>0>g>>>0;d=c?b:d;if(d>>>0>=32768){break c}if(d>>>0>g>>>0){break b}b=c?0-f|0:f}c=d+h|0;c=c>>>0<32768?c:32768;if(c>>>0<=g>>>0){break a}xb(a,d,c,32768);return b}ja(24677,24639,128);G()}ja(24704,24639,130);G()}ja(24729,24639,131);G()}function Pa(a,b,c){var d=0,e=0,f=0,g=0,h=0;a:{if(c>>>0>1){d=c-1|0;if(d>>>0>=256){f=24-z(d)|0;c=b>>>f|0;$a(a,c,c+1|0,(d>>>f|0)+1|0);if(!f){break a}g=(-1<>2];c=q[a+16>>2];e=f+c|0;b:{if(e>>>0<33){d=c;break b}while(1){h=a;d=q[a+4>>2];e=q[a+8>>2];if(d>>>0>e+q[a+24>>2]>>>0){e=e+1|0;q[a+8>>2]=e;o[q[a>>2]+(d-e|0)|0]=b;d=0}else{d=-1}q[h+44>>2]=d|q[a+44>>2];b=b>>>8|0;e=(c|0)>15;d=c-8|0;c=d;if(e){continue}break}e=d+f|0}q[a+16>>2]=e;q[a+12>>2]=g<>2]=q[a+20>>2]+f;return}$a(a,b,b+1|0,c);return}ja(8666,8690,180);G()}ja(8704,8690,198);G()}function _d(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(qa(a,q[b+8>>2],e)){if(!(q[b+28>>2]==1|q[b+4>>2]!=(c|0))){q[b+28>>2]=d}return}a:{if(qa(a,q[b>>2],e)){if(!(q[b+20>>2]!=(c|0)?q[b+16>>2]!=(c|0):0)){if((d|0)!=1){break a}q[b+32>>2]=1;return}q[b+32>>2]=d;b:{if(q[b+44>>2]==4){break b}p[b+52>>1]=0;a=q[a+8>>2];ea[q[q[a>>2]+20>>2]](a,b,c,c,1,e);if(r[b+53|0]){q[b+44>>2]=3;if(!r[b+52|0]){break b}break a}q[b+44>>2]=4}q[b+20>>2]=c;q[b+40>>2]=q[b+40>>2]+1;if(q[b+36>>2]!=1|q[b+24>>2]!=2){break a}o[b+54|0]=1;return}a=q[a+8>>2];ea[q[q[a>>2]+24>>2]](a,b,c,d,e)}}function id(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=ca;j=e;i=w(b,c);f=e-((i<<2)+15&-16)|0;ca=f;if((c|0)>0){a:{if(!d){d=0;g=(b|0)<1;while(1){if(!g){h=w(b,d);e=0;while(1){u[(e+h<<2)+f>>2]=u[(w(c,e)+d<<2)+a>>2];e=e+1|0;if((e|0)!=(b|0)){continue}break}}d=d+1|0;if((d|0)!=(c|0)){continue}break}break a}g=(c<<2)+31176|0;d=0;h=(b|0)<1;while(1){if(!h){k=w(q[g+(d<<2)>>2],b);e=0;while(1){u[(e+k<<2)+f>>2]=u[(w(c,e)+d<<2)+a>>2];e=e+1|0;if((e|0)!=(b|0)){continue}break}}d=d+1|0;if((d|0)!=(c|0)){continue}break}}ka(a,f,i<<2);ca=j;return}ja(31152,30999,591);G()}function Gd(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0;a:{if((d|0)==8){i=9008;j=11;b:{switch(e-2|0){default:ja(9227,9278,54);G();case 2:break a;case 0:break b}}i=8969;j=3;break a}i=9056;j=34;c:{switch(e-2|0){default:ja(9227,9278,63);G();case 2:break a;case 0:break c}}i=8976;j=12}d=d<<16;g=d>>15;l=a+g|0;a=w(d>>16,18);d=0;while(1){k=(d<<2)+c|0;f=o[(w(d,j)+b|0)+i|0]+l|0;q[k>>2]=f;d:{if((a|0)<(g|0)){h=g;if((f|0)>(g|0)){break d}h=(a|0)>(f|0)?a:f;break d}h=a;if((a|0)<(f|0)){break d}h=(f|0)<(g|0)?g:f}q[k>>2]=h;d=d+1|0;if((e|0)!=(d|0)){continue}break}}function ug(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=ca;j=e;i=w(b,c);f=e-((i<<2)+15&-16)|0;ca=f;a:{if(!d){if((c|0)<1){break a}e=0;g=(b|0)<1;while(1){if(!g){h=w(b,e);d=0;while(1){u[(w(c,d)+e<<2)+f>>2]=u[(d+h<<2)+a>>2];d=d+1|0;if((d|0)!=(b|0)){continue}break}}e=e+1|0;if((e|0)!=(c|0)){continue}break}break a}if((c|0)<1){break a}g=(c<<2)+31176|0;e=0;h=(b|0)<1;while(1){if(!h){k=w(q[g+(e<<2)>>2],b);d=0;while(1){u[(w(c,d)+e<<2)+f>>2]=u[(d+k<<2)+a>>2];d=d+1|0;if((d|0)!=(b|0)){continue}break}}e=e+1|0;if((e|0)!=(c|0)){continue}break}}ka(a,f,i<<2);ca=j}function Ka(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=d-1|0;h=z(d);f=31-h|0;a:{if((d|0)<2){e=d;break a}e=d;while(1){i=e;e=g<<1;k=p[(e|2)+c>>1];e=p[c+e>>1];e=i+(w(k,k)+w(e,e)>>>f|0)|0;g=g+2|0;if((j|0)>(g|0)){continue}break}g=d&-2}if((d|0)>(g|0)){i=e;e=p[(g<<1)+c>>1];e=i+(w(e,e)>>>f|0)|0}f=0;e=34-(h+z(e)|0)|0;h=(e|0)>0?e:0;if((d|0)<2){e=0}else{g=0;while(1){i=f;e=g<<1;f=p[(e|2)+c>>1];e=p[c+e>>1];f=i+(w(f,f)+w(e,e)>>>h|0)|0;g=g+2|0;if((j|0)>(g|0)){continue}break}e=d&-2}if((e|0)<(d|0)){c=p[(e<<1)+c>>1];f=(w(c,c)>>>h|0)+f|0}q[b>>2]=h;q[a>>2]=f}function Hb(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if((e|0)>=2){e=e>>1;m=(e|0)>1?e:1;f=q[b+4>>2];g=q[b>>2];e=0;while(1){j=e<<1;h=e<<2;k=p[(h|2)+a>>1]<<10;i=k-f|0;i=(w(i&65535,10788)>>>16|0)+w(i>>16,10788)|0;l=f+i|0;f=p[a+h>>1]<<10;g=f-g|0;h=((w(g&65535,-24290)>>16)+w(g>>16,-24290)|0)+f|0;f=l+h|0;p[j+c>>1]=(f|0)>67107839?32767:(f|0)<-67109888?-32768:(f>>>10|0)+1>>>1|0;f=l-h|0;p[d+j>>1]=(f|0)>67107839?32767:(f|0)<-67109888?-32768:(f>>>10|0)+1>>>1|0;f=i+k|0;g=g+h|0;e=e+1|0;if((m|0)!=(e|0)){continue}break}q[b+4>>2]=f;q[b>>2]=g}}function Cb(a,b,c){a:{a=la(a,0,20216);if(hb(a,b)){break a}if(hb(a+10064|0,b)){break a}q[a+20192>>2]=1;q[a+20196>>2]=1;q[c>>2]=1;q[c+4>>2]=1;q[c+8>>2]=q[a+4556>>2];q[c+12>>2]=q[a+4564>>2];q[c+16>>2]=q[a+4568>>2];q[c+20>>2]=q[a+4572>>2];q[c+24>>2]=q[a+4612>>2];q[c+28>>2]=q[a+4608>>2];q[c+32>>2]=q[a+4616>>2];q[c+36>>2]=q[a+4624>>2];q[c+40>>2]=q[a+6088>>2];q[c+48>>2]=q[a+6076>>2];q[c+52>>2]=q[a+4676>>2];b=q[a+4576>>2];q[c+72>>2]=w(b<<16>>16,1e3);q[c+76>>2]=q[a+4536>>2];q[c+80>>2]=(b|0)==16?!q[a+28>>2]:0;return 0}ja(39167,39187,85);G()}function oe(a,b){var c=0,d=0,e=0;c=ca-208|0;ca=c;q[c+204>>2]=b;la(c+160|0,0,40);q[c+200>>2]=q[c+204>>2];a:{if((yb(0,c+200|0,c+80|0,c+160|0)|0)<0){break a}d=q[a+76>>2]>=0;b=q[a>>2];if(o[a+74|0]<=0){q[a>>2]=b&-33}e=b&32;b:{if(q[a+48>>2]){yb(a,c+200|0,c+80|0,c+160|0);break b}q[a+48>>2]=80;q[a+16>>2]=c+80;q[a+28>>2]=c;q[a+20>>2]=c;b=q[a+44>>2];q[a+44>>2]=c;yb(a,c+200|0,c+80|0,c+160|0);if(!b){break b}ea[q[a+36>>2]](a,0,0)|0;q[a+48>>2]=0;q[a+44>>2]=b;q[a+28>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0}q[a>>2]=q[a>>2]|e;if(!d){break a}}ca=c+208|0}function pd(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0;h=ca;j=h;a:{if((c|0)>0){if((b|0)<=1){break a}h=h-((b<<2)+15&-16)|0;ca=h;g=x(x(x(1)/x(F(sd(h,b,c,f))))*g);f=0;while(1){i=f<<2;u[i+a>>2]=g*x(q[h+i>>2]);f=f+1|0;if((f|0)!=(b|0)){continue}break}ob(a,b,-1,e,c,d);d=1;if((e|0)>=2){b=(b>>>0)/(e>>>0)|0;i=(b|0)>1?b:1;d=0;c=0;while(1){k=w(b,c);f=0;a=0;while(1){a=q[h+(f+k<<2)>>2]|a;f=f+1|0;if((i|0)!=(f|0)){continue}break}d=((a|0)!=0)<>>0>1){break c}e=c-2048|0;if(e>>>0>3){break c}if((e|0)!=2){break b}}e=0;if(!d){break a}q[d>>2]=-1;break a}q[f+12>>2]=20216;q[f+12>>2]=q[f+12>>2]+3&-4;e=Ra((q[f+12>>2]+w(((q[2442]<<2)+(q[2443]<<4)|0)+4096|0,b)|0)+18384|0);if(!e){e=0;if(!d){break a}q[d>>2]=-7;break a}a=hf(e,a,b,c);if(d){q[d>>2]=a}if(!a){break a}Ca(e);e=0}ca=f+16|0;return e}function Ad(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0;a:{b:{h=q[b>>2];if(h){g=1;e=w(16384-d|0,32736-c|0)>>>15|0;f=h>>31;i=f^f+h;c:{if(!e|(i|0)<2){break c}while(1){j=e<<1;e=w(j,d)>>>15|0;c=(c+j|0)+2|0;g=g+1|0;if((i|0)<=(g|0)){break c}if(e){continue}break}}d:{if(!e){e=b;b=i-g|0;d=((h>>>31|32768)-c>>1)-1|0;b=(b|0)<(d|0)?b:d;q[e>>2]=b+(f+g|0)^f;e=((c+f|0)+(b<<1)|0)+1|0;c=(e|0)!=32768;break d}b=c;c=e+1|0;e=b+(c&(f^-1))|0}if(c+e>>>0>=32769){break b}if(!c){break a}}Od(a,e,c+e|0);return}ja(24608,24639,88);G()}ja(24654,24639,89);G()}function xa(a,b){var c=0,d=0,e=0,f=0;c=ca+ -64|0;ca=c;d=q[a>>2];e=q[d-4>>2];f=q[d-8>>2];q[c+16>>2]=57660;q[c+12>>2]=a;q[c+8>>2]=b;d=0;la(c+20|0,0,43);a=a+f|0;a:{if(qa(e,b,0)){q[c+56>>2]=1;ea[q[q[e>>2]+20>>2]](e,c+8|0,a,a,1,0);d=q[c+32>>2]==1?a:0;break a}ea[q[q[e>>2]+24>>2]](e,c+8|0,a,1,0);b:{switch(q[c+44>>2]){case 0:d=q[c+48>>2]==1?q[c+36>>2]==1?q[c+40>>2]==1?q[c+28>>2]:0:0:0;break a;case 1:break b;default:break a}}if(q[c+32>>2]!=1){if(q[c+48>>2]|q[c+36>>2]!=1|q[c+40>>2]!=1){break a}}d=q[c+24>>2]}ca=c- -64|0;return d}function mb(a,b,c,d,e,f){var g=x(0),h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,t=0,v=0,y=x(0);n=(e|0)>1?e:1;o=q[a+44>>2]<>2];while(1){if((d|0)>=1){r=w(h,o);t=w(q[a+8>>2],h);j=s[k>>1];i=0;while(1){e=j<<16;g=x(0);l=i+1|0;j=p[(l<<1)+k>>1];e=e>>16;m=j-e<=1){v=((e<>2];g=x(y+x(g*g));e=e+1|0;if((m|0)!=(e|0)){continue}break}}u[(i+t<<2)+c>>2]=F(x(g+x(1.0000000272452012e-27)));i=l;if((i|0)!=(d|0)){continue}break}}h=h+1|0;if((n|0)!=(h|0)){continue}break}}function na(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=q[a+28>>2];g=d>>>c|0;f=q[a+32>>2];c=-1;while(1){e=d;c=c+1|0;d=w(g,r[c+b|0]);if(f>>>0>>0){continue}break}b=e-d|0;q[a+28>>2]=b;h=f-d|0;q[a+32>>2]=h;if(b>>>0<=8388608){i=q[a+24>>2];f=q[a+40>>2];j=q[a+20>>2];k=q[a+4>>2];while(1){g=b<<8;q[a+28>>2]=g;j=j+8|0;q[a+20>>2]=j;d=0;if(i>>>0>>0){e=i+1|0;q[a+24>>2]=e;d=r[q[a>>2]+i|0];i=e}q[a+40>>2]=d;h=(h<<8&2147483392|(f<<8|d)>>>1&255)^255;q[a+32>>2]=h;e=b>>>0<32769;f=d;b=g;if(e){continue}break}}return c}function Hf(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,t=0;if(!(f&1)){if((e|0)>=1){t=(f|0)<2;while(1){h=0;l=0;k=f;if(!t){while(1){i=k-1|0;g=i<<1;j=w(s[g+b>>1]-(r[c+i|0]<<7)<<16>>16,p[d+g>>1]);n=j-(h>>1)|0;g=n>>31;i=k-2|0;h=i<<1;h=w(s[h+b>>1]-(r[c+i|0]<<7)<<16>>16,p[d+h>>1]);o=h-(j>>1)|0;j=o>>31;l=((g^g+n)+l|0)+(j^j+o)|0;g=(k|0)>3;k=i;if(g){continue}break}}q[(m<<2)+a>>2]=l;c=c+f|0;d=(f<<1)+d|0;m=m+1|0;if((m|0)!=(e|0)){continue}break}}return}ja(37504,37545,49);G()}function md(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,s=0,t=x(0);n=(f|0)>1?f:1;o=w(q[a+44>>2],g);l=q[a+32>>2];while(1){if((e|0)>=1){r=w(i,o);s=w(q[a+8>>2],i);k=p[l>>1];j=0;while(1){f=w(g,k);h=j;j=h+1|0;k=p[(j<<1)+l>>1];m=w(k,g);if((f|0)<(m|0)){t=x(x(1)/x(u[(h+s<<2)+d>>2]+x(1.0000000272452012e-27)));while(1){h=f+r<<2;u[h+c>>2]=t*u[b+h>>2];f=f+1|0;if((m|0)>(f|0)){continue}break}}if((e|0)!=(j|0)){continue}break}}i=i+1|0;if((n|0)!=(i|0)){continue}break}}function gb(a,b,c,d){var e=x(0),f=x(0),g=0,h=x(0),i=0;a:{if(c-1>>>0<2){if(d&3){break a}if((d|0)>=1){e=x(x(3.1415927410125732)/x(d+1|0));h=x(x(2)-x(e*e));c=(c|0)<2;e=c?e:x(h*x(.5));f=c?x(0):x(1);while(1){c=i<<2;u[c+a>>2]=x(f+e)*x(u[b+c>>2]*x(.5));g=c|4;u[g+a>>2]=e*u[b+g>>2];g=c|8;f=x(x(h*e)-f);u[g+a>>2]=x(e+f)*x(u[b+g>>2]*x(.5));c=c|12;u[c+a>>2]=f*u[b+c>>2];e=x(x(h*f)-e);i=i+4|0;if((i|0)<(d|0)){continue}break}}return}ja(36217,36266,48);G()}ja(36301,36266,51);G()}function ig(a,b,c){var d=0,e=0;d=ca-16|0;ca=d;a:{b:{c:{d:{if((a|0)<=15999){if((a|0)==8e3|(a|0)==12e3){break d}break c}if((a|0)==16e3|(a|0)==48e3){break d}if((a|0)!=24e3){break c}}if(b-1>>>0<2){break b}}if(!c){break a}q[c>>2]=-1;break a}q[d+12>>2]=8552;q[d+12>>2]=q[d+12>>2]+3&-4;e=Ra((q[d+12>>2]+(w((q[2442]<<2)+8288|0,b)+(q[2443]<<5)|0)|0)+180|0);if(!e){e=0;if(!c){break a}q[c>>2]=-7;break a}a=jg(e,a,b);if(c){q[c>>2]=a}if(!a){break a}Ca(e);e=0}ca=d+16|0;return e}function xg(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=b;if(!c){da=0;return(a>>>0)/10|0}g=61-z(c)|0;f=0-g|0;e=g&63;d=e&31;if(e>>>0>=32){e=0;d=c>>>d|0}else{e=c>>>d|0;d=((1<>>d}f=f&63;c=f&31;if(f>>>0>=32){b=a<>>32-c|b<>>31;f=c;e=e<<1|d>>>31;c=0-(e+(c>>>0>9)|0)>>31;h=c&10;d=f-h|0;e=e-(f>>>0>>0)|0;b=b<<1|a>>>31;a=i|a<<1;h=c&1;i=h;g=g-1|0;if(g){continue}break}}da=b<<1|a>>>31;return h|a<<1}function sa(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;c=q[a+32>>2];d=q[a+28>>2];b=d>>>b|0;g=c>>>0>>0;if(!g){c=c-b|0;q[a+32>>2]=c}e=g?b:d-b|0;q[a+28>>2]=e;if(e>>>0<=8388608){f=q[a+24>>2];i=q[a+40>>2];h=q[a+20>>2];k=q[a+4>>2];while(1){j=e<<8;q[a+28>>2]=j;h=h+8|0;q[a+20>>2]=h;b=0;if(f>>>0>>0){d=f+1|0;q[a+24>>2]=d;b=r[q[a>>2]+f|0];f=d}q[a+40>>2]=b;c=(c<<8&2147483392|(i<<8|b)>>>1&255)^255;q[a+32>>2]=c;d=e>>>0<32769;i=b;e=j;if(d){continue}break}}return g}function dg(a){var b=0;q[a>>2]=0;q[a+4>>2]=0;q[a+56>>2]=0;q[a+60>>2]=5e3;q[a+32>>2]=0;q[a+36>>2]=0;q[a+24>>2]=0;q[a+28>>2]=0;q[a+16>>2]=0;q[a+20>>2]=0;q[a+8>>2]=0;q[a+12>>2]=0;q[a+96>>2]=25;q[a+100>>2]=16;q[a+80>>2]=858993;q[a+84>>2]=1342177;b=a- -64|0;q[b>>2]=2500;q[b+4>>2]=1600;q[a+104>>2]=12;q[a+108>>2]=15;q[a+88>>2]=1789569;q[a+92>>2]=50;q[a+72>>2]=1200;q[a+76>>2]=429496;q[a+40>>2]=25600;q[a+44>>2]=25600;q[a+48>>2]=25600;q[a+52>>2]=25600;return 0}function xb(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0;e=q[a+36>>2];f=w(e,d-c|0);g=q[a+32>>2]-f|0;q[a+32>>2]=g;c=b?w(e,c-b|0):q[a+28>>2]-f|0;q[a+28>>2]=c;if(c>>>0<=8388608){d=q[a+24>>2];e=q[a+40>>2];i=q[a+20>>2];j=q[a+4>>2];while(1){f=c<<8;q[a+28>>2]=f;i=i+8|0;q[a+20>>2]=i;b=0;if(d>>>0>>0){h=d+1|0;q[a+24>>2]=h;b=r[q[a>>2]+d|0];d=h}q[a+40>>2]=b;g=(g<<8&2147483392|(e<<8|b)>>>1&255)^255;q[a+32>>2]=g;h=c>>>0<32769;e=b;c=f;if(h){continue}break}}}function Rc(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((d|0)>=2){d=d>>1;k=(d|0)>1?d:1;e=q[a+4>>2];f=q[a>>2];d=0;while(1){g=d<<2;h=p[g+c>>1]<<10;f=h-f|0;h=((w(f&65535,-25727)>>16)+w(f>>16,-25727)|0)+h|0;i=h+e|0;g=p[(g|2)+c>>1]<<10;e=g-e|0;e=(w(e&65535,9872)>>>16|0)+w(e>>16,9872)|0;i=i+e|0;j=(i>>10)+1>>1;p[(d<<1)+b>>1]=(i|0)>67107839?32767:(j|0)>-32768?j:-32768;e=e+g|0;f=f+h|0;d=d+1|0;if((k|0)!=(d|0)){continue}break}q[a+4>>2]=e;q[a>>2]=f}}function ee(a,b){a:{if(a){if(b>>>0<=127){break a}b:{if(!q[14667]){if((b&-128)==57216){break a}break b}if(b>>>0<=2047){o[a+1|0]=b&63|128;o[a|0]=b>>>6|192;return 2}if(!((b&-8192)!=57344?b>>>0>=55296:0)){o[a+2|0]=b&63|128;o[a|0]=b>>>12|224;o[a+1|0]=b>>>6&63|128;return 3}if(b-65536>>>0<=1048575){o[a+3|0]=b&63|128;o[a|0]=b>>>18|240;o[a+2|0]=b>>>6&63|128;o[a+1|0]=b>>>12&63|128;return 4}}q[14656]=25;a=-1}else{a=1}return a}o[a|0]=b;return 1}function Ve(){var a=0;ba(52160,52168,52184,0,52200,2,52203,0,52203,0,52205,52223,3);aa(52160,4,52240,52256,4,5);a=Ia(8);q[a+4>>2]=0;q[a>>2]=6;M(52160,52262,6,52272,52296,7,a|0,0);a=Ia(8);q[a+4>>2]=0;q[a>>2]=8;M(52160,52304,5,52320,52340,9,a|0,0);a=Ia(8);q[a+4>>2]=0;q[a>>2]=10;M(52160,52347,4,52368,52256,11,a|0,0);a=Ia(8);q[a+4>>2]=0;q[a>>2]=12;M(52160,52384,4,52368,52256,11,a|0,0);V(52160,52397,2,52416,52424,13,14)}function Se(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=ca-16|0;ca=d;e=Ia(16);g=q[c>>2];c=q[a>>2];a=q[b>>2];q[e>>2]=a;b=w(a,11520);f=b+b|0;h=e,i=Ia(b>>>0>f>>>0?-1:f),q[h+12>>2]=i;h=e,i=gf(c,a,g,d+12|0),q[h+4>>2]=i;a:{if(q[d+12>>2]>-1){h=e,i=ig(c,a,d+8|0),q[h+8>>2]=i;if(q[d+8>>2]<=-1){break a}ca=d+16|0;return e|0}a=R(4)|0;q[a>>2]=q[d+12>>2];Q(a|0,58228,0);G()}a=R(4)|0;q[a>>2]=q[d+8>>2];Q(a|0,58228,0);G()}function Wb(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0,k=0,l=0;if((e|0)>=1){while(1){j=c;a:{if(!(d|h)){f=o[b|0];g=o[c|0]-16|0;f=(f|0)>(g|0)?f:g;break a}f=o[c|0];i=f+8|0;g=o[b+h|0]-4|0;if((i|0)<(g|0)){f=f+((g<<1)-i|0)|0;break a}f=f+g|0}f=f<<24>>24>0?f:0;f=f<<24>>24<63?f:63;o[j|0]=f;f=f&255;f=(w(f,7281)>>>16|0)+w(f,29)|0;k=(h<<2)+a|0,l=Na((f>>>0<1877?f:1877)+2090|0),q[k>>2]=l;h=h+1|0;if((h|0)!=(e|0)){continue}break}}}function Id(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0;g=ca-16|0;ca=g;o[g+15|0]=0;if((c|0)>=8){e=w((d<<1)+e<<16>>16,7)+8624|0;c=c+8>>4;i=(c|0)>1?c:1;while(1){c=q[(h<<2)+f>>2];if((c|0)>=1){c=c&31;o[g+14|0]=r[e+(c>>>0<6?c:6)|0];c=0;while(1){d=(c<<1)+b|0;if(p[d>>1]>=1){j=d,k=w((na(a,g+14|0,8)<<1)-1|0,s[d>>1]),p[j>>1]=k}c=c+1|0;if((c|0)!=16){continue}break}}b=b+32|0;h=h+1|0;if((i|0)!=(h|0)){continue}break}}ca=g+16|0}function pb(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=x(0);j=(f|0)>1?f:1;while(1){if((b|0)>=1){h=w(q[a+8>>2],g);f=0;while(1){i=f+h<<2;k=e+i|0,l=x(x(Ua(+u[i+d>>2])*1.4426950408889634)-u[(f<<2)+24768>>2]),u[k>>2]=l;f=f+1|0;if((f|0)!=(b|0)){continue}break}}if((b|0)<(c|0)){h=w(q[a+8>>2],g);f=b;while(1){q[(f+h<<2)+e>>2]=-1050673152;f=f+1|0;if((f|0)!=(c|0)){continue}break}}g=g+1|0;if((j|0)!=(g|0)){continue}break}}function je(a,b){var c=0;c=(b|0)!=0;a:{b:{c:{if(!b|!(a&3)){break c}while(1){if(!r[a|0]){break b}a=a+1|0;b=b-1|0;c=(b|0)!=0;if(!b){break c}if(a&3){continue}break}}if(!c){break a}d:{if(!r[a|0]|b>>>0<4){break d}while(1){c=q[a>>2];if((c^-1)&c-16843009&-2139062144){break d}a=a+4|0;b=b-4|0;if(b>>>0>3){continue}break}}if(!b){break a}}while(1){if(!r[a|0]){return a}a=a+1|0;b=b-1|0;if(b){continue}break}}return 0}function ya(a,b,c){var d=0,e=0,f=0,g=0,h=0;if(c){g=q[a+12>>2];f=q[a+16>>2];d=f+c|0;a:{if(d>>>0<33){e=f;break a}while(1){h=a;e=q[a+4>>2];d=q[a+8>>2];if(e>>>0>d+q[a+24>>2]>>>0){d=d+1|0;q[a+8>>2]=d;o[q[a>>2]+(e-d|0)|0]=g;e=0}else{e=-1}q[h+44>>2]=e|q[a+44>>2];g=g>>>8|0;d=(f|0)>15;e=f-8|0;f=e;if(d){continue}break}d=c+e|0}q[a+16>>2]=d;q[a+12>>2]=b<>2]=q[a+20>>2]+c;return}ja(8704,8690,198);G()}function ic(a){var b=0,c=0,d=0;b=ca-16|0;ca=b;Hg(+a);d=Eg(1)|0;Eg(0)|0;d=d&2147483647;a:{if(d>>>0<=1072243195){c=1;if(d>>>0<1044816030){break a}c=zb(a,0);break a}c=a-a;if(d>>>0>=2146435072){break a}b:{switch(pe(a,b)&3){case 0:c=zb(v[b>>3],v[b+8>>3]);break a;case 1:c=-hc(v[b>>3],v[b+8>>3]);break a;case 2:c=-zb(v[b>>3],v[b+8>>3]);break a;default:break b}}c=hc(v[b>>3],v[b+8>>3])}a=c;ca=b+16|0;return a}function of(a,b,c,d){var e=0,f=0,g=0;e=-1;a:{if(c>>>0>2){break a}e=-7;if(!a){break a}a=la(a,0,w(((q[2442]<<2)+(q[2443]<<4)|0)+4096|0,c)+244|0);q[a+28>>2]=1;q[a+32>>2]=0;q[a+8>>2]=c;q[a+4>>2]=c;q[a>>2]=9764;c=q[2444];q[a+24>>2]=5;q[a+60>>2]=24;q[a+12>>2]=0;q[a+16>>2]=1;q[a+40>>2]=-1;q[a+44>>2]=0;q[a+72>>2]=d;q[a+48>>2]=1;q[a+52>>2]=1;q[a+36>>2]=c;oa(a,4028,0);f=a,g=Jc(b),q[f+28>>2]=g;e=0}return e}function Bc(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;e=ca-16|0;ca=e;d=-4;a:{if((c|0)<1){break a}b:{if(!q[a+4>>2]){o[a|0]=r[b|0];h=a,i=Ib(b,8e3),q[h+296>>2]=i;break b}if((r[b|0]^r[a|0])>>>0>3){break a}}f=eg(b,c);if((f|0)<1){break a}g=q[a+4>>2];if((w(q[a+296>>2],g+f|0)|0)>960){break a}d=_c(b,c,e+15|0,((g<<2)+a|0)+8|0,((g<<1)+a|0)+200|0,0);if((d|0)<1){break a}q[a+4>>2]=q[a+4>>2]+f;d=0}ca=e+16|0;return d}function tf(a,b,c,d,e,f,g){var h=x(0),i=0,j=0,k=0,l=0,m=0,n=x(0);i=ca-768|0;ca=i;j=e+g|0;k=j<<1;eb(i,c,b,k,g);h=u[d>>2];l=(g<<2)+i|0;m=a,n=x(ta(l,e)*+x(h*h)),u[m>>2]=n;h=u[d+4>>2];j=(j<<2)+l|0;m=a,n=x(ta(j,e)*+x(h*h)),u[m+4>>2]=n;if((f|0)==4){eb(i,c- -64|0,(k<<2)+b|0,k,g);h=u[d+8>>2];m=a,n=x(ta(l,e)*+x(h*h)),u[m+8>>2]=n;h=u[d+12>>2];m=a,n=x(ta(j,e)*+x(h*h)),u[m+12>>2]=n}ca=i+768|0}function Jd(a,b,c,d,e,f){var g=0,h=0,i=0;g=ca-16|0;ca=g;o[g+15|0]=0;if((c|0)>=8){d=w((d<<1)+e<<16>>16,7)+8624|0;c=c+8>>4;e=(c|0)>1?c:1;while(1){c=q[(h<<2)+f>>2];if((c|0)>=1){c=c&31;o[g+14|0]=r[d+(c>>>0<6?c:6)|0];c=0;while(1){i=r[b+c|0];if(i){ma(a,(i<<24>>24>>>7|0)+1&255,g+14|0,8)}c=c+1|0;if((c|0)!=16){continue}break}}b=b+16|0;h=h+1|0;if((e|0)!=(h|0)){continue}break}}ca=g+16|0}function tb(a,b){var c=0,d=0,e=0,f=0,g=0;c=na(a,6352,8);e=na(a,6430,8);g=na(a,6437,8);f=(c|0)/5|0;d=(na(a,6430,8)+w(c+w(f,-5)|0,3)<<1)+6320|0;c=p[d>>1];d=p[d+2>>1]-c|0;c=c+w((w(d&65535,6554)>>>16|0)+w(d>>16,6554)|0,na(a,6437,8)<<17>>16|1)|0;q[b+4>>2]=c;e=(w(f,3)+e<<1)+6320|0;a=p[e>>1];d=b;b=p[e+2>>1]-a|0;q[d>>2]=(a+w((w(b&65535,6554)>>>16|0)+w(b>>16,6554)|0,g<<17>>16|1)|0)-c}function Mb(a,b,c){var d=0,e=0,f=x(0),g=x(0),h=0,i=0,j=0,k=0;if((c|0)>=1){d=b>>1;h=(d|0)>1?d:1;i=c<<1;d=0;j=(b|0)<2;while(1){b=0;if(!j){while(1){e=(w(b,i)+d<<2)+a|0;f=x(u[e>>2]*x(.7071067690849304));k=e;e=(w(b<<1|1,c)+d<<2)+a|0;g=x(u[e>>2]*x(.7071067690849304));u[k>>2]=f+g;u[e>>2]=f-g;b=b+1|0;if((h|0)!=(b|0)){continue}break}}d=d+1|0;if((d|0)!=(c|0)){continue}break}}}function Xe(a,b,c){var d=0,e=0,f=0;a:{d=b;e=q[c+16>>2];if(!e){if(Ye(c)){break a}e=q[c+16>>2]}f=q[c+20>>2];if(e-f>>>0>>0){ea[q[c+36>>2]](c,a,b)|0;return}b:{if(o[c+75|0]<0){break b}e=b;while(1){d=e;if(!d){break b}e=d-1|0;if(r[e+a|0]!=10){continue}break}if(ea[q[c+36>>2]](c,a,d)>>>0>>0){break a}a=a+d|0;b=b-d|0;f=q[c+20>>2]}ka(f,a,b);q[c+20>>2]=q[c+20>>2]+b}}function Sd(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(qa(a,q[b+8>>2],e)){if(!(q[b+28>>2]==1|q[b+4>>2]!=(c|0))){q[b+28>>2]=d}return}a:{if(!qa(a,q[b>>2],e)){break a}if(!(q[b+20>>2]!=(c|0)?q[b+16>>2]!=(c|0):0)){if((d|0)!=1){break a}q[b+32>>2]=1;return}q[b+20>>2]=c;q[b+32>>2]=d;q[b+40>>2]=q[b+40>>2]+1;if(!(q[b+36>>2]!=1|q[b+24>>2]!=2)){o[b+54|0]=1}q[b+44>>2]=4}}function Sc(a,b,c){var d=0,e=0,f=0,g=0,h=x(0),i=0,j=0,k=x(0),l=x(0),m=0,n=0;g=1;if((c|0)>=1){while(1){i=f<<2;h=u[i+b>>2];j=f+1|0;if(j&2147483646){m=g>>>1|0;d=0;while(1){e=(d<<2)+a|0;k=u[e>>2];n=e;e=((d^-1)+f<<2)+a|0;l=u[e>>2];u[n>>2]=k+x(h*l);u[e>>2]=l+x(h*k);d=d+1|0;if((m|0)!=(d|0)){continue}break}}u[a+i>>2]=-h;g=g+1|0;f=j;if((f|0)!=(c|0)){continue}break}}}function Wa(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;if((c|0)>3){h=c-3|0;while(1){d=e<<2;f=d|4;i=+u[a+d>>2]*+u[b+d>>2]+ +u[a+f>>2]*+u[b+f>>2];f=d|8;d=d|12;g=g+(i+ +u[f+a>>2]*+u[b+f>>2]+ +u[d+a>>2]*+u[b+d>>2]);e=e+4|0;if((h|0)>(e|0)){continue}break}e=c&-4}if((c|0)>(e|0)){while(1){d=e<<2;g=g+ +u[d+a>>2]*+u[b+d>>2];e=e+1|0;if((e|0)!=(c|0)){continue}break}}return g}function ud(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=x(0);if((b|0)<(c|0)){k=(g|0)>1?g:1;while(1){g=0;i=(b<<2)+e|0;h=q[i>>2];if((h|0)>=1){while(1){h=za(f,h);j=(w(q[a+8>>2],g)+b<<2)+d|0;l=x(x(h|0)+x(.5));h=q[i>>2];u[j>>2]=u[j>>2]+x(x(x(l*x(1<<14-h))*x(6103515625e-14))+x(-.5));g=g+1|0;if((k|0)!=(g|0)){continue}break}}b=b+1|0;if((c|0)!=(b|0)){continue}break}}}function yf(a,b,c,d){var e=0;e=ca+ -64|0;ca=e;Ef(a,e,c,d);c=q[a+4640>>2];a:{if((c|0)<1){break a}a=0;while(1){u[(a<<2)+b>>2]=x(p[(a<<1)+e>>1])*x(.000244140625);a=a+1|0;if((c|0)!=(a|0)){continue}break}if((c|0)<1){break a}a=0;while(1){u[((a<<2)+b|0)- -64>>2]=x(p[((a<<1)+e|0)+32>>1])*x(.000244140625);a=a+1|0;if((c|0)!=(a|0)){continue}break}}ca=e- -64|0}function sb(a,b,c){var d=0,e=0,f=0,g=0,h=0;d=b-1|0;if((b|0)>=2){h=c-65536|0;b=0;while(1){e=(b<<2)+a|0;f=q[e>>2];g=f<<16>>16;q[e>>2]=(w(c>>16,g)+(w(c&65535,g)>>16)|0)+w((f>>15)+1>>1,c);c=((w(c,h)>>15)+1>>1)+c|0;b=b+1|0;if((d|0)!=(b|0)){continue}break}}b=(d<<2)+a|0;d=q[b>>2];a=d<<16>>16;q[b>>2]=(w(a,c>>16)+(w(a,c&65535)>>16)|0)+w((d>>15)+1>>1,c)}function rc(){U(57912,52491);T(58156,52496,1,1,0);Je();Ie();He();Ge();Ee();De();Ce();Be();Ae();ze();ye();O(54160,52602);O(54072,52614);N(53984,4,52647);N(53892,2,52660);N(53752,4,52675);$(53724,52690);xe();qc(52736);pc(52773);nc(52812);mc(52843);lc(52883);kc(52912);we();ve();qc(53019);pc(53051);nc(53084);mc(53117);lc(53151);kc(53184);ue();te()}function mg(a,b,c){var d=0;a:{if(c>>>0<=2){if(a){break a}a=-7}else{a=-1}return a}a=la(a,0,(w((q[2442]<<2)+8288|0,c)+(q[2443]<<5)|0)+92|0);q[a>>2]=9764;d=q[2442];q[a+16>>2]=1;q[a+20>>2]=0;q[a+12>>2]=c;q[a+8>>2]=c;q[a+4>>2]=d;d=q[2444];q[a+28>>2]=1;q[a+32>>2]=(c|0)==1;q[a+36>>2]=0;q[a+24>>2]=d;ua(a,4028,0);c=a;a=Jc(b);q[c+16>>2]=a;return a?0:-1}function ab(a,b,c,d){var e=0,f=0,g=0;e=p[c+2>>1];if((e|0)>=1){e=q[c+24>>2]+((w(e&65535,d)|0)/2|0)|0;d=0;while(1){f=r[e|0];p[(d<<1)+a>>1]=w(f>>>1&7,9);o[b+d|0]=r[q[c+20>>2]+(w(p[c+2>>1]-1|0,f&1)+d|0)|0];g=d|1;p[(g<<1)+a>>1]=w(f>>>5|0,9);o[b+g|0]=r[q[c+20>>2]+(w(p[c+2>>1]-1|0,f>>>4&1)+g|0)|0];e=e+1|0;d=d+2|0;if((d|0)>1]){continue}break}}}function Ja(a,b){a:{if((b|0)>=1024){a=a*8.98846567431158e+307;if((b|0)<2047){b=b-1023|0;break a}a=a*8.98846567431158e+307;b=((b|0)<3069?b:3069)-2046|0;break a}if((b|0)>-1023){break a}a=a*2.2250738585072014e-308;if((b|0)>-2045){b=b+1022|0;break a}a=a*2.2250738585072014e-308;b=((b|0)>-3066?b:-3066)+2044|0}Fg(0,0);Fg(1,b+1023<<20);return a*+Gg()}function Yc(a,b){var c=0;a:{b:{c=o[b+5|0]+w(o[b+2|0],5)|0;if((c|0)<25){ma(a,c,6352,8);c=o[b|0];if((c|0)>=3){break b}if(o[b+1|0]>=5){break a}ma(a,c,6430,8);ma(a,o[b+1|0],6437,8);c=o[b+3|0];if((c|0)>2){break b}if(o[b+4|0]>4){break a}ma(a,c,6430,8);ma(a,o[b+4|0],6437,8);return}ja(35814,35839,44);G()}ja(35865,35839,47);G()}ja(35900,35839,48);G()}function Ud(a,b){var c=0,d=0;a:{while(1){if(!b){break a}b=xa(b,57900);if(!b|q[b+8>>2]&(q[a+8>>2]^-1)){break a}if(qa(q[a+12>>2],q[b+12>>2],0)){return 1}if(!(o[a+8|0]&1)){break a}c=q[a+12>>2];if(!c){break a}c=xa(c,57900);if(c){b=q[b+12>>2];a=c;continue}break}a=q[a+12>>2];if(!a){break a}a=xa(a,57932);if(!a){break a}d=cc(a,q[b+12>>2])}return d}function wb(a,b,c,d){o[a+53|0]=1;a:{if(q[a+4>>2]!=(c|0)){break a}o[a+52|0]=1;c=q[a+16>>2];if(!c){q[a+36>>2]=1;q[a+24>>2]=d;q[a+16>>2]=b;if((d|0)!=1|q[a+48>>2]!=1){break a}o[a+54|0]=1;return}if((b|0)==(c|0)){c=q[a+24>>2];if((c|0)==2){q[a+24>>2]=d;c=d}if(q[a+48>>2]!=1|(c|0)!=1){break a}o[a+54|0]=1;return}o[a+54|0]=1;q[a+36>>2]=q[a+36>>2]+1}}function Hc(a,b){var c=0;cg(a,a+5098|0);c=q[a+4532>>2];a:{b:{c:{if(!b){if((c|0)<13){break c}q[a+4532>>2]=12;break c}if((c|0)>12){break b}}b=0;o[a+4765|0]=0;c=q[a+6084>>2];q[a+6084>>2]=c+1;if((c|0)>=10){if((c|0)<30){break a}q[a+6084>>2]=10}q[a+6080>>2]=0;break a}q[a+6080>>2]=0;q[a+6084>>2]=0;b=1;o[a+4765|0]=1}o[(q[a+5748>>2]+a|0)+4720|0]=b}function ae(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=ca+ -64|0;ca=d;e=1;a:{if(qa(a,b,0)){break a}e=0;if(!b){break a}b=xa(b,57672);e=0;if(!b){break a}la(d+8|4,0,52);q[d+56>>2]=1;q[d+20>>2]=-1;q[d+16>>2]=a;q[d+8>>2]=b;ea[q[q[b>>2]+28>>2]](b,d+8|0,q[c>>2],1);a=q[d+32>>2];if((a|0)==1){q[c>>2]=q[d+24>>2]}e=(a|0)==1}a=e;ca=d- -64|0;return a|0}function ta(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;if((b|0)>3){h=b-3|0;while(1){g=c;f=d<<2;c=+u[f+a>>2];e=c*c;c=+u[(f|4)+a>>2];e=e+c*c;c=+u[(f|8)+a>>2];e=e+c*c;c=+u[(f|12)+a>>2];c=g+(e+c*c);d=d+4|0;if((h|0)>(d|0)){continue}break}d=b&-4}if((b|0)>(d|0)){while(1){g=c;c=+u[(d<<2)+a>>2];c=g+c*c;d=d+1|0;if((d|0)!=(b|0)){continue}break}}return c}function za(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;f=q[a+12>>2];c=q[a+16>>2];a:{if(c>>>0>=b>>>0){d=c;break a}e=q[a+8>>2];g=q[a+4>>2];while(1){if(e>>>0>>0){e=e+1|0;q[a+8>>2]=e;d=r[q[a>>2]+(g-e|0)|0]}else{d=0}f=d<>2]=d-b;q[a+12>>2]=f>>>b;q[a+20>>2]=q[a+20>>2]+b;return(-1<>2];if(!((d^-1)&d-16843009&-2139062144)){continue}break}if(!(d&255)){return c-a|0}while(1){d=r[c+1|0];b=c+1|0;c=b;if(d){continue}break}}return b-a|0}function Qc(a,b,c){var d=0,e=0,f=0,g=0;g=c&65532;if(g){while(1){d=e<<2;f=d+a|0;u[f>>2]=u[f>>2]*b;f=(d|4)+a|0;u[f>>2]=u[f>>2]*b;f=(d|8)+a|0;u[f>>2]=u[f>>2]*b;d=(d|12)+a|0;u[d>>2]=u[d>>2]*b;e=e+4|0;if(g>>>0>e>>>0){continue}break}}if((c|0)>(e|0)){while(1){d=(e<<2)+a|0;u[d>>2]=u[d>>2]*b;e=e+1|0;if((e|0)!=(c|0)){continue}break}}}function Kf(a,b,c,d,e,f){var g=x(0),h=0,i=0,j=x(0),k=0;if((f|0)>=1){k=e+5|0;while(1){i=(-2-q[(h<<2)+d>>2]<<2)+c|0;Lf(i,e,a);Mf(i,c,e,b);g=x(ta(c,k));j=x(x(x(u[a>>2]+u[a+96>>2])*x(.014999999664723873))+x(1));g=x(x(1)/(g>j?g:j));Qc(a,g,25);Qc(b,g,5);b=b+20|0;a=a+100|0;c=(e<<2)+c|0;h=h+1|0;if((h|0)!=(f|0)){continue}break}}}function Nf(a,b,c,d){var e=0,f=0,g=0,h=0;h=d&65532;if(h){while(1){e=f<<2;u[e+a>>2]=u[b+e>>2]*c;g=e|4;u[g+a>>2]=u[b+g>>2]*c;g=e|8;u[g+a>>2]=u[b+g>>2]*c;e=e|12;u[e+a>>2]=u[b+e>>2]*c;f=f+4|0;if(h>>>0>f>>>0){continue}break}}if((d|0)>(f|0)){while(1){e=f<<2;u[e+a>>2]=u[b+e>>2]*c;f=f+1|0;if((f|0)!=(d|0)){continue}break}}}function pf(a,b){var c=0,d=0,e=0;q[a+4608>>2]=b;e=q[a+4576>>2];b=q[a+4580>>2]==2?(((e|0)/-16|0)+b|0)-2e3|0:b;d=38704;c=106;a:{b:{switch(e-8|0){case 4:d=38816;c=154;break a;case 0:break a;default:break b}}d=38976;c=190}b=((b+200|0)/400|0)-10|0;b=(b|0)<(c|0)?b:c;if((b|0)>=1){b=w(r[b+d|0],21)}else{b=0}q[a+4716>>2]=b}function Nd(a,b,c){var d=0,e=0,f=0;if(c>>>0<9){d=8-c|0;e=(-1<>2]){a=q[a>>2];o[a|0]=r[a|0]&(e^-1)|b<>2];if((f|0)>=0){q[a+40>>2]=(e^-1)&f|b<>2]<=-2147483648>>>c>>>0){q[a+32>>2]=q[a+32>>2]&(e<<23^-1)|b<<31-c;return}q[a+44>>2]=-1;return}ja(8730,8690,217);G()}function Hd(a,b){var c=0,d=0,e=0,f=0,g=0;d=1;if((b|0)>=1){if((b|0)!=1){while(1){f=p[(d<<1)+a>>1];c=d;a:{while(1){g=c-1|0;e=p[(g<<1)+a>>1];if((e|0)<=(f|0)){break a}p[(c<<1)+a>>1]=e;e=(c|0)>1;c=g;if(e){continue}break}c=0}p[(c<<1)+a>>1]=f;d=d+1|0;if((d|0)!=(b|0)){continue}break}}return}ja(8920,8908,144);G()}function wf(a,b,c){var d=0,e=x(0),f=0;f=a+4769|0;d=0;a:{if(c){break a}e=x(x(u[b+708>>2]*x(q[a+5744>>2]+q[a+4616>>2]|0))*x(.10000000149011612));d=2;if(e>x(2)){break a}d=0;if(e>2]=x(p[(d<<1)+6424>>1])*x(6103515625e-14)}function nb(a,b,c){var d=0,e=x(0),f=x(0);a:{if((b|0)<1){break a}while(1){f=e;e=u[(d<<2)+a>>2];e=x(f+x(e*e));d=d+1|0;if((d|0)!=(b|0)){continue}break}if((b|0)<1){break a}c=x(x(x(1)/x(F(x(e+x(1.0000000036274937e-15)))))*c);d=0;while(1){u[a>>2]=c*u[a>>2];a=a+4|0;d=d+1|0;if((d|0)!=(b|0)){continue}break}}}function $b(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=q[a+8>>2];if((e|0)>=1){i=((c<<1)+d|0)-1|0;j=q[a+104>>2];h=q[a+32>>2];g=s[h>>1];while(1){k=g<<16;l=(f<<2)+b|0;e=r[(w(e,i)+f|0)+j|0]- -64|0;f=f+1|0;g=p[(f<<1)+h>>1];q[l>>2]=w(e,w(g-(k>>16)<>2;e=q[a+8>>2];if((e|0)>(f|0)){continue}break}}}function yc(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0;if((e|0)>=1){f=q[a>>2];g=p[d+2>>1];h=p[d>>1];d=0;while(1){f=(p[(d<<1)+c>>1]<<8)+f|0;q[(d<<2)+b>>2]=f;j=q[a+4>>2];f=f<<2;i=f&65532;f=f>>16;q[a+4>>2]=(w(i,g)>>16)+w(f,g);f=(w(f,h)+j|0)+(w(h,i)>>16)|0;q[a>>2]=f;d=d+1|0;if((e|0)!=(d|0)){continue}break}}}function pg(a,b,c){var d=0,e=0,f=x(0),g=0,h=0,i=0,j=x(0);if((b|0)!=(c|0)){e=q[a>>2];if((e|0)>=1){f=u[a+4>>2];i=q[a+44>>2];while(1){g=(d<<3)+b|0;j=u[g>>2];h=(p[(d<<1)+i>>1]<<3)+c|0;u[h+4>>2]=f*u[g+4>>2];u[h>>2]=f*j;d=d+1|0;if((e|0)!=(d|0)){continue}break}}Ya(a,c);return}ja(31720,31777,580);G()}function nd(a,b){var c=0,d=0;a:{while(1){if(u[(c<<2)+39840>>2]>a){break a}c=c+1|0;if((c|0)!=21){continue}break}c=21}b:{c:{if((b|0)<(c|0)){d=b<<2;if(x(u[d+39840>>2]+u[d+39936>>2])>a){break c}}if((b|0)<=(c|0)){break b}d=(b<<2)-4|0;if(x(u[d+39840>>2]-u[d+39936>>2])>>0<1){d=a;break a}while(1){d=xg(a,b);e=da;f=e;c=c-1|0;g=c,h=yg(d,e,-10,-1)+a|48,o[g|0]=h;e=b>>>0>9;a=d;b=f;if(e){continue}break}}if(d){while(1){c=c-1|0;a=(d>>>0)/10|0;o[c|0]=w(a,-10)+d|48;b=d>>>0>9;d=a;if(b){continue}break}}return c}function Xd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;if(qa(a,q[b+8>>2],0)){vb(b,c,d);return}e=q[a+12>>2];f=a+16|0;dc(f,b,c,d);a:{if((e|0)<2){break a}e=(e<<3)+f|0;a=a+24|0;while(1){dc(a,b,c,d);a=a+8|0;if(e>>>0<=a>>>0){break a}if(!r[b+54|0]){continue}break}}}function Mc(a,b,c){var d=0,e=0,f=0,g=x(0),h=0;e=ca+ -64|0;ca=e;if((c|0)>=1){while(1){d=f<<2;h=d+e|0;g=zg(x(u[b+d>>2]*x(65536)));a:{if(x(y(g))>2]=d;f=f+1|0;if((f|0)!=(c|0)){continue}break}}Jf(a,e,c);ca=e- -64|0}function Pe(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;b=gg(q[a+8>>2],b,c,q[a+12>>2]);c=w(b,q[a>>2]);if((c|0)>=1){a=q[a+12>>2];while(1){f=e<<2;g=a+(e<<1)|0;p[f+d>>1]=r[g|0];p[(f|2)+d>>1]=r[g+1|0];e=e+1|0;if((c|0)!=(e|0)){continue}break}}return b|0}function Eb(a,b,c,d,e){var f=0,g=0,h=0;a:{if((d|0)>-1){if((d|0)>4){break a}if((e|0)>0){while(1){g=f<<1;h=s[g+b>>1];p[a+g>>1]=(w(s[c+g>>1]-h<<16>>16,d)>>>2|0)+h;f=f+1|0;if((f|0)!=(e|0)){continue}break}}return}ja(37421,37453,45);G()}ja(37472,37453,46);G()}function Jb(a,b,c){var d=0,e=0,f=0;d=b-1|0;if((b|0)>=2){f=c-65536|0;b=0;while(1){e=(b<<1)+a|0;p[e>>1]=(w(p[e>>1],c)>>>15|0)+1>>>1;c=((w(c,f)>>15)+1>>1)+c|0;b=b+1|0;if((d|0)!=(b|0)){continue}break}}a=(d<<1)+a|0;p[a>>1]=(w(p[a>>1],c)>>>15|0)+1>>>1}function zb(a,b){var c=0,d=0,e=0,f=0;c=a*a;d=c*.5;e=1-d;f=1-e-d;d=c*c;return e+(f+(c*(c*(c*(c*2480158728947673e-20+ -.001388888888887411)+.0416666666666666)+d*d*(c*(c*-1.1359647557788195e-11+2.087572321298175e-9)+ -2.7557314351390663e-7))-a*b))}function zc(a,b,c){var d=0,e=0;d=ca-304|0;ca=d;e=-1;a:{if((b|0)<1){break a}e=0;if((b|0)==(c|0)){break a}e=-1;if((b|0)>(c|0)){break a}q[d+4>>2]=0;e=Bc(d,ra((a+c|0)-b|0,a,b),b);if(e){break a}a=Ac(d,q[d+4>>2],a,c,1);e=a>>31&a}ca=d+304|0;return e}function Jc(a){var b=0;a:{b:{c:{d:{if((a|0)<=15999){if((a|0)==8e3){break d}if((a|0)!=12e3){break c}return 4}if((a|0)==16e3){break b}b=1;if((a|0)==48e3){break a}if((a|0)!=24e3){break c}return 2}return 6}ja(1067,1087,84);G()}b=3}return b}function La(a){var b=0;a:{if((a|0)<=-1){b=0;if((a|0)<-191){break a}a=0-a|0;b=a>>>3&536870908;return q[b+35072>>2]-w(p[b+35104>>1],a&31)|0}b=32767;if((a|0)>191){break a}b=a>>>3&536870908;b=w(p[b+35104>>1],a&31)+q[b+35136>>2]|0}return b}function Na(a){var b=0,c=0,d=0;b=0;a:{if((a|0)<0){break a}b=2147483647;if((a|0)>3966){break a}b=a&127;c=a>>>7|0;d=1<>16)+b<>7:w((w(w(128-b|0,b),-174)>>16)+b|0,d>>>7|0))|0}return b}function wg(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0;e=c>>>16|0;f=a>>>16|0;j=w(e,f);g=c&65535;h=a&65535;i=w(g,h);f=(i>>>16|0)+w(f,g)|0;e=(f&65535)+w(e,h)|0;a=(w(b,c)+j|0)+w(a,d)+(f>>>16)+(e>>>16)|0;b=i&65535|e<<16;da=a;return b}function qa(a,b,c){if(!c){return q[a+4>>2]==q[b+4>>2]}if((a|0)==(b|0)){return 1}c=ca-16|0;q[c+8>>2]=a;q[c+12>>2]=q[q[c+8>>2]+4>>2];c=q[c+12>>2];a=ca-16|0;q[a+8>>2]=b;q[a+12>>2]=q[q[a+8>>2]+4>>2];return!de(c,q[a+12>>2])}function hc(a,b){var c=0,d=0;c=a*a;d=c*a;return a-(c*(b*.5-d*(c*(c*c)*(c*1.58969099521155e-10+ -2.5050760253406863e-8)+(c*(c*27557313707070068e-22+ -.0001984126982985795)+.00833333333332249)))-b+d*.16666666666666632)}function vb(a,b,c){var d=0;d=q[a+16>>2];if(!d){q[a+36>>2]=1;q[a+24>>2]=c;q[a+16>>2]=b;return}a:{if((b|0)==(d|0)){if(q[a+24>>2]!=2){break a}q[a+24>>2]=c;return}o[a+54|0]=1;q[a+24>>2]=2;q[a+36>>2]=q[a+36>>2]+1}}function Re(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;if((c|0)>0){while(1){g=f<<2;p[(f<<1)+b>>1]=s[(g|2)+b>>1]<<8|s[b+g>>1];f=f+1|0;if((f|0)!=(c|0)){continue}break}}return bf(q[a+4>>2],b,e,d)|0}function vg(a){var b=0,c=0,d=0,e=0;b=q[a+2340>>2];e=32767/(b+1|0)|0;if((b|0)>=1){while(1){d=e+d|0;p[((c<<1)+a|0)+4052>>1]=d;c=c+1|0;if((b|0)!=(c|0)){continue}break}}a=a+4148|0;q[a>>2]=0;q[a+4>>2]=3176576}function Fa(a,b,c,d,e){var f=0;f=ca-256|0;ca=f;if(!(e&73728|(c|0)<=(d|0))){c=c-d|0;d=c>>>0<256;la(f,b&255,d?c:256);if(!d){while(1){Ha(a,f,256);c=c-256|0;if(c>>>0>255){continue}break}}Ha(a,f,c)}ca=f+256|0}function Db(a){var b=0;la(a+4|0,0,4260);q[a+4168>>2]=0;q[a>>2]=65536;q[a+2376>>2]=1;vg(a);b=a+4244|0;q[b>>2]=65536;q[b+4>>2]=65536;b=a+4256|0;q[b>>2]=2;q[b+4>>2]=20;q[a+4172>>2]=q[a+2328>>2]<<7;return 0}function he(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=ca-16|0;ca=e;a=W(q[a+60>>2],b|0,c|0,d&255,e+8|0)|0;b=0;a:{if(!a){break a}q[14656]=a;b=-1}a=b;ca=e+16|0;da=a?-1:q[e+12>>2];return(a?-1:q[e+8>>2])|0}function fb(a,b,c){var d=x(0),e=0,f=0;e=b-1|0;a:{if((b|0)<2){d=c;break a}b=0;d=c;while(1){f=(b<<2)+a|0;u[f>>2]=d*u[f>>2];d=x(d*c);b=b+1|0;if((e|0)!=(b|0)){continue}break}}a=(e<<2)+a|0;u[a>>2]=d*u[a>>2]}function Ye(a){var b=0;b=r[a+74|0];o[a+74|0]=b-1|b;b=q[a>>2];if(b&8){q[a>>2]=b|32;return-1}q[a+4>>2]=0;q[a+8>>2]=0;b=q[a+44>>2];q[a+28>>2]=b;q[a+20>>2]=b;q[a+16>>2]=b+q[a+48>>2];return 0}function Ib(a,b){a=r[a|0];if(a&128){return(b<<(a>>>3&3))/400|0}if((a&96)==96){if(a&8){return(b|0)/50|0}return(b|0)/100|0}a=a>>>3&3;if((a|0)==3){return(w(b,60)|0)/1e3|0}return(b<>2]=0;q[a+28>>2]=-2147483648;q[a+16>>2]=0;q[a+20>>2]=33;q[a+8>>2]=0;q[a+12>>2]=0;q[a>>2]=b;q[a+32>>2]=0;q[a+36>>2]=0;q[a+40>>2]=-1;q[a+44>>2]=0;q[a+4>>2]=c}function Nb(a){var b=0,c=0,d=0,e=0,f=0;b=31-z(a)>>1;c=1<>>0>a>>>0;a=a-(d?0:f)|0;e=(d?0:c)+e|0;d=(b|0)>0;c=c>>>1|0;b=b-1|0;if(d){continue}break}return e}function dc(a,b,c,d){var e=0,f=0,g=0,h=0;f=q[a+4>>2];a=q[a>>2];g=a;h=b;e=0;a:{if(!c){break a}b=f>>8;e=b;if(!(f&1)){break a}e=q[b+q[c>>2]>>2]}ea[q[q[a>>2]+28>>2]](g,h,e+c|0,f&2?d:2)}function zf(a,b,c){var d=0;d=ca-32|0;ca=d;Ga(d,b,c);if((c|0)>=1){b=0;while(1){u[(b<<2)+a>>2]=x(p[(b<<1)+d>>1])*x(.000244140625);b=b+1|0;if((c|0)!=(b|0)){continue}break}}ca=d+32|0}function pa(a){var b=0,c=0;b=z(a);c=24-b|0;a:{if(!c){break a}if(a>>>0<=127){a=a<>>56-b;break a}a=a<>>c}a=a&127;return(a-(b<<7)+(w(w(a,128-a|0),179)>>>16)|0)+3968|0}function Uc(a,b,c,d){var e=0,f=0,g=0,h=x(0);e=(c|0)<(d|0)?c:d;if((e|0)>=1){d=0;while(1){f=d<<2;g=f+a|0,h=x(Wa(b,b+f|0,c-d|0)),u[g>>2]=h;d=d+1|0;if((e|0)!=(d|0)){continue}break}}}function cc(a,b){a:{if(!b){break a}b=xa(b,57932);if(!b|q[b+8>>2]&(q[a+8>>2]^-1)){break a}if(!qa(q[a+12>>2],q[b+12>>2],0)){break a}return qa(q[a+16>>2],q[b+16>>2],0)}return 0}function df(a,b){var c=x(0),d=x(0),e=x(0),f=0;while(1){d=u[(f<<2)+a>>2];c=cd?e:d;f=f+1|0;if((f|0)!=720){continue}break}c=x(-c);return x(x(1)/x(1<=(c>2];a=q[a+4>>2];b=(a>>1)+b|0;h=b;if(a&1){g=q[g+q[b>>2]>>2]}return ea[g|0](h,c,d,e,f)|0}function Te(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=ca-16|0;ca=e;q[e+12>>2]=b;q[e+8>>2]=c;q[e+4>>2]=d;a=ea[a|0](e+12|0,e+8|0,e+4|0)|0;ca=e+16|0;return a|0}function Oe(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=q[a>>2];a=q[a+4>>2];b=(a>>1)+b|0;g=b;if(a&1){f=q[f+q[b>>2]>>2]}return ea[f|0](g,c,d,e)|0}function se(a){a=a|0;var b=0;b=ca-16|0;ca=b;q[b+12>>2]=a;a=ca-16|0;q[a+8>>2]=q[b+12>>2];q[a+12>>2]=q[q[a+8>>2]+4>>2];a=re(q[a+12>>2]);ca=b+16|0;return a|0}function Zf(a,b,c,d){var e=0,f=0,g=0;if((d|0)>=1){while(1){g=e;e=f<<1;e=g+(w(p[e+b>>1],p[a+e>>1])>>c)|0;f=f+1|0;if((f|0)!=(d|0)){continue}break}}return e}function Wd(a,b){var c=0,d=0;c=a;d=b;a:{if(r[a+8|0]&24){a=1}else{a=0;if(!b){break a}b=xa(b,57844);if(!b){break a}a=(r[b+8|0]&24)!=0}a=qa(c,d,a)}return a}function wa(a){var b=0,c=0,d=0;b=q[a+28>>2];c=z(b);d=b>>>16-c|0;b=d>>>12|0;return((((q[a+20>>2]<<3)+(c<<3)|0)-(t[(b<<2)+24544>>2]>>0)|0)-b|0)-248|0}function Oa(a,b){var c=0,d=0;c=q[a+8>>2];if(c+q[a+24>>2]>>>0>b>>>0){ja(8768,8690,238);G()}d=q[a>>2];ra((d+b|0)-c|0,(q[a+4>>2]+d|0)-c|0,c);q[a+4>>2]=b}function zg(a){var b=x(0),c=x(0);b=x(C(a));c=x(a-b);if(!(cx(.5)){return a}c=a;a=x(b*x(.5));b=x(a-x(C(a)))==x(0)?b:c}return b}function $d(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(qa(a,q[b+8>>2],f)){wb(b,c,d,e);return}a=q[a+8>>2];ea[q[q[a>>2]+20>>2]](a,b,c,d,e,f)}function ne(a){var b=0,c=0;b=q[a+28>>2]>>>15|0;q[a+36>>2]=b;b=t[a+32>>2]/(b>>>0)|0;c=b+1|0;a=c-32768|0;return((b^-1)+32768|0)+(a>>>0>c>>>0?0:a)|0}function Me(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=q[a>>2];a=q[a+4>>2];b=(a>>1)+b|0;f=b;if(a&1){e=q[e+q[b>>2]>>2]}return ea[e|0](f,c,d)|0}function ub(a,b,c,d,e,f){var g=0,h=0,i=0;g=q[a+4>>2];h=g>>8;a=q[a>>2];i=a;if(g&1){h=q[q[d>>2]+h>>2]}ea[q[q[a>>2]+20>>2]](i,b,c,d+h|0,g&2?e:2,f)}function jc(a,b){var c=0,d=0;c=t[a+28>>2]/(b>>>0)|0;q[a+36>>2]=c;c=t[a+32>>2]/(c>>>0)|0;d=c+1|0;a=d-b|0;return((c^-1)+b|0)+(a>>>0>d>>>0?0:a)|0}function Mf(a,b,c,d){var e=0,f=0,g=x(0);a=a+16|0;while(1){f=(e<<2)+d|0,g=x(Wa(a,b,c)),u[f>>2]=g;a=a-4|0;e=e+1|0;if((e|0)!=5){continue}break}}function bb(a,b,c,d,e){var f=0,g=0,h=0;f=q[a+4>>2];g=f>>8;a=q[a>>2];h=a;if(f&1){g=q[q[c>>2]+g>>2]}ea[q[q[a>>2]+24>>2]](h,b,c+g|0,f&2?d:2,e)}function hb(a,b){a=la(a,0,10064);q[a+5092>>2]=b;b=pa(3932160);q[a+4664>>2]=1;b=(b<<8)-524288|0;q[a+12>>2]=b;q[a+8>>2]=b;return dg(a+36|0)}function gc(a){var b=0,c=0,d=0;b=q[a>>2];while(1){c=o[b|0];if(c-48>>>0<10){b=b+1|0;q[a>>2]=b;d=(w(d,10)+c|0)-48|0;continue}break}return d}function me(a,b,c,d){if(a|b){while(1){c=c-1|0;o[c|0]=r[(a&15)+57616|0]|d;a=(b&15)<<28|a>>>4;b=b>>>4|0;if(a|b){continue}break}}return c}function Zd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(qa(a,q[b+8>>2],0)){vb(b,c,d);return}a=q[a+8>>2];ea[q[q[a>>2]+28>>2]](a,b,c,d)}function Vb(a,b){var c=0,d=0;if((b|0)>=1){while(1){d=o[a+c|0]+(d<<8)|0;c=c+1|0;if((c|0)!=(b|0)){continue}break}}return d}function le(a,b,c){if(a|b){while(1){c=c-1|0;o[c|0]=a&7|48;a=(b&7)<<29|a>>>3;b=b>>>3|0;if(a|b){continue}break}}return c}function Ne(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=ca-16|0;ca=d;a=q[a+4>>2];q[d>>2]=c;a=af(a,b,d);ca=d+16|0;return a|0}function Le(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=ca-16|0;ca=d;a=q[a+8>>2];q[d>>2]=c;a=fg(a,b,d);ca=d+16|0;return a|0}function rb(a){var b=0;Db(a);b=Db(a+4264|0);q[a+8536>>2]=0;q[a+8528>>2]=0;q[a+8532>>2]=0;q[a+8548>>2]=0;return b}function De(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52553;K(58228,q[a+12>>2],4,-2147483648,2147483647);ca=a+16|0}function Be(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52570;K(58252,q[a+12>>2],4,-2147483648,2147483647);ca=a+16|0}function $c(a,b){var c=0;if((a|0)<=251){o[b|0]=a;return 1}c=a|-4;o[b|0]=c;o[b+1|0]=a-(c&255)>>>2;return 2}function ja(a,b,c){var d=0;d=ca-16|0;ca=d;q[d+8>>2]=a;q[d+4>>2]=c;q[d>>2]=b;ie(q[14408],d);P();G()}function Ge(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52532;K(58204,q[a+12>>2],2,-32768,32767);ca=a+16|0}function Qd(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(qa(a,q[b+8>>2],f)){wb(b,c,d,e)}}function sc(a){a=a|0;var b=0;if(a){Ca(q[a+4>>2]);Ca(q[a+8>>2]);b=q[a+12>>2];if(b){Ca(b)}Ca(a)}}function Je(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52501;K(58168,q[a+12>>2],1,-128,127);ca=a+16|0}function Ie(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52506;K(58192,q[a+12>>2],1,-128,127);ca=a+16|0}function Ee(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52538;K(58216,q[a+12>>2],2,0,65535);ca=a+16|0}function Pd(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;a=ea[a|0](b,c,d,e)|0;X(da|0);return a|0}function He(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52518;K(58180,q[a+12>>2],1,0,255);ca=a+16|0}function Ag(a,b){var c=0,d=0;c=b&31;d=(-1>>>c&a)<>>a} + + + +function Ce(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52557;K(58240,q[a+12>>2],4,0,-1);ca=a+16|0}function Ae(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52575;K(58264,q[a+12>>2],4,0,-1);ca=a+16|0}function ze(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52589;S(58276,q[a+12>>2],4);ca=a+16|0}function ye(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52595;S(58288,q[a+12>>2],8);ca=a+16|0}function xe(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52706;J(53684,0,q[a+12>>2]);ca=a+16|0}function we(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52950;J(53404,4,q[a+12>>2]);ca=a+16|0}function ve(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=52980;J(53364,5,q[a+12>>2]);ca=a+16|0}function ue(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=53218;J(53324,6,q[a+12>>2]);ca=a+16|0}function te(){var a=0;a=ca-16|0;ca=a;q[a+12>>2]=53249;J(53284,7,q[a+12>>2]);ca=a+16|0}function qc(a){var b=0;b=ca-16|0;ca=b;q[b+12>>2]=a;J(53644,0,q[b+12>>2]);ca=b+16|0}function pc(a){var b=0;b=ca-16|0;ca=b;q[b+12>>2]=a;J(53604,1,q[b+12>>2]);ca=b+16|0}function nc(a){var b=0;b=ca-16|0;ca=b;q[b+12>>2]=a;J(53564,2,q[b+12>>2]);ca=b+16|0}function mc(a){var b=0;b=ca-16|0;ca=b;q[b+12>>2]=a;J(53524,3,q[b+12>>2]);ca=b+16|0}function lc(a){var b=0;b=ca-16|0;ca=b;q[b+12>>2]=a;J(53484,4,q[b+12>>2]);ca=b+16|0}function kc(a){var b=0;b=ca-16|0;ca=b;q[b+12>>2]=a;J(53444,5,q[b+12>>2]);ca=b+16|0}function re(a){var b=0,c=0;b=We(a)+1|0;c=Ra(b);if(!c){return 0}return ka(c,a,b)}function Yd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(qa(a,q[b+8>>2],0)){vb(b,c,d)}}function jd(){var a=0;Ve();a=ca-16|0;ca=a;q[a+12>>2]=58612;rc();ca=a+16|0}function ie(a,b){var c=0;c=ca-16|0;ca=c;q[c+12>>2]=b;oe(a,b);ca=c+16|0}function Md(a){a=a|0;return(a+7>>>0<=7?q[1184-(a<<2)>>2]:1353)|0}function bc(a,b){var c=0,d=0;c=b,d=na(a,6377,8),q[c>>2]=d}function be(a,b,c){a=a|0;b=b|0;c=c|0;return qa(a,b,0)|0}function Ia(a){a=Ra(a?a:1);if(!a){P();G()}return a}function ec(a,b){if(!a){return 0}return ee(a,b)}function Ha(a,b,c){if(!(r[a|0]&32)){Xe(b,c,a)}}function yg(a,b,c,d){a=wg(a,b,c,d);return a}function ge(a){a=a|0;return _(q[a+60>>2])|0}function Ke(a,b){a=a|0;b=b|0;ea[a|0](b)}function Fc(a,b,c,d){Ic(a,b,c,d)} + + + +function xc(a){la(a+12|0,0,13992)}function Ue(a){a=a|0;return 52160}function ce(a){a=a|0;return a|0}function Xc(a,b){ma(a,b,6377,8)}function Sa(a){a=a|0;Ca(a)}function tc(a){a=a|0} +// EMSCRIPTEN_END_FUNCS +a=r;Dg(Ug);var ea=Bg([null,ff,Ue,sc,Te,Se,Re,Qe,Pe,Oe,Ne,Me,Le,Ke,sc,ge,fe,he,ce,Sa,tc,tc,ae,$d,_d,Zd,Sa,be,Sa,Qd,Sd,Yd,Sa,Rd,Td,Xd,Sa,Vd]);function Jg(){return n.byteLength/65536|0}function Kg(Vg){Vg=Vg|0;var fa=Jg()|0;var ga=fa+Vg|0;if(fa=d);)++c;if(16e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d} +function xa(b,a,c){var d=D;if(0=f){var l=b.charCodeAt(++e);f=65536+((f&1023)<<10)|l&1023}if(127>=f){if(a>=c)break;d[a++]=f}else{if(2047>=f){if(a+1>=c)break;d[a++]=192|f>>6}else{if(65535>=f){if(a+2>=c)break;d[a++]=224|f>>12}else{if(a+3>=c)break;d[a++]=240|f>>18;d[a++]=128|f>>12&63}d[a++]=128|f>>6&63}d[a++]=128|f&63}}d[a]=0}}var ya="undefined"!==typeof TextDecoder?new TextDecoder("utf-16le"):void 0; +function za(b,a){var c=b>>1;for(var d=c+a/2;!(c>=d)&&Aa[c];)++c;c<<=1;if(32=a/2);++d){var e=E[b+2*d>>1];if(0==e)break;c+=String.fromCharCode(e)}return c}function Ba(b,a,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=a;c=c<2*b.length?c/2:b.length;for(var e=0;e>1]=b.charCodeAt(e),a+=2;E[a>>1]=0;return a-d}function Ca(b){return 2*b.length} +function Da(b,a){for(var c=0,d="";!(c>=a/4);){var e=F[b+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d}function Ea(b,a,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=a;c=d+c-4;for(var e=0;e=f){var l=b.charCodeAt(++e);f=65536+((f&1023)<<10)|l&1023}F[a>>2]=f;a+=4;if(a+4>c)break}F[a>>2]=0;return a-d} +function Fa(b){for(var a=0,c=0;c=d&&++c;a+=4}return a}var G,H,D,E,Aa,F,I,Ga,Ha;function Ia(b){G=b;g.HEAP8=H=new Int8Array(b);g.HEAP16=E=new Int16Array(b);g.HEAP32=F=new Int32Array(b);g.HEAPU8=D=new Uint8Array(b);g.HEAPU16=Aa=new Uint16Array(b);g.HEAPU32=I=new Uint32Array(b);g.HEAPF32=Ga=new Float32Array(b);g.HEAPF64=Ha=new Float64Array(b)}var oa=g.INITIAL_MEMORY||16777216;g.wasmMemory?C=g.wasmMemory:C=new na;C&&(G=C.buffer);oa=G.byteLength;Ia(G); +var Ja,Ka=[],La=[],Ma=[],Na=[];La.push({ea:function(){Oa()}});function Qa(){var b=g.preRun.shift();Ka.unshift(b)}var J=0,Ra=null,Sa=null;g.preloadedImages={};g.preloadedAudios={};function B(b){if(g.onAbort)g.onAbort(b);la(b);ta=!0;b=new sa("abort("+b+"). Build with -s ASSERTIONS=1 for more info.");ba(b);throw b;}function Ta(b){var a=Ua;return String.prototype.startsWith?b.startsWith(a):0===b.indexOf(a)}var Ua="data:application/octet-stream;base64,",Va="opusscript_native_nasm.wasm"; +if(!Ta(Va)){var Wa=Va;Va=g.locateFile?g.locateFile(Wa,y):y+Wa} +function Xa(){var b=Va;try{try{if(b==Va&&ma)new Uint8Array(ma);else if(!A(b))if(z)z(b);else throw"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)";}catch(d){B(d)}var a=new pa;var c=new qa}catch(d){throw b=d.toString(),la("failed to compile wasm module: "+b),(0<=b.indexOf("imported Memory")||0<=b.indexOf("memory import"))&&la("Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."),d; +}return[c,a]}var K,Ya;function Za(b){for(;0>2]=a};this.pa=function(a){F[this.G+0>>2]=a};this.qa=function(){F[this.G+4>>2]=0};this.oa=function(){H[this.G+12>>0]=0};this.ra=function(){H[this.G+13>>0]=0};this.ia=function(a,c){this.sa(a);this.pa(c);this.qa();this.oa();this.ra()}} +var ab=0;function bb(b){switch(b){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+b);}}var cb=void 0;function L(b){for(var a="";D[b];)a+=cb[D[b++]];return a}var M={},N={},db={};function eb(b){if(void 0===b)return"_unknown";b=b.replace(/[^a-zA-Z0-9_]/g,"$");var a=b.charCodeAt(0);return 48<=a&&57>=a?"_"+b:b} +function fb(b,a){b=eb(b);return(new Function("body","return function "+b+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(a)}function gb(b){var a=Error,c=fb(b,function(d){this.name=b;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(a.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c} +var O=void 0;function P(b){throw new O(b);}var hb=void 0;function ib(b){throw new hb(b);}function Q(b,a,c){function d(h){h=c(h);h.length!==b.length&&ib("Mismatched type converter count");for(var n=0;n>2])}function Eb(b,a,c){if(a===c)return b;if(void 0===c.M)return null;b=Eb(b,a,c.M);return null===b?null:c.da(b)}var Fb={}; +function Gb(b,a){for(void 0===a&&P("ptr should not be undefined");b.M;)a=b.V(a),b=b.M;return Fb[a]}function Hb(b,a){a.I&&a.G||ib("makeClassHandle requires ptr and ptrType");!!a.L!==!!a.K&&ib("Both smartPtrType and smartPtr must be specified");a.count={value:1};return ob(Object.create(b,{F:{value:a}}))}function U(b,a,c,d){this.name=b;this.H=a;this.Z=c;this.W=d;this.X=!1;this.P=this.ma=this.la=this.aa=this.ta=this.ja=void 0;void 0!==a.M?this.toWireType=Ab:(this.toWireType=d?zb:Cb,this.N=null)} +function Ib(b,a){g.hasOwnProperty(b)||ib("Replacing nonexistant public symbol");g[b]=a;g[b].R=void 0}function Jb(b,a){var c=[];return function(){c.length=arguments.length;for(var d=0;df&&P("argTypes array size mismatch! Must at least get return value and 'this' types!");var l=null!==a[1]&&null!==c,h=!1;for(c=1;c>2)+d]);return c}var Sb=[],Y=[{},{value:void 0},{value:null},{value:!0},{value:!1}]; +function Bb(b){switch(b){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var a=Sb.length?Sb.pop():Y.length;Y[a]={na:1,value:b};return a}}function T(b){if(null===b)return"null";var a=typeof b;return"object"===a||"array"===a||"function"===a?b.toString():""+b}function Tb(b,a){switch(a){case 2:return function(c){return this.fromWireType(Ga[c>>2])};case 3:return function(c){return this.fromWireType(Ha[c>>3])};default:throw new TypeError("Unknown float type: "+b);}} +function Ub(b,a,c){switch(a){case 0:return c?function(d){return H[d]}:function(d){return D[d]};case 1:return c?function(d){return E[d>>1]}:function(d){return Aa[d>>1]};case 2:return c?function(d){return F[d>>2]}:function(d){return I[d>>2]};default:throw new TypeError("Unknown integer type: "+b);}}for(var Vb=[null,[],[]],Wb=Array(256),Xb=0;256>Xb;++Xb)Wb[Xb]=String.fromCharCode(Xb);cb=Wb;O=g.BindingError=gb("BindingError");hb=g.InternalError=gb("InternalError"); +S.prototype.isAliasOf=function(b){if(!(this instanceof S&&b instanceof S))return!1;var a=this.F.I.H,c=this.F.G,d=b.F.I.H;for(b=b.F.G;a.M;)c=a.V(c),a=a.M;for(;d.M;)b=d.V(b),d=d.M;return a===d&&c===b};S.prototype.clone=function(){this.F.G||kb(this);if(this.F.U)return this.F.count.value+=1,this;var b=ob(Object.create(Object.getPrototypeOf(this),{F:{value:jb(this.F)}}));b.F.count.value+=1;b.F.S=!1;return b}; +S.prototype["delete"]=function(){this.F.G||kb(this);this.F.S&&!this.F.U&&P("Object already scheduled for deletion");mb(this);nb(this.F);this.F.U||(this.F.K=void 0,this.F.G=void 0)};S.prototype.isDeleted=function(){return!this.F.G};S.prototype.deleteLater=function(){this.F.G||kb(this);this.F.S&&!this.F.U&&P("Object already scheduled for deletion");qb.push(this);1===qb.length&&pb&&pb(rb);this.F.S=!0;return this};U.prototype.ga=function(b){this.aa&&(b=this.aa(b));return b}; +U.prototype.$=function(b){this.P&&this.P(b)};U.prototype.argPackAdvance=8;U.prototype.readValueFromPointer=Db;U.prototype.deleteObject=function(b){if(null!==b)b["delete"]()}; +U.prototype.fromWireType=function(b){function a(){return this.X?Hb(this.H.T,{I:this.ja,G:c,L:this,K:b}):Hb(this.H.T,{I:this,G:b})}var c=this.ga(b);if(!c)return this.$(b),null;var d=Gb(this.H,c);if(void 0!==d){if(0===d.F.count.value)return d.F.G=c,d.F.K=b,d.clone();d=d.clone();this.$(b);return d}d=this.H.fa(c);d=ub[d];if(!d)return a.call(this);d=this.W?d.ba:d.pointerType;var e=Eb(c,this.H,d.H);return null===e?a.call(this):this.X?Hb(d.H.T,{I:d,G:e,L:this,K:b}):Hb(d.H.T,{I:d,G:e})}; +g.getInheritedInstanceCount=function(){return Object.keys(Fb).length};g.getLiveInheritedInstances=function(){var b=[],a;for(a in Fb)Fb.hasOwnProperty(a)&&b.push(Fb[a]);return b};g.flushPendingDeletes=rb;g.setDelayFunction=function(b){pb=b;qb.length&&pb&&pb(rb)};Kb=g.UnboundTypeError=gb("UnboundTypeError");g.count_emval_handles=function(){for(var b=0,a=5;a>4; +e=(e&15)<<4|f>>2;var h=(f&3)<<6|l;a+=String.fromCharCode(d);64!==f&&(a+=String.fromCharCode(e));64!==l&&(a+=String.fromCharCode(h))}while(c>f])},N:null})},v:function(b,a,c,d,e,f,l,h,n,k,m,p,q){m=L(m);f=V(e,f);h&&(h=V(l,h));k&&(k= +V(n,k));q=V(p,q);var x=eb(m);wb(x,function(){Nb("Cannot construct "+m+" due to unbound types",[d])});Q([b,a,c],d?[d]:[],function(u){u=u[0];if(d){var wa=u.H;var ja=wa.T}else ja=S.prototype;u=fb(x,function(){if(Object.getPrototypeOf(this)!==Pa)throw new O("Use 'new' to construct "+m);if(void 0===W.O)throw new O(m+" has no accessible constructor");var sb=W.O[arguments.length];if(void 0===sb)throw new O("Tried to invoke ctor of "+m+" with invalid number of parameters ("+arguments.length+") - expected ("+ +Object.keys(W.O).toString()+") parameters instead!");return sb.apply(this,arguments)});var Pa=Object.create(ja,{constructor:{value:u}});u.prototype=Pa;var W=new xb(m,u,Pa,q,wa,f,h,k);wa=new U(m,W,!0,!1);ja=new U(m+"*",W,!1,!1);var tb=new U(m+" const*",W,!1,!0);ub[b]={pointerType:ja,ba:tb};Ib(x,u);return[wa,ja,tb]})},n:function(b,a,c,d,e,f,l){var h=Rb(c,d);a=L(a);f=V(e,f);Q([],[b],function(n){function k(){Nb("Cannot call "+m+" due to unbound types",h)}n=n[0];var m=n.name+"."+a,p=n.H.constructor;void 0=== +p[a]?(k.R=c-1,p[a]=k):(vb(p,a,m),p[a].J[c-1]=k);Q([],h,function(q){q=[q[0],null].concat(q.slice(1));q=Qb(m,q,null,f,l);void 0===p[a].J?(q.R=c-1,p[a]=q):p[a].J[c-1]=q;return[]});return[]})},u:function(b,a,c,d,e,f){assert(0>>h}}var n=-1!=a.indexOf("unsigned");R(b,{name:a,fromWireType:f,toWireType:function(k, +m){if("number"!==typeof m&&"boolean"!==typeof m)throw new TypeError('Cannot convert "'+T(m)+'" to '+this.name);if(me)throw new TypeError('Passing a number "'+T(m)+'" from JS side to C/C++ side to an argument of type "'+a+'", which is outside the valid range ['+d+", "+e+"]!");return n?m>>>0:m|0},argPackAdvance:8,readValueFromPointer:Ub(a,l,0!==d),N:null})},b:function(b,a,c){function d(f){f>>=2;var l=I;return new e(G,l[f+1],l[f])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array, +Float32Array,Float64Array][a];c=L(c);R(b,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{ha:!0})},g:function(b,a){a=L(a);var c="std::string"===a;R(b,{name:a,fromWireType:function(d){var e=I[d>>2];if(c)for(var f=d+4,l=0;l<=e;++l){var h=d+4+l;if(l==e||0==D[h]){f=f?va(D,f,h-f):"";if(void 0===n)var n=f;else n+=String.fromCharCode(0),n+=f;f=h+1}}else{n=Array(e);for(l=0;l=p&&(p=65536+((p&1023)<<10)|e.charCodeAt(++m)&1023);127>=p?++k:k=2047>=p?k+2:65535>=p?k+3:k+4}return k}:function(){return e.length})(),h=$b(4+l+1);I[h>>2]=l;if(c&&f)xa(e,h+4,l+1);else if(f)for(f=0;f>2],m=l(),p,q=n+4,x=0;x<=k;++x){var u=n+4+x*a;if(x==k||0==m[u>>h])q=d(q,u-q),void 0===p? +p=q:(p+=String.fromCharCode(0),p+=q),q=u+a}X(n);return p},toWireType:function(n,k){"string"!==typeof k&&P("Cannot pass non-string to C++ string type "+c);var m=f(k),p=$b(4+m+a);I[p>>2]=m>>h;e(k,p+4,m+a);null!==n&&n.push(X,p);return p},argPackAdvance:8,readValueFromPointer:Db,N:function(n){X(n)}})},m:function(b,a){a=L(a);R(b,{ua:!0,name:a,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},h:function(){B()},q:function(b,a,c){D.copyWithin(b,a,a+c)},d:function(b){b>>>=0;var a=D.length; +if(2147483648=c;c*=2){var d=a*(1+.2/c);d=Math.min(d,b+100663296);d=Math.max(16777216,b,d);0>>16);Ia(C.buffer);var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},s:function(){return 0},o:function(){},r:function(b,a,c,d){for(var e=0,f=0;f>2],h=F[a+(8*f+4)>>2],n=0;n> +2]=e;return 0},a:C,p:function(){}},Z=function(){function b(c){g.asm=c.exports;Ja=g.asm.A;J--;g.monitorRunDependencies&&g.monitorRunDependencies(J);0==J&&(null!==Ra&&(clearInterval(Ra),Ra=null),Sa&&(c=Sa,Sa=null,c()))}var a={a:ra};J++;g.monitorRunDependencies&&g.monitorRunDependencies(J);if(g.instantiateWasm)try{return g.instantiateWasm(a,b)}catch(c){return la("Module.instantiateWasm callback failed with error: "+c),!1}a=Xa();b(a[0],a[1]);return g.asm}(),Oa=g.___wasm_call_ctors=Z.w; +g._opus_strerror=Z.x;var $b=g._malloc=Z.y,X=g._free=Z.z,Mb=g.___getTypeName=Z.B;g.___embind_register_native_and_builtin_types=Z.C;g.dynCall_jiji=Z.D; +g.setValue=function(b,a,c){c=c||"i8";"*"===c.charAt(c.length-1)&&(c="i32");switch(c){case "i1":H[b>>0]=a;break;case "i8":H[b>>0]=a;break;case "i16":E[b>>1]=a;break;case "i32":F[b>>2]=a;break;case "i64":Ya=[a>>>0,(K=a,1<=+Math.abs(K)?0>>0:~~+Math.ceil((K-+(~~K>>>0))/4294967296)>>>0:0)];F[b>>2]=Ya[0];F[b+4>>2]=Ya[1];break;case "float":Ga[b>>2]=a;break;case "double":Ha[b>>3]=a;break;default:B("invalid type for setValue: "+c)}}; +g.getValue=function(b,a){a=a||"i8";"*"===a.charAt(a.length-1)&&(a="i32");switch(a){case "i1":return H[b>>0];case "i8":return H[b>>0];case "i16":return E[b>>1];case "i32":return F[b>>2];case "i64":return F[b>>2];case "float":return Ga[b>>2];case "double":return Ha[b>>3];default:B("invalid type for getValue: "+a)}return null};var ac;Sa=function bc(){ac||cc();ac||(Sa=bc)}; +function cc(){function b(){if(!ac&&(ac=!0,g.calledRun=!0,!ta)){Za(La);Za(Ma);aa(g);if(g.onRuntimeInitialized)g.onRuntimeInitialized();if(g.postRun)for("function"==typeof g.postRun&&(g.postRun=[g.postRun]);g.postRun.length;){var a=g.postRun.shift();Na.unshift(a)}Za(Na)}}if(!(0=d);)++c;if(16e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d} +function qa(b,a,c){var d=B;if(0=f){var l=b.charCodeAt(++e);f=65536+((f&1023)<<10)|l&1023}if(127>=f){if(a>=c)break;d[a++]=f}else{if(2047>=f){if(a+1>=c)break;d[a++]=192|f>>6}else{if(65535>=f){if(a+2>=c)break;d[a++]=224|f>>12}else{if(a+3>=c)break;d[a++]=240|f>>18;d[a++]=128|f>>12&63}d[a++]=128|f>>6&63}d[a++]=128|f&63}}d[a]=0}}var sa="undefined"!==typeof TextDecoder?new TextDecoder("utf-16le"):void 0; +function ta(b,a){var c=b>>1;for(var d=c+a/2;!(c>=d)&&ua[c];)++c;c<<=1;if(32=a/2);++d){var e=C[b+2*d>>1];if(0==e)break;c+=String.fromCharCode(e)}return c}function va(b,a,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=a;c=c<2*b.length?c/2:b.length;for(var e=0;e>1]=b.charCodeAt(e),a+=2;C[a>>1]=0;return a-d}function wa(b){return 2*b.length} +function xa(b,a){for(var c=0,d="";!(c>=a/4);){var e=D[b+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d}function ya(b,a,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=a;c=d+c-4;for(var e=0;e=f){var l=b.charCodeAt(++e);f=65536+((f&1023)<<10)|l&1023}D[a>>2]=f;a+=4;if(a+4>c)break}D[a>>2]=0;return a-d} +function za(b){for(var a=0,c=0;c=d&&++c;a+=4}return a}var Aa,E,B,C,ua,D,F,Ba,Ca;function Da(){var b=ma.buffer;Aa=b;g.HEAP8=E=new Int8Array(b);g.HEAP16=C=new Int16Array(b);g.HEAP32=D=new Int32Array(b);g.HEAPU8=B=new Uint8Array(b);g.HEAPU16=ua=new Uint16Array(b);g.HEAPU32=F=new Uint32Array(b);g.HEAPF32=Ba=new Float32Array(b);g.HEAPF64=Ca=new Float64Array(b);g.HEAP64=new BigInt64Array(b)}var Ea,Fa=[],Ga=[],Ha=[],Ia=[];Ga.push({ba:function(){Ja()}}); +function Ka(){var b=g.preRun.shift();Fa.unshift(b)}var G=0,La=null,H=null;g.preloadedImages={};g.preloadedAudios={};function A(b){if(g.onAbort)g.onAbort(b);z(b);na=!0;b=new WebAssembly.RuntimeError("abort("+b+"). Build with -s ASSERTIONS=1 for more info.");ba(b);throw b;}var I="opusscript_native_wasm.wasm";if(String.prototype.startsWith?!I.startsWith("data:application/octet-stream;base64,"):0!==I.indexOf("data:application/octet-stream;base64,")){var Ma=I;I=g.locateFile?g.locateFile(Ma,w):w+Ma} +function Na(b){var a=I;try{a:{try{if(a==I&&la){var c=new Uint8Array(la);break a}if(y){c=y(a);break a}throw"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)";}catch(f){A(f)}c=void 0}var d=new WebAssembly.Module(c);var e=new WebAssembly.Instance(d,b)}catch(f){throw b=f.toString(),z("failed to compile wasm module: "+b),(0<=b.indexOf("imported Memory")||0<=b.indexOf("memory import"))&&z("Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."), +f;}return[e,d]}var J,Pa;function Qa(b){for(;0>2]=a};this.na=function(a){D[this.D+0>>2]=a};this.oa=function(){D[this.D+4>>2]=0};this.ma=function(){E[this.D+12>>0]=0};this.pa=function(){E[this.D+13>>0]=0};this.ga=function(a,c){this.qa(a);this.na(c);this.oa();this.ma();this.pa()}} +var Sa=0;function Ta(b){switch(b){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+b);}}var Ua=void 0;function K(b){for(var a="";B[b];)a+=Ua[B[b++]];return a}var L={},M={},Va={};function Wa(b){if(void 0===b)return"_unknown";b=b.replace(/[^a-zA-Z0-9_]/g,"$");var a=b.charCodeAt(0);return 48<=a&&57>=a?"_"+b:b} +function Xa(b,a){b=Wa(b);return(new Function("body","return function "+b+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(a)}function Ya(b){var a=Error,c=Xa(b,function(d){this.name=b;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(a.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c} +var N=void 0;function O(b){throw new N(b);}var Za=void 0;function $a(b){throw new Za(b);}function P(b,a,c){function d(h){h=c(h);h.length!==b.length&&$a("Mismatched type converter count");for(var n=0;n>2])}function ub(b,a,c){if(a===c)return b;if(void 0===c.K)return null;b=ub(b,a,c.K);return null===b?null:c.aa(b)}var vb={}; +function wb(b,a){for(void 0===a&&O("ptr should not be undefined");b.K;)a=b.T(a),b=b.K;return vb[a]}function xb(b,a){a.G&&a.D||$a("makeClassHandle requires ptr and ptrType");!!a.J!==!!a.I&&$a("Both smartPtrType and smartPtr must be specified");a.count={value:1};return R(Object.create(b,{C:{value:a}}))}function V(b,a,c,d){this.name=b;this.F=a;this.X=c;this.U=d;this.V=!1;this.N=this.ka=this.ja=this.Z=this.ra=this.ha=void 0;void 0!==a.K?this.toWireType=qb:(this.toWireType=d?pb:sb,this.L=null)} +function yb(b,a){g.hasOwnProperty(b)||$a("Replacing nonexistant public symbol");g[b]=a;g[b].O=void 0}function W(b,a){b=K(b);var c=Ea.get(a);"function"!==typeof c&&O("unknown function pointer with signature "+b+": "+a);return c}var zb=void 0;function Ab(b){b=Bb(b);var a=K(b);X(b);return a}function Cb(b,a){function c(f){e[f]||M[f]||(Va[f]?Va[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};a.forEach(c);throw new zb(b+": "+d.map(Ab).join([", "]));} +function Db(b){var a=Function;if(!(a instanceof Function))throw new TypeError("new_ called with constructor type "+typeof a+" which is not a function");var c=Xa(a.name||"unknownFunctionName",function(){});c.prototype=a.prototype;c=new c;b=a.apply(c,b);return b instanceof Object?b:c}function Eb(b){for(;b.length;){var a=b.pop();b.pop()(a)}} +function Fb(b,a,c,d,e){var f=a.length;2>f&&O("argTypes array size mismatch! Must at least get return value and 'this' types!");var l=null!==a[1]&&null!==c,h=!1;for(c=1;c>2)+d]);return c}var Hb=[],Y=[{},{value:void 0},{value:null},{value:!0},{value:!1}]; +function rb(b){switch(b){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var a=Hb.length?Hb.pop():Y.length;Y[a]={la:1,value:b};return a}}function U(b){if(null===b)return"null";var a=typeof b;return"object"===a||"array"===a||"function"===a?b.toString():""+b}function Ib(b,a){switch(a){case 2:return function(c){return this.fromWireType(Ba[c>>2])};case 3:return function(c){return this.fromWireType(Ca[c>>3])};default:throw new TypeError("Unknown float type: "+b);}} +function Jb(b,a,c){switch(a){case 0:return c?function(d){return E[d]}:function(d){return B[d]};case 1:return c?function(d){return C[d>>1]}:function(d){return ua[d>>1]};case 2:return c?function(d){return D[d>>2]}:function(d){return F[d>>2]};default:throw new TypeError("Unknown integer type: "+b);}}for(var Kb=[null,[],[]],Lb=Array(256),Mb=0;256>Mb;++Mb)Lb[Mb]=String.fromCharCode(Mb);Ua=Lb;N=g.BindingError=Ya("BindingError");Za=g.InternalError=Ya("InternalError"); +S.prototype.isAliasOf=function(b){if(!(this instanceof S&&b instanceof S))return!1;var a=this.C.G.F,c=this.C.D,d=b.C.G.F;for(b=b.C.D;a.K;)c=a.T(c),a=a.K;for(;d.K;)b=d.T(b),d=d.K;return a===d&&c===b};S.prototype.clone=function(){this.C.D||bb(this);if(this.C.S)return this.C.count.value+=1,this;var b=R(Object.create(Object.getPrototypeOf(this),{C:{value:ab(this.C)}}));b.C.count.value+=1;b.C.P=!1;return b}; +S.prototype["delete"]=function(){this.C.D||bb(this);this.C.P&&!this.C.S&&O("Object already scheduled for deletion");db(this);eb(this.C);this.C.S||(this.C.I=void 0,this.C.D=void 0)};S.prototype.isDeleted=function(){return!this.C.D};S.prototype.deleteLater=function(){this.C.D||bb(this);this.C.P&&!this.C.S&&O("Object already scheduled for deletion");gb.push(this);1===gb.length&&fb&&fb(hb);this.C.P=!0;return this};V.prototype.ea=function(b){this.Z&&(b=this.Z(b));return b}; +V.prototype.Y=function(b){this.N&&this.N(b)};V.prototype.argPackAdvance=8;V.prototype.readValueFromPointer=tb;V.prototype.deleteObject=function(b){if(null!==b)b["delete"]()}; +V.prototype.fromWireType=function(b){function a(){return this.V?xb(this.F.R,{G:this.ha,D:c,J:this,I:b}):xb(this.F.R,{G:this,D:b})}var c=this.ea(b);if(!c)return this.Y(b),null;var d=wb(this.F,c);if(void 0!==d){if(0===d.C.count.value)return d.C.D=c,d.C.I=b,d.clone();d=d.clone();this.Y(b);return d}d=this.F.da(c);d=ib[d];if(!d)return a.call(this);d=this.U?d.$:d.pointerType;var e=ub(c,this.F,d.F);return null===e?a.call(this):this.V?xb(d.F.R,{G:d,D:e,J:this,I:b}):xb(d.F.R,{G:d,D:e})}; +g.getInheritedInstanceCount=function(){return Object.keys(vb).length};g.getLiveInheritedInstances=function(){var b=[],a;for(a in vb)vb.hasOwnProperty(a)&&b.push(vb[a]);return b};g.flushPendingDeletes=hb;g.setDelayFunction=function(b){fb=b;gb.length&&fb&&fb(hb)};zb=g.UnboundTypeError=Ya("UnboundTypeError");g.count_emval_handles=function(){for(var b=0,a=5;a>f])},L:null})},t:function(b,a,c,d,e,f,l,h,n,k,m,p,q){m=K(m);f=W(e,f);h&&(h=W(l,h));k&&(k= +W(n,k));q=W(p,q);var x=Wa(m);kb(x,function(){Cb("Cannot construct "+m+" due to unbound types",[d])});P([b,a,c],d?[d]:[],function(u){u=u[0];if(d){var ra=u.F;var da=ra.R}else da=S.prototype;u=Xa(x,function(){if(Object.getPrototypeOf(this)!==Oa)throw new N("Use 'new' to construct "+m);if(void 0===T.M)throw new N(m+" has no accessible constructor");var mb=T.M[arguments.length];if(void 0===mb)throw new N("Tried to invoke ctor of "+m+" with invalid number of parameters ("+arguments.length+") - expected ("+ +Object.keys(T.M).toString()+") parameters instead!");return mb.apply(this,arguments)});var Oa=Object.create(da,{constructor:{value:u}});u.prototype=Oa;var T=new lb(m,u,Oa,q,ra,f,h,k);ra=new V(m,T,!0,!1);da=new V(m+"*",T,!1,!1);var nb=new V(m+" const*",T,!1,!0);ib[b]={pointerType:da,$:nb};yb(x,u);return[ra,da,nb]})},m:function(b,a,c,d,e,f,l){var h=Gb(c,d);a=K(a);f=W(e,f);P([],[b],function(n){function k(){Cb("Cannot call "+m+" due to unbound types",h)}n=n[0];var m=n.name+"."+a,p=n.F.constructor;void 0=== +p[a]?(k.O=c-1,p[a]=k):(jb(p,a,m),p[a].H[c-1]=k);P([],h,function(q){q=[q[0],null].concat(q.slice(1));q=Fb(m,q,null,f,l);void 0===p[a].H?(q.O=c-1,p[a]=q):p[a].H[c-1]=q;return[]});return[]})},s:function(b,a,c,d,e,f){assert(0>>h}}var n=-1!=a.indexOf("unsigned");Q(b,{name:a,fromWireType:f,toWireType:function(k, +m){if("number"!==typeof m&&"boolean"!==typeof m)throw new TypeError('Cannot convert "'+U(m)+'" to '+this.name);if(me)throw new TypeError('Passing a number "'+U(m)+'" from JS side to C/C++ side to an argument of type "'+a+'", which is outside the valid range ['+d+", "+e+"]!");return n?m>>>0:m|0},argPackAdvance:8,readValueFromPointer:Jb(a,l,0!==d),L:null})},a:function(b,a,c){function d(f){f>>=2;var l=F;return new e(Aa,l[f+1],l[f])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array, +Uint32Array,Float32Array,Float64Array][a];c=K(c);Q(b,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{fa:!0})},f:function(b,a){a=K(a);var c="std::string"===a;Q(b,{name:a,fromWireType:function(d){var e=F[d>>2];if(c)for(var f=d+4,l=0;l<=e;++l){var h=d+4+l;if(l==e||0==B[h]){f=f?pa(B,f,h-f):"";if(void 0===n)var n=f;else n+=String.fromCharCode(0),n+=f;f=h+1}}else{n=Array(e);for(l=0;l=p&&(p=65536+((p&1023)<<10)|e.charCodeAt(++m)&1023);127>=p?++k:k=2047>=p?k+2:65535>=p?k+3:k+4}return k}:function(){return e.length})(),h=Nb(4+l+1);F[h>>2]=l;if(c&&f)qa(e,h+4,l+1);else if(f)for(f=0;f>2],m=l(),p,q=n+4,x=0;x<=k;++x){var u=n+4+x*a;if(x==k||0==m[u>>h])q=d(q,u-q),void 0=== +p?p=q:(p+=String.fromCharCode(0),p+=q),q=u+a}X(n);return p},toWireType:function(n,k){"string"!==typeof k&&O("Cannot pass non-string to C++ string type "+c);var m=f(k),p=Nb(4+m+a);F[p>>2]=m>>h;e(k,p+4,m+a);null!==n&&n.push(X,p);return p},argPackAdvance:8,readValueFromPointer:tb,L:function(n){X(n)}})},l:function(b,a){a=K(a);Q(b,{sa:!0,name:a,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},g:function(){A()},n:function(b,a,c){B.copyWithin(b,a,a+c)},c:function(b){b>>>=0;var a=B.length; +if(2147483648=c;c*=2){var d=a*(1+.2/c);d=Math.min(d,b+100663296);d=Math.max(16777216,b,d);0>>16);Da();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},p:function(){return 0},q:function(){},o:function(b,a,c,d){for(var e=0,f=0;f>2],h=D[a+(8*f+4)>>2],n=0;n>2]= +e;return 0}},Z=function(){function b(c){g.asm=c.exports;ma=g.asm.u;Da();Ea=g.asm.z;G--;g.monitorRunDependencies&&g.monitorRunDependencies(G);0==G&&(null!==La&&(clearInterval(La),La=null),H&&(c=H,H=null,c()))}var a={a:Ob};G++;g.monitorRunDependencies&&g.monitorRunDependencies(G);if(g.instantiateWasm)try{return g.instantiateWasm(a,b)}catch(c){return z("Module.instantiateWasm callback failed with error: "+c),!1}a=Na(a);b(a[0],a[1]);return g.asm}(),Ja=g.___wasm_call_ctors=Z.v;g._opus_strerror=Z.w; +var Nb=g._malloc=Z.x,X=g._free=Z.y,Bb=g.___getTypeName=Z.A;g.___embind_register_native_and_builtin_types=Z.B; +g.setValue=function(b,a,c){c=c||"i8";"*"===c.charAt(c.length-1)&&(c="i32");switch(c){case "i1":E[b>>0]=a;break;case "i8":E[b>>0]=a;break;case "i16":C[b>>1]=a;break;case "i32":D[b>>2]=a;break;case "i64":Pa=[a>>>0,(J=a,1<=+Math.abs(J)?0>>0:~~+Math.ceil((J-+(~~J>>>0))/4294967296)>>>0:0)];D[b>>2]=Pa[0];D[b+4>>2]=Pa[1];break;case "float":Ba[b>>2]=a;break;case "double":Ca[b>>3]=a;break;default:A("invalid type for setValue: "+c)}}; +g.getValue=function(b,a){a=a||"i8";"*"===a.charAt(a.length-1)&&(a="i32");switch(a){case "i1":return E[b>>0];case "i8":return E[b>>0];case "i16":return C[b>>1];case "i32":return D[b>>2];case "i64":return D[b>>2];case "float":return Ba[b>>2];case "double":return Ca[b>>3];default:A("invalid type for getValue: "+a)}return null};var Pb;H=function Qb(){Pb||Rb();Pb||(H=Qb)}; +function Rb(){function b(){if(!Pb&&(Pb=!0,g.calledRun=!0,!na)){Qa(Ga);Qa(Ha);aa(g);if(g.onRuntimeInitialized)g.onRuntimeInitialized();if(g.postRun)for("function"==typeof g.postRun&&(g.postRun=[g.postRun]);g.postRun.length;){var a=g.postRun.shift();Ia.unshift(a)}Qa(Ia)}}if(!(0Iel6W$MMJT4cBs?{ihCb#P4E$)?Xb2Gj#zVD8a{u3TG z2j>GI;^TKTR_;c3v{x=Ti|!a(bzQ!8oCkd%h8yR6xCt&>!>eB}L4lN8cE?^Y z$cKG+^>N*}*tY8aToIS-6MsKd^L1J1;0_l0WigC1NYKQtMCcl_P3?RUrjN0jpWJyFK* zol%?L@3s5i7u7kxE2{AO{dVVHS(&b#_w22CD|2_$q|9rhgx?>C8vMS_N*<1`Yi0GQmW^x~8@;Yxzq}L2 zX=5zCD6UmUn`v{pTCHVKy&A=FW8+vS$x{BSMe8bglwH=@u@>NJ+!=}Dv|fvAQMPfc zHo||=$Vg>mB#y2bNt0G`$@(~+smIy1)ud+F>CMVG`s97nN_z8c5-q92V%ZjK`#H!pfm@>9u=#SbMv znfyfZByb4Ye28HadR68Te~Ot&RG z>wG!xRHNn_vN%2A62F+eCYy7Si(S%buXoW{lZ&LAr-|LY$ESy{&*r#De0)$P^Q0A1 zCfpxf=1EEs7hfJl*GAOl<8Drs9E!xHuW9Q%J=~6(O{z-$eTR$8pNVd2)0WHpT(_v) z+>SyOKnc96Y+I7419nzdkL;|qD`|zZ&aR{r&L(#yli_S;S27dMHtb3^gfq7*ap7$1 zu4HRC+qNs&7S49;N_K>^ox75q;q2;N$<^U(_pW4jIJ<6FavdF;>siOflLuq_%1pb8FdME+TyG82bo})os+5x(WOsP+X@5kIohi?FuuZ4oy z@O_xjkLZ5n`Rl<11t<~d&&7xR>)-IE`g|e&6t}vpXPg1bz>Bdh%wcaE6N{xO3rF~R z`8e^dLBVy_yh_Z3f|KFU2?v;l0TOCW{N&(lW^lHlUzO-`*v}j(pibhQ>WzQCsO)oZ zc9l2f73vdpL2>LV*Q7Jy&u5hT`1G^fLp6IMlm0XTVC0aaUO778hM8Rq4Va zKC1W=^l4kN;|PPu&bAgY4J3e_S5j3=MJiENYmN4+rPNBbN!L}ZPQ9@$*;;XNQ=NyL zTSFB)T&iYV954xMz(N|v6yFfuqPHfUtOl!nD^LM{eIejRWT`Ls#cw?KThg?ECD1;F5i(a3olMLb4GIkwH3^d#>>D_T zNWB69=4gC~G&6ZsHEzodHRl>uF< z0)Xe0ylQPf{bF*H7#mn>Ib3ZhPMSZ~h_h9S1&z}3 zKawX2JoT;oqvxkL_eQU%uU)&g#$U`|g}=3HtMLu=s>phFK(*GJj46bYe%i}kLHb=~dyuQE<~+RdvB?JD9z zrKoFh@h9(->eI88s~}BW#k6z@9Tw5&0c&4$O>zgoE;0 zNw!LK2qbIdFVH@42JiY#7n?e1elL1Ene%ADy9y~~GnxEzktte+%}j3r((HC|@7R$% z3Tg;t)8#JOgIh>tiXUby#lE)C6CLSNZ{GiV7^QOz7TDZvelLaLR8s{4CA%Sv#T($> zc&wR}(ioNv25|xlQp#*%MBtzRji`XJbiV-TYc)H68eiZ1^8|+>p%oY3AmauwT+(9z zz5#Ll)jm}sHfCT{^xD#w#y6UVH`vzB8Z7-N*v@IASlR4Cty)a^(tH{J@1bYFU z-<4vQy?~+aMuNRyXh(7k>^Okud6J8WViznavk*%22w-aG*b4#_u*_ZnRA6afH-yes zn?DyPsX`tyXwyUR2!~#t0bw8~f-miEPol?)imRNaInaA#<;E$yQ$OcUYxvG7wFgz? zR~-x{!hMG|Qt8T}rm;`Iv7wsnCG$q(;Qmyazfg@U--2;NUmnARnTnG}quNLtL;uz4 z5nLSpQS2SESQ;rvX~*q$t^T|k6T71Y=n`#aceDa6CePJ}s}$ZrDjmFahzq0O%r{Y! zrkzVo*?Pg65)V0om82$-Iy=7UduU(-&G@}@w}fyF0L84;vYu_FwvCER$~E>C#H7x! zsVRqs^iQ3My7OIsb)(==TUO2nC0d+w9^Q8=h1j-uZa8Bk&PoL;i&a&4Y-&pX2in{xQB9yilk?O zBE9X>GBTtB4ll8kXb2p_FvD`pi4=)s11@RhJT58JdJ!&Z_5xf|B#|K|GH%q*H}Q0{ z;F5yA3%I1oDwkBfS#e42EqWVl0o4F^;m&HXCX&~N8wkVsg92i~}7v z6f#D*=rT45K=h7bT|~ac!G_S|vDD$sJw;x=9`~B>PJ%y2z%9Y3p@s-Wob@>3`Qawp zndIw7KS?Y>(KYzg!fjX+3?ga5Nye_fOcpS1Za0r0B|6MUomsdbu_40^ItWkz!xN2Z zK|Nm84LT2p`1pod3irD96%7)_#BI-2f=cem-?a0*8Ir#n|_4D~D0 z!P(9>iotMyV>sh=&aA>2>Ar-R9>_?WzZRnqT*7Mr+sZ4n&q=4iWS6~?OO00Z4493L z(8hY61-)J`EIu$(hD>S_B%sigbO-_T101V@CJ3+kF_cr)j~xQLRY*`ECS?%;nS_~X zXCnrj;xgP3SWa3(7zHx){8-a3{z~Nk`cskr)wnYmHQyV@Rb!M^7@wgZi442MI-nbM znic$VOCW8Aj;`Kh@g6)Hi!7ADS6!v2-~yo{U|JvyV|*}v5bdAH*2vHewP5dB_XOzu7uNU> zuJIo+O8eJO>f)E};{ENUbs{+~OuaV83D>Zm20`>({zDW9?tI;1jf^J+a@@4I!o`?n z`y>9lO%82mi$*5zb++bcG-Ed2QxGy}a^8t4zWBI)_PWaKZt06SZ@Aj^P>!$|^>I&5 zivXD^*7)d9-lV;Xv_&N!Q41q0=R8pnJb?_I&7tk%!`JKHjZ7R2UJ!DSZQ!D*XRbM$ zk8vUwoDMQF%N{lT<{JP6c#jsNK0c~mG1z1cjC0mpC?-K^KEX>ZOE0WG~yhT&&eYUi9%1>KGJRDKN7{uU*Hjbu%Y*Mq#n=c(5p1x@x(} za5W+y(g2NK9H1l52PhB!p#W|8vBUnMzlkLUT*GHa`xhYS2sDTC-JqoSAa0BSJjAwsM_$kf!Wg}g&W?UF*{!xZYw zyLO<^l$%;1z%YecD@9fc1PV=^O`&E09kwQ=*yv5ajF4iGdU|@cFMcw z15@;AuE4Mw%oX~4D`0lc1E!k*=zPL8Tx-EKL=X^l7^82}pE$^%hts?Hq-*9aH=2)I zbXS9KJRfzfoVXhU?uI<0vrV6f29gL+0Wvb$#}-`H`H+oO9*vxHJEEw>6@wZ3y6zgC zJpjOv&jNRAOr2HRA19In6T)aSZvzUri(m+lx&TbZPe+TkCP#os@AKp+AvpA3u;;md z|6%hcaDRFGtifBIcO!u{ny$G*d7GOl$3%Oj$V!2=Hh7!#V(swYE!}|;vBrpN2MVMC z({1<^Dc3C`H(?Ke#v~K&FI{T*Q(@THDA{Z_i9`~w94%5h#2>t_Gei=-TUgaA%(xYi zw9>1VYpno1+$%&<+3}$Qp;xW5dzFTMl)WnZxOyaO=;jf$LZ~C6!U#=1{4*cQWehUG zgP^Y<1Muo0vAOoHzC0xMlF&v2tsj}z&k4Uanr~>wHH$x~+DJAJ>Mq!!n6vj1BkP*^ zg*zsxfrWcmTE%>&2(JUoeeO3jpItCl6FWe|4h5B;x0{A!EOD7T6e4yD=qcU`hO+;Q z-$=VRuE&%JGX~O&zw#TY{;1C1?~)(HfVU7MMy<>jcn&kp!icD`yb3n@KARe{22i+~ zM#s!-p_Wjl;YIBGI^3-{u$l`V12FwjOmT1pB4r|g%LIFh@bjvoF-5ViaMC(@wMj@u zo@3KhK}a7IVoDIffAxtJTZ~5NlbM4&5XT|bV05lE{Z0cPTEC>mUnu}gu?B$>M4G61xna*RxhI|Bg z9}^Z!500^?mZ3QDj*DLVh=l^y-LX|s*&5FMiu1m{51|kD;}lMJir(@4bWRqN^=4*94H{j*Jrq* z2CI}TYYdW|!*_AuJ2^UTb!oU)>;#Vmc2X084+)~tXkl}@)^1X^@%+qKS;b+Me;8&I zDh!?%!Hjfzh#4!x%m_=B%t!~%%Z%JNW`x&;s6I1_rTWY;Al-_HU|95dQ{3=;+$s4U zNKB}Eh^SEiL@75Ie~bkpPU2SG6D;sJoT)*9GORZhKNFiNjfF!?@P&iK1ZMqaN~D_N z!Flq}F+pu{c-+H+x`_|$?J`T?>r7h{IY6QQLXyRTA3J7H zxah!p)R#f52H#mlT)h!CVo&ANpwR`2L% zIqoAL`E^tjAM5eE`G(nrAhi%~NVZsFDYHRy17=C$Hy+EukhGn=I%4gIyG0E~Wat%| z-$$>|fHF5=dP$r<%7j3nl=|w0;j={rx(jW=r&2$7rNl1Ndrvc_`IGP?&K^k-F^$Rm z{(neQ%YM1fMIS5DeS05xf7$!{;ABWEJU|ck!23lEr3)nf=YI8_Zwd)hAKRy!_FweI zePJGM@$1h;--fiZB&q{{_42>{#=a}wJa?y$?~x3P4n+3fQzuT#B|7lgkN)uQU$*7V zXTFE$(qRYw+0M&b6mmWXO zYc4x*?7AO%*rBpAfzQOVz5=VMhO;iwc-AJ^ z88${NroocV4p5<*KnN)YmQ01*=Dw8qV!|YC^MfRQlF&vbJ zL26tKpN<&l*}MT_PT>?Od8151FmA1Ov%{K)l+hnSIIWSkSG56o}m)byMo%DlS~;gg<=x$4AV0alzV zW*o7bBTSlgjmgARC+@)?vvET?yIZH35olRq95jMU2#pxLzaB#{q;cn;;VcA?lH0gp z6=p;hvu@{qE5R~w7>UNT#^yf5l0l*$dqrHrT8^<$pIY;yH^WDYz`<@(DHiKEW3pmx zJSQNwYc2eIH{a?)#mq>O2l;0I#e!xjqx)KX)i(DO)wY)lE# z9BVy1I;^W9jc*11p3s#4`?UvW{Wr!`#FX;u?^QsoU$hg2y59J@Fnj)uS~nCtyTF^j zpSs@s{fB1#-;Gg(#;oP;&+ohX&5xgMo=P+U00nz^>YH79R{>BJfM=`#-Z3fHyU zi%XVP0)|g`^l zPvBq|=~Mpxye6%6zJD?*T7<2yy1VG0VTy5=8Sh9y(zvE_TCU@hqs0C@GIbc+#QxUZ z?bCS)epfp}S zWp%H{V~fd=MZxIBYF^judFG#~-5~lQzn-BrTCB@M+eFW{p6LRQy8-vKS%sW;J1!-F2EXpdB?yJ0-qG{g-RXm&!OI#ZinbYoh#RagZe=Nizl#O>jb}stDaW%{7ulPS`hIl zJWAowc6Gh_1TL5;k;qs7x;W9$C))_^8`8zZ_kG35^W1t%rZY6G|eC zW=$)KE|A4P@nebqi8mzvU#Dh?M>b_dc(Yl|Twlz(>BIT7TMO5XxS81@F3*al412du zE~3pG1&+^Fb9|P|M|11Ry7g^MZmj$Z3^Q6ulO&2^de}jp@|5XBXks12JYOX8v2;em6rU|5OR|e=(rlR2yMuV-cQw9mU^i#h;BR-cEpW23ZNI8NbY9LXf709v#pi z06y_fTUku~G0YsHyXPDt6$e#kE&1uHkL5(d1QkcAs+;t&B+1g0gzqwAKgqto7*IK zS>wpLHVhj!Ndf8@;?g;^)-5L7#P)<~M=qI6M}a@e zv~{$5*`|BAN7%e?mkNh8gTw)VpD~0x0f3&^mb{5L{B`*nnyk6mBf}_Z@ETm*89?39 zOC_GpPb48!#GxEc=+`hnCG?O89F-DhsF&F?ZfS1l_LPgd8z*I$PTACT75)BDdN7|# z#bueB3NG^m1v7k6S>eUnZm~{XcMW?FL=+p`hGl+QZf%##Wst!f{)UroovwzFQchcA z9m?zrsgv~HCa#CU)Ra1Z=vn4V5hVdCma-UBjR2LvA3)XWn&hBCO&66k7=abA(TAHG z!VCZeq^Kf83TgBVEo4wPmwsuK?S=_`n-2ZqZo5Mi4>}Ef;y(VsydB;(; z8r1^Bz&0B{l#@ZWN-$Ji6%ZH=L)7Re2$NM5Ls8Rz*reDSS^joX(_vs12VV3 zdy318XN95iFH9tov~X~?nUfh>@n>Q!AgJLi{Mmy+CcACe&I(}7ykKh*>C6^wWB!S zXwb8suwL}oJdtMnp_{ZMk_sjFObpI+$+h!m%AB^pwB#l|CR_kSO!$&_+ER4NECqodie* zXqXTo2~hEmI#7dGoA6Z}QYHyPGUV0a=Po$Sa<)R-lN7KdKrUkm4zSXhgWZ0Yd_d&{ z{@)=}Y;jeJ;Dgn;sTjKOl+5X*S2PBgqAyDFZGf-_2&-!HTw3zAL+ddeF|Pzhfx53% zb`?QMnSg`~T>a)*dF?$0eh;rsGxn@ybOs<%njTqOA^9~S$}?E2N;amDI9L#Ab`?G? z@+1;c7PP2A3nIyxwEV>W0*BVn0tePfp0&VXB&1NnAKMIo;YE-P=0WalSP*G&CSidC zViBPP&@kTZ_hN8Hd~7JxH4)CZ8H**-m& z?VPOSRT9Rn9l>CWJ$aRIxpgr|vRKQ)aut(Wd6gJ-!+Die5ubkG+gXN%s~1Zm6a=+PUJGlB?-lnebus)9>*39_sD2*8RY=kSA!UZe zJ*`wJrw~O*;_|BY0))gIFeF@GC6T`X-SOm0f5$TqZE`LTow`2!*v%ooxiwBWN+ zrZf~)u|%xV?qN{okfC+bJ3=MV0vR`4MZLok1DudT?mOI6M=Cby%quEN(tqTWV@%i< zWI!TtbR8cfPh<79;%4D_+4F3r=jyQ7>@PqCe#Yt!YmCb~8g$v@o+f!QuhnJ48<2qM zveO7=B_e}f$sBMTQb2?a%?x8_Ly4*gLyRC~0HMG_t`HfpC%`p)j+Hf-y=TyeX>JW^ z5lHi&)Tg1#Xb}m@Bp=4Mz_J_?L`TSYQKO)~KZ{PhfN2cy+xVY?UkpS`{W0|@(vzD~ zv2}Ku^#~l+DIyFrb!C#XGLl!8gk$K8OEm2!(WQY+Mw*K(@~q$-2!L8Wzq3eQ*ulsr~aq*e+dPY71=RI?Nm zM;IdN;Dm^^#i(CYgn#^mi5-R^VBC9{U~@=zD(cvWWK}2%LL_%3okILQlup4=U|bBR zQ}h!o76<7Ra?p>7-H(vh!3e>PL?TDS=@d0Q5W{-{&cS+Zm@c-yCd!SmIRKH;C9ot( zm#BqwiL_6vK3S?RQA(6lP*uwb(IwD{Izo!ONQwCh{CKxUy|)x9Q#8!$RVAvUOH#$F|esd?oB|+ z!KH!yU--|SFvbd;E*mi%%bEv4y3QCjZ)@Bum=K6;j#{v zsbwM|R3eiiFb7hRD@mF`rkspA-4pAW+>?mx=d-B-8x%YyCB(!cXRCDq*f-IsMfn7T zEG35RDrlZ_4RZ9oU?9J)%(g2G6l)g78-UUmyo2gsOo8 zpGo(fxQ4n}$0_XvPr{7mSKUmTpcrj`LS@KIRB z2-!`Jt#_LK?|w^7!6bA3tKk%JEHgBDl`X2Q-_%A*P|f90!~kiNyV>tr0(mQbCzHAU zO`l2gD4l}=VL57(uMiuH7A#?6uLg}b;~99P4kZLEU*k2lUqY{5#$jG z)PhG92{gm6xPe9XSzZ$YOaMyFB64LS$O@!AW=u6G4|mOJbhX#;M$NNN$#b=v+tq$o zh1asHOcdD4=vTFonU35boJ~fzPrKSghbd3M6xCj>dcnwSJK8H?U1ZjBNBNrpNE4?c zAgTl&wqp;7s&*7$a=+(5_yCg1O3(XEjVMKiXrmfp5Wi-&orZ?QTx>W+LpGYTU^=5# zLbIltrFrUIMY98zXcVwnRjgrcx1y4f;6^agE763OFLA?!L7;^MVd#9-Io!`A6LoHtL3jP@4^V8jb4F$ulv!6fgo6>O(0!Q<9`#vWnvQ!m z{6w9|KY*w)`;5_Uw=FU7gn)Slwhux}R}Ym!C!G@swTM_2JGczis(Ky!uj`h{XeaPAi>uTYe*nCngkR`X{5DIj{pXif>u znJ}j<8N+-;>0!0V12wi*=8j%brBzyGftWidzFND_1Na{L3LCS17oY!wyg?dv2fYvPx*i(ikZLIB;Kb409;TR2*u%mWpc`(R~gDe%V$aJdrmOp-bjwg419gK!XhY-%zqP?DN5NNVnvlG+|fQriQ7 zN&J`?8FE(K89n<@gY0sA8&|YJ!y!%h_M0h4v!5Ym;De_ z+7CfpaBP$#a@7z4bM$-%6b^$Nn7_AiW*O5fhVaqSPu;RU_DT# zzwVJ37Od8{9_+yiPf8=M;z?PKXYnLPM9GtqMSa`5S@L8R@Xv}>TU-c)BIiy(Kt-wv z-O0z%L_t4RZPb&U-BeUmVgfl6qy-{TLW7VKH$$wN#JCWvmadSx7IL-X-gdi-npL3g zT+;lHm85c_aa#<@Ib>&&*1cvpSn9$MkndxnLxuvMc93 zN+fh#jrm9itT*49FIcKs*Sx>0F0)9TmA!+jDXyLzTut*9*?KbhIAX7Vr;Z2%{n1R_ zwQgWG%91Xy1%_*`Eaz)iYUYZ0;C{_qts^W7JW{J;C=~(2GWl4!wBbVeH0%x$F0|oi zyMKWsFL!KhaEqO#gmakQvM^Lpv3|*6tKwql0=s3os4OqLakpm4O>wpCCfu|g70?kH zm@9DXjY(@oP1ozdHt9K)lX`K9l*P)j;{o0eE2b&1#LczkO;U21JPtRPmMnK=4eT(H zuVJhHD(m(U7_dYrDu21bfec%`F{fUjAKKz81_GN$jj-USNpZ)@;ln><&{PR73IPsNF zQtl7Z-+cR>H~dGH`;L>v^46O^tJ9OV1n^HeJ;nd7`tYe!HZ9P6%T4L-6V2mEKO??D z#*Ac{=7TWDaz?rz)8s$XXtEmYFc}V=a6lxp%TtIkx{zBO6{E~?=a)MU8RCXR9T8(M zYnR|w0zFKele>dl<)@r)J+O!{k&k*yjgaXuoSi4U2O5yqruoECYLZ? ztQbI{Tu9UF_TNCt=#2%Etr^J;_GaKsn17wf{5DdVo)D+L9xf}aeHr{&G))F&i1&u+h%i72GNs*J%8Lj9_@XrmE`H| zhz9C01)A>-hq-UPR*`m}y?whR)^H2?z9!uS*%NL%cp&?Fo0RVj`3}*%m0t;SUQxDB zUsS?zPY)d?+g&!!p(7eJJedrK8J``>(Jv7| zjnks73%awomXW!k%g>B{$OZ>4HVE@yCp>(0=Y2{33Zz$KJKJ>Kxc|4Fcw*1(5@gi7 zJ(&;Jwn&{>{i_i){YUpbcHpJ<-*4}|v;Vw74?kSoB#6HM!^NQkmwwkze)7L=`|94) zce+Cd4*t;(PyX8*{~Wz_)160}`E_*d6%rt0=u*W}+!_`*$T?;af-}l{<}jdh#iIbI zS>r0bOX*~>uXe8H{_EIwLD<}kjndfyB`J2RPwn(t|0v=r>8urNybPj_(;$G&3?$B6 zm{k{wg~lmAS}v&i2us6n6du<)qy;D=UAZ9$F-Qo=bl#if?AAUS)=!0W=ph;JH}=$( z$c^KGMET2_ZnMZQKIjV_zLS8^iA`RGd+JqQ-sP0ouobAe$@!ufdh@D+6eT*eOC1VI z=Ec;WNaiUl46`Bx&esTNA#SBrQ1n3qi~}q$*4oM|v#3F8AP}=HIoSCw77lE6xpO?R z`v*I(;+A9Bu62FrLG9LAF%}dz03I?D%Fs=DhL%!$2~5VQKy95QjQj8!nuiN zp`mu3rfs%sD{o24%8tc8#VrBSt#190toqJ&!lHp+f+?iOKG6>AP8iKHhSx(`d3!!? z=C3?YX9DlciBIZ2m5G4*iuSMl@PFF9obUCCbt4~iL!AJez4T}AZL`Im{l_;xbTI>6 zhugJVUcYzs(7QgWP+FZ^k=w&0kBd#>1^T09-$kc0oo`6ylH(?=89mYZa0Vg%A}(G6 zh&Jr!2%W~17XDDVg%IW`sz$Q8HpxNWzd} z7v7M|CaZnqf+Y_;zUh2Zutv_?;kH@OvyYC)Juq?7kh-|%b|kT6YSkg{jS3&Pv6KR+ zyoqv51!SdSX53~*XfMOB#u(+CaQ#K^f5YwL}VFBu%~7-Hs7?VfzE490Ji z1MSN;&>Xq&2q5uIc_za1J3d#(Gk_a(&t1c7a-M zxliQYjoI)MViq4?D)vh8mI!qFKus8hlp7#fnt6caewh-_5J5axqN*IAk+k8nF?AU@ zy+_~X_MD`>GmpQ6-?_QB7YFt?{_}gU(^86OHBzvlE)^xN0vL^E+p=<&<%+>t_Zcf^sUiZSbjx<_Ptli1!z3^r z^rf!;fVHCU2$&r(VYn%FiK2Hb<-X5b<@%~rQY3Y@1*K8d({3ss#KhC$-u|c_#iKf} z3OtX(8ff33Qi>25>yMsqMe{cNZ~gSY|7*hUENq44Ci080nO9s|%pI9Zfhiq(onn8v zrrU&sT|aE|tTmHHX2M#RJICXR&VSHIkspp0Bf3-bWAjq2hyX-Ic{X=_PR?3v3|HDp zX|K4nG>|w&44bXQDXW4w%@}l(n9YR4+@-4QI{7}kv4}a}p`WXf>LWDRAn>Vc$+xTN z!nV%oBtJ-F)P?V-WN_DF{75~IBf_3!g5*@}rtX#wRa(erSm;B4)>9kyb4&Io+h%tj zPT((mo?9?z9W047CR%6wvcX*`9@TDv*c%a75FhtK>Wk4OT*%0vBBeTl9x9Ud7N!z7 zuoT3e2=6&Vv;XpHOIAxc#|PDzAjXDRA56Nkb~Q9qyBj~d_NGQhIYM5FyDyQ}w`RA? zg{Fck;32ASDJ}~th*81@qE@fuEs64IycVn;L`*A)f|CzwT+H28YOWN)&~m#ZhPc1@ zaa)@@etj@w~D*`WA0_`5hcpTphZbOyIc$K6Kn&ZmXX z9mH_(s9W(1*a2%dR{&@ADqrs1RDs$V)qL1hRG@9!iN>)^OhSIHMQvFRs{|c|IQC5zJiZg zg6S^xbsWj`ZhqEl=K>7E%|oKASM0EO)2M^@u=RhCJ&_5Ch_9F!B3jrowE8N6i?Muy z0W~4}QZd0xO`Tvd=CDp4(`zCD+JhQVoAwBbai{8bbc;1$8mreFH$_2^b!^{Y7A&XK zW~Wjw#5Sm1aS(3v@k_rGpFm-fs_DVD!k9LE6>byb7E=cUR~w{>o6>66gjfp-Al5ou zCU_)Lfk@%Gv==tfu-RAJ$kYkAR~y>3Zk^a3kqEgWwh^$lHHA>CZY!K+vaVk4unQT@ zQXZjc#JVfm@?VaZTEd#gMtRWf(fM8>Qv^2zctq<{G=W-Sm9j4+QTF zB-d6gwucMyL*zCVw24d`AWzdG)HgqIk*x^);#cLM$XPt4%jcfe{xR#rgPw03l~ca> zN?VXSx74I}(rEb&eS8~a#DfjzYlQO-FGNv32a`0xVMk6|9PW7rGjSJIj`Xn&6`=%a zkit6rD9%|+-$Vl;8ivL(I_~~20QQ50V#JDj!mn;h;5YYw+AS(}uxI(?W1W}h zH-+oDL3jEO&}i~Yo)*?|;R?Q1dSI|Wm&S0wUEv;e3D6^6SOSq(X-G}YDnOI??b4=nOE&OVe7^!4JM-KadY~?oE zfk#S3ZUON*fpx~=tFbjkY5&U8JTv#UA{4m2NDOwu-d6Uu6>lM##bG$<_Mdb&xEq#E z<~}(QVwT5)*IZT($`)gJoUdF`_wg82(cCw!xKjGydzXHq*kfkPYi@(3_I!YG#vC78 zZK4{yW~Cb%xgLh~>~+QFRQ_`xVa0QYiCRg{rrQz*0Apz@dToq#E;av=6Z39Mm-(TU zH!E(7y95EvL`;lG8tLViXp~=FG-;L-J_~q>7Fy>>`Dx7=U1MvTEzEs!UpLAavq4LG zjlw^PuIlWAkjxg_%Hf&Y{Mj=xz)>*bA{|!eCBzX&q%`GWZ0d8Jk&u z>}pnOn5o(Eh zN8!u!BN$X0c7Qpj)-9u>6_$eZxnGb#^^zSuu77>IjQ zowT9aW`r=Yb3quaixd8Cy4ghmTo_tM`hS)nb)?ro0$^JA;5bmgI3qs(F`?x?uGf7W zcC$+D*nzpiyNd}bxc-}9Tl4uc z2qxG&j9Qo(JPM1b>4OZ=DTt0mifcn;4qPy`_dJvB((+`4O- z8}il;EE@;(QHH{#**zbiRPYT7XI$w-==C<@~-5NK=pjAmGPe`Y=2}WmOdLKsQ2IH#W(o#J(G*}I=9(+ zRaLji?x~4s<)y6mopAZJBwS9|S7n`g6;LNV|bx<<{+&620j6lkCm z5+D6yrmB287NQWVq4b*4*oPsR0wpC(lQ=@dI-F>BCc-`W6{++pHdxX3^_e)LE1}$4 zEH;~90TogR+VvqPs=^c}({NH1lRA4Q##h$J)}33acZB9iKP&xm6*;J%1D(5Uleda4 z7Ks1gZEoq4Ccs3p6c{!)v8Ue+cWKVnK>bwgm=m)ZwPJ!Pl6H!lK8QoGdyY9WSd)mf zU{FeAJgy(p{;<2-ZstE>NV|JGkw_~uWMEi0^6a1}IaD%r`|*e?z*cN^X04VB|}}Sx{X6uWk<^|1J&Im-WIH&@TsdCLFm%AUSIhEC6X4jOlUAy z4${W2cQ0e89?rC{XyBu`3u_~Sj9+#ow=kNIvW*{EcLW1xWsEg68&BM@)qEmmsMr@w zF$A=QB?qitFj1p|RD6?(M;-&}aB`aaXwxG_rGG!1kl&;S?8b5a2dyLL)O6|;`A+1} zDip&9(1;u)EFiR58<&>fHoYJi;a%{-5D#osYyL?ZkCHNKLm@!V8b%;z-e;a2RM@PG zjQ!_oc>=Z5WGdCHCcc~NJ6npe}q{#`F+r=Mf&H_d8| zqs5r6wJo(i3dcTocz~Oa7NoW|?*Vyz_eP%NssHd62@x;7$k5E^X(m)_NC z2Kvss331YU3j1;$8)vV2G1iMEv@Kt;7qtc9>K8E%22CZa-XQvM-li}I25$i4P#Yt9 zgRawAKx6lzOrX)inE&zD0@W)BV(Wfk7IOSwRz0|dH=BDwF8{&ybTx~xY+A(ULo=B!nY&gCplH)K2 z7xTDIS{gA$9wTQpKT0*q-)6Bpwvm{a$X-`2d=-J8h}Pn52~xIA6TSJax!y*uiJ3$v z{b4#x!x|b*6ly4PuUakh1qRV|{~vHB#Rz%_Z8<2;MZ7?QM;R0#yxJShq9jhuv?ODQ z5To27d#S5<69K4O+NtqnBB?gxIJiRJXL3-V&#Z-10XnhOgtryQ3VrlQG3W3dwym7; zUcEp=ZD;E+meKhgR($PJ`DM3t)F@9T0bijZblb`PXWw|ZgNL(j9rbE8OlTOLyFJ-S zlAu-JVWYi-FV@=Yyg@*XiGc(=LU#m_rWjQ1ZWJRk)>fMt#Y(*aHh-NJ<)!V(ZaO&x z+itZ%5>J3_y$gWjz6%xCS-nC9G1n4G5W$x%!6t+;iDELJp|^rvygNjwWz18Kujm~d zMm1G!ClTH)1*F%DTsLNljZ4<1;GO}DpbW8mgL5ZoY%`zVvL@&P2oz;x+=Rx2{7r6_Hz2Qf3M!TzT+{EM zbwpW=={#X{dbq%>)fzXwKyoLyCgpG}gnfW_TA)e6D~c&PBw5sw8$-oD!qKf3X-?{w z4IjD|<>Do#xR_-eb#+nWQa7reZ(r6if{fhFiuKD&#bp5}JC=&VRrHMLtH27W-C424 zGP$)MBTvB{uQ+FuBcPganhG}bWaF~qDDLMe%uT^fOT}golVOT&h2obkW3#PaK3U8z zfz=J}@?|0i>$nEbE?-8!ujK-=gfE+szTt|1LoghOSi|_eOf)gl2EY~> z04JH8*LU-T`L+sf3N+qKC|8(gX=xxpK=l3y<8j$Azz!xn0Z$-%1DIa|^PAla5eG2O z5CZdq(h^KI#>+e>WP)BcoVGO&j2~`9+4z{9@RT z@}=TREy@u2ufW&5 zYMIfcF}vOs?y_ZupAA?^i;WK1umSeb*qe2mmL(LqK!9!t>pD_*k;z8MhD&T57Mo~e zGba7TZs#&lxht2KkOkIWN_!W(LU%Xl?mAxH?kBqeFa5m@Z!*5kQ@~_TgnfInwrB0QVH0zdn^7i z2lmv~LEm!XAYYXOv8PpXgK21O_*KS_F({d4a}F@4Odnn$;~oVUas)@11>+?Yp-Yvv9`k@b)65-Y2kuh)0*!Ww<7a`jjI1;h zfO4{xZb}{(#Q=g2Mq-@-5_{lyN|4Ok`6Z+t83!PcL;X<{I>+o$bR5S?nT*Q$t^*e% zQe#@5EQs`ZJtDU+^qs?Hz^rv2|VbaLxkNH4mK2Y8qX zB}TxqDbyZwxJBIA!!w}+M5`59?vbBSe2D{J!Js<~G%Z8uSag9madVFH9=JQoM`}kD zK?`-Tf#ymntAEsriku?Qppojijo`w^H=^Oy(g4O$nlU>gG=wbW0~$uMW9Y3QalwFb z!l7b>6>%8i7`Bd6KG!MQTEUevt=VD>fy|t`Og3 zt7<`i{RqdD?O%IjnzG$9_eK0Fc|Q751&%f&Nk2O}A7eZ9FvC6cyz^1rh1e=bn8YI* zbg7S>^7*|J_pk*CJFIDiD4Ujr=b8?(p%Kz=5O@ir3J=^k>YO3^JS+4kLFd9Np zMn5BN@fG@cjK2N&6MxDV!T#_|kNpYpo)o4`4$C4|2SEkXZRWH^l5X1w90$N?rqt?Z zHv>1HUFGD_M=w~P&}8V@(RsD{E0OC)nx9INDxWnml(E+{GKn5Jm|fqYwip68wG+N= zKLWeB+T8_g;YM&P*?$UQ;p+M@5h=Tnpsuw@;YB{kT;&rcvME3xYJxgM$Ap4WhnXt- zzzaK^i-8!!U5aISoWf0D95jZNl{J6n6Jg09c#QVFebr{sAIde}_%H`%2`_<0#n=V5 zwVsbs8v!LK;l|2O+_LbIJ7I%{QY(#G*ao320%#3M0}l6J|4QuN@z=3`OJYl>1U9@e ziwFxs5=>)84wbOHm+-Q&A9T>|yGR08n47*D6+NwYAu zCdL@-uIq%41jh1fkFibZb4G;NZ$5_h6z73#X#eL%dkJ4en1u z*#dac_S|STKNhnowo9&v6LF+59$E>_VxQ(q=TU4-9tmK0#E?WJB}4RSTjXPsH6!!- zN)?0yWeSR`F8ZXAaai#l$w|e0>}B@v73cAgtylYRYR>|_$=Dvet1n<3o*%pnY=8me zOrc;qQB2HOZm$h$GQg?pt3aY&A#l{ZW(GvfYL{P40}zc>9Xv#+z`-g_cgNGH`J+|s z4lXW&JpPfSGhJvV5Mj?P7QgSWEZg%_G|2{p_4O@ z5nIX>%uehLhIV*ECluF1inaKTsV)!o!aIkEm(5e6b*$?@yrv78t#P$!)%V+>@f-Qz zj#Xbm7TQ64^&vxzSX04b1E6pMhG+s~?1`6^Ks02>3ZND(t zbSXxrxKt&6lJ3wLLQTC*=fitXvO4wyG_h}qA;0sQWO+~twj68hhnje(GgQCZC((L?4TLeV{kU6t=t)Ka5zu>=#d4-dJS|&oPuwJEyF_(NC$&~;COdTD?0Q_nASY){P1H1TASWsTQFPRJf{^>3#uN{c)_?cVR z9Qf_Mr?JLg@RD+*)q%+VvsL4jhd;ItK3II+8y_#KJaAJ#@|(X$jU%UuhP0h)JbX$> zf7n$X=GcEX(h~Ft-Nmhcgf-`d+ATqIwFA2@`^xy=eB(P_d0LR2I`BI`|E}NIz5LiK zS)P9CRE|3tHNR9xA18Ad5*dQOPi!6G#cFS~8P(!iQcG*KTE-5XsjnSu^T2F4>eM)8 z&oHDZ^DVL+Dq+(GrztwZ4q>+jU1eQhjuA0eVks#}#2@Q(=%J=xF)j=%z!u764V;apge!>MnwG{ram7lRehxAsAI z){|}h%dO|@38E?WZDs4X{z>(Oe(vaZY@79SXa91?`TB`YO8Ha)`RbkjAN3O~T;1>X zPQ$|P{^iwnd0qdKk4I5>PM(>DE6cvl;cCQ(m&P)~9$oUQ?@s(P{QYiFXFvXL!sTDv z<@b^Qf$xMRz(zC(7u*&(GdMe_e^g(rQyax{Xf*3hcv~_=;~qV@j4}*fi?iV$tX-8f z;aZk#KA6x>%7#AZ%NU=-w&?ZgVa&DEOxyjxH+B=!4qf@^+X`FvG>6SuCF)n-A1T<) zi^)L}Fw0a>ZZ7U6k#0dwiO@}2=I%g(0CsT1>4PY3sHrkwi(gow(Y zENZI2iiCy-1(`Xw7Ru`FJ}Z5eUG*fYpSgHp$ChF?!TNuHSK>eTf0Eg5t9^fqGhMw@ zSJ$I+uw$S63_c`i!uERl5?rQdA?w{HLV( zNBY)ksSql`NQ(`hF4N*l6i2vOJD4}{N<~E3=5P-wTo^J6v045cb|&7YbOtdJ&M;57 zp@?5q>2=`}TA(uqmkLofRxTS{w!$U5O;?GemfzlDcEZAoc*1G}FTDQ}zI6E5s+2TQ z3%MRvJ&rKxz4lcX^CRdtGx_@5wQnu(zHgQvxd#5l#rtWQUqU}sOe#e$_&qo)w}+0R z{0404#U=KEM5yzYQGaUGe=68lkJ-hqgp1#`i%;9d*ViT&!?jFtKN+zohiC&HNu6Ds zS~3TTrs)7h6ze32*ZDp6M#&ZQP15~YvLaohZ4-|gb_@$d)tjaVC62iSRA-pk3)PNUUZW|Qru$&pik7~A042fSX z9#phKc^B2NPYgrge~jD=EU6+=EG^a_5s;iwUIjVh3I$k2Ap%72W>}*MV~{o@a1BnP zU=dH)l7J8q`<9V&GpBR_5HF5$xkZ3t>SLfEnpGMPRg=;61uco@HNK+9tbz5(b~dne zQk`F5+Yh^WcZdbkw^n|UAmeokU(J%3T`ZxpjbBw30Quu6)Z((i-p*Hr45H=OHvnmKMAtu+5K@FgC@X3zzEcL%c!X?Ug0JN4M z_P3!R=t9kKZf7G@3ZGW2c3wtIh}|Eyde$;P2ShdVx~z8G3eL57;>;_T^BpuIU_-NA zzll{$bi;r6^$5<+jFKOk`Ic2hv>}jE$Wk&#fI}PPf*#vJLbY#X^RnR@S#C-32JvC# z#!*n;-m-$KoL&;V?0gcEfd7>>dK-%g#!YQ_xtr~JG5{3ZqN{x7)+%#7EO*mZC>lph ztlUye8Ca7&W{;Ho6qcdsJEQh(#G!hWp1YB$7!56b&V^Is$tK>lEpJ;(CaEJw1fG7qyp|Z=PNI)a%7%#e#qi^Iz z6bYUBaw51?d3lNbN{FY7nSH~2pB~9Uq9XPYURldlvTO-Sl5ahW18f}|jr}qlQ0dI% zM4~2!NTZFx*V(6g8(@R|csf6bE7ZjEDJN0LiFKmO2?Ac7qCT%Y5=Gz_FNp6C9 zE@+?5(O#Wgi7Gl(S+1ybZKp8hwu1uAXk~6Q{K$>XVX}V&hPW(%>IsmuQZgnGy2)MI zbyK1nlX(a@4&)<)2WEw7UmNTN{JCvIsOc4a2$OtMGSz4Y9o|*&t>QlpCTn1lF%8>= z+}u176L?6sP*5pcj7$zY(Upsa!DD8FfYy4&ge}7hqi7S|XQoB7bhdg88wn1OaYUWS z(9#4`ttJf!e~ZbK@Jk4Wgx_^NUQ|LDEH`132Mk61V}GDcgQ2Qih)(Adv2#QWgPfPt zwlqiy`M_dQSLRvZC8MsS-F1RUE#{X4?vCAR+Fia|U{FII zbG1czu#pT|AaaE|CMfKI?(h<&^^E(Ux(mMtaT;VQvSDXuhG)fJ<6=Ay@cUcz* zFJfqdHmy<|a9Zr9hpx(glo`*gag`g#r$Ap+Ex`;r2bN$uL5UX!j)4MXWg7f9ucTb0 zSEgK`h?r;5e9QA2lE|N3(B(L~e6>mBw6I&1>=4Vz&0;b6!0bd@w6rY=Lap9>Q-#Eh zs?90RP!ELG$FvbY)Ic}TUdoFYk*MTxiTjFph{(SA8Dvn)_y%YdlG~su0aTe5yf6jX zd8PCyH5@G(@D6{lF1uXGpANOda=r4~wRz;4fUQrJn{p*nnOgHPKw;WYt`Q2hgNuv3 zF8*Evgx0PuCdo(3Mv*WAR)tx*fF{b7@T&}ntnx@~zuY+oyC zL11-|2^^b6MP1SltT*wE$ZBE;f@?+%M>q7#GQxy&ZH#Ms=L+R);DQ;UK8%OVtrAo| zr0saD=56L&dH2j6VgM`UXcYj>2dhc*#Mp816A-{Y1Q~?w)Te@oS(zSW;!68;a=3xi zo>brd!SFo-cOo*=SKAV4Oh*CVpm$gs*i8h5>v)t(Ka`m-O3Vb8WFj0a=_bl2!_}0d zuaXDh60wNg3QZ^MRV;JSwSYQSqdZrUbT(YqNqgkFu0%0CZ;|ZCb*mtpj0wgb!OB}i z){?u5Z9t?J8(<^PNcd4E7}w+WY}%g9+OtWhPa-qVNNlzedT-jEVK!nUsh2ub+$=78 zhu&_Ys}RZ3xWHpmd#AE#ghpfq>f4?L1j@w;Wyi=NDmzvJDv$$MItxJPOigB8_Q19( zM?#fY9vb9UC8lj)X}%_*DhW?pmD8?Y<+z=xN;Y=1Dg~>y)kdSUmLWUtrbuQDuLr=a zj!AkQfLQ}ZLTyuEjI*YqbV}xuWSHz<)VWyGzi4qWp$iyRZbnOpk>PpfYq9?Ve<2it zT~Sv&DaHITjuJoRBY_>pSxw0^! zF#2$GZ1fSN`PhGp{qOPjKP*!Dbc{$QRLNk_A0nn9xx9mKC+9>R6%4^`5P%vRHLVLr zgvrXR%`-geT6G}bLcp;XJE4v~@Cs(pGP{I_ybJAs%c_zLn{q)zN%hIFs%X;-x*ayc zkn;nQDchGe$WV0;;AC=?nppN{h&Z_M{hwWU&&1MCsjs6-h6-Y))E*&qnk){*>CYltkl8L2OF#8C1!t483UPrnLkMPy#Z~1> z4bA4)YU#*{jIEGqogVP1XWQ;po^AXnER0A0^k2m&vWQp|(L=(tq>9N9BFI{d5x@QQ zy~~ev7UNu!131P`4&9SOZy6*gDxs6^9L>o)G#63{0z|50{qv7_W2yx&P8dL)B5Pj@ zsezVjw?_FglOF=js2nZz;nf8a2qpX_3>y-L?2Sw|R^F!31pF}o=FLyn5@fo^H@Ah_ z7_^#ZD{8dOQWXF*Y@6oP+9Hk94xJ1M_7kG7XqQ2CRLcZUEcmX_FEu~}MVeZHs$>}o zUJGWzF$|wP9;&@IRJ&=q=c}Dm7HW?UA(v>R2jn$FO$k4O4ogXBm9PrCw76%;HC)DZ{mV%!*oQ6^wn%b7(OuN3#tA5$XDtKjLHmwF>3SQ#roPQ!$^Nf zRS8jOCG?r}BzdlH>6m|R);l7b&8;QT*(PLYix28RP@MUMrMnrkX=r0onViyKw&|ro z#V)K58&qr#&4c&J*(qNv7ZsK|BW%O+@;dqw4u`}b{n;Qcbs8vZYTm4%imOSzT5 z#gv7nE=>9j79ZXvq1Yp9Osc4UH(7`sVraU6a+WpM45p?Ax{Z9CRW7_bt}kTP{$5oecIsU%2Zm;1ck%3b<6j zrCKnKUNPW!iL(K4w9tn}w%b2o&4W&`W`0#SzpZ3HI;vij_Jc)`~Pn4R0%<=1~8?{;p_QKA0xpNz_QK&0<+J-Ls2IN(q3BY*OY$(8`7hLeO! z0zJ?R@+RUG8Ke7RIDN-B61yw0%BEYCB4tdjA>BD@oZRPdxS8n`nKhO90oyy=R?BLW z9xj)A37@K;eyDzZRaEsu^_4-S3#&gGs>7nyBYsW8@TE_oKU~r@LpSH5!dZ8VOau8bC;+ z4?Zje$Vdf32$^8V`LNe9m?XAwdPWEdiTGIq8Zb#nj5o7l{Dcs&2N}o2A$w&)vPu9W zve+gu#kuijHlm{Od%?~#oNo7m0xrX)Ip#K#v#>$&7vNHWBv zK{3_pCu7kc-`_+Le1Lf~YlT>;8YU$Cg7C*&SweUSyJQcB>EWfjw#OR$xa^uT@ zRG(r($ivE-Hn7}H=SWV-*n(9_+CY9U#u85fymR&e>7Nz-2>y@sba3(294pl&CPm(pbb!E9! zUsh717T(+VEh@v%KCKmaPV#@ ztd3%D&&CA}I|N;TlxPGW6KU#bOWB`}6^@k!$}ovYks+?)3U$?C{GF69lR? z8UAM`qYnR@U*%j&vsMdi2}?pI>sLk9B!Aq>@7_vNiwF!eGO8U^Q}!#NVUvRl)WRu1 z6&qw66LNx91OZF13utQ}LIk|VkEJ6FZoydRDDZ#<7io+EUTB!YKz3;>Ozad~6I2z% zi+M{)yr{C=4vEnKYFCWMBrg>evC0ldG)twI6o;jLYdH4?XA@ZnIM;Dsqf=<3T z*gDl3Ckg-^3DvdwfsbjcA5LhTQqF3TOnJ6WYc&mgsO!`;Ah#_vv)f~Bk*zPZ#elXR z3dC;UQ)&zHV07ppeltEGj^!3z@1J6W#RYHa(vBh9O(+aHeZekvA*}pwo=9aChC1jK z&W(@gP1@Pv=j*&5Eb^GzZGQwKyj$~_ohD6bSTbl{^Q<&FKizD5%q~+c?7W9`;`%Lm z)h*;#WKvKwyVyymU3ed22+0tozSxET6raof*i$KTVUN*lS=x-~rv`C{EJC;$n%TLBKzJ2KuWl zn)$$P#_;9g^V6tCoYe4yV^FQX^}yDL8m9?Omq1X=8JPg5(@WJ~mXJ)Rly`%!mjH@n zz=i-a~+HJRg_*taWbf#T@~7LSyzQ_02(-RwFcJ|f&lAfiYp9e z_*mD!7c=1zhZ;Z?#ayaXHXvzd9?zXMs!+&OMOnZ$zT%>XN#(B7o)E; zUo$w0cJGL$%grj4OJIZ=m`yRX7G6Mx3s<7;{E1qurA5 zd^B<#vPS)4F$9h5q9sP?d^AWH6pDMj*rqLPqEs(Q1 zxWTZi;DR1F9Nk!7iN#!+g)T)(t1#ZXpV7KP@;;fS|ZmGT^Z^Ow`nP3#!Iu_I#xGxdV9T%m^i%z#PyPIplLxk3X~)BT zisRvwh5}q_cUzv{aOdZ~`|?9i9N6;oXCHmy9VBiw;z?(x{6*pU+3~~gqc^%*O^y)y;0Ji3X>{39fJak^v0d!3O_MmJwjU2& zGMN>g__QB`L@>$i@yC|!LI^(mgQU4CwWA_wRSSWK{$dj3!T4I=AIKuL+Wu|X^X}hB z$G-VKJsB5w)gv!g>RHc9@g#N&)@#)6Hh*;+y8yR%Rjzk&EIl6sTSV4 z%a0{H>T9a^ra`NZush6n;DY7_8%hja^DrcahIi>6A`!(6+QcjNhfBhc0L357wHs2x zodtIZ6utPcAWhbxah9E0Z$g^#og@rA?kgHL4W0T}B0&!dxe{4yUe(Uzd8X!2B^w=H zYz(Jw*@8%pjkyAgvBZA-U;<4vo#{Pr*s=tRThQ98bP80#8K^={c4;I%xn820(fjs0 z(*@@0t=ww_Hm&KO!u3ZB#a@|!i2iSOUj`9d?rB9tJ(24iZ6s<^-eRj8xP#6nkJd5Y zH2--ud0Vg^I18!9`W<(sey!_i9lcMR5cTg!SliLa$a7-X{c&(su1l+J&dX@%!^0)F zv4CN(*3|u!*LsM+IEZ`}j}Iw=xP6}6TDbitw~FJ#+i!8(7jEwu(z?aoj&ZBVJS4c2 zTNiG}xg83(&#aXrfF*dGTZKF#?b9SUFWgQo&vIP?TjALKwk^CqM0FC*fz`Lb(HDk`XI#a}j!#4Xc zQN=5C7S1Z_T<+uy9m0&K(C|&o8BWh_8`>W|nD{UAx7ys$r}C#Ydiv*Dyma4kLR}Fs zceDP%c? z|Epbf+6$r!A`=JZ(r}F0G+Zv=kcL``_jR+;kjzuyoJom3<|P7ygCXMcJpGT!w42C_ zSxKHh?7b4}Bt84!F@h3S$ju{SBa?NAc+X37oy8v=pFc@8ydgXhDhNf=;|=Up+?F3F zi#c!b=F=l4S2Prah*CuzNQEo~?ZbKcunrq;{=romz4~Z=#2fW-gP13&w`WTSWsFB$ zBn{9GDqV+GTSRx0z_JwMd`^})!(&1XrLwm`?GlrRDEh5M92cN>xVH+tLSIISatp*CLP-{H&${qUl$2P~gJNGGM-q5~I3c{#G}5rJcsT13 zW>V#M?H*xaQ*};mYR!y2sbJ78k`v4#sq1i)(S3J#Pt&n>?iDXY%}=M;16`vB3g8QC zXFc@U16`vBJoNd((aUW~}UirI`)nX6+!^Fkv&v?qv<%IqHwSIn1o`VX8sN zoEfC0Eo`F>`nrAZsGr;jzWuyu*O?9`Euux)U?*N9#H|Abh}}nL_UVzB-lZy~n2)aj zD7NhC-Sh!g-))@mhN(vOUv4Twx-9v*@?8BS*p9rpiOzN*J&zPk?+KWx3pqqrBhMs$ zodLwSGZ`xS;q03i)`$nY|V-lz(n@3&LYEAxG zOD?{{H}u^=%8Q`e#rA}UV1P3wSK8C8e~s$%QfK9=P_d2^3b~|55L~I&B}h7IUl%Dj zmF8sbXfYred>v?1ByXq*NJKoKwbT}WKPL6IT9a&VAc3BXO!x;;0t3F!^6Ipw(S^@tgJp?wCc)iJg^` z)V=z4@J+3b)l<4xiI%dG^5btZav>3#K8z&0{K32!rtYK5t?wBVDHvmdWML>(Pbkf$ zYQO1lk1p5rATTJ`dSwmY*D^m$ZZhxqauTFon z{FbDyn=_lg*(u}9Y;sp*5k5y2nb53N){uaafW<=S2O7J~eF#sf>1m@q9nYV>Z8FuTlemlpBCstM6}UI~*6IR(MoAZF`Xyb6ok__M+*lO^3ga}g z?yZm-O9OF9SmkbQ*7Fry3NanSK+O8|;PVmox|?7an4k2(Y%gH~dTJ$Cz^|6|>*IfM zYcTIAxgMI*v2?&WeI<{nKv82az4{)a=TpTGu+-bmKDi#Wp{hxae7ziK7o-Ye&X-#t zO_wqwoY(@=gLzG1Z>!b!L2V5B3_e7V5)E*iYj5)DF4#i4L+fZi7470r)Qk9QY5Y0* zq7eNdg=L@!GkL{+bie)W$|E6WZ5^E7*I!mW?<<(GxmdycZO+Qv;a}bV^#mOMn`f2ze@G^7*$|{|bYS zuUINqd>m7#1U98@z09ndR8=S1fD5E@u|Pg{a!ZTXl>@ zIz$mfT@|0N5It14(Ztr?jpF?=H*UvQ!BGoPVWQd5oC zw*uej^#Y$|MGX&pw#{gUMU05rGulRGm7vr@9&ZPb3t8F{0}h97)*l@HfwB_4qLhzl zD(wvo)0`R6f|RzMj0--A0<5Xd^^DLv@KB2d$i-p-b`3%t6x+cc>KSCx;@4jHI7-OUB-P!!`ENvw$L1YVbI*?ZQfK}jL7>KR^KYq+S&7r&b+_qF( zaSJxM;C!ko8u|27l5ix7S$MY*8j<~hb>V({m<6mIl@aQS)O6Y$S}Ye45#3!P#@Si4 zrx>2tQ7uRH{p>PMs<$sruR^_R9CNb9zDd@ui%@>V4abr%VQdr!v-326y6kjaSnRP; zH_>Kyce*11toW@wWN#XA^Ej@ir4AX%2D8P~6*6V4v0B;ismBKdAM1vWssVP6i{xk5 zF4yNfw(rVtn7C|r151LEA%YDyGCF2Gs9#KJR*))ZW8J(xnVV7JQdOu9D7Z$GWj5)j zKWA*SeOuNEM8v@y$$onJ_U+TRKQn#1g_L-!uTNglDj)mB9a?!~jXS1i6c|&wq91#K zFrH$5ojmrhPbQRX0Wqm`Wnwt4WOz2*spkxxr+i-S;Xz7}alJermm+mJb#tJTMHF29i%tXxSXv9 zji!5(@Usp4a6%$wZj*vFW4-wf7okCDoJmy0Oi>kqJh7P1Eb$vIW$&3=kPWO)UNk*L zKzWlLpmbp9bnAlbGfv%-m!}yCnn*!k9^+t9D8ZiJ`pN!$>1_)Qs#(}LI z^|ReJgLC`}J6{(wH$+f*+4Mt_Bi(iuYn(ZRlmU69+Xi=Nh>`}5CYM45rj4*KbF!yJX9pNMy? z#Ayfpy&+KT1t5<@YgGJOgbT?QFNvXZk~~lYSZ!N&_F#4)50`JvRt+{B1}#MhSS04u znMDobL3ZPQ4#Y%k>ZDPpOM?@7aGiToGeAk1hQe%#+tzF_rp#0FbWEb^H|-DzIly3u z1`PL?&W@r+=x5;(OzNbvkw$;I87TTWn!yCf{)P?3)2RRs%i6hJQbWC<=-Ae$SP0658CPTjzUGmahLP<0nNr^Cyax(n!$ zvj-c?-3Irwx;aBQN1ov@Eo&NJAr31*YA zUscK006Qv0nqf*sQRYQ3OVnX~O|JX4W|ctzTZ!LMqaO)R{Ui|+5?9Adm9x-KG2ty| z%=f#D2B9hqv&B+q;tb)#rnA?|;m!=LFizT>mD{~z=BH|7NnYO>d3_aBnoC+a7T3>^ zn)>_1(o{UnZ&bCyq94zInAXE+)W|D^ICP3{(frx?749?-xB)Z6=+*mml4+rFr5$M6 z_$li9CV2dJ?yR$tGCm5BGW_0}ysE1jyIpFUG@Z&P=Q2!`ql8ke}A zc4s)t>|}z=JgS zT30_SSz$ftAL98J_3Xm)B+tL3=YjBi56{1>=X!V^=lQ*P|3`WsHQq{glGjTtGk}cCSXf-C1$N#2lt}U{_wPg) zjEu9~va=v|*~IGZA}v2xxOW-h*17wIJk<)NI%KK5J2$7P&2CM8x5=%}?=E)l$?x9m zuF3DtaaZSe8{NC}F|kYqK2td#nxt))SnF2PwoC19jeDntaXz`7J9Bb7clP8ao0g_F zv43~&DW^6~Y(1LT3^&VUCmgSdwnW|T{q9%z`nD zbx7auZw-TGHVoJ{9)Y z=q{Yu!FPrZUhSMwCP-_98#|h97MpNe>^fqDi6Zxz}Sx zuhA!BY;dE#un1Gh)1{q~vCUN${mMd#Sx^Ns5h5K`DXYXJibxQ#(^D~hwRHn|!1d^% z%(Mi0pgL;{lC|W_?Htj`91KfN_iS%CR=0Kvuv>__wT9yq7I9^mtg#%bekx9ioMoUv z5R}W(rFt#tyq1 z)D&&8j%P*L^2f(k8xy_J80sg?Ep=gH#MYZM`UB&Dl<)?di%n7p$z8pS!H0e z)gQ99jxp%i4hFNcMhN}FD!$xUlqfDmf_SZkmb||G!OzE%)nMO)w%w?)M4ym}*d^XB z;WSFnB8N5Qo;-R?c_ee$e3n`4a39GU)3=%3DpUpHo_$`Z@ef5}M{q~& zQ5;c(aq|gxTI5U4#DRca%dxqZFF^OrfLcRUQTKh@MMWu)QF;rv^eyZu(d85 z5|*i`fq^dF48#kY^c>(?I}n{m8wki+Y@A_KW}u^#Ao>RDGg`qPN&#z0U#`tRL*Rqj z7WjR_08KiF2*65Ay_)5nGYkITI>Ksp_M}_9ChRE$WP>(4YGda4HGdM#V9>9skVC z9!J0g_eE^nbQ9RX{*Kx~$XH0*bazHT%bC+X+8@wD$r*v_z-E8wT3SA1G0qg>wd0Vkr?ka8Mp8{@@U>DUhK; zXQY^k=mvOp0ndvRkwV8v3YA*Z(ctaa^ZP_TiyX7$Qh@0jnbA%9g0!s_AeCVP=`^w6rkS@;%lbZOgDz?jOWBA84pXHnOyq%BLZE0g zU4c?q5bGWb{ASe6Ed}ZRZRse#aGo;T2DNEc$ zDAu8IK-e$x0LgBN=_(;>)Ha;mBb5%^xS_@vBcStJBOAu#`ltDngGs_x;g!olk|K@d z3~c_$_1V%Sh-nplad=2JQ=(2&&nv`v0@pKnaz{+KqL3n085#8O08cWI;%5Ck zOC+9AlI#>g#}1`lI!JR)Qz-&edb)k3XP8%PX6pa%)=G!&}qH`oJ@y4h2gU25Is7B2g~q~2hAKwt71STE{J~IY=cNi!I_9nNBW?0$D{%?a9c^ zyWXcag+U_74bg&Wuk^DDNVAO79`;%SO?!9?=#M_($bblK4@ylTl|o5-+9(TLEn@A} zLZcI-27wkZx0q;0w3I)?nUV`UqgN}=vo?fm79fWh+%laF-ULWyoR74{Q((b=h$p1Y zkvS9u#u)`QP~pf`ddb8;0voU5*CS}u=gi?qv?|qJXwdt6z7YGr|9tFkFG!PxvcFfE zu{5jwMU$keM)xcy80wKc3jrQMSeXf-N_ry@!V@*3W)BgXEH9n%dw_Z(C8V}KO?6PBHAFQ%tfl&i>)wJU-V!}L)^9HlU z)2SEFNG;b@A|K#xwoAKSdt@$?0h5#eSf%jG;qv%f)__j5t?0FIk$&;ag(6`xfJXk{ z1?IXkPj1$FPxv$a!D94Y++?%8wYtJPimdyd(3d@O+gi9fg7)B$x|a6Tzi14VXq`%< zBAHD>RkI3*6f~9cvuy8;ev%QK1RqJ9S>+j{oYU1ZOc;8s$7vSy(j#pz@R?Iw8NsvN zV}zn}u178+^B&1`WFxC~$IC&tY`@c)k`n(1xnlvq36^@+@o@9-DT3%)9^&%xfh;rz zdu?DsOL9EU7oE(qC^UembRG(TUd_gi7Sic_IPh=}vQKFn;{aG?`qiunu`j_$twV?hG58}Ot9Vt|V4wZV^G1a7R zWxBU-&-4oGR*TAg+DRp3<#`wsMVJG@WG`wNYkkH#BO(3M;`%^nLX+U72hp9>kr~jU zgtWYo$}B)vuKx|M`Bbj|xo#+JLYTqr3RgpT69(d5#;8SS?f~W151JAFGV(v zl@Qh5rZyy3tv2v6LW7GaX-<!P@#=q^p$=?_lwV2#TIUGh1&@=Mr z@2KyjAr|VgdPgbl#uLpY!Uc}hBoS&DFmfN}A=#!K@B)g;8LF`^EK5+PHBv9$o`(X& z>2FV?qXm0Ku#z0_N`y(czMdIiP!anhw-X zFvob|j;7@_irosmfl@;nOuK3ggGD1xZcL&{`&BX41@@~EB^XwkEhx*Z&} z2m#+L>;4>+5{(2L4lJ35Bhl6k9TLGMuOE04;33)yyE&zGgsdOyrl#jye-rZVA?h#E6heYr+HyPIps1Qnw>WRCletSOM;OBv%;gFkNmUz z*{Lc1oB7juHb)%GpWdXW)e2|>4@G7%sEwo3iDj6Wb+xD~-}RVOpNTCRODnmeu0!Z% zzPAY!2;kBZf|+_@R2hEI6IpUO5XKyT_qR&_E;$8`h;uD|*{w0UBUb zepCB-lO(q=2Z!Bjd1Mp+{SCSQ^wLquh+pp}%h$WF81$d1H|ysJTg+La^n8aVbjxZ8 z;tCCifMGvURyd^Wf-$!dN*8_ti|99CU22j#EZZt#r+qWS_D zIcsQD5E^A$wro8wfkoxPK3kP`0Y?cqh(%))YqtzuP_k`KW4hK>3d{uhMx$9y2^nD> z&#==>5gHXXHs$c6ORzn1sBe5xho;kZnj$(4@mpyReV~aWENG@x^Qld7^`M*|)*AKv4dZAG9l82C@5Su7h@gV#G|nCmytGm9`Gr6|8db z01gc%Cx$^!qwpe3%ssL1Q3Vwn`T{;Ra zj*!jLQCz~=o2yoZNNE3iVLz)JBf?#NkYc&E$tZ}{|mf*ia z0|R>4_9$7^c06({SHUC;ut-bQ5e6iEf()z--vXbyp6YV{1Ns!8sEK(ExR|_ap1gH$%)w{o2#l7)Y^)gMPJ zm0E_zMK8mC$Iuz-kJj@60m2Kz1wv^0keYrzBIEQ4$xk8_ z>(9u4l`0Cs-xCXlk)e<%_>E%LgEheYnt^LuCarej#xV=Cta$YT|HOshI=>>KMVuWZlt24)TFdGsfwM=6cs2(Ae`Q20N%q?nooSZ7+(5Y>F9aGS~t$v|_2FOne0v!vcoTKW0Uu7#?XkMV|cW zyhQGJr~LG$*`GWrz7HzYkP6akDU52G4EoX(_UbDkd?sQRN;Neg@hGLCPy#z@^n;x0hvJ0TP8M!Ts5)@KC0lO( z`d8j{;a~r+Hy_yYz57=E*5CfGcM%s#AGh4{zwoQ|hVhW^-w?y_IajSSDkQJlizyk+d`~dNquCTaNpWk#~@`38-;xH4iD2<0A z!STe*2veNx_+K7;H6@5>ULb+7694h1?)}GKRi|z6Z5JKe=e6Ah}|&SzSR!X28&H$7_NJ`KKR9Jz^unPvh6>ICa7oNr<5E z`Uxivq#h~f^%Fi$Li%l1!k2XvD^i4s90WpYiyZMRkwcP&nq}l=@(;I&I!G@;oywq= zkT*;sWG{pfX~1kluE*|-kxblzIIU3#(VA?AX4K~nolfZ0R0w2AMyU|53fAU8DOy5l zide+{UQdV;6{i4=)4^YvD)pcUu;_H0k3^&_nOSS7lA`p}p&H5aiV~}8imIk6VKJ{_ z?1Q0>Mh>#pm+b(vEQVTj04Ck$M2;${zdgl{nwKE9ZCJeN&WVu zK9pzO?uf%oEDS0{eQ)arq7AAuhib`|okNBldUSpVmK&K*i}MokUo_qd(nYZWpr(WmVS`}8 z!K}%{c!DELM~In%lEHLVA~N-}{!rI+*T-YmErGhL#hMZWmYV1J-jVM4K~#%_yk@^C z>P8Ihbrhv5Xz-F#=0%JaIb{wOh;{^ zRZvO`Qc&ds?g2<1k}(MnBqOC>@+u_bE030-5E7Kl9db_To=c|grXH^Tx(M+3AGh^y3!WXlQ3iLaMqCBYs` zg3WU#D1-zX=S)xv2{z1`pd1pMH)n!MNU(0s1htT0c+LdfA;F3{6Xa+c!l%lpqdXIB zyetye9rdLmaL6W=8$=ief1^#C7T_Y5-y^IQpB?l~U0O&m`9j8JC>+Z~k}^ao7Ihak zO}a^=C?{MZIK5k8oRI26lzAgx#=>4=Mxc6G6YES>61-DCDB|^r4`DCo+DW$Bzv2Z;n^@(vRX)XrIHbIY_4S8A=x%1>zg~7a7>CV`hnTZRhlf?q+sqs z?wC7SUr4r5$=uw@`a`k}N{0XFT$K)lWalZ_in)_54#^0|h3-bGXX}NWH-%o{fruT433L3D3`bndiduTML7Si09Io-s@J`qYDt z|BX-&`qMW;J$SFY5$d@?$zGp&a1MAQ)bjx)dwuG8uadn!^<1lDP|sYnxFisnF$4nh z&6Vu5kjyy3d2=U2L9P0XBW##ESr(ERM8+>xni1UUgaaYGta!r3|~9emPn@u|1vTEzY1x9 zhG0-GdgRi|H%PICgKcLtcRvs40AnI zi%)9n*pnx>mFEBd+SWPRSFJu%Oj7d-%{oCrK{QtxGBQ9fM7Njy*bhvD3YB1&HX7d?9s~|!o3Y1_xO?EV* zyda{CQ50_Ku@R5BLrQsB_uZGiIyR_756vG@$xx>4o|%Xv=I*}q@WqQSp2+5rNUNIK zUCLd~dRrgh8u%}=O((#MJk0?N`?K19H*ZEX1!6|I-u;TNgS#)gfz6r;vkYg{g5_2V z0 zuwv7CuqJbiY5qemNWJxjkVmJ#VdUkgJ0;>~qit4yW22{`T~%~Nk*}d=@(=xegkh@s zu~>&Y1q|dY*`+M+6Nckg7c1R4*SBs&DbOy(-R&NTbzJqu!r8oublOGXS(mViZf@r6`6?(5* zx&Ee78;Qyysg7lPV+D_*t$uf$$wG%G7eMMOF1Y(+xFWu}(Jl?c)E`Vxi?hA;`4Uc0 zlv=dfVBn!?E?4Y76XOs#y%<*_S@B1@6BLD2e=DO~Zd;}qa_M$XEJ!Spo_{4+o~T;( zY8L6Tm`UEX#ku_Dc!5Ge1{;+^-(le(4D*Sl@KT0|c0rb!b&txyJBN(_8gEA(q2U1l zvch9mi39)v3zby>TK=q9|08D3+<>l$9bW?5o@G(Yuo^Lc0ja29QYU8B#;DVSKQ3X`hH>ptcNpb0c2+bVib zlp$24lE^E*DUUk*4NpkR7mdD3*1mNpKA0h*^cmt*^OXXOhcXoix_T&mu{ zO<53GA$T#2w(%FR7xK=^U$WF;d z4BEtt1JdxC&bwHz)hj?EE- z(k$9)w=~N$kkMp59A{}>gk>i)ECh6* ziM2mChLXO5305f!I}S}~osJ@v>!|;5T`teu?oqHVt_8w8ad{|4|BB?`kILFN$zkXI z6VC~d$+THtv^YRCY4bW`pvE3#f-xnVTmMwVu$T9^?#5%N4v|jtP~2$f)eQt}$k_5B z<`_JyhUu4DtIt=tRc`p2!N#y#$sK>(uWb2Rfq-$wlTa z!Qb$4wQ&Y7Ag^aWN{~=uMi&BI-0bi9Af)85=NQt=iv$Er?4(csuEQMWyU5`mEi^SN zbos}*q4X|)h(qX+0~J5?nM)=f%PomhnJxr#1=;~1AYq!i4pb%xhocl8yecQ_XhEe#z zM%K$a*byNd;7t&|j>6%1t!-P8wrx!^k2!>23kX3qW?G&=E($zd!Ze?ms9B@$pwb$< zMRwr6qE|#(cfA_wD%96@WL6%;jK>FSk;Q<`E&k`!#9r5dQQh?tR-u(?NPbp zmU+A!BmSV=Ow2u&<^u-|Q&_Xlpbai$Oemp4nL=Mc9`K7iam{^gtDL2&2&5qX^YNT2 zW&L)F%N?UiUY0N<7~USryFJCJuHqii4)SR_0}wknd!LjT{<{s+wL*}=@tE}Kz$nE6|qn98EVJ`Qu(LGa*L z*{YDEiUM!;f3^^b9+6&Z4LcN(w|9y0%Xt(`f05aSGh>mFH1FI76W8SZPt5uJFn=fy zcYa++Fjn8nyY>+LAO(dHh@wqdSv3(X^mMVRQhin|Xo_=anD9@OlYwW&EsSm*xA!s6vZg7K8SVkL8#HGBY z^}h#I#G-7W3i=v#pr`^7sjb)@Kg@YSo1sC~!-Z&GJGmK$`4BjuBm}!;y9M?MdG3sv z8w209vqqKeg$|9r3b3raG}^pmYc3A0ygOSJp7&?N9}&|xUDohST~;w#OyDrnx`U}WAYaG;fOujMwSF z28t#J74{;pb5LrexUtGU8-=h&ArbCg6vfpW6;YHSy)Nk5?`Vzs01iS64$5kszp%s# z%L)%@x6b4#Yo3qjYobby^;6$w z{ArWQ)AL2`{-v+;Y&cm-IRZ%#~-{w-yYm)6G!tZNsC2od9`;(h$0}S z#>4?TQ>Ct38}6b@zIx}_*!XYZ)ibG_aBr4)N=JQys+(DksYw-yuWN52a~Y2jcslx} z$iH~l`k#8g!i2??y;$Rgd4kGMNbnp9r~pYZr0CXFa7CAV1t^aFW`IJ)=X1#9PP=8I z)C7u2f?-D0&>}P=;R0r*>x1n6bRAkl)7*E0kN8F&3{c4KE4cnlGAJwR3liJ`?`L5^ zw;8LZkfMn{E0QstOdOaw{K3ix7+5`W$=5(wo1j&#fy582#XwOqN@qz?lD<;11{>Z* zZQu_LRQN}}BV~E(qZRm(O+ZQnU@A{tQu6=Tx4{bgMR`wWFiiwVLWV9*6b3`^I4%aE zWdQLSQ8i8Z2Ik?5TL92)HAw3@bOl;|b7Q%mYvm>-i*RskufJ@s)fU4`zgW50_`OcmeFg#@GY>15KzrK99ho`mtMV(Ck( z9(eQ>Dx_4lU~8*rki4Z}LdmelFWMo--N7~N{iVm?e~Ty%X^Y{3O<@PpaG&32Y5}dV z-D1;KYlZC;MoqYml@MvPKuETJLSOz~0tX4`cxb1(M^ny2OjgG8@x-@j8(hWsD@KF^ z->0*^xKoI~mT*ogIC`7#SD2_-MC;_{Bf8=)M#IMz?Lbk=>W0-6?HNJ9<|Qho`8yNo9E(2R%`dbcC#!3cLBzCjl8qB&~8&ZJZfq6_-jE(@zzU*Fp%f zi>7im-ZH^;gLG0MydwK5vZZKd#37zRj?0ED0X38E;h6CGroZC*BHiH5#wtg)RC;L7 z4oSh_fTZI)HFtxHjdg;R?GX}};5B2E_0sj6nL!&E3E!{{AvDE~%i)PJf`W_S<=3;Q zDDSPG!$342xf`G-tI{-&A|JB?P!))h7zzZY`1YSB&|(3?*&!PYg0sd~z5_aweMHWi0v?CgogY7($z#C)8>awC*ncFI$BR!lqf8tVH`AVT#eBds#lVe89_ zJBO~hgRVgZfeHo{&e+bzFx_2CAy9V?L`(z_bq=nGGFP2Fff8tq8+NPqXKOk2gcm)s9a{+8ZcM7RRPrD?Q|@X(f-e4H8CdmBKa+g=&z`yz%|J zrs45-=JzvUV#YL<`Pu;8bxMHl6hK%rP6-f0u>^4mHJdIy@7&+3#9~;b3xom4#^7D&R$5>c##s|YuCj;KsKCJKx`}{K zX~R~#ReH6i{c05@Lo%%Ig*!1AuugL#w^De{VV@0+FlAlWt{x5E%ov7lc22H(U0cZ__xnN@iAWLz;tN9 z0w0K1)k49ppw<=?70$WB2+ImIxb$9u)h0f-3Mlb#0ykrdK2k;xR8|eh?7S)YzxlS7 zvocRGB}zbQ1BK+}%r*mN(9K{41jHnCpQh2kgDynT**dfOKz+rZ-rX3^XGU9TDvu4r zmoICq@?DLNAY};K=-$eR7P%JX(rE0Wtt9EOLx3R5f3K%`xaGGAX(+xq@TmmAaI{wuFh7N!^+`nva<%Wm2Sl#q^mniB&KI~(KUlJ zRM}?CqC$o(ShHbkWUe_mWkP|PrBTQ6!j*`7_T^`wP0}4=57u-T81A+yZ+JV z0mX5Ir{lMy25RRYX(1(X4XqigG6o4${Fy&b{B4gV{(p2?)CeW5g$x1!!BdBVv`5q> zV?SaVI>Js+Md@Z}+w%(@Jli@C1ffDAyqC^RPifC-j8yhM_$OHw&<2$pc0C}sE}_}q zSRdXWzBufO(3L>AtIaBLEdw-C;G%_M$iPAgYBUPu!e#4|jiIT)ccu)VL`md~5{-N4 zp-&tF-)rRx@L!I-n=dE{!#k{#w#eZcuyHvGV)&71xZ8XKT}#e0Oq8K481g9ETgPGJ zg}^aTMUacZ8!SJVVtFu*K_~=!Fpd$yF)W!l2BE~lgE)qCgEKe=B^^%##{kDAaR!)3 zn=_ooSm&*A28`h147SC86y_K>10*KSP!eZ24L-7?NGBX=1uyu%7fdC4u03(uE zfwWShsLc#{>vxopMhV8GrI{BAv#278ddEUEVU%&FD^Ag1m_?B>>E?rSx1hTa6N|Dm zaJ01^_l&@a0@OjI#PF#h7>re7_($0|Aa@Kb@9baUtodSnB6dRzyiS{3RAi7qZ%~j9 zOQIw)ial?2gm0cwTg6*&)dcg zkX*sQ0BvHH@&{7|Un|w`(IzsrdYjsK0}cSt601Yd2H(w%(E|Xdz^01?cHme42Eb7` zTCrIesM{>@Z&yX${$R(YQ2_%Ky~QTgw@Dr+DcBg74K3)>3h*fA zW?NxOEn}lb{K&?VA~Un%uZZ?qU;G5zNgV2n-NvC<{8uE>Q0}!h*tvNgjej@KVihcn+d`wD*`<~NC7|Si@ z0m&$56F%KzpN=KDF&#tflwKc@nqtb{wn!u=5VOkPfQ$@8<1BjN8^F|(3<(gZdB@nx z5f$|ND(FaFyz*Rm8J$P8KYiS9l^+gY`G&+-40DE+zLRDJNzsC&Sq~C_%f+4mTz*#mr1^ix9b_VFI5w!<)`+Bz=vYZY{>9ZT^P4ZunuMuO-aljEq-10 z$8O%i;+`d}Sao2f(71Vh=c5lEj9z4f6k>1iV2219IJ!K`LPpDj7t@juWEAdKbIVj@ z?sPfCn`N5N^5je{`Bx6kf;WzBx>{=t)^4v{ZycN#O!j7)Af7Oy*Kj^#APlQo^_>Lc zjk+6;nK(3iv5tM^`WB@DZhL`%wM@RCq(KqLf*w6I5Y#iJP0#&&d#N4fkk6#ayC*xIupFKy+!M1Nef8ZF`@tQv5nPLXF_y`WK;1M!I$L3uNwC^{cys=rJHJc4N(XP} z#MtS&+3eEcI#i4V;#HKa6*OYAy=s>{Y$X>+Fg&y5_L7xAe8;ahAr{gxbC1ySe0rTO z&!)cUckzM#8|3H~$%T?1TODc!6QbeQ2*K+Xqhe+bW_y^-D2ni3cf@<2RoaNZ)&@}E z1Qe-_@hPWxl!!OWABtks1&ohGT4b?&{UE=i*ku(d{sHymHIQn=v*q^1#|Tv zwjG{Jvf$eSwL9l^1`107YZ>azVDBN0rYl_6^ov+w?9EKy7+SCpQ7)_1&y^Z49GXz1 z?Y5W>TG<8CIvRhZC|rPGwqiiPZ)|YNI8aC)$lqAldreNW+YhWy9wlr#c@b*XCr6a` zVat2O^3o`dbY!Xv@feH=A6BA!1D_2Q1kumx72`YDdJF4^UFNKR(%xeACxm+#s7%G! zwoYY(havBNNo11wN`grq*%~PW5b-WDC zUl%4Xy>u-gUH*<<=k$QkBtrDzQ74q{%o%W?>vH{Ehebz`o`Y%^<|5Hd3kLN21)GOa zb7&$0R3p#4C#EUr26;m$f&56?R77<5nN+0i6%ko)86Y+?b74cmSm8uh9La*bo$ZP< zLl~3E{{LfP%pqNg1;SsszEHT)d?R_g9Fa^kB}U0qG=U~jo$#h5M+@V0OXnT6>Pm>-k@)djCmZeF8SgP4F zw6rBh?`)7*w5u+RPV7Qv0Zy!)y9?!@^>5vUEX${5X)R~0XMkVgLf{h}@OXHH&0%1J z!%57&Sv@G%*BCn)atS^u^e_-!E`xO0{N0#ziJqsh5+I3Jis^=7QU_qfD3(!2U|7N6 z$R=t$xI?E;VApeTLxHXtG@#h^;$X$-FsC>MA2Mn|PR+II?}ng@SrPM%E#(x&fU)J5 z1@&x^RJ=cnvm4P&+1-E?y;yLXjf!F5spCCvo@il zqtL$M8nXv0rWALMEDiFo%yS)LN?Ae2kP1bPyRy(043+uL$@Wf3r3g7<%R!(N#~nGG zW9?Ig1b9K_6jWCK__X+Rxz0Ow7T{o|O*};E*rK7O^~IexhU=lBocxXt2Qqy6L+pI{ zN@BV)f8;s5K{!1|boWkZg%WISaPthGdQv z1UO8_B7fb76&dhcu2VaBqu{}e1rEGcRSNV=WiCbSJ(^h-f2vP zXs93XOacIo8XX9C95QM%&(!ipkJyU_DRZeT@MO5W(Pf~B8xhcj-N_uEW%wFmWSav( zm4cRfxMQRYaM#0J$p%0rKvAUF`=O;*nO8;CA9y73 zck}mu+V*sP9N>Tl*yA(^z}c09q0tY+gfD0zo&zEhcxDJ49$obK5bvp`D{K`|Ry8S= zyr6Axs5FV}sk{Es205rJh3BABls88kkyZ^(wrEyyS)v=#&HPF`-I>>_?H6?9G5P~c z$UEQ6zf;T6mR0LtPO`496y$bGuXkwZvOH4Qv0)RwfM1&;wcb2F#0Zwcmnt>7ROWCP zVWIV)v zq7DP;Q-bVIy%}0z7CpW z&(j``Yr|4ZY2EeHHDiQ^uq%e+;^9${#%}#S{-KPZeKp-4-0i>(9?nud=YZ+FfRkWi zBb#=UodgytONeC;N7hf*EG}ZzAO_JUkdJ`Mtx|yn38~bj>WM0@RmYrB>U|EzvfgJS` zm?g&o9aBV`Tq415ti^>GD2~0X)!n4e>AchE9Atv(?H5M>G(-p5iVLAn{ZSAD8iCvp znU0+;TWuQ#bET$MxK^Eop#`lu^v8kKA5Kia{U06;k4M7e_w&cEhDV$F4A?L~(a~T_ z$~S&2B0+IFkF~*@xQO4~S!hp1a>?-_ zKD~0n{2{usth65OV4r@Lm;jEneLu~L>d#u#I^uT=k|h}%^Y9s>*Go)c)gm(!Bu3Ja z94Pjq>Naeza>5~zElqApY%5TQu>{{u3RM(b}ih~s~Nq1F|HaqISYl2@zCVj1l z=m46}F=_!CwLpaFW&&pk)T}_H5^W6C58h7=FEBX=RnH5{#r#&pz{3}%QEi5;jH4!n z@7~LFTI<$bb}X0JD5%+hvozH1Q<>=9Qgp-g-y*M*Bs8>`pn2WPI$G~>sLS7zyns&z zM=ZJJTUE|^+G-(RceD_O!x|@O1BP{lF&qXP1Xrd*S@iV!OZ)juuCjkSe2vs$OQGQvAtRW3G$srzlM=aGEa7*Z!x3$i0)0(o~vSqv$gf$fUS zSkci4$Hi9Hi}mLGPdn3C>2$l5qck2WRE!vfLTq&j9RV|Q3Tp9XWNG*^5(sUkGhlB`e{9H@35eJ;gDD5$!*veBkA)=r z78tGT2@Ja=8iqMDxR@t;M(fW@v=u;y*V222kM_(nek*nwmfyk%G-z#OWQV4th(KU( zfZ2=7l2N?8cOZv)$-&wt*6GKe(>=f2P(>;qwJ^~5eewR7@4+?k_<%eHeOJ@m$1lkj zP^2&lR@D-uDT#eIbc|?Lf<_||nKfAqrSybhluxk4&;|t$MVfH2mPl7}p;n~d)Z-Ru z()g0gB#ld@s8v${1z8jOsWDa?5gSANVC)!=Q}+7gXTem-u;e(;a)_L`9NVe1bSqsm zO^~VJX5nF1h$yF;T*D7E!_obx3&wX-NTT6$^DaMrPE#K~emc(*Pu3^bYG62NB)V9W z{aL;q`t>jkzWUiPNq#>>?`l1MZ}#JJvmZZWj}OIpq*ecSXEy5?5v^w$Fg*PuvN1%G zXd@<&db~#-U9QeZe9ipYqlRAJe|j_5)+qPWYq8;Kh&;WPbQKNHL<%g5)_U#fwRDki za(JzEt61gXwLWf_q$u|}g&iL@`gZo}f22BkD$NHx3_(3i3?ck1xYW?oaw%&qtbuF} z>R27*WD}?F9BH+Op2+WfsR)=`8okIS$=41P{E-753yV>ixXNf2q5;_cyB*CZE z|JFZ8mH=w4w!stEf8kA5ul#d$uak5TX0d?e4)lNUm$4-<4|+Xt{vV1KS8k{H zm(T7qz$}Fx&>l;-(*}$^Tj+M|H|TcSfT1YRL02ea*tvpMnzL$gwnth5&4@tqbw%qg zUsv%G*nk}?q(Kn8n{ePlp`akOH7+P9G&b?wqRYa8Ak}LyIOZf5`Bz_w?8pT zr_`H_Bb0FRB)TmXx53A+ej01i4nJ9fnEl~cvvyGG!iMDsm0NY;5xH*N4v>^@xek_L zLkI4!%n(wMzz-GRqJEJpuS)MJO%h5P)Q^bvV(@6$QUlZD?h7ou`f^!c!_Y5}RGMtYv}QifV*F1dj=g5s*57R9%S}t0x@--$IZYBGB@- zw9q1pb&fT1wA&ZZQ&!@W8yZN6vr*Y_LteGhEeJ?edrAVZpJ%JRV-*wws<@7)*&;M8 zp~G}6Y8xKRU}_h7^gZauLXn|rogxoSGB${`&<3Z!{mzgYT4liN5RrUwIMAjz*Pq`; zhY!$s3no9wq3H{VVNRzmd7tFY8<}#ZlP_@tpM2mG*}{8C+|C-kR|kVHX)KiR@?#y2 zvx_kdY2VbqLT6o{wxeWkqVLu7# zY#_kBh>lqZF)d=h(ST4)fouT`)m6d!QrCarfvRX4zAou#!JoqZfA|N9|C7%o{(Pwr zzEe)h1f_xV9}Aq{1RI2eqsucGu*7g4?i(`wk!b|%Gv2vbU9a;`M5i0vaxp*Y)5VNj|fw zYTe4@QOmYvZhWysv~H0ba#1rhbF=m-n##K3yP zAW6qkf(1Y+lZwe2EfY9siEdCG+83hk z;0gNZ;P@8!pi#Ju5jX@NV}F#7s9EcOV)3&6Ulj1iXb-4MY^OR(&`aYnn+e4V8$vz} z%}2@!oRaQJTRogmnZm3GZz;FdA8ZOc7c)k5JhYg}6755r!31E6Qz+ z`HXDl!A70Qhv0pYtQ>B>`JZb_L_ZPsYWDb7E|9_i(~RUfw06fXkirudTJw|Pwx8Q$ z>+S7A@}g2UH9D~*Sz{MX?Cm5lBFg|Mj7VVwgGcOv;-)+%qrAaHrL`Z5QVEVFrDN-|E**O`#3AkWkXFRac%sm`pT%Y#rRowo()sXizrV@twDz&5#C0 zaoVa!62e$Q9kc}QfWSf%u+Z2_Yitas2{{??6J@EEpK?Zr{jw{S^6a!@=uj`9bh=48 z6MnC-K=hO&)mP%vK>gqV=8$P{TIQHf36yP~4C(`&xXU@uKJg8ND>umb{qLV%*s#MiRHK70G5tDwgnfXJ;0-~_*2*AAVh$`A0TL1%pw#J?AMAw zsQ7Q6O#DCa7fzSG>%s73r^|jJ)d{h}1S6^dRZ4*i6QHF09-=9L^0dX{g;Zk;K7x{9 z61LFDv{8j;&K$harQuZvubLyFICfoH3ca&eIiCp2?NGR5i(a}JVE8sdJFFH&Cd-&t zYsc=k%Y=lbkpx_OkLJc0&~|w{v9d3MITnvXo$NW3&26T$rSoc-q3DmYyhN=M71n|d z0&%$UqxwLseoR70R@@}0+?uUU6_%JXU2Kv3gdw@}p7gSO zs+Toh;*~Raw8iGNqCjA4(;rLjmp~0Zu5?&!tQnN}&@2)}D z(ne(Vx;9}h*ogUjuZD+wfaS|rbQQ=BwxY`Eraav<&m~D=UqKqCaq&$P0tPq;iTd&Q zVsDA4B|t5hAImy|T8NAMpCJ5z1^B0ioJ(x-X2f!s7J4>@kF`W`IBAQO3Ch@otA?>8 zz1MYU-DTRL8Mp5p{A5=CQx<`VroNPQ1~R2sto``zJ^AX-tG2R0Y9{ zhd@AGD^II66vFu_`J!1Om5NYf^1ck)qg2|64Sl0vNol0P$u=}gzNA{Wb!gr8PrsM= z|Kq;I4{P0anT)DHtUo+C=m|RB6L8efV03J|&=r?gX;8PRnXTHx>a}{bGaQ+$)45fR zM3oK+FCezQ)&xW(82Czf5JQ2x)*uxwWn^Xqb4(bRP|{cMyZFZIlx{@svyya};3z;$44IT9%#jI6kef+TLCw1(m?ARq zJPlA&-fEmVOvPE@VOM$h)=QS&`Du>P!{IHw*I*5yhDpRL*+vuw3`Gob0J-ciTdN-* zd>h9){8yHi54yr$NP?*S+ELDLNlIV~O#uXZmD)R^<}tgDjfqL}3u1KD+|94;4iKc; zzOE3<_5-Z)p>MU2<^Ymy`30wYO|XRS!8@8|!tj9%Q~uIWi!YH-v0&djDm_Td>BpV} zHra|YmiS-)u9$qxnTPz|bW^5HBe7>IVhAm~7}RzXb}Q@mmp|34{MYE&zlp@0NBiVjl2)IvRm zw9sK;UvCJ&oypJ&mB@=NU<2x!K?^+S5Ex(DBP!LsU0cMWfy*J~3>@Za22R08!eJrD zAzRc=fx`+_76J|xlt}xOy7urU$04K`a0ufz9AaTOB@QdiMhwSM8RRAt)77k^Ld^eJ z#c1D_(oT1W;sJv-3e&i%?g49}1&shoI~jS{x0R58ZGyW_6C^`Q;-E$yT3h`=x}>^J z*x{q*yw-RVHMda6Ew#y*l058+Gsc@T@E+k2JXrV1{K9yP9hMBuEhG4;QK=4(wwg8G z5+v1|fG3Q%gd?2{Se${m;zrBazDDIP(RfS3c%$3EitMN}gi_g2#my}6a;f^`qMay6 z=*3+hBSxX*WlemqlroN4(dK^z6z0_w#mI zBSFzJU@J$V4Mm|1g;FqQp9G6TR{y`bd;jn{uj97Z@3q%nd+oK> zUK=%oSRcA1T^Co&<$OC|#dc)=53! ziy@q0FQ-)o&o^F7usF61zprx|j;TeS{}s;>Kt2ssUvu_S?y|$s{1mU# zFZ0hBn*3u2UFZt4YDfeQvE%#6l_8E z?;iG+-K>iRu9z<5VQok&guY444JPO4pjj8VJfTY59k9V9kR4!OnA5__!5=v;D=DQ> z4Dn`QEL+y9_ak5@s(jCY_}9Hzr6IqnG|8`wpQzsvAS9}5f43Ggf}2=@EwCoogGmdj z>!GKYs^e}D+$tMln}kW%KxKEPF2kGFI}30qCMVye+9l%u%ygK+SqXsPaLWHush3 zPgwbbR(MSua(6~xo@~j1C*%(&{#Y0B!F&d*AeT5F2~k+tt=38&@66-vJ79zFV9N4i zh$&-)VP&|QN{(Y;{=tl2lpjNH>GA@J*rMbCt!)Qlu{)dtQO=ne#Q)%~ZE zywDp5A?pw6(RMBs$qx>%y0@{|IGW1|or+07X6&Y-?}f^@tHZ6liSZ^nte30+){IPy zid6v@f@&Lbl5lHPwoP_MZ@nIe}-NC#<4S*BfykvwR>WGFTonK&_#DEvlvpGDnOzpKu6 zi$MfXESoaDvH)O56YT6vcZ5j6b=n{Xe00l$E+?94eQK|fQ6A{rmj99)4VE7s4|&sw z%hkg8cfl!2y!7&Ghl1Rqh8b78JuBRGZnMwDa-D;v$EFg zjd;aGSi~HYmWLo3pZUFaWs#H3il#DqDCu`@2xzbJ=@vW3Wt|ABS>$Ep*Zg3xmvri* zp9f^yci=u5L9KV2)y0}5Wmzs#QO0K_(qQFb!y(9$oQ)+5A7!l(0S1@=5uH+5-y9u8 zA^`)EXKV^L=^1og1&!o@VVG34g@ZryUf?!QtW{&sv|WIr0^9Rd3;-9`G3n5CTEmoI zC2H3oTa%ho{c5z_@OFXbVbd>(noI-);&U(0y2fP%-?e$KZGd$?$Gpba?nFV>=J{Z) zIKdZrXC375>v4itBO;snr|yu|>$zN?vKThZ#BD=Cz>92D7Hi9LArta=(EB$f4ED^r zpmSc>zm^%SBy$n2PnOuoOK6)R813K{ata|7`>KABGnLSxOWcI=oZVHRWj0IfF#H55 zA}^)&Ff2JT;QAZ`M*678*^C3yFJ+SMX|Z56Ci7P~p3TzW2K?(N_#eDWFYeARQl*ge zsXa+;f-dwVvnJ?*kwb(_bPjp|Ht5x^)?}7;KXgm1%NX?GAL!Es5|nUo4pkDhFV>kJ zVzW+5Pb3+YksameHsc<5lnD5(p*XGpoKhU*Zp#;VrHn@89* zhFNY5&7IfYiG0x4sKW&{io%)v8(84@U`lNop{qybrU8Ph*QC==+>-=WC!3|Kv#FQb z>Rg945p@XrZcSD8JCh+mTKTgw7}6>X!HGRhFn-x~#0Cbs32Y^kX#lvKwFtyOAG~gp zd8nsw?LHyaM&8j>LQ{hHnvQEe^h$%c_gQoMwz(}fo@*=G+&*}k#67_re>G{u(48H7M0@DCCP|6 z0rQ{}JQ)3{PK%E8&J(=|0y+WqXd)#PtxsRKO??3}tui6OOz?v#-3I6fK@jzbsX-QQ zw82Jc^~?FT#|!wPSD(??gMu=WKUo9m9DeAp=$zJK8^_HYj1YavmXrQiAR?rTEkgGWQFZOOqGtg@G+buai*RBCI3F>EWW?& zgMVnj&*|;hicFkVb6jKbN5VR`du=J4lj@6G3!HUrG7zv%=Q2?Svy&8aE~6uj$vO|J znKvAwgyd|b{zv4)Gm>1B)y4s{!?;~0eHI1u7-Wz@5;(rPeNJb}g4Fol07BzOd~Y(q zs$N*9bg@6PAkG5?QE(JpioKpWwNp-aBb0@YE_www-{=>gMZc8UnaBu%xdj;TAH+Sr!gE*()uH$F#Me!@zj*GMRH7vHr&N0!G<0j3yw#zV|9u5dh<2)AdFacZ+CZQx|C&q+ zv3*E;uOSE1F-MdWS27cD z4Uj*IPhjRzov?Yz=8fxrn&&R~if-71PUu7x274Y1fX5TRNwi>;!xs2-Z)b_=9Q>K8pF5NkVvMjAi1tX)hZq7Vf;{Oiz2B2-Ta#+!P0yoy|8u6{~EY73VL3s^8M7A_N(BnrQ& z7OoP8rKEOiiy!Fep(twQ5aDJK1j|LyLHv0pSl8SdF20R@C$coO1E#wbyT|s9Y*3i% z5EiwXuor4hKMF+ES*jUPwMl@eu$T@}ft<2Z$hd!5TsRaT-;;D4(A+`R0RrsXPBYAm zXu;PH0XBWQ6AsYM1=Z}Jf>X2m#=S+8ctTimRJ|O%k*Fl?6BGN9(%Zn_({ulZ2|47^ z##1@k6ICz`(B85P8!>(sL4f$F>F}ZLZ#KINcAh%q&-~8}Utku=SZvF_V*#z$k-s0OuLLqgG1$~1m67td6RnM& zH>Kz??!NJDdtW(k+paQa&xJB#%DdFi&JnYjc>i|fgCEc<4(!sP4X;Psf+&!8GYS_T zGV23_;6i~o{q3)PDP(PT)l%p$OdD5X%=S{MPY$Q zBqncNxb2rj1{xw}m1sKL2vg61*jb<4jS6cQZ=Ol1Koy;LOGA0Lyz=u*Ew2JV3G)xX zPvLM_PXE7mEEpcuh{wi$?`NT@@UR+}=2#Gg;Ru*V^{m2w zvFd|&W%$BDdDx9OVb%!xBhxf@=YNS)t)j;-ZPcB}qKl|17-1uCFe7hcH~>KPffe&@ zP-p^O-whOiM)pxzCvrEIu0*y}t*6OM9*0CUuJSk#k2JnFzj&wRVB!#==O1vFvyRD8 zd6oN>ppD=nvLV|5BA{10l7y83N_8 zUWH<$;PZ}=N+!jfhR02n=3aD9>jmM?+FR)YFklnCg#`c_t35X6YrxVrt&NKCgSM@9 zSsK`}5ftzVH~zxAE5Hy&2PrATMuuIC z4f`sqf>e|y8W!874*lWX8XSg>J9uWg_P+yu9m0){1+u*ecWThwo>K3$9I)vwNTDy| zN-zM%AzJLZBmglj9QbN)rG5+;s&^os*PZ{@b?QJazO{|1DCZwwi82qY%{6v%kOxK` zOUTe3Ya=k(A=55Dl(Jfa6mkhhJ%V(2La!2BpiQ8DWh{C>Nr$cqf6rABKhgU@tJ{Bt?+t`{t$tCg8_yAFCOAWYJX4`;YZ$WQtUS3*4$8^e zQWJ3eoST5Jw`u||lv89dl`e!|X{pP=4GD_u=sF-~?0l_qFTb5iMXJ(RBj8^|fnA!7 zsrkrV&#J)+t7R0Sd)^9Cw;E$>;R)Eg;W3(NKlVefwzaVQ92wuKbv0#ciDiVPodyxI z%!a96CLSu_cCP=q>LYAxY-^D|s13KqzF2MMNks9 ze$5eFaJbbSzQhbrA#|0564(wS&88uW0e*6%83jo_{SZ#-JOw}Q6;H83kVDZRtzYq_ z`SG8__O&+JkpSFY#x>-8%SAN$cP* zN>R_Q=sw3ULT5Y}ATJ5G718pFpK&JW6s?|Tri~z z84izHCG$N95>WF*IkBq~(RZlwa(6w*$0v#H>O$u@hG0aKl8|8;VzdRY{Kg0}+E9I_+ z-d^Q3zr;iV32gZ=I=cnd5;9`2N4s;km;>77Koy}e!|b>jNFDe|(bmuv zhlEAnIW`#{@g1_s)Hp$l`R7LCsV4l;<)vygpy6&*bC3ekYra|ly z$DcNw-X9a8&A$Ry2FqYc|J3$IUI|Pph~yq+KjuouK6ss?60o(LcWBb1vQjCLsadk}fd$!`LQ4C*j1> zs!|9NJg%VNAiN`6D8v~7uvB}|7eDod18JK0o7*DPAzsGrNaCGGbTs_Rv^Q%M$3y3d zrec&Q+|bm3OdLOTI6~h!>aIiMR{*@ikrJ-_>}v@em3>9`sp}H;EvA_K1Ark}m!aXs z#9hpD?u&71!^@XGZi&S$!PAXAwv%>Suert!9;`p7^CZvdq!~nL0j!S1GhSgSIPgT9 zRw4WpmAAKG$C+HDb-4*%_l@p~Ept21Eef|%DwS`BQ3tj`I&146 zs8Q9N;QMP7A)DY}7m@(Isc>Lu-4PfDd=yDs2OzTDxJ>_BAs%Rbu+4zl(-~^-r0b3jm-WlaMX^7%S>(H)zj- zS1t6x5NTdCsEUAKKKVrxwI{)Ca23WpN4Y^KpPNRUQkeqc#c78^rMO-IcHyWM9k;TQ zKy%^=EgLl8d^z_gfr$;+ZbB+gqRJm~Z3iMROM7Ezk(+tvsMk0%ljEPA}^#CENqF)kbw|1L&LgQ#ZCmx4fs|a+Y{OJxCX3JSL4(wl2*rh z+ddg-#X22divS>;6v;2T;sEMII!TK!$ouy9S-GTTAB<^vg6ysPbV!)UTE~ZeHoiZ- z6?>zhzwG|TCKh(v1fy;pYI*Uw>nFzDclsY!A$7Ls|E>M-MxqbwS4es`a9YmmD1`v5 zUP|A-ls=16*2cL0J~>_)`agb=+3VK9rtuGFEe+eUmP625v26ELCL-?VEG<;)QEoC~ zcoNOL*$LIz7i|3lu5Z^^;!*q}gMHz-09M~1bp7>DnnbqshGq@Z$Mz;O}gH3JT=f{`JUaGFUV$4;ap zF_4p>GWL)I_ZyHC_a~P#4al|K#nHe+&P@-T*{ebB+|L}SzUv_OM;?%WZo!|o;2NM! zkSigocQQ}M0NWFs?#77p0h$MUjy?pQ(pavSEPGIhsKF47J3Igw;|xFkzlwyf)S;foz$SbbVQB zWJm656Cchx8!NPPiuI?Bj-voCdg$hdolW5$P#TT1FQMQVLCb-1+age0H7x}wKK+WZ z`xVKT)PfSMF|C`(l%YsUj=)25RZF5EYP1I-BHNxdBsVN^YAP&`YB6|Z@YpntMptzT zlyqoZy_>*c2rmA~C!!$k)8^40y2Pl4ekv~$XmemKXFU^ie%8coS*v#99s+!HfqfA)AK%WVrzYBt3(BPwe1Z;3uA#I>&&|E(|1vN0EeqPd^r1OvX zL{JX#f@5ZxR|IpSF&yvlb#2v5K^YnNRx1y+pj?2R@U(_Q9sfl)Wi5scd;i2e+6j=AHsYU#%W`(QPsfz%XMoYh5D|JeI70Sw8&vZ+pD{u+i zk_CtS$9jvWbd4$EKkm@^Au5mlO>Ih%R!+SiuB~Z;=ASxfp7;|7%_l7QVCXKU8$IQ$ zD0RHpm3R;$qM_Kj$mBmka&A*|)6urtGPYWDpOOi;Vq0w7i&h16%RRXSmzIY)_Lf$3 zWCyQ(2710pH0?=e4&YV){usan$}rej8dm-;!eT{ck~z{y?XK-yA&JX6L5lAjA7!#bFl`Xo?IZ=BA z1{Wqd2CTKG9%R>JQ?2s^0a^?7oPG-n zf?JVUh3{pwOZ`aMf4SXcndF?XC+YE7pHzO%z)VTrnW()6LS?gUxFtjk+OR2sDU}9{ z*^s{Mdx|a-rDWG`5Py=InHBc-m+i!>bgt z)EFMpx+%j$DCRR|+_iO`we{eJ$Att9Pfea@c$9$Ic$MK5^V&ST%7YPHEGx&a2i7sD zujv&7$HCCBiAPrS6ttE&>>zZ_be@2V%d|=52+PUFtb>e}Nh^y0x@s2-nkRJ=7zguL zYcPMcX66qqG}urvO*aRNT(=fc;5RTpG6_dc5)un z&W#M!3=5`67Z__Zk@>G}2u@-VnbXL`<}yYswDT~X2YQ1M40T@81u`2_L2XUW%B1c% z;!Q?TA>EYDLmsMLw*IGyr27a4FnRlqBL|Q%HP(?C9+b_nz8m1NIf^iK>p^brnAtq& zap`I@U$D&PXo)a0_PamB$0N)JN?moHQ-Bkjn0T){>9O_9HO4uJXZgYD9c#XPX~ZKP zZ*^bgb@7|s7bJA6GA)3pS*B&{;sHckT(u*%Urd5UFIpF`M%vs?2kB2C@}F&VZ@J(7k>$kFA2v_m95 z{~^R(bdmu<6cB#bYNL_@_fpB$p^v7$(I7M4WA+OeNz4&2r&_KkgQ)fHSUGUP>=2&Rlau0_bVP$dTH`BtyPey{+7*pUJV+TpZd z4G4NJK|lzT`MOhuI>_C&u~$vXwNy`n%|RRvpOVZKTF_)))F;)E^(I*t$v%XZd7woX zPkMa6FsxChEQx1$mbowP6XT~5-2{WY2pr)qj_^D*nlkDYkaJ8HH;Et;$Sj3Wmp2G(F}9%v)xL&=c9P`bg> zTultI`sn5&oN2Vum@Fliv&2$%^52WLJ^)9EKN5 zzxe*`u?9F0&6TOLPQth1)D+HwrtXZ$|@5Cy%@<87B z`+9D!zsVHWoX`}3odBM3^Pe0G^C$T?=8Of$o^rw8cEOMN;Qbav`6n)0|0OzI+vqiF z!6kNZi3~2BjSXf%0=8JrT9TIciV>H#OSc;V5?Oe38)YDH1Rgk$fXoeZbb@&lO>32W z&Mr{WT*+w;Ns*58VeNDB|V>9B@u1@g{CO=^@ksp!Vk zJh(v(6h#K9pbf-C4P!53K;;5D*hXJPHim28^9w$h+EJ z6vVni*2UEdR^lE+QQ}d@S{&R8*zq2d4ncNj&>7mn%;twum`+MP+oNqlJDq2PSpugw zCuQvq0l9{2w;>f^3Q)sJ`r+6_EtJ!nbMeYbt17&wM;Bzbq&-e7PRz4tCsaVnDYN*< zIaf1VmZ34ZwXE7Tw-grtYkWBy|2~{4v-Mm@TRGQ|qyYoB^ADT|^1u7jARl+=LyFKt z8PJ0Xo^FiVuXt)tmc}UOPT6}@Jl!L&MBTz=u!+^XFXD|%34LNWjLE~GkGArK@7fS?zf-S0{L9$GWZ z-?7=l{;e%FL?P9l%FaqIs+kbRgJb&5`O)`d9!nzjde@`=JIdV(2!@s~H*VFGfKEgm z>@dr@TzJarLX)nu)F~9PD9#xhudSH?N|y9+#`&2Zvlgr^HkvEMz?_|~IF*Tnh@1^@ zb6?lQs=E#@v;s+%5;I`QA;@vfRdn_Kobtbff|k*%cf1I7RxdE<<5Uk&G^Jc6KSvgc z3It3q?X17ZvH&?rMI9F0nH8;XO;;MzG6zP^L~aaJ0!=DQP1ZCDogKgn&%-pj4KMBh zM?ZY6xTjcyQkZI`tOk-gJQ*j-VTKQO4lJ76Ntf(Sy)eKc5#x0h>z^}9pk9v=y30J) zGFZJsT}tRL*D zaZ%T;P=g2*$}m;vaH>aGMEyE-coz)~NO4rT}`IDP@#Z{_1zQ4=&11(jYSrqH^pj)R8vShVv|Heq!1sVnXG^+Jdhm$bE zlR3zT4Oc{7%dG?2(*kkuYwgTte?-b3y9|WO$I9+~6HxDkoTbJ)Cx@@*SI?Y0rVkMA z?9~MTnFd>Yy!Qe~jk=Xb-HzSxBIaNZZSPHj3A|dpFd4X0w)un^hqiE1bcG4xvIf6E9tDQ{)7J*ieRjGxFG!y%Uvxd58EG(O5TZm~6n|8Ce>CKY1 z8t?QmAOn#M^$U!U(-pQ7bFwd*somF3va-R}GSCXqY-#`|B5SI+cm{m59f(_@8y6BM3ccPfA4(mPu6TuS< zGg~VfiQnVEFQe`G$*%^(OyexKq}BKyZeZgUq^0)F(0w@9K|qkoH_PP-gwCbF7%=;N zA-MPKX5B`lEu<5pS~G3~y*)EUh>6sdiWnY1WEDw+3LNXQ!;YKk#85LV^&*nC5yj3?HzE6@X7_0$tfDqkt z5r9aOLj(HhvD*dp_Wh2e_MzPD*jzmZ8s~4k)9vJLUuK{TNg#Fedx?6+eISi9F2JL$ z$JK2$%T%7>VNfM^1|Fl_k=cO4+T{t7M96KAyD;k*6LDwu;E7B-}*DYB}j;W zA&T>t*jRiE3NXeWx-XrK8R`y*ko-b0K83jP4}o-(-ev=8V?Z1WllEdrZS^6=Zb%`T ztgNg7@P`3#-eyE?3;?RFU@?S}8-h~&5HzWc=W6g4Tpt4c)beHS<{ zM}%5G@pk?Q@zC3FkiH!?3a0R^LgX)61z;WC%phixm2}pL(JSxQ0SP4NhV1Mgzro3Qwonm8?Jfnv+D=oh*JVX>W3-sBzL$BxMY_DWB^$ zjpvI&ki1(SLj)Npr>yr|5Zd|9x8Q@-I*%5X-!?km;yMqy)wo!v)xTQaOI=5_2heEU z8qB-Ma15)CzmCT8P>%t;m3N@kw_+cFrkQmG6h$5LUSzs+Q~wy-j=VI0dD>+M1psv{ z(RqUpu_j`o5btBD0BwmRSdjKJd^;_`)x4XZvEITN<7+=A#j8DxTVuv>NwutR&xFfh+}NN z5fq7QtpH6}9nz~U1YVKKv+^Ma#6N^;Qd6cFt3i6y7&$-u>g(N8IpO8uZrl}vqncEY zx^_`e1WoRsy7FDJ5wSOAihRtC^3+?GR#wJ2vRjvkFY`wKdUi+e6Bop&!%r1X7)6m- zBwN_yHAU$7<+jy0w^+z4kXzIGAzj#@E*ir{)6<(&cTMjkjQ86i3*5Q6kCuBA~|4ML>-oslxb~hpLaCIeO^f@~{VO z8$UHvOZ;?Ul+I5zU80|k^kV&#(?mb5X{w)6n&~G>m+Hp^SGKad@{W z&NmRh91rq8F=>pOCa!`&B=GwMlf(p7Mw3ghjdOEU@nGb3txH`B41LWiD+=BW+1NEpcg!8)=K{X^ULiqDC5T zff^R+aZnq5ZzHYO(pYlngyr%A*%n)rnUDrD-Yna>Y`RT*A_{4t!d%4zz@H5iRK<&Aa^V@gqRcU>3@BTKmx; zN^j+Od6Q*)c@w54CHN#r(tNE}J??}aR7}PEV*g57x5FLvO5|cY9C!I(hwf6Gu}WeI z9kGTnpwRoNn$ED=Tax9C9<^JKXuS>bER<0%S#k(`AG;zwsx!!bwHX!9aM0*DD`{)Q zPr?mL)5)4eIDKh^?osR&U+5miTJhDl4yCDmp(zwgMI4$!u~U52oPLupRD@-EuG0Y$ zU-~**Jd{^$)BJ>I>w^3N3{7azH*8_GJy*mo;o(*06n9!}etjFMtoT+g;yf zNorZ{wPpE@lHGjE2RW9(O5-e)EiFGhSATaS+?Hfa)Mlcmb{B_3oYe;TQKj}pkIk*! zK>=>eb6&R;5hbM@PimKug5gnI?D@yx9BrG;OB;gk%+(GK>-`FW^XEY4}Xd!iQEQ@@I zqOU;QJ}g(=z*C#Cyu1fVtC`O+)2*D#VEQ!YNsCb-KKL}rOx?WEMC`FJ4n(s9_P#J| z*_BHGkKj!7j2}2uW)%KQYhHULbWhI-6RGM!I5`4$X<11EM~j3rFv$<;H>IF)inbQI z#CTwGiySRY!Y8`{plf)iz6JvF&n@m}!!Xt%8?!<@2|;;qFe z@Y8`b_#~q;;0=acnCLAe>2BRBlt`7A#blIUyq%1?meczB-eH!*hJd?;bv$NdlE?(E zgait$IoHL?wFNZJ;FB2X(I^8ku^FqkI6fHhFw-r0YVhh}wj)_KeCMA(Dy`({qbk`X z%p8^SzT&7f%&e?Mk0^A(j(ox0euu$FYcW0^;{;4o2E-x0J|HiB_5=Dvn+#I}^HV}8 z5RDUvfWMa+p|SkzQ>;ROhG8-o1d!yx-@l8lAd@vE|H)&G{2GqsmuUKYnGbKO*R2T! z9jpiJ1%z}EsCQ%U^)9D*G}he(qvGa=9a3PzC6rwE zHkgP7uW5+=N_d4ii$^GAW2Z;ZB5hRQPKyJ!zLe^oOW?s6k0Qk^Qd-LF=2>*dxq8lG z7NH+CZ4WkhQ~<0(>p5H2YaKlBo5SE8{3uP(s*qpYVixPzXS2AVK8yPL7n?;Mo1Zz0 zlA{X_B38oY3!ozIre#EijnT-p;Sw%$+dzoYc$QS2D}~)i+2yL3KLfH};dhPxtY&@d zB+O^O{`5)j&F?b(LFyI5Q%UwkXp#ObkR2?)m|P?FV)xPgS3WHV=OV1a;JWpPtqHyu z5i+rbpb~bnR-Z&q5g;>YW845Cll5dz07!n;edi0q)d; zPrAeInHe~Ox(wWet*6%OcT#3Sp8>N1X4H>SbiMush&pCu;Dqcl$k}+2+8AD`NY<6Q zBDvnYUv1WW!m21T)Q5*ox88hTQkj{dqsR~;)F_JA>yL_5hPN7IE;7{XM+H%@e*jU| z^bD0{H~`PT(ZS9DUpJg1lH8R~a=eH6k}RQxG(4bb!=w6k`DWom?nQD47dL=*u!!I= z7YN05nhMORK10R&ODMnNE?kHUr@>B6LUzuAmub#`$*0S($e+KWoqC^!nsli=mg6R? zEWel*^-^wPYh)Luk1!k`e}>b<(?R|NJ57wo>L~>mq2$5-jm|+!!lvrriqO@Ka1~(~ z$rSZ#s~fTRj6@EKw2JN@EwYHQl66NnyTf=e8l;B#JE{IGckt|nB@S8G5o zss+m$)grcSu{vF+mSJ)Zl40Gq7P4Sf^e2&;NkS(C6Iqh+P@k$_fn)5v^+dA=a(+3St^Ja>;F# z%6`+(o0&|| z(Ai1l+HehgXmjhX?ZmFfy0()tt#D)arEJAB4p9$*#D+yrq ziXO4WOH$3(BK3_g+4?Pl=O*3a*+Oc)^pP+q4ZSn;6t$915iUoy5)1u^URXLr>`cHy3q(&(w{BHLVE zGNHR>-A>b0n@OhGIWnN?9k+A9g5De z5i{GS*)Oq#z@}Ew6QP6<0F2P1TgDf$k)?6Y6%FjWFT#%+hqHdcd%K}Y0p|vQ1u_G# zLEXS>69af1DHOgNYPNCwPWM!+z|U zxRzxuAXL(5MDj`0(pRnUw8F1kZ&TD~z$Itc6f?)ZmdN#@ni7=;49}=(HN&be0A44o zDHpJMYyVb;WO3z(c%RTo)rp~mA^D@vK+lb0MP|wg3OF7(32VTln9ddW-tX&D^tLrfe0c;>-`ge zTqlD3m`3uIjzzOrVqx)Xa4nUz|B#ZVCkhaVQBYs&ASb^iSS)&s*gE#Myis^-z! zDtgq2Hkk9$EJyph@*rO$Ne)YGE#gexK@=f^kJmL0b~yRRf|`-pz?R!YGmu5ILM>h{ zW+z~~Q73^_gF`?8?g4$~8(h?-PbU>hS}He)#|b6&pjPVA*cWVv(FtKl*zi0Wo_ku| zx4HCLAkP)9ynxM7<#v;~*_3&#(3Houw-gJOemkn<;@_u^y8TAdNiA6AV8I3~OZ7vg z-$xXyk-_T9fz}g)VT~*RaOY{OQn~W{39b{+09UV}qJvjuH@t?c>;D599Sy42P-)wt z90_LPijEl__MMwEtCem+hqYpJrXG$2YRpp7X6yGD4aaR#RO@#qweX6>vuF*f>DyW` z3$b5iT^$h97?J7F!}P1Ela+91m*KAAK7^((-_EVn7R&Tb%F zXKiadEPCNOYtQ?FYr=Jg=W$(>!Z2O5)#ye8!z-y)wB(*iQ0cIdsYjKP!fz0=0!^@+ z83CIiJ#LlAI1l_IjRm0;RKku5qX1-FFaT6cTTCFd6P9?S^5Ljy0l~;}rjk>xCX;Hz=5rGXMRi}wkzNcH-0#NlYofpTk;)? zZ*=-{B8qZieetWkGe2$REJQ6uGRWg98pF9OdYUCK8LF7~xm=1vtnoE{i22W%LLUSY^5!Nnp(<`T&Pypk=Id~&b zM=qo1w-J&6@@Q8)7`gxCet@bt=TjiYk$9~uYc<@WFG;KQr6OQMDMfZ$?Ttd&@kH(d z)UF%d?HVfS7gKJ0y3mcTtLD}4=C#B!V{xT*#C3+7vD<(;!9?rXQZya758&P!^Ga?5 zycipNDVzN;BF7OIEvE;>gER<;CGuTMVH@Y>4&k`5>;6za{NJxOH_L*k_AAP4vq5Q>m86cbtYz~~4C3znOukxc zkT_{LKNY?OYS2RSku}@$nG8m%Q4)pF9a)_39F;oA6+{|vGm{=u&b`JLR#s8no9Shv zT<{tB)-GC#cV}S4|LO)-x#oPiyOGp>HI~eoL#pdvX-cWIk|dNL zBg7IM;7wr!kciN6J_7-g5bZ$asmQ4#PBL$GG&sQwrb2>AbhJU35gYBT{TR8MnUQ?^%L4RGEsQ>)+B%<`_j~I*fZ`rKK1zp9q(UN5AQ$LPq zSpixAm!x}g8>bemtpO<$PKMHboM?|*Ks0+@8spNT^KJA)*KP7eC$iKAbzc~QJ`4hkVi{kU8BY!G$C|uz*gJt!udw*>j?y^cPQF!M=!fh!vy$tn+LfsiQ9=j_Z{z|+lZc&7d3Zk{uowbhIo+dt-O zI-UO($k_f_mLilxKJJWvidpC(q9ir)cHt$p1`i{5Z@=NacgC0h-oih)_7Rdh9!`RX zAFj7IwW+J5-R&?PGj*vbV{k=Pmnwhi^~oh4zyE#fA0fFsr7ppM6Vby-14PXTE?O7Q(e)lUD3Vp_J?86q@tFrC?3fd+>U@3GMLL}MpypsQN7>w zz#(zF%zLbjAMW0yz1ZmLXvb9;+KVM*JQm3)35Ze`&oDhAG-f`Rpn zPqE79P0cy4DW|qA3?(#6HV+#4+@^s#D63`O61^NJ(nZC`Ha+r??@V%xHeR7Oh;-*B z;J}4wSL~GN&tQn-`^Umm&T+tWb}~1`njcWVS@g6z%DXf)H8Aw85$N7(VAYJNKO@ zQObqq*!9@6HDY(m&_ns`rerQ4v;pdM$NDHqU}{Lh5x3791it|hVWjk>BPnIL6$)&< zIeZdNC!}J?Ny}XtN78{|7m`TTTXFuTw62ij8VZ8bFfhJ|5Sy)87*x<;E#dcJSL1-*Ch(P7p&E|d_D75!# z+^v_zlSF7CfxnsoAZFt@Pi5+iRi>`bs7#8g!zJyGWsYu@)TExZ{TgW&*483y*BV3` zVq%lp+{%{v!8)W+sB?HV@-|uUPB%UDk&lmR{$T zv;O!KR_o(`5a)FA6>I(Z$1UsOKj92VMr^92Yd`O>{?=uEw8&a&WW9VEuzuvS9;|2O z?6<4NT)3LoPRss7mwitoJ3GSIJ?`ArC^o&7Z@FS)jbg9Z$~Rp0b6@vEm6w?Fw6c0y z=l<9gd%h?ZF%~wMMz=mH6@N4+)Imm)hY5y!V~><1qHzaN*}Gm2V&4#+LA@R`Pkh2KfrVKQeAlq7wk^l7cx(g-O%82;zRShv!ULEOb34D<60HPd4(8 zanCtuG%&ru0axJY1q&>n)}wRZ(0bK`RxhgkF390l6krBEr=Xc&BVWi z$Q0N9JW`C6gU+p|0hN{L6*_&l3Ejn|DKk5ih&QS!5l$))GXtTjAi|m1QfYciADhzB zwM{Lt5uK+cJGaejt0Snq%UjW)R~MldNqaWRtlPZ26?vl~qSGKAv`*Vq1x8HwktMgT z3S`blN{jgkAdHop;|*YsWXYgCtg^AGkF6KzBOB8BAc9APH*0f>*x_xnb2rWJ z8B0c^;l!Me{Sc5qg=F19LpS%KI%CA?dE~jM`wBy3boewZI?qZHmW} z0PIRN8ow2{qC|c$uI!1ZNniPK{+;4qkU!7gDE}M#c7Okt@0a-(*JfK@jNlH&`6U1F z8BoLBLv0meSil9n%uR)%8b3`sd|FJ4vpYdDXlBKuVM!>~QYGtpPzy)dO_86xUD8%w& zh~hzLu9zfC0v}icU^#rSQdl!c_gPFro>&Tic&Y+G=MUnr0@79h>Wo;Gk@R%Nzfv>k zCl1ymVk4D*uO5L@R%tCOv5-sPb?rdJQId9Q@MyZT)iNTVd&aIQ!o&%Oz$O0ypA@h1yF-A4KWOsvUgMb|J!^ zQ>px_mN{6uD!2*wgd>R*aW{#s1cb}m{pRNsM7yMFlOHYZuw?1Kpe74h^-ocFInTu? z|Mb{)G?<_M@AMRp0cJ*?KW8DNHz(ak%ye)Ki({Le9q4JSs~AV*x)8#qGrOI9Sr2B0 zjx1!9yPnUw(nw;M4$OnLn!7C1#<|)+84*5wiQ0wLh-R?0b&U|oi4~thqcmo%;W4qZ zXwE&s)S7hC1>pdFU>gvL%ul&ib;fV>`@Aiw^K?Khi8nugOKxDUrKt@CB5k>I9%C<( zjOn^u9ZFeD#X~_5@NhPNdH2qqrq12VuX?W_;4r11r<}7^i^7L+()nvBBOueAdlayY zx8kZl>*Dix?rP(Okqfwz;pyd_cX1%|z9X)N>)J_v(T(}*F7`%`x_)NjT3m`@To&Uch zhNu80&INvGjtxKDYLhskSkcolOF8RH%CfVn!7B&=bS-vHhYii_+g`glAN}dDF6d%e z6YXgr7_%k1b7ACqHM(B z5+tPHb%N9lK~iNi2vUp-S#1ga`IYGiqj@%!GP|h6VQizaFddUHrt%Nh#`AXd@l+kE ziqog?pIw2uLq*S4^dtPdTy=X^WtMoYT0TQ?XO=C|*12~>HhUz)BGatW^Ftekxp9wA zl_kUJ#r&SQWH?RuJ#_6bSMUkX)3a@D)RrzB>KvWBAxG_$7Zzyj9|KwP z@-|*R_CI8xd=d96B0TQ#yjx^%6l2=U)mj&0UlklNzkSs5K`BP36R6wQAGr!m6y8&xoibma6J zXi>zX=sKAi(RzM^Ubis`;vguKKgtc3K z#)no@D$bwtp*{;e>qCi!PWaFQ3q9jQH48oAL)=HA7J722U65zqSlJHd&h0LmA$o>j4LLR)IH3W zWIX7Wx`)~L=F=W#Q#22{rAa1Ui&KKV1vkB-6>4m`a@AjX)3<-+O`pXpZ|;G&sr}er z8M^-$+4U3jABYG~xj0tMc=DpUKU=AhpJ>~kE{_J2rO8qa@Y3Yc=CP?=v3*bhdp^$9 zzO)$SQgXkRuI*2kY3b;=Mm68Vn+STLAYBe3?fo_eL-8<>7~4cfNT>TV z^k={G-W$c4j%^x0F!YhH-u;A?uCP=a`IjeIk^yJ_fDYi7y)K5A|MM5_N|p{Fcc>=I z2AD5a0!voY*+dOcv)O7m_{MZ81j%opWne?Nvt!S6TeMJcf4S%i|Wa?AG3)cfRwTn~ch(ETp#lXO1+@%30PK&l9j7 zjV5i#=GjKF`4_+Q?AU=H9s9kLoB~fnaxLPMM7()jbZFhw@Zlm{6nK7GfuqwioSl~8 z*z^o9PRnq7dWNy-5xa{B-^r6jxaid0BEn}lJuQ5y2p0to5|IlIXp1L{@B7w9&o_O) zP<)f;(RJvM6KLGHp_pji1Ks*`;c-RmwulLRzSwWsEP9WNw(pmGyao0)@}F(WKhc!` zTyy?|jr`9y<$tIt{|iO_p_hO9mzR%!skZ(LL)U(GfCJ^FY%p&aGNRfi#uFQ&HWys! zelB-ESGb>b?q|ULTo#KZ30QRQXNCI#lZF1gN3UmnPd^ix!xvm*If>!YDWqPDHUnT2 z)3=45B4J#Q9h5B3xL(WgpIJH%TCV{2Z9!=Z(t@It^@4YTQs^_usTOd6VjDkMr0yqS zxnH1(dyq9*I@C9E#~Y2*(+$Y&+sqo;Z(2z2#qM*7*A~p~4f*k4l%?C2pN7+5`E&Ts zC%*;F=_cqvoUIm+v($mvWjXd2Wa%6(D8%Gd{uBP#DqG8&(sb<5I$oiU26@b89vi16 z&d*P;Ro~MLZ#ks%scqM%5#j2zZ0OG);n8#F^fuw-!Z9c&heot7o3?QHw~ z=7AT!WjfYBF`hxgtm1CAE@G~OmJm~6Q1>m~yL>$DXEREZWsQPH?7G<^g5b`l#@Q@H zjh5aDRnm}C+gd1LyC_YQQ}I2nKrT|Xi~U9g{53&fw9#VxY`28U0}Th_Ficz8!T|j1=bL7 z=scdR8c(hqPp%qIt{zX;k0%?(lQo7?Id4bLd&~dz`+pdJ_qs`*nI3xd&igif)UhMR zlfag&0-ILd)|(lY^d(Ej(>{=?T^3|qJZ9qa7r+Wev_I{uB$p+t_l>8QC6|M^{RhU= z%ae7&8hO0Gw9sN^0yGIl_ka_a-P}cT4(g&r4R`+MBLS zuF&SfN#Y2oe??MdH^RGf?q1cYB#?lUx6l{yR>?6YaUdGI1rAQMpqgBoE@#g&{O66N z{3ITP*`SlI`nrbSA32hxZkdh2&ScYjILkB@j zzmcnhOA~upOuMd-&zkfdg9(cb+H^?rH}w!kt2Zk)_K}nWg2aUQxhV)BNXpw>`RQwA zTvgxTHBilMa;bmN8y3#>(Mci%@WFAPX1&`CO4)J^PH&ogD0}@>Lyp%s8Cx-dFCzx# z&(>Znw&@H6)^Q!Pb;9!$Nqtcl(n}#2l8NhlA@W7}GgnzkCP=x@WqclXpYYuIWA5`( zJ`cH1A@8H^a|NG}FxB19=X36JHJ_*4=PEv*b)Q%AdD4Ae#pen4c{QKM-RF8fpK+fX z_&nx5*YNp-`@ELVqwe!MJ|B0V8;Ab=um9Ft)0ELmWRmh}Cjj+x4Z+~`4a)}8f z0~R$WLIj00#9b0skj+C|JNV%$^|F_;eec`9O-5##2*h{=dK zW6)h)d&yjWNUIkAK8Qr11&a8+^GRVWUu4%n&ehd;33Yxi@M=X{!8 zDu(m9RVip#a+aS>wKlTHo6)b85y@y&2{-EcOKg{#UZIL=ak(g)4x6ER~iL%)WgM2? z4l^ge2essU0ui!3SuY-MWHNfT_D{$R z9hiVhUo-UhBm367t-^1@M+c(8M8HpS{+!M6GC5}pXN^qT1JWn0qhv^<(b%Etx9aeq z@m%VYOcjBF{ZtLZjgKq)G;+61dBG;|6 zFkS(8-J-(+tjTfFTiHx3-Iop}fxt7iVd&GJxZz9M$u9d+?S?PV%49ylw&C^*_@pt3 zWqe=ZrzrEl1^}reBYDVw_Nnn(>Cyw_Ga;Nj1F=Q1du;>T_&v6bf$;m%wv_#n!@)Mq z_sZzpHr5HhXScyC@cY6xaDw0Gx4{|kduAI1m*3Od(rfhl+&1K6{GQsDuGa6f+tO9~ zJ-IEtQokp*rB~_q__p+Fh$I_>_)r@-U6o`BN_qHeCLk-Qq?Q90hKpEOA0o=l5u!lV z<_Hm>T62Wx&z$B6k)H+45o?K9)EsdQ5lM4IKM~8CBQ7JNuQ@{WyuUd@^eSf91A}V4^|Kx=k<&kIjh41a#-|U#$_~yTfD~w~13(nVNR`L^&rcG*6C0;cAbd`oD*P48>sFh-$v{z zkF|S*$9!n&6OTs&xz54;j)3~iMIg$%;b2QsZHXSQ%&@7Y9(R0 z$nX|LJmVskDPof%j=6}Xinvx0Ppk)|uN!*9_sh&u&hPH)(U@H6B6vmglm>9UPrt56 zUt3RqR_SYedS8(~;M21;93qtC(q!xYp`SjV(#ZN`gFYX=9@X%*2*;GXJh`DrzACx8 zo_rlcQu4B7W0AZ%SyfNo$N-hRG`XZm?oY0%Ctt#F-vYVs26bb&j5v{)LK{Uc;6JxM z?TfT}owfnQT+f+^gmddTVDWo)J*OgmUs%sci{IzhrmL^ zgkajopx^+W6PPb2_Hv80%%p4@pb#lnka9(la%Md#*AGxFDVLFQS&{O*Qkd`Om2wFw zmlP>4C}rIMT_a^9DI1HFvq}N+&MM_PQm!jf&M5_4Kc|#yNx8O2d6ATX=tae^A%0B} z|B_0u>|R>04cj)Qvu^+=Y#G|#bWTBAJhnx>sGy;|?Nl!*Xvo?RNCv2W6=Eed!@=qa zh1arSD!dxND17w*Yl>es(qjr=$wsO0Re(p~4Fl03g*h=kqwtLbtRa5a10;nxvmVzk zN~MPsKS1XRuZ;Grhq?y(dV#n-N`s<4reESt5ch)0u^k@X22Sdm_`TG7*ylM*p1uD2 zB;RL!{>RCG(&wKb|KmQ-Ir2>S?`Qcw=kp&W|Fb^-LGmB5`qhTeAXb_HKh@UneF zfAqBz%KW^7*Y6uz`sj}pJfq;IeM3t|Zd2yd3ijO&ie*rNzQ`@n{w zA20dfmx+K&36TFdIRPCctKKVbC;SedwMM|5MpMuY0 zwjO(n$qrUVhu%UrX62}@q&5urJkF=>nrzx!dC~TEOw6GQ;6#s174)48<#ZXfs1&of zS9Co75*!3zOuT`fVkuOr9aQTmdZqh)sv|CQ<+gmEPz0Ct84cG+UW>y$p+CP&O?Y; zrPrvW6PzQosJk*e<0Yv?uRbA_PdIu>CDX-ONM=jbaa7nCkvPB!hOQ}{6I#+1Hj7{| ztv0vR-rN%P7LCwe(k|ELYJ`&=|8>5GM!5V!BZJc#DNSvpR5U^daXXB;`T3g2W2Ih9@S^Mz^aKsV@d1!SA^90GFC45WhsS~wiI7PeiSte6Q zpmqS|RHqoouVCAyk?M#=J77D_<~7V4@`rcjSU=|fS^9XKVyYI5{!CXNIW0YoH@Jls z2s@Y~o5+>;#*m3FJy{to%VyEWiH#3pQKsUC@=Er}T4w>PB*3@Ei ziK7nPo$f@x-&Au=oN~g!t!F&xI*{RYo&RPtVcq2H!Gi4okI-lmdpL?SK+4uTSo6KA z!LSR7Y9P@}6e`?~t7&S(*k%r2s=ga`+Z&{~AK$Fu3~A0P&l~5_ydHIHmpueXpLEk3 z*1;axI_QNnqb4?|-C!R>*X&~9QOY?~GVA2lyhoaM{uIkzw2}3K9Yi&$`61TmTg`CR zL(mL`I3OEvW#XsVfDh+sZ}*86MAf8|n?9O!OML>Pg$)3(F2tH$itQ5GbPwQw1ne1z z7E~%vEeKn5CrOSUWT%f!A9o)@u#mCI>2&_S;xYyLj(_q0uneBOc%ad{O`6e*U-Q;{N_5&6f7}FT13FWl#YR!~9d<4o14F zmnmKU>+8Ritt8C<;d?~)EWd2(|K`lS3_X#o#!rNp*Oo9&!N-L>NSf(-n2%xKj#=x? zohv~y?zg~$;!OWN5})ufs;ey25Xf|V)cqU_nck?na%R20PRg2J1#$pYDq*v;BA1@0 zND#UE4Rr3{J)*91Ht9OZpmv#am{7)0m*(eUV*WnHF6tsxduM+7Gd)~Dpph_%c#Q$Y zr|TLzi|Iq2)-`fa!$a@M++`cAqeAVUm@NZhQXZ9&_AU{rh;GSKB9VKEw1#!<=Q`eZ zxSd;bMxU+x>F)%JOCt>%lyYNUF|#k4MePj?ON+=R!|LUQziOW!yfsTzQSWoXMTEApwk><(&R#}seX9W(bn&AgRhwn+rU+={_{(5r+!a%7!$WQ+j8hRXq z5T@=xmRm&_ub{62b#hqu9uWIubu7JLncVfQ1)Y@Zu>pkq*3q$7>Zsh4Hg{Bonmd|Z zu+ai@$zdIxM7H2Mn$9fK3`ky#N?gy5IuwM>d=+4j!`e7n2gb!S%QUyqadRhze3~XS z8~PFF@Y#zoXIqHFF(zcm%<|LlgB;doe=)4ZGmA7g$*{cJsMXfOqM6yJwLlJQVRg|0 zuhUKkL~{#gf}1;8%^D6`9R1+*FaI2);s#1FFl-;E*D(-b|BCJ0+&Ra!anQ9fXJ-CsZIHv-I9P9E_65u2e>5NC!l?_A+%|dl8XUL?IK6+< z+9QXxcW(i@S+81z99G1UXt`E1po?OT=J(gObn2N-0(w7!v?_O9UZoS{@HG~_Kqv4j zWyoP=PJO5jDOii?g_>tw&ye2SDf0|U9C8!F!)nuuOal-(ter#kX5gr&muYTh_ll9c z{bq_;I}f>bV3wzsnbwZ6(?IQ^dOIC6%QUycl4*Bs;N%Kw!{h3&(gZndD7O?)#@k9! zBxq(u=thvS3UBUgBLf?X82@jJ1|)SFfOmlDWi{!PD~Pt`pzvx6e@BH^*9*4-9WM8! zbSHlTuQ4AnC=odOU-hC){=yRHf%J)s^8liwVGgUrv^RO~&j*qbT#Su2LS zF)IfvGozd})>;5P@(j}e)~Fir#CtG2XCUY+3y^bV69iBQ1p=Or414I2fXt~Z)O|DJ zxOfS>)yC2J(TIBm^NNF=!KJlTD zf(6b+vWU=AxWFY4vsMhKz(5sl!XnE--nRn`IBj5f+5v--92w-GAgVm=oIYk{E`#l| z7r?0m_K+)tJPOJ!3q(1I+&U8dP{{Su-7CaPw&uUPLSAUfxUwSfp%u4qPY-`0J21A+ zKe%Fqhjo#fR2Uo;&=E$eO8_nTRil|)>9me+A+R^bU%ft#hx)jSuQPC-`oj65g%`S@ zx!)NjMjz1*|ItFsU79X)u6(B+B1KW;U#gYcBRYL2qK}qQgi6Mta*pRT=PJ>iTF%q< zfY1>RXTgAJYWzXnzl{@+SqI*8i@Bl>GmJqv6V2K>fC+XbX{V94$~WV%s&m-kXe4V- zEjGW8oRM^*JjJj>hsFryeg_CmpC&?wQ!x2D7AR_x3znQpjQw5!SI+C7x9j$Uq%PR| z>lUJ9BYH&h_N*Pe$zMXaz#opH)r9TCkGhKvfhTq`6}?i(S<>p?E8P-Aqc0i@v2b^7 z5;taX_wY!fMV-APYhN4PCt~MTK+$+)&rA62Gnj37=?EsO? zVx07)hpr=)XYRBhIx7Dv3U|f#F)HYfX3ea7z+)te9O~tJ7a2yQo-RevuBvYM9Dj;_hVsI76}WfRO=#auEHEzA(0`l@ zOLSXZ1|x8@qBT!%7XHATcBUI$VR6^}sFCs6p9sbTrEUgv#1_DknT~%T+#^5ja7*tLk zWN;mXcNtN&q^)lJDN4}V2x)D#zD=^Ix8W(&+qJZ6B?f8P{kXkyB~oDoX=HCl5Mn70 zW~~FdUM>@|k|pATsgYQgAk7kaXqS?7wvpK83>lCH^Isc=-1EQqzihaTeL$7f(pE=X zc`a`3VWZ3^fMrkITNe7nifpm#L&qW52XOCg?*_ zI+C>=7+2>pptJTc-}r+k5=GWKq+~cdfdZ=ttL~$fmqPpk7>c;X2U3JA6)hiVyDV5* zp_NF%9YK?H9!e$2uPqU1>n={^!dX@iSS9VcuOLGriWsY@9{d9NdQdD(tw_5Rb$PP> zeywl!07Z@mJgeSsgGi@=X;Uj)xq8j5*p{Kq(LFm@IS?^=NGviQyAJJF3yw5i@()=Z zyIumyK*wc1Y%kSO+32eo=ZMhe$G(IZ$QD;PA~sE{sxCOvF;sW9w9$e-x;DQ{3QE#H4iFySr0^-dFqqfLiXL-cB_zUQ$uRF}pZrKT zT*2RvAk*B)zwui-(s?E&s!c{IlPZif55VvRBB!O=3KbG;%&9@C^0^l0`W2te_(fm` zZ#4|TO|=6{h}1)137f!zq|AYZ4{VmGms}n!V21}wY+ymLA{gO%!og88u95@8qBq~%mw0g2>KY;?iJ{}^l@I!-t`}8-I?HaP5`PJX=}*$4)OJ=3Nk!98q7Qd=xH4B z{bb_gk&)R!!yc{C*l=d9Bgmn@4eUKjr6Vvs#%e2Z{9$)(tvp_h=9puHtdh>lLsW*^ z=L)7RtBz!I?GC6h!ij`eo(@?)xT*O*Jd(8SXq4+5$!29@eYz4p=VYCH$}TWl(D+
0bN0#QVSv{IfS8m zC`0zZ~!ecIM;^gxi%jAq`*^~20x8+R99m`brpXJQJ z_a>+Q9xrEf>po0v^^r6Ee&3s_Q@M`uiaM9t`OP|ptNSGNy#G2T{&Y?1q`PaG{rh=o zx8Tv9bJaR&c3EqfnI4vD^GB~?8lzp)zBvU$pq&HL()3m{7q1LU%b&lBxm`RlO?V`U zS>F|r7Erm88LhT7?E{OI%y*h=(#nUfV5;8#AZ$GJnb5>M8l(99jV(&i~!VEoT!!{p)a9@x;yJh8Irr@R{n<|qrcB3F< z&@qT9xZ=uMAMk+sVL&EZ9;8Hf6!KGO#fVww8g-S+Knfe1HXCkbzII;2SdV5x89W zNd`W{g73({hgk3>8Tb?nz9j=6W5L&C;Bzeao(z1D1z(hbPqN^fGVoCrd{qWM%YyI9 zz=v7zWf}N13%)G_A7{bWW#IEH_`VD{zycR!zzG((Ap?%Ez!fQQh6V0OfkP~CNeY}| zfm>4G7z@!au?-A?xOt2U91ms7wd=I#rh(5vHr+i)CY1G z^@H3+eIa*If5=_bCvq3{i`+$hBX?2%$X&Dtau@A`+(mmKchP>xU9=~17wwDOMSCN6 z(f-I?^atcF`Ui3s{RO#;{)5~_e?sn}e<63#-;lfLf5=_*N8~R0CvsQeufSdOU*sJ|qpnfssC%>l+5&BYwm}=At^kMX6^l9{M^l|ic^m+7s`TeD7O{dMvg1fE4YtsfHFTt+kkC^vOGoGfo+IV z9;s43MO%Yyj#7R_TZCRZuv zVjHTohoWu8HdbjbMca#Qu+pB2wi(-KrM+cJ`zzXVY}1wgp=j%|%~$%5qA$QcLFr$L zz5@FUrT;1V66{ly{;B9|u+LHYFQfElMc;&dl+xc7eHZp&Nx0 zq3HW@44`aJ6k`J%BPiP&#n=JI5X$z5QMONtu?EyxG4=o*D8?cx$BMBIj(L>rr(!IGVGMB90lA{f}ZS2^?08 zEy2eXV@(`$D*G?RSQN*k%Kl9;Rt3%|#;!PqRrZI9u`P~qmHj27>^~J_Vc?`Z=M zWq-?%>tXwF46W>s@i=lA(_?>)=Oc$PKjbjxj~vGGki%F$av0@74x@ZHK0tYq!ze#; z80&)^#`+w- zACCXfACbf8pU7eKSL87IFLD_D899vpjT}aQM-HR^BZrX>$YJCMav1r797g^ihmlXn zVdNKb82N@AM*bm(k&nn>F&7tklrH_%7WSI}qB zchHB>m(Zusx6sGX*U;zC_s|E?7ttrtH_=DYSJ7wDchQH@m(i!ux6#MZ*U{(E_mKn0 z1>^*B137|RLCzp|kVD8N

rXIfh(A&LQ`ZgUChXBytlu3jM8uvoI?yycqH&#IUqr zeu`L#T-}40M8-iZ>j*@%xWpUcOj{w+q(_E8)aWOO8`+YH5OF#IF(*~x2l1_MAi`xx zhC{S!Kg6pX$yA7Roq<@F8oXt-7$Qg+@YdBRh$$U{sFDkr3Gt}&5Rsy!KSYu?Lo7*~ z1VUWsdx#8Kk?{~yIto!G9`S*A&o+qoNJt1oZ}vg_#*R#a$j?cL{RoLa#F=(Lq{)bc zLe%I0#EqQDG>ABzg_x5%kwP?R7sP|i;H{Rm5CwWcT*)km3#CG2h(kOfqVpBRbaY4% z#Akkh2#qxat=B_bCLi7y8vt>a?GSmizTAVQ-;ydbi&1!60@ zu+C;YL{uIU8xjUFmg5j*5fER9e|!xQ5CeFTZ3VMggCOp*6Cy7r zWF$mU4niEo8Rkme2+@-YqDdHtj_iT>hy@u7v5wy%+Tl*ZAx^?Vq@)JO@yW*@!_4^v zwCVwJXn|Fgum600o{D)h;Rw9_^8@_;gkuOvhJ!<>f)n_G8!Uk2j^G$m!8N#GNN+IZ zTrjOI7-X#&?GRC z1k4fwhDijY7=u|xfMG;njDcW|gB0eZ|0H|~xsMsEqJQ>ui52_ss%3Tf> zG6B_&1m%iBp@TrBi$KNBpyU~#W&tS07t}Hz)Z_q)ngXga0QC$51+7rLZ20lVssS() z21sZKdA;#&)cG_j=3Bnkqn!t^@i~N54WZ^9pb0I|g(GM~6*OQ8I`D(~tAhsYKnFai zw;9yj2Q(o8UATfaI3T+*Nbd=?(SiE(gBppT7S>RYfl#g{)WQMkApqGeKzd)OjRDlh z9cmN+B7g}4R1{LGL29M>8dwTb#EuJBhzNfO*|w1o-*4beVCa*%CkdHP%&{}aOdp%z6z>@4_<`{U#+$XjS34p) zDmFas@#%mK13vKi$nQhn4}3q6#tof4V(Q4LQ$|b+nh`vA&|=S(j;rhEjhQ%p z>d46>rVN`NI%~wN5lbB7Y!j^$tv6|J*7-{J2eo~oV}ewEn(9%Z!Lb4H%)FpEA(11d z4Vw`aNKV7nb{nh(f#@*%??`Zywow#Wwqr>+Z9%FtB9j7jENgDVPe?K3G-#MhtCd<3SBgOneTG%wcg9U6MZ-I|HNUJ{x%!8g7=SsH+0M|ZR#K7E)42gvY&+d(q;lv3?uTb$Zj;gwruEfC5*u>P#+``h* z%G%lno&>Uc+j(%Zpt(U2F>~WBWiahIyanFlqH!=Eai6aq%mf(apE_};kkq(1TsUj*|U^h_kbA`a(bQG9CP`^Y>(7Dp3eyO@y77>oq%0{J%H~4KLYjvegPZ+90VK&{0=w@I1V@o zI1M-pI0r}tuz+;HCBPNHHNXwPEx>KSUBG?7L%?IeQ$Q9V8}I^<1IPmu0Ez%5fHFV@ zpb}6Gs0Gvm8Uf9KRzN$T6VMHSRt)YY!hj0^)Ahi;VX!|y9iR!&2IvAL00V##zyx3h zumD&AYyj8@Islvi&Hz_{JD@+n3*ZCr1^5GS_$vi4fIvVnAOtWB5DFLx7!4Q;7!L>o zOae>+OatH)fwKVN0ClK?5x@x`1xx}g18fGM&QVWTCoFdfU>_h4Uh}5ByF7bDS#D6K2bA3( zWbg!8yg()&kZl0S=nJy?gUka#_CZhwQ06vR;h~d(x&=ZVgP^WMpw1ys_hF!e;h>8V zpp%iHo6(@7F`%n)ptA{}yD-op7@~19=yWRRb~@;I2IzVg=sX;B9|1O)1Gbn8Hi53$ ze*xHNA=qjW*lY>dZYkIhj5sMCY?=tRT>&;u0$Z;JKV1txD+i>&@AqNfhj45Ir1=EW zZiI6_hjTYU9^e2cw?LlTAn$LWjBlZ=@1V@xQ1)Js;YW~VAIS6z$aVl^JOr}-1~MN3 z*^fgVPC{MIK%M@8x}AqQvQXD_sPkp0`&H1v4ba6c(8(Rp%{|c3L(tV@&{-zvE*o_C z0(6-RIxPU*7J-gSLDviwN zcjUTYbMOrT_<@lXv>jk)>I%obAaAf28w_%dg7ZP=MiG#HF>J4d+IBVNQs#WNgAm_*i|Yd{h$ij@KS{s>2irYluOc6xTNG9m$Wu>Nw*J= z(B(WLfQ2}WI(UQ$;**q5`K06#pCnlc2oozHfk3PcdaA@|p(^Q4S0#a_LQ=9)NLrr? ziQHdAQg(?5ECoZ1mWT3H!Y|NjKIY8@6i@BbeGwzFiZxwMfbL zTBOxkn{=PiCNxxs2%hT@qc~l{i1kRyFM6b8sDvbyN#IR$eG&+7TW%;cAVymaN%v4A z64+@(N=_M*)_4;l_ckRdEv7_p!HgJfG$-sd3qoBiNeQ(gN!eC}J!4JMfruN{*%G7q zc0?X#Ptt=ONQti_X?1rZ-Ol|Wy)zMbxDX>hSHcW&BPkQzNy!2al9bY)FuP$`$$CNg z-o!{_0O=m&O9Es3NXbwBq%~(Cky`|ilt?KN9Fh^ER)(-60tx*-h?KMklcX6Tgk^`4 zbjRUP|4?Ei97*KKqeyzkXi~CvENN94PrARDK&Zt;A~-RL7>$`in98XnW%G1WGH@o; ze->eOg_FR^5upD_Vw5?Tbnl%<0+%izB|!^GtI1*_Z(E{hs}F#m3VGmL(Dnstz;AtM zd!Q{!cLVeZbk2ZvdCzcQfqsrUV{WBI$Q2Ip6`4I_`yu1}(r}epeyFFfKU& zOELv!@<>W5pE#Wt5aAP8n*}B{q>*AGe5OX65;RDP7fh>YtV0g;(<8$9`Xv3nAqiY! zLWBY4$y<4(p5wsC5x!b6Or&^SFuygN8*&l`Qkv{V6_7m_oxXEQ}y(W zDD}X88S272-Wmrk?9qTpzcuN}HJVP>t2Bk9BehaSJ=03L8>TJHxvTB;!5AHS{jN^> z@i5&3L3GaSto<3=~MPMi_7JcHj<$=B1tkR7ltZ6?F8>iQgjyrRGZ95|MzT3`)n6-IL(KA{rzAv&380WIXZ**1TQ9x zy_^JY-%3V4JVe%7T_+AVibqqR$I(b^a@UkUkJU=~?yC020iL?4$4=b$JxKNh`z>F~0X zMg=Qa>sjl}Y@pvA4gD_kv7PpmM5%E|*$Nf1;|GWy1D{=E)k$8VF0r~~N-9q~lEkn4 z$h6_3iBsErV%PEskzPAN#@m;Zqq;8i#e+5U!@8IB#)L_nv(5z^iQZ=_qg5wz)0Z*4 zK({dd?XR~AwtXfP`mZ=63Z1fFjdwFwW0vkh?fwp<_3j_rVvuS-++^Q{M2iF49Bs3{ zTjJDsc7pqo>%~6b|LiY~2%H&mc+c!HC#$ASHTq&^WVGqJrA6;QUelcl?bm)vHZ4*i zwY&L*u~8%GQVH2~%7)Z-_>=DOGYDZb2HM70r9HJD#M(@D3xVz4R7+q^bK&%V3;7kB#Iz(JaGtV5T5bYU9v>G~z< zQwu(z8eFp3N=UR_bV*>99SIyejBE~0Cfdy}2pt+v=~vS^+VqUdW}oxCz)ioX2J-Ky zX&>9Evsv?7V`{wIj*b#|Z{9s+nD(wivjczLoMJOxpIm{y#Ng~AvZE=JEc#?GRlnTD zv7qC4R#|33uf-mkkAL{d@R#|j4o;nG16H3bnPIlV?33U3y52ba#cJ|Nu@Uv({vJoF zpUFKLxk8xdcvag<#oID*_M&jXZ+4d$#md1fAF4qS=V6``NoO?DW{7T7^r-g zp03ud;lJ=hYon^oBU4s7@Ak?QPV6&;0^?5@(m==+1HCXFeQQC$kunca#Nzqk%Mv4E z5*(c@W1^xU>J*UxYoSHJB6~|=H9^Jvkv-v_<;(gEKaG*~|4*4DtXOI}HyW1di-)BM zBT-ukR6BYlKE`tdnGESjD8c1@PWp!Pj|2K3<@ zD=n?0mPyKJBP?4PzBsn;`Bxob0%?0MCuyIWj_K1dOP5E*LD;`<hE{Rwft~d%sC}N^LN&A{g6|)4beB4aMmBwfcRAldWuR(gZd%yp_|84dC zTS@1^8lj-fc}o)$M4>URirXEQLx)aOETtKr7#j;yz(y$vOr>SROe8NPL$|*h-sc>q~zwhj8j!{h0v%F|{pXc{+>|NR5a)CWd z2r9_^wzYc7f|x!^s8~YtFMIm?zC*LhR!UJHY^eIq8ICBp1b3O=YU{C_h`7iF@48L! z`Z$nr?6^r`;eiu^hmQ^n8~KjB7DErwZaL~ob!KM^T>>Ei#LSc((>r=lrN`gh_bM8v`p6$%IXXH6*+gE;@f z7Cni3D&F@zzvz8$sP&B#6eYlIG$R8JS+{1zk||EQLN2Ed0V5(K6QOPDOPtuqCE<}v z6Jr#t>zOiGF{O5VT%^0At@=-mPh3=jRQl&huCWo3i=tp955?r$@0giean8RyTuV;}4CG^(3 z*H-_mxz}gEIR|xL)$cQ*VzTPLX|&IT?{b(obPyYnw0LR6+%T9~K75J7kNOhh?NmMM zHvdhCx08APyWG70U9ti1a?1Z^ht@|o|61XF9P3NReTnJ#=3r>9aw(w5gvE|HTnvXD zE-+=kM}JQjOGih?o%LT5uRn|%|J0JlzYqpA_FvG9w})4MEZIITYHni8 zT)0>ckBgb_Wa-?;K3AoI5)~H0byWX)(tkxD^q9ZsqGz>$f9W)DB>wMc$J6h>pk%C* zk3!1|X5e*$Qp0a-gLWe!jF4bC7A`S@6;~LeAz?q%^PkE7uH(RzuQ+18!SHm7H6cN8 z(W?U&v!mhqD;omTa7a=Kmts2rp#Zq^2haN9^>AQ196L$}!>#FAaN92yZtcPCv14oD z2^Y9E_Vy6_@5?3NP&+n0BqlQ0Rn{|HfQvO)tD|Q%fyseG`V2Dkbq4k{ewO_#ab=J2 z31P!ShfZ|tGiw)1FH3m*FnKFSyw}(RZV<%6%`D6N-Q9?{C5Gipl(S@mOHs5jZx-eGCm*KrxSo~uwtYZV07C4qijl8idz*4zNo>Ia;m-u>HOUfjpf+kEr zLMX-#Z)63z_th!C)@`4wjfE)KiF%2SOz72jAGLVX>{vJ~_V?#nJH6U{_gXtEqGQ5Q zRK=+{GJkW2a(R(?Fd$2CkBE(3oCGWW#6*Qd8VD$a4;?kGPn$VHm{zg$k3EuJp^-iW z?^#)`SMxnv;7(zoqed#$rcpRiIMlqyUwVXyk6e%#_s)V}`{bL=SvSK z4H2a1#o&GK%%(3Qys;*cQW6MDy)%b@Se@u?4;uQ{wHyE31apE>-q==pWseXFTK-ut zT!81DGDZHS0Z^zJR{;tg6AmGTaic=|iix~&POoW{D+j&%oIhpt>%;2s*ywz?NR3U1 zgF#CCJY^#n?uRQ^LJ>XQ?2TK_%8eddhU30I@|zQZ2F2{alm0yWKc@Vz6s#0$Za7@4 zL+q;0XhXln5%WV8F(`ENK4f~c&**bWrnfz1PNG6-ue)$%ztH0e=;cV@xBVZYtaFu7 zF%T;LonGQ-*~3J8%l^I8Rjk_8<8Lb>;$oxbhDRhOECpYSi(0Jc4c?jA5QSb8=PMRe zoIE~!MO5_s1qt!tizDKeMn}A(`50pPM)7Z}AbMUzWJ36OPerrc(>lPIHYzT5Dah0J zqsXsM0UztT|3%gHU3I1CeaagD_A*j$?1I9SO{gM|p4Pa}e0uwW#Q3PtKdUkqPg7h2 zD=zqY6ZLjQc(f;V@Y1Mxs1RuX9l>w`(9ObVOQHDKxTUZ%Wqi0It3JzC$hIUA&WAUf z`gGIYg8$YV_4fX#x_5Q?Jwy7xtQIyVY&=|EF2+mDKIMrCO8_&*4*~B=ikdqlDl!`H z(7i)6N6YvH5wX!R^FfH7=KnvsPT%76DaQXWXJ8eIs0eQT=@c+{oj47cJ$Y&ry3===6{`d%-!0ar5#1MfALAVB@>G;a;o#M|bf?f&Uz`_vwEy zFtX~+Y+iI6gx7l-+K74Bi^fIa2ny2lCV5>4@J6h|>&1eV9@*2BC>kX6oc}1kvUU60 zGHb4X84~~9E1|9J5hWoGR##IrjH7zSkIt5(CXVZIRZI6?YQ7;3<^&fPQS;v2KE_Xo zh?yS+gEL4Mo8;++3n3y8`g{5+2ev)=DMwyCih6eydvohqVexfFfk%Jih%X5>9lWJO zMvR>}b!K=Zj9He#Ol7NZLb4Axe6sP2O`ErD`+CRDUAy=G@Z-K;_WyeD@NY+s9zSvF z^w~eorKVj-zj*n|wd*%-W!%1d@BYI_kDq2{Wj}wBlbcsiSX@$CUh%4`y0)&qv8koC zt)sIWE-Ue4>g+uzaOj9J<0nm-J}Z09Y8QKc%(p|PnMq-*c!?CO<| zsG2$T_mc$;9Wi=b*yO1*W`)DMQ9ZM`p_D6vwmfF0NcG z{Ov?=9rb3Se_OmV@Z2BUf`68;k6hoD?gEGMTvGE&@mf?NN12dn3k%)s|x_zy@1>;+r^wv$8NXHtJmlUP}`ef>&3Ak60`gi9|xhM-@Lk(@gUJ z_Tjzp;lAqw&%^xn!}-rfN>~z$HtNFyZ(1s5Y21>&(x9hc%n==b^w=RG;lrl|O$Z%= zej1q=7Z;AP)fLfmdsf<2#My%a#|)VgI%MMTaQGX7Tjcc(MIZp=_3oz`6oEV}&P_3- zhAZa3-V#&X=pwmpgp|UgAV&uDd?&-30=R8Crsun6lHxmX>v@iNn-EiLIrN~VA0Y@l zmF?&f5V9GucyR`@7F2Okfd?-j; z30?TcPw{kbzZGM={2ylB@c(MF*T9U~pAC#?zcFyfI^m#O$zFpV+eHpq;r7{}{huBf z6msUqpbbC28dT~g4ESxHSwJ(#D_~1^Xu#O1a{}JeUK8N9d1FB8wH*O75A6@A4>%K$ zl5{3*{=>G$hZWOaO1*|nW&vKNE3W!_B^S;#qKnf8|! zvWW?{vRm_=WL^v1WS_70l1&)mvsmJB)d2F7unH`zsgKc9hOZjJR*B2IU)OF#A#XS`afi?si`vc zjtjE5yz$*0z^2)v`R9=(+h)<1WEe1xe!M49u`RG1__kEuJxXPm-SnKqG#nS4sj zxJ0NkYs8w2?ny1CZk7(C%GYCp4@;Q!VFt{p7DMLwcgD5f6n`?^x5-$ogJ%qV*Duk&p9maIYhcmBoLYc1u zU_rxeqnPrF(M*zTEVJqJag1};c*e{sjERq$$f*B3iK)n+%ygJcW!%S4W8&9OXKwsH zgVD&E$pm-JVy0SzGb00LGaVBnn1#`Em=BX8nSc-HGJ8LZV%BY%2lB%LA{!PkO>3f= z@0KiNKApCRxj%R@GuCDa!=*7yZB`6Ze|RZlx;B;x9kz^FqZY@U$cSTVHpDYpvIIuA zI)Q2XHjz0VxSU}MmNTErS1^b5S2FANuVkoC661Y7i7}L|Vs^peofrGBW>);TnmMPr zhS{@x4a3P?!!&rUWuiV^%M8h0%N)0d1wg(H~3JG0#lpjC_=wNm(vuI6LLc zy|b{u>O(nmrC83~YLGMTu&64u3=BT}hYtnfjSwvWygCKb0Kmu$F6Y1KZtr8od4bTJ-ZXKul*0pg!}f$+A257ZXb%0wH)Xt z^Y(ZkonEVsNQK|2urCdcr9qlBNSg-dq`|pq8$LZMGkJfzY_?6P>~hfOQa~#FPJ?}T zOac6j`|ud1!L)b|o{ME;nOGK%7f*hEGRF^gEFA3SP!fh))niBb;EjLJ+a;h z{EhqY7^cCrcn+S6d0`n?Hp+qJVmX*MmWi^Uj3^h%f#sqMC>zQQo zz${!iiMg|MD)Vj74CafXSs<)9Ww^jPI~x0%o)FT9aDL39dqf?I_7uVH0nVgyTLe5BXVU6W{Idi*E&J;saa2wWt`l?*c41ERb z9#_KJPt|f}Weu!PQ7dOI!TL~ay`1?2nv1QCa^}4zSQn~U&fEp8fHf>S0b5}mDIrX@ zBL_49rnSqN!vNYLXC?x^0b~Qrp}83cSPwV}C;)wGJ+78;w@NeToyRn?N}X1$WmmmcE!yjS_noCaREs!*s}uT%Z9UAvKVh&Uq6 z7EU+esdv`Ub`?QkJ>Rxd_i}ZipfSId^Q5AaUvAYb$d}X^HomHAZ&15?=dPA8yIW{o zpO>emt5v8JHmFz`)rsj3Svn1kwXOZVMURF4s**O1T9+0&;r&g|4~RTmGc6!EKwx=LG_ zuDDvg`-tPMkb;|}!>Xjq-p01pjZM$AY4wo9aUS zp?sTGgW5-Jg0zE{j+M==YPA9m|Ap9;7;8|s#WzNqhf%#mU8t)Vu5XLeMYsRY4&r-`k9S~ z4yW5yR;zxAxf)=e+V@={yd^PH+ezbIF6VOhZ? zz55&wlWOWnRc>qAnCjd3Tq;m&s}QNY;*`)f3vnlH%HXg2dX+p`4*wUc$vu*vA*^UEi3T`wMh7`{DIl__8E{7oKp$KU+T0 z(<0FUbdOSB~s@>hf;~LsY)NR$Zb?nTosA^4PdtPTd z;j0X6?XKa~Yl*t*#2qS)*pcB!zq?gnR+Lv=Z{^Y=wlW-}scYU<%InXwHLGj9mm_)d ztid;XKnu0iCSDeU1Pwl1%Q_EUQ%wu4xnA0)(`CSSYirW8c~pDXR*TnqG*xYA=h2%7 zOWn(@Bq7~meT|x$^1?>(Q;Xu9$_^9DJG`c6SoqU}TFLTq*W2P(uWHpR_7vonJ$a8Bv@o3ybc-!BPZb+?)SJJ`FR9CW z_?Ub7Uc*ZcM@3yzti^L{zEN|{OvC<8*Q3T3@1kd|dhXg+h`U?5O|`DokV=kbjcLse z;}`B(m(4B8GU^lDOUxb3%Qg4S7TxDH+Khx|0a8ILDHV+7c5Ah&*H)V5 zmDbo9s+)`Q#o{LY08`h_%!}>c3UiBYN;KQ;9yi)mx?e~x`a+U6$gQ*CKr>f&)AKR@ z#m|m6@%bl>_B2{Opz0Mlue91a8#{{ZRiAd{=;#*Hg7S{K8;wUg#n#ik#M;ib@?5j| zLKF4Denab28bo#~YUNFCrXoG#QXQc{!@9lIqVBr5s-?QMDN~e_`le*BlX`4b4_?J$~4P$TZQJjWhV8`W(94+%$%HDq4-`)S%#Z- z`4gMkr&`t)PbwRI1zFP?bM)%;Emf-9G_0v_#m_A|Ch7$e&79lKjog|lgN_alDln^S zsL{4jC9PdTRqZyP+=@HA$jj}wM0slMf^oJwdBQoi=`XnTg{7wTI$GUTFGYF+u9?`V z)mFpRkk**P^LYRTc&MU9W0*<_(3NvuX@<3ivm(O*=d9cRs(- z>D1)jWzetnY*E++L8+>7wWgXy{)dKR9h%?XmRFZe^hNo0)jE8h!Sh@Vo%%}| z=Uno&bUI2j#v8YkUGe@#dqu9XHZ^cHyKt>8R8n6rJl~q3VwmMpYoejsT-eA{dD+F$ zZ!6=fsF&9_RhjW!>PuTV<{Hj??bB_odPiDY3pLL@Yya+r=1~K)sv=2RwrY8n2e+O! ziwpGmcP;DOt2$gVPC1(!)bU6Ww^h_3qBY{Gu69l%dDUS*Vvxh&CgaY`^D6nbRV#}g zczF-7ojy}Ty`5-X)Dqv%ZflnexMta}P1dX>F%&j+Sb3_~(iiu18mm+5CH9YOYs|EH zO*-1S998}6wYiSYx^AuC?bY=$loa3F`J2@KVByPdroG+4;hAMap`K$4$3pEzy)n1ca9DS~yoT9DITKJ49*EnMWqwbpH zlEGFyxI4Jo(r`#tO?$B^?@}ShP~4Cs%Vg(>?$2`6vsbGjVqC*SKo{DPP3%jx{tF&c}ukP4NE;d~E_S9DKaCusyqSZ;P z+B8k9OZ0`>jka1{YLX1st|m80Rd8Xwxm`c4X7NbDh0G>1|1zG>ah2+J_Zu&s*L&YO z>%F4kPfQFn$S(QzBO%nTS&?~97d8%m|m1yR-361P@J1ojMT#l_k<>e9E zrml92=l%cCdoD3FdT`tJ>b=Y+-(l{eZpwLZUQ3;vDhSP}Y7{*BE%%SY?yU1|Pu0q6 z92-l#nk8KBOTjTM{k}YV)qzHI-@h7qoI-<+`?cn3`L4>$jN) zR-28mD{j&()lJiH%ImIb7Ta~W@|?6OHN5J?yRD(>tku-*YI#8=r=+v!yqZB{eRd|d zqQSDPa+Fh9=_9tgmJVZhdYzIoi(H*96AQQYto9c=RhdmHYMiceM_yZit%_NZ$mk}| z*ukbW+kBsCM@3Oq8&56SzQ*kPf(czV95vN)(YX7ZlG8`E@^jNXBo7U#UkA@c;TNXAP=7{niH5K}} z29gqg+Z?``%Pp~PSCNfnf3AVOt)a*(i`!~!_dtE zck(NQyVcbUMqY32?C5@}c2{g%RakAMUgv0dCR?Q4rmv;d){tK(ax7ER?5tJ4-jPo` zt4%!H2S2YAnCTk{Yp$NlymYp%-z;Ns+ttRQ8M?y!9C7yjit%Kv5eN%C9hn9UEX=rWLbLq}4s^PX(Y4ErOrh-<@##axYYfZGilCQr`b;#Ii$$2}T zCevU3^CV}1mXQDO+GBrlSz|#!F%k4D6&aMMwr1*9+i*>?_L)4l=4h1~2`YHnqVjxU z^`&Af$-vunAXtC>^PNt`5=5`(O=Hom(bcLdpOcE9eqq+DN1T}`W9UAw-PzAQFY zvoujpHQ}g=bhPxUtNkzVG;}Sh9zCexmT0dpb>OP{mb`SRQ4tOso_B*UDzQ9Rq0^$N zR@6!>y4pQzbZB|8mPVdQTWtlmPUpE^@Gdo{lKziu#>co@r`2g(wl+I0a34wsq-f zJGh7gFFzE`kO(g}s)pDZ=1Yu=XrWTWj+TutpI;ehB)M7U=%z!|2JGE+g}36Fr>|N~FtN6A zu;~slG|7L_@dxKoYnyI!fJ;S_opVj6c`a*kLudD>!A6Evt>>HUO)lG7X_;GRWm~BE z+|($(n_S;s-gwZr<#uCEQ{IWE1}>R5Q+Dc>)oPjyysWB`Lp_=sKUDEC;1=q03Q}#= z1ilqh^|~vnRh%rF>e{ab`%4VEicXiVl<2(Z*Q)ZcWYkMf@y&fIn_jiMYu?v3=`3y) z2}WcNZf!5UTiV%VQr*(2QDmj=VA}f3Ov^>rw^LYu&Dq(4{8+7fo!d}icd-6bt7^Yt zM>_b8Rqh!^LXT}!qSq;^=`hr`xKwq=ut{y0vAB~9)6it<*uS*bR(;8ltj;ZV)_B?7 zY*)jtzBoi*TYS>$h^+bKDBGtknT=;1vt)OF*J{r2mTK=PYHGQ8O=3`!VXGr*SJf=w zRc5Q+;_GJHS9^%ac(#YeQU^IYxzLnwCvIZC%Z6TH6{M z3kUg^+xH7I;hE*DRn%M9R}5@ws_kkQtDP=^kS=UdMnshxN=`eEy2=Pfy3XKrXBXIyWey!)*CqE5H@qq?S4$EKHV7jn(&tyFT` zO^Zrq84k(xH|VUms-0C`{)<@Wfr+7;Tsp-<{@lIHU0xcq%6u-F-N5&BsSoA)HrDp< z*QWPkppJdN;kp%KVYa}`LaSQ+jxMjvtEQb>I!bh_u$3L*SW{qGbN5B(puKkLZSHvYPb>_`xn!;yxEuIesI5oC37CX3V6jv98*gMP# zBK=nHtUR2U>nBp%KlYX%6Mj)>TYt31?t#rq4egseNvnYI(=<6z!YxiWP0et=|A%9P zV_G(`vAe~szAct$yzDT1Vx})JRkL%*stmk*r;AQ-&@Fphp8DdY<-GB7+u(;ZHKW5u z&ve-27tM!XstL$H@YdD%6q=NeU*Sm^0A*HcMpy@O_B!E+r=RTIe% z-R1p*y7`@%ReV!5t1GgAd(*oY3!(QN%}%)Ytg=z=8KhHR9`MYuuDISl*x%gB*w((< zq)<=of(|dINWIw7ru|;sOy~P`j$*GM{q&kk+(Hw*ocxM{TNasy&K;GKV7<9DKaOdu z%E)dG%4;#!;To1}ch#E^)v6L+MQN+fj}igrWQb>bZFRsCU)rG}a?`4JZEbqAwLho! zLc^ zSPc;uxHdO%sm@*Uta7@UjhE`Z+1(Azx#?`H{WQ~qg=Hnleq*0Uwq*zrO+LR#Q_izDnR2Z}JiMY^T%R_^w$rIXHOC;-)W4*iTYg`Yd+m%B)#3P@ z-Br=KdGWBi2}aU;JmKwEC7l{M8l5lo)heIWa3osBc_Ur&w2Xtao6F1fAL*NL2G)sA zKk+TOG`!pVY6)X}FVi?bK()HN>Xq}Wjzal%v!R2F9CF(CXJ#0?R2y*a>NmGc?*I5Q z6}j5p>aeo+I74+MEVuolNr`qF|6$exuCcsX2l_fIPP=At`Ns6>E7DVf`&W}wHEWX9 zIC{c+na(PiHP7103u~^F^V`J@X_+P$A643SIJs!KdCm-`g7QT;1KJ1c(hLAZ;K zIMH)I1Mh8UB*KiNO&oFHru`Pl>n}}uu{`;bJh?hqzMwhT%2mz_o0xns`JuVIU&3ZXDI$60*UYsXphy2cd*}Gj3 zu##59>wVw5U3q@?z2(ByN0r-yEu~)R9<(yO_xRp`0UveGS@=M?{iS{CpfPs`)aNU= zb2+J{mo|T}pwT4O0&)8$oFy;R>b|!E&bZ;F0k#?e$2)Ck*(k;?*Cq*S& zvSiO~U$iHQERm&9}Wogm>Or86_yo>)kA7{?hhsmJQX+v_n3 zgY}BPb$;1#yeBl+t!*I{vu{Wri)ZTXx(1Q>E>*F z+ms3CPf?yTjG0}RwsKQG0B?JFt>@ajT$qd z+BMpz>nnPG8%3Y8H@;omk8-6fqiZzw%?@MAB?gSEoI}j@k(595W_JvkyzV%@dqbGa z`0ar=d6Ywym~p))X74klJbD6CGy06`DhJBu=B(w+>V)u_l#wEscezeKIFNF&9OFE< z`D5gA$}#1FQ)6^LZb+h>(}k6g`qlWve#)WUSf7yXXDYKPCw61na>ph1E26x&GZXS_ zeV%^><*5E_cHf7yFMSl(_h4V1vUS&!ded<{Hi~TJ{eJq&5;^{_pzLb0PW`EC(i_eJe;28TEtZ9u@a?mfd-my1Z zkw0m=O&Vns3X&7wKjEFBY}1K}R|_)gUPzhuL7LOo3*{xn+b$Iq{)q2W_QmiOm zdaR-J+m7SeE6X%plNmIn59LZ#cJ;b$GHZuW*6Yhi>??S6ZIoEwiP@Ci{G`_m%BT?h z`og0&GEiJE!8*lWS9=~qxuh$b=++kIx`lF1gW#CSV~H1;loQ(o17j^8EV)2A=B2YTZ;aM3T6L+eGg ziRt@}r&BJj7E~21S<`Tqa&I-Jo8Lx5$6J)08wDz>d+j?^McL+xKzWw?yFN{nW8R6R zY=76-+5LS-`{SBKo@WDw4;o0Be7+WhmpNXyq>Mv?0rtVOBb_OKXb`p9#Vs=Np&U~n zFu$<#XlpcOQIlY$U_j@RO_bg4i8dzgUXgo{a#wj)@qUuoIhJx|jwm_omqC~Ac5qC2 z5B8n5K|twCT0iQYp#6IvA3EAg;DTsYQ*U|7Hou7^Oq(+qHOf7e*p;2FRQxo>_2&eE zF$=A?52l>*UQlpe(dgcAas5?M{PN&h)lrm!xJV2E(%m^QJFPie+m!jew3wqhFrEK#;a826h6PrXi3T$jW zd6j54Wu%CVE&A`cnknACP0$keHE_mh%Ga7i>jJCn>vAaPlnT@w!v`f5QRYc9C9W3Q zRwa~+n?&`u@0z@MPWeb5=0IkJaQ}PCwO!Z`cfK9>X{K!4jUA``P|sMpuA{%5>jblB zD;0NAri?d&uLg4uKki3aq{iIm2j;K_lx=DSOS^nj$uOf#?nf^TGmmW_Nx8CCV9uYo zd5e=+|5^~XasRcHS(J?>nTouysp&qH%_SJc$x8*<;gs*`F?-H$S#xh0Gz_-boTT@9n=as;`v_;GLE#<^c%;y{Ct8%|mj_SkylHd_% zCH1kRKa&laei>22E+|nZzh7<3mTnr;pYqT_jJEQkePx3ve^F;@+!q8dHm7_|oz+!Y z+1%frvTN}Ll^{`0QtN+#t%De{AEhFp9<8LUZ3}Ch5*s*uMQZ`m&2ma2N z`zBT2(SK$pto;6WZ%tG>IHn?$&3-t(B~+8vJ8H4}US?Qj8&OUf$olm3Iwd2ZT-=Y* zZF=tGF@`dph`R4d5?-E0xx|<~8&|%M??w5V7GrV9a`?e8%5FU7TSPx?o#kRyW6et> zgN|*WTq(!qS%>wp*-km!j^*vG9{TtoWu6SPCHT$7<) zbus0=J=ya^mBt?^r);dl6gg>BgubDCz>(ds>_`{;Cdy9)?D@UEd0H|J9sQL(klAAN zSyN7pGWmPR!9iBHS(~z(GRwp@xU4nx)Dy~~gPE;|OI8@Zrd+AP zb~fAvXPDzNW*D z*qEAVUqX4i1M`%3R5hfAvP~bh;Pn$;+9%4PJ(=t$k!PPue(LCtFFK6s=Nm5!R4Jnq z!*{Vfv1|b4VpaCEzIxv>Q!y*C%6UaY9Y#@(c_nJvDEfAGGG#YCcAKfoN^=j&-@=%U zCNfuZ!zlBHv&%Ba-*Z_Z-u{IkEP40IhD6Fy`fSc~5)GgTu&V-|k(^s{3Ol%na3{+C z{v@UoH>1TA&v5_H2uJd&d7yVVBK={Tm?9xR`Wo3Lg7^|Ae{KOCz(9O(<$u+1W$ijn zNyY$@cgr%K2_Q248yI_uDQd6NlZLKX?hynF3UCXF$F z*3p8i__>Vi!Cd&Wru;tvspp&hKMy}w5ErH< z|IfwG73~+}zjsE*Rm#175AMb?xEOHa8~=HV`TXxLrZHaj_8q#ZKiBz)bxVG(3li(n zf36D@>xzD^nG4L0b#_13%@^wef3EWr>ym%2a~JDGKi7GRbya`W znUZ?~Iajshoc6fGo!yQvhN;wcni63u6q@i&zP}rdvGaGDBINVATZS+q+?|8~BSrT1 zq|m}WFfhc^Jt8E$y@cCs`}H!1_@ll|_(C$C>Cbx`8Dtw26cRjUya(UDUC*^;=YMa@ z{J*z_bn{=@LQ4Md{pCOVUidfH3;*hw6mX8YHap*K@4ogg)}QyE-{1U_6aHh1NrBjJ z#((zf`8U7h#Q*4*6cE3*pAJgMKUJ;l`0;|uixQ;i+^`ESadR!le%%K`(;=L55S!XBQZv*60)z1ppkSNuls(3{z(ng zS|3E?u$8boZ-kvMNf1+=P%^4dhzFZ2FeTOkI~y#pUbqT+Us-(VZ-w%@2KDK;vENz}lG1H3T{Z%j zOlpxbu^i`@nm~uiL%)Fc*z;vBhV>_*Jw6toZf##INz}x=0ZVW{xCzFF3!!Q?3a3@B zAWwZ4j^gAE96hld{a${AW{%1UrdI1=;RZ$eHl9d}c+Aa&p)<}6%}v`evY7sO%R{3smXFbg3MSr{JhM8m~G zB&>K3om^kI6xgGn)C_tVcW}u)0ZP{wqKl3SlpJ;-e`Y?eUADu7Q=3REt9slUbrkwz zs!7^>*`|gTTLFWe$m5b$z469fABhB46YL@JhD6n}NZ=2|=LicJOKPB7*G?EGtncA4uVR0z{Jr6v&S!hQ`kM&PYs5=Y%UBM{h{J>AG*@J;M&C*SyqqnD)KVce(i}d z0ZY+W_Z+tR>*Gq%5gb*Sio|F05LX(H!Qsy6l70aTrIS%_9167P;#F7%d@hZFS0#gO zWwA&bu??e=ThVRJ2Jmgmkz}z8WuY6;^Gpq7Dy*P7d=Tcu?8U5@&FG<+gzmK^2#h(7 z$8FW0K_|^i8{j<8O~)j*b$7E=_>p;+@Euwha;^Vj=tC69(CAKoCC_7Fp8h%2P#2 z-fT1`<>SiHad0ZwkAuT+;6jF-q*8OaG@T0n=5cQ#uz>uKA}sYDw?#UP+HX&%x~$K z-scyX-H?UT$d^#QkPcJr)A(?xHzs;#;7;y-$dBlb*-$@PnXE?4Ln1Ybt zXL$dbgryrh1No26;E>NbMBciE+nxL3WSt>4q~;>;=t8VzGii4pv3$+BWD}OT*pQ6b8N4U;_J!e4dWum!M#5 z@wEW|;%uyX=m_HqHC#0ug@NwFa6R-Uj0>}IF|d_{w%!NHz$(lt+Y8N*(eO~ZgR^s1 zA=G^g0;W|Wb#f;-y9`Ia`)6QUmk;G&AzY2Cu-YgSeNW|)@MdO^Ig^f8C&@kPvnGD= zuYzvdLUfggA@_AdOuVrdy#1;8ZQorCag{^X*O5?sREVV)im~HyE)Mr(QLt|XWaiC* zkxNhLlE8AyRX*UU^ctwhdts|>0@hwA$D>vQ1PuHg(eXneS^o`ZFYbolyonfVkb#N$ zvtal|gom?I&~SANx=ly`&+-7$rwgGn;v{0sx1fmE31MYxaJ~F@Ty$&11aA_iN;&`= zP8`9hoMIA2%@O^Y6|f~d4{1_XWcd3qNIi*0rF{{c^qcUY;2LV{ZL!3w96P*9PQ{;tt!0;G`=!V&n=1ySLD=9trpSwa{;UiJAxX z&{|S}kWIrNQ+XL}4-*hP?-@?CUcqLWTr6>oK)}&cxDmVy*5T2(qBswqZ)HM%eg#fn zKS#nFPQtTO-4JnZ0IHX|A);g*x~UGvie6o@%qJP0^wqFuaU@z>FJPMedz6yz?l+~% zSby#;^0&2spP`Go;5;N>HbY6qG-PF*#;qa+D8(BhWcpAHo)(YPo6qrpcNPJ255d}C zClrN6Xq6v}rwz^6XcdHKYX;-xy;W$*%EbG3w_!BwI)+%d!(7u2eM+xkMT;Do$IinL zjS@`BS_P-n4VbD`1Ot~R$hq6uY z^bWPIMJSu=2H%Z4kYxHE*L!BeeZ~$voi4(p*efWp?t!u}M;L09;drlKp*h$AGwUCs zba4uHPtC!^HBFc%)q?6p#}Kb&2J@p@@ZJ0bF13fSQpX$xH9Ih=TRKurPa^Z70{kT% z;eF}@md71L-1u$ydfN<|Nxva_PCwMa21y3U^;rn_dzU`{O+>{;co6_ zbiaHHk7pgj=*w%cdXxt=*H~fjqGa@NUkiir(TEw`8>22NAxLDh!&j$;V+wcZ1Hs@Gt<#RIY0g3Ea?>|hD1RPOR zROC>STakEY+)AEXaf>3l%aM8sIcf6CUsj%!%Sw@zJfyg7xGin#E=b60ez$=fw*eQ& zgv3eXie))(@~}O8Q9_=CJhweVa@DS!^Y)c&`sZUtEdZq3C^ zA$5Clh^7beNAiB{VOH8#vg9`qS;(6FQzDjaa+ICD!wm9}a!P~+H%ld%@zp1U+avd!VZc*h4oSC38cOXYBo~mxEqh7MwVj*# zfg2{SN)m}yMc~n3=dbyK;OA+pY-#h(5$N#>af40sp7#_rZ z`!Va1 z&d5`d$e@3?(8xw)8BEW|0Ah=MlR#o6*T_du61G)b-W|3rB$wkp<=m~OwF +* Peter Schwabe +* Sjaak Smetsers +* Tanja Lange +* Wesley Janssen + + +[Poly1305-donna](https://github.com/floodyberry/poly1305-donna) +-------------------------------------------------------------- + +* Andrew Moon (@floodyberry) diff --git a/node_modules/tweetnacl/CHANGELOG.md b/node_modules/tweetnacl/CHANGELOG.md new file mode 100644 index 0000000..d1eba8c --- /dev/null +++ b/node_modules/tweetnacl/CHANGELOG.md @@ -0,0 +1,283 @@ +TweetNaCl.js Changelog +====================== + +v1.0.3 +------ + +***IMPORTANT BUG FIX***. Due to a bug in calculating carry in +modulo reduction that used bit operations on integers larger than +32 bits, `nacl.sign` or `nacl.sign.detached` could have created +incorrect signatures. + +This only affects signing, not verification. + +Thanks to @valerini on GitHub for finding and reporting the bug. + + +v1.0.2 +------ + +Exported more internal undocumented functions for +third-party projects that rely on low-level interface, +(something users of TweetNaCl shouldn't care about). + + +v1.0.1 +------ + +Updated documentation and typings. + + +v1.0.0 +------ + +No code changes from v1.0.0-rc.1. + + +v1.0.0-rc.1 +----------- + +* **IMPORTANT!** In previous versions, `nacl.secretbox.open`, `nacl.box.open`, + and `nacl.box.after` returned `false` when opening failed (for example, when + using incorrect key, nonce, or when input was maliciously or accidentally + modified after encryption). This version instead returns `null`. + + The usual way to check for this condition: + + `if (!result) { ... }` + + is correct and will continue to work. + + However, direct comparison with `false`: + + `if (result == false) { ... }` + + it will no longer work and **will not detect failure**. Please check + your code for this condition. + + (`nacl.sign.open` always returned `null`, so it is not affected.) + + +* Arguments type check now uses `instanceof Uint8Array` instead of `Object.prototype.toString`. +* Removed deprecation checks for `nacl.util` (moved to a + [separate package](https://github.com/dchest/tweetnacl-util-js) in v0.14.0). +* Removed deprecation checks for the old signature API (changed in v0.10.0). +* Improved benchmarking. + +v0.14.5 +------- + +* Fixed incomplete return types in TypeScript typings. +* Replaced COPYING.txt with LICENSE file, which now has public domain dedication + text from The Unlicense. License fields in package.json and bower.json have + been set to "Unlicense". The project was and will be in the public domain -- + this change just makes it easier for automated tools to know about this fact by + using the widely recognized and SPDX-compatible template for public domain + dedication. + + +v0.14.4 +------- + +* Added TypeScript type definitions (contributed by @AndSDev). +* Improved benchmarking code. + + +v0.14.3 +------- + +Fixed a bug in the fast version of Poly1305 and brought it back. + +Thanks to @floodyberry for promptly responding and fixing the original C code: + +> "The issue was not properly detecting if st->h was >= 2^130 - 5, coupled with +> [testing mistake] not catching the failure. The chance of the bug affecting +> anything in the real world is essentially zero luckily, but it's good to have +> it fixed." + +https://github.com/floodyberry/poly1305-donna/issues/2#issuecomment-202698577 + + +v0.14.2 +------- + +Switched Poly1305 fast version back to original (slow) version due to a bug. + + +v0.14.1 +------- + +No code changes, just tweaked packaging and added COPYING.txt. + + +v0.14.0 +------- + +* **Breaking change!** All functions from `nacl.util` have been removed. These + functions are no longer available: + + nacl.util.decodeUTF8 + nacl.util.encodeUTF8 + nacl.util.decodeBase64 + nacl.util.encodeBase64 + + If want to continue using them, you can include + package: + + + + + or + + var nacl = require('tweetnacl'); + nacl.util = require('tweetnacl-util'); + + However it is recommended to use better packages that have wider + compatibility and better performance. Functions from `nacl.util` were never + intended to be robust solution for string conversion and were included for + convenience: cryptography library is not the right place for them. + + Currently calling these functions will throw error pointing to + `tweetnacl-util-js` (in the next version this error message will be removed). + +* Improved detection of available random number generators, making it possible + to use `nacl.randomBytes` and related functions in Web Workers without + changes. + +* Changes to testing (see README). + + +v0.13.3 +------- + +No code changes. + +* Reverted license field in package.json to "Public domain". + +* Fixed typo in README. + + +v0.13.2 +------- + +* Fixed undefined variable bug in fast version of Poly1305. No worries, this + bug was *never* triggered. + +* Specified CC0 public domain dedication. + +* Updated development dependencies. + + +v0.13.1 +------- + +* Exclude `crypto` and `buffer` modules from browserify builds. + + +v0.13.0 +------- + +* Made `nacl-fast` the default version in NPM package. Now + `require("tweetnacl")` will use fast version; to get the original version, + use `require("tweetnacl/nacl.js")`. + +* Cleanup temporary array after generating random bytes. + + +v0.12.2 +------- + +* Improved performance of curve operations, making `nacl.scalarMult`, `nacl.box`, + `nacl.sign` and related functions up to 3x faster in `nacl-fast` version. + + +v0.12.1 +------- + +* Significantly improved performance of Salsa20 (~1.5x faster) and + Poly1305 (~3.5x faster) in `nacl-fast` version. + + +v0.12.0 +------- + +* Instead of using the given secret key directly, TweetNaCl.js now copies it to + a new array in `nacl.box.keyPair.fromSecretKey` and + `nacl.sign.keyPair.fromSecretKey`. + + +v0.11.2 +------- + +* Added new constant: `nacl.sign.seedLength`. + + +v0.11.1 +------- + +* Even faster hash for both short and long inputs (in `nacl-fast`). + + +v0.11.0 +------- + +* Implement `nacl.sign.keyPair.fromSeed` to enable creation of sign key pairs + deterministically from a 32-byte seed. (It behaves like + [libsodium's](http://doc.libsodium.org/public-key_cryptography/public-key_signatures.html) + `crypto_sign_seed_keypair`: the seed becomes a secret part of the secret key.) + +* Fast version now has an improved hash implementation that is 2x-5x faster. + +* Fixed benchmarks, which may have produced incorrect measurements. + + +v0.10.1 +------- + +* Exported undocumented `nacl.lowlevel.crypto_core_hsalsa20`. + + +v0.10.0 +------- + +* **Signature API breaking change!** `nacl.sign` and `nacl.sign.open` now deal + with signed messages, and new `nacl.sign.detached` and + `nacl.sign.detached.verify` are available. + + Previously, `nacl.sign` returned a signature, and `nacl.sign.open` accepted a + message and "detached" signature. This was unlike NaCl's API, which dealt with + signed messages (concatenation of signature and message). + + The new API is: + + nacl.sign(message, secretKey) -> signedMessage + nacl.sign.open(signedMessage, publicKey) -> message | null + + Since detached signatures are common, two new API functions were introduced: + + nacl.sign.detached(message, secretKey) -> signature + nacl.sign.detached.verify(message, signature, publicKey) -> true | false + + (Note that it's `verify`, not `open`, and it returns a boolean value, unlike + `open`, which returns an "unsigned" message.) + +* NPM package now comes without `test` directory to keep it small. + + +v0.9.2 +------ + +* Improved documentation. +* Fast version: increased theoretical message size limit from 2^32-1 to 2^52 + bytes in Poly1305 (and thus, secretbox and box). However this has no impact + in practice since JavaScript arrays or ArrayBuffers are limited to 32-bit + indexes, and most implementations won't allocate more than a gigabyte or so. + (Obviously, there are no tests for the correctness of implementation.) Also, + it's not recommended to use messages that large without splitting them into + smaller packets anyway. + + +v0.9.1 +------ + +* Initial release diff --git a/node_modules/tweetnacl/LICENSE b/node_modules/tweetnacl/LICENSE new file mode 100644 index 0000000..cf1ab25 --- /dev/null +++ b/node_modules/tweetnacl/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +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 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. + +For more information, please refer to diff --git a/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md b/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..a8eb4a9 --- /dev/null +++ b/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,20 @@ +# Important! + +If your contribution is not trivial (not a typo fix, etc.), we can only accept +it if you dedicate your copyright for the contribution to the public domain. +Make sure you understand what it means (see http://unlicense.org/)! If you +agree, please add yourself to AUTHORS.md file, and include the following text +to your pull request description or a comment in it: + +------------------------------------------------------------------------------ + + I dedicate any and all copyright interest in this software to the + public domain. I make this dedication for the benefit of the public at + large and to the detriment of my heirs and successors. I intend this + dedication to be an overt act of relinquishment in perpetuity of all + present and future rights to this software under copyright law. + + Anyone is free to copy, modify, publish, use, compile, sell, or + distribute this software, either in source code form or as a compiled + binary, for any purpose, commercial or non-commercial, and by any + means. diff --git a/node_modules/tweetnacl/README.md b/node_modules/tweetnacl/README.md new file mode 100644 index 0000000..022bf6b --- /dev/null +++ b/node_modules/tweetnacl/README.md @@ -0,0 +1,494 @@ +TweetNaCl.js +============ + +Port of [TweetNaCl](http://tweetnacl.cr.yp.to) / [NaCl](http://nacl.cr.yp.to/) +to JavaScript for modern browsers and Node.js. Public domain. + +[![Build Status](https://travis-ci.org/dchest/tweetnacl-js.svg?branch=master) +](https://travis-ci.org/dchest/tweetnacl-js) + +Demo: + +Documentation +============= + +* [Overview](#overview) +* [Audits](#audits) +* [Installation](#installation) +* [Examples](#examples) +* [Usage](#usage) + * [Public-key authenticated encryption (box)](#public-key-authenticated-encryption-box) + * [Secret-key authenticated encryption (secretbox)](#secret-key-authenticated-encryption-secretbox) + * [Scalar multiplication](#scalar-multiplication) + * [Signatures](#signatures) + * [Hashing](#hashing) + * [Random bytes generation](#random-bytes-generation) + * [Constant-time comparison](#constant-time-comparison) +* [System requirements](#system-requirements) +* [Development and testing](#development-and-testing) +* [Benchmarks](#benchmarks) +* [Contributors](#contributors) +* [Who uses it](#who-uses-it) + + +Overview +-------- + +The primary goal of this project is to produce a translation of TweetNaCl to +JavaScript which is as close as possible to the original C implementation, plus +a thin layer of idiomatic high-level API on top of it. + +There are two versions, you can use either of them: + +* `nacl.js` is the port of TweetNaCl with minimum differences from the + original + high-level API. + +* `nacl-fast.js` is like `nacl.js`, but with some functions replaced with + faster versions. (Used by default when importing NPM package.) + + +Audits +------ + +TweetNaCl.js has been audited by [Cure53](https://cure53.de/) in January-February +2017 (audit was sponsored by [Deletype](https://deletype.com)): + +> The overall outcome of this audit signals a particularly positive assessment +> for TweetNaCl-js, as the testing team was unable to find any security +> problems in the library. It has to be noted that this is an exceptionally +> rare result of a source code audit for any project and must be seen as a true +> testament to a development proceeding with security at its core. +> +> To reiterate, the TweetNaCl-js project, the source code was found to be +> bug-free at this point. +> +> [...] +> +> In sum, the testing team is happy to recommend the TweetNaCl-js project as +> likely one of the safer and more secure cryptographic tools among its +> competition. + +[Read full audit report](https://cure53.de/tweetnacl.pdf) + + +Installation +------------ + +You can install TweetNaCl.js via a package manager: + +[Yarn](https://yarnpkg.com/): + + $ yarn add tweetnacl + +[NPM](https://www.npmjs.org/): + + $ npm install tweetnacl + +or [download source code](https://github.com/dchest/tweetnacl-js/releases). + + +Examples +-------- +You can find usage examples in our [wiki](https://github.com/dchest/tweetnacl-js/wiki/Examples). + + +Usage +----- + +All API functions accept and return bytes as `Uint8Array`s. If you need to +encode or decode strings, use functions from + or one of the more robust codec +packages. + +In Node.js v4 and later `Buffer` objects are backed by `Uint8Array`s, so you +can freely pass them to TweetNaCl.js functions as arguments. The returned +objects are still `Uint8Array`s, so if you need `Buffer`s, you'll have to +convert them manually; make sure to convert using copying: `Buffer.from(array)` +(or `new Buffer(array)` in Node.js v4 or earlier), instead of sharing: +`Buffer.from(array.buffer)` (or `new Buffer(array.buffer)` Node 4 or earlier), +because some functions return subarrays of their buffers. + + +### Public-key authenticated encryption (box) + +Implements *x25519-xsalsa20-poly1305*. + +#### nacl.box.keyPair() + +Generates a new random key pair for box and returns it as an object with +`publicKey` and `secretKey` members: + + { + publicKey: ..., // Uint8Array with 32-byte public key + secretKey: ... // Uint8Array with 32-byte secret key + } + + +#### nacl.box.keyPair.fromSecretKey(secretKey) + +Returns a key pair for box with public key corresponding to the given secret +key. + +#### nacl.box(message, nonce, theirPublicKey, mySecretKey) + +Encrypts and authenticates message using peer's public key, our secret key, and +the given nonce, which must be unique for each distinct message for a key pair. + +Returns an encrypted and authenticated message, which is +`nacl.box.overheadLength` longer than the original message. + +#### nacl.box.open(box, nonce, theirPublicKey, mySecretKey) + +Authenticates and decrypts the given box with peer's public key, our secret +key, and the given nonce. + +Returns the original message, or `null` if authentication fails. + +#### nacl.box.before(theirPublicKey, mySecretKey) + +Returns a precomputed shared key which can be used in `nacl.box.after` and +`nacl.box.open.after`. + +#### nacl.box.after(message, nonce, sharedKey) + +Same as `nacl.box`, but uses a shared key precomputed with `nacl.box.before`. + +#### nacl.box.open.after(box, nonce, sharedKey) + +Same as `nacl.box.open`, but uses a shared key precomputed with `nacl.box.before`. + +#### Constants + +##### nacl.box.publicKeyLength = 32 + +Length of public key in bytes. + +##### nacl.box.secretKeyLength = 32 + +Length of secret key in bytes. + +##### nacl.box.sharedKeyLength = 32 + +Length of precomputed shared key in bytes. + +##### nacl.box.nonceLength = 24 + +Length of nonce in bytes. + +##### nacl.box.overheadLength = 16 + +Length of overhead added to box compared to original message. + + +### Secret-key authenticated encryption (secretbox) + +Implements *xsalsa20-poly1305*. + +#### nacl.secretbox(message, nonce, key) + +Encrypts and authenticates message using the key and the nonce. The nonce must +be unique for each distinct message for this key. + +Returns an encrypted and authenticated message, which is +`nacl.secretbox.overheadLength` longer than the original message. + +#### nacl.secretbox.open(box, nonce, key) + +Authenticates and decrypts the given secret box using the key and the nonce. + +Returns the original message, or `null` if authentication fails. + +#### Constants + +##### nacl.secretbox.keyLength = 32 + +Length of key in bytes. + +##### nacl.secretbox.nonceLength = 24 + +Length of nonce in bytes. + +##### nacl.secretbox.overheadLength = 16 + +Length of overhead added to secret box compared to original message. + + +### Scalar multiplication + +Implements *x25519*. + +#### nacl.scalarMult(n, p) + +Multiplies an integer `n` by a group element `p` and returns the resulting +group element. + +#### nacl.scalarMult.base(n) + +Multiplies an integer `n` by a standard group element and returns the resulting +group element. + +#### Constants + +##### nacl.scalarMult.scalarLength = 32 + +Length of scalar in bytes. + +##### nacl.scalarMult.groupElementLength = 32 + +Length of group element in bytes. + + +### Signatures + +Implements [ed25519](http://ed25519.cr.yp.to). + +#### nacl.sign.keyPair() + +Generates new random key pair for signing and returns it as an object with +`publicKey` and `secretKey` members: + + { + publicKey: ..., // Uint8Array with 32-byte public key + secretKey: ... // Uint8Array with 64-byte secret key + } + +#### nacl.sign.keyPair.fromSecretKey(secretKey) + +Returns a signing key pair with public key corresponding to the given +64-byte secret key. The secret key must have been generated by +`nacl.sign.keyPair` or `nacl.sign.keyPair.fromSeed`. + +#### nacl.sign.keyPair.fromSeed(seed) + +Returns a new signing key pair generated deterministically from a 32-byte seed. +The seed must contain enough entropy to be secure. This method is not +recommended for general use: instead, use `nacl.sign.keyPair` to generate a new +key pair from a random seed. + +#### nacl.sign(message, secretKey) + +Signs the message using the secret key and returns a signed message. + +#### nacl.sign.open(signedMessage, publicKey) + +Verifies the signed message and returns the message without signature. + +Returns `null` if verification failed. + +#### nacl.sign.detached(message, secretKey) + +Signs the message using the secret key and returns a signature. + +#### nacl.sign.detached.verify(message, signature, publicKey) + +Verifies the signature for the message and returns `true` if verification +succeeded or `false` if it failed. + +#### Constants + +##### nacl.sign.publicKeyLength = 32 + +Length of signing public key in bytes. + +##### nacl.sign.secretKeyLength = 64 + +Length of signing secret key in bytes. + +##### nacl.sign.seedLength = 32 + +Length of seed for `nacl.sign.keyPair.fromSeed` in bytes. + +##### nacl.sign.signatureLength = 64 + +Length of signature in bytes. + + +### Hashing + +Implements *SHA-512*. + +#### nacl.hash(message) + +Returns SHA-512 hash of the message. + +#### Constants + +##### nacl.hash.hashLength = 64 + +Length of hash in bytes. + + +### Random bytes generation + +#### nacl.randomBytes(length) + +Returns a `Uint8Array` of the given length containing random bytes of +cryptographic quality. + +**Implementation note** + +TweetNaCl.js uses the following methods to generate random bytes, +depending on the platform it runs on: + +* `window.crypto.getRandomValues` (WebCrypto standard) +* `window.msCrypto.getRandomValues` (Internet Explorer 11) +* `crypto.randomBytes` (Node.js) + +If the platform doesn't provide a suitable PRNG, the following functions, +which require random numbers, will throw exception: + +* `nacl.randomBytes` +* `nacl.box.keyPair` +* `nacl.sign.keyPair` + +Other functions are deterministic and will continue working. + +If a platform you are targeting doesn't implement secure random number +generator, but you somehow have a cryptographically-strong source of entropy +(not `Math.random`!), and you know what you are doing, you can plug it into +TweetNaCl.js like this: + + nacl.setPRNG(function(x, n) { + // ... copy n random bytes into x ... + }); + +Note that `nacl.setPRNG` *completely replaces* internal random byte generator +with the one provided. + + +### Constant-time comparison + +#### nacl.verify(x, y) + +Compares `x` and `y` in constant time and returns `true` if their lengths are +non-zero and equal, and their contents are equal. + +Returns `false` if either of the arguments has zero length, or arguments have +different lengths, or their contents differ. + + +System requirements +------------------- + +TweetNaCl.js supports modern browsers that have a cryptographically secure +pseudorandom number generator and typed arrays, including the latest versions +of: + +* Chrome +* Firefox +* Safari (Mac, iOS) +* Internet Explorer 11 + +Other systems: + +* Node.js + + +Development and testing +------------------------ + +Install NPM modules needed for development: + + $ npm install + +To build minified versions: + + $ npm run build + +Tests use minified version, so make sure to rebuild it every time you change +`nacl.js` or `nacl-fast.js`. + +### Testing + +To run tests in Node.js: + + $ npm run test-node + +By default all tests described here work on `nacl.min.js`. To test other +versions, set environment variable `NACL_SRC` to the file name you want to test. +For example, the following command will test fast minified version: + + $ NACL_SRC=nacl-fast.min.js npm run test-node + +To run full suite of tests in Node.js, including comparing outputs of +JavaScript port to outputs of the original C version: + + $ npm run test-node-all + +To prepare tests for browsers: + + $ npm run build-test-browser + +and then open `test/browser/test.html` (or `test/browser/test-fast.html`) to +run them. + +To run tests in both Node and Electron: + + $ npm test + +### Benchmarking + +To run benchmarks in Node.js: + + $ npm run bench + $ NACL_SRC=nacl-fast.min.js npm run bench + +To run benchmarks in a browser, open `test/benchmark/bench.html` (or +`test/benchmark/bench-fast.html`). + + +Benchmarks +---------- + +For reference, here are benchmarks from MacBook Pro (Retina, 13-inch, Mid 2014) +laptop with 2.6 GHz Intel Core i5 CPU (Intel) in Chrome 53/OS X and Xiaomi Redmi +Note 3 smartphone with 1.8 GHz Qualcomm Snapdragon 650 64-bit CPU (ARM) in +Chrome 52/Android: + +| | nacl.js Intel | nacl-fast.js Intel | nacl.js ARM | nacl-fast.js ARM | +| ------------- |:-------------:|:-------------------:|:-------------:|:-----------------:| +| salsa20 | 1.3 MB/s | 128 MB/s | 0.4 MB/s | 43 MB/s | +| poly1305 | 13 MB/s | 171 MB/s | 4 MB/s | 52 MB/s | +| hash | 4 MB/s | 34 MB/s | 0.9 MB/s | 12 MB/s | +| secretbox 1K | 1113 op/s | 57583 op/s | 334 op/s | 14227 op/s | +| box 1K | 145 op/s | 718 op/s | 37 op/s | 368 op/s | +| scalarMult | 171 op/s | 733 op/s | 56 op/s | 380 op/s | +| sign | 77 op/s | 200 op/s | 20 op/s | 61 op/s | +| sign.open | 39 op/s | 102 op/s | 11 op/s | 31 op/s | + +(You can run benchmarks on your devices by clicking on the links at the bottom +of the [home page](https://tweetnacl.js.org)). + +In short, with *nacl-fast.js* and 1024-byte messages you can expect to encrypt and +authenticate more than 57000 messages per second on a typical laptop or more than +14000 messages per second on a $170 smartphone, sign about 200 and verify 100 +messages per second on a laptop or 60 and 30 messages per second on a smartphone, +per CPU core (with Web Workers you can do these operations in parallel), +which is good enough for most applications. + + +Contributors +------------ + +See AUTHORS.md file. + + +Third-party libraries based on TweetNaCl.js +------------------------------------------- + +* [forward-secrecy](https://github.com/alax/forward-secrecy) — Axolotl ratchet implementation +* [nacl-stream](https://github.com/dchest/nacl-stream-js) - streaming encryption +* [tweetnacl-auth-js](https://github.com/dchest/tweetnacl-auth-js) — implementation of [`crypto_auth`](http://nacl.cr.yp.to/auth.html) +* [tweetnacl-sealed-box](https://github.com/whs/tweetnacl-sealed-box) — implementation of [`sealed boxes`](https://download.libsodium.org/doc/public-key_cryptography/sealed_boxes.html) +* [chloride](https://github.com/dominictarr/chloride) - unified API for various NaCl modules + + +Who uses it +----------- + +Some notable users of TweetNaCl.js: + +* [GitHub](https://github.com) +* [MEGA](https://github.com/meganz/webclient) +* [Stellar](https://www.stellar.org/) +* [miniLock](https://github.com/kaepora/miniLock) diff --git a/node_modules/tweetnacl/nacl-fast.js b/node_modules/tweetnacl/nacl-fast.js new file mode 100644 index 0000000..7ea5fb5 --- /dev/null +++ b/node_modules/tweetnacl/nacl-fast.js @@ -0,0 +1,2391 @@ +(function(nacl) { +'use strict'; + +// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri. +// Public domain. +// +// Implementation derived from TweetNaCl version 20140427. +// See for details: http://tweetnacl.cr.yp.to/ + +var gf = function(init) { + var i, r = new Float64Array(16); + if (init) for (i = 0; i < init.length; i++) r[i] = init[i]; + return r; +}; + +// Pluggable, initialized in high-level API below. +var randombytes = function(/* x, n */) { throw new Error('no PRNG'); }; + +var _0 = new Uint8Array(16); +var _9 = new Uint8Array(32); _9[0] = 9; + +var gf0 = gf(), + gf1 = gf([1]), + _121665 = gf([0xdb41, 1]), + D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]), + D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]), + X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]), + Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]), + I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]); + +function ts64(x, i, h, l) { + x[i] = (h >> 24) & 0xff; + x[i+1] = (h >> 16) & 0xff; + x[i+2] = (h >> 8) & 0xff; + x[i+3] = h & 0xff; + x[i+4] = (l >> 24) & 0xff; + x[i+5] = (l >> 16) & 0xff; + x[i+6] = (l >> 8) & 0xff; + x[i+7] = l & 0xff; +} + +function vn(x, xi, y, yi, n) { + var i,d = 0; + for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i]; + return (1 & ((d - 1) >>> 8)) - 1; +} + +function crypto_verify_16(x, xi, y, yi) { + return vn(x,xi,y,yi,16); +} + +function crypto_verify_32(x, xi, y, yi) { + return vn(x,xi,y,yi,32); +} + +function core_salsa20(o, p, k, c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, + j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, + j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, + j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, + j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, + j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, + j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, + j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; + + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u; + + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0; + x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4 | 0; + x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x1 | 0; + x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9 | 0; + x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x6 | 0; + x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14 | 0; + x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x11 | 0; + x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3 | 0; + x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7 | 0; + x15 ^= u<<18 | u>>>(32-18); + + u = x0 + x3 | 0; + x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1 | 0; + x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x4 | 0; + x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6 | 0; + x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x9 | 0; + x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11 | 0; + x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x14 | 0; + x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12 | 0; + x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13 | 0; + x15 ^= u<<18 | u>>>(32-18); + } + x0 = x0 + j0 | 0; + x1 = x1 + j1 | 0; + x2 = x2 + j2 | 0; + x3 = x3 + j3 | 0; + x4 = x4 + j4 | 0; + x5 = x5 + j5 | 0; + x6 = x6 + j6 | 0; + x7 = x7 + j7 | 0; + x8 = x8 + j8 | 0; + x9 = x9 + j9 | 0; + x10 = x10 + j10 | 0; + x11 = x11 + j11 | 0; + x12 = x12 + j12 | 0; + x13 = x13 + j13 | 0; + x14 = x14 + j14 | 0; + x15 = x15 + j15 | 0; + + o[ 0] = x0 >>> 0 & 0xff; + o[ 1] = x0 >>> 8 & 0xff; + o[ 2] = x0 >>> 16 & 0xff; + o[ 3] = x0 >>> 24 & 0xff; + + o[ 4] = x1 >>> 0 & 0xff; + o[ 5] = x1 >>> 8 & 0xff; + o[ 6] = x1 >>> 16 & 0xff; + o[ 7] = x1 >>> 24 & 0xff; + + o[ 8] = x2 >>> 0 & 0xff; + o[ 9] = x2 >>> 8 & 0xff; + o[10] = x2 >>> 16 & 0xff; + o[11] = x2 >>> 24 & 0xff; + + o[12] = x3 >>> 0 & 0xff; + o[13] = x3 >>> 8 & 0xff; + o[14] = x3 >>> 16 & 0xff; + o[15] = x3 >>> 24 & 0xff; + + o[16] = x4 >>> 0 & 0xff; + o[17] = x4 >>> 8 & 0xff; + o[18] = x4 >>> 16 & 0xff; + o[19] = x4 >>> 24 & 0xff; + + o[20] = x5 >>> 0 & 0xff; + o[21] = x5 >>> 8 & 0xff; + o[22] = x5 >>> 16 & 0xff; + o[23] = x5 >>> 24 & 0xff; + + o[24] = x6 >>> 0 & 0xff; + o[25] = x6 >>> 8 & 0xff; + o[26] = x6 >>> 16 & 0xff; + o[27] = x6 >>> 24 & 0xff; + + o[28] = x7 >>> 0 & 0xff; + o[29] = x7 >>> 8 & 0xff; + o[30] = x7 >>> 16 & 0xff; + o[31] = x7 >>> 24 & 0xff; + + o[32] = x8 >>> 0 & 0xff; + o[33] = x8 >>> 8 & 0xff; + o[34] = x8 >>> 16 & 0xff; + o[35] = x8 >>> 24 & 0xff; + + o[36] = x9 >>> 0 & 0xff; + o[37] = x9 >>> 8 & 0xff; + o[38] = x9 >>> 16 & 0xff; + o[39] = x9 >>> 24 & 0xff; + + o[40] = x10 >>> 0 & 0xff; + o[41] = x10 >>> 8 & 0xff; + o[42] = x10 >>> 16 & 0xff; + o[43] = x10 >>> 24 & 0xff; + + o[44] = x11 >>> 0 & 0xff; + o[45] = x11 >>> 8 & 0xff; + o[46] = x11 >>> 16 & 0xff; + o[47] = x11 >>> 24 & 0xff; + + o[48] = x12 >>> 0 & 0xff; + o[49] = x12 >>> 8 & 0xff; + o[50] = x12 >>> 16 & 0xff; + o[51] = x12 >>> 24 & 0xff; + + o[52] = x13 >>> 0 & 0xff; + o[53] = x13 >>> 8 & 0xff; + o[54] = x13 >>> 16 & 0xff; + o[55] = x13 >>> 24 & 0xff; + + o[56] = x14 >>> 0 & 0xff; + o[57] = x14 >>> 8 & 0xff; + o[58] = x14 >>> 16 & 0xff; + o[59] = x14 >>> 24 & 0xff; + + o[60] = x15 >>> 0 & 0xff; + o[61] = x15 >>> 8 & 0xff; + o[62] = x15 >>> 16 & 0xff; + o[63] = x15 >>> 24 & 0xff; +} + +function core_hsalsa20(o,p,k,c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, + j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, + j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, + j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, + j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, + j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, + j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, + j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; + + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u; + + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0; + x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4 | 0; + x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x1 | 0; + x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9 | 0; + x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x6 | 0; + x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14 | 0; + x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x11 | 0; + x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3 | 0; + x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7 | 0; + x15 ^= u<<18 | u>>>(32-18); + + u = x0 + x3 | 0; + x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1 | 0; + x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2 | 0; + x0 ^= u<<18 | u>>>(32-18); + + u = x5 + x4 | 0; + x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6 | 0; + x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7 | 0; + x5 ^= u<<18 | u>>>(32-18); + + u = x10 + x9 | 0; + x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11 | 0; + x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x14 | 0; + x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12 | 0; + x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13 | 0; + x15 ^= u<<18 | u>>>(32-18); + } + + o[ 0] = x0 >>> 0 & 0xff; + o[ 1] = x0 >>> 8 & 0xff; + o[ 2] = x0 >>> 16 & 0xff; + o[ 3] = x0 >>> 24 & 0xff; + + o[ 4] = x5 >>> 0 & 0xff; + o[ 5] = x5 >>> 8 & 0xff; + o[ 6] = x5 >>> 16 & 0xff; + o[ 7] = x5 >>> 24 & 0xff; + + o[ 8] = x10 >>> 0 & 0xff; + o[ 9] = x10 >>> 8 & 0xff; + o[10] = x10 >>> 16 & 0xff; + o[11] = x10 >>> 24 & 0xff; + + o[12] = x15 >>> 0 & 0xff; + o[13] = x15 >>> 8 & 0xff; + o[14] = x15 >>> 16 & 0xff; + o[15] = x15 >>> 24 & 0xff; + + o[16] = x6 >>> 0 & 0xff; + o[17] = x6 >>> 8 & 0xff; + o[18] = x6 >>> 16 & 0xff; + o[19] = x6 >>> 24 & 0xff; + + o[20] = x7 >>> 0 & 0xff; + o[21] = x7 >>> 8 & 0xff; + o[22] = x7 >>> 16 & 0xff; + o[23] = x7 >>> 24 & 0xff; + + o[24] = x8 >>> 0 & 0xff; + o[25] = x8 >>> 8 & 0xff; + o[26] = x8 >>> 16 & 0xff; + o[27] = x8 >>> 24 & 0xff; + + o[28] = x9 >>> 0 & 0xff; + o[29] = x9 >>> 8 & 0xff; + o[30] = x9 >>> 16 & 0xff; + o[31] = x9 >>> 24 & 0xff; +} + +function crypto_core_salsa20(out,inp,k,c) { + core_salsa20(out,inp,k,c); +} + +function crypto_core_hsalsa20(out,inp,k,c) { + core_hsalsa20(out,inp,k,c); +} + +var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]); + // "expand 32-byte k" + +function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + mpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i]; + } + return 0; +} + +function crypto_stream_salsa20(c,cpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = x[i]; + } + return 0; +} + +function crypto_stream(c,cpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + var sn = new Uint8Array(8); + for (var i = 0; i < 8; i++) sn[i] = n[i+16]; + return crypto_stream_salsa20(c,cpos,d,sn,s); +} + +function crypto_stream_xor(c,cpos,m,mpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + var sn = new Uint8Array(8); + for (var i = 0; i < 8; i++) sn[i] = n[i+16]; + return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s); +} + +/* +* Port of Andrew Moon's Poly1305-donna-16. Public domain. +* https://github.com/floodyberry/poly1305-donna +*/ + +var poly1305 = function(key) { + this.buffer = new Uint8Array(16); + this.r = new Uint16Array(10); + this.h = new Uint16Array(10); + this.pad = new Uint16Array(8); + this.leftover = 0; + this.fin = 0; + + var t0, t1, t2, t3, t4, t5, t6, t7; + + t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff; + t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff; + t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03; + t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff; + t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff; + this.r[5] = ((t4 >>> 1)) & 0x1ffe; + t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff; + t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81; + t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff; + this.r[9] = ((t7 >>> 5)) & 0x007f; + + this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8; + this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8; + this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8; + this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8; + this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8; + this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8; + this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8; + this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8; +}; + +poly1305.prototype.blocks = function(m, mpos, bytes) { + var hibit = this.fin ? 0 : (1 << 11); + var t0, t1, t2, t3, t4, t5, t6, t7, c; + var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9; + + var h0 = this.h[0], + h1 = this.h[1], + h2 = this.h[2], + h3 = this.h[3], + h4 = this.h[4], + h5 = this.h[5], + h6 = this.h[6], + h7 = this.h[7], + h8 = this.h[8], + h9 = this.h[9]; + + var r0 = this.r[0], + r1 = this.r[1], + r2 = this.r[2], + r3 = this.r[3], + r4 = this.r[4], + r5 = this.r[5], + r6 = this.r[6], + r7 = this.r[7], + r8 = this.r[8], + r9 = this.r[9]; + + while (bytes >= 16) { + t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff; + t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff; + t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff; + t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff; + t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff; + h5 += ((t4 >>> 1)) & 0x1fff; + t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff; + t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff; + t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff; + h9 += ((t7 >>> 5)) | hibit; + + c = 0; + + d0 = c; + d0 += h0 * r0; + d0 += h1 * (5 * r9); + d0 += h2 * (5 * r8); + d0 += h3 * (5 * r7); + d0 += h4 * (5 * r6); + c = (d0 >>> 13); d0 &= 0x1fff; + d0 += h5 * (5 * r5); + d0 += h6 * (5 * r4); + d0 += h7 * (5 * r3); + d0 += h8 * (5 * r2); + d0 += h9 * (5 * r1); + c += (d0 >>> 13); d0 &= 0x1fff; + + d1 = c; + d1 += h0 * r1; + d1 += h1 * r0; + d1 += h2 * (5 * r9); + d1 += h3 * (5 * r8); + d1 += h4 * (5 * r7); + c = (d1 >>> 13); d1 &= 0x1fff; + d1 += h5 * (5 * r6); + d1 += h6 * (5 * r5); + d1 += h7 * (5 * r4); + d1 += h8 * (5 * r3); + d1 += h9 * (5 * r2); + c += (d1 >>> 13); d1 &= 0x1fff; + + d2 = c; + d2 += h0 * r2; + d2 += h1 * r1; + d2 += h2 * r0; + d2 += h3 * (5 * r9); + d2 += h4 * (5 * r8); + c = (d2 >>> 13); d2 &= 0x1fff; + d2 += h5 * (5 * r7); + d2 += h6 * (5 * r6); + d2 += h7 * (5 * r5); + d2 += h8 * (5 * r4); + d2 += h9 * (5 * r3); + c += (d2 >>> 13); d2 &= 0x1fff; + + d3 = c; + d3 += h0 * r3; + d3 += h1 * r2; + d3 += h2 * r1; + d3 += h3 * r0; + d3 += h4 * (5 * r9); + c = (d3 >>> 13); d3 &= 0x1fff; + d3 += h5 * (5 * r8); + d3 += h6 * (5 * r7); + d3 += h7 * (5 * r6); + d3 += h8 * (5 * r5); + d3 += h9 * (5 * r4); + c += (d3 >>> 13); d3 &= 0x1fff; + + d4 = c; + d4 += h0 * r4; + d4 += h1 * r3; + d4 += h2 * r2; + d4 += h3 * r1; + d4 += h4 * r0; + c = (d4 >>> 13); d4 &= 0x1fff; + d4 += h5 * (5 * r9); + d4 += h6 * (5 * r8); + d4 += h7 * (5 * r7); + d4 += h8 * (5 * r6); + d4 += h9 * (5 * r5); + c += (d4 >>> 13); d4 &= 0x1fff; + + d5 = c; + d5 += h0 * r5; + d5 += h1 * r4; + d5 += h2 * r3; + d5 += h3 * r2; + d5 += h4 * r1; + c = (d5 >>> 13); d5 &= 0x1fff; + d5 += h5 * r0; + d5 += h6 * (5 * r9); + d5 += h7 * (5 * r8); + d5 += h8 * (5 * r7); + d5 += h9 * (5 * r6); + c += (d5 >>> 13); d5 &= 0x1fff; + + d6 = c; + d6 += h0 * r6; + d6 += h1 * r5; + d6 += h2 * r4; + d6 += h3 * r3; + d6 += h4 * r2; + c = (d6 >>> 13); d6 &= 0x1fff; + d6 += h5 * r1; + d6 += h6 * r0; + d6 += h7 * (5 * r9); + d6 += h8 * (5 * r8); + d6 += h9 * (5 * r7); + c += (d6 >>> 13); d6 &= 0x1fff; + + d7 = c; + d7 += h0 * r7; + d7 += h1 * r6; + d7 += h2 * r5; + d7 += h3 * r4; + d7 += h4 * r3; + c = (d7 >>> 13); d7 &= 0x1fff; + d7 += h5 * r2; + d7 += h6 * r1; + d7 += h7 * r0; + d7 += h8 * (5 * r9); + d7 += h9 * (5 * r8); + c += (d7 >>> 13); d7 &= 0x1fff; + + d8 = c; + d8 += h0 * r8; + d8 += h1 * r7; + d8 += h2 * r6; + d8 += h3 * r5; + d8 += h4 * r4; + c = (d8 >>> 13); d8 &= 0x1fff; + d8 += h5 * r3; + d8 += h6 * r2; + d8 += h7 * r1; + d8 += h8 * r0; + d8 += h9 * (5 * r9); + c += (d8 >>> 13); d8 &= 0x1fff; + + d9 = c; + d9 += h0 * r9; + d9 += h1 * r8; + d9 += h2 * r7; + d9 += h3 * r6; + d9 += h4 * r5; + c = (d9 >>> 13); d9 &= 0x1fff; + d9 += h5 * r4; + d9 += h6 * r3; + d9 += h7 * r2; + d9 += h8 * r1; + d9 += h9 * r0; + c += (d9 >>> 13); d9 &= 0x1fff; + + c = (((c << 2) + c)) | 0; + c = (c + d0) | 0; + d0 = c & 0x1fff; + c = (c >>> 13); + d1 += c; + + h0 = d0; + h1 = d1; + h2 = d2; + h3 = d3; + h4 = d4; + h5 = d5; + h6 = d6; + h7 = d7; + h8 = d8; + h9 = d9; + + mpos += 16; + bytes -= 16; + } + this.h[0] = h0; + this.h[1] = h1; + this.h[2] = h2; + this.h[3] = h3; + this.h[4] = h4; + this.h[5] = h5; + this.h[6] = h6; + this.h[7] = h7; + this.h[8] = h8; + this.h[9] = h9; +}; + +poly1305.prototype.finish = function(mac, macpos) { + var g = new Uint16Array(10); + var c, mask, f, i; + + if (this.leftover) { + i = this.leftover; + this.buffer[i++] = 1; + for (; i < 16; i++) this.buffer[i] = 0; + this.fin = 1; + this.blocks(this.buffer, 0, 16); + } + + c = this.h[1] >>> 13; + this.h[1] &= 0x1fff; + for (i = 2; i < 10; i++) { + this.h[i] += c; + c = this.h[i] >>> 13; + this.h[i] &= 0x1fff; + } + this.h[0] += (c * 5); + c = this.h[0] >>> 13; + this.h[0] &= 0x1fff; + this.h[1] += c; + c = this.h[1] >>> 13; + this.h[1] &= 0x1fff; + this.h[2] += c; + + g[0] = this.h[0] + 5; + c = g[0] >>> 13; + g[0] &= 0x1fff; + for (i = 1; i < 10; i++) { + g[i] = this.h[i] + c; + c = g[i] >>> 13; + g[i] &= 0x1fff; + } + g[9] -= (1 << 13); + + mask = (c ^ 1) - 1; + for (i = 0; i < 10; i++) g[i] &= mask; + mask = ~mask; + for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i]; + + this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff; + this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff; + this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff; + this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff; + this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff; + this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff; + this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff; + this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff; + + f = this.h[0] + this.pad[0]; + this.h[0] = f & 0xffff; + for (i = 1; i < 8; i++) { + f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0; + this.h[i] = f & 0xffff; + } + + mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff; + mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff; + mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff; + mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff; + mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff; + mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff; + mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff; + mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff; + mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff; + mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff; + mac[macpos+10] = (this.h[5] >>> 0) & 0xff; + mac[macpos+11] = (this.h[5] >>> 8) & 0xff; + mac[macpos+12] = (this.h[6] >>> 0) & 0xff; + mac[macpos+13] = (this.h[6] >>> 8) & 0xff; + mac[macpos+14] = (this.h[7] >>> 0) & 0xff; + mac[macpos+15] = (this.h[7] >>> 8) & 0xff; +}; + +poly1305.prototype.update = function(m, mpos, bytes) { + var i, want; + + if (this.leftover) { + want = (16 - this.leftover); + if (want > bytes) + want = bytes; + for (i = 0; i < want; i++) + this.buffer[this.leftover + i] = m[mpos+i]; + bytes -= want; + mpos += want; + this.leftover += want; + if (this.leftover < 16) + return; + this.blocks(this.buffer, 0, 16); + this.leftover = 0; + } + + if (bytes >= 16) { + want = bytes - (bytes % 16); + this.blocks(m, mpos, want); + mpos += want; + bytes -= want; + } + + if (bytes) { + for (i = 0; i < bytes; i++) + this.buffer[this.leftover + i] = m[mpos+i]; + this.leftover += bytes; + } +}; + +function crypto_onetimeauth(out, outpos, m, mpos, n, k) { + var s = new poly1305(k); + s.update(m, mpos, n); + s.finish(out, outpos); + return 0; +} + +function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) { + var x = new Uint8Array(16); + crypto_onetimeauth(x,0,m,mpos,n,k); + return crypto_verify_16(h,hpos,x,0); +} + +function crypto_secretbox(c,m,d,n,k) { + var i; + if (d < 32) return -1; + crypto_stream_xor(c,0,m,0,d,n,k); + crypto_onetimeauth(c, 16, c, 32, d - 32, c); + for (i = 0; i < 16; i++) c[i] = 0; + return 0; +} + +function crypto_secretbox_open(m,c,d,n,k) { + var i; + var x = new Uint8Array(32); + if (d < 32) return -1; + crypto_stream(x,0,32,n,k); + if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1; + crypto_stream_xor(m,0,c,0,d,n,k); + for (i = 0; i < 32; i++) m[i] = 0; + return 0; +} + +function set25519(r, a) { + var i; + for (i = 0; i < 16; i++) r[i] = a[i]|0; +} + +function car25519(o) { + var i, v, c = 1; + for (i = 0; i < 16; i++) { + v = o[i] + c + 65535; + c = Math.floor(v / 65536); + o[i] = v - c * 65536; + } + o[0] += c-1 + 37 * (c-1); +} + +function sel25519(p, q, b) { + var t, c = ~(b-1); + for (var i = 0; i < 16; i++) { + t = c & (p[i] ^ q[i]); + p[i] ^= t; + q[i] ^= t; + } +} + +function pack25519(o, n) { + var i, j, b; + var m = gf(), t = gf(); + for (i = 0; i < 16; i++) t[i] = n[i]; + car25519(t); + car25519(t); + car25519(t); + for (j = 0; j < 2; j++) { + m[0] = t[0] - 0xffed; + for (i = 1; i < 15; i++) { + m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1); + m[i-1] &= 0xffff; + } + m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1); + b = (m[15]>>16) & 1; + m[14] &= 0xffff; + sel25519(t, m, 1-b); + } + for (i = 0; i < 16; i++) { + o[2*i] = t[i] & 0xff; + o[2*i+1] = t[i]>>8; + } +} + +function neq25519(a, b) { + var c = new Uint8Array(32), d = new Uint8Array(32); + pack25519(c, a); + pack25519(d, b); + return crypto_verify_32(c, 0, d, 0); +} + +function par25519(a) { + var d = new Uint8Array(32); + pack25519(d, a); + return d[0] & 1; +} + +function unpack25519(o, n) { + var i; + for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8); + o[15] &= 0x7fff; +} + +function A(o, a, b) { + for (var i = 0; i < 16; i++) o[i] = a[i] + b[i]; +} + +function Z(o, a, b) { + for (var i = 0; i < 16; i++) o[i] = a[i] - b[i]; +} + +function M(o, a, b) { + var v, c, + t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, + t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0, + t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0, + t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0, + b0 = b[0], + b1 = b[1], + b2 = b[2], + b3 = b[3], + b4 = b[4], + b5 = b[5], + b6 = b[6], + b7 = b[7], + b8 = b[8], + b9 = b[9], + b10 = b[10], + b11 = b[11], + b12 = b[12], + b13 = b[13], + b14 = b[14], + b15 = b[15]; + + v = a[0]; + t0 += v * b0; + t1 += v * b1; + t2 += v * b2; + t3 += v * b3; + t4 += v * b4; + t5 += v * b5; + t6 += v * b6; + t7 += v * b7; + t8 += v * b8; + t9 += v * b9; + t10 += v * b10; + t11 += v * b11; + t12 += v * b12; + t13 += v * b13; + t14 += v * b14; + t15 += v * b15; + v = a[1]; + t1 += v * b0; + t2 += v * b1; + t3 += v * b2; + t4 += v * b3; + t5 += v * b4; + t6 += v * b5; + t7 += v * b6; + t8 += v * b7; + t9 += v * b8; + t10 += v * b9; + t11 += v * b10; + t12 += v * b11; + t13 += v * b12; + t14 += v * b13; + t15 += v * b14; + t16 += v * b15; + v = a[2]; + t2 += v * b0; + t3 += v * b1; + t4 += v * b2; + t5 += v * b3; + t6 += v * b4; + t7 += v * b5; + t8 += v * b6; + t9 += v * b7; + t10 += v * b8; + t11 += v * b9; + t12 += v * b10; + t13 += v * b11; + t14 += v * b12; + t15 += v * b13; + t16 += v * b14; + t17 += v * b15; + v = a[3]; + t3 += v * b0; + t4 += v * b1; + t5 += v * b2; + t6 += v * b3; + t7 += v * b4; + t8 += v * b5; + t9 += v * b6; + t10 += v * b7; + t11 += v * b8; + t12 += v * b9; + t13 += v * b10; + t14 += v * b11; + t15 += v * b12; + t16 += v * b13; + t17 += v * b14; + t18 += v * b15; + v = a[4]; + t4 += v * b0; + t5 += v * b1; + t6 += v * b2; + t7 += v * b3; + t8 += v * b4; + t9 += v * b5; + t10 += v * b6; + t11 += v * b7; + t12 += v * b8; + t13 += v * b9; + t14 += v * b10; + t15 += v * b11; + t16 += v * b12; + t17 += v * b13; + t18 += v * b14; + t19 += v * b15; + v = a[5]; + t5 += v * b0; + t6 += v * b1; + t7 += v * b2; + t8 += v * b3; + t9 += v * b4; + t10 += v * b5; + t11 += v * b6; + t12 += v * b7; + t13 += v * b8; + t14 += v * b9; + t15 += v * b10; + t16 += v * b11; + t17 += v * b12; + t18 += v * b13; + t19 += v * b14; + t20 += v * b15; + v = a[6]; + t6 += v * b0; + t7 += v * b1; + t8 += v * b2; + t9 += v * b3; + t10 += v * b4; + t11 += v * b5; + t12 += v * b6; + t13 += v * b7; + t14 += v * b8; + t15 += v * b9; + t16 += v * b10; + t17 += v * b11; + t18 += v * b12; + t19 += v * b13; + t20 += v * b14; + t21 += v * b15; + v = a[7]; + t7 += v * b0; + t8 += v * b1; + t9 += v * b2; + t10 += v * b3; + t11 += v * b4; + t12 += v * b5; + t13 += v * b6; + t14 += v * b7; + t15 += v * b8; + t16 += v * b9; + t17 += v * b10; + t18 += v * b11; + t19 += v * b12; + t20 += v * b13; + t21 += v * b14; + t22 += v * b15; + v = a[8]; + t8 += v * b0; + t9 += v * b1; + t10 += v * b2; + t11 += v * b3; + t12 += v * b4; + t13 += v * b5; + t14 += v * b6; + t15 += v * b7; + t16 += v * b8; + t17 += v * b9; + t18 += v * b10; + t19 += v * b11; + t20 += v * b12; + t21 += v * b13; + t22 += v * b14; + t23 += v * b15; + v = a[9]; + t9 += v * b0; + t10 += v * b1; + t11 += v * b2; + t12 += v * b3; + t13 += v * b4; + t14 += v * b5; + t15 += v * b6; + t16 += v * b7; + t17 += v * b8; + t18 += v * b9; + t19 += v * b10; + t20 += v * b11; + t21 += v * b12; + t22 += v * b13; + t23 += v * b14; + t24 += v * b15; + v = a[10]; + t10 += v * b0; + t11 += v * b1; + t12 += v * b2; + t13 += v * b3; + t14 += v * b4; + t15 += v * b5; + t16 += v * b6; + t17 += v * b7; + t18 += v * b8; + t19 += v * b9; + t20 += v * b10; + t21 += v * b11; + t22 += v * b12; + t23 += v * b13; + t24 += v * b14; + t25 += v * b15; + v = a[11]; + t11 += v * b0; + t12 += v * b1; + t13 += v * b2; + t14 += v * b3; + t15 += v * b4; + t16 += v * b5; + t17 += v * b6; + t18 += v * b7; + t19 += v * b8; + t20 += v * b9; + t21 += v * b10; + t22 += v * b11; + t23 += v * b12; + t24 += v * b13; + t25 += v * b14; + t26 += v * b15; + v = a[12]; + t12 += v * b0; + t13 += v * b1; + t14 += v * b2; + t15 += v * b3; + t16 += v * b4; + t17 += v * b5; + t18 += v * b6; + t19 += v * b7; + t20 += v * b8; + t21 += v * b9; + t22 += v * b10; + t23 += v * b11; + t24 += v * b12; + t25 += v * b13; + t26 += v * b14; + t27 += v * b15; + v = a[13]; + t13 += v * b0; + t14 += v * b1; + t15 += v * b2; + t16 += v * b3; + t17 += v * b4; + t18 += v * b5; + t19 += v * b6; + t20 += v * b7; + t21 += v * b8; + t22 += v * b9; + t23 += v * b10; + t24 += v * b11; + t25 += v * b12; + t26 += v * b13; + t27 += v * b14; + t28 += v * b15; + v = a[14]; + t14 += v * b0; + t15 += v * b1; + t16 += v * b2; + t17 += v * b3; + t18 += v * b4; + t19 += v * b5; + t20 += v * b6; + t21 += v * b7; + t22 += v * b8; + t23 += v * b9; + t24 += v * b10; + t25 += v * b11; + t26 += v * b12; + t27 += v * b13; + t28 += v * b14; + t29 += v * b15; + v = a[15]; + t15 += v * b0; + t16 += v * b1; + t17 += v * b2; + t18 += v * b3; + t19 += v * b4; + t20 += v * b5; + t21 += v * b6; + t22 += v * b7; + t23 += v * b8; + t24 += v * b9; + t25 += v * b10; + t26 += v * b11; + t27 += v * b12; + t28 += v * b13; + t29 += v * b14; + t30 += v * b15; + + t0 += 38 * t16; + t1 += 38 * t17; + t2 += 38 * t18; + t3 += 38 * t19; + t4 += 38 * t20; + t5 += 38 * t21; + t6 += 38 * t22; + t7 += 38 * t23; + t8 += 38 * t24; + t9 += 38 * t25; + t10 += 38 * t26; + t11 += 38 * t27; + t12 += 38 * t28; + t13 += 38 * t29; + t14 += 38 * t30; + // t15 left as is + + // first car + c = 1; + v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; + v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; + v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; + v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; + v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; + v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; + v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; + v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; + v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; + v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; + v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; + v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; + v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; + v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; + v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; + v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; + t0 += c-1 + 37 * (c-1); + + // second car + c = 1; + v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; + v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; + v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; + v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; + v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; + v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; + v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; + v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; + v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; + v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; + v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; + v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; + v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; + v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; + v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; + v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; + t0 += c-1 + 37 * (c-1); + + o[ 0] = t0; + o[ 1] = t1; + o[ 2] = t2; + o[ 3] = t3; + o[ 4] = t4; + o[ 5] = t5; + o[ 6] = t6; + o[ 7] = t7; + o[ 8] = t8; + o[ 9] = t9; + o[10] = t10; + o[11] = t11; + o[12] = t12; + o[13] = t13; + o[14] = t14; + o[15] = t15; +} + +function S(o, a) { + M(o, a, a); +} + +function inv25519(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 253; a >= 0; a--) { + S(c, c); + if(a !== 2 && a !== 4) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function pow2523(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 250; a >= 0; a--) { + S(c, c); + if(a !== 1) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function crypto_scalarmult(q, n, p) { + var z = new Uint8Array(32); + var x = new Float64Array(80), r, i; + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(); + for (i = 0; i < 31; i++) z[i] = n[i]; + z[31]=(n[31]&127)|64; + z[0]&=248; + unpack25519(x,p); + for (i = 0; i < 16; i++) { + b[i]=x[i]; + d[i]=a[i]=c[i]=0; + } + a[0]=d[0]=1; + for (i=254; i>=0; --i) { + r=(z[i>>>3]>>>(i&7))&1; + sel25519(a,b,r); + sel25519(c,d,r); + A(e,a,c); + Z(a,a,c); + A(c,b,d); + Z(b,b,d); + S(d,e); + S(f,a); + M(a,c,a); + M(c,b,e); + A(e,a,c); + Z(a,a,c); + S(b,a); + Z(c,d,f); + M(a,c,_121665); + A(a,a,d); + M(c,c,a); + M(a,d,f); + M(d,b,x); + S(b,e); + sel25519(a,b,r); + sel25519(c,d,r); + } + for (i = 0; i < 16; i++) { + x[i+16]=a[i]; + x[i+32]=c[i]; + x[i+48]=b[i]; + x[i+64]=d[i]; + } + var x32 = x.subarray(32); + var x16 = x.subarray(16); + inv25519(x32,x32); + M(x16,x16,x32); + pack25519(q,x16); + return 0; +} + +function crypto_scalarmult_base(q, n) { + return crypto_scalarmult(q, n, _9); +} + +function crypto_box_keypair(y, x) { + randombytes(x, 32); + return crypto_scalarmult_base(y, x); +} + +function crypto_box_beforenm(k, y, x) { + var s = new Uint8Array(32); + crypto_scalarmult(s, x, y); + return crypto_core_hsalsa20(k, _0, s, sigma); +} + +var crypto_box_afternm = crypto_secretbox; +var crypto_box_open_afternm = crypto_secretbox_open; + +function crypto_box(c, m, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_afternm(c, m, d, n, k); +} + +function crypto_box_open(m, c, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_open_afternm(m, c, d, n, k); +} + +var K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 +]; + +function crypto_hashblocks_hl(hh, hl, m, n) { + var wh = new Int32Array(16), wl = new Int32Array(16), + bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7, + bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7, + th, tl, i, j, h, l, a, b, c, d; + + var ah0 = hh[0], + ah1 = hh[1], + ah2 = hh[2], + ah3 = hh[3], + ah4 = hh[4], + ah5 = hh[5], + ah6 = hh[6], + ah7 = hh[7], + + al0 = hl[0], + al1 = hl[1], + al2 = hl[2], + al3 = hl[3], + al4 = hl[4], + al5 = hl[5], + al6 = hl[6], + al7 = hl[7]; + + var pos = 0; + while (n >= 128) { + for (i = 0; i < 16; i++) { + j = 8 * i + pos; + wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3]; + wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7]; + } + for (i = 0; i < 80; i++) { + bh0 = ah0; + bh1 = ah1; + bh2 = ah2; + bh3 = ah3; + bh4 = ah4; + bh5 = ah5; + bh6 = ah6; + bh7 = ah7; + + bl0 = al0; + bl1 = al1; + bl2 = al2; + bl3 = al3; + bl4 = al4; + bl5 = al5; + bl6 = al6; + bl7 = al7; + + // add + h = ah7; + l = al7; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + // Sigma1 + h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32)))); + l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32)))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // Ch + h = (ah4 & ah5) ^ (~ah4 & ah6); + l = (al4 & al5) ^ (~al4 & al6); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // K + h = K[i*2]; + l = K[i*2+1]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // w + h = wh[i%16]; + l = wl[i%16]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + th = c & 0xffff | d << 16; + tl = a & 0xffff | b << 16; + + // add + h = th; + l = tl; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + // Sigma0 + h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32)))); + l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32)))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // Maj + h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2); + l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + bh7 = (c & 0xffff) | (d << 16); + bl7 = (a & 0xffff) | (b << 16); + + // add + h = bh3; + l = bl3; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = th; + l = tl; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + bh3 = (c & 0xffff) | (d << 16); + bl3 = (a & 0xffff) | (b << 16); + + ah1 = bh0; + ah2 = bh1; + ah3 = bh2; + ah4 = bh3; + ah5 = bh4; + ah6 = bh5; + ah7 = bh6; + ah0 = bh7; + + al1 = bl0; + al2 = bl1; + al3 = bl2; + al4 = bl3; + al5 = bl4; + al6 = bl5; + al7 = bl6; + al0 = bl7; + + if (i%16 === 15) { + for (j = 0; j < 16; j++) { + // add + h = wh[j]; + l = wl[j]; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = wh[(j+9)%16]; + l = wl[(j+9)%16]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // sigma0 + th = wh[(j+1)%16]; + tl = wl[(j+1)%16]; + h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7); + l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + // sigma1 + th = wh[(j+14)%16]; + tl = wl[(j+14)%16]; + h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6); + l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6))); + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + wh[j] = (c & 0xffff) | (d << 16); + wl[j] = (a & 0xffff) | (b << 16); + } + } + } + + // add + h = ah0; + l = al0; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[0]; + l = hl[0]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[0] = ah0 = (c & 0xffff) | (d << 16); + hl[0] = al0 = (a & 0xffff) | (b << 16); + + h = ah1; + l = al1; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[1]; + l = hl[1]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[1] = ah1 = (c & 0xffff) | (d << 16); + hl[1] = al1 = (a & 0xffff) | (b << 16); + + h = ah2; + l = al2; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[2]; + l = hl[2]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[2] = ah2 = (c & 0xffff) | (d << 16); + hl[2] = al2 = (a & 0xffff) | (b << 16); + + h = ah3; + l = al3; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[3]; + l = hl[3]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[3] = ah3 = (c & 0xffff) | (d << 16); + hl[3] = al3 = (a & 0xffff) | (b << 16); + + h = ah4; + l = al4; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[4]; + l = hl[4]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[4] = ah4 = (c & 0xffff) | (d << 16); + hl[4] = al4 = (a & 0xffff) | (b << 16); + + h = ah5; + l = al5; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[5]; + l = hl[5]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[5] = ah5 = (c & 0xffff) | (d << 16); + hl[5] = al5 = (a & 0xffff) | (b << 16); + + h = ah6; + l = al6; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[6]; + l = hl[6]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[6] = ah6 = (c & 0xffff) | (d << 16); + hl[6] = al6 = (a & 0xffff) | (b << 16); + + h = ah7; + l = al7; + + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; + + h = hh[7]; + l = hl[7]; + + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; + + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + hh[7] = ah7 = (c & 0xffff) | (d << 16); + hl[7] = al7 = (a & 0xffff) | (b << 16); + + pos += 128; + n -= 128; + } + + return n; +} + +function crypto_hash(out, m, n) { + var hh = new Int32Array(8), + hl = new Int32Array(8), + x = new Uint8Array(256), + i, b = n; + + hh[0] = 0x6a09e667; + hh[1] = 0xbb67ae85; + hh[2] = 0x3c6ef372; + hh[3] = 0xa54ff53a; + hh[4] = 0x510e527f; + hh[5] = 0x9b05688c; + hh[6] = 0x1f83d9ab; + hh[7] = 0x5be0cd19; + + hl[0] = 0xf3bcc908; + hl[1] = 0x84caa73b; + hl[2] = 0xfe94f82b; + hl[3] = 0x5f1d36f1; + hl[4] = 0xade682d1; + hl[5] = 0x2b3e6c1f; + hl[6] = 0xfb41bd6b; + hl[7] = 0x137e2179; + + crypto_hashblocks_hl(hh, hl, m, n); + n %= 128; + + for (i = 0; i < n; i++) x[i] = m[b-n+i]; + x[n] = 128; + + n = 256-128*(n<112?1:0); + x[n-9] = 0; + ts64(x, n-8, (b / 0x20000000) | 0, b << 3); + crypto_hashblocks_hl(hh, hl, x, n); + + for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]); + + return 0; +} + +function add(p, q) { + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(), + g = gf(), h = gf(), t = gf(); + + Z(a, p[1], p[0]); + Z(t, q[1], q[0]); + M(a, a, t); + A(b, p[0], p[1]); + A(t, q[0], q[1]); + M(b, b, t); + M(c, p[3], q[3]); + M(c, c, D2); + M(d, p[2], q[2]); + A(d, d, d); + Z(e, b, a); + Z(f, d, c); + A(g, d, c); + A(h, b, a); + + M(p[0], e, f); + M(p[1], h, g); + M(p[2], g, f); + M(p[3], e, h); +} + +function cswap(p, q, b) { + var i; + for (i = 0; i < 4; i++) { + sel25519(p[i], q[i], b); + } +} + +function pack(r, p) { + var tx = gf(), ty = gf(), zi = gf(); + inv25519(zi, p[2]); + M(tx, p[0], zi); + M(ty, p[1], zi); + pack25519(r, ty); + r[31] ^= par25519(tx) << 7; +} + +function scalarmult(p, q, s) { + var b, i; + set25519(p[0], gf0); + set25519(p[1], gf1); + set25519(p[2], gf1); + set25519(p[3], gf0); + for (i = 255; i >= 0; --i) { + b = (s[(i/8)|0] >> (i&7)) & 1; + cswap(p, q, b); + add(q, p); + add(p, p); + cswap(p, q, b); + } +} + +function scalarbase(p, s) { + var q = [gf(), gf(), gf(), gf()]; + set25519(q[0], X); + set25519(q[1], Y); + set25519(q[2], gf1); + M(q[3], X, Y); + scalarmult(p, q, s); +} + +function crypto_sign_keypair(pk, sk, seeded) { + var d = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()]; + var i; + + if (!seeded) randombytes(sk, 32); + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + scalarbase(p, d); + pack(pk, p); + + for (i = 0; i < 32; i++) sk[i+32] = pk[i]; + return 0; +} + +var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]); + +function modL(r, x) { + var carry, i, j, k; + for (i = 63; i >= 32; --i) { + carry = 0; + for (j = i - 32, k = i - 12; j < k; ++j) { + x[j] += carry - 16 * x[i] * L[j - (i - 32)]; + carry = Math.floor((x[j] + 128) / 256); + x[j] -= carry * 256; + } + x[j] += carry; + x[i] = 0; + } + carry = 0; + for (j = 0; j < 32; j++) { + x[j] += carry - (x[31] >> 4) * L[j]; + carry = x[j] >> 8; + x[j] &= 255; + } + for (j = 0; j < 32; j++) x[j] -= carry * L[j]; + for (i = 0; i < 32; i++) { + x[i+1] += x[i] >> 8; + r[i] = x[i] & 255; + } +} + +function reduce(r) { + var x = new Float64Array(64), i; + for (i = 0; i < 64; i++) x[i] = r[i]; + for (i = 0; i < 64; i++) r[i] = 0; + modL(r, x); +} + +// Note: difference from C - smlen returned, not passed as argument. +function crypto_sign(sm, m, n, sk) { + var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64); + var i, j, x = new Float64Array(64); + var p = [gf(), gf(), gf(), gf()]; + + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + var smlen = n + 64; + for (i = 0; i < n; i++) sm[64 + i] = m[i]; + for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i]; + + crypto_hash(r, sm.subarray(32), n+32); + reduce(r); + scalarbase(p, r); + pack(sm, p); + + for (i = 32; i < 64; i++) sm[i] = sk[i]; + crypto_hash(h, sm, n + 64); + reduce(h); + + for (i = 0; i < 64; i++) x[i] = 0; + for (i = 0; i < 32; i++) x[i] = r[i]; + for (i = 0; i < 32; i++) { + for (j = 0; j < 32; j++) { + x[i+j] += h[i] * d[j]; + } + } + + modL(sm.subarray(32), x); + return smlen; +} + +function unpackneg(r, p) { + var t = gf(), chk = gf(), num = gf(), + den = gf(), den2 = gf(), den4 = gf(), + den6 = gf(); + + set25519(r[2], gf1); + unpack25519(r[1], p); + S(num, r[1]); + M(den, num, D); + Z(num, num, r[2]); + A(den, r[2], den); + + S(den2, den); + S(den4, den2); + M(den6, den4, den2); + M(t, den6, num); + M(t, t, den); + + pow2523(t, t); + M(t, t, num); + M(t, t, den); + M(t, t, den); + M(r[0], t, den); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) M(r[0], r[0], I); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) return -1; + + if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]); + + M(r[3], r[0], r[1]); + return 0; +} + +function crypto_sign_open(m, sm, n, pk) { + var i; + var t = new Uint8Array(32), h = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()], + q = [gf(), gf(), gf(), gf()]; + + if (n < 64) return -1; + + if (unpackneg(q, pk)) return -1; + + for (i = 0; i < n; i++) m[i] = sm[i]; + for (i = 0; i < 32; i++) m[i+32] = pk[i]; + crypto_hash(h, m, n); + reduce(h); + scalarmult(p, q, h); + + scalarbase(q, sm.subarray(32)); + add(p, q); + pack(t, p); + + n -= 64; + if (crypto_verify_32(sm, 0, t, 0)) { + for (i = 0; i < n; i++) m[i] = 0; + return -1; + } + + for (i = 0; i < n; i++) m[i] = sm[i + 64]; + return n; +} + +var crypto_secretbox_KEYBYTES = 32, + crypto_secretbox_NONCEBYTES = 24, + crypto_secretbox_ZEROBYTES = 32, + crypto_secretbox_BOXZEROBYTES = 16, + crypto_scalarmult_BYTES = 32, + crypto_scalarmult_SCALARBYTES = 32, + crypto_box_PUBLICKEYBYTES = 32, + crypto_box_SECRETKEYBYTES = 32, + crypto_box_BEFORENMBYTES = 32, + crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES, + crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES, + crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES, + crypto_sign_BYTES = 64, + crypto_sign_PUBLICKEYBYTES = 32, + crypto_sign_SECRETKEYBYTES = 64, + crypto_sign_SEEDBYTES = 32, + crypto_hash_BYTES = 64; + +nacl.lowlevel = { + crypto_core_hsalsa20: crypto_core_hsalsa20, + crypto_stream_xor: crypto_stream_xor, + crypto_stream: crypto_stream, + crypto_stream_salsa20_xor: crypto_stream_salsa20_xor, + crypto_stream_salsa20: crypto_stream_salsa20, + crypto_onetimeauth: crypto_onetimeauth, + crypto_onetimeauth_verify: crypto_onetimeauth_verify, + crypto_verify_16: crypto_verify_16, + crypto_verify_32: crypto_verify_32, + crypto_secretbox: crypto_secretbox, + crypto_secretbox_open: crypto_secretbox_open, + crypto_scalarmult: crypto_scalarmult, + crypto_scalarmult_base: crypto_scalarmult_base, + crypto_box_beforenm: crypto_box_beforenm, + crypto_box_afternm: crypto_box_afternm, + crypto_box: crypto_box, + crypto_box_open: crypto_box_open, + crypto_box_keypair: crypto_box_keypair, + crypto_hash: crypto_hash, + crypto_sign: crypto_sign, + crypto_sign_keypair: crypto_sign_keypair, + crypto_sign_open: crypto_sign_open, + + crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES, + crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES, + crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES, + crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES, + crypto_scalarmult_BYTES: crypto_scalarmult_BYTES, + crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES, + crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES, + crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES, + crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES, + crypto_box_NONCEBYTES: crypto_box_NONCEBYTES, + crypto_box_ZEROBYTES: crypto_box_ZEROBYTES, + crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES, + crypto_sign_BYTES: crypto_sign_BYTES, + crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES, + crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES, + crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES, + crypto_hash_BYTES: crypto_hash_BYTES, + + gf: gf, + D: D, + L: L, + pack25519: pack25519, + unpack25519: unpack25519, + M: M, + A: A, + S: S, + Z: Z, + pow2523: pow2523, + add: add, + set25519: set25519, + modL: modL, + scalarmult: scalarmult, + scalarbase: scalarbase, +}; + +/* High-level API */ + +function checkLengths(k, n) { + if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size'); + if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size'); +} + +function checkBoxLengths(pk, sk) { + if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size'); + if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size'); +} + +function checkArrayTypes() { + for (var i = 0; i < arguments.length; i++) { + if (!(arguments[i] instanceof Uint8Array)) + throw new TypeError('unexpected type, use Uint8Array'); + } +} + +function cleanup(arr) { + for (var i = 0; i < arr.length; i++) arr[i] = 0; +} + +nacl.randomBytes = function(n) { + var b = new Uint8Array(n); + randombytes(b, n); + return b; +}; + +nacl.secretbox = function(msg, nonce, key) { + checkArrayTypes(msg, nonce, key); + checkLengths(key, nonce); + var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length); + var c = new Uint8Array(m.length); + for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i]; + crypto_secretbox(c, m, m.length, nonce, key); + return c.subarray(crypto_secretbox_BOXZEROBYTES); +}; + +nacl.secretbox.open = function(box, nonce, key) { + checkArrayTypes(box, nonce, key); + checkLengths(key, nonce); + var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length); + var m = new Uint8Array(c.length); + for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i]; + if (c.length < 32) return null; + if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null; + return m.subarray(crypto_secretbox_ZEROBYTES); +}; + +nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES; +nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES; +nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES; + +nacl.scalarMult = function(n, p) { + checkArrayTypes(n, p); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult(q, n, p); + return q; +}; + +nacl.scalarMult.base = function(n) { + checkArrayTypes(n); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult_base(q, n); + return q; +}; + +nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES; +nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES; + +nacl.box = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox(msg, nonce, k); +}; + +nacl.box.before = function(publicKey, secretKey) { + checkArrayTypes(publicKey, secretKey); + checkBoxLengths(publicKey, secretKey); + var k = new Uint8Array(crypto_box_BEFORENMBYTES); + crypto_box_beforenm(k, publicKey, secretKey); + return k; +}; + +nacl.box.after = nacl.secretbox; + +nacl.box.open = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox.open(msg, nonce, k); +}; + +nacl.box.open.after = nacl.secretbox.open; + +nacl.box.keyPair = function() { + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_box_SECRETKEYBYTES); + crypto_box_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.box.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_box_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + crypto_scalarmult_base(pk, secretKey); + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES; +nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES; +nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES; +nacl.box.nonceLength = crypto_box_NONCEBYTES; +nacl.box.overheadLength = nacl.secretbox.overheadLength; + +nacl.sign = function(msg, secretKey) { + checkArrayTypes(msg, secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length); + crypto_sign(signedMsg, msg, msg.length, secretKey); + return signedMsg; +}; + +nacl.sign.open = function(signedMsg, publicKey) { + checkArrayTypes(signedMsg, publicKey); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var tmp = new Uint8Array(signedMsg.length); + var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey); + if (mlen < 0) return null; + var m = new Uint8Array(mlen); + for (var i = 0; i < m.length; i++) m[i] = tmp[i]; + return m; +}; + +nacl.sign.detached = function(msg, secretKey) { + var signedMsg = nacl.sign(msg, secretKey); + var sig = new Uint8Array(crypto_sign_BYTES); + for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; + return sig; +}; + +nacl.sign.detached.verify = function(msg, sig, publicKey) { + checkArrayTypes(msg, sig, publicKey); + if (sig.length !== crypto_sign_BYTES) + throw new Error('bad signature size'); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var sm = new Uint8Array(crypto_sign_BYTES + msg.length); + var m = new Uint8Array(crypto_sign_BYTES + msg.length); + var i; + for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i]; + for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i]; + return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0); +}; + +nacl.sign.keyPair = function() { + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + crypto_sign_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i]; + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.sign.keyPair.fromSeed = function(seed) { + checkArrayTypes(seed); + if (seed.length !== crypto_sign_SEEDBYTES) + throw new Error('bad seed size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + for (var i = 0; i < 32; i++) sk[i] = seed[i]; + crypto_sign_keypair(pk, sk, true); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES; +nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES; +nacl.sign.seedLength = crypto_sign_SEEDBYTES; +nacl.sign.signatureLength = crypto_sign_BYTES; + +nacl.hash = function(msg) { + checkArrayTypes(msg); + var h = new Uint8Array(crypto_hash_BYTES); + crypto_hash(h, msg, msg.length); + return h; +}; + +nacl.hash.hashLength = crypto_hash_BYTES; + +nacl.verify = function(x, y) { + checkArrayTypes(x, y); + // Zero length arguments are considered not equal. + if (x.length === 0 || y.length === 0) return false; + if (x.length !== y.length) return false; + return (vn(x, 0, y, 0, x.length) === 0) ? true : false; +}; + +nacl.setPRNG = function(fn) { + randombytes = fn; +}; + +(function() { + // Initialize PRNG if environment provides CSPRNG. + // If not, methods calling randombytes will throw. + var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null; + if (crypto && crypto.getRandomValues) { + // Browsers. + var QUOTA = 65536; + nacl.setPRNG(function(x, n) { + var i, v = new Uint8Array(n); + for (i = 0; i < n; i += QUOTA) { + crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA))); + } + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } else if (typeof require !== 'undefined') { + // Node.js. + crypto = require('crypto'); + if (crypto && crypto.randomBytes) { + nacl.setPRNG(function(x, n) { + var i, v = crypto.randomBytes(n); + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } + } +})(); + +})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {})); diff --git a/node_modules/tweetnacl/nacl-fast.min.js b/node_modules/tweetnacl/nacl-fast.min.js new file mode 100644 index 0000000..348ec2e --- /dev/null +++ b/node_modules/tweetnacl/nacl-fast.min.js @@ -0,0 +1 @@ +!function(i){"use strict";var v=function(r){var t,n=new Float64Array(16);if(r)for(t=0;t>24&255,r[t+1]=n>>16&255,r[t+2]=n>>8&255,r[t+3]=255&n,r[t+4]=e>>24&255,r[t+5]=e>>16&255,r[t+6]=e>>8&255,r[t+7]=255&e}function w(r,t,n,e,o){var i,h=0;for(i=0;i>>8)-1}function b(r,t,n,e){return w(r,t,n,e,16)}function g(r,t,n,e){return w(r,t,n,e,32)}function A(r,t,n,e){!function(r,t,n,e){for(var o,i=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,h=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,f=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,s=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,u=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,c=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,y=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,l=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,w=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,v=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,p=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,b=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,g=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,A=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,_=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,U=i,d=h,E=a,x=f,M=s,m=u,B=c,S=y,k=l,K=w,Y=v,L=p,T=b,z=g,R=A,P=_,N=0;N<20;N+=2)U^=(o=(T^=(o=(k^=(o=(M^=(o=U+T|0)<<7|o>>>25)+U|0)<<9|o>>>23)+M|0)<<13|o>>>19)+k|0)<<18|o>>>14,m^=(o=(d^=(o=(z^=(o=(K^=(o=m+d|0)<<7|o>>>25)+m|0)<<9|o>>>23)+K|0)<<13|o>>>19)+z|0)<<18|o>>>14,Y^=(o=(B^=(o=(E^=(o=(R^=(o=Y+B|0)<<7|o>>>25)+Y|0)<<9|o>>>23)+R|0)<<13|o>>>19)+E|0)<<18|o>>>14,P^=(o=(L^=(o=(S^=(o=(x^=(o=P+L|0)<<7|o>>>25)+P|0)<<9|o>>>23)+x|0)<<13|o>>>19)+S|0)<<18|o>>>14,U^=(o=(x^=(o=(E^=(o=(d^=(o=U+x|0)<<7|o>>>25)+U|0)<<9|o>>>23)+d|0)<<13|o>>>19)+E|0)<<18|o>>>14,m^=(o=(M^=(o=(S^=(o=(B^=(o=m+M|0)<<7|o>>>25)+m|0)<<9|o>>>23)+B|0)<<13|o>>>19)+S|0)<<18|o>>>14,Y^=(o=(K^=(o=(k^=(o=(L^=(o=Y+K|0)<<7|o>>>25)+Y|0)<<9|o>>>23)+L|0)<<13|o>>>19)+k|0)<<18|o>>>14,P^=(o=(R^=(o=(z^=(o=(T^=(o=P+R|0)<<7|o>>>25)+P|0)<<9|o>>>23)+T|0)<<13|o>>>19)+z|0)<<18|o>>>14;U=U+i|0,d=d+h|0,E=E+a|0,x=x+f|0,M=M+s|0,m=m+u|0,B=B+c|0,S=S+y|0,k=k+l|0,K=K+w|0,Y=Y+v|0,L=L+p|0,T=T+b|0,z=z+g|0,R=R+A|0,P=P+_|0,r[0]=U>>>0&255,r[1]=U>>>8&255,r[2]=U>>>16&255,r[3]=U>>>24&255,r[4]=d>>>0&255,r[5]=d>>>8&255,r[6]=d>>>16&255,r[7]=d>>>24&255,r[8]=E>>>0&255,r[9]=E>>>8&255,r[10]=E>>>16&255,r[11]=E>>>24&255,r[12]=x>>>0&255,r[13]=x>>>8&255,r[14]=x>>>16&255,r[15]=x>>>24&255,r[16]=M>>>0&255,r[17]=M>>>8&255,r[18]=M>>>16&255,r[19]=M>>>24&255,r[20]=m>>>0&255,r[21]=m>>>8&255,r[22]=m>>>16&255,r[23]=m>>>24&255,r[24]=B>>>0&255,r[25]=B>>>8&255,r[26]=B>>>16&255,r[27]=B>>>24&255,r[28]=S>>>0&255,r[29]=S>>>8&255,r[30]=S>>>16&255,r[31]=S>>>24&255,r[32]=k>>>0&255,r[33]=k>>>8&255,r[34]=k>>>16&255,r[35]=k>>>24&255,r[36]=K>>>0&255,r[37]=K>>>8&255,r[38]=K>>>16&255,r[39]=K>>>24&255,r[40]=Y>>>0&255,r[41]=Y>>>8&255,r[42]=Y>>>16&255,r[43]=Y>>>24&255,r[44]=L>>>0&255,r[45]=L>>>8&255,r[46]=L>>>16&255,r[47]=L>>>24&255,r[48]=T>>>0&255,r[49]=T>>>8&255,r[50]=T>>>16&255,r[51]=T>>>24&255,r[52]=z>>>0&255,r[53]=z>>>8&255,r[54]=z>>>16&255,r[55]=z>>>24&255,r[56]=R>>>0&255,r[57]=R>>>8&255,r[58]=R>>>16&255,r[59]=R>>>24&255,r[60]=P>>>0&255,r[61]=P>>>8&255,r[62]=P>>>16&255,r[63]=P>>>24&255}(r,t,n,e)}function _(r,t,n,e){!function(r,t,n,e){for(var o,i=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,h=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,f=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,s=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,u=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,c=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,y=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,l=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,w=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,v=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,p=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,b=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,g=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,A=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,_=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,U=0;U<20;U+=2)i^=(o=(b^=(o=(l^=(o=(s^=(o=i+b|0)<<7|o>>>25)+i|0)<<9|o>>>23)+s|0)<<13|o>>>19)+l|0)<<18|o>>>14,u^=(o=(h^=(o=(g^=(o=(w^=(o=u+h|0)<<7|o>>>25)+u|0)<<9|o>>>23)+w|0)<<13|o>>>19)+g|0)<<18|o>>>14,v^=(o=(c^=(o=(a^=(o=(A^=(o=v+c|0)<<7|o>>>25)+v|0)<<9|o>>>23)+A|0)<<13|o>>>19)+a|0)<<18|o>>>14,_^=(o=(p^=(o=(y^=(o=(f^=(o=_+p|0)<<7|o>>>25)+_|0)<<9|o>>>23)+f|0)<<13|o>>>19)+y|0)<<18|o>>>14,i^=(o=(f^=(o=(a^=(o=(h^=(o=i+f|0)<<7|o>>>25)+i|0)<<9|o>>>23)+h|0)<<13|o>>>19)+a|0)<<18|o>>>14,u^=(o=(s^=(o=(y^=(o=(c^=(o=u+s|0)<<7|o>>>25)+u|0)<<9|o>>>23)+c|0)<<13|o>>>19)+y|0)<<18|o>>>14,v^=(o=(w^=(o=(l^=(o=(p^=(o=v+w|0)<<7|o>>>25)+v|0)<<9|o>>>23)+p|0)<<13|o>>>19)+l|0)<<18|o>>>14,_^=(o=(A^=(o=(g^=(o=(b^=(o=_+A|0)<<7|o>>>25)+_|0)<<9|o>>>23)+b|0)<<13|o>>>19)+g|0)<<18|o>>>14;r[0]=i>>>0&255,r[1]=i>>>8&255,r[2]=i>>>16&255,r[3]=i>>>24&255,r[4]=u>>>0&255,r[5]=u>>>8&255,r[6]=u>>>16&255,r[7]=u>>>24&255,r[8]=v>>>0&255,r[9]=v>>>8&255,r[10]=v>>>16&255,r[11]=v>>>24&255,r[12]=_>>>0&255,r[13]=_>>>8&255,r[14]=_>>>16&255,r[15]=_>>>24&255,r[16]=c>>>0&255,r[17]=c>>>8&255,r[18]=c>>>16&255,r[19]=c>>>24&255,r[20]=y>>>0&255,r[21]=y>>>8&255,r[22]=y>>>16&255,r[23]=y>>>24&255,r[24]=l>>>0&255,r[25]=l>>>8&255,r[26]=l>>>16&255,r[27]=l>>>24&255,r[28]=w>>>0&255,r[29]=w>>>8&255,r[30]=w>>>16&255,r[31]=w>>>24&255}(r,t,n,e)}var U=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function d(r,t,n,e,o,i,h){var a,f,s=new Uint8Array(16),u=new Uint8Array(64);for(f=0;f<16;f++)s[f]=0;for(f=0;f<8;f++)s[f]=i[f];for(;64<=o;){for(A(u,s,h,U),f=0;f<64;f++)r[t+f]=n[e+f]^u[f];for(a=1,f=8;f<16;f++)a=a+(255&s[f])|0,s[f]=255&a,a>>>=8;o-=64,t+=64,e+=64}if(0>>=8;n-=64,t+=64}if(0>>13|n<<3),e=255&r[4]|(255&r[5])<<8,this.r[2]=7939&(n>>>10|e<<6),o=255&r[6]|(255&r[7])<<8,this.r[3]=8191&(e>>>7|o<<9),i=255&r[8]|(255&r[9])<<8,this.r[4]=255&(o>>>4|i<<12),this.r[5]=i>>>1&8190,h=255&r[10]|(255&r[11])<<8,this.r[6]=8191&(i>>>14|h<<2),a=255&r[12]|(255&r[13])<<8,this.r[7]=8065&(h>>>11|a<<5),f=255&r[14]|(255&r[15])<<8,this.r[8]=8191&(a>>>8|f<<8),this.r[9]=f>>>5&127,this.pad[0]=255&r[16]|(255&r[17])<<8,this.pad[1]=255&r[18]|(255&r[19])<<8,this.pad[2]=255&r[20]|(255&r[21])<<8,this.pad[3]=255&r[22]|(255&r[23])<<8,this.pad[4]=255&r[24]|(255&r[25])<<8,this.pad[5]=255&r[26]|(255&r[27])<<8,this.pad[6]=255&r[28]|(255&r[29])<<8,this.pad[7]=255&r[30]|(255&r[31])<<8};function B(r,t,n,e,o,i){var h=new m(i);return h.update(n,e,o),h.finish(r,t),0}function S(r,t,n,e,o,i){var h=new Uint8Array(16);return B(h,0,n,e,o,i),b(r,t,h,0)}function k(r,t,n,e,o){var i;if(n<32)return-1;for(M(r,0,t,0,n,e,o),B(r,16,r,32,n-32,r),i=0;i<16;i++)r[i]=0;return 0}function K(r,t,n,e,o){var i,h=new Uint8Array(32);if(n<32)return-1;if(x(h,0,32,e,o),0!==S(t,16,t,32,n-32,h))return-1;for(M(r,0,t,0,n,e,o),i=0;i<32;i++)r[i]=0;return 0}function Y(r,t){var n;for(n=0;n<16;n++)r[n]=0|t[n]}function L(r){var t,n,e=1;for(t=0;t<16;t++)n=r[t]+e+65535,e=Math.floor(n/65536),r[t]=n-65536*e;r[0]+=e-1+37*(e-1)}function T(r,t,n){for(var e,o=~(n-1),i=0;i<16;i++)e=o&(r[i]^t[i]),r[i]^=e,t[i]^=e}function z(r,t){var n,e,o,i=v(),h=v();for(n=0;n<16;n++)h[n]=t[n];for(L(h),L(h),L(h),e=0;e<2;e++){for(i[0]=h[0]-65517,n=1;n<15;n++)i[n]=h[n]-65535-(i[n-1]>>16&1),i[n-1]&=65535;i[15]=h[15]-32767-(i[14]>>16&1),o=i[15]>>16&1,i[14]&=65535,T(h,i,1-o)}for(n=0;n<16;n++)r[2*n]=255&h[n],r[2*n+1]=h[n]>>8}function R(r,t){var n=new Uint8Array(32),e=new Uint8Array(32);return z(n,r),z(e,t),g(n,0,e,0)}function P(r){var t=new Uint8Array(32);return z(t,r),1&t[0]}function N(r,t){var n;for(n=0;n<16;n++)r[n]=t[2*n]+(t[2*n+1]<<8);r[15]&=32767}function O(r,t,n){for(var e=0;e<16;e++)r[e]=t[e]+n[e]}function C(r,t,n){for(var e=0;e<16;e++)r[e]=t[e]-n[e]}function F(r,t,n){var e,o,i=0,h=0,a=0,f=0,s=0,u=0,c=0,y=0,l=0,w=0,v=0,p=0,b=0,g=0,A=0,_=0,U=0,d=0,E=0,x=0,M=0,m=0,B=0,S=0,k=0,K=0,Y=0,L=0,T=0,z=0,R=0,P=n[0],N=n[1],O=n[2],C=n[3],F=n[4],I=n[5],Z=n[6],G=n[7],q=n[8],D=n[9],V=n[10],X=n[11],j=n[12],H=n[13],J=n[14],Q=n[15];i+=(e=t[0])*P,h+=e*N,a+=e*O,f+=e*C,s+=e*F,u+=e*I,c+=e*Z,y+=e*G,l+=e*q,w+=e*D,v+=e*V,p+=e*X,b+=e*j,g+=e*H,A+=e*J,_+=e*Q,h+=(e=t[1])*P,a+=e*N,f+=e*O,s+=e*C,u+=e*F,c+=e*I,y+=e*Z,l+=e*G,w+=e*q,v+=e*D,p+=e*V,b+=e*X,g+=e*j,A+=e*H,_+=e*J,U+=e*Q,a+=(e=t[2])*P,f+=e*N,s+=e*O,u+=e*C,c+=e*F,y+=e*I,l+=e*Z,w+=e*G,v+=e*q,p+=e*D,b+=e*V,g+=e*X,A+=e*j,_+=e*H,U+=e*J,d+=e*Q,f+=(e=t[3])*P,s+=e*N,u+=e*O,c+=e*C,y+=e*F,l+=e*I,w+=e*Z,v+=e*G,p+=e*q,b+=e*D,g+=e*V,A+=e*X,_+=e*j,U+=e*H,d+=e*J,E+=e*Q,s+=(e=t[4])*P,u+=e*N,c+=e*O,y+=e*C,l+=e*F,w+=e*I,v+=e*Z,p+=e*G,b+=e*q,g+=e*D,A+=e*V,_+=e*X,U+=e*j,d+=e*H,E+=e*J,x+=e*Q,u+=(e=t[5])*P,c+=e*N,y+=e*O,l+=e*C,w+=e*F,v+=e*I,p+=e*Z,b+=e*G,g+=e*q,A+=e*D,_+=e*V,U+=e*X,d+=e*j,E+=e*H,x+=e*J,M+=e*Q,c+=(e=t[6])*P,y+=e*N,l+=e*O,w+=e*C,v+=e*F,p+=e*I,b+=e*Z,g+=e*G,A+=e*q,_+=e*D,U+=e*V,d+=e*X,E+=e*j,x+=e*H,M+=e*J,m+=e*Q,y+=(e=t[7])*P,l+=e*N,w+=e*O,v+=e*C,p+=e*F,b+=e*I,g+=e*Z,A+=e*G,_+=e*q,U+=e*D,d+=e*V,E+=e*X,x+=e*j,M+=e*H,m+=e*J,B+=e*Q,l+=(e=t[8])*P,w+=e*N,v+=e*O,p+=e*C,b+=e*F,g+=e*I,A+=e*Z,_+=e*G,U+=e*q,d+=e*D,E+=e*V,x+=e*X,M+=e*j,m+=e*H,B+=e*J,S+=e*Q,w+=(e=t[9])*P,v+=e*N,p+=e*O,b+=e*C,g+=e*F,A+=e*I,_+=e*Z,U+=e*G,d+=e*q,E+=e*D,x+=e*V,M+=e*X,m+=e*j,B+=e*H,S+=e*J,k+=e*Q,v+=(e=t[10])*P,p+=e*N,b+=e*O,g+=e*C,A+=e*F,_+=e*I,U+=e*Z,d+=e*G,E+=e*q,x+=e*D,M+=e*V,m+=e*X,B+=e*j,S+=e*H,k+=e*J,K+=e*Q,p+=(e=t[11])*P,b+=e*N,g+=e*O,A+=e*C,_+=e*F,U+=e*I,d+=e*Z,E+=e*G,x+=e*q,M+=e*D,m+=e*V,B+=e*X,S+=e*j,k+=e*H,K+=e*J,Y+=e*Q,b+=(e=t[12])*P,g+=e*N,A+=e*O,_+=e*C,U+=e*F,d+=e*I,E+=e*Z,x+=e*G,M+=e*q,m+=e*D,B+=e*V,S+=e*X,k+=e*j,K+=e*H,Y+=e*J,L+=e*Q,g+=(e=t[13])*P,A+=e*N,_+=e*O,U+=e*C,d+=e*F,E+=e*I,x+=e*Z,M+=e*G,m+=e*q,B+=e*D,S+=e*V,k+=e*X,K+=e*j,Y+=e*H,L+=e*J,T+=e*Q,A+=(e=t[14])*P,_+=e*N,U+=e*O,d+=e*C,E+=e*F,x+=e*I,M+=e*Z,m+=e*G,B+=e*q,S+=e*D,k+=e*V,K+=e*X,Y+=e*j,L+=e*H,T+=e*J,z+=e*Q,_+=(e=t[15])*P,h+=38*(d+=e*O),a+=38*(E+=e*C),f+=38*(x+=e*F),s+=38*(M+=e*I),u+=38*(m+=e*Z),c+=38*(B+=e*G),y+=38*(S+=e*q),l+=38*(k+=e*D),w+=38*(K+=e*V),v+=38*(Y+=e*X),p+=38*(L+=e*j),b+=38*(T+=e*H),g+=38*(z+=e*J),A+=38*(R+=e*Q),i=(e=(i+=38*(U+=e*N))+(o=1)+65535)-65536*(o=Math.floor(e/65536)),h=(e=h+o+65535)-65536*(o=Math.floor(e/65536)),a=(e=a+o+65535)-65536*(o=Math.floor(e/65536)),f=(e=f+o+65535)-65536*(o=Math.floor(e/65536)),s=(e=s+o+65535)-65536*(o=Math.floor(e/65536)),u=(e=u+o+65535)-65536*(o=Math.floor(e/65536)),c=(e=c+o+65535)-65536*(o=Math.floor(e/65536)),y=(e=y+o+65535)-65536*(o=Math.floor(e/65536)),l=(e=l+o+65535)-65536*(o=Math.floor(e/65536)),w=(e=w+o+65535)-65536*(o=Math.floor(e/65536)),v=(e=v+o+65535)-65536*(o=Math.floor(e/65536)),p=(e=p+o+65535)-65536*(o=Math.floor(e/65536)),b=(e=b+o+65535)-65536*(o=Math.floor(e/65536)),g=(e=g+o+65535)-65536*(o=Math.floor(e/65536)),A=(e=A+o+65535)-65536*(o=Math.floor(e/65536)),_=(e=_+o+65535)-65536*(o=Math.floor(e/65536)),i=(e=(i+=o-1+37*(o-1))+(o=1)+65535)-65536*(o=Math.floor(e/65536)),h=(e=h+o+65535)-65536*(o=Math.floor(e/65536)),a=(e=a+o+65535)-65536*(o=Math.floor(e/65536)),f=(e=f+o+65535)-65536*(o=Math.floor(e/65536)),s=(e=s+o+65535)-65536*(o=Math.floor(e/65536)),u=(e=u+o+65535)-65536*(o=Math.floor(e/65536)),c=(e=c+o+65535)-65536*(o=Math.floor(e/65536)),y=(e=y+o+65535)-65536*(o=Math.floor(e/65536)),l=(e=l+o+65535)-65536*(o=Math.floor(e/65536)),w=(e=w+o+65535)-65536*(o=Math.floor(e/65536)),v=(e=v+o+65535)-65536*(o=Math.floor(e/65536)),p=(e=p+o+65535)-65536*(o=Math.floor(e/65536)),b=(e=b+o+65535)-65536*(o=Math.floor(e/65536)),g=(e=g+o+65535)-65536*(o=Math.floor(e/65536)),A=(e=A+o+65535)-65536*(o=Math.floor(e/65536)),_=(e=_+o+65535)-65536*(o=Math.floor(e/65536)),i+=o-1+37*(o-1),r[0]=i,r[1]=h,r[2]=a,r[3]=f,r[4]=s,r[5]=u,r[6]=c,r[7]=y,r[8]=l,r[9]=w,r[10]=v,r[11]=p,r[12]=b,r[13]=g,r[14]=A,r[15]=_}function I(r,t){F(r,t,t)}function Z(r,t){var n,e=v();for(n=0;n<16;n++)e[n]=t[n];for(n=253;0<=n;n--)I(e,e),2!==n&&4!==n&&F(e,e,t);for(n=0;n<16;n++)r[n]=e[n]}function G(r,t){var n,e=v();for(n=0;n<16;n++)e[n]=t[n];for(n=250;0<=n;n--)I(e,e),1!==n&&F(e,e,t);for(n=0;n<16;n++)r[n]=e[n]}function q(r,t,n){var e,o,i=new Uint8Array(32),h=new Float64Array(80),a=v(),f=v(),s=v(),u=v(),c=v(),y=v();for(o=0;o<31;o++)i[o]=t[o];for(i[31]=127&t[31]|64,i[0]&=248,N(h,n),o=0;o<16;o++)f[o]=h[o],u[o]=a[o]=s[o]=0;for(a[0]=u[0]=1,o=254;0<=o;--o)T(a,f,e=i[o>>>3]>>>(7&o)&1),T(s,u,e),O(c,a,s),C(a,a,s),O(s,f,u),C(f,f,u),I(u,c),I(y,a),F(a,s,a),F(s,f,c),O(c,a,s),C(a,a,s),I(f,a),C(s,u,y),F(a,s,p),O(a,a,u),F(s,s,a),F(a,u,y),F(u,f,h),I(f,c),T(a,f,e),T(s,u,e);for(o=0;o<16;o++)h[o+16]=a[o],h[o+32]=s[o],h[o+48]=f[o],h[o+64]=u[o];var l=h.subarray(32),w=h.subarray(16);return Z(l,l),F(w,w,l),z(r,w),0}function D(r,t){return q(r,t,n)}function V(r,t){return h(t,32),D(r,t)}function X(r,t,n){var e=new Uint8Array(32);return q(e,n,t),_(r,o,e,U)}m.prototype.blocks=function(r,t,n){for(var e,o,i,h,a,f,s,u,c,y,l,w,v,p,b,g,A,_,U,d=this.fin?0:2048,E=this.h[0],x=this.h[1],M=this.h[2],m=this.h[3],B=this.h[4],S=this.h[5],k=this.h[6],K=this.h[7],Y=this.h[8],L=this.h[9],T=this.r[0],z=this.r[1],R=this.r[2],P=this.r[3],N=this.r[4],O=this.r[5],C=this.r[6],F=this.r[7],I=this.r[8],Z=this.r[9];16<=n;)y=c=0,y+=(E+=8191&(e=255&r[t+0]|(255&r[t+1])<<8))*T,y+=(x+=8191&(e>>>13|(o=255&r[t+2]|(255&r[t+3])<<8)<<3))*(5*Z),y+=(M+=8191&(o>>>10|(i=255&r[t+4]|(255&r[t+5])<<8)<<6))*(5*I),y+=(m+=8191&(i>>>7|(h=255&r[t+6]|(255&r[t+7])<<8)<<9))*(5*F),c=(y+=(B+=8191&(h>>>4|(a=255&r[t+8]|(255&r[t+9])<<8)<<12))*(5*C))>>>13,y&=8191,y+=(S+=a>>>1&8191)*(5*O),y+=(k+=8191&(a>>>14|(f=255&r[t+10]|(255&r[t+11])<<8)<<2))*(5*N),y+=(K+=8191&(f>>>11|(s=255&r[t+12]|(255&r[t+13])<<8)<<5))*(5*P),y+=(Y+=8191&(s>>>8|(u=255&r[t+14]|(255&r[t+15])<<8)<<8))*(5*R),l=c+=(y+=(L+=u>>>5|d)*(5*z))>>>13,l+=E*z,l+=x*T,l+=M*(5*Z),l+=m*(5*I),c=(l+=B*(5*F))>>>13,l&=8191,l+=S*(5*C),l+=k*(5*O),l+=K*(5*N),l+=Y*(5*P),c+=(l+=L*(5*R))>>>13,l&=8191,w=c,w+=E*R,w+=x*z,w+=M*T,w+=m*(5*Z),c=(w+=B*(5*I))>>>13,w&=8191,w+=S*(5*F),w+=k*(5*C),w+=K*(5*O),w+=Y*(5*N),v=c+=(w+=L*(5*P))>>>13,v+=E*P,v+=x*R,v+=M*z,v+=m*T,c=(v+=B*(5*Z))>>>13,v&=8191,v+=S*(5*I),v+=k*(5*F),v+=K*(5*C),v+=Y*(5*O),p=c+=(v+=L*(5*N))>>>13,p+=E*N,p+=x*P,p+=M*R,p+=m*z,c=(p+=B*T)>>>13,p&=8191,p+=S*(5*Z),p+=k*(5*I),p+=K*(5*F),p+=Y*(5*C),b=c+=(p+=L*(5*O))>>>13,b+=E*O,b+=x*N,b+=M*P,b+=m*R,c=(b+=B*z)>>>13,b&=8191,b+=S*T,b+=k*(5*Z),b+=K*(5*I),b+=Y*(5*F),g=c+=(b+=L*(5*C))>>>13,g+=E*C,g+=x*O,g+=M*N,g+=m*P,c=(g+=B*R)>>>13,g&=8191,g+=S*z,g+=k*T,g+=K*(5*Z),g+=Y*(5*I),A=c+=(g+=L*(5*F))>>>13,A+=E*F,A+=x*C,A+=M*O,A+=m*N,c=(A+=B*P)>>>13,A&=8191,A+=S*R,A+=k*z,A+=K*T,A+=Y*(5*Z),_=c+=(A+=L*(5*I))>>>13,_+=E*I,_+=x*F,_+=M*C,_+=m*O,c=(_+=B*N)>>>13,_&=8191,_+=S*P,_+=k*R,_+=K*z,_+=Y*T,U=c+=(_+=L*(5*Z))>>>13,U+=E*Z,U+=x*I,U+=M*F,U+=m*C,c=(U+=B*O)>>>13,U&=8191,U+=S*N,U+=k*P,U+=K*R,U+=Y*z,E=y=8191&(c=(c=((c+=(U+=L*T)>>>13)<<2)+c|0)+(y&=8191)|0),x=l+=c>>>=13,M=w&=8191,m=v&=8191,B=p&=8191,S=b&=8191,k=g&=8191,K=A&=8191,Y=_&=8191,L=U&=8191,t+=16,n-=16;this.h[0]=E,this.h[1]=x,this.h[2]=M,this.h[3]=m,this.h[4]=B,this.h[5]=S,this.h[6]=k,this.h[7]=K,this.h[8]=Y,this.h[9]=L},m.prototype.finish=function(r,t){var n,e,o,i,h=new Uint16Array(10);if(this.leftover){for(i=this.leftover,this.buffer[i++]=1;i<16;i++)this.buffer[i]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(n=this.h[1]>>>13,this.h[1]&=8191,i=2;i<10;i++)this.h[i]+=n,n=this.h[i]>>>13,this.h[i]&=8191;for(this.h[0]+=5*n,n=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=n,n=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=n,h[0]=this.h[0]+5,n=h[0]>>>13,h[0]&=8191,i=1;i<10;i++)h[i]=this.h[i]+n,n=h[i]>>>13,h[i]&=8191;for(h[9]-=8192,e=(1^n)-1,i=0;i<10;i++)h[i]&=e;for(e=~e,i=0;i<10;i++)this.h[i]=this.h[i]&e|h[i];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),o=this.h[0]+this.pad[0],this.h[0]=65535&o,i=1;i<8;i++)o=(this.h[i]+this.pad[i]|0)+(o>>>16)|0,this.h[i]=65535&o;r[t+0]=this.h[0]>>>0&255,r[t+1]=this.h[0]>>>8&255,r[t+2]=this.h[1]>>>0&255,r[t+3]=this.h[1]>>>8&255,r[t+4]=this.h[2]>>>0&255,r[t+5]=this.h[2]>>>8&255,r[t+6]=this.h[3]>>>0&255,r[t+7]=this.h[3]>>>8&255,r[t+8]=this.h[4]>>>0&255,r[t+9]=this.h[4]>>>8&255,r[t+10]=this.h[5]>>>0&255,r[t+11]=this.h[5]>>>8&255,r[t+12]=this.h[6]>>>0&255,r[t+13]=this.h[6]>>>8&255,r[t+14]=this.h[7]>>>0&255,r[t+15]=this.h[7]>>>8&255},m.prototype.update=function(r,t,n){var e,o;if(this.leftover){for(n<(o=16-this.leftover)&&(o=n),e=0;e>>16,m=65535&(d=N),B=d>>>16,x+=65535&(E=((w=Z)>>>14|(a=z)<<18)^(Z>>>18|z<<14)^(z>>>9|Z<<23)),M+=E>>>16,m+=65535&(d=(z>>>14|Z<<18)^(z>>>18|Z<<14)^(Z>>>9|z<<23)),B+=d>>>16,x+=65535&(E=Z&(v=G)^~Z&(p=q)),M+=E>>>16,m+=65535&(d=z&(f=R)^~z&(s=P)),B+=d>>>16,d=J[2*_],x+=65535&(E=J[2*_+1]),M+=E>>>16,m+=65535&d,B+=d>>>16,d=S[_%16],M+=(E=k[_%16])>>>16,m+=65535&d,B+=d>>>16,m+=(M+=(x+=65535&E)>>>16)>>>16,x=65535&(E=A=65535&x|M<<16),M=E>>>16,m=65535&(d=g=65535&m|(B+=m>>>16)<<16),B=d>>>16,x+=65535&(E=(O>>>28|K<<4)^(K>>>2|O<<30)^(K>>>7|O<<25)),M+=E>>>16,m+=65535&(d=(K>>>28|O<<4)^(O>>>2|K<<30)^(O>>>7|K<<25)),B+=d>>>16,M+=(E=O&C^O&F^C&F)>>>16,m+=65535&(d=K&Y^K&L^Y&L),B+=d>>>16,u=65535&(m+=(M+=(x+=65535&E)>>>16)>>>16)|(B+=m>>>16)<<16,b=65535&x|M<<16,x=65535&(E=l),M=E>>>16,m=65535&(d=h),B=d>>>16,M+=(E=A)>>>16,m+=65535&(d=g),B+=d>>>16,Y=K,L=o,T=i,z=h=65535&(m+=(M+=(x+=65535&E)>>>16)>>>16)|(B+=m>>>16)<<16,R=a,P=f,N=s,K=u,C=O,F=c,I=y,Z=l=65535&x|M<<16,G=w,q=v,D=p,O=b,_%16==15)for(U=0;U<16;U++)d=S[U],x=65535&(E=k[U]),M=E>>>16,m=65535&d,B=d>>>16,d=S[(U+9)%16],x+=65535&(E=k[(U+9)%16]),M+=E>>>16,m+=65535&d,B+=d>>>16,g=S[(U+1)%16],x+=65535&(E=((A=k[(U+1)%16])>>>1|g<<31)^(A>>>8|g<<24)^(A>>>7|g<<25)),M+=E>>>16,m+=65535&(d=(g>>>1|A<<31)^(g>>>8|A<<24)^g>>>7),B+=d>>>16,g=S[(U+14)%16],M+=(E=((A=k[(U+14)%16])>>>19|g<<13)^(g>>>29|A<<3)^(A>>>6|g<<26))>>>16,m+=65535&(d=(g>>>19|A<<13)^(A>>>29|g<<3)^g>>>6),B+=d>>>16,B+=(m+=(M+=(x+=65535&E)>>>16)>>>16)>>>16,S[U]=65535&m|B<<16,k[U]=65535&x|M<<16;x=65535&(E=O),M=E>>>16,m=65535&(d=K),B=d>>>16,d=r[0],M+=(E=t[0])>>>16,m+=65535&d,B+=d>>>16,B+=(m+=(M+=(x+=65535&E)>>>16)>>>16)>>>16,r[0]=K=65535&m|B<<16,t[0]=O=65535&x|M<<16,x=65535&(E=C),M=E>>>16,m=65535&(d=Y),B=d>>>16,d=r[1],M+=(E=t[1])>>>16,m+=65535&d,B+=d>>>16,B+=(m+=(M+=(x+=65535&E)>>>16)>>>16)>>>16,r[1]=Y=65535&m|B<<16,t[1]=C=65535&x|M<<16,x=65535&(E=F),M=E>>>16,m=65535&(d=L),B=d>>>16,d=r[2],M+=(E=t[2])>>>16,m+=65535&d,B+=d>>>16,B+=(m+=(M+=(x+=65535&E)>>>16)>>>16)>>>16,r[2]=L=65535&m|B<<16,t[2]=F=65535&x|M<<16,x=65535&(E=I),M=E>>>16,m=65535&(d=T),B=d>>>16,d=r[3],M+=(E=t[3])>>>16,m+=65535&d,B+=d>>>16,B+=(m+=(M+=(x+=65535&E)>>>16)>>>16)>>>16,r[3]=T=65535&m|B<<16,t[3]=I=65535&x|M<<16,x=65535&(E=Z),M=E>>>16,m=65535&(d=z),B=d>>>16,d=r[4],M+=(E=t[4])>>>16,m+=65535&d,B+=d>>>16,B+=(m+=(M+=(x+=65535&E)>>>16)>>>16)>>>16,r[4]=z=65535&m|B<<16,t[4]=Z=65535&x|M<<16,x=65535&(E=G),M=E>>>16,m=65535&(d=R),B=d>>>16,d=r[5],M+=(E=t[5])>>>16,m+=65535&d,B+=d>>>16,B+=(m+=(M+=(x+=65535&E)>>>16)>>>16)>>>16,r[5]=R=65535&m|B<<16,t[5]=G=65535&x|M<<16,x=65535&(E=q),M=E>>>16,m=65535&(d=P),B=d>>>16,d=r[6],M+=(E=t[6])>>>16,m+=65535&d,B+=d>>>16,B+=(m+=(M+=(x+=65535&E)>>>16)>>>16)>>>16,r[6]=P=65535&m|B<<16,t[6]=q=65535&x|M<<16,x=65535&(E=D),M=E>>>16,m=65535&(d=N),B=d>>>16,d=r[7],M+=(E=t[7])>>>16,m+=65535&d,B+=d>>>16,B+=(m+=(M+=(x+=65535&E)>>>16)>>>16)>>>16,r[7]=N=65535&m|B<<16,t[7]=D=65535&x|M<<16,V+=128,e-=128}return e}function W(r,t,n){var e,o=new Int32Array(8),i=new Int32Array(8),h=new Uint8Array(256),a=n;for(o[0]=1779033703,o[1]=3144134277,o[2]=1013904242,o[3]=2773480762,o[4]=1359893119,o[5]=2600822924,o[6]=528734635,o[7]=1541459225,i[0]=4089235720,i[1]=2227873595,i[2]=4271175723,i[3]=1595750129,i[4]=2917565137,i[5]=725511199,i[6]=4215389547,i[7]=327033209,Q(o,i,t,n),n%=128,e=0;e>(7&o)&1),$(t,r),$(r,r),rr(r,t,e)}function er(r,t){var n=[v(),v(),v(),v()];Y(n[0],e),Y(n[1],a),Y(n[2],u),F(n[3],e,a),nr(r,n,t)}function or(r,t,n){var e,o=new Uint8Array(64),i=[v(),v(),v(),v()];for(n||h(t,32),W(o,t,32),o[0]&=248,o[31]&=127,o[31]|=64,er(i,o),tr(r,i),e=0;e<32;e++)t[e+32]=r[e];return 0}var ir=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function hr(r,t){var n,e,o,i;for(e=63;32<=e;--e){for(n=0,o=e-32,i=e-12;o>4)*ir[o],n=t[o]>>8,t[o]&=255;for(o=0;o<32;o++)t[o]-=n*ir[o];for(e=0;e<32;e++)t[e+1]+=t[e]>>8,r[e]=255&t[e]}function ar(r){var t,n=new Float64Array(64);for(t=0;t<64;t++)n[t]=r[t];for(t=0;t<64;t++)r[t]=0;hr(r,n)}function fr(r,t,n,e){var o,i,h=new Uint8Array(64),a=new Uint8Array(64),f=new Uint8Array(64),s=new Float64Array(64),u=[v(),v(),v(),v()];W(h,e,32),h[0]&=248,h[31]&=127,h[31]|=64;var c=n+64;for(o=0;o>7&&C(r[0],s,r[0]),F(r[3],r[0],r[1])}(f,e))return-1;for(o=0;o void): void; +} diff --git a/node_modules/tweetnacl/nacl.js b/node_modules/tweetnacl/nacl.js new file mode 100644 index 0000000..fd8e678 --- /dev/null +++ b/node_modules/tweetnacl/nacl.js @@ -0,0 +1,1178 @@ +(function(nacl) { +'use strict'; + +// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri. +// Public domain. +// +// Implementation derived from TweetNaCl version 20140427. +// See for details: http://tweetnacl.cr.yp.to/ + +var u64 = function(h, l) { this.hi = h|0 >>> 0; this.lo = l|0 >>> 0; }; +var gf = function(init) { + var i, r = new Float64Array(16); + if (init) for (i = 0; i < init.length; i++) r[i] = init[i]; + return r; +}; + +// Pluggable, initialized in high-level API below. +var randombytes = function(/* x, n */) { throw new Error('no PRNG'); }; + +var _0 = new Uint8Array(16); +var _9 = new Uint8Array(32); _9[0] = 9; + +var gf0 = gf(), + gf1 = gf([1]), + _121665 = gf([0xdb41, 1]), + D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]), + D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]), + X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]), + Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]), + I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]); + +function L32(x, c) { return (x << c) | (x >>> (32 - c)); } + +function ld32(x, i) { + var u = x[i+3] & 0xff; + u = (u<<8)|(x[i+2] & 0xff); + u = (u<<8)|(x[i+1] & 0xff); + return (u<<8)|(x[i+0] & 0xff); +} + +function dl64(x, i) { + var h = (x[i] << 24) | (x[i+1] << 16) | (x[i+2] << 8) | x[i+3]; + var l = (x[i+4] << 24) | (x[i+5] << 16) | (x[i+6] << 8) | x[i+7]; + return new u64(h, l); +} + +function st32(x, j, u) { + var i; + for (i = 0; i < 4; i++) { x[j+i] = u & 255; u >>>= 8; } +} + +function ts64(x, i, u) { + x[i] = (u.hi >> 24) & 0xff; + x[i+1] = (u.hi >> 16) & 0xff; + x[i+2] = (u.hi >> 8) & 0xff; + x[i+3] = u.hi & 0xff; + x[i+4] = (u.lo >> 24) & 0xff; + x[i+5] = (u.lo >> 16) & 0xff; + x[i+6] = (u.lo >> 8) & 0xff; + x[i+7] = u.lo & 0xff; +} + +function vn(x, xi, y, yi, n) { + var i,d = 0; + for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i]; + return (1 & ((d - 1) >>> 8)) - 1; +} + +function crypto_verify_16(x, xi, y, yi) { + return vn(x,xi,y,yi,16); +} + +function crypto_verify_32(x, xi, y, yi) { + return vn(x,xi,y,yi,32); +} + +function core(out,inp,k,c,h) { + var w = new Uint32Array(16), x = new Uint32Array(16), + y = new Uint32Array(16), t = new Uint32Array(4); + var i, j, m; + + for (i = 0; i < 4; i++) { + x[5*i] = ld32(c, 4*i); + x[1+i] = ld32(k, 4*i); + x[6+i] = ld32(inp, 4*i); + x[11+i] = ld32(k, 16+4*i); + } + + for (i = 0; i < 16; i++) y[i] = x[i]; + + for (i = 0; i < 20; i++) { + for (j = 0; j < 4; j++) { + for (m = 0; m < 4; m++) t[m] = x[(5*j+4*m)%16]; + t[1] ^= L32((t[0]+t[3])|0, 7); + t[2] ^= L32((t[1]+t[0])|0, 9); + t[3] ^= L32((t[2]+t[1])|0,13); + t[0] ^= L32((t[3]+t[2])|0,18); + for (m = 0; m < 4; m++) w[4*j+(j+m)%4] = t[m]; + } + for (m = 0; m < 16; m++) x[m] = w[m]; + } + + if (h) { + for (i = 0; i < 16; i++) x[i] = (x[i] + y[i]) | 0; + for (i = 0; i < 4; i++) { + x[5*i] = (x[5*i] - ld32(c, 4*i)) | 0; + x[6+i] = (x[6+i] - ld32(inp, 4*i)) | 0; + } + for (i = 0; i < 4; i++) { + st32(out,4*i,x[5*i]); + st32(out,16+4*i,x[6+i]); + } + } else { + for (i = 0; i < 16; i++) st32(out, 4 * i, (x[i] + y[i]) | 0); + } +} + +function crypto_core_salsa20(out,inp,k,c) { + core(out,inp,k,c,false); + return 0; +} + +function crypto_core_hsalsa20(out,inp,k,c) { + core(out,inp,k,c,true); + return 0; +} + +var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]); + // "expand 32-byte k" + +function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + if (!b) return 0; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = (m?m[mpos+i]:0) ^ x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + if (m) mpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = (m?m[mpos+i]:0) ^ x[i]; + } + return 0; +} + +function crypto_stream_salsa20(c,cpos,d,n,k) { + return crypto_stream_salsa20_xor(c,cpos,null,0,d,n,k); +} + +function crypto_stream(c,cpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + return crypto_stream_salsa20(c,cpos,d,n.subarray(16),s); +} + +function crypto_stream_xor(c,cpos,m,mpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,n.subarray(16),s); +} + +function add1305(h, c) { + var j, u = 0; + for (j = 0; j < 17; j++) { + u = (u + ((h[j] + c[j]) | 0)) | 0; + h[j] = u & 255; + u >>>= 8; + } +} + +var minusp = new Uint32Array([ + 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252 +]); + +function crypto_onetimeauth(out, outpos, m, mpos, n, k) { + var s, i, j, u; + var x = new Uint32Array(17), r = new Uint32Array(17), + h = new Uint32Array(17), c = new Uint32Array(17), + g = new Uint32Array(17); + for (j = 0; j < 17; j++) r[j]=h[j]=0; + for (j = 0; j < 16; j++) r[j]=k[j]; + r[3]&=15; + r[4]&=252; + r[7]&=15; + r[8]&=252; + r[11]&=15; + r[12]&=252; + r[15]&=15; + + while (n > 0) { + for (j = 0; j < 17; j++) c[j] = 0; + for (j = 0; (j < 16) && (j < n); ++j) c[j] = m[mpos+j]; + c[j] = 1; + mpos += j; n -= j; + add1305(h,c); + for (i = 0; i < 17; i++) { + x[i] = 0; + for (j = 0; j < 17; j++) x[i] = (x[i] + (h[j] * ((j <= i) ? r[i - j] : ((320 * r[i + 17 - j])|0))) | 0) | 0; + } + for (i = 0; i < 17; i++) h[i] = x[i]; + u = 0; + for (j = 0; j < 16; j++) { + u = (u + h[j]) | 0; + h[j] = u & 255; + u >>>= 8; + } + u = (u + h[16]) | 0; h[16] = u & 3; + u = (5 * (u >>> 2)) | 0; + for (j = 0; j < 16; j++) { + u = (u + h[j]) | 0; + h[j] = u & 255; + u >>>= 8; + } + u = (u + h[16]) | 0; h[16] = u; + } + + for (j = 0; j < 17; j++) g[j] = h[j]; + add1305(h,minusp); + s = (-(h[16] >>> 7) | 0); + for (j = 0; j < 17; j++) h[j] ^= s & (g[j] ^ h[j]); + + for (j = 0; j < 16; j++) c[j] = k[j + 16]; + c[16] = 0; + add1305(h,c); + for (j = 0; j < 16; j++) out[outpos+j] = h[j]; + return 0; +} + +function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) { + var x = new Uint8Array(16); + crypto_onetimeauth(x,0,m,mpos,n,k); + return crypto_verify_16(h,hpos,x,0); +} + +function crypto_secretbox(c,m,d,n,k) { + var i; + if (d < 32) return -1; + crypto_stream_xor(c,0,m,0,d,n,k); + crypto_onetimeauth(c, 16, c, 32, d - 32, c); + for (i = 0; i < 16; i++) c[i] = 0; + return 0; +} + +function crypto_secretbox_open(m,c,d,n,k) { + var i; + var x = new Uint8Array(32); + if (d < 32) return -1; + crypto_stream(x,0,32,n,k); + if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1; + crypto_stream_xor(m,0,c,0,d,n,k); + for (i = 0; i < 32; i++) m[i] = 0; + return 0; +} + +function set25519(r, a) { + var i; + for (i = 0; i < 16; i++) r[i] = a[i]|0; +} + +function car25519(o) { + var c; + var i; + for (i = 0; i < 16; i++) { + o[i] += 65536; + c = Math.floor(o[i] / 65536); + o[(i+1)*(i<15?1:0)] += c - 1 + 37 * (c-1) * (i===15?1:0); + o[i] -= (c * 65536); + } +} + +function sel25519(p, q, b) { + var t, c = ~(b-1); + for (var i = 0; i < 16; i++) { + t = c & (p[i] ^ q[i]); + p[i] ^= t; + q[i] ^= t; + } +} + +function pack25519(o, n) { + var i, j, b; + var m = gf(), t = gf(); + for (i = 0; i < 16; i++) t[i] = n[i]; + car25519(t); + car25519(t); + car25519(t); + for (j = 0; j < 2; j++) { + m[0] = t[0] - 0xffed; + for (i = 1; i < 15; i++) { + m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1); + m[i-1] &= 0xffff; + } + m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1); + b = (m[15]>>16) & 1; + m[14] &= 0xffff; + sel25519(t, m, 1-b); + } + for (i = 0; i < 16; i++) { + o[2*i] = t[i] & 0xff; + o[2*i+1] = t[i]>>8; + } +} + +function neq25519(a, b) { + var c = new Uint8Array(32), d = new Uint8Array(32); + pack25519(c, a); + pack25519(d, b); + return crypto_verify_32(c, 0, d, 0); +} + +function par25519(a) { + var d = new Uint8Array(32); + pack25519(d, a); + return d[0] & 1; +} + +function unpack25519(o, n) { + var i; + for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8); + o[15] &= 0x7fff; +} + +function A(o, a, b) { + var i; + for (i = 0; i < 16; i++) o[i] = (a[i] + b[i])|0; +} + +function Z(o, a, b) { + var i; + for (i = 0; i < 16; i++) o[i] = (a[i] - b[i])|0; +} + +function M(o, a, b) { + var i, j, t = new Float64Array(31); + for (i = 0; i < 31; i++) t[i] = 0; + for (i = 0; i < 16; i++) { + for (j = 0; j < 16; j++) { + t[i+j] += a[i] * b[j]; + } + } + for (i = 0; i < 15; i++) { + t[i] += 38 * t[i+16]; + } + for (i = 0; i < 16; i++) o[i] = t[i]; + car25519(o); + car25519(o); +} + +function S(o, a) { + M(o, a, a); +} + +function inv25519(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 253; a >= 0; a--) { + S(c, c); + if(a !== 2 && a !== 4) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function pow2523(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 250; a >= 0; a--) { + S(c, c); + if(a !== 1) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} + +function crypto_scalarmult(q, n, p) { + var z = new Uint8Array(32); + var x = new Float64Array(80), r, i; + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(); + for (i = 0; i < 31; i++) z[i] = n[i]; + z[31]=(n[31]&127)|64; + z[0]&=248; + unpack25519(x,p); + for (i = 0; i < 16; i++) { + b[i]=x[i]; + d[i]=a[i]=c[i]=0; + } + a[0]=d[0]=1; + for (i=254; i>=0; --i) { + r=(z[i>>>3]>>>(i&7))&1; + sel25519(a,b,r); + sel25519(c,d,r); + A(e,a,c); + Z(a,a,c); + A(c,b,d); + Z(b,b,d); + S(d,e); + S(f,a); + M(a,c,a); + M(c,b,e); + A(e,a,c); + Z(a,a,c); + S(b,a); + Z(c,d,f); + M(a,c,_121665); + A(a,a,d); + M(c,c,a); + M(a,d,f); + M(d,b,x); + S(b,e); + sel25519(a,b,r); + sel25519(c,d,r); + } + for (i = 0; i < 16; i++) { + x[i+16]=a[i]; + x[i+32]=c[i]; + x[i+48]=b[i]; + x[i+64]=d[i]; + } + var x32 = x.subarray(32); + var x16 = x.subarray(16); + inv25519(x32,x32); + M(x16,x16,x32); + pack25519(q,x16); + return 0; +} + +function crypto_scalarmult_base(q, n) { + return crypto_scalarmult(q, n, _9); +} + +function crypto_box_keypair(y, x) { + randombytes(x, 32); + return crypto_scalarmult_base(y, x); +} + +function crypto_box_beforenm(k, y, x) { + var s = new Uint8Array(32); + crypto_scalarmult(s, x, y); + return crypto_core_hsalsa20(k, _0, s, sigma); +} + +var crypto_box_afternm = crypto_secretbox; +var crypto_box_open_afternm = crypto_secretbox_open; + +function crypto_box(c, m, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_afternm(c, m, d, n, k); +} + +function crypto_box_open(m, c, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_open_afternm(m, c, d, n, k); +} + +function add64() { + var a = 0, b = 0, c = 0, d = 0, m16 = 65535, l, h, i; + for (i = 0; i < arguments.length; i++) { + l = arguments[i].lo; + h = arguments[i].hi; + a += (l & m16); b += (l >>> 16); + c += (h & m16); d += (h >>> 16); + } + + b += (a >>> 16); + c += (b >>> 16); + d += (c >>> 16); + + return new u64((c & m16) | (d << 16), (a & m16) | (b << 16)); +} + +function shr64(x, c) { + return new u64((x.hi >>> c), (x.lo >>> c) | (x.hi << (32 - c))); +} + +function xor64() { + var l = 0, h = 0, i; + for (i = 0; i < arguments.length; i++) { + l ^= arguments[i].lo; + h ^= arguments[i].hi; + } + return new u64(h, l); +} + +function R(x, c) { + var h, l, c1 = 32 - c; + if (c < 32) { + h = (x.hi >>> c) | (x.lo << c1); + l = (x.lo >>> c) | (x.hi << c1); + } else if (c < 64) { + h = (x.lo >>> c) | (x.hi << c1); + l = (x.hi >>> c) | (x.lo << c1); + } + return new u64(h, l); +} + +function Ch(x, y, z) { + var h = (x.hi & y.hi) ^ (~x.hi & z.hi), + l = (x.lo & y.lo) ^ (~x.lo & z.lo); + return new u64(h, l); +} + +function Maj(x, y, z) { + var h = (x.hi & y.hi) ^ (x.hi & z.hi) ^ (y.hi & z.hi), + l = (x.lo & y.lo) ^ (x.lo & z.lo) ^ (y.lo & z.lo); + return new u64(h, l); +} + +function Sigma0(x) { return xor64(R(x,28), R(x,34), R(x,39)); } +function Sigma1(x) { return xor64(R(x,14), R(x,18), R(x,41)); } +function sigma0(x) { return xor64(R(x, 1), R(x, 8), shr64(x,7)); } +function sigma1(x) { return xor64(R(x,19), R(x,61), shr64(x,6)); } + +var K = [ + new u64(0x428a2f98, 0xd728ae22), new u64(0x71374491, 0x23ef65cd), + new u64(0xb5c0fbcf, 0xec4d3b2f), new u64(0xe9b5dba5, 0x8189dbbc), + new u64(0x3956c25b, 0xf348b538), new u64(0x59f111f1, 0xb605d019), + new u64(0x923f82a4, 0xaf194f9b), new u64(0xab1c5ed5, 0xda6d8118), + new u64(0xd807aa98, 0xa3030242), new u64(0x12835b01, 0x45706fbe), + new u64(0x243185be, 0x4ee4b28c), new u64(0x550c7dc3, 0xd5ffb4e2), + new u64(0x72be5d74, 0xf27b896f), new u64(0x80deb1fe, 0x3b1696b1), + new u64(0x9bdc06a7, 0x25c71235), new u64(0xc19bf174, 0xcf692694), + new u64(0xe49b69c1, 0x9ef14ad2), new u64(0xefbe4786, 0x384f25e3), + new u64(0x0fc19dc6, 0x8b8cd5b5), new u64(0x240ca1cc, 0x77ac9c65), + new u64(0x2de92c6f, 0x592b0275), new u64(0x4a7484aa, 0x6ea6e483), + new u64(0x5cb0a9dc, 0xbd41fbd4), new u64(0x76f988da, 0x831153b5), + new u64(0x983e5152, 0xee66dfab), new u64(0xa831c66d, 0x2db43210), + new u64(0xb00327c8, 0x98fb213f), new u64(0xbf597fc7, 0xbeef0ee4), + new u64(0xc6e00bf3, 0x3da88fc2), new u64(0xd5a79147, 0x930aa725), + new u64(0x06ca6351, 0xe003826f), new u64(0x14292967, 0x0a0e6e70), + new u64(0x27b70a85, 0x46d22ffc), new u64(0x2e1b2138, 0x5c26c926), + new u64(0x4d2c6dfc, 0x5ac42aed), new u64(0x53380d13, 0x9d95b3df), + new u64(0x650a7354, 0x8baf63de), new u64(0x766a0abb, 0x3c77b2a8), + new u64(0x81c2c92e, 0x47edaee6), new u64(0x92722c85, 0x1482353b), + new u64(0xa2bfe8a1, 0x4cf10364), new u64(0xa81a664b, 0xbc423001), + new u64(0xc24b8b70, 0xd0f89791), new u64(0xc76c51a3, 0x0654be30), + new u64(0xd192e819, 0xd6ef5218), new u64(0xd6990624, 0x5565a910), + new u64(0xf40e3585, 0x5771202a), new u64(0x106aa070, 0x32bbd1b8), + new u64(0x19a4c116, 0xb8d2d0c8), new u64(0x1e376c08, 0x5141ab53), + new u64(0x2748774c, 0xdf8eeb99), new u64(0x34b0bcb5, 0xe19b48a8), + new u64(0x391c0cb3, 0xc5c95a63), new u64(0x4ed8aa4a, 0xe3418acb), + new u64(0x5b9cca4f, 0x7763e373), new u64(0x682e6ff3, 0xd6b2b8a3), + new u64(0x748f82ee, 0x5defb2fc), new u64(0x78a5636f, 0x43172f60), + new u64(0x84c87814, 0xa1f0ab72), new u64(0x8cc70208, 0x1a6439ec), + new u64(0x90befffa, 0x23631e28), new u64(0xa4506ceb, 0xde82bde9), + new u64(0xbef9a3f7, 0xb2c67915), new u64(0xc67178f2, 0xe372532b), + new u64(0xca273ece, 0xea26619c), new u64(0xd186b8c7, 0x21c0c207), + new u64(0xeada7dd6, 0xcde0eb1e), new u64(0xf57d4f7f, 0xee6ed178), + new u64(0x06f067aa, 0x72176fba), new u64(0x0a637dc5, 0xa2c898a6), + new u64(0x113f9804, 0xbef90dae), new u64(0x1b710b35, 0x131c471b), + new u64(0x28db77f5, 0x23047d84), new u64(0x32caab7b, 0x40c72493), + new u64(0x3c9ebe0a, 0x15c9bebc), new u64(0x431d67c4, 0x9c100d4c), + new u64(0x4cc5d4be, 0xcb3e42b6), new u64(0x597f299c, 0xfc657e2a), + new u64(0x5fcb6fab, 0x3ad6faec), new u64(0x6c44198c, 0x4a475817) +]; + +function crypto_hashblocks(x, m, n) { + var z = [], b = [], a = [], w = [], t, i, j; + + for (i = 0; i < 8; i++) z[i] = a[i] = dl64(x, 8*i); + + var pos = 0; + while (n >= 128) { + for (i = 0; i < 16; i++) w[i] = dl64(m, 8*i+pos); + for (i = 0; i < 80; i++) { + for (j = 0; j < 8; j++) b[j] = a[j]; + t = add64(a[7], Sigma1(a[4]), Ch(a[4], a[5], a[6]), K[i], w[i%16]); + b[7] = add64(t, Sigma0(a[0]), Maj(a[0], a[1], a[2])); + b[3] = add64(b[3], t); + for (j = 0; j < 8; j++) a[(j+1)%8] = b[j]; + if (i%16 === 15) { + for (j = 0; j < 16; j++) { + w[j] = add64(w[j], w[(j+9)%16], sigma0(w[(j+1)%16]), sigma1(w[(j+14)%16])); + } + } + } + + for (i = 0; i < 8; i++) { + a[i] = add64(a[i], z[i]); + z[i] = a[i]; + } + + pos += 128; + n -= 128; + } + + for (i = 0; i < 8; i++) ts64(x, 8*i, z[i]); + return n; +} + +var iv = new Uint8Array([ + 0x6a,0x09,0xe6,0x67,0xf3,0xbc,0xc9,0x08, + 0xbb,0x67,0xae,0x85,0x84,0xca,0xa7,0x3b, + 0x3c,0x6e,0xf3,0x72,0xfe,0x94,0xf8,0x2b, + 0xa5,0x4f,0xf5,0x3a,0x5f,0x1d,0x36,0xf1, + 0x51,0x0e,0x52,0x7f,0xad,0xe6,0x82,0xd1, + 0x9b,0x05,0x68,0x8c,0x2b,0x3e,0x6c,0x1f, + 0x1f,0x83,0xd9,0xab,0xfb,0x41,0xbd,0x6b, + 0x5b,0xe0,0xcd,0x19,0x13,0x7e,0x21,0x79 +]); + +function crypto_hash(out, m, n) { + var h = new Uint8Array(64), x = new Uint8Array(256); + var i, b = n; + + for (i = 0; i < 64; i++) h[i] = iv[i]; + + crypto_hashblocks(h, m, n); + n %= 128; + + for (i = 0; i < 256; i++) x[i] = 0; + for (i = 0; i < n; i++) x[i] = m[b-n+i]; + x[n] = 128; + + n = 256-128*(n<112?1:0); + x[n-9] = 0; + ts64(x, n-8, new u64((b / 0x20000000) | 0, b << 3)); + crypto_hashblocks(h, x, n); + + for (i = 0; i < 64; i++) out[i] = h[i]; + + return 0; +} + +function add(p, q) { + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(), + g = gf(), h = gf(), t = gf(); + + Z(a, p[1], p[0]); + Z(t, q[1], q[0]); + M(a, a, t); + A(b, p[0], p[1]); + A(t, q[0], q[1]); + M(b, b, t); + M(c, p[3], q[3]); + M(c, c, D2); + M(d, p[2], q[2]); + A(d, d, d); + Z(e, b, a); + Z(f, d, c); + A(g, d, c); + A(h, b, a); + + M(p[0], e, f); + M(p[1], h, g); + M(p[2], g, f); + M(p[3], e, h); +} + +function cswap(p, q, b) { + var i; + for (i = 0; i < 4; i++) { + sel25519(p[i], q[i], b); + } +} + +function pack(r, p) { + var tx = gf(), ty = gf(), zi = gf(); + inv25519(zi, p[2]); + M(tx, p[0], zi); + M(ty, p[1], zi); + pack25519(r, ty); + r[31] ^= par25519(tx) << 7; +} + +function scalarmult(p, q, s) { + var b, i; + set25519(p[0], gf0); + set25519(p[1], gf1); + set25519(p[2], gf1); + set25519(p[3], gf0); + for (i = 255; i >= 0; --i) { + b = (s[(i/8)|0] >> (i&7)) & 1; + cswap(p, q, b); + add(q, p); + add(p, p); + cswap(p, q, b); + } +} + +function scalarbase(p, s) { + var q = [gf(), gf(), gf(), gf()]; + set25519(q[0], X); + set25519(q[1], Y); + set25519(q[2], gf1); + M(q[3], X, Y); + scalarmult(p, q, s); +} + +function crypto_sign_keypair(pk, sk, seeded) { + var d = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()]; + var i; + + if (!seeded) randombytes(sk, 32); + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + scalarbase(p, d); + pack(pk, p); + + for (i = 0; i < 32; i++) sk[i+32] = pk[i]; + return 0; +} + +var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]); + +function modL(r, x) { + var carry, i, j, k; + for (i = 63; i >= 32; --i) { + carry = 0; + for (j = i - 32, k = i - 12; j < k; ++j) { + x[j] += carry - 16 * x[i] * L[j - (i - 32)]; + carry = Math.floor((x[j] + 128) / 256); + x[j] -= carry * 256; + } + x[j] += carry; + x[i] = 0; + } + carry = 0; + for (j = 0; j < 32; j++) { + x[j] += carry - (x[31] >> 4) * L[j]; + carry = x[j] >> 8; + x[j] &= 255; + } + for (j = 0; j < 32; j++) x[j] -= carry * L[j]; + for (i = 0; i < 32; i++) { + x[i+1] += x[i] >> 8; + r[i] = x[i] & 255; + } +} + +function reduce(r) { + var x = new Float64Array(64), i; + for (i = 0; i < 64; i++) x[i] = r[i]; + for (i = 0; i < 64; i++) r[i] = 0; + modL(r, x); +} + +// Note: difference from C - smlen returned, not passed as argument. +function crypto_sign(sm, m, n, sk) { + var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64); + var i, j, x = new Float64Array(64); + var p = [gf(), gf(), gf(), gf()]; + + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + + var smlen = n + 64; + for (i = 0; i < n; i++) sm[64 + i] = m[i]; + for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i]; + + crypto_hash(r, sm.subarray(32), n+32); + reduce(r); + scalarbase(p, r); + pack(sm, p); + + for (i = 32; i < 64; i++) sm[i] = sk[i]; + crypto_hash(h, sm, n + 64); + reduce(h); + + for (i = 0; i < 64; i++) x[i] = 0; + for (i = 0; i < 32; i++) x[i] = r[i]; + for (i = 0; i < 32; i++) { + for (j = 0; j < 32; j++) { + x[i+j] += h[i] * d[j]; + } + } + + modL(sm.subarray(32), x); + return smlen; +} + +function unpackneg(r, p) { + var t = gf(), chk = gf(), num = gf(), + den = gf(), den2 = gf(), den4 = gf(), + den6 = gf(); + + set25519(r[2], gf1); + unpack25519(r[1], p); + S(num, r[1]); + M(den, num, D); + Z(num, num, r[2]); + A(den, r[2], den); + + S(den2, den); + S(den4, den2); + M(den6, den4, den2); + M(t, den6, num); + M(t, t, den); + + pow2523(t, t); + M(t, t, num); + M(t, t, den); + M(t, t, den); + M(r[0], t, den); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) M(r[0], r[0], I); + + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) return -1; + + if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]); + + M(r[3], r[0], r[1]); + return 0; +} + +function crypto_sign_open(m, sm, n, pk) { + var i; + var t = new Uint8Array(32), h = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()], + q = [gf(), gf(), gf(), gf()]; + + if (n < 64) return -1; + + if (unpackneg(q, pk)) return -1; + + for (i = 0; i < n; i++) m[i] = sm[i]; + for (i = 0; i < 32; i++) m[i+32] = pk[i]; + crypto_hash(h, m, n); + reduce(h); + scalarmult(p, q, h); + + scalarbase(q, sm.subarray(32)); + add(p, q); + pack(t, p); + + n -= 64; + if (crypto_verify_32(sm, 0, t, 0)) { + for (i = 0; i < n; i++) m[i] = 0; + return -1; + } + + for (i = 0; i < n; i++) m[i] = sm[i + 64]; + return n; +} + +var crypto_secretbox_KEYBYTES = 32, + crypto_secretbox_NONCEBYTES = 24, + crypto_secretbox_ZEROBYTES = 32, + crypto_secretbox_BOXZEROBYTES = 16, + crypto_scalarmult_BYTES = 32, + crypto_scalarmult_SCALARBYTES = 32, + crypto_box_PUBLICKEYBYTES = 32, + crypto_box_SECRETKEYBYTES = 32, + crypto_box_BEFORENMBYTES = 32, + crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES, + crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES, + crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES, + crypto_sign_BYTES = 64, + crypto_sign_PUBLICKEYBYTES = 32, + crypto_sign_SECRETKEYBYTES = 64, + crypto_sign_SEEDBYTES = 32, + crypto_hash_BYTES = 64; + +nacl.lowlevel = { + crypto_core_hsalsa20: crypto_core_hsalsa20, + crypto_stream_xor: crypto_stream_xor, + crypto_stream: crypto_stream, + crypto_stream_salsa20_xor: crypto_stream_salsa20_xor, + crypto_stream_salsa20: crypto_stream_salsa20, + crypto_onetimeauth: crypto_onetimeauth, + crypto_onetimeauth_verify: crypto_onetimeauth_verify, + crypto_verify_16: crypto_verify_16, + crypto_verify_32: crypto_verify_32, + crypto_secretbox: crypto_secretbox, + crypto_secretbox_open: crypto_secretbox_open, + crypto_scalarmult: crypto_scalarmult, + crypto_scalarmult_base: crypto_scalarmult_base, + crypto_box_beforenm: crypto_box_beforenm, + crypto_box_afternm: crypto_box_afternm, + crypto_box: crypto_box, + crypto_box_open: crypto_box_open, + crypto_box_keypair: crypto_box_keypair, + crypto_hash: crypto_hash, + crypto_sign: crypto_sign, + crypto_sign_keypair: crypto_sign_keypair, + crypto_sign_open: crypto_sign_open, + + crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES, + crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES, + crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES, + crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES, + crypto_scalarmult_BYTES: crypto_scalarmult_BYTES, + crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES, + crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES, + crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES, + crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES, + crypto_box_NONCEBYTES: crypto_box_NONCEBYTES, + crypto_box_ZEROBYTES: crypto_box_ZEROBYTES, + crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES, + crypto_sign_BYTES: crypto_sign_BYTES, + crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES, + crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES, + crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES, + crypto_hash_BYTES: crypto_hash_BYTES, + + gf: gf, + D: D, + L: L, + pack25519: pack25519, + unpack25519: unpack25519, + M: M, + A: A, + S: S, + Z: Z, + pow2523: pow2523, + add: add, + set25519: set25519, + modL: modL, + scalarmult: scalarmult, + scalarbase: scalarbase, +}; + +/* High-level API */ + +function checkLengths(k, n) { + if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size'); + if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size'); +} + +function checkBoxLengths(pk, sk) { + if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size'); + if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size'); +} + +function checkArrayTypes() { + for (var i = 0; i < arguments.length; i++) { + if (!(arguments[i] instanceof Uint8Array)) + throw new TypeError('unexpected type, use Uint8Array'); + } +} + +function cleanup(arr) { + for (var i = 0; i < arr.length; i++) arr[i] = 0; +} + +nacl.randomBytes = function(n) { + var b = new Uint8Array(n); + randombytes(b, n); + return b; +}; + +nacl.secretbox = function(msg, nonce, key) { + checkArrayTypes(msg, nonce, key); + checkLengths(key, nonce); + var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length); + var c = new Uint8Array(m.length); + for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i]; + crypto_secretbox(c, m, m.length, nonce, key); + return c.subarray(crypto_secretbox_BOXZEROBYTES); +}; + +nacl.secretbox.open = function(box, nonce, key) { + checkArrayTypes(box, nonce, key); + checkLengths(key, nonce); + var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length); + var m = new Uint8Array(c.length); + for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i]; + if (c.length < 32) return null; + if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null; + return m.subarray(crypto_secretbox_ZEROBYTES); +}; + +nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES; +nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES; +nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES; + +nacl.scalarMult = function(n, p) { + checkArrayTypes(n, p); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult(q, n, p); + return q; +}; + +nacl.scalarMult.base = function(n) { + checkArrayTypes(n); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult_base(q, n); + return q; +}; + +nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES; +nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES; + +nacl.box = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox(msg, nonce, k); +}; + +nacl.box.before = function(publicKey, secretKey) { + checkArrayTypes(publicKey, secretKey); + checkBoxLengths(publicKey, secretKey); + var k = new Uint8Array(crypto_box_BEFORENMBYTES); + crypto_box_beforenm(k, publicKey, secretKey); + return k; +}; + +nacl.box.after = nacl.secretbox; + +nacl.box.open = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox.open(msg, nonce, k); +}; + +nacl.box.open.after = nacl.secretbox.open; + +nacl.box.keyPair = function() { + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_box_SECRETKEYBYTES); + crypto_box_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.box.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_box_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + crypto_scalarmult_base(pk, secretKey); + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES; +nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES; +nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES; +nacl.box.nonceLength = crypto_box_NONCEBYTES; +nacl.box.overheadLength = nacl.secretbox.overheadLength; + +nacl.sign = function(msg, secretKey) { + checkArrayTypes(msg, secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length); + crypto_sign(signedMsg, msg, msg.length, secretKey); + return signedMsg; +}; + +nacl.sign.open = function(signedMsg, publicKey) { + checkArrayTypes(signedMsg, publicKey); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var tmp = new Uint8Array(signedMsg.length); + var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey); + if (mlen < 0) return null; + var m = new Uint8Array(mlen); + for (var i = 0; i < m.length; i++) m[i] = tmp[i]; + return m; +}; + +nacl.sign.detached = function(msg, secretKey) { + var signedMsg = nacl.sign(msg, secretKey); + var sig = new Uint8Array(crypto_sign_BYTES); + for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; + return sig; +}; + +nacl.sign.detached.verify = function(msg, sig, publicKey) { + checkArrayTypes(msg, sig, publicKey); + if (sig.length !== crypto_sign_BYTES) + throw new Error('bad signature size'); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var sm = new Uint8Array(crypto_sign_BYTES + msg.length); + var m = new Uint8Array(crypto_sign_BYTES + msg.length); + var i; + for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i]; + for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i]; + return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0); +}; + +nacl.sign.keyPair = function() { + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + crypto_sign_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i]; + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; + +nacl.sign.keyPair.fromSeed = function(seed) { + checkArrayTypes(seed); + if (seed.length !== crypto_sign_SEEDBYTES) + throw new Error('bad seed size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + for (var i = 0; i < 32; i++) sk[i] = seed[i]; + crypto_sign_keypair(pk, sk, true); + return {publicKey: pk, secretKey: sk}; +}; + +nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES; +nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES; +nacl.sign.seedLength = crypto_sign_SEEDBYTES; +nacl.sign.signatureLength = crypto_sign_BYTES; + +nacl.hash = function(msg) { + checkArrayTypes(msg); + var h = new Uint8Array(crypto_hash_BYTES); + crypto_hash(h, msg, msg.length); + return h; +}; + +nacl.hash.hashLength = crypto_hash_BYTES; + +nacl.verify = function(x, y) { + checkArrayTypes(x, y); + // Zero length arguments are considered not equal. + if (x.length === 0 || y.length === 0) return false; + if (x.length !== y.length) return false; + return (vn(x, 0, y, 0, x.length) === 0) ? true : false; +}; + +nacl.setPRNG = function(fn) { + randombytes = fn; +}; + +(function() { + // Initialize PRNG if environment provides CSPRNG. + // If not, methods calling randombytes will throw. + var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null; + if (crypto && crypto.getRandomValues) { + // Browsers. + var QUOTA = 65536; + nacl.setPRNG(function(x, n) { + var i, v = new Uint8Array(n); + for (i = 0; i < n; i += QUOTA) { + crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA))); + } + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } else if (typeof require !== 'undefined') { + // Node.js. + crypto = require('crypto'); + if (crypto && crypto.randomBytes) { + nacl.setPRNG(function(x, n) { + var i, v = crypto.randomBytes(n); + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } + } +})(); + +})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {})); diff --git a/node_modules/tweetnacl/nacl.min.js b/node_modules/tweetnacl/nacl.min.js new file mode 100644 index 0000000..65340cc --- /dev/null +++ b/node_modules/tweetnacl/nacl.min.js @@ -0,0 +1 @@ +!function(i){"use strict";var m=function(r,n){this.hi=0|r,this.lo=0|n},v=function(r){var n,e=new Float64Array(16);if(r)for(n=0;n>>32-n}function b(r,n){var e=255&r[n+3];return(e=(e=e<<8|255&r[n+2])<<8|255&r[n+1])<<8|255&r[n+0]}function B(r,n){var e=r[n]<<24|r[n+1]<<16|r[n+2]<<8|r[n+3],t=r[n+4]<<24|r[n+5]<<16|r[n+6]<<8|r[n+7];return new m(e,t)}function p(r,n,e){var t;for(t=0;t<4;t++)r[n+t]=255&e,e>>>=8}function S(r,n,e){r[n]=e.hi>>24&255,r[n+1]=e.hi>>16&255,r[n+2]=e.hi>>8&255,r[n+3]=255&e.hi,r[n+4]=e.lo>>24&255,r[n+5]=e.lo>>16&255,r[n+6]=e.lo>>8&255,r[n+7]=255&e.lo}function u(r,n,e,t,o){var i,a=0;for(i=0;i>>8)-1}function A(r,n,e,t){return u(r,n,e,t,16)}function _(r,n,e,t){return u(r,n,e,t,32)}function U(r,n,e,t,o){var i,a,f,u=new Uint32Array(16),c=new Uint32Array(16),w=new Uint32Array(16),y=new Uint32Array(4);for(i=0;i<4;i++)c[5*i]=b(t,4*i),c[1+i]=b(e,4*i),c[6+i]=b(n,4*i),c[11+i]=b(e,16+4*i);for(i=0;i<16;i++)w[i]=c[i];for(i=0;i<20;i++){for(a=0;a<4;a++){for(f=0;f<4;f++)y[f]=c[(5*a+4*f)%16];for(y[1]^=h(y[0]+y[3]|0,7),y[2]^=h(y[1]+y[0]|0,9),y[3]^=h(y[2]+y[1]|0,13),y[0]^=h(y[3]+y[2]|0,18),f=0;f<4;f++)u[4*a+(a+f)%4]=y[f]}for(f=0;f<16;f++)c[f]=u[f]}if(o){for(i=0;i<16;i++)c[i]=c[i]+w[i]|0;for(i=0;i<4;i++)c[5*i]=c[5*i]-b(t,4*i)|0,c[6+i]=c[6+i]-b(n,4*i)|0;for(i=0;i<4;i++)p(r,4*i,c[5*i]),p(r,16+4*i,c[6+i])}else for(i=0;i<16;i++)p(r,4*i,c[i]+w[i]|0)}function E(r,n,e,t){U(r,n,e,t,!1)}function x(r,n,e,t){return U(r,n,e,t,!0),0}var d=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function K(r,n,e,t,o,i,a){var f,u,c=new Uint8Array(16),w=new Uint8Array(64);if(!o)return 0;for(u=0;u<16;u++)c[u]=0;for(u=0;u<8;u++)c[u]=i[u];for(;64<=o;){for(E(w,c,a,d),u=0;u<64;u++)r[n+u]=(e?e[t+u]:0)^w[u];for(f=1,u=8;u<16;u++)f=f+(255&c[u])|0,c[u]=255&f,f>>>=8;o-=64,n+=64,e&&(t+=64)}if(0>>=8}var z=new Uint32Array([5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252]);function R(r,n,e,t,o,i){var a,f,u,c,w=new Uint32Array(17),y=new Uint32Array(17),l=new Uint32Array(17),s=new Uint32Array(17),h=new Uint32Array(17);for(u=0;u<17;u++)y[u]=l[u]=0;for(u=0;u<16;u++)y[u]=i[u];for(y[3]&=15,y[4]&=252,y[7]&=15,y[8]&=252,y[11]&=15,y[12]&=252,y[15]&=15;0>>=8;for(c=c+l[16]|0,l[16]=3&c,c=5*(c>>>2)|0,u=0;u<16;u++)c=c+l[u]|0,l[u]=255&c,c>>>=8;c=c+l[16]|0,l[16]=c}for(u=0;u<17;u++)h[u]=l[u];for(k(l,z),a=0|-(l[16]>>>7),u=0;u<17;u++)l[u]^=a&(h[u]^l[u]);for(u=0;u<16;u++)s[u]=i[u+16];for(s[16]=0,k(l,s),u=0;u<16;u++)r[n+u]=l[u];return 0}function P(r,n,e,t,o,i){var a=new Uint8Array(16);return R(a,0,e,t,o,i),A(r,n,a,0)}function M(r,n,e,t,o){var i;if(e<32)return-1;for(T(r,0,n,0,e,t,o),R(r,16,r,32,e-32,r),i=0;i<16;i++)r[i]=0;return 0}function N(r,n,e,t,o){var i,a=new Uint8Array(32);if(e<32)return-1;if(L(a,0,32,t,o),0!==P(n,16,n,32,e-32,a))return-1;for(T(r,0,n,0,e,t,o),i=0;i<32;i++)r[i]=0;return 0}function O(r,n){var e;for(e=0;e<16;e++)r[e]=0|n[e]}function C(r){var n,e;for(e=0;e<16;e++)r[e]+=65536,n=Math.floor(r[e]/65536),r[(e+1)*(e<15?1:0)]+=n-1+37*(n-1)*(15===e?1:0),r[e]-=65536*n}function F(r,n,e){for(var t,o=~(e-1),i=0;i<16;i++)t=o&(r[i]^n[i]),r[i]^=t,n[i]^=t}function Z(r,n){var e,t,o,i=v(),a=v();for(e=0;e<16;e++)a[e]=n[e];for(C(a),C(a),C(a),t=0;t<2;t++){for(i[0]=a[0]-65517,e=1;e<15;e++)i[e]=a[e]-65535-(i[e-1]>>16&1),i[e-1]&=65535;i[15]=a[15]-32767-(i[14]>>16&1),o=i[15]>>16&1,i[14]&=65535,F(a,i,1-o)}for(e=0;e<16;e++)r[2*e]=255&a[e],r[2*e+1]=a[e]>>8}function G(r,n){var e=new Uint8Array(32),t=new Uint8Array(32);return Z(e,r),Z(t,n),_(e,0,t,0)}function q(r){var n=new Uint8Array(32);return Z(n,r),1&n[0]}function D(r,n){var e;for(e=0;e<16;e++)r[e]=n[2*e]+(n[2*e+1]<<8);r[15]&=32767}function I(r,n,e){var t;for(t=0;t<16;t++)r[t]=n[t]+e[t]|0}function V(r,n,e){var t;for(t=0;t<16;t++)r[t]=n[t]-e[t]|0}function X(r,n,e){var t,o,i=new Float64Array(31);for(t=0;t<31;t++)i[t]=0;for(t=0;t<16;t++)for(o=0;o<16;o++)i[t+o]+=n[t]*e[o];for(t=0;t<15;t++)i[t]+=38*i[t+16];for(t=0;t<16;t++)r[t]=i[t];C(r),C(r)}function j(r,n){X(r,n,n)}function H(r,n){var e,t=v();for(e=0;e<16;e++)t[e]=n[e];for(e=253;0<=e;e--)j(t,t),2!==e&&4!==e&&X(t,t,n);for(e=0;e<16;e++)r[e]=t[e]}function J(r,n){var e,t=v();for(e=0;e<16;e++)t[e]=n[e];for(e=250;0<=e;e--)j(t,t),1!==e&&X(t,t,n);for(e=0;e<16;e++)r[e]=t[e]}function Q(r,n,e){var t,o,i=new Uint8Array(32),a=new Float64Array(80),f=v(),u=v(),c=v(),w=v(),y=v(),l=v();for(o=0;o<31;o++)i[o]=n[o];for(i[31]=127&n[31]|64,i[0]&=248,D(a,e),o=0;o<16;o++)u[o]=a[o],w[o]=f[o]=c[o]=0;for(f[0]=w[0]=1,o=254;0<=o;--o)F(f,u,t=i[o>>>3]>>>(7&o)&1),F(c,w,t),I(y,f,c),V(f,f,c),I(c,u,w),V(u,u,w),j(w,y),j(l,f),X(f,c,f),X(c,u,y),I(y,f,c),V(f,f,c),j(u,f),V(c,w,l),X(f,c,g),I(f,f,w),X(c,c,f),X(f,w,l),X(w,u,a),j(u,y),F(f,u,t),F(c,w,t);for(o=0;o<16;o++)a[o+16]=f[o],a[o+32]=c[o],a[o+48]=u[o],a[o+64]=w[o];var s=a.subarray(32),h=a.subarray(16);return H(s,s),X(h,h,s),Z(r,h),0}function W(r,n){return Q(r,n,e)}function $(r,n){return a(n,32),W(r,n)}function rr(r,n,e){var t=new Uint8Array(32);return Q(t,e,n),x(r,o,t,d)}var nr=M,er=N;function tr(){var r,n,e,t=0,o=0,i=0,a=0,f=65535;for(e=0;e>>16,i+=(n=arguments[e].hi)&f,a+=n>>>16;return new m((i+=(o+=t>>>16)>>>16)&f|(a+=i>>>16)<<16,t&f|o<<16)}function or(r,n){return new m(r.hi>>>n,r.lo>>>n|r.hi<<32-n)}function ir(){var r,n=0,e=0;for(r=0;r>>n|r.lo<>>n|r.hi<>>n|r.hi<>>n|r.lo<>(7&o)&1),yr(n,r),yr(r,r),lr(r,n,t)}function vr(r,n){var e=[v(),v(),v(),v()];O(e[0],t),O(e[1],f),O(e[2],w),X(e[3],t,f),hr(r,e,n)}function gr(r,n,e){var t,o=new Uint8Array(64),i=[v(),v(),v(),v()];for(e||a(n,32),wr(o,n,32),o[0]&=248,o[31]&=127,o[31]|=64,vr(i,o),sr(r,i),t=0;t<32;t++)n[t+32]=r[t];return 0}var br=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function pr(r,n){var e,t,o,i;for(t=63;32<=t;--t){for(e=0,o=t-32,i=t-12;o>4)*br[o],e=n[o]>>8,n[o]&=255;for(o=0;o<32;o++)n[o]-=e*br[o];for(t=0;t<32;t++)n[t+1]+=n[t]>>8,r[t]=255&n[t]}function Ar(r){var n,e=new Float64Array(64);for(n=0;n<64;n++)e[n]=r[n];for(n=0;n<64;n++)r[n]=0;pr(r,e)}function _r(r,n,e,t){var o,i,a=new Uint8Array(64),f=new Uint8Array(64),u=new Uint8Array(64),c=new Float64Array(64),w=[v(),v(),v(),v()];wr(a,t,32),a[0]&=248,a[31]&=127,a[31]|=64;var y=e+64;for(o=0;o>7&&V(r[0],c,r[0]),X(r[3],r[0],r[1])}(u,t))return-1;for(o=0;o/dev/null && browserify test/browser/init.js test/*.quick.js | uglifyjs -c -m -o test/browser/_bundle-quick.js 2>/dev/null", + "test": "npm run test-node-all", + "bench": "node test/benchmark/bench.js", + "lint": "eslint nacl.js nacl-fast.js test/*.js test/benchmark/*.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/dchest/tweetnacl-js.git" + }, + "keywords": [ + "crypto", + "cryptography", + "curve25519", + "ed25519", + "encrypt", + "hash", + "key", + "nacl", + "poly1305", + "public", + "salsa20", + "signatures" + ], + "author": "TweetNaCl-js contributors", + "license": "Unlicense", + "bugs": { + "url": "https://github.com/dchest/tweetnacl-js/issues" + }, + "homepage": "https://tweetnacl.js.org", + "devDependencies": { + "browserify": "^16.2.3", + "eslint": "^6.8.0", + "faucet": "^0.0.1", + "tap-browser-color": "^0.1.2", + "tape": "^4.13.0", + "tweetnacl-util": "^0.15.0", + "uglify-js": "^3.7.5" + }, + "browser": { + "buffer": false, + "crypto": false + } +} diff --git a/node_modules/ws/LICENSE b/node_modules/ws/LICENSE new file mode 100644 index 0000000..1da5b96 --- /dev/null +++ b/node_modules/ws/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2011 Einar Otto Stangvik +Copyright (c) 2013 Arnout Kazemier and contributors +Copyright (c) 2016 Luigi Pinca and contributors + +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. diff --git a/node_modules/ws/README.md b/node_modules/ws/README.md new file mode 100644 index 0000000..a550ca1 --- /dev/null +++ b/node_modules/ws/README.md @@ -0,0 +1,536 @@ +# ws: a Node.js WebSocket library + +[![Version npm](https://img.shields.io/npm/v/ws.svg?logo=npm)](https://www.npmjs.com/package/ws) +[![CI](https://img.shields.io/github/actions/workflow/status/websockets/ws/ci.yml?branch=master&label=CI&logo=github)](https://github.com/websockets/ws/actions?query=workflow%3ACI+branch%3Amaster) +[![Coverage Status](https://img.shields.io/coveralls/websockets/ws/master.svg?logo=coveralls)](https://coveralls.io/github/websockets/ws) + +ws is a simple to use, blazing fast, and thoroughly tested WebSocket client and +server implementation. + +Passes the quite extensive Autobahn test suite: [server][server-report], +[client][client-report]. + +**Note**: This module does not work in the browser. The client in the docs is a +reference to a back end with the role of a client in the WebSocket +communication. Browser clients must use the native +[`WebSocket`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) +object. To make the same code work seamlessly on Node.js and the browser, you +can use one of the many wrappers available on npm, like +[isomorphic-ws](https://github.com/heineiuo/isomorphic-ws). + +## Table of Contents + +- [Protocol support](#protocol-support) +- [Installing](#installing) + - [Opt-in for performance](#opt-in-for-performance) +- [API docs](#api-docs) +- [WebSocket compression](#websocket-compression) +- [Usage examples](#usage-examples) + - [Sending and receiving text data](#sending-and-receiving-text-data) + - [Sending binary data](#sending-binary-data) + - [Simple server](#simple-server) + - [External HTTP/S server](#external-https-server) + - [Multiple servers sharing a single HTTP/S server](#multiple-servers-sharing-a-single-https-server) + - [Client authentication](#client-authentication) + - [Server broadcast](#server-broadcast) + - [Round-trip time](#round-trip-time) + - [Use the Node.js streams API](#use-the-nodejs-streams-api) + - [Other examples](#other-examples) +- [FAQ](#faq) + - [How to get the IP address of the client?](#how-to-get-the-ip-address-of-the-client) + - [How to detect and close broken connections?](#how-to-detect-and-close-broken-connections) + - [How to connect via a proxy?](#how-to-connect-via-a-proxy) +- [Changelog](#changelog) +- [License](#license) + +## Protocol support + +- **HyBi drafts 07-12** (Use the option `protocolVersion: 8`) +- **HyBi drafts 13-17** (Current default, alternatively option + `protocolVersion: 13`) + +## Installing + +``` +npm install ws +``` + +### Opt-in for performance + +There are 2 optional modules that can be installed along side with the ws +module. These modules are binary addons that improve the performance of certain +operations. Prebuilt binaries are available for the most popular platforms so +you don't necessarily need to have a C++ compiler installed on your machine. + +- `npm install --save-optional bufferutil`: Allows to efficiently perform + operations such as masking and unmasking the data payload of the WebSocket + frames. +- `npm install --save-optional utf-8-validate`: Allows to efficiently check if a + message contains valid UTF-8. + +To not even try to require and use these modules, use the +[`WS_NO_BUFFER_UTIL`](./doc/ws.md#ws_no_buffer_util) and +[`WS_NO_UTF_8_VALIDATE`](./doc/ws.md#ws_no_utf_8_validate) environment +variables. These might be useful to enhance security in systems where a user can +put a package in the package search path of an application of another user, due +to how the Node.js resolver algorithm works. + +The `utf-8-validate` module is not needed and is not required, even if it is +already installed, regardless of the value of the `WS_NO_UTF_8_VALIDATE` +environment variable, if [`buffer.isUtf8()`][] is available. + +## API docs + +See [`/doc/ws.md`](./doc/ws.md) for Node.js-like documentation of ws classes and +utility functions. + +## WebSocket compression + +ws supports the [permessage-deflate extension][permessage-deflate] which enables +the client and server to negotiate a compression algorithm and its parameters, +and then selectively apply it to the data payloads of each WebSocket message. + +The extension is disabled by default on the server and enabled by default on the +client. It adds a significant overhead in terms of performance and memory +consumption so we suggest to enable it only if it is really needed. + +Note that Node.js has a variety of issues with high-performance compression, +where increased concurrency, especially on Linux, can lead to [catastrophic +memory fragmentation][node-zlib-bug] and slow performance. If you intend to use +permessage-deflate in production, it is worthwhile to set up a test +representative of your workload and ensure Node.js/zlib will handle it with +acceptable performance and memory usage. + +Tuning of permessage-deflate can be done via the options defined below. You can +also use `zlibDeflateOptions` and `zlibInflateOptions`, which is passed directly +into the creation of [raw deflate/inflate streams][node-zlib-deflaterawdocs]. + +See [the docs][ws-server-options] for more options. + +```js +import WebSocket, { WebSocketServer } from 'ws'; + +const wss = new WebSocketServer({ + port: 8080, + perMessageDeflate: { + zlibDeflateOptions: { + // See zlib defaults. + chunkSize: 1024, + memLevel: 7, + level: 3 + }, + zlibInflateOptions: { + chunkSize: 10 * 1024 + }, + // Other options settable: + clientNoContextTakeover: true, // Defaults to negotiated value. + serverNoContextTakeover: true, // Defaults to negotiated value. + serverMaxWindowBits: 10, // Defaults to negotiated value. + // Below options specified as default values. + concurrencyLimit: 10, // Limits zlib concurrency for perf. + threshold: 1024 // Size (in bytes) below which messages + // should not be compressed if context takeover is disabled. + } +}); +``` + +The client will only use the extension if it is supported and enabled on the +server. To always disable the extension on the client set the +`perMessageDeflate` option to `false`. + +```js +import WebSocket from 'ws'; + +const ws = new WebSocket('ws://www.host.com/path', { + perMessageDeflate: false +}); +``` + +## Usage examples + +### Sending and receiving text data + +```js +import WebSocket from 'ws'; + +const ws = new WebSocket('ws://www.host.com/path'); + +ws.on('error', console.error); + +ws.on('open', function open() { + ws.send('something'); +}); + +ws.on('message', function message(data) { + console.log('received: %s', data); +}); +``` + +### Sending binary data + +```js +import WebSocket from 'ws'; + +const ws = new WebSocket('ws://www.host.com/path'); + +ws.on('error', console.error); + +ws.on('open', function open() { + const array = new Float32Array(5); + + for (var i = 0; i < array.length; ++i) { + array[i] = i / 2; + } + + ws.send(array); +}); +``` + +### Simple server + +```js +import { WebSocketServer } from 'ws'; + +const wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.on('error', console.error); + + ws.on('message', function message(data) { + console.log('received: %s', data); + }); + + ws.send('something'); +}); +``` + +### External HTTP/S server + +```js +import { createServer } from 'https'; +import { readFileSync } from 'fs'; +import { WebSocketServer } from 'ws'; + +const server = createServer({ + cert: readFileSync('/path/to/cert.pem'), + key: readFileSync('/path/to/key.pem') +}); +const wss = new WebSocketServer({ server }); + +wss.on('connection', function connection(ws) { + ws.on('error', console.error); + + ws.on('message', function message(data) { + console.log('received: %s', data); + }); + + ws.send('something'); +}); + +server.listen(8080); +``` + +### Multiple servers sharing a single HTTP/S server + +```js +import { createServer } from 'http'; +import { parse } from 'url'; +import { WebSocketServer } from 'ws'; + +const server = createServer(); +const wss1 = new WebSocketServer({ noServer: true }); +const wss2 = new WebSocketServer({ noServer: true }); + +wss1.on('connection', function connection(ws) { + ws.on('error', console.error); + + // ... +}); + +wss2.on('connection', function connection(ws) { + ws.on('error', console.error); + + // ... +}); + +server.on('upgrade', function upgrade(request, socket, head) { + const { pathname } = parse(request.url); + + if (pathname === '/foo') { + wss1.handleUpgrade(request, socket, head, function done(ws) { + wss1.emit('connection', ws, request); + }); + } else if (pathname === '/bar') { + wss2.handleUpgrade(request, socket, head, function done(ws) { + wss2.emit('connection', ws, request); + }); + } else { + socket.destroy(); + } +}); + +server.listen(8080); +``` + +### Client authentication + +```js +import { createServer } from 'http'; +import { WebSocketServer } from 'ws'; + +function onSocketError(err) { + console.error(err); +} + +const server = createServer(); +const wss = new WebSocketServer({ noServer: true }); + +wss.on('connection', function connection(ws, request, client) { + ws.on('error', console.error); + + ws.on('message', function message(data) { + console.log(`Received message ${data} from user ${client}`); + }); +}); + +server.on('upgrade', function upgrade(request, socket, head) { + socket.on('error', onSocketError); + + // This function is not defined on purpose. Implement it with your own logic. + authenticate(request, function next(err, client) { + if (err || !client) { + socket.write('HTTP/1.1 401 Unauthorized\r\n\r\n'); + socket.destroy(); + return; + } + + socket.removeListener('error', onSocketError); + + wss.handleUpgrade(request, socket, head, function done(ws) { + wss.emit('connection', ws, request, client); + }); + }); +}); + +server.listen(8080); +``` + +Also see the provided [example][session-parse-example] using `express-session`. + +### Server broadcast + +A client WebSocket broadcasting to all connected WebSocket clients, including +itself. + +```js +import WebSocket, { WebSocketServer } from 'ws'; + +const wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.on('error', console.error); + + ws.on('message', function message(data, isBinary) { + wss.clients.forEach(function each(client) { + if (client.readyState === WebSocket.OPEN) { + client.send(data, { binary: isBinary }); + } + }); + }); +}); +``` + +A client WebSocket broadcasting to every other connected WebSocket clients, +excluding itself. + +```js +import WebSocket, { WebSocketServer } from 'ws'; + +const wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.on('error', console.error); + + ws.on('message', function message(data, isBinary) { + wss.clients.forEach(function each(client) { + if (client !== ws && client.readyState === WebSocket.OPEN) { + client.send(data, { binary: isBinary }); + } + }); + }); +}); +``` + +### Round-trip time + +```js +import WebSocket from 'ws'; + +const ws = new WebSocket('wss://websocket-echo.com/'); + +ws.on('error', console.error); + +ws.on('open', function open() { + console.log('connected'); + ws.send(Date.now()); +}); + +ws.on('close', function close() { + console.log('disconnected'); +}); + +ws.on('message', function message(data) { + console.log(`Round-trip time: ${Date.now() - data} ms`); + + setTimeout(function timeout() { + ws.send(Date.now()); + }, 500); +}); +``` + +### Use the Node.js streams API + +```js +import WebSocket, { createWebSocketStream } from 'ws'; + +const ws = new WebSocket('wss://websocket-echo.com/'); + +const duplex = createWebSocketStream(ws, { encoding: 'utf8' }); + +duplex.on('error', console.error); + +duplex.pipe(process.stdout); +process.stdin.pipe(duplex); +``` + +### Other examples + +For a full example with a browser client communicating with a ws server, see the +examples folder. + +Otherwise, see the test cases. + +## FAQ + +### How to get the IP address of the client? + +The remote IP address can be obtained from the raw socket. + +```js +import { WebSocketServer } from 'ws'; + +const wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws, req) { + const ip = req.socket.remoteAddress; + + ws.on('error', console.error); +}); +``` + +When the server runs behind a proxy like NGINX, the de-facto standard is to use +the `X-Forwarded-For` header. + +```js +wss.on('connection', function connection(ws, req) { + const ip = req.headers['x-forwarded-for'].split(',')[0].trim(); + + ws.on('error', console.error); +}); +``` + +### How to detect and close broken connections? + +Sometimes the link between the server and the client can be interrupted in a way +that keeps both the server and the client unaware of the broken state of the +connection (e.g. when pulling the cord). + +In these cases ping messages can be used as a means to verify that the remote +endpoint is still responsive. + +```js +import { WebSocketServer } from 'ws'; + +function heartbeat() { + this.isAlive = true; +} + +const wss = new WebSocketServer({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.isAlive = true; + ws.on('error', console.error); + ws.on('pong', heartbeat); +}); + +const interval = setInterval(function ping() { + wss.clients.forEach(function each(ws) { + if (ws.isAlive === false) return ws.terminate(); + + ws.isAlive = false; + ws.ping(); + }); +}, 30000); + +wss.on('close', function close() { + clearInterval(interval); +}); +``` + +Pong messages are automatically sent in response to ping messages as required by +the spec. + +Just like the server example above your clients might as well lose connection +without knowing it. You might want to add a ping listener on your clients to +prevent that. A simple implementation would be: + +```js +import WebSocket from 'ws'; + +function heartbeat() { + clearTimeout(this.pingTimeout); + + // Use `WebSocket#terminate()`, which immediately destroys the connection, + // instead of `WebSocket#close()`, which waits for the close timer. + // Delay should be equal to the interval at which your server + // sends out pings plus a conservative assumption of the latency. + this.pingTimeout = setTimeout(() => { + this.terminate(); + }, 30000 + 1000); +} + +const client = new WebSocket('wss://websocket-echo.com/'); + +client.on('error', console.error); +client.on('open', heartbeat); +client.on('ping', heartbeat); +client.on('close', function clear() { + clearTimeout(this.pingTimeout); +}); +``` + +### How to connect via a proxy? + +Use a custom `http.Agent` implementation like [https-proxy-agent][] or +[socks-proxy-agent][]. + +## Changelog + +We're using the GitHub [releases][changelog] for changelog entries. + +## License + +[MIT](LICENSE) + +[`buffer.isutf8()`]: https://nodejs.org/api/buffer.html#bufferisutf8input +[changelog]: https://github.com/websockets/ws/releases +[client-report]: http://websockets.github.io/ws/autobahn/clients/ +[https-proxy-agent]: https://github.com/TooTallNate/node-https-proxy-agent +[node-zlib-bug]: https://github.com/nodejs/node/issues/8871 +[node-zlib-deflaterawdocs]: + https://nodejs.org/api/zlib.html#zlib_zlib_createdeflateraw_options +[permessage-deflate]: https://tools.ietf.org/html/rfc7692 +[server-report]: http://websockets.github.io/ws/autobahn/servers/ +[session-parse-example]: ./examples/express-session-parse +[socks-proxy-agent]: https://github.com/TooTallNate/node-socks-proxy-agent +[ws-server-options]: ./doc/ws.md#new-websocketserveroptions-callback diff --git a/node_modules/ws/browser.js b/node_modules/ws/browser.js new file mode 100644 index 0000000..ca4f628 --- /dev/null +++ b/node_modules/ws/browser.js @@ -0,0 +1,8 @@ +'use strict'; + +module.exports = function () { + throw new Error( + 'ws does not work in the browser. Browser clients must use the native ' + + 'WebSocket object' + ); +}; diff --git a/node_modules/ws/index.js b/node_modules/ws/index.js new file mode 100644 index 0000000..41edb3b --- /dev/null +++ b/node_modules/ws/index.js @@ -0,0 +1,13 @@ +'use strict'; + +const WebSocket = require('./lib/websocket'); + +WebSocket.createWebSocketStream = require('./lib/stream'); +WebSocket.Server = require('./lib/websocket-server'); +WebSocket.Receiver = require('./lib/receiver'); +WebSocket.Sender = require('./lib/sender'); + +WebSocket.WebSocket = WebSocket; +WebSocket.WebSocketServer = WebSocket.Server; + +module.exports = WebSocket; diff --git a/node_modules/ws/lib/buffer-util.js b/node_modules/ws/lib/buffer-util.js new file mode 100644 index 0000000..f7536e2 --- /dev/null +++ b/node_modules/ws/lib/buffer-util.js @@ -0,0 +1,131 @@ +'use strict'; + +const { EMPTY_BUFFER } = require('./constants'); + +const FastBuffer = Buffer[Symbol.species]; + +/** + * Merges an array of buffers into a new buffer. + * + * @param {Buffer[]} list The array of buffers to concat + * @param {Number} totalLength The total length of buffers in the list + * @return {Buffer} The resulting buffer + * @public + */ +function concat(list, totalLength) { + if (list.length === 0) return EMPTY_BUFFER; + if (list.length === 1) return list[0]; + + const target = Buffer.allocUnsafe(totalLength); + let offset = 0; + + for (let i = 0; i < list.length; i++) { + const buf = list[i]; + target.set(buf, offset); + offset += buf.length; + } + + if (offset < totalLength) { + return new FastBuffer(target.buffer, target.byteOffset, offset); + } + + return target; +} + +/** + * Masks a buffer using the given mask. + * + * @param {Buffer} source The buffer to mask + * @param {Buffer} mask The mask to use + * @param {Buffer} output The buffer where to store the result + * @param {Number} offset The offset at which to start writing + * @param {Number} length The number of bytes to mask. + * @public + */ +function _mask(source, mask, output, offset, length) { + for (let i = 0; i < length; i++) { + output[offset + i] = source[i] ^ mask[i & 3]; + } +} + +/** + * Unmasks a buffer using the given mask. + * + * @param {Buffer} buffer The buffer to unmask + * @param {Buffer} mask The mask to use + * @public + */ +function _unmask(buffer, mask) { + for (let i = 0; i < buffer.length; i++) { + buffer[i] ^= mask[i & 3]; + } +} + +/** + * Converts a buffer to an `ArrayBuffer`. + * + * @param {Buffer} buf The buffer to convert + * @return {ArrayBuffer} Converted buffer + * @public + */ +function toArrayBuffer(buf) { + if (buf.length === buf.buffer.byteLength) { + return buf.buffer; + } + + return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.length); +} + +/** + * Converts `data` to a `Buffer`. + * + * @param {*} data The data to convert + * @return {Buffer} The buffer + * @throws {TypeError} + * @public + */ +function toBuffer(data) { + toBuffer.readOnly = true; + + if (Buffer.isBuffer(data)) return data; + + let buf; + + if (data instanceof ArrayBuffer) { + buf = new FastBuffer(data); + } else if (ArrayBuffer.isView(data)) { + buf = new FastBuffer(data.buffer, data.byteOffset, data.byteLength); + } else { + buf = Buffer.from(data); + toBuffer.readOnly = false; + } + + return buf; +} + +module.exports = { + concat, + mask: _mask, + toArrayBuffer, + toBuffer, + unmask: _unmask +}; + +/* istanbul ignore else */ +if (!process.env.WS_NO_BUFFER_UTIL) { + try { + const bufferUtil = require('bufferutil'); + + module.exports.mask = function (source, mask, output, offset, length) { + if (length < 48) _mask(source, mask, output, offset, length); + else bufferUtil.mask(source, mask, output, offset, length); + }; + + module.exports.unmask = function (buffer, mask) { + if (buffer.length < 32) _unmask(buffer, mask); + else bufferUtil.unmask(buffer, mask); + }; + } catch (e) { + // Continue regardless of the error. + } +} diff --git a/node_modules/ws/lib/constants.js b/node_modules/ws/lib/constants.js new file mode 100644 index 0000000..d691b30 --- /dev/null +++ b/node_modules/ws/lib/constants.js @@ -0,0 +1,12 @@ +'use strict'; + +module.exports = { + BINARY_TYPES: ['nodebuffer', 'arraybuffer', 'fragments'], + EMPTY_BUFFER: Buffer.alloc(0), + GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11', + kForOnEventAttribute: Symbol('kIsForOnEventAttribute'), + kListener: Symbol('kListener'), + kStatusCode: Symbol('status-code'), + kWebSocket: Symbol('websocket'), + NOOP: () => {} +}; diff --git a/node_modules/ws/lib/event-target.js b/node_modules/ws/lib/event-target.js new file mode 100644 index 0000000..fea4cbc --- /dev/null +++ b/node_modules/ws/lib/event-target.js @@ -0,0 +1,292 @@ +'use strict'; + +const { kForOnEventAttribute, kListener } = require('./constants'); + +const kCode = Symbol('kCode'); +const kData = Symbol('kData'); +const kError = Symbol('kError'); +const kMessage = Symbol('kMessage'); +const kReason = Symbol('kReason'); +const kTarget = Symbol('kTarget'); +const kType = Symbol('kType'); +const kWasClean = Symbol('kWasClean'); + +/** + * Class representing an event. + */ +class Event { + /** + * Create a new `Event`. + * + * @param {String} type The name of the event + * @throws {TypeError} If the `type` argument is not specified + */ + constructor(type) { + this[kTarget] = null; + this[kType] = type; + } + + /** + * @type {*} + */ + get target() { + return this[kTarget]; + } + + /** + * @type {String} + */ + get type() { + return this[kType]; + } +} + +Object.defineProperty(Event.prototype, 'target', { enumerable: true }); +Object.defineProperty(Event.prototype, 'type', { enumerable: true }); + +/** + * Class representing a close event. + * + * @extends Event + */ +class CloseEvent extends Event { + /** + * Create a new `CloseEvent`. + * + * @param {String} type The name of the event + * @param {Object} [options] A dictionary object that allows for setting + * attributes via object members of the same name + * @param {Number} [options.code=0] The status code explaining why the + * connection was closed + * @param {String} [options.reason=''] A human-readable string explaining why + * the connection was closed + * @param {Boolean} [options.wasClean=false] Indicates whether or not the + * connection was cleanly closed + */ + constructor(type, options = {}) { + super(type); + + this[kCode] = options.code === undefined ? 0 : options.code; + this[kReason] = options.reason === undefined ? '' : options.reason; + this[kWasClean] = options.wasClean === undefined ? false : options.wasClean; + } + + /** + * @type {Number} + */ + get code() { + return this[kCode]; + } + + /** + * @type {String} + */ + get reason() { + return this[kReason]; + } + + /** + * @type {Boolean} + */ + get wasClean() { + return this[kWasClean]; + } +} + +Object.defineProperty(CloseEvent.prototype, 'code', { enumerable: true }); +Object.defineProperty(CloseEvent.prototype, 'reason', { enumerable: true }); +Object.defineProperty(CloseEvent.prototype, 'wasClean', { enumerable: true }); + +/** + * Class representing an error event. + * + * @extends Event + */ +class ErrorEvent extends Event { + /** + * Create a new `ErrorEvent`. + * + * @param {String} type The name of the event + * @param {Object} [options] A dictionary object that allows for setting + * attributes via object members of the same name + * @param {*} [options.error=null] The error that generated this event + * @param {String} [options.message=''] The error message + */ + constructor(type, options = {}) { + super(type); + + this[kError] = options.error === undefined ? null : options.error; + this[kMessage] = options.message === undefined ? '' : options.message; + } + + /** + * @type {*} + */ + get error() { + return this[kError]; + } + + /** + * @type {String} + */ + get message() { + return this[kMessage]; + } +} + +Object.defineProperty(ErrorEvent.prototype, 'error', { enumerable: true }); +Object.defineProperty(ErrorEvent.prototype, 'message', { enumerable: true }); + +/** + * Class representing a message event. + * + * @extends Event + */ +class MessageEvent extends Event { + /** + * Create a new `MessageEvent`. + * + * @param {String} type The name of the event + * @param {Object} [options] A dictionary object that allows for setting + * attributes via object members of the same name + * @param {*} [options.data=null] The message content + */ + constructor(type, options = {}) { + super(type); + + this[kData] = options.data === undefined ? null : options.data; + } + + /** + * @type {*} + */ + get data() { + return this[kData]; + } +} + +Object.defineProperty(MessageEvent.prototype, 'data', { enumerable: true }); + +/** + * This provides methods for emulating the `EventTarget` interface. It's not + * meant to be used directly. + * + * @mixin + */ +const EventTarget = { + /** + * Register an event listener. + * + * @param {String} type A string representing the event type to listen for + * @param {(Function|Object)} handler The listener to add + * @param {Object} [options] An options object specifies characteristics about + * the event listener + * @param {Boolean} [options.once=false] A `Boolean` indicating that the + * listener should be invoked at most once after being added. If `true`, + * the listener would be automatically removed when invoked. + * @public + */ + addEventListener(type, handler, options = {}) { + for (const listener of this.listeners(type)) { + if ( + !options[kForOnEventAttribute] && + listener[kListener] === handler && + !listener[kForOnEventAttribute] + ) { + return; + } + } + + let wrapper; + + if (type === 'message') { + wrapper = function onMessage(data, isBinary) { + const event = new MessageEvent('message', { + data: isBinary ? data : data.toString() + }); + + event[kTarget] = this; + callListener(handler, this, event); + }; + } else if (type === 'close') { + wrapper = function onClose(code, message) { + const event = new CloseEvent('close', { + code, + reason: message.toString(), + wasClean: this._closeFrameReceived && this._closeFrameSent + }); + + event[kTarget] = this; + callListener(handler, this, event); + }; + } else if (type === 'error') { + wrapper = function onError(error) { + const event = new ErrorEvent('error', { + error, + message: error.message + }); + + event[kTarget] = this; + callListener(handler, this, event); + }; + } else if (type === 'open') { + wrapper = function onOpen() { + const event = new Event('open'); + + event[kTarget] = this; + callListener(handler, this, event); + }; + } else { + return; + } + + wrapper[kForOnEventAttribute] = !!options[kForOnEventAttribute]; + wrapper[kListener] = handler; + + if (options.once) { + this.once(type, wrapper); + } else { + this.on(type, wrapper); + } + }, + + /** + * Remove an event listener. + * + * @param {String} type A string representing the event type to remove + * @param {(Function|Object)} handler The listener to remove + * @public + */ + removeEventListener(type, handler) { + for (const listener of this.listeners(type)) { + if (listener[kListener] === handler && !listener[kForOnEventAttribute]) { + this.removeListener(type, listener); + break; + } + } + } +}; + +module.exports = { + CloseEvent, + ErrorEvent, + Event, + EventTarget, + MessageEvent +}; + +/** + * Call an event listener + * + * @param {(Function|Object)} listener The listener to call + * @param {*} thisArg The value to use as `this`` when calling the listener + * @param {Event} event The event to pass to the listener + * @private + */ +function callListener(listener, thisArg, event) { + if (typeof listener === 'object' && listener.handleEvent) { + listener.handleEvent.call(listener, event); + } else { + listener.call(thisArg, event); + } +} diff --git a/node_modules/ws/lib/extension.js b/node_modules/ws/lib/extension.js new file mode 100644 index 0000000..3d7895c --- /dev/null +++ b/node_modules/ws/lib/extension.js @@ -0,0 +1,203 @@ +'use strict'; + +const { tokenChars } = require('./validation'); + +/** + * Adds an offer to the map of extension offers or a parameter to the map of + * parameters. + * + * @param {Object} dest The map of extension offers or parameters + * @param {String} name The extension or parameter name + * @param {(Object|Boolean|String)} elem The extension parameters or the + * parameter value + * @private + */ +function push(dest, name, elem) { + if (dest[name] === undefined) dest[name] = [elem]; + else dest[name].push(elem); +} + +/** + * Parses the `Sec-WebSocket-Extensions` header into an object. + * + * @param {String} header The field value of the header + * @return {Object} The parsed object + * @public + */ +function parse(header) { + const offers = Object.create(null); + let params = Object.create(null); + let mustUnescape = false; + let isEscaping = false; + let inQuotes = false; + let extensionName; + let paramName; + let start = -1; + let code = -1; + let end = -1; + let i = 0; + + for (; i < header.length; i++) { + code = header.charCodeAt(i); + + if (extensionName === undefined) { + if (end === -1 && tokenChars[code] === 1) { + if (start === -1) start = i; + } else if ( + i !== 0 && + (code === 0x20 /* ' ' */ || code === 0x09) /* '\t' */ + ) { + if (end === -1 && start !== -1) end = i; + } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) { + if (start === -1) { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + + if (end === -1) end = i; + const name = header.slice(start, end); + if (code === 0x2c) { + push(offers, name, params); + params = Object.create(null); + } else { + extensionName = name; + } + + start = end = -1; + } else { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + } else if (paramName === undefined) { + if (end === -1 && tokenChars[code] === 1) { + if (start === -1) start = i; + } else if (code === 0x20 || code === 0x09) { + if (end === -1 && start !== -1) end = i; + } else if (code === 0x3b || code === 0x2c) { + if (start === -1) { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + + if (end === -1) end = i; + push(params, header.slice(start, end), true); + if (code === 0x2c) { + push(offers, extensionName, params); + params = Object.create(null); + extensionName = undefined; + } + + start = end = -1; + } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) { + paramName = header.slice(start, i); + start = end = -1; + } else { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + } else { + // + // The value of a quoted-string after unescaping must conform to the + // token ABNF, so only token characters are valid. + // Ref: https://tools.ietf.org/html/rfc6455#section-9.1 + // + if (isEscaping) { + if (tokenChars[code] !== 1) { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + if (start === -1) start = i; + else if (!mustUnescape) mustUnescape = true; + isEscaping = false; + } else if (inQuotes) { + if (tokenChars[code] === 1) { + if (start === -1) start = i; + } else if (code === 0x22 /* '"' */ && start !== -1) { + inQuotes = false; + end = i; + } else if (code === 0x5c /* '\' */) { + isEscaping = true; + } else { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) { + inQuotes = true; + } else if (end === -1 && tokenChars[code] === 1) { + if (start === -1) start = i; + } else if (start !== -1 && (code === 0x20 || code === 0x09)) { + if (end === -1) end = i; + } else if (code === 0x3b || code === 0x2c) { + if (start === -1) { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + + if (end === -1) end = i; + let value = header.slice(start, end); + if (mustUnescape) { + value = value.replace(/\\/g, ''); + mustUnescape = false; + } + push(params, paramName, value); + if (code === 0x2c) { + push(offers, extensionName, params); + params = Object.create(null); + extensionName = undefined; + } + + paramName = undefined; + start = end = -1; + } else { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + } + } + + if (start === -1 || inQuotes || code === 0x20 || code === 0x09) { + throw new SyntaxError('Unexpected end of input'); + } + + if (end === -1) end = i; + const token = header.slice(start, end); + if (extensionName === undefined) { + push(offers, token, params); + } else { + if (paramName === undefined) { + push(params, token, true); + } else if (mustUnescape) { + push(params, paramName, token.replace(/\\/g, '')); + } else { + push(params, paramName, token); + } + push(offers, extensionName, params); + } + + return offers; +} + +/** + * Builds the `Sec-WebSocket-Extensions` header field value. + * + * @param {Object} extensions The map of extensions and parameters to format + * @return {String} A string representing the given object + * @public + */ +function format(extensions) { + return Object.keys(extensions) + .map((extension) => { + let configurations = extensions[extension]; + if (!Array.isArray(configurations)) configurations = [configurations]; + return configurations + .map((params) => { + return [extension] + .concat( + Object.keys(params).map((k) => { + let values = params[k]; + if (!Array.isArray(values)) values = [values]; + return values + .map((v) => (v === true ? k : `${k}=${v}`)) + .join('; '); + }) + ) + .join('; '); + }) + .join(', '); + }) + .join(', '); +} + +module.exports = { format, parse }; diff --git a/node_modules/ws/lib/limiter.js b/node_modules/ws/lib/limiter.js new file mode 100644 index 0000000..3fd3578 --- /dev/null +++ b/node_modules/ws/lib/limiter.js @@ -0,0 +1,55 @@ +'use strict'; + +const kDone = Symbol('kDone'); +const kRun = Symbol('kRun'); + +/** + * A very simple job queue with adjustable concurrency. Adapted from + * https://github.com/STRML/async-limiter + */ +class Limiter { + /** + * Creates a new `Limiter`. + * + * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed + * to run concurrently + */ + constructor(concurrency) { + this[kDone] = () => { + this.pending--; + this[kRun](); + }; + this.concurrency = concurrency || Infinity; + this.jobs = []; + this.pending = 0; + } + + /** + * Adds a job to the queue. + * + * @param {Function} job The job to run + * @public + */ + add(job) { + this.jobs.push(job); + this[kRun](); + } + + /** + * Removes a job from the queue and runs it if possible. + * + * @private + */ + [kRun]() { + if (this.pending === this.concurrency) return; + + if (this.jobs.length) { + const job = this.jobs.shift(); + + this.pending++; + job(this[kDone]); + } + } +} + +module.exports = Limiter; diff --git a/node_modules/ws/lib/permessage-deflate.js b/node_modules/ws/lib/permessage-deflate.js new file mode 100644 index 0000000..77d918b --- /dev/null +++ b/node_modules/ws/lib/permessage-deflate.js @@ -0,0 +1,514 @@ +'use strict'; + +const zlib = require('zlib'); + +const bufferUtil = require('./buffer-util'); +const Limiter = require('./limiter'); +const { kStatusCode } = require('./constants'); + +const FastBuffer = Buffer[Symbol.species]; +const TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]); +const kPerMessageDeflate = Symbol('permessage-deflate'); +const kTotalLength = Symbol('total-length'); +const kCallback = Symbol('callback'); +const kBuffers = Symbol('buffers'); +const kError = Symbol('error'); + +// +// We limit zlib concurrency, which prevents severe memory fragmentation +// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913 +// and https://github.com/websockets/ws/issues/1202 +// +// Intentionally global; it's the global thread pool that's an issue. +// +let zlibLimiter; + +/** + * permessage-deflate implementation. + */ +class PerMessageDeflate { + /** + * Creates a PerMessageDeflate instance. + * + * @param {Object} [options] Configuration options + * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support + * for, or request, a custom client window size + * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/ + * acknowledge disabling of client context takeover + * @param {Number} [options.concurrencyLimit=10] The number of concurrent + * calls to zlib + * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the + * use of a custom server window size + * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept + * disabling of server context takeover + * @param {Number} [options.threshold=1024] Size (in bytes) below which + * messages should not be compressed if context takeover is disabled + * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on + * deflate + * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on + * inflate + * @param {Boolean} [isServer=false] Create the instance in either server or + * client mode + * @param {Number} [maxPayload=0] The maximum allowed message length + */ + constructor(options, isServer, maxPayload) { + this._maxPayload = maxPayload | 0; + this._options = options || {}; + this._threshold = + this._options.threshold !== undefined ? this._options.threshold : 1024; + this._isServer = !!isServer; + this._deflate = null; + this._inflate = null; + + this.params = null; + + if (!zlibLimiter) { + const concurrency = + this._options.concurrencyLimit !== undefined + ? this._options.concurrencyLimit + : 10; + zlibLimiter = new Limiter(concurrency); + } + } + + /** + * @type {String} + */ + static get extensionName() { + return 'permessage-deflate'; + } + + /** + * Create an extension negotiation offer. + * + * @return {Object} Extension parameters + * @public + */ + offer() { + const params = {}; + + if (this._options.serverNoContextTakeover) { + params.server_no_context_takeover = true; + } + if (this._options.clientNoContextTakeover) { + params.client_no_context_takeover = true; + } + if (this._options.serverMaxWindowBits) { + params.server_max_window_bits = this._options.serverMaxWindowBits; + } + if (this._options.clientMaxWindowBits) { + params.client_max_window_bits = this._options.clientMaxWindowBits; + } else if (this._options.clientMaxWindowBits == null) { + params.client_max_window_bits = true; + } + + return params; + } + + /** + * Accept an extension negotiation offer/response. + * + * @param {Array} configurations The extension negotiation offers/reponse + * @return {Object} Accepted configuration + * @public + */ + accept(configurations) { + configurations = this.normalizeParams(configurations); + + this.params = this._isServer + ? this.acceptAsServer(configurations) + : this.acceptAsClient(configurations); + + return this.params; + } + + /** + * Releases all resources used by the extension. + * + * @public + */ + cleanup() { + if (this._inflate) { + this._inflate.close(); + this._inflate = null; + } + + if (this._deflate) { + const callback = this._deflate[kCallback]; + + this._deflate.close(); + this._deflate = null; + + if (callback) { + callback( + new Error( + 'The deflate stream was closed while data was being processed' + ) + ); + } + } + } + + /** + * Accept an extension negotiation offer. + * + * @param {Array} offers The extension negotiation offers + * @return {Object} Accepted configuration + * @private + */ + acceptAsServer(offers) { + const opts = this._options; + const accepted = offers.find((params) => { + if ( + (opts.serverNoContextTakeover === false && + params.server_no_context_takeover) || + (params.server_max_window_bits && + (opts.serverMaxWindowBits === false || + (typeof opts.serverMaxWindowBits === 'number' && + opts.serverMaxWindowBits > params.server_max_window_bits))) || + (typeof opts.clientMaxWindowBits === 'number' && + !params.client_max_window_bits) + ) { + return false; + } + + return true; + }); + + if (!accepted) { + throw new Error('None of the extension offers can be accepted'); + } + + if (opts.serverNoContextTakeover) { + accepted.server_no_context_takeover = true; + } + if (opts.clientNoContextTakeover) { + accepted.client_no_context_takeover = true; + } + if (typeof opts.serverMaxWindowBits === 'number') { + accepted.server_max_window_bits = opts.serverMaxWindowBits; + } + if (typeof opts.clientMaxWindowBits === 'number') { + accepted.client_max_window_bits = opts.clientMaxWindowBits; + } else if ( + accepted.client_max_window_bits === true || + opts.clientMaxWindowBits === false + ) { + delete accepted.client_max_window_bits; + } + + return accepted; + } + + /** + * Accept the extension negotiation response. + * + * @param {Array} response The extension negotiation response + * @return {Object} Accepted configuration + * @private + */ + acceptAsClient(response) { + const params = response[0]; + + if ( + this._options.clientNoContextTakeover === false && + params.client_no_context_takeover + ) { + throw new Error('Unexpected parameter "client_no_context_takeover"'); + } + + if (!params.client_max_window_bits) { + if (typeof this._options.clientMaxWindowBits === 'number') { + params.client_max_window_bits = this._options.clientMaxWindowBits; + } + } else if ( + this._options.clientMaxWindowBits === false || + (typeof this._options.clientMaxWindowBits === 'number' && + params.client_max_window_bits > this._options.clientMaxWindowBits) + ) { + throw new Error( + 'Unexpected or invalid parameter "client_max_window_bits"' + ); + } + + return params; + } + + /** + * Normalize parameters. + * + * @param {Array} configurations The extension negotiation offers/reponse + * @return {Array} The offers/response with normalized parameters + * @private + */ + normalizeParams(configurations) { + configurations.forEach((params) => { + Object.keys(params).forEach((key) => { + let value = params[key]; + + if (value.length > 1) { + throw new Error(`Parameter "${key}" must have only a single value`); + } + + value = value[0]; + + if (key === 'client_max_window_bits') { + if (value !== true) { + const num = +value; + if (!Number.isInteger(num) || num < 8 || num > 15) { + throw new TypeError( + `Invalid value for parameter "${key}": ${value}` + ); + } + value = num; + } else if (!this._isServer) { + throw new TypeError( + `Invalid value for parameter "${key}": ${value}` + ); + } + } else if (key === 'server_max_window_bits') { + const num = +value; + if (!Number.isInteger(num) || num < 8 || num > 15) { + throw new TypeError( + `Invalid value for parameter "${key}": ${value}` + ); + } + value = num; + } else if ( + key === 'client_no_context_takeover' || + key === 'server_no_context_takeover' + ) { + if (value !== true) { + throw new TypeError( + `Invalid value for parameter "${key}": ${value}` + ); + } + } else { + throw new Error(`Unknown parameter "${key}"`); + } + + params[key] = value; + }); + }); + + return configurations; + } + + /** + * Decompress data. Concurrency limited. + * + * @param {Buffer} data Compressed data + * @param {Boolean} fin Specifies whether or not this is the last fragment + * @param {Function} callback Callback + * @public + */ + decompress(data, fin, callback) { + zlibLimiter.add((done) => { + this._decompress(data, fin, (err, result) => { + done(); + callback(err, result); + }); + }); + } + + /** + * Compress data. Concurrency limited. + * + * @param {(Buffer|String)} data Data to compress + * @param {Boolean} fin Specifies whether or not this is the last fragment + * @param {Function} callback Callback + * @public + */ + compress(data, fin, callback) { + zlibLimiter.add((done) => { + this._compress(data, fin, (err, result) => { + done(); + callback(err, result); + }); + }); + } + + /** + * Decompress data. + * + * @param {Buffer} data Compressed data + * @param {Boolean} fin Specifies whether or not this is the last fragment + * @param {Function} callback Callback + * @private + */ + _decompress(data, fin, callback) { + const endpoint = this._isServer ? 'client' : 'server'; + + if (!this._inflate) { + const key = `${endpoint}_max_window_bits`; + const windowBits = + typeof this.params[key] !== 'number' + ? zlib.Z_DEFAULT_WINDOWBITS + : this.params[key]; + + this._inflate = zlib.createInflateRaw({ + ...this._options.zlibInflateOptions, + windowBits + }); + this._inflate[kPerMessageDeflate] = this; + this._inflate[kTotalLength] = 0; + this._inflate[kBuffers] = []; + this._inflate.on('error', inflateOnError); + this._inflate.on('data', inflateOnData); + } + + this._inflate[kCallback] = callback; + + this._inflate.write(data); + if (fin) this._inflate.write(TRAILER); + + this._inflate.flush(() => { + const err = this._inflate[kError]; + + if (err) { + this._inflate.close(); + this._inflate = null; + callback(err); + return; + } + + const data = bufferUtil.concat( + this._inflate[kBuffers], + this._inflate[kTotalLength] + ); + + if (this._inflate._readableState.endEmitted) { + this._inflate.close(); + this._inflate = null; + } else { + this._inflate[kTotalLength] = 0; + this._inflate[kBuffers] = []; + + if (fin && this.params[`${endpoint}_no_context_takeover`]) { + this._inflate.reset(); + } + } + + callback(null, data); + }); + } + + /** + * Compress data. + * + * @param {(Buffer|String)} data Data to compress + * @param {Boolean} fin Specifies whether or not this is the last fragment + * @param {Function} callback Callback + * @private + */ + _compress(data, fin, callback) { + const endpoint = this._isServer ? 'server' : 'client'; + + if (!this._deflate) { + const key = `${endpoint}_max_window_bits`; + const windowBits = + typeof this.params[key] !== 'number' + ? zlib.Z_DEFAULT_WINDOWBITS + : this.params[key]; + + this._deflate = zlib.createDeflateRaw({ + ...this._options.zlibDeflateOptions, + windowBits + }); + + this._deflate[kTotalLength] = 0; + this._deflate[kBuffers] = []; + + this._deflate.on('data', deflateOnData); + } + + this._deflate[kCallback] = callback; + + this._deflate.write(data); + this._deflate.flush(zlib.Z_SYNC_FLUSH, () => { + if (!this._deflate) { + // + // The deflate stream was closed while data was being processed. + // + return; + } + + let data = bufferUtil.concat( + this._deflate[kBuffers], + this._deflate[kTotalLength] + ); + + if (fin) { + data = new FastBuffer(data.buffer, data.byteOffset, data.length - 4); + } + + // + // Ensure that the callback will not be called again in + // `PerMessageDeflate#cleanup()`. + // + this._deflate[kCallback] = null; + + this._deflate[kTotalLength] = 0; + this._deflate[kBuffers] = []; + + if (fin && this.params[`${endpoint}_no_context_takeover`]) { + this._deflate.reset(); + } + + callback(null, data); + }); + } +} + +module.exports = PerMessageDeflate; + +/** + * The listener of the `zlib.DeflateRaw` stream `'data'` event. + * + * @param {Buffer} chunk A chunk of data + * @private + */ +function deflateOnData(chunk) { + this[kBuffers].push(chunk); + this[kTotalLength] += chunk.length; +} + +/** + * The listener of the `zlib.InflateRaw` stream `'data'` event. + * + * @param {Buffer} chunk A chunk of data + * @private + */ +function inflateOnData(chunk) { + this[kTotalLength] += chunk.length; + + if ( + this[kPerMessageDeflate]._maxPayload < 1 || + this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload + ) { + this[kBuffers].push(chunk); + return; + } + + this[kError] = new RangeError('Max payload size exceeded'); + this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'; + this[kError][kStatusCode] = 1009; + this.removeListener('data', inflateOnData); + this.reset(); +} + +/** + * The listener of the `zlib.InflateRaw` stream `'error'` event. + * + * @param {Error} err The emitted error + * @private + */ +function inflateOnError(err) { + // + // There is no need to call `Zlib#close()` as the handle is automatically + // closed when an error is emitted. + // + this[kPerMessageDeflate]._inflate = null; + err[kStatusCode] = 1007; + this[kCallback](err); +} diff --git a/node_modules/ws/lib/receiver.js b/node_modules/ws/lib/receiver.js new file mode 100644 index 0000000..1d425ea --- /dev/null +++ b/node_modules/ws/lib/receiver.js @@ -0,0 +1,679 @@ +'use strict'; + +const { Writable } = require('stream'); + +const PerMessageDeflate = require('./permessage-deflate'); +const { + BINARY_TYPES, + EMPTY_BUFFER, + kStatusCode, + kWebSocket +} = require('./constants'); +const { concat, toArrayBuffer, unmask } = require('./buffer-util'); +const { isValidStatusCode, isValidUTF8 } = require('./validation'); + +const FastBuffer = Buffer[Symbol.species]; +const promise = Promise.resolve(); + +// +// `queueMicrotask()` is not available in Node.js < 11. +// +const queueTask = + typeof queueMicrotask === 'function' ? queueMicrotask : queueMicrotaskShim; + +const GET_INFO = 0; +const GET_PAYLOAD_LENGTH_16 = 1; +const GET_PAYLOAD_LENGTH_64 = 2; +const GET_MASK = 3; +const GET_DATA = 4; +const INFLATING = 5; +const WAIT_MICROTASK = 6; + +/** + * HyBi Receiver implementation. + * + * @extends Writable + */ +class Receiver extends Writable { + /** + * Creates a Receiver instance. + * + * @param {Object} [options] Options object + * @param {String} [options.binaryType=nodebuffer] The type for binary data + * @param {Object} [options.extensions] An object containing the negotiated + * extensions + * @param {Boolean} [options.isServer=false] Specifies whether to operate in + * client or server mode + * @param {Number} [options.maxPayload=0] The maximum allowed message length + * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or + * not to skip UTF-8 validation for text and close messages + */ + constructor(options = {}) { + super(); + + this._binaryType = options.binaryType || BINARY_TYPES[0]; + this._extensions = options.extensions || {}; + this._isServer = !!options.isServer; + this._maxPayload = options.maxPayload | 0; + this._skipUTF8Validation = !!options.skipUTF8Validation; + this[kWebSocket] = undefined; + + this._bufferedBytes = 0; + this._buffers = []; + + this._compressed = false; + this._payloadLength = 0; + this._mask = undefined; + this._fragmented = 0; + this._masked = false; + this._fin = false; + this._opcode = 0; + + this._totalPayloadLength = 0; + this._messageLength = 0; + this._fragments = []; + + this._state = GET_INFO; + this._loop = false; + } + + /** + * Implements `Writable.prototype._write()`. + * + * @param {Buffer} chunk The chunk of data to write + * @param {String} encoding The character encoding of `chunk` + * @param {Function} cb Callback + * @private + */ + _write(chunk, encoding, cb) { + if (this._opcode === 0x08 && this._state == GET_INFO) return cb(); + + this._bufferedBytes += chunk.length; + this._buffers.push(chunk); + this.startLoop(cb); + } + + /** + * Consumes `n` bytes from the buffered data. + * + * @param {Number} n The number of bytes to consume + * @return {Buffer} The consumed bytes + * @private + */ + consume(n) { + this._bufferedBytes -= n; + + if (n === this._buffers[0].length) return this._buffers.shift(); + + if (n < this._buffers[0].length) { + const buf = this._buffers[0]; + this._buffers[0] = new FastBuffer( + buf.buffer, + buf.byteOffset + n, + buf.length - n + ); + + return new FastBuffer(buf.buffer, buf.byteOffset, n); + } + + const dst = Buffer.allocUnsafe(n); + + do { + const buf = this._buffers[0]; + const offset = dst.length - n; + + if (n >= buf.length) { + dst.set(this._buffers.shift(), offset); + } else { + dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset); + this._buffers[0] = new FastBuffer( + buf.buffer, + buf.byteOffset + n, + buf.length - n + ); + } + + n -= buf.length; + } while (n > 0); + + return dst; + } + + /** + * Starts the parsing loop. + * + * @param {Function} cb Callback + * @private + */ + startLoop(cb) { + let err; + this._loop = true; + + do { + switch (this._state) { + case GET_INFO: + err = this.getInfo(); + break; + case GET_PAYLOAD_LENGTH_16: + err = this.getPayloadLength16(); + break; + case GET_PAYLOAD_LENGTH_64: + err = this.getPayloadLength64(); + break; + case GET_MASK: + this.getMask(); + break; + case GET_DATA: + err = this.getData(cb); + break; + case INFLATING: + this._loop = false; + return; + default: + // + // `WAIT_MICROTASK`. + // + this._loop = false; + + queueTask(() => { + this._state = GET_INFO; + this.startLoop(cb); + }); + return; + } + } while (this._loop); + + cb(err); + } + + /** + * Reads the first two bytes of a frame. + * + * @return {(RangeError|undefined)} A possible error + * @private + */ + getInfo() { + if (this._bufferedBytes < 2) { + this._loop = false; + return; + } + + const buf = this.consume(2); + + if ((buf[0] & 0x30) !== 0x00) { + this._loop = false; + return error( + RangeError, + 'RSV2 and RSV3 must be clear', + true, + 1002, + 'WS_ERR_UNEXPECTED_RSV_2_3' + ); + } + + const compressed = (buf[0] & 0x40) === 0x40; + + if (compressed && !this._extensions[PerMessageDeflate.extensionName]) { + this._loop = false; + return error( + RangeError, + 'RSV1 must be clear', + true, + 1002, + 'WS_ERR_UNEXPECTED_RSV_1' + ); + } + + this._fin = (buf[0] & 0x80) === 0x80; + this._opcode = buf[0] & 0x0f; + this._payloadLength = buf[1] & 0x7f; + + if (this._opcode === 0x00) { + if (compressed) { + this._loop = false; + return error( + RangeError, + 'RSV1 must be clear', + true, + 1002, + 'WS_ERR_UNEXPECTED_RSV_1' + ); + } + + if (!this._fragmented) { + this._loop = false; + return error( + RangeError, + 'invalid opcode 0', + true, + 1002, + 'WS_ERR_INVALID_OPCODE' + ); + } + + this._opcode = this._fragmented; + } else if (this._opcode === 0x01 || this._opcode === 0x02) { + if (this._fragmented) { + this._loop = false; + return error( + RangeError, + `invalid opcode ${this._opcode}`, + true, + 1002, + 'WS_ERR_INVALID_OPCODE' + ); + } + + this._compressed = compressed; + } else if (this._opcode > 0x07 && this._opcode < 0x0b) { + if (!this._fin) { + this._loop = false; + return error( + RangeError, + 'FIN must be set', + true, + 1002, + 'WS_ERR_EXPECTED_FIN' + ); + } + + if (compressed) { + this._loop = false; + return error( + RangeError, + 'RSV1 must be clear', + true, + 1002, + 'WS_ERR_UNEXPECTED_RSV_1' + ); + } + + if ( + this._payloadLength > 0x7d || + (this._opcode === 0x08 && this._payloadLength === 1) + ) { + this._loop = false; + return error( + RangeError, + `invalid payload length ${this._payloadLength}`, + true, + 1002, + 'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH' + ); + } + } else { + this._loop = false; + return error( + RangeError, + `invalid opcode ${this._opcode}`, + true, + 1002, + 'WS_ERR_INVALID_OPCODE' + ); + } + + if (!this._fin && !this._fragmented) this._fragmented = this._opcode; + this._masked = (buf[1] & 0x80) === 0x80; + + if (this._isServer) { + if (!this._masked) { + this._loop = false; + return error( + RangeError, + 'MASK must be set', + true, + 1002, + 'WS_ERR_EXPECTED_MASK' + ); + } + } else if (this._masked) { + this._loop = false; + return error( + RangeError, + 'MASK must be clear', + true, + 1002, + 'WS_ERR_UNEXPECTED_MASK' + ); + } + + if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16; + else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64; + else return this.haveLength(); + } + + /** + * Gets extended payload length (7+16). + * + * @return {(RangeError|undefined)} A possible error + * @private + */ + getPayloadLength16() { + if (this._bufferedBytes < 2) { + this._loop = false; + return; + } + + this._payloadLength = this.consume(2).readUInt16BE(0); + return this.haveLength(); + } + + /** + * Gets extended payload length (7+64). + * + * @return {(RangeError|undefined)} A possible error + * @private + */ + getPayloadLength64() { + if (this._bufferedBytes < 8) { + this._loop = false; + return; + } + + const buf = this.consume(8); + const num = buf.readUInt32BE(0); + + // + // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned + // if payload length is greater than this number. + // + if (num > Math.pow(2, 53 - 32) - 1) { + this._loop = false; + return error( + RangeError, + 'Unsupported WebSocket frame: payload length > 2^53 - 1', + false, + 1009, + 'WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH' + ); + } + + this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4); + return this.haveLength(); + } + + /** + * Payload length has been read. + * + * @return {(RangeError|undefined)} A possible error + * @private + */ + haveLength() { + if (this._payloadLength && this._opcode < 0x08) { + this._totalPayloadLength += this._payloadLength; + if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) { + this._loop = false; + return error( + RangeError, + 'Max payload size exceeded', + false, + 1009, + 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH' + ); + } + } + + if (this._masked) this._state = GET_MASK; + else this._state = GET_DATA; + } + + /** + * Reads mask bytes. + * + * @private + */ + getMask() { + if (this._bufferedBytes < 4) { + this._loop = false; + return; + } + + this._mask = this.consume(4); + this._state = GET_DATA; + } + + /** + * Reads data bytes. + * + * @param {Function} cb Callback + * @return {(Error|RangeError|undefined)} A possible error + * @private + */ + getData(cb) { + let data = EMPTY_BUFFER; + + if (this._payloadLength) { + if (this._bufferedBytes < this._payloadLength) { + this._loop = false; + return; + } + + data = this.consume(this._payloadLength); + + if ( + this._masked && + (this._mask[0] | this._mask[1] | this._mask[2] | this._mask[3]) !== 0 + ) { + unmask(data, this._mask); + } + } + + if (this._opcode > 0x07) return this.controlMessage(data); + + if (this._compressed) { + this._state = INFLATING; + this.decompress(data, cb); + return; + } + + if (data.length) { + // + // This message is not compressed so its length is the sum of the payload + // length of all fragments. + // + this._messageLength = this._totalPayloadLength; + this._fragments.push(data); + } + + return this.dataMessage(); + } + + /** + * Decompresses data. + * + * @param {Buffer} data Compressed data + * @param {Function} cb Callback + * @private + */ + decompress(data, cb) { + const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName]; + + perMessageDeflate.decompress(data, this._fin, (err, buf) => { + if (err) return cb(err); + + if (buf.length) { + this._messageLength += buf.length; + if (this._messageLength > this._maxPayload && this._maxPayload > 0) { + return cb( + error( + RangeError, + 'Max payload size exceeded', + false, + 1009, + 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH' + ) + ); + } + + this._fragments.push(buf); + } + + const er = this.dataMessage(); + if (er) return cb(er); + + this.startLoop(cb); + }); + } + + /** + * Handles a data message. + * + * @return {(Error|undefined)} A possible error + * @private + */ + dataMessage() { + if (this._fin) { + const messageLength = this._messageLength; + const fragments = this._fragments; + + this._totalPayloadLength = 0; + this._messageLength = 0; + this._fragmented = 0; + this._fragments = []; + + if (this._opcode === 2) { + let data; + + if (this._binaryType === 'nodebuffer') { + data = concat(fragments, messageLength); + } else if (this._binaryType === 'arraybuffer') { + data = toArrayBuffer(concat(fragments, messageLength)); + } else { + data = fragments; + } + + this.emit('message', data, true); + } else { + const buf = concat(fragments, messageLength); + + if (!this._skipUTF8Validation && !isValidUTF8(buf)) { + this._loop = false; + return error( + Error, + 'invalid UTF-8 sequence', + true, + 1007, + 'WS_ERR_INVALID_UTF8' + ); + } + + this.emit('message', buf, false); + } + } + + this._state = WAIT_MICROTASK; + } + + /** + * Handles a control message. + * + * @param {Buffer} data Data to handle + * @return {(Error|RangeError|undefined)} A possible error + * @private + */ + controlMessage(data) { + if (this._opcode === 0x08) { + this._loop = false; + + if (data.length === 0) { + this.emit('conclude', 1005, EMPTY_BUFFER); + this.end(); + + this._state = GET_INFO; + } else { + const code = data.readUInt16BE(0); + + if (!isValidStatusCode(code)) { + return error( + RangeError, + `invalid status code ${code}`, + true, + 1002, + 'WS_ERR_INVALID_CLOSE_CODE' + ); + } + + const buf = new FastBuffer( + data.buffer, + data.byteOffset + 2, + data.length - 2 + ); + + if (!this._skipUTF8Validation && !isValidUTF8(buf)) { + return error( + Error, + 'invalid UTF-8 sequence', + true, + 1007, + 'WS_ERR_INVALID_UTF8' + ); + } + + this.emit('conclude', code, buf); + this.end(); + + this._state = GET_INFO; + } + } else if (this._opcode === 0x09) { + this.emit('ping', data); + this._state = WAIT_MICROTASK; + } else { + this.emit('pong', data); + this._state = WAIT_MICROTASK; + } + } +} + +module.exports = Receiver; + +/** + * Builds an error object. + * + * @param {function(new:Error|RangeError)} ErrorCtor The error constructor + * @param {String} message The error message + * @param {Boolean} prefix Specifies whether or not to add a default prefix to + * `message` + * @param {Number} statusCode The status code + * @param {String} errorCode The exposed error code + * @return {(Error|RangeError)} The error + * @private + */ +function error(ErrorCtor, message, prefix, statusCode, errorCode) { + const err = new ErrorCtor( + prefix ? `Invalid WebSocket frame: ${message}` : message + ); + + Error.captureStackTrace(err, error); + err.code = errorCode; + err[kStatusCode] = statusCode; + return err; +} + +/** + * A shim for `queueMicrotask()`. + * + * @param {Function} cb Callback + */ +function queueMicrotaskShim(cb) { + promise.then(cb).catch(throwErrorNextTick); +} + +/** + * Throws an error. + * + * @param {Error} err The error to throw + * @private + */ +function throwError(err) { + throw err; +} + +/** + * Throws an error in the next tick. + * + * @param {Error} err The error to throw + * @private + */ +function throwErrorNextTick(err) { + process.nextTick(throwError, err); +} diff --git a/node_modules/ws/lib/sender.js b/node_modules/ws/lib/sender.js new file mode 100644 index 0000000..1ed04b0 --- /dev/null +++ b/node_modules/ws/lib/sender.js @@ -0,0 +1,477 @@ +/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^Duplex" }] */ + +'use strict'; + +const { Duplex } = require('stream'); +const { randomFillSync } = require('crypto'); + +const PerMessageDeflate = require('./permessage-deflate'); +const { EMPTY_BUFFER } = require('./constants'); +const { isValidStatusCode } = require('./validation'); +const { mask: applyMask, toBuffer } = require('./buffer-util'); + +const kByteLength = Symbol('kByteLength'); +const maskBuffer = Buffer.alloc(4); + +/** + * HyBi Sender implementation. + */ +class Sender { + /** + * Creates a Sender instance. + * + * @param {Duplex} socket The connection socket + * @param {Object} [extensions] An object containing the negotiated extensions + * @param {Function} [generateMask] The function used to generate the masking + * key + */ + constructor(socket, extensions, generateMask) { + this._extensions = extensions || {}; + + if (generateMask) { + this._generateMask = generateMask; + this._maskBuffer = Buffer.alloc(4); + } + + this._socket = socket; + + this._firstFragment = true; + this._compress = false; + + this._bufferedBytes = 0; + this._deflating = false; + this._queue = []; + } + + /** + * Frames a piece of data according to the HyBi WebSocket protocol. + * + * @param {(Buffer|String)} data The data to frame + * @param {Object} options Options object + * @param {Boolean} [options.fin=false] Specifies whether or not to set the + * FIN bit + * @param {Function} [options.generateMask] The function used to generate the + * masking key + * @param {Boolean} [options.mask=false] Specifies whether or not to mask + * `data` + * @param {Buffer} [options.maskBuffer] The buffer used to store the masking + * key + * @param {Number} options.opcode The opcode + * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be + * modified + * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the + * RSV1 bit + * @return {(Buffer|String)[]} The framed data + * @public + */ + static frame(data, options) { + let mask; + let merge = false; + let offset = 2; + let skipMasking = false; + + if (options.mask) { + mask = options.maskBuffer || maskBuffer; + + if (options.generateMask) { + options.generateMask(mask); + } else { + randomFillSync(mask, 0, 4); + } + + skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0; + offset = 6; + } + + let dataLength; + + if (typeof data === 'string') { + if ( + (!options.mask || skipMasking) && + options[kByteLength] !== undefined + ) { + dataLength = options[kByteLength]; + } else { + data = Buffer.from(data); + dataLength = data.length; + } + } else { + dataLength = data.length; + merge = options.mask && options.readOnly && !skipMasking; + } + + let payloadLength = dataLength; + + if (dataLength >= 65536) { + offset += 8; + payloadLength = 127; + } else if (dataLength > 125) { + offset += 2; + payloadLength = 126; + } + + const target = Buffer.allocUnsafe(merge ? dataLength + offset : offset); + + target[0] = options.fin ? options.opcode | 0x80 : options.opcode; + if (options.rsv1) target[0] |= 0x40; + + target[1] = payloadLength; + + if (payloadLength === 126) { + target.writeUInt16BE(dataLength, 2); + } else if (payloadLength === 127) { + target[2] = target[3] = 0; + target.writeUIntBE(dataLength, 4, 6); + } + + if (!options.mask) return [target, data]; + + target[1] |= 0x80; + target[offset - 4] = mask[0]; + target[offset - 3] = mask[1]; + target[offset - 2] = mask[2]; + target[offset - 1] = mask[3]; + + if (skipMasking) return [target, data]; + + if (merge) { + applyMask(data, mask, target, offset, dataLength); + return [target]; + } + + applyMask(data, mask, data, 0, dataLength); + return [target, data]; + } + + /** + * Sends a close message to the other peer. + * + * @param {Number} [code] The status code component of the body + * @param {(String|Buffer)} [data] The message component of the body + * @param {Boolean} [mask=false] Specifies whether or not to mask the message + * @param {Function} [cb] Callback + * @public + */ + close(code, data, mask, cb) { + let buf; + + if (code === undefined) { + buf = EMPTY_BUFFER; + } else if (typeof code !== 'number' || !isValidStatusCode(code)) { + throw new TypeError('First argument must be a valid error code number'); + } else if (data === undefined || !data.length) { + buf = Buffer.allocUnsafe(2); + buf.writeUInt16BE(code, 0); + } else { + const length = Buffer.byteLength(data); + + if (length > 123) { + throw new RangeError('The message must not be greater than 123 bytes'); + } + + buf = Buffer.allocUnsafe(2 + length); + buf.writeUInt16BE(code, 0); + + if (typeof data === 'string') { + buf.write(data, 2); + } else { + buf.set(data, 2); + } + } + + const options = { + [kByteLength]: buf.length, + fin: true, + generateMask: this._generateMask, + mask, + maskBuffer: this._maskBuffer, + opcode: 0x08, + readOnly: false, + rsv1: false + }; + + if (this._deflating) { + this.enqueue([this.dispatch, buf, false, options, cb]); + } else { + this.sendFrame(Sender.frame(buf, options), cb); + } + } + + /** + * Sends a ping message to the other peer. + * + * @param {*} data The message to send + * @param {Boolean} [mask=false] Specifies whether or not to mask `data` + * @param {Function} [cb] Callback + * @public + */ + ping(data, mask, cb) { + let byteLength; + let readOnly; + + if (typeof data === 'string') { + byteLength = Buffer.byteLength(data); + readOnly = false; + } else { + data = toBuffer(data); + byteLength = data.length; + readOnly = toBuffer.readOnly; + } + + if (byteLength > 125) { + throw new RangeError('The data size must not be greater than 125 bytes'); + } + + const options = { + [kByteLength]: byteLength, + fin: true, + generateMask: this._generateMask, + mask, + maskBuffer: this._maskBuffer, + opcode: 0x09, + readOnly, + rsv1: false + }; + + if (this._deflating) { + this.enqueue([this.dispatch, data, false, options, cb]); + } else { + this.sendFrame(Sender.frame(data, options), cb); + } + } + + /** + * Sends a pong message to the other peer. + * + * @param {*} data The message to send + * @param {Boolean} [mask=false] Specifies whether or not to mask `data` + * @param {Function} [cb] Callback + * @public + */ + pong(data, mask, cb) { + let byteLength; + let readOnly; + + if (typeof data === 'string') { + byteLength = Buffer.byteLength(data); + readOnly = false; + } else { + data = toBuffer(data); + byteLength = data.length; + readOnly = toBuffer.readOnly; + } + + if (byteLength > 125) { + throw new RangeError('The data size must not be greater than 125 bytes'); + } + + const options = { + [kByteLength]: byteLength, + fin: true, + generateMask: this._generateMask, + mask, + maskBuffer: this._maskBuffer, + opcode: 0x0a, + readOnly, + rsv1: false + }; + + if (this._deflating) { + this.enqueue([this.dispatch, data, false, options, cb]); + } else { + this.sendFrame(Sender.frame(data, options), cb); + } + } + + /** + * Sends a data message to the other peer. + * + * @param {*} data The message to send + * @param {Object} options Options object + * @param {Boolean} [options.binary=false] Specifies whether `data` is binary + * or text + * @param {Boolean} [options.compress=false] Specifies whether or not to + * compress `data` + * @param {Boolean} [options.fin=false] Specifies whether the fragment is the + * last one + * @param {Boolean} [options.mask=false] Specifies whether or not to mask + * `data` + * @param {Function} [cb] Callback + * @public + */ + send(data, options, cb) { + const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName]; + let opcode = options.binary ? 2 : 1; + let rsv1 = options.compress; + + let byteLength; + let readOnly; + + if (typeof data === 'string') { + byteLength = Buffer.byteLength(data); + readOnly = false; + } else { + data = toBuffer(data); + byteLength = data.length; + readOnly = toBuffer.readOnly; + } + + if (this._firstFragment) { + this._firstFragment = false; + if ( + rsv1 && + perMessageDeflate && + perMessageDeflate.params[ + perMessageDeflate._isServer + ? 'server_no_context_takeover' + : 'client_no_context_takeover' + ] + ) { + rsv1 = byteLength >= perMessageDeflate._threshold; + } + this._compress = rsv1; + } else { + rsv1 = false; + opcode = 0; + } + + if (options.fin) this._firstFragment = true; + + if (perMessageDeflate) { + const opts = { + [kByteLength]: byteLength, + fin: options.fin, + generateMask: this._generateMask, + mask: options.mask, + maskBuffer: this._maskBuffer, + opcode, + readOnly, + rsv1 + }; + + if (this._deflating) { + this.enqueue([this.dispatch, data, this._compress, opts, cb]); + } else { + this.dispatch(data, this._compress, opts, cb); + } + } else { + this.sendFrame( + Sender.frame(data, { + [kByteLength]: byteLength, + fin: options.fin, + generateMask: this._generateMask, + mask: options.mask, + maskBuffer: this._maskBuffer, + opcode, + readOnly, + rsv1: false + }), + cb + ); + } + } + + /** + * Dispatches a message. + * + * @param {(Buffer|String)} data The message to send + * @param {Boolean} [compress=false] Specifies whether or not to compress + * `data` + * @param {Object} options Options object + * @param {Boolean} [options.fin=false] Specifies whether or not to set the + * FIN bit + * @param {Function} [options.generateMask] The function used to generate the + * masking key + * @param {Boolean} [options.mask=false] Specifies whether or not to mask + * `data` + * @param {Buffer} [options.maskBuffer] The buffer used to store the masking + * key + * @param {Number} options.opcode The opcode + * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be + * modified + * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the + * RSV1 bit + * @param {Function} [cb] Callback + * @private + */ + dispatch(data, compress, options, cb) { + if (!compress) { + this.sendFrame(Sender.frame(data, options), cb); + return; + } + + const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName]; + + this._bufferedBytes += options[kByteLength]; + this._deflating = true; + perMessageDeflate.compress(data, options.fin, (_, buf) => { + if (this._socket.destroyed) { + const err = new Error( + 'The socket was closed while data was being compressed' + ); + + if (typeof cb === 'function') cb(err); + + for (let i = 0; i < this._queue.length; i++) { + const params = this._queue[i]; + const callback = params[params.length - 1]; + + if (typeof callback === 'function') callback(err); + } + + return; + } + + this._bufferedBytes -= options[kByteLength]; + this._deflating = false; + options.readOnly = false; + this.sendFrame(Sender.frame(buf, options), cb); + this.dequeue(); + }); + } + + /** + * Executes queued send operations. + * + * @private + */ + dequeue() { + while (!this._deflating && this._queue.length) { + const params = this._queue.shift(); + + this._bufferedBytes -= params[3][kByteLength]; + Reflect.apply(params[0], this, params.slice(1)); + } + } + + /** + * Enqueues a send operation. + * + * @param {Array} params Send operation parameters. + * @private + */ + enqueue(params) { + this._bufferedBytes += params[3][kByteLength]; + this._queue.push(params); + } + + /** + * Sends a frame. + * + * @param {Buffer[]} list The frame to send + * @param {Function} [cb] Callback + * @private + */ + sendFrame(list, cb) { + if (list.length === 2) { + this._socket.cork(); + this._socket.write(list[0]); + this._socket.write(list[1], cb); + this._socket.uncork(); + } else { + this._socket.write(list[0], cb); + } + } +} + +module.exports = Sender; diff --git a/node_modules/ws/lib/stream.js b/node_modules/ws/lib/stream.js new file mode 100644 index 0000000..230734b --- /dev/null +++ b/node_modules/ws/lib/stream.js @@ -0,0 +1,159 @@ +'use strict'; + +const { Duplex } = require('stream'); + +/** + * Emits the `'close'` event on a stream. + * + * @param {Duplex} stream The stream. + * @private + */ +function emitClose(stream) { + stream.emit('close'); +} + +/** + * The listener of the `'end'` event. + * + * @private + */ +function duplexOnEnd() { + if (!this.destroyed && this._writableState.finished) { + this.destroy(); + } +} + +/** + * The listener of the `'error'` event. + * + * @param {Error} err The error + * @private + */ +function duplexOnError(err) { + this.removeListener('error', duplexOnError); + this.destroy(); + if (this.listenerCount('error') === 0) { + // Do not suppress the throwing behavior. + this.emit('error', err); + } +} + +/** + * Wraps a `WebSocket` in a duplex stream. + * + * @param {WebSocket} ws The `WebSocket` to wrap + * @param {Object} [options] The options for the `Duplex` constructor + * @return {Duplex} The duplex stream + * @public + */ +function createWebSocketStream(ws, options) { + let terminateOnDestroy = true; + + const duplex = new Duplex({ + ...options, + autoDestroy: false, + emitClose: false, + objectMode: false, + writableObjectMode: false + }); + + ws.on('message', function message(msg, isBinary) { + const data = + !isBinary && duplex._readableState.objectMode ? msg.toString() : msg; + + if (!duplex.push(data)) ws.pause(); + }); + + ws.once('error', function error(err) { + if (duplex.destroyed) return; + + // Prevent `ws.terminate()` from being called by `duplex._destroy()`. + // + // - If the `'error'` event is emitted before the `'open'` event, then + // `ws.terminate()` is a noop as no socket is assigned. + // - Otherwise, the error is re-emitted by the listener of the `'error'` + // event of the `Receiver` object. The listener already closes the + // connection by calling `ws.close()`. This allows a close frame to be + // sent to the other peer. If `ws.terminate()` is called right after this, + // then the close frame might not be sent. + terminateOnDestroy = false; + duplex.destroy(err); + }); + + ws.once('close', function close() { + if (duplex.destroyed) return; + + duplex.push(null); + }); + + duplex._destroy = function (err, callback) { + if (ws.readyState === ws.CLOSED) { + callback(err); + process.nextTick(emitClose, duplex); + return; + } + + let called = false; + + ws.once('error', function error(err) { + called = true; + callback(err); + }); + + ws.once('close', function close() { + if (!called) callback(err); + process.nextTick(emitClose, duplex); + }); + + if (terminateOnDestroy) ws.terminate(); + }; + + duplex._final = function (callback) { + if (ws.readyState === ws.CONNECTING) { + ws.once('open', function open() { + duplex._final(callback); + }); + return; + } + + // If the value of the `_socket` property is `null` it means that `ws` is a + // client websocket and the handshake failed. In fact, when this happens, a + // socket is never assigned to the websocket. Wait for the `'error'` event + // that will be emitted by the websocket. + if (ws._socket === null) return; + + if (ws._socket._writableState.finished) { + callback(); + if (duplex._readableState.endEmitted) duplex.destroy(); + } else { + ws._socket.once('finish', function finish() { + // `duplex` is not destroyed here because the `'end'` event will be + // emitted on `duplex` after this `'finish'` event. The EOF signaling + // `null` chunk is, in fact, pushed when the websocket emits `'close'`. + callback(); + }); + ws.close(); + } + }; + + duplex._read = function () { + if (ws.isPaused) ws.resume(); + }; + + duplex._write = function (chunk, encoding, callback) { + if (ws.readyState === ws.CONNECTING) { + ws.once('open', function open() { + duplex._write(chunk, encoding, callback); + }); + return; + } + + ws.send(chunk, callback); + }; + + duplex.on('end', duplexOnEnd); + duplex.on('error', duplexOnError); + return duplex; +} + +module.exports = createWebSocketStream; diff --git a/node_modules/ws/lib/subprotocol.js b/node_modules/ws/lib/subprotocol.js new file mode 100644 index 0000000..d4381e8 --- /dev/null +++ b/node_modules/ws/lib/subprotocol.js @@ -0,0 +1,62 @@ +'use strict'; + +const { tokenChars } = require('./validation'); + +/** + * Parses the `Sec-WebSocket-Protocol` header into a set of subprotocol names. + * + * @param {String} header The field value of the header + * @return {Set} The subprotocol names + * @public + */ +function parse(header) { + const protocols = new Set(); + let start = -1; + let end = -1; + let i = 0; + + for (i; i < header.length; i++) { + const code = header.charCodeAt(i); + + if (end === -1 && tokenChars[code] === 1) { + if (start === -1) start = i; + } else if ( + i !== 0 && + (code === 0x20 /* ' ' */ || code === 0x09) /* '\t' */ + ) { + if (end === -1 && start !== -1) end = i; + } else if (code === 0x2c /* ',' */) { + if (start === -1) { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + + if (end === -1) end = i; + + const protocol = header.slice(start, end); + + if (protocols.has(protocol)) { + throw new SyntaxError(`The "${protocol}" subprotocol is duplicated`); + } + + protocols.add(protocol); + start = end = -1; + } else { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + } + + if (start === -1 || end !== -1) { + throw new SyntaxError('Unexpected end of input'); + } + + const protocol = header.slice(start, i); + + if (protocols.has(protocol)) { + throw new SyntaxError(`The "${protocol}" subprotocol is duplicated`); + } + + protocols.add(protocol); + return protocols; +} + +module.exports = { parse }; diff --git a/node_modules/ws/lib/validation.js b/node_modules/ws/lib/validation.js new file mode 100644 index 0000000..c352e6e --- /dev/null +++ b/node_modules/ws/lib/validation.js @@ -0,0 +1,130 @@ +'use strict'; + +const { isUtf8 } = require('buffer'); + +// +// Allowed token characters: +// +// '!', '#', '$', '%', '&', ''', '*', '+', '-', +// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~' +// +// tokenChars[32] === 0 // ' ' +// tokenChars[33] === 1 // '!' +// tokenChars[34] === 0 // '"' +// ... +// +// prettier-ignore +const tokenChars = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31 + 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63 + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127 +]; + +/** + * Checks if a status code is allowed in a close frame. + * + * @param {Number} code The status code + * @return {Boolean} `true` if the status code is valid, else `false` + * @public + */ +function isValidStatusCode(code) { + return ( + (code >= 1000 && + code <= 1014 && + code !== 1004 && + code !== 1005 && + code !== 1006) || + (code >= 3000 && code <= 4999) + ); +} + +/** + * Checks if a given buffer contains only correct UTF-8. + * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by + * Markus Kuhn. + * + * @param {Buffer} buf The buffer to check + * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false` + * @public + */ +function _isValidUTF8(buf) { + const len = buf.length; + let i = 0; + + while (i < len) { + if ((buf[i] & 0x80) === 0) { + // 0xxxxxxx + i++; + } else if ((buf[i] & 0xe0) === 0xc0) { + // 110xxxxx 10xxxxxx + if ( + i + 1 === len || + (buf[i + 1] & 0xc0) !== 0x80 || + (buf[i] & 0xfe) === 0xc0 // Overlong + ) { + return false; + } + + i += 2; + } else if ((buf[i] & 0xf0) === 0xe0) { + // 1110xxxx 10xxxxxx 10xxxxxx + if ( + i + 2 >= len || + (buf[i + 1] & 0xc0) !== 0x80 || + (buf[i + 2] & 0xc0) !== 0x80 || + (buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong + (buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF) + ) { + return false; + } + + i += 3; + } else if ((buf[i] & 0xf8) === 0xf0) { + // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + if ( + i + 3 >= len || + (buf[i + 1] & 0xc0) !== 0x80 || + (buf[i + 2] & 0xc0) !== 0x80 || + (buf[i + 3] & 0xc0) !== 0x80 || + (buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong + (buf[i] === 0xf4 && buf[i + 1] > 0x8f) || + buf[i] > 0xf4 // > U+10FFFF + ) { + return false; + } + + i += 4; + } else { + return false; + } + } + + return true; +} + +module.exports = { + isValidStatusCode, + isValidUTF8: _isValidUTF8, + tokenChars +}; + +if (isUtf8) { + module.exports.isValidUTF8 = function (buf) { + return buf.length < 24 ? _isValidUTF8(buf) : isUtf8(buf); + }; +} /* istanbul ignore else */ else if (!process.env.WS_NO_UTF_8_VALIDATE) { + try { + const isValidUTF8 = require('utf-8-validate'); + + module.exports.isValidUTF8 = function (buf) { + return buf.length < 32 ? _isValidUTF8(buf) : isValidUTF8(buf); + }; + } catch (e) { + // Continue regardless of the error. + } +} diff --git a/node_modules/ws/lib/websocket-server.js b/node_modules/ws/lib/websocket-server.js new file mode 100644 index 0000000..b0ed7bd --- /dev/null +++ b/node_modules/ws/lib/websocket-server.js @@ -0,0 +1,531 @@ +/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^Duplex$" }] */ + +'use strict'; + +const EventEmitter = require('events'); +const http = require('http'); +const { Duplex } = require('stream'); +const { createHash } = require('crypto'); + +const extension = require('./extension'); +const PerMessageDeflate = require('./permessage-deflate'); +const subprotocol = require('./subprotocol'); +const WebSocket = require('./websocket'); +const { GUID, kWebSocket } = require('./constants'); + +const keyRegex = /^[+/0-9A-Za-z]{22}==$/; + +const RUNNING = 0; +const CLOSING = 1; +const CLOSED = 2; + +/** + * Class representing a WebSocket server. + * + * @extends EventEmitter + */ +class WebSocketServer extends EventEmitter { + /** + * Create a `WebSocketServer` instance. + * + * @param {Object} options Configuration options + * @param {Number} [options.backlog=511] The maximum length of the queue of + * pending connections + * @param {Boolean} [options.clientTracking=true] Specifies whether or not to + * track clients + * @param {Function} [options.handleProtocols] A hook to handle protocols + * @param {String} [options.host] The hostname where to bind the server + * @param {Number} [options.maxPayload=104857600] The maximum allowed message + * size + * @param {Boolean} [options.noServer=false] Enable no server mode + * @param {String} [options.path] Accept only connections matching this path + * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable + * permessage-deflate + * @param {Number} [options.port] The port where to bind the server + * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S + * server to use + * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or + * not to skip UTF-8 validation for text and close messages + * @param {Function} [options.verifyClient] A hook to reject connections + * @param {Function} [options.WebSocket=WebSocket] Specifies the `WebSocket` + * class to use. It must be the `WebSocket` class or class that extends it + * @param {Function} [callback] A listener for the `listening` event + */ + constructor(options, callback) { + super(); + + options = { + maxPayload: 100 * 1024 * 1024, + skipUTF8Validation: false, + perMessageDeflate: false, + handleProtocols: null, + clientTracking: true, + verifyClient: null, + noServer: false, + backlog: null, // use default (511 as implemented in net.js) + server: null, + host: null, + path: null, + port: null, + WebSocket, + ...options + }; + + if ( + (options.port == null && !options.server && !options.noServer) || + (options.port != null && (options.server || options.noServer)) || + (options.server && options.noServer) + ) { + throw new TypeError( + 'One and only one of the "port", "server", or "noServer" options ' + + 'must be specified' + ); + } + + if (options.port != null) { + this._server = http.createServer((req, res) => { + const body = http.STATUS_CODES[426]; + + res.writeHead(426, { + 'Content-Length': body.length, + 'Content-Type': 'text/plain' + }); + res.end(body); + }); + this._server.listen( + options.port, + options.host, + options.backlog, + callback + ); + } else if (options.server) { + this._server = options.server; + } + + if (this._server) { + const emitConnection = this.emit.bind(this, 'connection'); + + this._removeListeners = addListeners(this._server, { + listening: this.emit.bind(this, 'listening'), + error: this.emit.bind(this, 'error'), + upgrade: (req, socket, head) => { + this.handleUpgrade(req, socket, head, emitConnection); + } + }); + } + + if (options.perMessageDeflate === true) options.perMessageDeflate = {}; + if (options.clientTracking) { + this.clients = new Set(); + this._shouldEmitClose = false; + } + + this.options = options; + this._state = RUNNING; + } + + /** + * Returns the bound address, the address family name, and port of the server + * as reported by the operating system if listening on an IP socket. + * If the server is listening on a pipe or UNIX domain socket, the name is + * returned as a string. + * + * @return {(Object|String|null)} The address of the server + * @public + */ + address() { + if (this.options.noServer) { + throw new Error('The server is operating in "noServer" mode'); + } + + if (!this._server) return null; + return this._server.address(); + } + + /** + * Stop the server from accepting new connections and emit the `'close'` event + * when all existing connections are closed. + * + * @param {Function} [cb] A one-time listener for the `'close'` event + * @public + */ + close(cb) { + if (this._state === CLOSED) { + if (cb) { + this.once('close', () => { + cb(new Error('The server is not running')); + }); + } + + process.nextTick(emitClose, this); + return; + } + + if (cb) this.once('close', cb); + + if (this._state === CLOSING) return; + this._state = CLOSING; + + if (this.options.noServer || this.options.server) { + if (this._server) { + this._removeListeners(); + this._removeListeners = this._server = null; + } + + if (this.clients) { + if (!this.clients.size) { + process.nextTick(emitClose, this); + } else { + this._shouldEmitClose = true; + } + } else { + process.nextTick(emitClose, this); + } + } else { + const server = this._server; + + this._removeListeners(); + this._removeListeners = this._server = null; + + // + // The HTTP/S server was created internally. Close it, and rely on its + // `'close'` event. + // + server.close(() => { + emitClose(this); + }); + } + } + + /** + * See if a given request should be handled by this server instance. + * + * @param {http.IncomingMessage} req Request object to inspect + * @return {Boolean} `true` if the request is valid, else `false` + * @public + */ + shouldHandle(req) { + if (this.options.path) { + const index = req.url.indexOf('?'); + const pathname = index !== -1 ? req.url.slice(0, index) : req.url; + + if (pathname !== this.options.path) return false; + } + + return true; + } + + /** + * Handle a HTTP Upgrade request. + * + * @param {http.IncomingMessage} req The request object + * @param {Duplex} socket The network socket between the server and client + * @param {Buffer} head The first packet of the upgraded stream + * @param {Function} cb Callback + * @public + */ + handleUpgrade(req, socket, head, cb) { + socket.on('error', socketOnError); + + const key = req.headers['sec-websocket-key']; + const version = +req.headers['sec-websocket-version']; + + if (req.method !== 'GET') { + const message = 'Invalid HTTP method'; + abortHandshakeOrEmitwsClientError(this, req, socket, 405, message); + return; + } + + if (req.headers.upgrade.toLowerCase() !== 'websocket') { + const message = 'Invalid Upgrade header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; + } + + if (!key || !keyRegex.test(key)) { + const message = 'Missing or invalid Sec-WebSocket-Key header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; + } + + if (version !== 8 && version !== 13) { + const message = 'Missing or invalid Sec-WebSocket-Version header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; + } + + if (!this.shouldHandle(req)) { + abortHandshake(socket, 400); + return; + } + + const secWebSocketProtocol = req.headers['sec-websocket-protocol']; + let protocols = new Set(); + + if (secWebSocketProtocol !== undefined) { + try { + protocols = subprotocol.parse(secWebSocketProtocol); + } catch (err) { + const message = 'Invalid Sec-WebSocket-Protocol header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; + } + } + + const secWebSocketExtensions = req.headers['sec-websocket-extensions']; + const extensions = {}; + + if ( + this.options.perMessageDeflate && + secWebSocketExtensions !== undefined + ) { + const perMessageDeflate = new PerMessageDeflate( + this.options.perMessageDeflate, + true, + this.options.maxPayload + ); + + try { + const offers = extension.parse(secWebSocketExtensions); + + if (offers[PerMessageDeflate.extensionName]) { + perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]); + extensions[PerMessageDeflate.extensionName] = perMessageDeflate; + } + } catch (err) { + const message = + 'Invalid or unacceptable Sec-WebSocket-Extensions header'; + abortHandshakeOrEmitwsClientError(this, req, socket, 400, message); + return; + } + } + + // + // Optionally call external client verification handler. + // + if (this.options.verifyClient) { + const info = { + origin: + req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`], + secure: !!(req.socket.authorized || req.socket.encrypted), + req + }; + + if (this.options.verifyClient.length === 2) { + this.options.verifyClient(info, (verified, code, message, headers) => { + if (!verified) { + return abortHandshake(socket, code || 401, message, headers); + } + + this.completeUpgrade( + extensions, + key, + protocols, + req, + socket, + head, + cb + ); + }); + return; + } + + if (!this.options.verifyClient(info)) return abortHandshake(socket, 401); + } + + this.completeUpgrade(extensions, key, protocols, req, socket, head, cb); + } + + /** + * Upgrade the connection to WebSocket. + * + * @param {Object} extensions The accepted extensions + * @param {String} key The value of the `Sec-WebSocket-Key` header + * @param {Set} protocols The subprotocols + * @param {http.IncomingMessage} req The request object + * @param {Duplex} socket The network socket between the server and client + * @param {Buffer} head The first packet of the upgraded stream + * @param {Function} cb Callback + * @throws {Error} If called more than once with the same socket + * @private + */ + completeUpgrade(extensions, key, protocols, req, socket, head, cb) { + // + // Destroy the socket if the client has already sent a FIN packet. + // + if (!socket.readable || !socket.writable) return socket.destroy(); + + if (socket[kWebSocket]) { + throw new Error( + 'server.handleUpgrade() was called more than once with the same ' + + 'socket, possibly due to a misconfiguration' + ); + } + + if (this._state > RUNNING) return abortHandshake(socket, 503); + + const digest = createHash('sha1') + .update(key + GUID) + .digest('base64'); + + const headers = [ + 'HTTP/1.1 101 Switching Protocols', + 'Upgrade: websocket', + 'Connection: Upgrade', + `Sec-WebSocket-Accept: ${digest}` + ]; + + const ws = new this.options.WebSocket(null); + + if (protocols.size) { + // + // Optionally call external protocol selection handler. + // + const protocol = this.options.handleProtocols + ? this.options.handleProtocols(protocols, req) + : protocols.values().next().value; + + if (protocol) { + headers.push(`Sec-WebSocket-Protocol: ${protocol}`); + ws._protocol = protocol; + } + } + + if (extensions[PerMessageDeflate.extensionName]) { + const params = extensions[PerMessageDeflate.extensionName].params; + const value = extension.format({ + [PerMessageDeflate.extensionName]: [params] + }); + headers.push(`Sec-WebSocket-Extensions: ${value}`); + ws._extensions = extensions; + } + + // + // Allow external modification/inspection of handshake headers. + // + this.emit('headers', headers, req); + + socket.write(headers.concat('\r\n').join('\r\n')); + socket.removeListener('error', socketOnError); + + ws.setSocket(socket, head, { + maxPayload: this.options.maxPayload, + skipUTF8Validation: this.options.skipUTF8Validation + }); + + if (this.clients) { + this.clients.add(ws); + ws.on('close', () => { + this.clients.delete(ws); + + if (this._shouldEmitClose && !this.clients.size) { + process.nextTick(emitClose, this); + } + }); + } + + cb(ws, req); + } +} + +module.exports = WebSocketServer; + +/** + * Add event listeners on an `EventEmitter` using a map of + * pairs. + * + * @param {EventEmitter} server The event emitter + * @param {Object.} map The listeners to add + * @return {Function} A function that will remove the added listeners when + * called + * @private + */ +function addListeners(server, map) { + for (const event of Object.keys(map)) server.on(event, map[event]); + + return function removeListeners() { + for (const event of Object.keys(map)) { + server.removeListener(event, map[event]); + } + }; +} + +/** + * Emit a `'close'` event on an `EventEmitter`. + * + * @param {EventEmitter} server The event emitter + * @private + */ +function emitClose(server) { + server._state = CLOSED; + server.emit('close'); +} + +/** + * Handle socket errors. + * + * @private + */ +function socketOnError() { + this.destroy(); +} + +/** + * Close the connection when preconditions are not fulfilled. + * + * @param {Duplex} socket The socket of the upgrade request + * @param {Number} code The HTTP response status code + * @param {String} [message] The HTTP response body + * @param {Object} [headers] Additional HTTP response headers + * @private + */ +function abortHandshake(socket, code, message, headers) { + // + // The socket is writable unless the user destroyed or ended it before calling + // `server.handleUpgrade()` or in the `verifyClient` function, which is a user + // error. Handling this does not make much sense as the worst that can happen + // is that some of the data written by the user might be discarded due to the + // call to `socket.end()` below, which triggers an `'error'` event that in + // turn causes the socket to be destroyed. + // + message = message || http.STATUS_CODES[code]; + headers = { + Connection: 'close', + 'Content-Type': 'text/html', + 'Content-Length': Buffer.byteLength(message), + ...headers + }; + + socket.once('finish', socket.destroy); + + socket.end( + `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\r\n` + + Object.keys(headers) + .map((h) => `${h}: ${headers[h]}`) + .join('\r\n') + + '\r\n\r\n' + + message + ); +} + +/** + * Emit a `'wsClientError'` event on a `WebSocketServer` if there is at least + * one listener for it, otherwise call `abortHandshake()`. + * + * @param {WebSocketServer} server The WebSocket server + * @param {http.IncomingMessage} req The request object + * @param {Duplex} socket The socket of the upgrade request + * @param {Number} code The HTTP response status code + * @param {String} message The HTTP response body + * @private + */ +function abortHandshakeOrEmitwsClientError(server, req, socket, code, message) { + if (server.listenerCount('wsClientError')) { + const err = new Error(message); + Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError); + + server.emit('wsClientError', err, socket, req); + } else { + abortHandshake(socket, code, message); + } +} diff --git a/node_modules/ws/lib/websocket.js b/node_modules/ws/lib/websocket.js new file mode 100644 index 0000000..8685ff7 --- /dev/null +++ b/node_modules/ws/lib/websocket.js @@ -0,0 +1,1319 @@ +/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^Duplex|Readable$" }] */ + +'use strict'; + +const EventEmitter = require('events'); +const https = require('https'); +const http = require('http'); +const net = require('net'); +const tls = require('tls'); +const { randomBytes, createHash } = require('crypto'); +const { Duplex, Readable } = require('stream'); +const { URL } = require('url'); + +const PerMessageDeflate = require('./permessage-deflate'); +const Receiver = require('./receiver'); +const Sender = require('./sender'); +const { + BINARY_TYPES, + EMPTY_BUFFER, + GUID, + kForOnEventAttribute, + kListener, + kStatusCode, + kWebSocket, + NOOP +} = require('./constants'); +const { + EventTarget: { addEventListener, removeEventListener } +} = require('./event-target'); +const { format, parse } = require('./extension'); +const { toBuffer } = require('./buffer-util'); + +const closeTimeout = 30 * 1000; +const kAborted = Symbol('kAborted'); +const protocolVersions = [8, 13]; +const readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED']; +const subprotocolRegex = /^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/; + +/** + * Class representing a WebSocket. + * + * @extends EventEmitter + */ +class WebSocket extends EventEmitter { + /** + * Create a new `WebSocket`. + * + * @param {(String|URL)} address The URL to which to connect + * @param {(String|String[])} [protocols] The subprotocols + * @param {Object} [options] Connection options + */ + constructor(address, protocols, options) { + super(); + + this._binaryType = BINARY_TYPES[0]; + this._closeCode = 1006; + this._closeFrameReceived = false; + this._closeFrameSent = false; + this._closeMessage = EMPTY_BUFFER; + this._closeTimer = null; + this._extensions = {}; + this._paused = false; + this._protocol = ''; + this._readyState = WebSocket.CONNECTING; + this._receiver = null; + this._sender = null; + this._socket = null; + + if (address !== null) { + this._bufferedAmount = 0; + this._isServer = false; + this._redirects = 0; + + if (protocols === undefined) { + protocols = []; + } else if (!Array.isArray(protocols)) { + if (typeof protocols === 'object' && protocols !== null) { + options = protocols; + protocols = []; + } else { + protocols = [protocols]; + } + } + + initAsClient(this, address, protocols, options); + } else { + this._isServer = true; + } + } + + /** + * This deviates from the WHATWG interface since ws doesn't support the + * required default "blob" type (instead we define a custom "nodebuffer" + * type). + * + * @type {String} + */ + get binaryType() { + return this._binaryType; + } + + set binaryType(type) { + if (!BINARY_TYPES.includes(type)) return; + + this._binaryType = type; + + // + // Allow to change `binaryType` on the fly. + // + if (this._receiver) this._receiver._binaryType = type; + } + + /** + * @type {Number} + */ + get bufferedAmount() { + if (!this._socket) return this._bufferedAmount; + + return this._socket._writableState.length + this._sender._bufferedBytes; + } + + /** + * @type {String} + */ + get extensions() { + return Object.keys(this._extensions).join(); + } + + /** + * @type {Boolean} + */ + get isPaused() { + return this._paused; + } + + /** + * @type {Function} + */ + /* istanbul ignore next */ + get onclose() { + return null; + } + + /** + * @type {Function} + */ + /* istanbul ignore next */ + get onerror() { + return null; + } + + /** + * @type {Function} + */ + /* istanbul ignore next */ + get onopen() { + return null; + } + + /** + * @type {Function} + */ + /* istanbul ignore next */ + get onmessage() { + return null; + } + + /** + * @type {String} + */ + get protocol() { + return this._protocol; + } + + /** + * @type {Number} + */ + get readyState() { + return this._readyState; + } + + /** + * @type {String} + */ + get url() { + return this._url; + } + + /** + * Set up the socket and the internal resources. + * + * @param {Duplex} socket The network socket between the server and client + * @param {Buffer} head The first packet of the upgraded stream + * @param {Object} options Options object + * @param {Function} [options.generateMask] The function used to generate the + * masking key + * @param {Number} [options.maxPayload=0] The maximum allowed message size + * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or + * not to skip UTF-8 validation for text and close messages + * @private + */ + setSocket(socket, head, options) { + const receiver = new Receiver({ + binaryType: this.binaryType, + extensions: this._extensions, + isServer: this._isServer, + maxPayload: options.maxPayload, + skipUTF8Validation: options.skipUTF8Validation + }); + + this._sender = new Sender(socket, this._extensions, options.generateMask); + this._receiver = receiver; + this._socket = socket; + + receiver[kWebSocket] = this; + socket[kWebSocket] = this; + + receiver.on('conclude', receiverOnConclude); + receiver.on('drain', receiverOnDrain); + receiver.on('error', receiverOnError); + receiver.on('message', receiverOnMessage); + receiver.on('ping', receiverOnPing); + receiver.on('pong', receiverOnPong); + + // + // These methods may not be available if `socket` is just a `Duplex`. + // + if (socket.setTimeout) socket.setTimeout(0); + if (socket.setNoDelay) socket.setNoDelay(); + + if (head.length > 0) socket.unshift(head); + + socket.on('close', socketOnClose); + socket.on('data', socketOnData); + socket.on('end', socketOnEnd); + socket.on('error', socketOnError); + + this._readyState = WebSocket.OPEN; + this.emit('open'); + } + + /** + * Emit the `'close'` event. + * + * @private + */ + emitClose() { + if (!this._socket) { + this._readyState = WebSocket.CLOSED; + this.emit('close', this._closeCode, this._closeMessage); + return; + } + + if (this._extensions[PerMessageDeflate.extensionName]) { + this._extensions[PerMessageDeflate.extensionName].cleanup(); + } + + this._receiver.removeAllListeners(); + this._readyState = WebSocket.CLOSED; + this.emit('close', this._closeCode, this._closeMessage); + } + + /** + * Start a closing handshake. + * + * +----------+ +-----------+ +----------+ + * - - -|ws.close()|-->|close frame|-->|ws.close()|- - - + * | +----------+ +-----------+ +----------+ | + * +----------+ +-----------+ | + * CLOSING |ws.close()|<--|close frame|<--+-----+ CLOSING + * +----------+ +-----------+ | + * | | | +---+ | + * +------------------------+-->|fin| - - - - + * | +---+ | +---+ + * - - - - -|fin|<---------------------+ + * +---+ + * + * @param {Number} [code] Status code explaining why the connection is closing + * @param {(String|Buffer)} [data] The reason why the connection is + * closing + * @public + */ + close(code, data) { + if (this.readyState === WebSocket.CLOSED) return; + if (this.readyState === WebSocket.CONNECTING) { + const msg = 'WebSocket was closed before the connection was established'; + abortHandshake(this, this._req, msg); + return; + } + + if (this.readyState === WebSocket.CLOSING) { + if ( + this._closeFrameSent && + (this._closeFrameReceived || this._receiver._writableState.errorEmitted) + ) { + this._socket.end(); + } + + return; + } + + this._readyState = WebSocket.CLOSING; + this._sender.close(code, data, !this._isServer, (err) => { + // + // This error is handled by the `'error'` listener on the socket. We only + // want to know if the close frame has been sent here. + // + if (err) return; + + this._closeFrameSent = true; + + if ( + this._closeFrameReceived || + this._receiver._writableState.errorEmitted + ) { + this._socket.end(); + } + }); + + // + // Specify a timeout for the closing handshake to complete. + // + this._closeTimer = setTimeout( + this._socket.destroy.bind(this._socket), + closeTimeout + ); + } + + /** + * Pause the socket. + * + * @public + */ + pause() { + if ( + this.readyState === WebSocket.CONNECTING || + this.readyState === WebSocket.CLOSED + ) { + return; + } + + this._paused = true; + this._socket.pause(); + } + + /** + * Send a ping. + * + * @param {*} [data] The data to send + * @param {Boolean} [mask] Indicates whether or not to mask `data` + * @param {Function} [cb] Callback which is executed when the ping is sent + * @public + */ + ping(data, mask, cb) { + if (this.readyState === WebSocket.CONNECTING) { + throw new Error('WebSocket is not open: readyState 0 (CONNECTING)'); + } + + if (typeof data === 'function') { + cb = data; + data = mask = undefined; + } else if (typeof mask === 'function') { + cb = mask; + mask = undefined; + } + + if (typeof data === 'number') data = data.toString(); + + if (this.readyState !== WebSocket.OPEN) { + sendAfterClose(this, data, cb); + return; + } + + if (mask === undefined) mask = !this._isServer; + this._sender.ping(data || EMPTY_BUFFER, mask, cb); + } + + /** + * Send a pong. + * + * @param {*} [data] The data to send + * @param {Boolean} [mask] Indicates whether or not to mask `data` + * @param {Function} [cb] Callback which is executed when the pong is sent + * @public + */ + pong(data, mask, cb) { + if (this.readyState === WebSocket.CONNECTING) { + throw new Error('WebSocket is not open: readyState 0 (CONNECTING)'); + } + + if (typeof data === 'function') { + cb = data; + data = mask = undefined; + } else if (typeof mask === 'function') { + cb = mask; + mask = undefined; + } + + if (typeof data === 'number') data = data.toString(); + + if (this.readyState !== WebSocket.OPEN) { + sendAfterClose(this, data, cb); + return; + } + + if (mask === undefined) mask = !this._isServer; + this._sender.pong(data || EMPTY_BUFFER, mask, cb); + } + + /** + * Resume the socket. + * + * @public + */ + resume() { + if ( + this.readyState === WebSocket.CONNECTING || + this.readyState === WebSocket.CLOSED + ) { + return; + } + + this._paused = false; + if (!this._receiver._writableState.needDrain) this._socket.resume(); + } + + /** + * Send a data message. + * + * @param {*} data The message to send + * @param {Object} [options] Options object + * @param {Boolean} [options.binary] Specifies whether `data` is binary or + * text + * @param {Boolean} [options.compress] Specifies whether or not to compress + * `data` + * @param {Boolean} [options.fin=true] Specifies whether the fragment is the + * last one + * @param {Boolean} [options.mask] Specifies whether or not to mask `data` + * @param {Function} [cb] Callback which is executed when data is written out + * @public + */ + send(data, options, cb) { + if (this.readyState === WebSocket.CONNECTING) { + throw new Error('WebSocket is not open: readyState 0 (CONNECTING)'); + } + + if (typeof options === 'function') { + cb = options; + options = {}; + } + + if (typeof data === 'number') data = data.toString(); + + if (this.readyState !== WebSocket.OPEN) { + sendAfterClose(this, data, cb); + return; + } + + const opts = { + binary: typeof data !== 'string', + mask: !this._isServer, + compress: true, + fin: true, + ...options + }; + + if (!this._extensions[PerMessageDeflate.extensionName]) { + opts.compress = false; + } + + this._sender.send(data || EMPTY_BUFFER, opts, cb); + } + + /** + * Forcibly close the connection. + * + * @public + */ + terminate() { + if (this.readyState === WebSocket.CLOSED) return; + if (this.readyState === WebSocket.CONNECTING) { + const msg = 'WebSocket was closed before the connection was established'; + abortHandshake(this, this._req, msg); + return; + } + + if (this._socket) { + this._readyState = WebSocket.CLOSING; + this._socket.destroy(); + } + } +} + +/** + * @constant {Number} CONNECTING + * @memberof WebSocket + */ +Object.defineProperty(WebSocket, 'CONNECTING', { + enumerable: true, + value: readyStates.indexOf('CONNECTING') +}); + +/** + * @constant {Number} CONNECTING + * @memberof WebSocket.prototype + */ +Object.defineProperty(WebSocket.prototype, 'CONNECTING', { + enumerable: true, + value: readyStates.indexOf('CONNECTING') +}); + +/** + * @constant {Number} OPEN + * @memberof WebSocket + */ +Object.defineProperty(WebSocket, 'OPEN', { + enumerable: true, + value: readyStates.indexOf('OPEN') +}); + +/** + * @constant {Number} OPEN + * @memberof WebSocket.prototype + */ +Object.defineProperty(WebSocket.prototype, 'OPEN', { + enumerable: true, + value: readyStates.indexOf('OPEN') +}); + +/** + * @constant {Number} CLOSING + * @memberof WebSocket + */ +Object.defineProperty(WebSocket, 'CLOSING', { + enumerable: true, + value: readyStates.indexOf('CLOSING') +}); + +/** + * @constant {Number} CLOSING + * @memberof WebSocket.prototype + */ +Object.defineProperty(WebSocket.prototype, 'CLOSING', { + enumerable: true, + value: readyStates.indexOf('CLOSING') +}); + +/** + * @constant {Number} CLOSED + * @memberof WebSocket + */ +Object.defineProperty(WebSocket, 'CLOSED', { + enumerable: true, + value: readyStates.indexOf('CLOSED') +}); + +/** + * @constant {Number} CLOSED + * @memberof WebSocket.prototype + */ +Object.defineProperty(WebSocket.prototype, 'CLOSED', { + enumerable: true, + value: readyStates.indexOf('CLOSED') +}); + +[ + 'binaryType', + 'bufferedAmount', + 'extensions', + 'isPaused', + 'protocol', + 'readyState', + 'url' +].forEach((property) => { + Object.defineProperty(WebSocket.prototype, property, { enumerable: true }); +}); + +// +// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes. +// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface +// +['open', 'error', 'close', 'message'].forEach((method) => { + Object.defineProperty(WebSocket.prototype, `on${method}`, { + enumerable: true, + get() { + for (const listener of this.listeners(method)) { + if (listener[kForOnEventAttribute]) return listener[kListener]; + } + + return null; + }, + set(handler) { + for (const listener of this.listeners(method)) { + if (listener[kForOnEventAttribute]) { + this.removeListener(method, listener); + break; + } + } + + if (typeof handler !== 'function') return; + + this.addEventListener(method, handler, { + [kForOnEventAttribute]: true + }); + } + }); +}); + +WebSocket.prototype.addEventListener = addEventListener; +WebSocket.prototype.removeEventListener = removeEventListener; + +module.exports = WebSocket; + +/** + * Initialize a WebSocket client. + * + * @param {WebSocket} websocket The client to initialize + * @param {(String|URL)} address The URL to which to connect + * @param {Array} protocols The subprotocols + * @param {Object} [options] Connection options + * @param {Boolean} [options.followRedirects=false] Whether or not to follow + * redirects + * @param {Function} [options.generateMask] The function used to generate the + * masking key + * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the + * handshake request + * @param {Number} [options.maxPayload=104857600] The maximum allowed message + * size + * @param {Number} [options.maxRedirects=10] The maximum number of redirects + * allowed + * @param {String} [options.origin] Value of the `Origin` or + * `Sec-WebSocket-Origin` header + * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable + * permessage-deflate + * @param {Number} [options.protocolVersion=13] Value of the + * `Sec-WebSocket-Version` header + * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or + * not to skip UTF-8 validation for text and close messages + * @private + */ +function initAsClient(websocket, address, protocols, options) { + const opts = { + protocolVersion: protocolVersions[1], + maxPayload: 100 * 1024 * 1024, + skipUTF8Validation: false, + perMessageDeflate: true, + followRedirects: false, + maxRedirects: 10, + ...options, + createConnection: undefined, + socketPath: undefined, + hostname: undefined, + protocol: undefined, + timeout: undefined, + method: 'GET', + host: undefined, + path: undefined, + port: undefined + }; + + if (!protocolVersions.includes(opts.protocolVersion)) { + throw new RangeError( + `Unsupported protocol version: ${opts.protocolVersion} ` + + `(supported versions: ${protocolVersions.join(', ')})` + ); + } + + let parsedUrl; + + if (address instanceof URL) { + parsedUrl = address; + } else { + try { + parsedUrl = new URL(address); + } catch (e) { + throw new SyntaxError(`Invalid URL: ${address}`); + } + } + + if (parsedUrl.protocol === 'http:') { + parsedUrl.protocol = 'ws:'; + } else if (parsedUrl.protocol === 'https:') { + parsedUrl.protocol = 'wss:'; + } + + websocket._url = parsedUrl.href; + + const isSecure = parsedUrl.protocol === 'wss:'; + const isIpcUrl = parsedUrl.protocol === 'ws+unix:'; + let invalidUrlMessage; + + if (parsedUrl.protocol !== 'ws:' && !isSecure && !isIpcUrl) { + invalidUrlMessage = + 'The URL\'s protocol must be one of "ws:", "wss:", ' + + '"http:", "https", or "ws+unix:"'; + } else if (isIpcUrl && !parsedUrl.pathname) { + invalidUrlMessage = "The URL's pathname is empty"; + } else if (parsedUrl.hash) { + invalidUrlMessage = 'The URL contains a fragment identifier'; + } + + if (invalidUrlMessage) { + const err = new SyntaxError(invalidUrlMessage); + + if (websocket._redirects === 0) { + throw err; + } else { + emitErrorAndClose(websocket, err); + return; + } + } + + const defaultPort = isSecure ? 443 : 80; + const key = randomBytes(16).toString('base64'); + const request = isSecure ? https.request : http.request; + const protocolSet = new Set(); + let perMessageDeflate; + + opts.createConnection = isSecure ? tlsConnect : netConnect; + opts.defaultPort = opts.defaultPort || defaultPort; + opts.port = parsedUrl.port || defaultPort; + opts.host = parsedUrl.hostname.startsWith('[') + ? parsedUrl.hostname.slice(1, -1) + : parsedUrl.hostname; + opts.headers = { + ...opts.headers, + 'Sec-WebSocket-Version': opts.protocolVersion, + 'Sec-WebSocket-Key': key, + Connection: 'Upgrade', + Upgrade: 'websocket' + }; + opts.path = parsedUrl.pathname + parsedUrl.search; + opts.timeout = opts.handshakeTimeout; + + if (opts.perMessageDeflate) { + perMessageDeflate = new PerMessageDeflate( + opts.perMessageDeflate !== true ? opts.perMessageDeflate : {}, + false, + opts.maxPayload + ); + opts.headers['Sec-WebSocket-Extensions'] = format({ + [PerMessageDeflate.extensionName]: perMessageDeflate.offer() + }); + } + if (protocols.length) { + for (const protocol of protocols) { + if ( + typeof protocol !== 'string' || + !subprotocolRegex.test(protocol) || + protocolSet.has(protocol) + ) { + throw new SyntaxError( + 'An invalid or duplicated subprotocol was specified' + ); + } + + protocolSet.add(protocol); + } + + opts.headers['Sec-WebSocket-Protocol'] = protocols.join(','); + } + if (opts.origin) { + if (opts.protocolVersion < 13) { + opts.headers['Sec-WebSocket-Origin'] = opts.origin; + } else { + opts.headers.Origin = opts.origin; + } + } + if (parsedUrl.username || parsedUrl.password) { + opts.auth = `${parsedUrl.username}:${parsedUrl.password}`; + } + + if (isIpcUrl) { + const parts = opts.path.split(':'); + + opts.socketPath = parts[0]; + opts.path = parts[1]; + } + + let req; + + if (opts.followRedirects) { + if (websocket._redirects === 0) { + websocket._originalIpc = isIpcUrl; + websocket._originalSecure = isSecure; + websocket._originalHostOrSocketPath = isIpcUrl + ? opts.socketPath + : parsedUrl.host; + + const headers = options && options.headers; + + // + // Shallow copy the user provided options so that headers can be changed + // without mutating the original object. + // + options = { ...options, headers: {} }; + + if (headers) { + for (const [key, value] of Object.entries(headers)) { + options.headers[key.toLowerCase()] = value; + } + } + } else if (websocket.listenerCount('redirect') === 0) { + const isSameHost = isIpcUrl + ? websocket._originalIpc + ? opts.socketPath === websocket._originalHostOrSocketPath + : false + : websocket._originalIpc + ? false + : parsedUrl.host === websocket._originalHostOrSocketPath; + + if (!isSameHost || (websocket._originalSecure && !isSecure)) { + // + // Match curl 7.77.0 behavior and drop the following headers. These + // headers are also dropped when following a redirect to a subdomain. + // + delete opts.headers.authorization; + delete opts.headers.cookie; + + if (!isSameHost) delete opts.headers.host; + + opts.auth = undefined; + } + } + + // + // Match curl 7.77.0 behavior and make the first `Authorization` header win. + // If the `Authorization` header is set, then there is nothing to do as it + // will take precedence. + // + if (opts.auth && !options.headers.authorization) { + options.headers.authorization = + 'Basic ' + Buffer.from(opts.auth).toString('base64'); + } + + req = websocket._req = request(opts); + + if (websocket._redirects) { + // + // Unlike what is done for the `'upgrade'` event, no early exit is + // triggered here if the user calls `websocket.close()` or + // `websocket.terminate()` from a listener of the `'redirect'` event. This + // is because the user can also call `request.destroy()` with an error + // before calling `websocket.close()` or `websocket.terminate()` and this + // would result in an error being emitted on the `request` object with no + // `'error'` event listeners attached. + // + websocket.emit('redirect', websocket.url, req); + } + } else { + req = websocket._req = request(opts); + } + + if (opts.timeout) { + req.on('timeout', () => { + abortHandshake(websocket, req, 'Opening handshake has timed out'); + }); + } + + req.on('error', (err) => { + if (req === null || req[kAborted]) return; + + req = websocket._req = null; + emitErrorAndClose(websocket, err); + }); + + req.on('response', (res) => { + const location = res.headers.location; + const statusCode = res.statusCode; + + if ( + location && + opts.followRedirects && + statusCode >= 300 && + statusCode < 400 + ) { + if (++websocket._redirects > opts.maxRedirects) { + abortHandshake(websocket, req, 'Maximum redirects exceeded'); + return; + } + + req.abort(); + + let addr; + + try { + addr = new URL(location, address); + } catch (e) { + const err = new SyntaxError(`Invalid URL: ${location}`); + emitErrorAndClose(websocket, err); + return; + } + + initAsClient(websocket, addr, protocols, options); + } else if (!websocket.emit('unexpected-response', req, res)) { + abortHandshake( + websocket, + req, + `Unexpected server response: ${res.statusCode}` + ); + } + }); + + req.on('upgrade', (res, socket, head) => { + websocket.emit('upgrade', res); + + // + // The user may have closed the connection from a listener of the + // `'upgrade'` event. + // + if (websocket.readyState !== WebSocket.CONNECTING) return; + + req = websocket._req = null; + + if (res.headers.upgrade.toLowerCase() !== 'websocket') { + abortHandshake(websocket, socket, 'Invalid Upgrade header'); + return; + } + + const digest = createHash('sha1') + .update(key + GUID) + .digest('base64'); + + if (res.headers['sec-websocket-accept'] !== digest) { + abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header'); + return; + } + + const serverProt = res.headers['sec-websocket-protocol']; + let protError; + + if (serverProt !== undefined) { + if (!protocolSet.size) { + protError = 'Server sent a subprotocol but none was requested'; + } else if (!protocolSet.has(serverProt)) { + protError = 'Server sent an invalid subprotocol'; + } + } else if (protocolSet.size) { + protError = 'Server sent no subprotocol'; + } + + if (protError) { + abortHandshake(websocket, socket, protError); + return; + } + + if (serverProt) websocket._protocol = serverProt; + + const secWebSocketExtensions = res.headers['sec-websocket-extensions']; + + if (secWebSocketExtensions !== undefined) { + if (!perMessageDeflate) { + const message = + 'Server sent a Sec-WebSocket-Extensions header but no extension ' + + 'was requested'; + abortHandshake(websocket, socket, message); + return; + } + + let extensions; + + try { + extensions = parse(secWebSocketExtensions); + } catch (err) { + const message = 'Invalid Sec-WebSocket-Extensions header'; + abortHandshake(websocket, socket, message); + return; + } + + const extensionNames = Object.keys(extensions); + + if ( + extensionNames.length !== 1 || + extensionNames[0] !== PerMessageDeflate.extensionName + ) { + const message = 'Server indicated an extension that was not requested'; + abortHandshake(websocket, socket, message); + return; + } + + try { + perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]); + } catch (err) { + const message = 'Invalid Sec-WebSocket-Extensions header'; + abortHandshake(websocket, socket, message); + return; + } + + websocket._extensions[PerMessageDeflate.extensionName] = + perMessageDeflate; + } + + websocket.setSocket(socket, head, { + generateMask: opts.generateMask, + maxPayload: opts.maxPayload, + skipUTF8Validation: opts.skipUTF8Validation + }); + }); + + if (opts.finishRequest) { + opts.finishRequest(req, websocket); + } else { + req.end(); + } +} + +/** + * Emit the `'error'` and `'close'` events. + * + * @param {WebSocket} websocket The WebSocket instance + * @param {Error} The error to emit + * @private + */ +function emitErrorAndClose(websocket, err) { + websocket._readyState = WebSocket.CLOSING; + websocket.emit('error', err); + websocket.emitClose(); +} + +/** + * Create a `net.Socket` and initiate a connection. + * + * @param {Object} options Connection options + * @return {net.Socket} The newly created socket used to start the connection + * @private + */ +function netConnect(options) { + options.path = options.socketPath; + return net.connect(options); +} + +/** + * Create a `tls.TLSSocket` and initiate a connection. + * + * @param {Object} options Connection options + * @return {tls.TLSSocket} The newly created socket used to start the connection + * @private + */ +function tlsConnect(options) { + options.path = undefined; + + if (!options.servername && options.servername !== '') { + options.servername = net.isIP(options.host) ? '' : options.host; + } + + return tls.connect(options); +} + +/** + * Abort the handshake and emit an error. + * + * @param {WebSocket} websocket The WebSocket instance + * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to + * abort or the socket to destroy + * @param {String} message The error message + * @private + */ +function abortHandshake(websocket, stream, message) { + websocket._readyState = WebSocket.CLOSING; + + const err = new Error(message); + Error.captureStackTrace(err, abortHandshake); + + if (stream.setHeader) { + stream[kAborted] = true; + stream.abort(); + + if (stream.socket && !stream.socket.destroyed) { + // + // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if + // called after the request completed. See + // https://github.com/websockets/ws/issues/1869. + // + stream.socket.destroy(); + } + + process.nextTick(emitErrorAndClose, websocket, err); + } else { + stream.destroy(err); + stream.once('error', websocket.emit.bind(websocket, 'error')); + stream.once('close', websocket.emitClose.bind(websocket)); + } +} + +/** + * Handle cases where the `ping()`, `pong()`, or `send()` methods are called + * when the `readyState` attribute is `CLOSING` or `CLOSED`. + * + * @param {WebSocket} websocket The WebSocket instance + * @param {*} [data] The data to send + * @param {Function} [cb] Callback + * @private + */ +function sendAfterClose(websocket, data, cb) { + if (data) { + const length = toBuffer(data).length; + + // + // The `_bufferedAmount` property is used only when the peer is a client and + // the opening handshake fails. Under these circumstances, in fact, the + // `setSocket()` method is not called, so the `_socket` and `_sender` + // properties are set to `null`. + // + if (websocket._socket) websocket._sender._bufferedBytes += length; + else websocket._bufferedAmount += length; + } + + if (cb) { + const err = new Error( + `WebSocket is not open: readyState ${websocket.readyState} ` + + `(${readyStates[websocket.readyState]})` + ); + process.nextTick(cb, err); + } +} + +/** + * The listener of the `Receiver` `'conclude'` event. + * + * @param {Number} code The status code + * @param {Buffer} reason The reason for closing + * @private + */ +function receiverOnConclude(code, reason) { + const websocket = this[kWebSocket]; + + websocket._closeFrameReceived = true; + websocket._closeMessage = reason; + websocket._closeCode = code; + + if (websocket._socket[kWebSocket] === undefined) return; + + websocket._socket.removeListener('data', socketOnData); + process.nextTick(resume, websocket._socket); + + if (code === 1005) websocket.close(); + else websocket.close(code, reason); +} + +/** + * The listener of the `Receiver` `'drain'` event. + * + * @private + */ +function receiverOnDrain() { + const websocket = this[kWebSocket]; + + if (!websocket.isPaused) websocket._socket.resume(); +} + +/** + * The listener of the `Receiver` `'error'` event. + * + * @param {(RangeError|Error)} err The emitted error + * @private + */ +function receiverOnError(err) { + const websocket = this[kWebSocket]; + + if (websocket._socket[kWebSocket] !== undefined) { + websocket._socket.removeListener('data', socketOnData); + + // + // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See + // https://github.com/websockets/ws/issues/1940. + // + process.nextTick(resume, websocket._socket); + + websocket.close(err[kStatusCode]); + } + + websocket.emit('error', err); +} + +/** + * The listener of the `Receiver` `'finish'` event. + * + * @private + */ +function receiverOnFinish() { + this[kWebSocket].emitClose(); +} + +/** + * The listener of the `Receiver` `'message'` event. + * + * @param {Buffer|ArrayBuffer|Buffer[])} data The message + * @param {Boolean} isBinary Specifies whether the message is binary or not + * @private + */ +function receiverOnMessage(data, isBinary) { + this[kWebSocket].emit('message', data, isBinary); +} + +/** + * The listener of the `Receiver` `'ping'` event. + * + * @param {Buffer} data The data included in the ping frame + * @private + */ +function receiverOnPing(data) { + const websocket = this[kWebSocket]; + + websocket.pong(data, !websocket._isServer, NOOP); + websocket.emit('ping', data); +} + +/** + * The listener of the `Receiver` `'pong'` event. + * + * @param {Buffer} data The data included in the pong frame + * @private + */ +function receiverOnPong(data) { + this[kWebSocket].emit('pong', data); +} + +/** + * Resume a readable stream + * + * @param {Readable} stream The readable stream + * @private + */ +function resume(stream) { + stream.resume(); +} + +/** + * The listener of the socket `'close'` event. + * + * @private + */ +function socketOnClose() { + const websocket = this[kWebSocket]; + + this.removeListener('close', socketOnClose); + this.removeListener('data', socketOnData); + this.removeListener('end', socketOnEnd); + + websocket._readyState = WebSocket.CLOSING; + + let chunk; + + // + // The close frame might not have been received or the `'end'` event emitted, + // for example, if the socket was destroyed due to an error. Ensure that the + // `receiver` stream is closed after writing any remaining buffered data to + // it. If the readable side of the socket is in flowing mode then there is no + // buffered data as everything has been already written and `readable.read()` + // will return `null`. If instead, the socket is paused, any possible buffered + // data will be read as a single chunk. + // + if ( + !this._readableState.endEmitted && + !websocket._closeFrameReceived && + !websocket._receiver._writableState.errorEmitted && + (chunk = websocket._socket.read()) !== null + ) { + websocket._receiver.write(chunk); + } + + websocket._receiver.end(); + + this[kWebSocket] = undefined; + + clearTimeout(websocket._closeTimer); + + if ( + websocket._receiver._writableState.finished || + websocket._receiver._writableState.errorEmitted + ) { + websocket.emitClose(); + } else { + websocket._receiver.on('error', receiverOnFinish); + websocket._receiver.on('finish', receiverOnFinish); + } +} + +/** + * The listener of the socket `'data'` event. + * + * @param {Buffer} chunk A chunk of data + * @private + */ +function socketOnData(chunk) { + if (!this[kWebSocket]._receiver.write(chunk)) { + this.pause(); + } +} + +/** + * The listener of the socket `'end'` event. + * + * @private + */ +function socketOnEnd() { + const websocket = this[kWebSocket]; + + websocket._readyState = WebSocket.CLOSING; + websocket._receiver.end(); + this.end(); +} + +/** + * The listener of the socket `'error'` event. + * + * @private + */ +function socketOnError() { + const websocket = this[kWebSocket]; + + this.removeListener('error', socketOnError); + this.on('error', NOOP); + + if (websocket) { + websocket._readyState = WebSocket.CLOSING; + this.destroy(); + } +} diff --git a/node_modules/ws/package.json b/node_modules/ws/package.json new file mode 100644 index 0000000..107c188 --- /dev/null +++ b/node_modules/ws/package.json @@ -0,0 +1,68 @@ +{ + "name": "ws", + "version": "8.14.2", + "description": "Simple to use, blazing fast and thoroughly tested websocket client and server for Node.js", + "keywords": [ + "HyBi", + "Push", + "RFC-6455", + "WebSocket", + "WebSockets", + "real-time" + ], + "homepage": "https://github.com/websockets/ws", + "bugs": "https://github.com/websockets/ws/issues", + "repository": { + "type": "git", + "url": "git+https://github.com/websockets/ws.git" + }, + "author": "Einar Otto Stangvik (http://2x.io)", + "license": "MIT", + "main": "index.js", + "exports": { + ".": { + "browser": "./browser.js", + "import": "./wrapper.mjs", + "require": "./index.js" + }, + "./package.json": "./package.json" + }, + "browser": "browser.js", + "engines": { + "node": ">=10.0.0" + }, + "files": [ + "browser.js", + "index.js", + "lib/*.js", + "wrapper.mjs" + ], + "scripts": { + "test": "nyc --reporter=lcov --reporter=text mocha --throw-deprecation test/*.test.js", + "integration": "mocha --throw-deprecation test/*.integration.js", + "lint": "eslint --ignore-path .gitignore . && prettier --check --ignore-path .gitignore \"**/*.{json,md,yaml,yml}\"" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + }, + "devDependencies": { + "benchmark": "^2.1.4", + "bufferutil": "^4.0.1", + "eslint": "^8.0.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.0", + "mocha": "^8.4.0", + "nyc": "^15.0.0", + "prettier": "^3.0.0", + "utf-8-validate": "^6.0.0" + } +} diff --git a/node_modules/ws/wrapper.mjs b/node_modules/ws/wrapper.mjs new file mode 100644 index 0000000..7245ad1 --- /dev/null +++ b/node_modules/ws/wrapper.mjs @@ -0,0 +1,8 @@ +import createWebSocketStream from './lib/stream.js'; +import Receiver from './lib/receiver.js'; +import Sender from './lib/sender.js'; +import WebSocket from './lib/websocket.js'; +import WebSocketServer from './lib/websocket-server.js'; + +export { createWebSocketStream, Receiver, Sender, WebSocket, WebSocketServer }; +export default WebSocket;

RPy^_*gzIBpc~Ita8z-_vYzIz=j!dL!4qe>Aol^Fj(X^Ln2lZPDfR!gCWaV&C$y; z!@xPBaULJkHe3-MCy&?+91bRFQbr%Z2`}Xan0gIykf;70dqU?TZbzbytIef5ok`o> zXnNmG)~be0b4k6GR%a3gO}18?QIv0m+RB(P&<;*qFZK=*k}{3rjJ#DX-N7_GOV6)i42G?-{9D6foHF?Vc>0rKlMNxtXXOGYVi%b^X$TJ79FyupE7U+QA zt&3m<8?3OKI zVH;amw$;ZMSr!JeyV-rR&xFg)vSXg^R)S=;mf3(+5D%j)eiB7)Cx$V0V;o|LLp%;K zCN|K31194z-i(JhJS5RF4$&~4j9{3A5D(hl|2^lcs@4rM$?i%|*LOSD_q^vl@9n&& z4<4u&Cd{|`H2cLJW&;YLV0A5I1*XR4r3~YG;f}?WRfLI8-SSiI(Fh;R(}J1ZX+blh zj?g^t({}6{4?_0(0%0!Ig>SU{=7;l2 ztNGSr`R-*k>v4ngow1k=tK8vvH>@6qFExlHK!P$$ni*D)5r$|Orz(lXCqoTvv>t2m zwjL`qXvF+AJ#LRP%nj}0?-mLbL~CpW9@%>!>zQ%`2N~=*{_JV)u0*5*G!k&T1|A}C z2IMGPNYWmE_Hglv5VU<<7-wJMhi%1uDadMuL8q|IT@OSGmj*p)XZL4rSq z;S20vA-?H1@DZQIjoTezTXj(4py0x8kwM@>V*dAn38~5e%jM<3cgj!ha05cAIC{dS zZn(jzblMmKNkP~l3k)$Ki)$tEGNNioFw8Y=q6aX0rf5nzBxm?hl89Q6+#w=E>#U=- z-H0HE+H3F^K;eI9SQ5fCAx#P|n<_-)(lEYSdXBGY$@@vT?V; zYU*P0&0L+#(FMs3p#T9?@ZOH@;qZwR6Wrzcj zZdBp>IFF8J;@A3u;@5ZjR#2z~4dD4Yr=>72Os6iX5H)*`Esg6X0$AXpCPb`itykO~ z^Mz5{X`)7yolycaJ21i?IW$Fty=_NJ3N2GhIp=qS>s?b4A(jIaxRfbuj>5Wn&eFaQ zM5M$8*4=S1+81l-`q)O5DW#Y^iswEb#oAPeNn_!&HE7!-4jZs;-a9E$m>2+7LBGdwC*g1J)M1f{?!MMcau6Rvn+E+Ax-<*{ zP(!3@6%8)$OEa|_>&c;XhL;WCs#9Vci?C+2mgvyqOm8moXv=UN#p9Ar6(Qs6qco_V z*g%Z=@&c*Si@`%p!+9H#)!iDAF=fAqfw?Fj7$k7VJ_Pl4_i^+uHb2{wqJ3hk;7w5~ zx9O@j$yGYMA^JYrTE>-`^G=fW&O)nR-Z$&k2qaG5gO1A@w9Om*+G~W`4R{f=rP^(M^ORH_ zvzCN?GnO!hV<6*J{k>_*wvc@8_?ye`cFi7D^$%KXO$ZW+n}vk}4c!*GLkc=u*mk0@ zT1~yEW*146yT}G?i{tf{H}ed3K{die3{$%Gx%QM+>GrK`^Twt*sv+tqx^*rMXec7V zh;vb$f>t)BI(bpewy4f6R_8^I*WGo7EeI@#D&RbI&j>^F1dJkdhDI@SM7bi{9Izk$ zEnDYoD;4M;2y;H$yPy>5D4v(%<5&aCnP#&_1xl*3?n{RBlQyMTZRP6WY_)O;4UIlU zXO{EUN$4Y9vHBh35b3|-mbv6fCJ@1C} zRXj!|rg!L|adH5~HB}-DqtGX3S;#wrd}AsmKMG!s%E8T*bh3Sp454KK4_J#vh@-ge zw*{_i<@4U|Yf#7AYEc|OQx8K2BMa+%&^mnp{Xa)rAM&OBDGGmA5{E?$Q{yf;QcUPp z)4_pwHZznezcU;Gzt{zJ2s2neV`uqw9#UY_z*5e^-QJf z;Q4!WJVqT8p8r;10b5f2@f0cKQ|L<&U-x23D*EPL6Ih4UQ9L(^G^t_=sobr4!|eop zfJ;>$Aa)2HNE>?4xQ`#tMuk%oZuGdw_wjquF|MP^`8hNn6FE;ABsNz?kynC@=rS8F zE?g$Vr4cStwZ!VjLMujNpd&FYtm#>wG$~yz8)ubJD>1y(tZAceRFVOaYJ;If&$QN! zV_wL{)#x!AO>?8}-2!05x)d28cAiw-Rl%GDy@gC%c;iDtj1p>VPYwybOdtwa-}j{` zol=6{K>XbVTC}m6_)NhLUBFLc9h(%qx;DE%QDPi0>Io$+|6-=BKfK{rtY1>hNHTC^PobHyQh#^@R+IH> zx7n}n+Gg)hJefdBa8^Ywlhvr#4Z(RL`f-?$f*d#YXT2E25M~Y2dsCb{U{bX~F4#5t zu^#UO7Iq#+zyAun=`Whn8WIOyYsf`2`~B47r+`4AF#CnbYjZzyhFL4b1Uth|Js93Xh5Y`>?LaPiBBi~fhQ9GokVfL{ri45Jbu?6AFL*WAz~{Q ziaI&aBNZ~JYFU#7lGUQr)>_<*mQv7s^UTMnU~!pDP+bxhIHBIGRO1H4=xfF0H* zjzd^5auc#_+E#2I>LTn9gr;l!OOf#w`l3GC^KS@A!BB-Scxu$?oU7ASXjoY(+MnMp zI*wLGMf_<3g-|Mgx>vNe?th3;xE$1hZUdt76>Ovo5muLxg2}WqgT^7WbY7N_K-ej- z$bBN)b&oYyf>)tXqjdHo7buyVOOn~;lq0JVQ1~0Bc$}`U=jXQTtqrL1DF5wQX|2-6 z_b=M^1B>)@-EqRo^=sF3*8Mz_KYvEw)xYrhdJui1s^R@cryTX&@fDTo%WWjlZf;-X zn4w-4k13kE!A;%ser3B3LnQsUL95B!oQ#NwIlq`~=p@WNsJ z6${l<(khB#!!&?6BG>?k2!kWHEQ8Da><^T3vTs>Mi#np6mSmtV;TW+W&Ouc$LKH~J z(u!>mJB&ptWmWl555nqiHP0y@Etl63t8W=JVCKPwxo=Z{LPieJJ6$=yWbApVA({4=DWQ08vlY-OSaY82a9%GfvlV@63r$j zW>V^&O}}+!6Hs{ zJgq*ar_b`F>0V?FotMX#?_U76^v4lSBr8ZjRfuyty3~&^_Ry}Yl9!vckE}~BI#NU< z>yLe#u&wg7ss!%KE{;Auw8d74yPFy8(*Z*0P>z@)cD-9~PR+1r>);7~zJ0N!Jvq~O zRL4>*A)89)$ead( z)D^ZCTU)L!s)ilbJ@t|%yflN{WpRf?OVuQ>M$K|8D5sj@oFpjI;O&Lh&T9%!&rn?7 z_JX~5o<{Y0PVMrOhy3J{-)-TbBtWlfU7>+b&semNJ@~2}j1>mV^rp!LFIm#G^;B?I z%apNKwQ8wuU2P&hxFxM~J33Ar3)v?FyaF`+Y675E>0rI_A$eZLvE+qyHFOl2AUrk> zfbtc8AK~3*T(UKpm6$|{JR`VnOaZSyF`c&^&B?vS)j zZEH79gNgn(4yU0Sdmwy*CLSt;z_=ASwRVPh%nyTzkV?E0x2Mh(E-T)>JxvAshqk1b z_?99KAF*@J6qH-%+76cH7&?v$++#e(K-#NitNZu&w9|ZI`7Sm77d>q&e28{!D?G4;cJK}A`BtPRa*yd}`u2H`TM&kqpl~qgycnTl zjcmh!L+7^5M>r(%h!lt_p0%{XJJwKL!xv&G2r ztY^QpxD02y$q7dqq}2#Wt`WdS%3~h*(3t1P?eE&&O4RFdjf0RMDt`l~XarqGGN%y| zx(weuAg4yY?!|Lhf$r(cKQvTE@XLMUKvAP0bYXIih|UScnEMgKrrbsVQm?3qSO=|1 zY9RR#2Xz>U>5X3y`?QK=w9T$ATx3~$;TGn{dL~xk8sPvF!5@*$tJiIP!vHFZ|F@74 z=MQyHp5FA#`e@w?ge|86Q_#rl$2coiUrt=Bp8y==gxwP-NLwTB>2F--~t z3c{fS4O1N%Ny{!311LTi^By{b zXSCe^iC{(xg}LTcRkQv_Mq+q&c&|h7ak? zrI4CP3ao3QNHMjobD~egqlY!mh#HZz;sD^l07gzZ1?kMNyzjVcv8NbYKi{;e-{VGP zGkU*-?#AV?Iy#NijdH5nVfd8B61Nu3vxCM$Eu(%LHkM%`P4Bct`P7WwotS}tm4dS|tu2l^ zfsD7$HiILn0hNz3xU`-zkRVkvv#&~?gjwe9LtCUJyQc6NN|PM1%6i^K=-0E|W(n3@ zAEN0M;50$M4U^klAGlux1r`w~)xu(wF$G>f8Ors&pZm!E3PGPu^X z4B-);?xuqM;|$Zj_U+0?q*FsJ%WrEp&fkDi$}1p%5QMqGzda`S>qq zIFJAEH2j!d%-%+WI<;Hnp->vDz#=ecJ&G)flr1fmTTihE05p2CNBS&IG19}+dbo{PScplV z)S6+Zg5KYgl%xFE?a>`U61V}4jYfvkr2R^LeqN)Z15(Udc&`)%-FD+H#FoP|MQD?V zA=ye3{7rD+WE2eLWCuXKVH+!807ChO1{!@pkJs?$^udyw_#ij5M9(UW@4|27{x~MQ zN6hGDiiAyEak?@zS~u8d_7c{WE^4sST#%n1$Dk0dy2n3OXB`ELUIIt0l9!2h+jv^9 zj`2#!bC;xPNk;rW*2II#KLg5j7hr7-0JPtW8^1+az^mN&1P)VePzc)>=o{|@*3ie8 zuhjTWj=8P*dmc^vQ5KKu?Ql_Rg@-fa98Y=nvKDi+rcj&fW6hccpcJW4dnnOn^pnl< zyX^yB(!v71w<*lry-aP$#@zItdrcuUXXjb9u0MWnt?{U}8Z-eEp*&>8nfb`uJ zv|zQS*)}YV-yoxZ6k)8#-&YU3swn5f_U2gEoBQ=tenjhnT7!?+SY2lJ?69KnpRXXdGg%yvMEaw?`*>IsoV zmf!9a=-W6x6;zPva&Cb-%nk&ti{)2i?lrkE19FIkeL15%cG&j%Rt5TBTP-COs6Q&2 z6?~%0bfVxN+%oUWQpJ@03B$R3exQlb%n->oTn7E_FQ)woRE8Lz%_!SHX_^G#x|gZZ zV;iO<4Y`J@1Yg9g@`k}HO%=d4_?RFJ(F2T|29xys@Zc6#3R}leZ@(EyLL@~bqy*f11K%hT{NR=_fa<7V+UaQg1_ihP7@<`) z|H8);|2Myp_`fLFd@D0z8o>`Ij9@P+;~-G6xZ%eNT?@f7)l%((8-rECb)tctiA!Dl z2!1Q@+FZ&=m|O}nBN=Al=%`1IFl4Aq2LTMs_b%;+-h!t*MZxdUCNBG0l5q1c-B>6T=I|Sm zzq~yZaPZmSN}aX7)V0=Uuw0^{XhIM9`z|+aA|4IscDsE%}n@UkzN<&mXT2+r3B|Pn6`Ct2MLF-wg+1t%efyqS$(nW!J>8&;o4b5M#AKa#;s+ zlu5@DVXet|H7=ozw`D1o$*awQ7ya{2OBOsRO8cAt( z;Nhh%PVcJ32Yw4YUfPtsdBLf`f&Uy0v{K) zbLc{(H(jdCeJ*u)=|s}eX$-5XqkUVDjzDuLGy?4DW!7UFMF7>^Fn5D?N91s9R(dze zSO(D@uMK3*D(~05`JkwM5%k za$}28h5N5tzMN*SY@lTti+O=+J1<9gUCp`07h3SK8iKp=4n zNVts)k%X~(2EUHmaF4%?1|%VnfGG5^TZey};UI2Agu>HVcLL?%)ZhgZD||wL+tpXIZJ94%0a&Km7DKNWn~$3Fk_v1)#LT7QJU(#uZJEQg#z5T z4~#G#LjTq~-N+I%WHYV?n{oCSa+|f`#@zHaAE0Vcf6|$i*`xgdtPTbchCB6dN?c2wRg-mSsja z%*&#?{)W}Bg1?`FB!kl3DAuCd4!h z7cOK&hrzBem_r&&3yR2KvKNcN9J0aW9oxB=K*<5WV=t$O5`n-bLA2|J)&VfJj1`W~ zpGqk_9R_wx0}ZBc^~)1%AfU5NU>-*dN#&^`a-5?ldlb4sYQ;%n7kl2BpsMDTl=0%q zAQIR%4&tZ=@r*Wg2JyeK5$1>m!lN$^24x<~-NA zGQ5;R2w3k81EV*Yk+rj+c%f3nIM{qM#OxlA^c>@H;gZ4>^OHhxIwR7=HsdtR@HDj- z3Vs>qI=e@3)0$5+`Y_WTxa>y9k$d|NrZ>5ZrN$oOGIZ#mFy~67K_fke%;{@X@cqqf zD-O3LnobVQ&MkVk7o6!gGIEtDg56y$T(!HMd>zk8%dM>F>+tTK=Nu{uiZmJu zFVbn~nTqr=K49)f5a|$Z!2T|d)y7L*_!VDXMDTyvCHiQnH0H0>*YBkWahKRWNMZZ$ z9R2E_a3=15_|l(0rh{2oz{f-{kjsSpA}Wh+Z+n(TE{G(Fk|2V$Q=KDC+0s-mn5JTB z>K9B?wKRgs7QsLB|HQD(j?TG2mKa z@SkB(5nG^7dMoEZn33%e=)k42hz+_4C5h~W1Q*@rEA2dq+lxI()gJr}?K@%&kDN~E z253Jui1pZNYZUB|ReY0-)?18_*oqNw4_@Q7Va+2y?S3sqPKFMP5i;p1ibqi{p|#n? zVjN#1#^*Iwui$kmjYR5|K5=Vd{ohG(5y^L2%4~MQLP>{>{{W>KM%p#W15`q9u2$Lw zzU9P6FmP9fw<1{F+km*M7v~oMpnDa1^(6*^ERaa43E%~I!4e(+OUtvv%?S8v-g?1O zyeFg=ci2ESk+ul`>|00gBs;$_xLi+(CiBa;X>Al9c3z5~VRz|*eh{tnFekGwkMlJo zm{wKH<@MCjdglRgm$n2*CJ@`(l1F#v)qw3@W!zp34meU=4q^=ZeytUQNwI_mar~^W zSebdhoA=}7+C?rGLb6+xh%W~viCSIou`pC`wIwMV%tao2WY{w=SgKW0nxMp;5XJ$G zX_)2EK(Qwb;7RrD1D8m$Z%Rh=QOEq0o@CIir?3UE zmj#?F0DVkkaqb+Ac6FCE7>ydTX=mN{< z1S$+Bm@TC&kUGDBuFF#@4czt(B-L~fgZt#B{J?KD|FQVA12<+)Ac{}3_Oue8oITwa zpC;|;SbSpN9{G;Or>Z?6T80C^B|T~yCuf8afyYDf7^Wd-?HUM>&lqN-Ta9UBqk)U+JZY0lcc*lRz1m&VEMWaV z`AFiAek}3FgLA<>-0JZM;qeRc@xA72@K+m(S4!oOrMuv+aWp5afz#ot(2p3YZVIIU zZO{xGVqa8xt(aV~SlMQ#jmc$Dt~BF8a{t!w(QRIo058d3sJx`->qrs=eI=EkFN8#- z$4g-e37^XWr1x<>-5`(brF5Hg0MKmH0ozhQm{&KMF(7RDHMMF<;u7-a`FSE9`~SDeOyc zHMJUShR3nR6r`fxiQ6bLr#3IC7 zG9M*(&7!-Z-TrIx_J>Z_)jh4vv3s^=V?2v&l6}@%8$XA&md~A$(Mp+rw&hj1JA(qz zZGR5*m(PLKw!&Z2`5c#gtpCPZ+2<=epKX;^;eo-n&sTIlU$GbmCh*qw`SQ-^%k$5H zt+vmv?tFf=eMW_i@=lC(T`(V$j?;Is)@`06s%A+uVQJ3ASa;G)TAFh))}1sPEX}zX z>rR?!OA{DtVJpp#c-Tp^iAgc)%!4@0(KhtM1k@QKe!%ua9ZF|O3Lf1B*5F3aXBp5m zwX;kZR5G>%tYFUx+?!SG=Gs*U?hSUK4%K+rSTu)<$!3#^iY*L9!7(HN`4+f(uzA$4 zSUeYkwy?+=);h2j@g@PIm^&BEXQ^Hg|2^zo!A(}%9QDpY^0aT)q|-sifu$@xcy64# zV)a2hva}Y9I<#B29R|3c`a)4G_G>{K8DKFl?m`_?i=`AF3(WDTyGb2V53T8I*u~dr zZrUh1i0k%*N2AS=hA=w^^Ao~{iYO%x{*P5uTQGe7N&0t)!i*%xpSXcXnb>#}{YQHdR zsT)QjaddkFOdcFOKgPN?+>K&gd4zR^RgA1FcVb=ZVd>IpsnHhe8rM3#GS)TY%Ozr2 zL7A=Cl^SbU*R#I{*7Z7aW#r=g7;+AZ$Xk`hx)N#1>SDK|v94-GmgLK}Sl9LgTrgvE ztRK#03bG3ol$sL|Cm>rrXIhCygxa~0k=|x57Zn1z3iMt z)Kx%cfPo^?(p8DGM|N_BN48ed6rDavww*wf!1Wvnk zVnsdM81eCbJu}zO{wx?V%S;C)OwM7d@jZdJO7>RK(V~< z%Z79sjzG(e(1DsTNd%^MfXGo)B0MJs7?o%RWH6XGrQmqL+lIZx)Tg)7MNjccV@9i} ziRpEEH*l6&mS>kgV|#$-(mq(LObvD5O>8fnpv~H^IpEZfQm0sy5oLfOo%Zxz;-t`g zUb&17rTpKpFWaEwg*3u^leRf=ydf%0S8ePTb%XFCG=Cs8Uv5;fgV1o^x#oiWw8fjN zGqjA))-8;PLI+^BHNo*+Vbr*5UY)SYQu}Sw&8@T(mXX%m$LQ1uTd}5U|MB7O)DD zJ(V7t8c~>w-8CX5Djl5MQd4sy4^Zt1MIVsQlCiZw(4;1Nd>I`qkMOmdaL`Jb!P=Yw z6bB8W3_mLV06VO`=w1353HJPA@?+W4?qr&v7uC$P8SGPsR@zIRSLNB&enBcsmMn(C zqVBgc4k8=MgDrop{;1e7^~i7z-fYPCMKTNevUx)d$TLWp(&D(JxLxy@t!~i7h?u>d zgx9LbO~Rv1Zp5aDI*sIlsi)N4cL3x{3`Z2=XvfxMr^Of5-Hxl7)AnvQ>;>eVyBZQ; z?Lc;e*0Us;WM+ymqCRlNa%#JZ zOe&NbJ7|csCtYeb`4oXWDG~tEXqHX^oAr@Uph`id50Ej1DLf`???$!(>X|D8Gwc{S zFoccThBU)&oNJZmi3m=+GmzMwfywR+barRpv^xW_-5J>J&W2*xID~cnL_zaBQio`R zF&TPYuzwFjerfTeMZpC#W5dsqdKMS`iA3UTIO*HubEL|!J3$sbWJJ&o92ZuXh&Y9T zb^HfEs~qf(}WD0l}@HSOIHil_%Tdtntd_|b3KVpM+lb>TbhkCY~vE2 z+wU?PN*T*K>1H(gLUmJua79X$IsnR(ZlEI+jfR09NC;ndmLG7grc7sj$rB$-cJ-|a zMwg4pO-%*&eb`ecs%t^#r77%q{5&Mss) z!K??+Dps}IvJC=B6-;XQxS&*KulgAa!v@W~u7#ndl}|nn(0EOJ0TOs>xpKAU8KZ&8OI&eJbHtX8%+)U7P84h!HQx~ifvDYfS_Ui0mc#d z9XJK-$`@-1pdlItIALISJ0wbW?4ZonNQF%_OWFATY)tGW3lr8qG24v(c=S>r7G4`X zi;e(0KvX_Qx-l<>;B;hiRlwl!fOF|4%-j+Jy1W%e<*m>-OiO}++XhB6m>8@4j$-C+ zn1LH_1a{outzeypj6|Z^@N2ylVEbqem?j04{4_*LW&~E?SKlkW{C8}hbTGV)! zw*nMOXiZb&oNgEliQ&Uwj+<3bP{G3LGNAG6q zat3%x7z4okBb}w6z+a59b}|MHZ%_0b(SC@wmx#6-iKL@v(9C2DOG&G|F$EPd1#I*+ zra*DM+3s@=ra-$TI?^I3-~tGQhwe%{Ipt;B8|YooJMyh96tW*A2!*6*3xzn42a?iR z{3~6He*}gt{$YgJRb8{zA(^nRzO{+<8=F`Za$qxM6N`e5p0J7O2~J#3*u?Y%hps1V zVtRse*Aq4|J;BlI37eRn;Pmy>N`aN8V&vEv0+Ezx8RY&h?#()Ah@zo5%g)6YOj=?^ zxI3l0A8GHJMt;KU8k^T2BWOw3`mbi>`bMc(m2`E2kS9IOLeMg**!!9xxQ^|x*^bLD z+hgDm3$H4Ea)!NUKZozI|I4qI!m9iGlXi}?9N%KAIb>Xs&$P`^p8f1OPV|YrEGtFG zeO>{JxmAGOl0r*z2JVq}y5v}!NMv{m18Xny{9ciF?Lj-2SV6+36$K?-^ix`bQesEh zku6GD20k47rAAoLbQXE>?mBsjTY{Ri0eN0_TN2U@mmibm3B?gw{Q|Dp>O!w-{Uozq zo8f43<5O(R-~*Xr@00+R@KU;1Va~Sul6NvRn=T0`^wWBgXA%bfMQZ-5Wg_AJ_Z z2+2+{xKC&kEF;+ZDEn&oyTW!vzY?Ez+tUM#tiGMJeK*G|#Sx8e3)#7kATxbPPZeLf zm8PL4nnk&nU?6JzEYvQ69Rt}UkDWTb88=C^`K0a(39CwtT1Wu1ET2ZtK$CL8OvhXd z+O{%cScGIfjduVr-VfO>5*@oPTe#xGG4(~!*aUPKT3z;oHfD;X*jGYO!q*$I%Obj? z0#kJ?0G6YUA0)#}Td+M&gf>wMvLE(X3-PKac3JhKtew|@tuvmkN-uiFa6*?R%mJP4 z0AUGS^n-^r_}V)p_D|s|Ev|laGR5Q$+g6KA9ourXJHL86i=N(#XUo|+g-~p>b2U*i zh*(y8)HS-;Ic4Cz_KiozwQ5s{?PL9lJGRRlNf&+H@JY*naA=8Ch?52)M4diF<62nz7Oov^}(%{;?wN&4xvB8BU|Li)U*IO#Jgm>A8mN@! zXu&Clpkf1ns*?R5{)D|?I%cD!l+SV%*R43wT(7zc`W~i(hmn12zK=Vd_E*!0;x)r# z0MICfX#xv9vUNh>SU8-LW}fggsF(5L&PGYVtf`r+n=X6MXxx{ezN>F9^lC6_{!(pW z`&HO2P7d)e7v?olYW`i?vdo1HN?T0F$QLsFkIL|QpwXQ{C|%oL=+VpVg)(tHXxOUt zT5JwQ(qb-y64L<*NAd}GC16uF)`heV+S2D|ijY38FBG$yjUZg_K$x2S+BNh-%<~M_%ZlG5 zU#RfgRQOGOtM4j)yXbp(KOiZA7TEDyXlr#$y%O+@XG>n;v)T(rg)dUEDjZ-w3}Ryh ziBPj&#e1$){H#^@QoF*Jsqm#(;mbu|p~68qFj?X!^?}Glk5~f2VkGQ7*47#-daj7f z&h;CNvMQ{DX`^X9R5*GS@5xIepW}L2@mob9qVE2Z3csaqgS)u*y&&qS9L+89)Aqr1 zz(}T7B~NQ$(fdP35z5@~zN|5YT+aDB`?BFFgipTh%?2^Ify&y5B{We?P8cnYj8PPO zkd^gEF>*PZ$_?zx>Qiq(Ib-CAG-M?;m`=ieokw}lzEBrN70j6WBEq3B%p707BalK( zshYxT>jo?4!C>7dN%#&g%Xg8$Hf4Y)D1%6ltojF8>;v6c;myE7Tfc1&Vb=_xBjHJg zQl{@#;%k-Yq~ng@RxHW0$-MN6!oFg9<*PiC?XhN$lDm0?DD9I-YVp$LEvLZ}Fp8KpX@ci1p>iKU57TH_YSFjiEa>!2(06|iZGsW5rz}`iNh{Kry@`+RPGQv zL;%Ho%y|}JS7)Tu)qbP<77ZPV+5&ER`r;cui9oy6dNl* z%U9WkN`=xdacF?5ydWk;7?om?_La4CJB*unWzG*c zn#S>h;Q&-bvR&XKsYF(ml#W~U;`?zO1u6|V;<{$MSRjSYR?seP?UP!yl=U?}9AC0#+DCt)UyUM$ zWMeD9JEBE{$^!3?Dhj7X5K)CQ(Mbb%m^{S8U_fviRjA~o{T~n&_GN=I{fmBKkvqYj zv=LR%V-*a81m+MxLQI7yV3D2|bbhLD-AT*?g{&ju0uWy^;4AooDlMxHHwgZeb#!aN zRnwk;qE?WJ;KHu(+P65qn|n4|GaSP@B{UYy>_&=WRP%xfuS}C^$)FtxD;7@d|6aIX z^{~lz^f^K+^?NcqyzYHcb<8 zW%7_`(s44jsSnHZjsJn?uJO`P(FVbuF=V(*5v367AyIq8_OZ_+j97c9Y;Zdx1{j9y zgnD0igGVX?KXu?ACwC!W1V9ajnE?D?G&=Btz_9OI@Umg(v0*TXi6GcW^jOF&Mu*o@ zsgT;{d5EOdi@Zn`J)n)I8HYG4C265{itKcU&>eX4uE+N*?MIFcK`bqVeTiMeDiFW2 zp72SO&^+c4(fiqlFI0BgTiB&G$i;ngSFNcc`#SDLe7gIL5|=1c;jqH}3{CV@an z1yyW(7S+y;1;uG1%wJ>E6N=|bFbe&=_4tjy^o6BsW1KK3H%^Xkp1PNHXMN+LB6!f} zd+f%K&8J01_a!huYms6%iS$RVJBYot&n2Y_p*M=}A_crqi1WgXD>gP|{ffN_*-8a2i^@d- z1uES|maI>aOk#tb9@GYp#7OzTGPFhnPhmXHY!ZjJ8Klr$aP4YXh}l9d7Q1CRG%v5q zIv2uGS&gyHF+Pf5W?`>TPXo)KvkU#Hy@p5?bP94;pkZ1h)EoN3s<_L77Xj9@a($v$ zL|subVy-y4WEJ|unu6J&q@d`M5LtsFVMbZsB_XeUUp>$J`oXiyL1I^2qTXALDPYd9 zPbkH;%Xa$3N>{+Vb|S*!Wg|O@d!-_uX^I&e)2-sA zF+ZNlrvWa(ZoE?+LDev09baBv=E#%4jfBX5KDeAH%3Fx#!HjzD4YGM1Pe;URplg0< z2DBpB1Pij_N|_;qDo@N9XZLuzPW7Oj@C7KICbG?I!U=%06(;NPry4iiwD^&K+V{qL z`sW^c0-obbyjMf7JBu*ybRHPHu-SE*l_(eH^F zW_oE6?g{v1N#hm>9$4KI(rTLHTU_$>MR^V}$3;(I1g#_)baZ+RGv^kS_3{h@!1ewn z0J9p>Qo=-0%K}xc`cv>Ip&6XyL&nc10!H_HW2)vGAJuEe*)H!;Z*P3>BY%5!>@pGc z-l0!cmQ~mIH3?cp$6+O?810A#othWEJuD(yquC0>IP%LvPn!#QEAzIg-%MC0KXXjYyos5dpYGY3X zl-9^D09jG8qT$qP9t@<8wW>)*gw0wZo>*OqCsSFAvSD=%v{R!>j74Y>Wn%S%@3Av< zogK>7MjtuXfKP#FTUYQ6vflPu`DJjhEW)g!BcB=;h7t-Tir$kFd^on!^nP{bSwAI= zygwUO|3Bx#<;`Y!^sq{@Ji;;BY}MfmR-MsdDtdp0wU_^sIwFBSmt%VMOGcEa{vE#Y zf&X-5?kxk%8Ojl;I;8*__;ZY+u0(;^NI0o$P5v-MWA_?W(8?yDMijAJ*5B?dr0BWv z;di`yHwQn3pjry>2;s7ptR7#c&63R?U%vMqMmM;hL`*t+*w~lIw}41p!-g)E-V7Kb z{m9W`e9!1MW2GLS)png21MuoWKg@(w9@fy(NgCP`)Kq{RVNQ_txq>@@y3awJ)U`*Un_wo|L9!R1@A~zvYrpT=SC|&O* zU*wcB@l3#yTmOWeyCr*>#t`vLzy-%|`^tm6As5D}YIQVr+?8s~R?25l3Mk5{w>-XR zdo9TWL->g!i=>Tq^u=U3ip)fgbLTIj1x1D-;076c> zi~{E1Ht19F@p~c3p^BZ!_YgI8znhb>}-2NABv0 zM5WyzmHXMS`og&<@sUe`P&=aLIb0O<+Scn|R+`=R6PBiXba}F8`5ptD#Z|rj__F1W z<>*{1!&8x7=rs-5DUU=qtUS-@gfQB9*G}3U1|8vVXYw%PsEVdvqrY4r!KU zDF(a|8?^YW^hpBvKTAp9kqQUK`IV9xx=Hsu-f0E@Y*Fz)q4stM@-RN8Xaa#HEa(MC zrB#H!mWOo&nK5|^1sX|B2}MIK6egJY6ruj5j>=V0%1cV3S_%fZU-(GkKf#|Vvc4;Q-b^9umm<|l%bkER$1wpbI1K=J zeUe(tEN(1V3+Pu6qtP=V=0y7zgr)7WWN!P&_R1t#5{dLq^aav1;XuJ$4H-KYTJoB= zAr|XJh32jv<_+e{cVSNr5xIj`X#|FaXY8~}t&^P0x@j!~JLK1j2a6fA8PHD4v}{(v zb>U-o>%c8q7Y+$j>w?3J%w$4{&^k=$vmGI2NUaGU1|Wz^GTCJ~K=V?=b7FE*MxbIxWz9SRZndt(0v^p65EwIgH7piAt; zTWDV_fVWbaqC^$;Sx)Pvw~z66#V`6``lOIf62OP%=e>hhTTegTzx`B zlE}~%Wt#Y%YPzCK7q$@z9UX~@6`$1$MutKx$fqdhli}S7EB@i8zP~incqWk`R`AI+ zgwB@Ut03WnTZna$^NU!O!u91MpU^%&_lD5oD08U`rYDq6@_7YmMe+RchwvcbZ0A^bwZTG{=}pf_HJe>>=bisqs60RgPfv~gTY1ciWwLY5o$WAf)K z5mgM_A6c}c5y-367LAs0ZqUN!*8R#jRvxBTaKug!?NOdFks-6kvg!8=CKkzjx;wh5 zyk76bw}M~!SDRMJeuGwt^7cWwhd>@q0*4OPb;i?)8{nc&e1Y++`_`B>hI_6i<`T=<-rr^tRbdLHpFX-kVL9Q=Sd2pPecvi zU|)YmvDpxxvW*=y-q?l4FbG2&q4Mq!^?%w8KYl!$wg<)e73P20@yx|S{Z7};Hyi4>FAd4nSYntfvE?>Ga2{-b{R7mPm=8#S zaTUw>$m?_hjc4yCR$%MrtpgYVdgZNtW)z^hO zaWFCwk$jKQt-3$84V680Nntq9_`Sr|B!dt5Aj#xSF~WC|ZV$rBLTtcj2(M<`w5u$` zj)A%QV>Gq3$(m(N!Y^6X01sD@8VlM>97-)Bp<Ej8Fu#T@@l6SyHCloX9&B7AE8_otJ`U=I=an#smJRBHAPEs(UfK1j~ z&U|I$xXT9TWn=S-8H}6M>%e0Y3Th&>v_~5PLIHGGBN*mvSXe@@%!S>8%R(bySMkTF z5f0~=#c@_+Kw{ifXiRL>P;Cp4{V*81m1B(^YDwP0ev!ULObzX0K?`syC-7^VzPuBOs3 zuV%veLo;C}q4Qlyw*+Jm8G%M2QglI{r3^gIFgA}{0lTt1XQA-6h;lZmw%{(#{6#se z<5>f`4~e8;Xe2sQTn;-pLun8V+7}(N&8OC`D_hZ@_#&&pKZNSfaY*nYh|j#ZX~$|Y_h#4;I>Vz0ek)Yc05ju zAhCsxNfQAqXj`CFOBASNEW1P9kDO~g|n`Q^Z;2FTpG8CZ|+qX{s%(;7H z`d;RT6YwZ_dD&IewcW?>C7r0wv`a-sAUucz@ooT-dXQD5g5Gjkr)S08Kjw-GpLXOH zg$pxI72yT8M9u_dgBz+KGhmmDRrOGbI_EBx-A1>`&PvhI_6#$^qJg%bkv9=Fs)R9g zN4WL`xMt7|<_a62xI0$l_881V7gdY6h>z}q$f!y;t}X6W@zSNslFH8k^B`n<%%K`q z?IURCCNvXusP!0jX!bmESJsv*O0tIu44E4&0Z9}aw(O66iTy?X5q@#V0Dy{`$j-|Lg;JGL*%QgW#n@{uGBy0oXo&l#?gH88V-+!ZJC~p_&rTaPGPq zAibJi>0D_17HJ>8T?<;J2*^bjpGU8rak>IP6s40&aGm6PCg>pmRXk{Cj%g!@7I5*! zcwmyV$KE3kP|G~)IV#V6*?^=G$)SXzm}1w9jZBV~tAA{a6-#w2h(v0LRv-}yp>+o{ zH-wcIIwr`n@-E^m4vC@=I#jTXp#oYhf7(YB*}P__M-!BH<_Sa$fycfchuWhy}YM+$BkHfaK2%wMB#Nd~h5Tt}&*My>srOl%Gc^iQhINv7d%VLT1cVB$hByAVnZ??;So6%RQZ*hJr zBzyTDayMa;Kk|gmN2fuMdhvu1VN`#Di13KLY4W2Or1#U%^bz@nh{=F?Hx5_g5*X9o zGZy#21pY!jqBpsvO&$`OTf>Wx04qE*N6cy_W||zl)E*9UdQ#^?t`5HH2T+b{to$JrPbNN^s0D z?BMcw`63y}%#x?m?Fz0Wcw+%IVj{~{VtRU#8F@A;h>{s!r(}+o81t0{ZJnmDc^hQ? zwy28us$A*abRIY(!<{@5;6q|f`xs@sbzCJdpSbPBJSC7Uo z+i0-;IS4Lp6F9M%>7&zHFk46Qs8J&Om8@ibL1abvXm^2z+7Wc2^`s+}DXL(nbCH~X=U9Pp$|3!Sd zQcv$Ihs{yP*!x~)B(ZOcE}uKoUHyQ*4zP87O< zRSL+R)W(z(a*sN}sg7B117@Qa9TLPJMG&3zVl6^WxS>>jqN8Z@64*QhA=Beav( z?P`dYiVDYmsivo0jr6I6K9uHVzvkE5cN_)h( zvk}9FDVZ;o?}3mdPg!g)|J>Q45C1j946c1*JOr4T0~bL9Q;FZlGK>%Rh*sa+IzbQl z%#y1Q)RDihg-m`q73vcAQ$CxN;_tH;#I2|-Ws~yhBQ?esGeP0xP@N-Lw->t?U~Yi8cYC%if3iA;`w0EIhIP5 z3bGVw$%{@c;pS`k%?t77vf}fO_kU=QET{9Lm4C3FTFnN-Es|ic_Y59Rht)}30UG}u zsW7ChijdfqDQb5z1n?q(Ki1K2A&iEF@8bipN8;?9_k&9U1U~<)qiUu0knp%N!er(8 zob$c;%<5mjRZgCKS{CV20Jy|3-k~oOaIlaRAm09&ehn(1#Ceu%9RGByH^|(VvTj6g zOY<$yhHjT72B&JAnV}i{h>Da%4a)m15ChRDcqnPck`-~B9zo|==kp*1cCHbWi|OF+y^TK=Y^t zCO~LJ2w1TO%d(_~i$;cikVSnkqqWSdk`&M^au?J%@hB031c$9uap@XixzS`Nq|QjT zKF|m>Qj3%d3h4(#KqbpM_DX4it@yqEuLf;1+kl+R?j}e~Q(SEx1Zb*_cC6Al;;B16 zpdM>cj&>~A9QXdbV|AqZ`$yPvSMYx@ZhPj&N^@X12TZ|jBK8Kupe+_=A~bhwyR%-~ zo%9zW9ZPGxv!mhv9@#;sesSrrm{1HbmYG)~ehNq}_-aMUI5ByN4SI01hUB(YPdE`m z0N7V8A@OrqK=>SD@Y-kLQ2ZQlh|eL&t9`~dKL0GYd)6;7&%(6YXPsIVbH`Am8;Gf} z=6r~3+OIpz_#H4quI18V6LW>dh7Qq1F*R}nfNIeLg<*)Su7#=sPr@VxlL=AtOSrAd zgV{Q+C+!9YTP43EJZG>-&pAHlGaB1}%}o(*>@dRGnEYng_oPRvLDOn?jAy)KJmZ}X zoeN)kwQ)xg&DV=bp*7`Q#TOxDuClB6HC=Hse?iy2UBy4twRaZ?77Q91L)IyfZ7YES z6j6X%|8##I$y-mKj88l4+oSPm)}9`YPtKn1k57~Kv>cx}-jGu6j!(pb^!?&oK=1oF zSRzW}+PbYntpc*L)3Fm9VzV}lOapu_O=KZ1+gNS5T*<`YaxI`D@-3-Ws+5j zEbJ=HzggIwpcjH49rOJF+QFFv9OEK|=8=#xI?_e?BX^j(Q8Zv9rBT+#&>Kwz&TTM% z7|jRMHA*K&KGBWLqIkU7HlN`((0nfX)yv`ZB$>$dDLylQt8APXuE>jQ4arwLQK+B< z6UZHxkP!aj97#3eB$a-eq^J=s_zOwlaAM?_u#iYq2f+|W*17^7UB$~`H$Kbl=0ch4 z%B*@gpx5fLSwlT=&v8!W^;FqCZB=#keQnP({OxV&Ijc*DS$6W?Ti-97H1ECjJ=2lQ zKvaNQ+k2IIR`1vL{lb~^-Uq*_9(D`FdJx~DJgMHRo~nd$P3YKrJQ~@ur#{(iD5)Je z)VFG=%9dZWKp0H!`z7kH;h=_fO5f+NEFQAW(8|e+(L~NxO>BhFrnDHYR`hm#y z6Xi-w2*v6+Q)ZKn?L@A%5_wYaDU;LJnJp|nI-Ei54ur&TfIz)%AbV1o<#&?G{9<_Df=0p?OU93+FnC|rRz`~hA}?_J zifYy-G9 z6Nfu`MNF^53hZ^jHct|?SvwSQQp2s8(@gcATlK|$+s+W13PYaU0lhFqM;Zmc^yrQ2Q3YIMRP z5)k?BFsA4+iOhBSJs$dvLKnlkx=iDZvMRPAAPGP;SkOaOxZ+`6@|&?x zV3xpc;V=f6Ef{{&_{0mhLQO;pq7SOy+?xcvLm7v}%AP~`7R0p}p-()9HD_(zBcX0` z&?Bq6X8s;DmjDW;QNt2HDBZ(2W2D_{Jvi+L0J5kJ2#Vm1a&J!-usfZ|)Mg zj3mHrcLngVqkStDG%lWS733Mj!zjA>7t4$OdHmhkasj`D1HgiZxfs9~4vU4cJDxEH zc^Gb*D`9$I33)*6L{rZ1Fv9eJ3DXc7Mb#Sc4qbVsZQ~S4!z4w+!wJ#hYor@9>VZ-K zR+k4ArY?hmI!F_vDSAi;oWxhhpHo!G+sQ(6tELcimTpf_yf)(^rZ6iIep{8#_RSpK|)8jrN1Pk+ar2~@ZjxbpTwfsk}+6~z6rqJvz>7QO&$v5TiZT(NQn zR=^HpCXNm}|5tG&aH<>%$z3Q-MTvU^ZO}lXF$kc8(kwu52u`w3&H*7PfNIKW`w=3b zI(6g+E>$EI)=n*b@RZ^^(Ep(&LYU3qk-I2~=!nkUhAoGpV%Jay61K;NY$y$ujQ%en z5+iZxD^Bibe>JZSEg-D1=#|nsSl_pRZwq<=8EC4iAo!+0`q{yZaJK-C6pKo`I{vU#Db+Rufut8;76cu5%J9%zGR|ZzIAAjb#;^`YfMDY2?zf$j&XQ^LkVfU54ubK8 zddaHS-Or#*`|75ke;5O z*)sr)Y~yeuc9I9AvEL{X#SXOMuh{r1+XIR0!%H*=G=36Y0Xgn!;*Ak2VAJ2iU@a-; z|KzY%^0O+t~9QLOV1dZhO z8Ey@KtHE&e>2acsHElHfZ-#rL`Dl}@xRM|HnNU-wWLz`aWlo->%!j(lY1zH4B0yM! z2Bhz5q81B%r%SXrY=b}$joTpfP3>eGI4XDix{8G&%gU$jP5eXreb+n+lr?n5x}se< zOkZ-nJQHGi6vS+_c4`IVd`AI`>&smAUfej3YLY*?6aOeJ{{_E{P=QG>!&ek#AS31b zuPIm=0Q^ZMeuytAR{?kM{kRJsK446E>#=Y9PF-0dhsxM4Lo_DiQbfpmR~a z7j899r^4+Bx6kUfha|1mm}oS*(Y_R*#nn`mR8ojJaKmBonm zOhCnpy`gwDr#)DQi!`P`0HZgQ`G=>v%UsRNg!EaN=s~Q^pTBUKb(LB0 zzx}PeFtwpY53FYxnGo z`i+^4f@t1MR#2OV{55XrQ|gnyQ|GfK+(IlQo2xo5g;<8oQ1E|}Z1NDoH$8x2nzjWQ z1(1glXyCMb-2j`$0k3+MYiEo6lq;&_odT(lhWkl^8SO{9-RY9rgXJP|j;vQ}e_g>O zQA(~d?4Nteh)&V3Uav*D=uiAfA>6e7D~?kZWwPkM_+p~jNUEob@#_zCQ^!Aq&9#4> z?4gB4|ICXxwAHkjQ~DUCt5AKQtZ+l=ofLJLz>osM9a1E!zmuYom12rgo}!eep!=o0 z1N~eOPuYZRPx&BDQn@&fVk!T}DoaD)Jk*|R&C#4jI{)Vd5pZsI_~ebm+2-y_-7#A+ z-s#Txp#lXW3i1ePM^2>a;jvc@*vq~q-Zr%w^m$oqjzJ!Nhrg}nYxaD6`n}+Lm_L4H z?c*P;ef+=HKK|RakAJ-O@lV!1{@-gK|9tJ^^=j0Ao(QpzcVHUQe)eEKIyr+}`1wR= zTleog;LPWpE{TWG#-7rW`K%@iY#8**gbPQ3o1uPU`!XUg)P!XUS1r&V5feEWWoBDR zEU&5}2-}pp+`Rd4I{xnO~3@^n3V63&5I(A5dfHVo(BIT$m ztm6eLZAc97O^c;Diqt@{PAefEDls9Fl!VeyprjBz^CVZvQVI`@k)UFZB(&08jxHaFuc2LmGfo+5~F%gE_(yfFx#Qkp{#E~`z zpBF`p#Mqf4-k7TzS|Z?!W)nr4q6JIQ?D2q0KwuRQID?3 zglQH{h$Uksp-9HnVy7xs663s8@$9m3@H zP`lD0i2VlNk|_-GhI@2whYiYU8H-A76%kT%R9R{%M^#H8<0apE#{nAGgOl3OfrE* zN6*gEZ>3oOI(qT)=3$|)Wy(K^zP|+7aL}9rSQPIRU=mcoX+lG}=YZ*8N z>4EO0{bZJRa~b-n3x^OT3iq23FPQOH?+{un+^@U^6z-RkYgx95?Q4PM^i~~&(&<$P z^d$p5zknVhxTf2ZejHknR?Cd>{@FiEL`9j>3uw8I)EYZP_1!>Y2Md`76W01<6BIIX z_qGL=Tz}^Q7H1~TTM2%T3xH9Ix9c8_rTkU-v?HydCweUI0fT~J z89*(CzKGbG6+%K3?P1d8hy*o**SKAL4+zDt^@hp4&iyANUJ3W z>H-mIwZ2ofLv;1dg->)SmlSykPkh4%ln`abTe<(v6Q67y`^E$KdkQdf3pYG-4%Ytd@R$c+rUy%fLXjzkBIq8QDf=N4Nlg zjS~Q67_zu)*_J|nQ#2}x>7$Hs~w?WHprLuQ+S=oiWh7N->oHR z5<^QcfnG2J->K z?5lK*#m9QbLbNuUAzoI^bjJ;x3;G}GkAlgSn+KZ z#HA=4G$!LOP8LCbmCU)~*;B-pUuKEOGqVH;#aV&|QEy@D8~-aiGQ^O`#!~id{jWeS zvA9z^YdMOn?Z|*qUrJ*`I@3bn&c#QI(VY8V5i=ezmuUzvhj!x^+4#4KL|>bptWVc3yKs5)l%9WhdXJvDylLuK*7ts;uz*W_U6E=e zL{q55ER;BG!(dHk_V++2e)!(R{~~`MuSoasN4*yIjh&hnvUu&x4;@7TKu0;9O#P8t zD}v4|=7Lp;x~fXlRcRvQ;t>=`e3Xg`#j4a&w+v{`q8L-a=wc{o8i@SapIAwXJ%|e3 zR9|(STM$a5#VYQW0p=Z<@qtHOq`NU+iYg+6IzRTh0Xpk?4*B;SB@Fq^17$RY?T)?> z$p6E4g?@i6Jg&SiJiZtn|1>@ZWe(MveyT^7v4TJO&qLa;TiP5(YR5KeKO)n24_KnT zk-URPF~o?()CEk1a}r-BUnsMQ9xMIK&r0zrmLajI{ooAuAVcHTuoYpuXV{aOm;yzD z6*U#1av>pgA)Nj{q`e1N6iLu9JR5*zcY!5?2rP)8D2iYp?KF#ssE8;=M3E>+&LCk? z5p%|zvu93cW*R+DF<{OSb5_iPz<$*;i>G(~@B2UB$2v}@>8|dsuCA`GuI7w`!#XYz zz5_gl*&e{B$VD(f2jGGR9!N4_CLnty03Q*22g-S@g?|_d#Hu{-!DPTdRZ4j2K%-yk zzUT9@EYS;xq|i0Mu+~sO&y+79rSc*eD}ZRFES=RHfBw_g@ZA`R z1P*7gqYGqPq#Qd!TnKadiZvMkVjXhzlWZ$onZ(svn*)wV6oi2<;wg)vVL_1#WFM^j zRj%8WAP`Z|?hG%GcX>dY@BsrPN?|%|d%^rkrZQ-1%{AKOIs*vfEL%dpP;nxK5`(mc z5H4;&!U_cRUE!2Iw4)9Oi4H&lv=G)MfP$>-houzcJ0g*XT!?IkwLu67O12IHAwL!i zfLlz0buy9>;m7Yq7%1tD2#Eh4bFi zVDxn^@%{;1Vop5yod@~|oWdx~`~To<^Vp>{V;7jQyF|{+ZMJE~E^HQZl4MAAnA7gz zgs!~^%JRuzEK&sqy78)A*DN9*X z2}j=nakp|IT3KVpDEIQlNMv2@g=A_Vtcj+Oe6A4a7a*mw>wG&HEiedx2tWk1IlJ7F zIgwAutU)v})%3lQu&``<3Ggc&6S6a2IV8zK_+7l z#=!qog<(nap9-7VQOY8~DNTkTh9zwUTJ@ym$Zi~<5#iB*(IGE_R5zgJY-^D14`>w9 zzHFonUP6clq7QAurUYJxz)a+WKp;SC;1-`%Eg%Jw288sh&cP7iSR=CB0lpF_6Fa_0 z3LjEonC^eHt(IiEHZj^-#D{r{G(Ot{ghvH8G!uD2L2w;ovnC9o;pFg!kW5sSH$?S8Re2_MpiC2BttEO$e%mR^(JXOq}eAYj!3R_(FwPQ7#L8Try=&Ehx=bdryZAd|qC z#TYm;0jorE=LQr@vIRvz~;TNG)~O0b)4We4*uQ8I#CVhBIT9{h)D64hO(GAXv16V_)rVQuIlIAcg~nH7rY&EkW6M6rPvrnib<^89JAHgL=+Demb)~=%lQYi;17=$LhB$u*y zN7~In77Qad?G0{S319CYyd_kB+XtM|h|HEw&fSHh<016sq zy9hHmTS~M|Nz_iTt^q6(%p^N`Fg09&9Vq|>w*O#?Vk-z)l21WiM=bduiJcFb708MB z6821+2=**=lyF{=Y<@u~EF6Kz!6mr>6)`2j;t5E3bBKhSjf8HsBqN`+2ArQsgG-Q& z*jXJi1oc{0whz6Pod_pSiG611El}-;F#?*X@KLf|OHwqLO|b^#gv~o*6Wq>*R1!!j zF$hO+0y;^Pw*?Ge)(SXm_5pVLfbdui7wM7Cu(MS*H9O_X#%8CTvZ2{&ul(NZY^AJk zb~-5Qnw_nc-e|am8)#Ya3(a9!%gKP)_@UEbz{IdvC;xGaR|PUT~#8nwjdqF z4v^h|bu7j1-cwM5$n6SBn2AW?9Qs2++JsVg$UV9<-O3J>ldEz(%H|%34o_0gWcSU z@Cw#&SFZ-tAJf9(mn)+|<&9pDnVhVT-IJ)5bk#@rN9ANbLe#KR``;1fC^klS&6 z3=2T;*mE9E<)9VkA-eMdxdZ1hVLh!mj|J;-Q8OVCNaGs&8rz__P2f_x#8#;iUr2%8RL6?zcVllji54fex&c>v>0kypVlIA|u z;5KxI*DswxrbEsiCgD2`Ko%l^nF~7GhS->eMT{qlNF&+F9MWn`j*(EfQv<$b-}C1H zw!$0(=*$MdOl#*!zyT=!fr0Q!00)=C69y=7VJyOz&tvgOGX=xSm`upJFzJFQgJV5^ z$pp63Ae)~*5y2usLfA?$c?Kg1+QWzCA#}+_68_W4s3w6yB#;$#uq{SF)?98zAc07N zxW0*ygM>6WDb8j%W z!`w<)Nlpl1_0Ms8|MUN(p;`D~fkNDHa2UjGFt?LcD4`D;oh)F0SPv^LfntL6gw3oZ zsF&#*@dzFJ`Hx3QlyB>K%Gq^1xHX=LFXTLutA#z>9Y}<*VET^Te{+CME4b?rbQ(C- zEm!bg)CvaU#XRLBDhQC9X9Zei@Tm{Pl!$`CI3rJ~uZe)x1D!ri1e{>~5y6@Q3W5kQ zat~7&DT3t=L!dh#2uvuEAR`cnR(<23{KAP*)&al-=&zjjl*U`fdBQP0I4*WN>s4#>_1Wc(J-M`+fUnBxJC`hZ-^gXvM8DvxtC$+-}UKCiWfd z;c9tuq?s7Opqkk+U3&@`GB`^Lb6qwpl*kcfJ3u7(3^cP?^8*^j4UR#&unZyBm1-!RTug$@SXP8% zEhxE}oX3(DP^IVAE93?tuu7v8L9TL8Qy>@7!1)_e5m01cp(QUcH$j@hkjStJ#RRG- zw6g?Z65O`{=FjCiAV!AfgQkM)37G=KXI(JQ{w_CenF0qeAvd`poZNtB69p1IU$UP7 z6(H3V|EMP6o?!6`IdZj;3y71bj=`H$ffUF_bJb&`;apvFQvl@z1qcF&7-lx856C(H z2e34}gPxMrWQSwjGKJiPSkNFW4tbzI1R9Kiwg5>w!4!@D94zB`VDA%sGzqXP-t&fJ{Kk!BI2@yL(q`KTyCbBrr-t{7GXIwWKUdyxPpKK#>DHG~1QvgwX{*|X( z4TSMHYcO}eh%Z%1i&(o3u%rUPl$vxuInxdBQ>-k5D5b$_OBV_)PKGfKKGM8ImI1bM z?I>tm0pOq+gplfLY-bX~x~vsV;C0M^DJSt~!;Q zuqNdRCbD#ctlGi$Fll}^1MmSHq{j$$vtb|u0#=5i7Lxt|)=bzF`kItNW?C|YSotI> z2Qx+>WXpoyA>fdatjWZj$i0AznlsNDm%F<=xU7|Y=oBrM zq<|R;a^#R;PYTEf$kjb$yerw0BE*0?XoJFv7l2`n?f|z!7N;P4=aHoqYxP2qB7q>F zqlD+N(%j1iw_1|+&?5=qEhX>fD2pF$1F#jzt>7U7M!2bfR1Xfk z3t&l@X%8^K-Ky+G8Kmur2(5)&;{^#t5>cMlA}8uCxogB0Laj}KzO?|;LlCrN@nV_; z>4P{H43Uu_=uor}>>@PZw?Hht83Q5_6II%F(5uk;WXTWG7M?`HwHCnxSkajfBEg0% zv=>H@C6`c6E-r;Gh709DF2h<){iT_?@7XmgP~T=_*JMdXF#AUA6UC~`ken;! z(7{kYa2}VlTOjPZ0}6z#(&mYmEeIfhqKI&<1CPkqw3VBT#()z}bVC%oL2^e8Qa_DB z0wwXVw_gxAi2zo^>3~&2kST(`KBou38bJgh7pNsd5IJ#AUhrr^2N7)p=rEAY*^@&x zAPos5mm`qlH6Sk~(s@nZ8rFer#AO6__==PR)Q$+gV8(}i4|% ziJ{_94#(GUtxcrK9C=p4)l96^PKR`Uv-wq`KSwm`2=;JRP3>757f^Yy^8ly{R0GuZ zct7-4NiZ>GK~BcQ!kO$tgC;b)K4`81F#DiQ1#=SgwGwJU^5+o+N{|)-Z6Ss>NtJmm z_(Y=-ltV!P$lip`s(P{nfX8Yy5*<(;(P(6cIPSpQnoqh*DwB4^YWsx4VG(~W`0x@C)qG`Yfpp$^YTEJF= z+9VODh*^%5f|IALfRJd(ld-J9E>dH_TEI{3e_4{$R$64s#p%sB4JgTNcd*E%IVuld z!4X+GFfTB^fFc00tz!-CR>@`USlYK${58@Ej30YkYDxZo0C2&~q zY5_Aoyewc#1zu(_ox{t7GumhbQylnYob5(^&UT}ev)w4RV{JEzK(r1?v^m?2LSSgX z#|Lf(UKFr09C>05{8=Y~5Rf1Q(KNQ^Fp=~mA<3)>M?xm#EdhZ!8UaoSAR`!pt=OT= zeyXwl$eM6uwNKM>7RwAWboZ&xl8mk@forsGg79=&_aTX*=c|tDE;GZ~y zAB{tCabTUi`8(E1GJp+|Dx!y7;tLVv1v@V!XD|rKy*PuAgm(bC#0r(|?O^!9_Mg2C zXCe~zOW-dLMy>E)CL(P}*bfttcFiUt2@lQk1b|3T6bNp>h6syDV0K3+mjjR*T+&#I zq<+|PB|vhPBH>Hc)(B+8e$W1|0iMUg4qHcr9ROBOE+!I47%{pqTr@M1hG>wLG2wq8 z8*bPFqYW+(qVCJOT)TmS1?yrBNU|KKYM`VzIs`?4 z7?$vytdYD1At*`+$ks5dU9^Zw6-f3lLIYGG+bp&Gi3#WFfI9JM%zL*)O0fu!lny zPNXI<{t5MFm&vfUgo6|S50F3@Nx)6A*9VXcNeCDmfZKElUrE;CTnOB+%dQqYKyQT$ zk!HYEVQd=Mn}eyInDvwGAqrVQ{5iw}k_QRw4OmcN4GV^BNEvJ}9G>8WFZ1kW5Km4U zNkP;9N4yAjI$7z(JT9TIe4f1_B!ulhShr}l?@9jTN*7H+_6tbJeIbG`NYSt-42Lkd zqP2l_0&%f~OlxHSM!T6`WLtqp>O&0Ou+yMHb9X@?X;WaeNk@PWZfycy`KSK+snT3I zu*CmSBFuTv@+?EuOoX`(BFlQ{Qn{cx-+%Wg%*(7fni2tDhr3&r#Xi6U!hUg51P%!~ zEmbmklWjYKF8@1K>#9QEJm<5r;wiFLI5MgT>q2nN=O>O z2v&Menw)Ig!{`77NI(g;>xuRb$q!7<0y2Z_g7bhycJPQe4=l04BPAX<`bQ*3I$Tcy zsIWo?2uTFss}9>!aNLj_34-l#w!=uNY~@LZ0YLuH!2e$4Xb^X1g!KwLmm2q?+ZFqF!=Z^TM7^nRuir? z((zz#&de8wm)g0#5gc@TlN}0YV@ogo-T!8j=7| z^%0~V+W!Dn`97}DIl`}M=wFk zl`QrE%6}GnP=C#0k5%kqPX|L7X>Cs92FU)u7kQFv`voBsYz;`#0wS{_ljLm@QnF$* zQX-Su%40J!QZwWUDe~5t?d3@cDY5d_F<#&iQ<0gOu^CwjsVVZf$b_U=2z8~RW0SHv zlK(nHQ<}f!H03*zrYeOrRq_VhQ)o7#G6+#rwSrQP)0JH1sj22)6ORI46V=Gqyan*C z6jD?bJU8Ka2~Qn7Vl4`YJVm*}lbIbI9h;d+C8Xp;CMCqkBQr*4C_QBm1(aj_Zl ztkhI_W^!aw5~ScN#?_08PR+>3PRojok!NOQ#6~7l8L{cvv6)%&l+-MFLULMCEXgJ| z=10z%S&><>RB~)`YDT^sGE9w*{HY13?3Bcm)Z7$J?#c&Z$vD2e$@YuwOWPZ^$80y* zPPUD*^|BS)-mqC^6J=v>bH{qNwV(CdmJ3>XwY*`KVI{U&*21~PUP~{_BNjdu`^-C- zuQHRF6`MXc2{zejEHh3qsxq`O%#xijFf)kJ->&yf>MJdkRKdxS-nvsoCv^Baw054> zZsALTy&#M~mvFg?O^sQNxQ1Ut)lka!Qpp4@ z1CfqUA{FrU#9G?A`aDWkTOiaD@%TFbMWh&oqLZto)8-3rX z@2KObjq2y>Kwhr~k+?NC9;rzu6{mcu5~@t?K!MTO#z4NiLysO(2r;5E)Ni~>)?yo#?^l?Kk=Z5n zAH3D|dnNzvSWTB^#AZekqLLAjmXVMHlq4bss6|9TuK~a9>3@F(iL@yJr2`~UO!2ji z#8M%}ht|*)>If-;ROdG%DIp~&HiaN`s0$sC8Ih0@kr+7kHy8@h2`OpWS^lv}k@*B$ ze@U;bG?8>}tpD`l%Dx2?@=~G(1^RSqBeyg*(39wjbhNdE0zQwrbm82YlSlV&ni=1_ zb89OTeX+KX4-IZAxg@%OYX8PXQwvk0hV~1fJ>1$mwX(IcFg23tOT{8>_TwWvmrl)% z?B1@0m|CA3qUhKPGSC%L=`cyapR|=vXj19&z2_bq$h-B8En2wa)B|H@zhN0u)*QI_ zRBGuK7@0S3Yt{W0?R$h}Oj^0O`hlKVmyj{zm+h^7Y+%{mH!O4JrsMaFE$9I;d2==~ z*UW6)`i;(8xcST@Q)?IHn8F2Hj@Q_9>JynibN!)H zsxfUDFl0>O{LRO1wy^8s8=Adn+t~+J_R5H)aZ9&fdSKEbFgkt0lATqz?b|7WM`SGB zRsF==x@%Z%V3+xN9-deUl9me zh{i~_N|Ek1QJwC1w)|X3FV-AFxpNUNmFboHP`k3-q}0rH8W zJ$jdA68W z21)`Y4gkwZQ7*Kfqn?fAj@Vpx43zo~Al8F^Z-83m!h>{s!S~a}bx`;5(DGN=nmPb9 z9U=6dWUKTGl)D-7ged}ACkWDTFdWx?A$|e9X9DdOu0Kxykf?*sMA1?4264LhBJ|P= z@lfdo$k#@45n3b+zMCkzvb%g-(x^cL`t?WT+s4ts-qyxcDi-i4_2*Bo zUp%;ZhS|Ae_58_28F9n=_w?!9u2oADVOR0bJTPWhIH-$T zOP=v$ggQj~IXKum*u!6F4~Ne7S#bgW{yXFR{q2>5{0BN@%~&*TbLrs&H>Q-x)2A7emu}uP_0H{S>u#UEF=f-CF9)Y(9lU*TYD`R7Oq{*He~ka8Gk0%o z+PGwLe89RdTc%8#vh>#NY3ioNw{YPt)Uc`HRx8d?f5BVGhI~2JQ%oEUulElSv5r@J z!wiYzTg{e88zK4X^|pxCIv@eMU@Lj62NI_V+H>H4wfgl4gHf#GSg2*syTrAom%ZN_ zcwZ{+)y{JpI8GJyboCk!jtwcjJn8sLYW4R5WjFtrEifr_fAuh#kO_tSU;<%()jSH; zabn7(LkzD{4C!EkF43o`N_cAEDKVg^3-HLH>2=Hx6mei13fGnQ|wsJ{Eg(4@7yckr;p zg0cnc4pi6FiVfuM-TRM98#i;swu-ZNUW-gyyDR%er58_Kx@k}4#amJX`)(+BNK(#( z@{I@2+4tXy|&D*gHNCE#DXcy z{y2E@+5?HPO?yvBkUweBABRrgdMP!w?%>&TXiQ#d`TBh)Z@e%xZ`Hx0Z}^ykGJyB& zy*K)XE?rQcVTqZg3%49OcehqoX5Gf4=g`r)Q-L?x`^KPUN4j5R=D3+lH|;%k;r?5ZzKshVJTg@^Yvqp0^Y`Bw z+H|7(g(v2g&RMmcIeX`ozOjRgB4~J0{?sK~A^*2hBU=}rpy7!HQ~ZJww}e zT>?T!XH1w6^}qAR(5#iSSMZ3GqG?MvA30Z3D>ATm>mC}NIbkmJ$Hkg=da|~Dy#`05 zmP}c&cK^8t?+q=sgNcb_yG9Xem@Y^5`G1zXfUNT8KNty#`Y$R?l4Uq4AfPCB$Crgg#6-kdt zY^7)5i{^3&iQ|4p#f&jyoFn(nJg;?+0{IFu>>`^kJ}O=YrILKt zOV0e1&jzuB{uzLVz~?FXBCZ8^pFx`2(%aJYlDEy&$Udl#x+JZ z2}-hsI+7YC11z4B7=V$$TO{?A?9|_>zg21rX-I4!gy%rcByW;FMywC*H%UrbEeFac zdFx3@+1$@WtYuJZV6AsV&kQD!WALpT^apAAAy5Y!sIirajqzfsmO;8+q_n?ekY0fv znNrfB4kY%dSWi~1e;eAAluaOb0WsV|Aov3HXN;doZt887lJ+lwn)HXMiu?!^KH{sg ztFrbmolSz4bJY__1@I>QJOoPF0QuKKZOJsV7h1GGd>stG+0cpvU*mT+-_Fm>t}-8YPsrt6Vj>MywmWe`ZokF>*daTnP(XrW&E8^m{@7J)2o zlN?Bj7Z8#wd#HDmEscYmD)DQWw%0?6q^}7yHc;nUO&bOS&X5sT0{EnYmc9eMAFp>) z&zkKi(zaatoq-hnAsrc$XW(0Iq>{GgAPq5484ygg)|(Au;x<5+r=Jc?*+gK;OvD|< z56+%Cuz$yjC5tEJW~QekM@L2U^Y85D>e5bbYh@%BQ0nimo?bb1eBZ_mYZp!}Oo0)nTDj{nIYDf91ox8VfU$<-f@qH&M_xaO)K7rYT!g3}roVjY|Qc8K!MN-M< z#l*o}?qEM^UE+#^dk;>F^Yw$dp5n8P(SMDwMpHz^WJGw`d|LDA&oVcD*Ws{d5*td9E*@aEt`c%xy zPn358PJ%MzUwSpI;NX;mvZzV%`(pNQDT@j45AgG|pWwS8&ffuM=`wiR+xwMX`LbeK zV&agvnA=5Tr{s(-&6qSLVapgd`*qi5%sRL*e{`iiSN?_M-iOQTR!)gaS&}m(Ha8ZQ zZVnE9{;fu>i;DqKrrpM=+v8#e^7%1|dASaMTfpSs_zA=%Ebma`$T_}W^yGMlPk;4b z9p9fH7^uUhsXa7UpLM+3J={i%FcFV-#TY|~a<;2vp%(A~%Y;kdf3^BioIyD2xEg8^ z_?oyD1lgf$@MiM+w(E8f9G|E3Z09|VL{0E>^GiGiOhi^tw=PAXFrfL10dApC z^x-F_B;XfOy0F9-P{Ub1LPo_oZsCmrUSX6GJZ2QN3Z6>xm_uh-Ko~saFZ?ufW8eKH z50^d7dp-8k*@n)7GRb7)7|S^8-f};ubzSPde);_A<)zc7s{YrI zzSNlo)b+nM6r~Ix`MiSs-oledmH1N6SBR;n)W^G(e}Yh;7WkSNs@jKgrQ}-%QI!y1 zy(G?^y1J!gP&=xoa#hJFUr5nLrUM))B_91je{l6FkU)riO`a~0}MNf-w2{i z$om%mx=!7RZ3g6Rzi)unt@?Fh@+NQueC%M;?ol6o+qe>omhG*@w;}_L-Yom1{o2)7 z@@V#Y;hS~VeDVE6!GC21ahYU|PDDu_LmqmBt1i>IW1=s)} z_^U~4Z$NOk=}l#6fVmL3-iJ#S5)csV>>_cm|NQbyPd8`BR(7`5Ev;HuT9})e0_$%m zGtk!~z5GMQuqT@8>Cp~W4ce5lwu{97P`!as)dKLq9}t2Q>QLnx@{Y!tn4cJ#P2a8GiSoo z8B-T5Sh`^8stv0ql$6bwF=Ni0ISZD;-zxaquwmP_eU#{^L*f#Tej6}_-f#6sn2Vo+kXAh8m{-O7y9XZlj%D)+Ht8VO3%#6T&i~PwW_ZZ zcWYw6RMBkoz~a(;oo?TW<6}{Bieq_a_TN? z;8FE?-R^vBKUVm>zm`Ox!>4q`Lrb8Yc9OPgNl_j6VM9g?9}opi?e@Zr+xdycM#jgy#Z0BANWZ zLr87%LJ>Ww6Hdg3~KS?k$WAe!;>M z2`*;8hFo2f73$qiZUG5(K^`XHQ|}IEdAF4PjJx$uj!YWtZey$mGA~YIR`=@a!DS_* zL;boq+qEz?)Du%pb+68?%jw&}N+#Cf(x@Bj-rd2=atC>~HaB2JYU;-CU*6n5vu9CZ zRG)5btW6EbO!4*3nlas-TN+7qi9C%`uJVzr;n{j7uBxskRJ{4GN5}4|8-58H(7Rtm za><-k+p4RpYt$e^ttsm5-6L|wzUEKhy)AQ4ub}YEIoqmhAPM=~P?jDS8<&_ z4KO0A7u4)4iw*5JC^CK2hA&NI=!Uy}WWjD+4X6{@IyLB}2Pd zYEunwZyYR7>e!Mc$-UZ}i}{qgzV`kJi1D(MX~Puy z{nN8cf6h(m)4@_oX4J-SZ|@#oR}${i%1A_{7L9cuo?O^FHzml`N}o&`%AE+H8%LdY zqh60Qp*|lB6jOCq$2n_L^$-6TVkM-$zc@CYHW5VQ;@hjMdnOL* zXiS=<>EqpFE3*SyO9|Xf-(FsT$<)=1m1Z>6*WRg^pV-|&MoL#VegF9A6ae4NT2G7h zH+*?{l{9=iGcjRhl(k0*c;l%mFY4L&7SOjrQmXFS_;%29&$kUB;JrUH!9$-9J$85F z$W|hlOX{8<9j`PeaD0Dvc}=v70cnTtAMYQU&>K`Oz}@iq>FE^-o)#=XjbC3~+fzEQ zy)nlyL02DNnbyOBZ5$Xv(3(3ZkLYG4;aIK4hIe<5t;h~?Hevm^ zmmVQQBjWx`tA3p?V^hd{`I}Tx30ax+Z|B<-66K@l(LEw`Sl|2e_if8xK+~m$=tBKv7(vZxw?4(SV zV*VHAKL6}xWu|73E#d#B31ZXyHe4a^16(^y80@3wsrgO(CP5>3!3iD#cyyX{*!h$X z6bBMQ6q}m+=AW-AN(~qW(Nr@73wz9D)0qcZHt`$zg2o0xgHZTgtNy!oowkMe}QNFTkhy64@{~8OW{f>jxBu>goi-1l2W?YA? zG!Z`!f#0Anv{?7ll&p-@Bo{iRdwgU{N^DYQuVx(svJK7dV*hWc+P$ zuiAhxp!xvID-gsUCW{=3GSxiPl40Ct863cXSTx&_ODBSOl1>6oC4}vC0%jbZ5*Rro zpUSr29|4Q82+*;BhjON<$$+`?0C4xDsM&$=20Z3NY9Z|8YEwF}$PJdsgbfVtsq}Jpagw(%(QN(Z zq>LUhIHXU2(z{E?Hn!#lq=Hm&Zd!cAu+ZQ@KcB80o#d8=QUIw;m6tI(a`+%Fv~4SE zbD5Yod&>C2^u*YRp#y>fd_5s&yA}q#MRTT>7G$R;M1>Cy>D^t?ty4P(6W*GoYIgIix=U+Qpn<3s)qIY`>oV9#h z?|Ay`rE`5+u3h1C@x$LfO=a(WmTr+Lw6-}bN{fmH*TIBBxTn=rXr)F>Dhau^sQ7$8FU0VDJJG9}UW?FCre7xure zP?A#~YWQ|0JY$+vXkG*4TMuP?figa*kn3A`KL`Iq2)_gIS5zqRtP0Kg3(7mBLKQny z=;S&TvIdwdr>oFTl?uI1SD~C}73wokg;M-g=$^X@EwNXjwK5f|Z!AX3UlyYo*NV}Z zqs3_O)?(CQK`{zd6{8cQi&0s>VpQI>7`_YS^sSw=`EJRigh3Jo_0yODH0ouE(0J%;r zKn;-v$lS94jW;MjiYH@H;GwZ-&CIc=Zxpz@j78--W0C94d}O^jABBz0M=yHiqbiGh zRQEIw73|GJ!Q=8!X5T#Y(jpJ-ew2%@=zMHer!sKk^=bDX_AF@#So-E{@m4&)>&O(zuW}^1HGm&FjCdzTiL@i!sAd?Ll zC?+xkiCbnMt!wFM$Slw@2uw$6bs8G9KMnCy(vY@88j8A^icDvwBDr5GD*c>-(54g= z8kT}8B`K)vNHSWVl#HxfCZl(!laN(@5?bw;gi0gFYw6pexcCWV9t3?Fx(r{EtGi@loiabrkw|AQI(KNornxa!#)j1{mX`7d?sdMQv^(^rSaJR!3-b zwmpr$E>oc8QUziPd{FpHZVP8s9MB)jTcM(F_UQfqdvt!Q9qOxXhlWSU(YO7!sI|-%JsfR=T(LEhnOUQ8 zNi9+7F)P%7%AJJtStNXpdNm>IX~E{WW3~{Z<#1 zdFrBGr6RQToDSMyp@RlSX``iEw9tf4LSBE>`jGN|UGG7~;pJ)DOk*HCEIMK!%~ zL=&z5qJch^`JFz|SVvn;`bHl$_(~sI_?gzW{X}nC|AAi7?mhi_=R0~%m$&rngRkl5 zKCkE{_yzrk@;Pn#*Hij__b0UI_#=8w_lI=hu^PI{_dcD++@+^`-=Vb++@hbl-=sV2 zxK7`1dyTGJdxb8tzD%bqxJaMXzd$c6J4at?JWCg4ouL=MJViT=s-oLmJwdPR^*24W z;xGEO>oNMo+Dh8e4AW01RnRVVhw1kThiJE32k7^`_R}2?{z<=e+Dms_u$%rM*hPD$ z@1TYEw$X!oZ>2l#+f2{4`-2`keIxzu%X<3VsC9JV={591_tmuTvX%5$;R@P6X&Jrx z@)CNE*J9di^+MWJX94{nshn*Raw3z;5V*&lw=sdckQ#SqfNjfcDmqKSoCel7O@pRO!82b7A zNcw!pNV9=n^+Cdi&F^ z^oS+y^o+i)v>)X{7wv9K`^7lYb4**&DJN{{+c_=iTaK1=@-(L^J9cxMCp&_fBm zf3}DoNNdsMuXuE=YokJY>K8@&!*>dIuNR7ba~>+rKfA5?Q*l)xn0HQ5`Rt_PgZELz zvRQ`|e?8ozNb0gpv2@Y~#h{xj6)T+=D~b!|D!!bVrjWFpsF-xUP!W)msu*DsrMR|h zpyFU~PlfE2r{YOjdxfvPt)hK}po`sR_E z1)q*|+ND!5&&;%9dVzg~aZSex8-GQ``i;FSmWzj0G$qAWFy}HVUYeIwSXGr(yvdzW z5$;r85q)h*MPupe3P<-%6*p_PR~XLxv*NVZk&33L$0|0@JylVqxKJ_h`L&APbMIEH z^L|`0;_=IhjOp(y?z(@gSaPeWVn8LIX)w}eddBK9Zu_OoA(4!^JIt6_wAqY#S#QZ) z=xxpPTq0+JU$kN#baP^;GG}JPWf$hMyc07axij!Dw(h+{!DF$ zK&CFY50h0H%#08XVD|JI#AGfQ$}GDxoN=~~V5~+*G09tE8QXX9OnbK^raUW^8MrTl z8S^!px!f(EnUPz_EZC=Fvd4~NdRR_i4(=~yE(|JTCV!m7JeWO&x#cpANjp8ASr<2x z$>Psu?k}IiJocE!jJsUU>`Pw2jMG`fJY2Pyx$e1?iMX_k$se=ks&S-)R>Zzi$^A7u98Eg4R{0`?PCJvg`(D>gNn)`;u{3_KI0!@rD^&{+8KdP|LVaea{#PKQaMD zpP2KXKQo(?zcM!;e`AIYuV>m^{Lb_YXk`98)Wmq0Q~2-&3O}C0!@K?Xxb=5F_TD4F zU&aV=sJ#{ry{Uyi&(g*o0Xo>aK?kqdCBi4;bn$d6F|Iu?#vdn0@VstPeDS3eZ(Xj3 z9YXZ62j2ic-(!H?VrAIE%n&a;VTgC;7~yC~W4!&UF`iRug7w@@vF!s>Ts6}Si+s%S z-RI^waJ~f&R9fOYuPw1~Q43t@XN3*kSmD|QEpfE3HI9E_jhp7!;MQKY_|5}c+-iy( z*LSqT5!dYSfI@qG#jX{8bfOhjB|6}Z2CZ@Up4NEzU`HHZ=ZNuAC%j70221X@!D>}o zTqJkK6Dpmt;iz`lN!<<~U)~-+_jbW^Z@S>WaysCAwPHVf#AQ|@%dJueVGUT+tm{}z5!w1slGVWT#0MeD)Hlv zet6VjKO7p+9WxiY;}v24_{$@Id@QL4*81E7A1MsL&jmg4l&L-Oa#xm7>;uvjvuZbj{h^Oi}oY&kOd=goq8lz$4B7!ixJq}a}J!rBC*${NL<@B z3X7IT;gY5(JS;LA&;2VJw{IPTTbIS);-@jVTR@an@U_^>DycNmn4zpYBeR{H|$u zbV(YXeJTwb7^UNU6yDSvpR4$-t{JGO*+R49xqUf!*j#e4r!~mmkZ-#|2rq zmwy(vFU`Use`VoIyllJ)W#dbQ**N52Hn#hmjeEG};EFLhc=Ea&yy0#RHZ#k`H~Z$| zccr;_$l+XU_&yg~JLciBVR_hjW*%;LG!GYj%)@rA^Re0Bd>meuk3amGk8eHB$416u z@e<#$I5T-HUcPuNHv4-lzW;74{$^Q#BfA&i7D)xzzPtdBJzRk04-2rls1S#{6ynZsE-u1z_Z8vGmx^%I+aio~ zi*Z7$V*J3T7;hX@j1MIjW2=e9_|(#3e0*0i);n2@*W50~6WI zp~5+VD(o~=g&jt#a7wlcYfVt$=d)DUa+wOx->AY7yHz;rhzei-TZJc{Q{i#fRJiJ{ z3XgcK!itwFJm#GWKl-S`e|%Np!}ai8qY58y0=HU)>tXHd32Wa!>R`ZJwV9?uPH8F>Hb8}NClwm1uR^V#!@3<8qwsmfs4AuyCAb$OrMd|9 zt13bZW)>ln0Y&JH5v)}&6ryL-3Q=GGLiDb#099`-Krg}zP{g68c`Mm(crbTuUj8JMy@#UqgDXgFH+bT~S%I~*-?4nyAqhoQ!pp=f3C5cFjJV02;g zAQW9O5Us8bMbmE&Ku*v4qwLxcl>fCK>f8{Fwlwuc_nU&ym4-fO`nTRl{Gk^b@FEb! z-s_2aUJO9rkM=;NJN?m1vhEux~ufM*O%z(yXWa0XV20D4xXa%+7oosw7+PJj7r*Ua0N|y9HMK?_tO=h z_t2{^?xg2$*+#FKu$ewTY$NT|VI94jT21F)Tux71wS>N(ypW#dSx&DK%%NMHok45O zn@T4RokS0ASxQ&mE1~zH0$PT%=)>MA^r=5b(|uhc>0xWaXtl{ey8pz!bo9pnIv~QA z);r}%pLTVpXD?_^XVkZ*$A{a}myTG_IaWrrDo;Z5t_W%C@CHSO-aAFxBM%gD@mCbV zMkf`bLkATHBDN|@1uGSE*UwSt1e7X_PA4nIYK1E1&>o6)+184N&3wh_it|2$TP^X4 z)bHi<_r}BCim`(a=?1(%Y;-sJNXXQUN0bhCk31ToThXeGL&btxy5hsWVHGdOW>vIU zF{#3@vAm)xY)wVkz8w`qWEB-=@uw@6R$Q<6OZKE9A@V~-><)EB?;>p`-cFCH|I3(p z6Vrm}Ahct)u6ANV6&)Da_0G(t6mO&Y`#GLQDh3S>Oow>DS7n8^AWvpuUGl$fNm_F7FbJF7|(|W*hW_ZF$CbIZ6 z<2t9BIkNf!L+!lGygz)6ne_Kf2DFWtaTkGCy!?>);`NIBn7_jV>s`zi2}C>r-GLHNZ|UmX9Z z5}!Ehhj|aXWAo4cSfCw%kDK(wgY5$GzIMIv1NYweif11@LlJ~^QD5v&2V;eIKU~`- z1c!C#kMkV{;NBLY__Xdo{Po*FeD290-1ov@oOWOc?zUnmUN&wRUKJIFY2|R7Z5@u4 zU&Ha5b0cv1+L72KCj#3CjKYVEBk|39kyy1c3jdKDjR$rD-sD3JcH9+ zx4WZp$=rBc;Gck>e@wuCtr~-+eG+lyheUjDVG@q!zA+>+*1$@O*spa6YcK7>oItV{!iJvACmc0d`0)z(Xqw@F{5_&KX>Y zBbFE9@ec}djeQZ$jV!`FmlxrF*NX5=X)zZ17UP|1#dz+DV*JOcV*L4iG0rwu;kI5X zEDKZNcDX8?H%EoPZBpUQ6)HUIyb7>SH zLWQeTXnv9k<-4d*`$xrS*NkE$aVbXVXb~FFy9fnV6{0rYh3M;=0#ujH?1s;f?^*VWvM)#`vLgoqW;jFAA8KypdnLC)#Gx z4ap9623fxwYWuPyGR<{Cu?^0s%h)z(b!}^OBBB+lJSj(8+t{E###^B)S1nL)do$!5 zZ;a+`l%aJsdZ@ryf;@dis4-3pJ)6WwE&*zKczPYZaLz~CVdERR$L?pe&z=W#(B|79 zzq(4FDmYIwgHO@-+x$hReK$a2N^#p4x6w)RuRwrrtTEI#GqywTg|Xx_C$F8=99hFpJiBxsydMY+L<3e(5vRXpmi!*pC^!hF4M$E=riWHu;$n3yrWn7&g7Gu5l2nUHO1 zOphH!j9%zOW<}LBM$cm|W3+k^6DL^7;F0T@8@snK3F=);JO2aBjS_}&{_{9xV~U2?cXso#Gjd^&+3`W;S~1p72w;}+IZ<_5e_>k!C&X< z4FDs?uH+I_r$$>_~4W>8vh^mzB??cSJdj&+ruGmWu z5fuv}Ma8yYib+gjj3qI~l47D!6MKom6??(nKva5{-uv&IWick=H+kRZ`_J!r-qjDg z_ujcPXU;jFnYriQJLAg^W;a&Db(}#6n>b(?`)pJwyJ-4IRx5lodwlv>RyKM(`|W@* z_PG8eHm-6qd*zR*?6!5&*?WF7**RsiSidjB*}<+6?EDLJ*zZE;vUjdWu@%z!Y{C8o z>@UKFti$X@?8HNhS&OPA>?*sZ?9>Ud?7@U(?EKH-Sow~4wq$1lyKPG%yDoV-yM4|I zXaiTW?))Tn_q8O}VBIQqtJ7*${U(g{!`HBn%hs@l(Q8@Ri?!_Fq3c-FpVqM%P3zdv zGCBL*Dmi=Vpq$-tU(N==VzZ3YRgpM`M^)kHyTFA4N0n$LBF&rz4pUw!nRY;j@^K zC({@e*<{8!c>)u)YYg+=_7P0RqM^(}^B|`6Hz_mN+@Dcj;>~z|=gw?6)Q_pyZO1SP zmdp}Y6DH!8gi#->#Vj~0Vit*cjN4~jvKNo)WVLn0GI{AU+0Uo%$UdHPQ8uRHq^#e> z1G4dZzLRy{*(6(1v|e`S#v<9AJ>z8_<9uZgb4_KnlQ^H2X1eX*$*)rG3KNlIDGP zPuk-(htj;%&ZZf!zLGZM+WoZKRWH)URhOk*yV{uce4>Biigddjs~5 z6jSz_bSqX;WY3PMaAqez^k8Rv=fl1qGLY@OEn_>pgW2;*!`QVuN3tL67|UA3hq2!~ zOkpEWO=qu~zsGvaj$k!c&1Ewe&1VHZ3t5ZDi`fGsm$JU!EMw>V5zpQ@n#k&}TfsJ& zC$UyrSHU&hYIa)N8n&%`EvxbSIyPaboYg!kXYW+W+3vr66nD$vkCWox1TulFCO?tu zj8389bRJzydyn*f_oV0#$MIh{{EMS2={ov8-2F`cf{M>@9R>gL~tE&0Dwc*tzG&pAQ`R?dWkE)Bb^DrbRA_TeI&`gUy_X7a+-8^76i^xTy@PhJ*Rwi#LY zj+_ylnEdHi-+sUUw-aa6uHSq5vZ$h_v0KYFa9T|AmwOJMy?i$-zr3zZ>@;G2^4Evh z`+2q9Lg%qDpZ@sA-GU}HhhdSczx?Uc)hC6uokExK%f8ru;Ymfep#OCFUiNu2-z)s1 zUvHHQ+^4MGdFD|i-#g-y-|p4${1<+Gp@cVR>F%5LJm2|S&gJp~mVJMxg&Vl)_grqU z{8V|bBf-;`iVr@=eD>_wW5@P?B(>|^Sp%QDckf=kdiu*CM@)eqNOd+nJ^l3QL!S<| z#}xR1RChBnGSbseYzlJ36!?Ku_`#Hc4wwQzkSgQGjT`6BANf4Uu_r;#--{P7o;h=P zW1s`3zz?LlarNrebLW2lEXa`rUi^xR&pOQ}7l@7v z7626->BrQOd`wEoaJrukhj;!}=>mEkUI~pQ_lO7ml6sIY!Q;o#BXk@&LbPZsy+;k< zS(r@XN57$dzQ%x$ykTWteN=18Pe?AcbTI{fQ0%ZgJ^cdYP(` z#Uz8c(9fs~`HZ|Gqv#aQ8o%Rx*vArPIh+VnmZ@7UhvBa)sE@52+pbkQ9*+x{rpCeS}A&=oP9?mXO=T zm3~fL$>*e!jE4CXMw7!Zf&UVEn@UI`c}#rhHtIvRkw!9!o}`n=Ng|<%^f5IfYhh9a zDcwb-WEbfqvuG-vMN)|w%*ybBa>yKVkyz99)S9d(`6P(`K!eB+@C4l)dJ*O}SV(S? ze)Ln?k9=x{wv#3@nVzDP$tj{wm(wTIoUDV! zSw?qL8QBff*Sts5=zAoMm_w`hlB$qMa*5bL`)EVnCj}&!{z!w#k3@w=(o0lK7Li-T znQo-cWFx5{Bk4gpk{l#rx`^JQx+I=FBwln2^&(qfUW+h#oQ9F(M3=_XhtvdG|7