v86 0.5.246 → 0.5.254

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,38 +9,38 @@ a:this.view[c]&~a};ra.prototype.get=function(a){return this.view[a>>3]>>(a&7)&1}
9
9
  c.done(new Uint8Array(f))}else d=await a.readFile(b,{encoding:c.as_json?"utf-8":null}),d=c.as_json?JSON.parse(d):(new Uint8Array(d)).buffer,c.done(d)};ua=async function(b){a||(a=await import("node:fs/promises"));return(await a.stat(b)).size}}else ta=async function(a,b,c){function d(){const m=c||0;setTimeout(()=>{ta(a,b,m+1)},1E3*([1,1,2,3,5,8,13,21][m]||34))}var e=new XMLHttpRequest;e.open(b.method||"get",a,!0);e.responseType=b.as_json?"json":"arraybuffer";if(b.headers)for(var f=Object.keys(b.headers),
10
10
  g=0;g<f.length;g++){var k=f[g];e.setRequestHeader(k,b.headers[k])}b.range&&(f=b.range.start,e.setRequestHeader("Range","bytes="+f+"-"+(f+b.range.length-1)),e.setRequestHeader("X-Accept-Encoding","identity"),e.onreadystatechange=function(){200===e.status&&(console.error("Server sent full file in response to ranged request, aborting",{filename:a}),e.abort())});e.onload=function(){if(4===e.readyState)if(200!==e.status&&206!==e.status)console.error("Loading the image "+a+" failed (status %d)",e.status),
11
11
  500<=e.status&&600>e.status&&d();else if(e.response){if(b.range){const m=e.getResponseHeader("Content-Encoding");m&&"identity"!==m&&console.error("Server sent Content-Encoding in response to ranged request",{filename:a,enc:m})}b.done&&b.done(e.response,e)}};e.onerror=function(m){console.error("Loading the image "+a+" failed",m);d()};b.progress&&(e.onprogress=function(m){b.progress(m)});e.send(null)},ua=async function(a){return new Promise((b,c)=>{ta(a,{done:(d,e)=>{d=e.getResponseHeader("Content-Range")||
12
- "";(e=d.match(/\/(\d+)\s*$/))?b(+e[1]):c(Error("`Range: bytes=...` header not supported (Got `"+d+"`)"))},headers:{Range:"bytes=0-0","X-Accept-Encoding":"identity"}})})};function va(a,b,c){return String.fromCharCode(...(new Uint8Array(a.buffer,b>>>0,c>>>0)))}var xa=-15786961;const B=function(){const a=aa.reduce(function(d,e){d[e[0]]=e[1];return d},{});var b="",c=0;return function(d,e){e=e||1;if(e&xa){d="["+ca(a[e]||"",4)+"] "+d;if(d===b&&(c++,2048>c))return;e=new Date;e=da(e.getHours(),2)+":"+da(e.getMinutes(),
13
- 2)+":"+da(e.getSeconds(),2)+"+"+da(e.getMilliseconds(),3)+" ";c&&(1===c?console.log(e+b):console.log("Previous message repeated "+c+" times"),c=0);console.log(e+d);b=d}}}();function l(a,b){if(!a){debugger;console.trace();if(b)throw"Assert failed: "+b;throw"Assert failed";}}function ya(a,b){function c(y){y=y.toString(16);return"#"+"0".repeat(6-y.length)+y}function d(y){var w=256*pa,G=8*T,M=Va?Va.canvas:null;M&&M.width===w&&M.height===G||(M?(M.width=w,M.height=G):(M=new OffscreenCanvas(w,G),Va=M.getContext("2d")),
14
- Kb=Va.createImageData(w,G));const S=Kb.data;let R=0,U;G=Lb?function(ba){U=U||ba;S[R+3]=ba;S[R+7]=ba;R+=8}:function(ba){U=U||ba;S[R+3]=ba;R+=4};M=32-T;const la=w*(T-1)*4;w=4*(pa-w*T);const ja=1020*pa;for(let ba=0,sa=0;2048>ba;++ba,sa+=M,R+=w){const Ha=ba%256;ba&&!Ha&&(R+=la);U=!1;for(let Ma=0;Ma<T;++Ma,++sa,R+=ja){const Na=y[sa];for(let wa=128;0<wa;wa>>=1)G(Na&wa?255:0);Mb&&G(Nb&&192<=Ha&&223>=Ha&&Na&1?255:0)}fc[ba]=U?1:0}Va.putImageData(Kb,0,0)}function e(y,w,G,M){if(w&&G){y.style.width="";y.style.height=
15
- "";M&&(y.style.transform="");var S=y.getBoundingClientRect();M?y.style.transform=(1===w?"":" scaleX("+w+")")+(1===G?"":" scaleY("+G+")"):(0===w%1&&0===G%1?(g.style.imageRendering="crisp-edges",g.style.imageRendering="pixelated",g.style["-ms-interpolation-mode"]="nearest-neighbor"):(g.style.imageRendering="",g.style["-ms-interpolation-mode"]=""),M=window.devicePixelRatio||1,0!==M%1&&(w/=M,G/=M));1!==w&&(y.style.width=S.width*w+"px");1!==G&&(y.style.height=S.height*G+"px")}}const f=a.container;this.screen_fill_buffer=
16
- b;console.assert(f,"options.container must be provided");this.FLAG_BLINKING=1;this.FLAG_FONT_PAGE_B=2;var g=f.getElementsByTagName("canvas")[0],k=g.getContext("2d",{alpha:!1}),m=f.getElementsByTagName("div")[0],p=document.createElement("div"),q,r,v=void 0!==a.scale?a.scale:1,t=void 0!==a.scale?a.scale:1,z=1,A,u,E,F,x,N,V,Va,Kb,fc=new Int8Array(2048),T,pa,Mb,Lb,Nb,Ob=0,Pb=0,sb,gc=0,tb,Qb,ub,Rb=[],ib=Rb,vb=0,Sb=!1;this.init=function(){const y=new Uint16Array([32,9786,9787,9829,9830,9827,9824,8226,9688,
17
- 9675,9689,9794,9792,9834,9835,9788,9658,9668,8597,8252,182,167,9644,8616,8593,8595,8594,8592,8735,8596,9650,9660]),w=new Uint16Array([8962,199,252,233,226,228,224,229,231,234,235,232,239,238,236,196,197,201,230,198,244,246,242,251,249,255,214,220,162,163,165,8359,402,225,237,243,250,241,209,170,186,191,8976,172,189,188,161,171,187,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,
18
- 9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,945,223,915,960,931,963,181,964,934,920,937,948,8734,966,949,8745,8801,177,8805,8804,8992,8993,247,8776,176,8729,183,8730,8319,178,9632,160]);for(var G=0,M;256>G;G++)M=126<G?w[G-127]:32>G?y[G]:G,Rb.push(String.fromCharCode(M));p.classList.add("cursor");p.style.position="absolute";p.style.backgroundColor="#ccc";p.style.width="7px";p.style.display="inline-block";this.set_mode(!1);this.set_size_text(80,25);2===u&&this.set_size_graphical(720,
19
- 400,720,400);this.set_scale(v,t);this.timer()};this.make_screenshot=function(){const y=new Image;if(1===u||2===u)y.src=g.toDataURL("image/png");else{const w=[9,16],G=document.createElement("canvas");G.width=F*w[0];G.height=x*w[1];const M=G.getContext("2d");M.imageSmoothingEnabled=!1;M.font=window.getComputedStyle(m).font;M.textBaseline="top";for(let S=0;S<x;S++)for(let R=0;R<F;R++){const U=4*(S*F+R),la=E[U+0],ja=E[U+3];M.fillStyle=c(E[U+2]);M.fillRect(R*w[0],S*w[1],w[0],w[1]);M.fillStyle=c(ja);M.fillText(ib[la],
20
- R*w[0],S*w[1])}"none"!==p.style.display&&q<x&&r<F&&(M.fillStyle=p.style.backgroundColor,M.fillRect(r*w[0],q*w[1]+parseInt(p.style.marginTop,10),parseInt(p.style.width,10),parseInt(p.style.height,10)));y.src=G.toDataURL("image/png")}return y};this.put_char=function(y,w,G,M,S,R){l(0<=y&&y<x);l(0<=w&&w<F);l(0<=G&&256>G);w=4*(y*F+w);E[w+0]=G;E[w+1]=M;E[w+2]=S;E[w+3]=R;A[y]=1};this.timer=function(){vb=requestAnimationFrame(()=>this.update_screen())};this.update_screen=function(){Sb||(0===u?this.update_text():
21
- 1===u?this.update_graphical():this.update_graphical_text());this.timer()};this.update_text=function(){for(var y=0;y<x;y++)A[y]&&(this.text_update_row(y),A[y]=0)};this.update_graphical=function(){this.screen_fill_buffer()};this.update_graphical_text=function(){if(N){var y=performance.now();if(266<y-gc){sb=!sb;ub&&(A[q]=1);var w=4*F;for(let la=0,ja=0;la<x;++la)if(A[la])ja+=w;else for(var G=0;G<F;++G,ja+=4)if(E[ja+1]&1){A[la]=1;ja+=w-4*G;break}gc=y}y=Va.canvas;w=V.canvas;G=4*F;const S=F*pa,R=T;let U=
22
- 0;for(let la=0,ja=0,ba=0;la<x;++la,ja+=T){if(!A[la]){ba+=G;continue}++U;V.clearRect(0,R,S,T);let sa,Ha,Ma,Na;for(let wa=0;wa<S;wa+=pa,ba+=4){const hc=E[ba+0];var M=E[ba+1];const ic=E[ba+2],jc=E[ba+3],kc=M&2?Pb:Ob;M=(!(M&1)||sb)&&fc[(kc<<8)+hc];Ma!==ic&&(void 0!==Ma&&(N.fillStyle=c(Ma),N.fillRect(Na,ja,wa-Na,T)),Ma=ic,Na=wa);sa!==jc&&(void 0!==sa&&(V.fillStyle=c(sa),V.fillRect(Ha,0,wa-Ha,T)),sa=jc,Ha=wa);M&&V.drawImage(y,hc*pa,kc*T,pa,T,wa,R,pa,T)}V.fillStyle=c(sa);V.fillRect(Ha,0,S-Ha,T);V.globalCompositeOperation=
23
- "destination-in";V.drawImage(w,0,R,S,T,0,0,S,T);V.globalCompositeOperation="source-over";N.fillStyle=c(Ma);N.fillRect(Na,ja,S-Na,T);N.drawImage(w,0,0,S,T,0,ja,S,T)}U&&(sb&&ub&&A[q]&&(N.fillStyle=c(E[4*(q*F+r)+3]),N.fillRect(r*pa,q*T+tb,pa,Qb-tb+1)),A.fill(0));U&&k.drawImage(N.canvas,0,0)}};this.destroy=function(){vb&&(cancelAnimationFrame(vb),vb=0)};this.pause=function(){Sb=!0;p.classList.remove("blinking-cursor")};this.continue=function(){Sb=!1;p.classList.add("blinking-cursor")};this.set_mode=function(y){u=
24
- y?1:a.use_graphical_text?2:0;0===u?(m.style.display="block",g.style.display="none"):(m.style.display="none",g.style.display="block",2===u&&A&&A.fill(1))};this.set_font_bitmap=function(y,w,G,M,S,R){const U=G?16:w?9:8;if(T!==y||pa!==U||Mb!==w||Lb!==G||Nb!==M||R)R=pa!==U||T!==y,T=y,pa=U,Mb=w,Lb=G,Nb=M,2===u&&(d(S),A.fill(1),R&&this.set_size_graphical_text())};this.set_font_page=function(y,w){if(Ob!==y||Pb!==w)Ob=y,Pb=w,A.fill(1)};this.clear_screen=function(){k.fillStyle="#000";k.fillRect(0,0,g.width,
25
- g.height)};this.set_size_graphical_text=function(){if(Va){var y=pa*F,w=T*x,G=2*T;N&&N.canvas.width===y&&N.canvas.height===w&&V.canvas.height===G||(N?(N.canvas.width=y,N.canvas.height=w,V.canvas.width=y,V.canvas.height=G):(N=(new OffscreenCanvas(y,w)).getContext("2d",{alpha:!1}),V=(new OffscreenCanvas(y,G)).getContext("2d")),this.set_size_graphical(y,w,y,w),A.fill(1))}};this.set_size_text=function(y,w){if(y!==F||w!==x)if(A=new Int8Array(w),E=new Int32Array(y*w*4),F=y,x=w,0===u){for(;m.childNodes.length>
26
- w;)m.removeChild(m.firstChild);for(;m.childNodes.length<w;)m.appendChild(document.createElement("div"));for(y=0;y<w;y++)this.text_update_row(y);e(m,v,t,!0)}else 2===u&&this.set_size_graphical_text()};this.set_size_graphical=function(y,w){g.style.display="block";g.width=y;g.height=w;k.imageSmoothingEnabled=!1;z=640>=y&&2*y<window.innerWidth*window.devicePixelRatio&&2*w<window.innerHeight*window.devicePixelRatio?2:1;e(g,v*z,t*z,!1)};this.set_charmap=function(y){ib=y||Rb};this.set_scale=function(y,w){v=
27
- y;t=w;e(m,v,t,!0);e(g,v*z,t*z,!1)};this.update_cursor_scanline=function(y,w,G){if(y!==tb||w!==Qb||G!==ub)0===u?G?(p.style.display="inline",p.style.height=w-y+"px",p.style.marginTop=y+"px"):p.style.display="none":2===u&&q<x&&(A[q]=1),tb=y,Qb=w,ub=G};this.update_cursor=function(y,w){if(y!==q||w!==r)y<x&&(A[y]=1),q<x&&(A[q]=1),q=y,r=w};this.text_update_row=function(y){var w=4*y*F,G;var M=m.childNodes[y];var S=document.createElement("div");for(var R=0;R<F;){var U=document.createElement("span");var la=
28
- E[w+1]&1;var ja=E[w+2];var ba=E[w+3];la&&U.classList.add("blink");U.style.backgroundColor=c(ja);U.style.color=c(ba);for(G="";R<F&&(E[w+1]&1)===la&&E[w+2]===ja&&E[w+3]===ba;){var sa=E[w+0];G+=ib[sa];l(ib[sa]);R++;w+=4;if(y===q)if(R===r)break;else if(R===r+1){p.style.backgroundColor=U.style.color;S.appendChild(p);break}}U.textContent=G;S.appendChild(U)}M.parentNode.replaceChild(S,M)};this.update_buffer=function(y){for(const w of y)k.putImageData(w.image_data,w.screen_x-w.buffer_x,w.screen_y-w.buffer_y,
29
- w.buffer_x,w.buffer_y,w.buffer_width,w.buffer_height)};this.get_text_screen=function(){for(var y=[],w=0;w<x;w++)y.push(this.get_text_row(w));return y};this.get_text_row=function(y){let w="";for(let G=0;G<F;G++)w+=ib[E[4*(y*F+G)]];return w};this.init()}function za(a){l(a instanceof ArrayBuffer);this.buffer=a;this.byteLength=a.byteLength;this.onprogress=this.onload=void 0}za.prototype.load=function(){this.onload&&this.onload({buffer:this.buffer})};za.prototype.get=function(a,b,c){l(a+b<=this.byteLength);
30
- c(new Uint8Array(this.buffer,a,b))};za.prototype.set=function(a,b,c){l(a+b.byteLength<=this.byteLength);(new Uint8Array(this.buffer,a,b.byteLength)).set(b);c()};za.prototype.get_buffer=function(a){a(this.buffer)};za.prototype.get_state=function(){const a=[];a[0]=this.byteLength;a[1]=new Uint8Array(this.buffer);return a};za.prototype.set_state=function(a){this.byteLength=a[0];this.buffer=a[1].slice().buffer};function Aa(a,b,c){this.filename=a;this.byteLength=b;this.block_cache=new Map;this.block_cache_is_write=
31
- new Set;this.fixed_chunk_size=c;this.cache_reads=!!c;this.onprogress=this.onload=void 0}Aa.prototype.load=async function(){void 0===this.byteLength&&(this.byteLength=await ua(this.filename));this.onload&&this.onload(Object.create(null))};Aa.prototype.get_from_cache=function(a,b){var c=b/256;a/=256;for(var d=0;d<c;d++)if(!this.block_cache.get(a+d))return;if(1===c)return this.block_cache.get(a);b=new Uint8Array(b);for(d=0;d<c;d++)b.set(this.block_cache.get(a+d),256*d);return b};Aa.prototype.get=function(a,
32
- b,c){l(a+b<=this.byteLength);l(0===a%256);l(0===b%256);l(b);var d=this.get_from_cache(a,b);if(d)c(d);else{var e=a,f=b;this.fixed_chunk_size&&(e=a-a%this.fixed_chunk_size,f=Math.ceil((a-e+b)/this.fixed_chunk_size)*this.fixed_chunk_size);ta(this.filename,{done:function(g){g=new Uint8Array(g);this.handle_read(e,f,g);e===a&&f===b?c(g):c(g.subarray(a-e,a-e+b))}.bind(this),range:{start:e,length:f}})}};Aa.prototype.set=function(a,b,c){var d=b.length;l(a+b.byteLength<=this.byteLength);l(0===a%256);l(0===
33
- d%256);l(d);a/=256;d/=256;for(var e=0;e<d;e++){var f=this.block_cache.get(a+e);if(void 0===f)f=b.slice(256*e,256*(e+1)),this.block_cache.set(a+e,f);else{const g=b.subarray(256*e,256*(e+1));l(f.byteLength===g.length);f.set(g)}this.block_cache_is_write.add(a+e)}c()};Aa.prototype.handle_read=function(a,b,c){a/=256;b/=256;for(var d=0;d<b;d++){const e=this.block_cache.get(a+d);e?c.set(e,256*d):this.cache_reads&&this.block_cache.set(a+d,c.slice(256*d,256*(d+1)))}};Aa.prototype.get_buffer=function(a){a()};
34
- Aa.prototype.get_state=function(){const a=[],b=[];for(const [c,d]of this.block_cache)l(isFinite(c)),this.block_cache_is_write.has(c)&&b.push([c,d]);a[0]=b;return a};Aa.prototype.set_state=function(a){a=a[0];this.block_cache.clear();this.block_cache_is_write.clear();for(const [b,c]of a)l(isFinite(b)),this.block_cache.set(b,c),this.block_cache_is_write.add(b)};function Ba(a,b,c,d,e){const f=a.match(/\.[^\.]+(\.zst)?$/);this.extension=f?f[0]:"";this.basename=a.substring(0,a.length-this.extension.length);
35
- this.is_zstd=this.extension.endsWith(".zst");this.basename.endsWith("/")||(this.basename+="-");this.block_cache=new Map;this.block_cache_is_write=new Set;this.byteLength=b;this.fixed_chunk_size=c;this.partfile_alt_format=!!d;this.zstd_decompress=e;this.cache_reads=!!c;this.onprogress=this.onload=void 0}Ba.prototype.load=function(){void 0===this.byteLength&&l(!1);this.onload&&this.onload(Object.create(null))};Ba.prototype.get=function(a,b,c){l(a+b<=this.byteLength);l(0===a%256);l(0===b%256);l(b);var d=
12
+ "";(e=d.match(/\/(\d+)\s*$/))?b(+e[1]):c(Error("`Range: bytes=...` header not supported (Got `"+d+"`)"))},headers:{Range:"bytes=0-0","X-Accept-Encoding":"identity"}})})};function va(a,b,c){return String.fromCharCode(...(new Uint8Array(a.buffer,b>>>0,c>>>0)))}const xa={cp437:" \u263a\u263b\u2665\u2666\u2663\u2660\u2022\u25d8\u25cb\u25d9\u2642\u2640\u266a\u266b\u263c\u25ba\u25c4\u2195\u203c\u00b6\u00a7\u25ac\u21a8\u2191\u2193\u2192\u2190\u221f\u2194\u25b2\u25bc !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u2302\u00c7\u00fc\u00e9\u00e2\u00e4\u00e0\u00e5\u00e7\u00ea\u00eb\u00e8\u00ef\u00ee\u00ec\u00c4\u00c5\u00c9\u00e6\u00c6\u00f4\u00f6\u00f2\u00fb\u00f9\u00ff\u00d6\u00dc\u00a2\u00a3\u00a5\u20a7\u0192\u00e1\u00ed\u00f3\u00fa\u00f1\u00d1\u00aa\u00ba\u00bf\u2310\u00ac\u00bd\u00bc\u00a1\u00ab\u00bb\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u03b1\u00df\u0393\u03c0\u03a3\u03c3\u00b5\u03c4\u03a6\u0398\u03a9\u03b4\u221e\u03c6\u03b5\u2229\u2261\u00b1\u2265\u2264\u2320\u2321\u00f7\u2248\u00b0\u2219\u00b7\u221a\u207f\u00b2\u25a0 ",
13
+ cp858:"\u00c7\u00fc\u00e9\u00e2\u00e4\u00e0\u00e5\u00e7\u00ea\u00eb\u00e8\u00ef\u00ee\u00ec\u00c4\u00c5\u00c9\u00e6\u00c6\u00f4\u00f6\u00f2\u00fb\u00f9\u00ff\u00d6\u00dc\u00f8\u00a3\u00d8\u00d7\u0192\u00e1\u00ed\u00f3\u00fa\u00f1\u00d1\u00aa\u00ba\u00bf\u00ae\u00ac\u00bd\u00bc\u00a1\u00ab\u00bb\u2591\u2592\u2593\u2502\u2524\u00c1\u00c2\u00c0\u00a9\u2563\u2551\u2557\u255d\u00a2\u00a5\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u00e3\u00c3\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u00a4\u00f0\u00d0\u00ca\u00cb\u00c8\u20ac\u00cd\u00ce\u00cf\u2518\u250c\u2588\u2584\u00a6\u00cc\u2580\u00d3\u00df\u00d4\u00d2\u00f5\u00d5\u00b5\u00fe\u00de\u00da\u00db\u00d9\u00fd\u00dd\u00af\u00b4\u00ad\u00b1\u2017\u00be\u00b6\u00a7\u00f7\u00b8\u00b0\u00a8\u00b7\u00b9\u00b3\u00b2\u25a0 "};
14
+ xa.cp858=xa.cp437.slice(0,128)+xa.cp858;xa.ascii=xa.cp437.split("").map((a,b)=>31<b&&128>b?a:".").join("");function ya(a){return a&&xa[a]?xa[a]:xa.cp437}var za=-15786961;const B=function(){const a=aa.reduce(function(d,e){d[e[0]]=e[1];return d},{});var b="",c=0;return function(d,e){e=e||1;if(e&za){d="["+ca(a[e]||"",4)+"] "+d;if(d===b&&(c++,2048>c))return;e=new Date;e=da(e.getHours(),2)+":"+da(e.getMinutes(),2)+":"+da(e.getSeconds(),2)+"+"+da(e.getMilliseconds(),3)+" ";c&&(1===c?console.log(e+b):console.log("Previous message repeated "+
15
+ c+" times"),c=0);console.log(e+d);b=d}}}();function l(a,b){if(!a){debugger;console.trace();if(b)throw"Assert failed: "+b;throw"Assert failed";}}function Aa(a,b){function c(y){y=y.toString(16);return"#"+"0".repeat(6-y.length)+y}function d(y){var w=256*pa,K=8*T,O=Wa?Wa.canvas:null;O&&O.width===w&&O.height===K||(O?(O.width=w,O.height=K):(O=new OffscreenCanvas(w,K),Wa=O.getContext("2d")),Kb=Wa.createImageData(w,K));const S=Kb.data;let R=0,U;K=Lb?function(ba){U=U||ba;S[R+3]=ba;S[R+7]=ba;R+=8}:function(ba){U=
16
+ U||ba;S[R+3]=ba;R+=4};O=32-T;const la=w*(T-1)*4;w=4*(pa-w*T);const ja=1020*pa;for(let ba=0,sa=0;2048>ba;++ba,sa+=O,R+=w){const Ha=ba%256;ba&&!Ha&&(R+=la);U=!1;for(let Na=0;Na<T;++Na,++sa,R+=ja){const Oa=y[sa];for(let wa=128;0<wa;wa>>=1)K(Oa&wa?255:0);Mb&&K(Nb&&192<=Ha&&223>=Ha&&Oa&1?255:0)}gc[ba]=U?1:0}Wa.putImageData(Kb,0,0)}function e(y,w,K,O){if(w&&K){y.style.width="";y.style.height="";O&&(y.style.transform="");var S=y.getBoundingClientRect();O?y.style.transform=(1===w?"":" scaleX("+w+")")+(1===
17
+ K?"":" scaleY("+K+")"):(0===w%1&&0===K%1?(g.style.imageRendering="crisp-edges",g.style.imageRendering="pixelated",g.style["-ms-interpolation-mode"]="nearest-neighbor"):(g.style.imageRendering="",g.style["-ms-interpolation-mode"]=""),O=window.devicePixelRatio||1,0!==O%1&&(w/=O,K/=O));1!==w&&(y.style.width=S.width*w+"px");1!==K&&(y.style.height=S.height*K+"px")}}const f=a.container;this.screen_fill_buffer=b;console.assert(f,"options.container must be provided");this.FLAG_BLINKING=1;this.FLAG_FONT_PAGE_B=
18
+ 2;var g=f.getElementsByTagName("canvas")[0],k=g.getContext("2d",{alpha:!1}),m=f.getElementsByTagName("div")[0],p=document.createElement("div"),q,r,v=void 0!==a.scale?a.scale:1,t=void 0!==a.scale?a.scale:1,z=1,A,u,E,F,x,M,V,Wa,Kb,gc=new Int8Array(2048),T,pa,Mb,Lb,Nb,Ob=0,Pb=0,sb,hc=0,tb,Qb,ub,Rb=ya(a.encoding),vb=0,Sb=!1;this.init=function(){p.classList.add("cursor");p.style.position="absolute";p.style.backgroundColor="#ccc";p.style.width="7px";p.style.display="inline-block";this.set_mode(!1);this.set_size_text(80,
19
+ 25);2===u&&this.set_size_graphical(720,400,720,400);this.set_scale(v,t);this.timer()};this.make_screenshot=function(){const y=new Image;if(1===u||2===u)y.src=g.toDataURL("image/png");else{const w=[9,16],K=document.createElement("canvas");K.width=F*w[0];K.height=x*w[1];const O=K.getContext("2d");O.imageSmoothingEnabled=!1;O.font=window.getComputedStyle(m).font;O.textBaseline="top";for(let S=0;S<x;S++)for(let R=0;R<F;R++){const U=4*(S*F+R),la=E[U+0],ja=E[U+3];O.fillStyle=c(E[U+2]);O.fillRect(R*w[0],
20
+ S*w[1],w[0],w[1]);O.fillStyle=c(ja);O.fillText(Rb[la],R*w[0],S*w[1])}"none"!==p.style.display&&q<x&&r<F&&(O.fillStyle=p.style.backgroundColor,O.fillRect(r*w[0],q*w[1]+parseInt(p.style.marginTop,10),parseInt(p.style.width,10),parseInt(p.style.height,10)));y.src=K.toDataURL("image/png")}return y};this.put_char=function(y,w,K,O,S,R){l(0<=y&&y<x);l(0<=w&&w<F);l(0<=K&&256>K);w=4*(y*F+w);E[w+0]=K;E[w+1]=O;E[w+2]=S;E[w+3]=R;A[y]=1};this.timer=function(){vb=requestAnimationFrame(()=>this.update_screen())};
21
+ this.update_screen=function(){Sb||(0===u?this.update_text():1===u?this.update_graphical():this.update_graphical_text());this.timer()};this.update_text=function(){for(var y=0;y<x;y++)A[y]&&(this.text_update_row(y),A[y]=0)};this.update_graphical=function(){this.screen_fill_buffer()};this.update_graphical_text=function(){if(M){var y=performance.now();if(266<y-hc){sb=!sb;ub&&(A[q]=1);var w=4*F;for(let la=0,ja=0;la<x;++la)if(A[la])ja+=w;else for(var K=0;K<F;++K,ja+=4)if(E[ja+1]&1){A[la]=1;ja+=w-4*K;break}hc=
22
+ y}y=Wa.canvas;w=V.canvas;K=4*F;const S=F*pa,R=T;let U=0;for(let la=0,ja=0,ba=0;la<x;++la,ja+=T){if(!A[la]){ba+=K;continue}++U;V.clearRect(0,R,S,T);let sa,Ha,Na,Oa;for(let wa=0;wa<S;wa+=pa,ba+=4){const ic=E[ba+0];var O=E[ba+1];const jc=E[ba+2],kc=E[ba+3],lc=O&2?Pb:Ob;O=(!(O&1)||sb)&&gc[(lc<<8)+ic];Na!==jc&&(void 0!==Na&&(M.fillStyle=c(Na),M.fillRect(Oa,ja,wa-Oa,T)),Na=jc,Oa=wa);sa!==kc&&(void 0!==sa&&(V.fillStyle=c(sa),V.fillRect(Ha,0,wa-Ha,T)),sa=kc,Ha=wa);O&&V.drawImage(y,ic*pa,lc*T,pa,T,wa,R,pa,
23
+ T)}V.fillStyle=c(sa);V.fillRect(Ha,0,S-Ha,T);V.globalCompositeOperation="destination-in";V.drawImage(w,0,R,S,T,0,0,S,T);V.globalCompositeOperation="source-over";M.fillStyle=c(Na);M.fillRect(Oa,ja,S-Oa,T);M.drawImage(w,0,0,S,T,0,ja,S,T)}U&&(sb&&ub&&A[q]&&(M.fillStyle=c(E[4*(q*F+r)+3]),M.fillRect(r*pa,q*T+tb,pa,Qb-tb+1)),A.fill(0));U&&k.drawImage(M.canvas,0,0)}};this.destroy=function(){vb&&(cancelAnimationFrame(vb),vb=0)};this.pause=function(){Sb=!0;p.classList.remove("blinking-cursor")};this.continue=
24
+ function(){Sb=!1;p.classList.add("blinking-cursor")};this.set_mode=function(y){u=y?1:a.use_graphical_text?2:0;0===u?(m.style.display="block",g.style.display="none"):(m.style.display="none",g.style.display="block",2===u&&A&&A.fill(1))};this.set_font_bitmap=function(y,w,K,O,S,R){const U=K?16:w?9:8;if(T!==y||pa!==U||Mb!==w||Lb!==K||Nb!==O||R)R=pa!==U||T!==y,T=y,pa=U,Mb=w,Lb=K,Nb=O,2===u&&(d(S),A.fill(1),R&&this.set_size_graphical_text())};this.set_font_page=function(y,w){if(Ob!==y||Pb!==w)Ob=y,Pb=w,
25
+ A.fill(1)};this.clear_screen=function(){k.fillStyle="#000";k.fillRect(0,0,g.width,g.height)};this.set_size_graphical_text=function(){if(Wa){var y=pa*F,w=T*x,K=2*T;M&&M.canvas.width===y&&M.canvas.height===w&&V.canvas.height===K||(M?(M.canvas.width=y,M.canvas.height=w,V.canvas.width=y,V.canvas.height=K):(M=(new OffscreenCanvas(y,w)).getContext("2d",{alpha:!1}),V=(new OffscreenCanvas(y,K)).getContext("2d")),this.set_size_graphical(y,w,y,w),A.fill(1))}};this.set_size_text=function(y,w){if(y!==F||w!==
26
+ x)if(A=new Int8Array(w),E=new Int32Array(y*w*4),F=y,x=w,0===u){for(;m.childNodes.length>w;)m.removeChild(m.firstChild);for(;m.childNodes.length<w;)m.appendChild(document.createElement("div"));for(y=0;y<w;y++)this.text_update_row(y);e(m,v,t,!0)}else 2===u&&this.set_size_graphical_text()};this.set_size_graphical=function(y,w){g.style.display="block";g.width=y;g.height=w;k.imageSmoothingEnabled=!1;z=640>=y&&2*y<window.innerWidth*window.devicePixelRatio&&2*w<window.innerHeight*window.devicePixelRatio?
27
+ 2:1;e(g,v*z,t*z,!1)};this.set_scale=function(y,w){v=y;t=w;e(m,v,t,!0);e(g,v*z,t*z,!1)};this.update_cursor_scanline=function(y,w,K){if(y!==tb||w!==Qb||K!==ub)0===u?K?(p.style.display="inline",p.style.height=w-y+"px",p.style.marginTop=y+"px"):p.style.display="none":2===u&&q<x&&(A[q]=1),tb=y,Qb=w,ub=K};this.update_cursor=function(y,w){if(y!==q||w!==r)y<x&&(A[y]=1),q<x&&(A[q]=1),q=y,r=w};this.text_update_row=function(y){var w=4*y*F,K;var O=m.childNodes[y];var S=document.createElement("div");for(var R=
28
+ 0;R<F;){var U=document.createElement("span");var la=E[w+1]&1;var ja=E[w+2];var ba=E[w+3];la&&U.classList.add("blink");U.style.backgroundColor=c(ja);U.style.color=c(ba);for(K="";R<F&&(E[w+1]&1)===la&&E[w+2]===ja&&E[w+3]===ba;){const sa=Rb[E[w+0]];K+=sa;l(sa);R++;w+=4;if(y===q)if(R===r)break;else if(R===r+1){p.style.backgroundColor=U.style.color;S.appendChild(p);break}}U.textContent=K;S.appendChild(U)}O.parentNode.replaceChild(S,O)};this.update_buffer=function(y){for(const w of y)k.putImageData(w.image_data,
29
+ w.screen_x-w.buffer_x,w.screen_y-w.buffer_y,w.buffer_x,w.buffer_y,w.buffer_width,w.buffer_height)};this.get_text_screen=function(){for(var y=[],w=0;w<x;w++)y.push(this.get_text_row(w));return y};this.get_text_row=function(y){var w=y*F*4;y=w+4*F;let K="";for(;w<y;w+=4)K+=Rb[E[w]];return K};this.init()}function Ba(a){l(a instanceof ArrayBuffer);this.buffer=a;this.byteLength=a.byteLength;this.onprogress=this.onload=void 0}Ba.prototype.load=function(){this.onload&&this.onload({buffer:this.buffer})};Ba.prototype.get=
30
+ function(a,b,c){l(a+b<=this.byteLength);c(new Uint8Array(this.buffer,a,b))};Ba.prototype.set=function(a,b,c){l(a+b.byteLength<=this.byteLength);(new Uint8Array(this.buffer,a,b.byteLength)).set(b);c()};Ba.prototype.get_buffer=function(a){a(this.buffer)};Ba.prototype.get_state=function(){const a=[];a[0]=this.byteLength;a[1]=new Uint8Array(this.buffer);return a};Ba.prototype.set_state=function(a){this.byteLength=a[0];this.buffer=a[1].slice().buffer};function Ca(a,b,c){this.filename=a;this.byteLength=
31
+ b;this.block_cache=new Map;this.block_cache_is_write=new Set;this.fixed_chunk_size=c;this.cache_reads=!!c;this.onprogress=this.onload=void 0}Ca.prototype.load=async function(){void 0===this.byteLength&&(this.byteLength=await ua(this.filename));this.onload&&this.onload(Object.create(null))};Ca.prototype.get_from_cache=function(a,b){var c=b/256;a/=256;for(var d=0;d<c;d++)if(!this.block_cache.get(a+d))return;if(1===c)return this.block_cache.get(a);b=new Uint8Array(b);for(d=0;d<c;d++)b.set(this.block_cache.get(a+
32
+ d),256*d);return b};Ca.prototype.get=function(a,b,c){l(a+b<=this.byteLength);l(0===a%256);l(0===b%256);l(b);var d=this.get_from_cache(a,b);if(d)c(d);else{var e=a,f=b;this.fixed_chunk_size&&(e=a-a%this.fixed_chunk_size,f=Math.ceil((a-e+b)/this.fixed_chunk_size)*this.fixed_chunk_size);ta(this.filename,{done:function(g){g=new Uint8Array(g);this.handle_read(e,f,g);e===a&&f===b?c(g):c(g.subarray(a-e,a-e+b))}.bind(this),range:{start:e,length:f}})}};Ca.prototype.set=function(a,b,c){var d=b.length;l(a+b.byteLength<=
33
+ this.byteLength);l(0===a%256);l(0===d%256);l(d);a/=256;d/=256;for(var e=0;e<d;e++){var f=this.block_cache.get(a+e);if(void 0===f)f=b.slice(256*e,256*(e+1)),this.block_cache.set(a+e,f);else{const g=b.subarray(256*e,256*(e+1));l(f.byteLength===g.length);f.set(g)}this.block_cache_is_write.add(a+e)}c()};Ca.prototype.handle_read=function(a,b,c){a/=256;b/=256;for(var d=0;d<b;d++){const e=this.block_cache.get(a+d);e?c.set(e,256*d):this.cache_reads&&this.block_cache.set(a+d,c.slice(256*d,256*(d+1)))}};Ca.prototype.get_buffer=
34
+ function(a){a()};Ca.prototype.get_state=function(){const a=[],b=[];for(const [c,d]of this.block_cache)l(isFinite(c)),this.block_cache_is_write.has(c)&&b.push([c,d]);a[0]=b;return a};Ca.prototype.set_state=function(a){a=a[0];this.block_cache.clear();this.block_cache_is_write.clear();for(const [b,c]of a)l(isFinite(b)),this.block_cache.set(b,c),this.block_cache_is_write.add(b)};function Da(a,b,c,d,e){const f=a.match(/\.[^\.]+(\.zst)?$/);this.extension=f?f[0]:"";this.basename=a.substring(0,a.length-this.extension.length);
35
+ this.is_zstd=this.extension.endsWith(".zst");this.basename.endsWith("/")||(this.basename+="-");this.block_cache=new Map;this.block_cache_is_write=new Set;this.byteLength=b;this.fixed_chunk_size=c;this.partfile_alt_format=!!d;this.zstd_decompress=e;this.cache_reads=!!c;this.onprogress=this.onload=void 0}Da.prototype.load=function(){void 0===this.byteLength&&l(!1);this.onload&&this.onload(Object.create(null))};Da.prototype.get=function(a,b,c){l(a+b<=this.byteLength);l(0===a%256);l(0===b%256);l(b);var d=
36
36
  this.get_from_cache(a,b);if(d)c(d);else if(this.fixed_chunk_size){const f=Math.floor(a/this.fixed_chunk_size),g=a-f*this.fixed_chunk_size;l(0<=g);const k=Math.ceil((g+b)/this.fixed_chunk_size),m=new Uint8Array(k*this.fixed_chunk_size);let p=0;for(let q=0;q<k;q++){var e=(f+q)*this.fixed_chunk_size;d=this.partfile_alt_format?this.basename+(f+q+"").padStart(8,"0")+this.extension:this.basename+e+"-"+(e+this.fixed_chunk_size)+this.extension;(e=this.get_from_cache(e,this.fixed_chunk_size))?(m.set(e,q*this.fixed_chunk_size),
37
- p++,p===k&&c(m.subarray(g,g+b))):ta(d,{done:async function(r){r=new Uint8Array(r);this.is_zstd&&(r=await this.zstd_decompress(this.fixed_chunk_size,r),r=new Uint8Array(r));m.set(r,q*this.fixed_chunk_size);this.handle_read((f+q)*this.fixed_chunk_size,this.fixed_chunk_size|0,r);p++;p===k&&c(m.subarray(g,g+b))}.bind(this)})}}else ta(this.basename+a+"-"+(a+b)+this.extension,{done:function(f){l(f.byteLength===b);f=new Uint8Array(f);this.handle_read(a,b,f);c(f)}.bind(this)})};Ba.prototype.get_from_cache=
38
- Aa.prototype.get_from_cache;Ba.prototype.set=Aa.prototype.set;Ba.prototype.handle_read=Aa.prototype.handle_read;Ba.prototype.get_state=Aa.prototype.get_state;Ba.prototype.set_state=Aa.prototype.set_state;function Ca(a){this.file=a;this.byteLength=a.size;1073741824<a.size&&console.warn("SyncFileBuffer: Allocating buffer of "+(a.size>>20)+" MB ...");this.buffer=new ArrayBuffer(a.size);this.onprogress=this.onload=void 0}Ca.prototype.load=function(){this.load_next(0)};Ca.prototype.load_next=function(a){var b=
39
- new FileReader;b.onload=function(d){d=new Uint8Array(d.target.result);(new Uint8Array(this.buffer,a)).set(d);this.load_next(a+4194304)}.bind(this);if(this.onprogress)this.onprogress({loaded:a,total:this.byteLength,lengthComputable:!0});if(a<this.byteLength){var c=this.file.slice(a,Math.min(a+4194304,this.byteLength));b.readAsArrayBuffer(c)}else this.file=void 0,this.onload&&this.onload({buffer:this.buffer})};Ca.prototype.get=za.prototype.get;Ca.prototype.set=za.prototype.set;Ca.prototype.get_buffer=
40
- za.prototype.get_buffer;Ca.prototype.get_state=za.prototype.get_state;Ca.prototype.set_state=za.prototype.set_state;function Da(a){this.file=a;this.byteLength=a.size;this.block_cache=new Map;this.block_cache_is_write=new Set;this.onprogress=this.onload=void 0}Da.prototype.load=function(){this.onload&&this.onload(Object.create(null))};Da.prototype.get=function(a,b,c){l(0===a%256);l(0===b%256);l(b);var d=this.get_from_cache(a,b);d?c(d):(d=new FileReader,d.onload=function(e){e=new Uint8Array(e.target.result);
41
- this.handle_read(a,b,e);c(e)}.bind(this),d.readAsArrayBuffer(this.file.slice(a,a+b)))};Da.prototype.get_from_cache=Aa.prototype.get_from_cache;Da.prototype.set=Aa.prototype.set;Da.prototype.handle_read=Aa.prototype.handle_read;Da.prototype.get_state=Aa.prototype.get_state;Da.prototype.set_state=Aa.prototype.set_state;Da.prototype.get_buffer=function(a){a()};Da.prototype.get_as_file=function(a){for(var b=[],c=Array.from(this.block_cache.keys()).sort(function(k,m){return k-m}),d=0,e=0;e<c.length;e++){var f=
42
- c[e],g=this.block_cache.get(f);f*=256;l(f>=d);f!==d&&(b.push(this.file.slice(d,f)),d=f);b.push(g);d+=g.length}d!==this.file.size&&b.push(this.file.slice(d));a=new File(b,a);l(a.size===this.file.size);return a};function Ea(a,b){if(a.buffer instanceof ArrayBuffer)return new za(a.buffer);if("undefined"!==typeof File&&a.buffer instanceof File)return b=a.async,void 0===b&&(b=268435456<=a.buffer.size),b?new Da(a.buffer):new Ca(a.buffer);if(a.url)return a.use_parts?new Ba(a.url,a.size,a.fixed_chunk_size,
43
- !1,b):new Aa(a.url,a.size,a.fixed_chunk_size);B("Ignored file: url="+a.url+" buffer="+a.buffer)}function C(a){this.cpu=a;this.channel_page=new Uint8Array(8);this.channel_pagehi=new Uint8Array(8);this.channel_addr=new Uint16Array(8);this.channel_addr_init=new Uint16Array(8);this.channel_count=new Uint16Array(8);this.channel_count_init=new Uint16Array(8);this.channel_mask=new Uint8Array(8);this.channel_mode=new Uint8Array(8);this.unmask_listeners=[];this.lsb_msb_flipflop=0;a=a.io;a.register_write(0,
37
+ p++,p===k&&c(m.subarray(g,g+b))):ta(d,{done:async function(r){r=new Uint8Array(r);this.is_zstd&&(r=await this.zstd_decompress(this.fixed_chunk_size,r),r=new Uint8Array(r));m.set(r,q*this.fixed_chunk_size);this.handle_read((f+q)*this.fixed_chunk_size,this.fixed_chunk_size|0,r);p++;p===k&&c(m.subarray(g,g+b))}.bind(this)})}}else ta(this.basename+a+"-"+(a+b)+this.extension,{done:function(f){l(f.byteLength===b);f=new Uint8Array(f);this.handle_read(a,b,f);c(f)}.bind(this)})};Da.prototype.get_from_cache=
38
+ Ca.prototype.get_from_cache;Da.prototype.set=Ca.prototype.set;Da.prototype.handle_read=Ca.prototype.handle_read;Da.prototype.get_state=Ca.prototype.get_state;Da.prototype.set_state=Ca.prototype.set_state;function Ea(a){this.file=a;this.byteLength=a.size;1073741824<a.size&&console.warn("SyncFileBuffer: Allocating buffer of "+(a.size>>20)+" MB ...");this.buffer=new ArrayBuffer(a.size);this.onprogress=this.onload=void 0}Ea.prototype.load=function(){this.load_next(0)};Ea.prototype.load_next=function(a){var b=
39
+ new FileReader;b.onload=function(d){d=new Uint8Array(d.target.result);(new Uint8Array(this.buffer,a)).set(d);this.load_next(a+4194304)}.bind(this);if(this.onprogress)this.onprogress({loaded:a,total:this.byteLength,lengthComputable:!0});if(a<this.byteLength){var c=this.file.slice(a,Math.min(a+4194304,this.byteLength));b.readAsArrayBuffer(c)}else this.file=void 0,this.onload&&this.onload({buffer:this.buffer})};Ea.prototype.get=Ba.prototype.get;Ea.prototype.set=Ba.prototype.set;Ea.prototype.get_buffer=
40
+ Ba.prototype.get_buffer;Ea.prototype.get_state=Ba.prototype.get_state;Ea.prototype.set_state=Ba.prototype.set_state;function Fa(a){this.file=a;this.byteLength=a.size;this.block_cache=new Map;this.block_cache_is_write=new Set;this.onprogress=this.onload=void 0}Fa.prototype.load=function(){this.onload&&this.onload(Object.create(null))};Fa.prototype.get=function(a,b,c){l(0===a%256);l(0===b%256);l(b);var d=this.get_from_cache(a,b);d?c(d):(d=new FileReader,d.onload=function(e){e=new Uint8Array(e.target.result);
41
+ this.handle_read(a,b,e);c(e)}.bind(this),d.readAsArrayBuffer(this.file.slice(a,a+b)))};Fa.prototype.get_from_cache=Ca.prototype.get_from_cache;Fa.prototype.set=Ca.prototype.set;Fa.prototype.handle_read=Ca.prototype.handle_read;Fa.prototype.get_state=Ca.prototype.get_state;Fa.prototype.set_state=Ca.prototype.set_state;Fa.prototype.get_buffer=function(a){a()};Fa.prototype.get_as_file=function(a){for(var b=[],c=Array.from(this.block_cache.keys()).sort(function(k,m){return k-m}),d=0,e=0;e<c.length;e++){var f=
42
+ c[e],g=this.block_cache.get(f);f*=256;l(f>=d);f!==d&&(b.push(this.file.slice(d,f)),d=f);b.push(g);d+=g.length}d!==this.file.size&&b.push(this.file.slice(d));a=new File(b,a);l(a.size===this.file.size);return a};function Ga(a,b){if(a.buffer instanceof ArrayBuffer)return new Ba(a.buffer);if("undefined"!==typeof File&&a.buffer instanceof File)return b=a.async,void 0===b&&(b=268435456<=a.buffer.size),b?new Fa(a.buffer):new Ea(a.buffer);if(a.url)return a.use_parts?new Da(a.url,a.size,a.fixed_chunk_size,
43
+ !1,b):new Ca(a.url,a.size,a.fixed_chunk_size);B("Ignored file: url="+a.url+" buffer="+a.buffer)}function C(a){this.cpu=a;this.channel_page=new Uint8Array(8);this.channel_pagehi=new Uint8Array(8);this.channel_addr=new Uint16Array(8);this.channel_addr_init=new Uint16Array(8);this.channel_count=new Uint16Array(8);this.channel_count_init=new Uint16Array(8);this.channel_mask=new Uint8Array(8);this.channel_mode=new Uint8Array(8);this.unmask_listeners=[];this.lsb_msb_flipflop=0;a=a.io;a.register_write(0,
44
44
  this,this.port_addr_write.bind(this,0));a.register_write(2,this,this.port_addr_write.bind(this,1));a.register_write(4,this,this.port_addr_write.bind(this,2));a.register_write(6,this,this.port_addr_write.bind(this,3));a.register_write(1,this,this.port_count_write.bind(this,0));a.register_write(3,this,this.port_count_write.bind(this,1));a.register_write(5,this,this.port_count_write.bind(this,2));a.register_write(7,this,this.port_count_write.bind(this,3));a.register_read(0,this,this.port_addr_read.bind(this,
45
45
  0));a.register_read(2,this,this.port_addr_read.bind(this,1));a.register_read(4,this,this.port_addr_read.bind(this,2));a.register_read(6,this,this.port_addr_read.bind(this,3));a.register_read(1,this,this.port_count_read.bind(this,0));a.register_read(3,this,this.port_count_read.bind(this,1));a.register_read(5,this,this.port_count_read.bind(this,2));a.register_read(7,this,this.port_count_read.bind(this,3));a.register_write(192,this,this.port_addr_write.bind(this,4));a.register_write(196,this,this.port_addr_write.bind(this,
46
46
  5));a.register_write(200,this,this.port_addr_write.bind(this,6));a.register_write(204,this,this.port_addr_write.bind(this,7));a.register_write(194,this,this.port_count_write.bind(this,4));a.register_write(198,this,this.port_count_write.bind(this,5));a.register_write(202,this,this.port_count_write.bind(this,6));a.register_write(206,this,this.port_count_write.bind(this,7));a.register_read(192,this,this.port_addr_read.bind(this,4));a.register_read(196,this,this.port_addr_read.bind(this,5));a.register_read(200,
@@ -57,22 +57,22 @@ n(b),16);for(var c=0;4>c;c++)this.update_mask(a+c,b&1<<c)};C.prototype.port_mult
57
57
  this_value:b})};C.prototype.update_mask=function(a,b){if(this.channel_mask[a]!==b&&(this.channel_mask[a]=b,!b))for(B("firing on_unmask("+a+")",16),b=0;b<this.unmask_listeners.length;b++)this.unmask_listeners[b].fn.call(this.unmask_listeners[b].this_value,a)};C.prototype.do_read=function(a,b,c,d,e){var f=this.count_get_8bit(d),g=this.address_get_8bit(d);B("DMA write channel "+d,16);B("to "+n(g)+" len "+n(f),16);c<f&&B("DMA should read more than provided: "+n(c)+" "+n(f),16);if(b+f>a.byteLength)B("DMA read outside of buffer",
58
58
  16),e(!0);else{var k=this.cpu;this.channel_addr[d]+=f;a.get(b,f,function(m){k.write_blob(m,g);e(!1)})}};C.prototype.do_write=function(a,b,c,d,e){var f=this.channel_count[d]+1&65535,g=5<=d?2:1,k=f*g,m=this.address_get_8bit(d),p=!1,q=!1,r=this.channel_mode[d]&16;B("DMA write channel "+d,16);B("to "+n(m)+" len "+n(k),16);c<k?(B("DMA should read more than provided",16),f=Math.floor(c/g),k=f*g,p=!0):c>k&&(B("DMA attempted to read more than provided",16),q=!0);b+k>a.byteLength?(B("DMA write outside of buffer",
59
59
  16),e(!0)):(this.channel_addr[d]+=f,this.channel_count[d]-=f,!p&&r&&(B("DMA autoinit",16),this.channel_addr[d]=this.channel_addr_init[d],this.channel_count[d]=this.channel_count_init[d]),a.set(b,this.cpu.mem8.subarray(m,m+k),()=>{q&&r?(B("DMA continuing from start",16),this.do_write(a,b+k,c-k,d,e)):e(!1)}))};C.prototype.address_get_8bit=function(a){var b=this.channel_addr[a];5<=a&&(b<<=1);b=b&65535|this.channel_page[a]<<16;return b|=this.channel_pagehi[a]<<24};C.prototype.count_get_8bit=function(a){var b=
60
- this.channel_count[a]+1;5<=a&&(b*=2);return b};C.prototype.flipflop_get=function(a,b,c){c||(this.lsb_msb_flipflop^=1);return this.lsb_msb_flipflop?a&-256|b:a&-65281|b<<8};C.prototype.flipflop_read=function(a){return(this.lsb_msb_flipflop^=1)?a&255:a>>8&255};function Fa(a){this.ports=[];this.cpu=a;for(var b=0;65536>b;b++)this.ports[b]=this.create_empty_entry();var c=a.memory_size[0];for(b=0;b<<17<c;b++)a.memory_map_read8[b]=a.memory_map_write8[b]=void 0,a.memory_map_read32[b]=a.memory_map_write32[b]=
61
- void 0;this.mmap_register(c,4294967296-c,function(d){B("Read from unmapped memory space, addr="+n(d>>>0,8),32);return 255},function(d,e){B("Write to unmapped memory space, addr="+n(d>>>0,8)+" value="+n(e,2),32)},function(d){B("Read from unmapped memory space, addr="+n(d>>>0,8),32);return-1},function(d,e){B("Write to unmapped memory space, addr="+n(d>>>0,8)+" value="+n(e>>>0,8),32)})}Fa.prototype.create_empty_entry=function(){return{read8:this.empty_port_read8,read16:this.empty_port_read16,read32:this.empty_port_read32,
62
- write8:this.empty_port_write,write16:this.empty_port_write,write32:this.empty_port_write,device:void 0}};Fa.prototype.empty_port_read8=function(){return 255};Fa.prototype.empty_port_read16=function(){return 65535};Fa.prototype.empty_port_read32=function(){return-1};Fa.prototype.empty_port_write=function(){};Fa.prototype.register_read=function(a,b,c,d,e){function f(g){l(!1,"Overlapped read"+g+" "+n(a,4)+" ("+b.name+")");return-1>>>32-g|0}l("number"===typeof a);l("object"===typeof b);l(!c||"function"===
63
- typeof c);l(!d||"function"===typeof d);l(!e||"function"===typeof e);l(c||d||e);c||(c=f.bind(this,8));d||(d=f.bind(this,16));e||(e=f.bind(this,32));c&&(this.ports[a].read8=c);d&&(this.ports[a].read16=d);e&&(this.ports[a].read32=e);this.ports[a].device=b};Fa.prototype.register_write=function(a,b,c,d,e){function f(g){l(!1,"Overlapped write"+g+" "+n(a)+" ("+b.name+")")}l("number"===typeof a);l("object"===typeof b);l(!c||"function"===typeof c);l(!d||"function"===typeof d);l(!e||"function"===typeof e);
64
- l(c||d||e);c||(c=f.bind(this,8));d||(d=f.bind(this,16));e||(e=f.bind(this,32));c&&(this.ports[a].write8=c);d&&(this.ports[a].write16=d);e&&(this.ports[a].write32=e);this.ports[a].device=b};Fa.prototype.register_read_consecutive=function(a,b,c,d,e,f){function g(){return c.call(this)|d.call(this)<<8}function k(){return e.call(this)|f.call(this)<<8}function m(){return c.call(this)|d.call(this)<<8|e.call(this)<<16|f.call(this)<<24}l(4===arguments.length||6===arguments.length);e&&f?(this.register_read(a,
65
- b,c,g,m),this.register_read(a+1,b,d),this.register_read(a+2,b,e,k),this.register_read(a+3,b,f)):(this.register_read(a,b,c,g),this.register_read(a+1,b,d))};Fa.prototype.register_write_consecutive=function(a,b,c,d,e,f){function g(p){c.call(this,p&255);d.call(this,p>>8&255)}function k(p){e.call(this,p&255);f.call(this,p>>8&255)}function m(p){c.call(this,p&255);d.call(this,p>>8&255);e.call(this,p>>16&255);f.call(this,p>>>24)}l(4===arguments.length||6===arguments.length);e&&f?(this.register_write(a,b,
66
- c,g,m),this.register_write(a+1,b,d),this.register_write(a+2,b,e,k),this.register_write(a+3,b,f)):(this.register_write(a,b,c,g),this.register_write(a+1,b,d))};Fa.prototype.mmap_read32_shim=function(a){var b=this.cpu.memory_map_read8[a>>>17];return b(a)|b(a+1)<<8|b(a+2)<<16|b(a+3)<<24};Fa.prototype.mmap_write32_shim=function(a,b){var c=this.cpu.memory_map_write8[a>>>17];c(a,b&255);c(a+1,b>>8&255);c(a+2,b>>16&255);c(a+3,b>>>24)};Fa.prototype.mmap_register=function(a,b,c,d,e,f){B("mmap_register addr="+
67
- n(a>>>0,8)+" size="+n(b,8),32);l(0===(a&131071));l(b&&0===(b&131071));e||(e=this.mmap_read32_shim.bind(this));f||(f=this.mmap_write32_shim.bind(this));for(a>>>=17;0<b;a++)this.cpu.memory_map_read8[a]=c,this.cpu.memory_map_write8[a]=d,this.cpu.memory_map_read32[a]=e,this.cpu.memory_map_write32[a]=f,b-=131072};Fa.prototype.port_write8=function(a,b){var c=this.ports[a];c.write8===this.empty_port_write&&B("write8 port #"+n(a,4)+" <- "+n(b,2)+this.get_port_description(a),32);return c.write8.call(c.device,
68
- b)};Fa.prototype.port_write16=function(a,b){var c=this.ports[a];c.write16===this.empty_port_write&&B("write16 port #"+n(a,4)+" <- "+n(b,4)+this.get_port_description(a),32);return c.write16.call(c.device,b)};Fa.prototype.port_write32=function(a,b){var c=this.ports[a];c.write32===this.empty_port_write&&B("write32 port #"+n(a,4)+" <- "+n(b>>>0,8)+this.get_port_description(a),32);return c.write32.call(c.device,b)};Fa.prototype.port_read8=function(a){var b=this.ports[a];b.read8===this.empty_port_read8&&
69
- B("read8 port #"+n(a,4)+this.get_port_description(a),32);b=b.read8.call(b.device,a);l("number"===typeof b);(0>b||256<=b)&&l(!1,"8 bit port returned large value: "+n(a));return b};Fa.prototype.port_read16=function(a){var b=this.ports[a];b.read16===this.empty_port_read16&&B("read16 port #"+n(a,4)+this.get_port_description(a),32);b=b.read16.call(b.device,a);l("number"===typeof b);(0>b||65536<=b)&&l(!1,"16 bit port returned large value: "+n(a));return b};Fa.prototype.port_read32=function(a){var b=this.ports[a];
70
- b.read32===this.empty_port_read32&&B("read32 port #"+n(a,4)+this.get_port_description(a),32);a=b.read32.call(b.device,a);l((a|0)===a);return a};var Ga={4:"PORT_DMA_ADDR_2",5:"PORT_DMA_CNT_2",10:"PORT_DMA1_MASK_REG",11:"PORT_DMA1_MODE_REG",12:"PORT_DMA1_CLEAR_FF_REG",13:"PORT_DMA1_MASTER_CLEAR",32:"PORT_PIC1_CMD",33:"PORT_PIC1_DATA",64:"PORT_PIT_COUNTER0",65:"PORT_PIT_COUNTER1",66:"PORT_PIT_COUNTER2",67:"PORT_PIT_MODE",96:"PORT_PS2_DATA",97:"PORT_PS2_CTRLB",100:"PORT_PS2_STATUS",112:"PORT_CMOS_INDEX",
60
+ this.channel_count[a]+1;5<=a&&(b*=2);return b};C.prototype.flipflop_get=function(a,b,c){c||(this.lsb_msb_flipflop^=1);return this.lsb_msb_flipflop?a&-256|b:a&-65281|b<<8};C.prototype.flipflop_read=function(a){return(this.lsb_msb_flipflop^=1)?a&255:a>>8&255};function Ia(a){this.ports=[];this.cpu=a;for(var b=0;65536>b;b++)this.ports[b]=this.create_empty_entry();var c=a.memory_size[0];for(b=0;b<<17<c;b++)a.memory_map_read8[b]=a.memory_map_write8[b]=void 0,a.memory_map_read32[b]=a.memory_map_write32[b]=
61
+ void 0;this.mmap_register(c,4294967296-c,function(d){B("Read from unmapped memory space, addr="+n(d>>>0,8),32);return 255},function(d,e){B("Write to unmapped memory space, addr="+n(d>>>0,8)+" value="+n(e,2),32)},function(d){B("Read from unmapped memory space, addr="+n(d>>>0,8),32);return-1},function(d,e){B("Write to unmapped memory space, addr="+n(d>>>0,8)+" value="+n(e>>>0,8),32)})}Ia.prototype.create_empty_entry=function(){return{read8:this.empty_port_read8,read16:this.empty_port_read16,read32:this.empty_port_read32,
62
+ write8:this.empty_port_write,write16:this.empty_port_write,write32:this.empty_port_write,device:void 0}};Ia.prototype.empty_port_read8=function(){return 255};Ia.prototype.empty_port_read16=function(){return 65535};Ia.prototype.empty_port_read32=function(){return-1};Ia.prototype.empty_port_write=function(){};Ia.prototype.register_read=function(a,b,c,d,e){function f(g){l(!1,"Overlapped read"+g+" "+n(a,4)+" ("+b.name+")");return-1>>>32-g|0}l("number"===typeof a);l("object"===typeof b);l(!c||"function"===
63
+ typeof c);l(!d||"function"===typeof d);l(!e||"function"===typeof e);l(c||d||e);c||(c=f.bind(this,8));d||(d=f.bind(this,16));e||(e=f.bind(this,32));c&&(this.ports[a].read8=c);d&&(this.ports[a].read16=d);e&&(this.ports[a].read32=e);this.ports[a].device=b};Ia.prototype.register_write=function(a,b,c,d,e){function f(g){l(!1,"Overlapped write"+g+" "+n(a)+" ("+b.name+")")}l("number"===typeof a);l("object"===typeof b);l(!c||"function"===typeof c);l(!d||"function"===typeof d);l(!e||"function"===typeof e);
64
+ l(c||d||e);c||(c=f.bind(this,8));d||(d=f.bind(this,16));e||(e=f.bind(this,32));c&&(this.ports[a].write8=c);d&&(this.ports[a].write16=d);e&&(this.ports[a].write32=e);this.ports[a].device=b};Ia.prototype.register_read_consecutive=function(a,b,c,d,e,f){function g(){return c.call(this)|d.call(this)<<8}function k(){return e.call(this)|f.call(this)<<8}function m(){return c.call(this)|d.call(this)<<8|e.call(this)<<16|f.call(this)<<24}l(4===arguments.length||6===arguments.length);e&&f?(this.register_read(a,
65
+ b,c,g,m),this.register_read(a+1,b,d),this.register_read(a+2,b,e,k),this.register_read(a+3,b,f)):(this.register_read(a,b,c,g),this.register_read(a+1,b,d))};Ia.prototype.register_write_consecutive=function(a,b,c,d,e,f){function g(p){c.call(this,p&255);d.call(this,p>>8&255)}function k(p){e.call(this,p&255);f.call(this,p>>8&255)}function m(p){c.call(this,p&255);d.call(this,p>>8&255);e.call(this,p>>16&255);f.call(this,p>>>24)}l(4===arguments.length||6===arguments.length);e&&f?(this.register_write(a,b,
66
+ c,g,m),this.register_write(a+1,b,d),this.register_write(a+2,b,e,k),this.register_write(a+3,b,f)):(this.register_write(a,b,c,g),this.register_write(a+1,b,d))};Ia.prototype.mmap_read32_shim=function(a){var b=this.cpu.memory_map_read8[a>>>17];return b(a)|b(a+1)<<8|b(a+2)<<16|b(a+3)<<24};Ia.prototype.mmap_write32_shim=function(a,b){var c=this.cpu.memory_map_write8[a>>>17];c(a,b&255);c(a+1,b>>8&255);c(a+2,b>>16&255);c(a+3,b>>>24)};Ia.prototype.mmap_register=function(a,b,c,d,e,f){B("mmap_register addr="+
67
+ n(a>>>0,8)+" size="+n(b,8),32);l(0===(a&131071));l(b&&0===(b&131071));e||(e=this.mmap_read32_shim.bind(this));f||(f=this.mmap_write32_shim.bind(this));for(a>>>=17;0<b;a++)this.cpu.memory_map_read8[a]=c,this.cpu.memory_map_write8[a]=d,this.cpu.memory_map_read32[a]=e,this.cpu.memory_map_write32[a]=f,b-=131072};Ia.prototype.port_write8=function(a,b){var c=this.ports[a];c.write8===this.empty_port_write&&B("write8 port #"+n(a,4)+" <- "+n(b,2)+this.get_port_description(a),32);return c.write8.call(c.device,
68
+ b)};Ia.prototype.port_write16=function(a,b){var c=this.ports[a];c.write16===this.empty_port_write&&B("write16 port #"+n(a,4)+" <- "+n(b,4)+this.get_port_description(a),32);return c.write16.call(c.device,b)};Ia.prototype.port_write32=function(a,b){var c=this.ports[a];c.write32===this.empty_port_write&&B("write32 port #"+n(a,4)+" <- "+n(b>>>0,8)+this.get_port_description(a),32);return c.write32.call(c.device,b)};Ia.prototype.port_read8=function(a){var b=this.ports[a];b.read8===this.empty_port_read8&&
69
+ B("read8 port #"+n(a,4)+this.get_port_description(a),32);b=b.read8.call(b.device,a);l("number"===typeof b);(0>b||256<=b)&&l(!1,"8 bit port returned large value: "+n(a));return b};Ia.prototype.port_read16=function(a){var b=this.ports[a];b.read16===this.empty_port_read16&&B("read16 port #"+n(a,4)+this.get_port_description(a),32);b=b.read16.call(b.device,a);l("number"===typeof b);(0>b||65536<=b)&&l(!1,"16 bit port returned large value: "+n(a));return b};Ia.prototype.port_read32=function(a){var b=this.ports[a];
70
+ b.read32===this.empty_port_read32&&B("read32 port #"+n(a,4)+this.get_port_description(a),32);a=b.read32.call(b.device,a);l((a|0)===a);return a};var Ja={4:"PORT_DMA_ADDR_2",5:"PORT_DMA_CNT_2",10:"PORT_DMA1_MASK_REG",11:"PORT_DMA1_MODE_REG",12:"PORT_DMA1_CLEAR_FF_REG",13:"PORT_DMA1_MASTER_CLEAR",32:"PORT_PIC1_CMD",33:"PORT_PIC1_DATA",64:"PORT_PIT_COUNTER0",65:"PORT_PIT_COUNTER1",66:"PORT_PIT_COUNTER2",67:"PORT_PIT_MODE",96:"PORT_PS2_DATA",97:"PORT_PS2_CTRLB",100:"PORT_PS2_STATUS",112:"PORT_CMOS_INDEX",
71
71
  113:"PORT_CMOS_DATA",128:"PORT_DIAG",129:"PORT_DMA_PAGE_2",146:"PORT_A20",160:"PORT_PIC2_CMD",161:"PORT_PIC2_DATA",178:"PORT_SMI_CMD",179:"PORT_SMI_STATUS",212:"PORT_DMA2_MASK_REG",214:"PORT_DMA2_MODE_REG",218:"PORT_DMA2_MASTER_CLEAR",240:"PORT_MATH_CLEAR",368:"PORT_ATA2_CMD_BASE",496:"PORT_ATA1_CMD_BASE",632:"PORT_LPT2",744:"PORT_SERIAL4",760:"PORT_SERIAL2",884:"PORT_ATA2_CTRL_BASE",888:"PORT_LPT1",1E3:"PORT_SERIAL3",1008:"PORT_FD_BASE",1010:"PORT_FD_DOR",1012:"PORT_FD_STATUS",1013:"PORT_FD_DATA",
72
- 1014:"PORT_HD_DATA",1015:"PORT_FD_DIR",1016:"PORT_SERIAL1",3320:"PORT_PCI_CMD",3321:"PORT_PCI_REBOOT",3324:"PORT_PCI_DATA",1026:"PORT_BIOS_DEBUG",1296:"PORT_QEMU_CFG_CTL",1297:"PORT_QEMU_CFG_DATA",45056:"PORT_ACPI_PM_BASE",45312:"PORT_SMB_BASE",35072:"PORT_BIOS_APM"};Fa.prototype.get_port_description=function(a){return Ga[a]?" ("+Ga[a]+")":""};var Ia={};function Ja(){this.listeners={};this.pair=void 0}Ja.prototype.register=function(a,b,c){var d=this.listeners[a];void 0===d&&(d=this.listeners[a]=
73
- []);d.push({fn:b,this_value:c})};Ja.prototype.unregister=function(a,b){var c=this.listeners[a];void 0!==c&&(this.listeners[a]=c.filter(function(d){return d.fn!==b}))};Ja.prototype.send=function(a,b){if(this.pair&&(a=this.pair.listeners[a],void 0!==a))for(var c=0;c<a.length;c++){var d=a[c];d.fn.call(d.this_value,b)}};Ja.prototype.send_async=function(a,b){l(1===arguments.length||2===arguments.length);setTimeout(this.send.bind(this,a,b),0)};Ia.create=function(){var a=new Ja,b=new Ja;a.pair=b;b.pair=
74
- a;return[a,b]};var Ka=new Uint8Array(256),La=[],Oa=[],Pa=[],Qa=new Uint8Array(256),Ra=[];function D(a,b){this.cpu=a;this.bus=b;this.write_buffer=new na(64);this.read_buffer=new na(64);this.mixer_current_address=this.command_size=this.command=this.read_buffer_lastvalue=0;this.mixer_registers=new Uint8Array(256);this.mixer_reset();this.dummy_speaker_enabled=!1;this.test_register=0;this.dsp_signed=this.dsp_16bit=this.dsp_stereo=this.dsp_highspeed=!1;this.dac_buffers=[new oa(65536),new oa(65536)];this.dma=
75
- a.devices.dma;this.dma_channel=this.dma_irq=this.dma_bytes_block=this.dma_bytes_left=this.dma_bytes_count=this.dma_sample_count=0;this.dma_channel_8bit=1;this.dma_channel_16bit=5;this.dma_autoinit=!1;this.dma_buffer=new ArrayBuffer(65536);this.dma_buffer_int8=new Int8Array(this.dma_buffer);this.dma_buffer_uint8=new Uint8Array(this.dma_buffer);this.dma_buffer_int16=new Int16Array(this.dma_buffer);this.dma_buffer_uint16=new Uint16Array(this.dma_buffer);this.dma_syncbuffer=new za(this.dma_buffer);this.dma_paused=
72
+ 1014:"PORT_HD_DATA",1015:"PORT_FD_DIR",1016:"PORT_SERIAL1",3320:"PORT_PCI_CMD",3321:"PORT_PCI_REBOOT",3324:"PORT_PCI_DATA",1026:"PORT_BIOS_DEBUG",1296:"PORT_QEMU_CFG_CTL",1297:"PORT_QEMU_CFG_DATA",45056:"PORT_ACPI_PM_BASE",45312:"PORT_SMB_BASE",35072:"PORT_BIOS_APM"};Ia.prototype.get_port_description=function(a){return Ja[a]?" ("+Ja[a]+")":""};var Ka={};function La(){this.listeners={};this.pair=void 0}La.prototype.register=function(a,b,c){var d=this.listeners[a];void 0===d&&(d=this.listeners[a]=
73
+ []);d.push({fn:b,this_value:c})};La.prototype.unregister=function(a,b){var c=this.listeners[a];void 0!==c&&(this.listeners[a]=c.filter(function(d){return d.fn!==b}))};La.prototype.send=function(a,b){if(this.pair&&(a=this.pair.listeners[a],void 0!==a))for(var c=0;c<a.length;c++){var d=a[c];d.fn.call(d.this_value,b)}};La.prototype.send_async=function(a,b){l(1===arguments.length||2===arguments.length);setTimeout(this.send.bind(this,a,b),0)};Ka.create=function(){var a=new La,b=new La;a.pair=b;b.pair=
74
+ a;return[a,b]};var Ma=new Uint8Array(256),Pa=[],Qa=[],Ra=[],Sa=new Uint8Array(256),Ta=[];function D(a,b){this.cpu=a;this.bus=b;this.write_buffer=new na(64);this.read_buffer=new na(64);this.mixer_current_address=this.command_size=this.command=this.read_buffer_lastvalue=0;this.mixer_registers=new Uint8Array(256);this.mixer_reset();this.dummy_speaker_enabled=!1;this.test_register=0;this.dsp_signed=this.dsp_16bit=this.dsp_stereo=this.dsp_highspeed=!1;this.dac_buffers=[new oa(65536),new oa(65536)];this.dma=
75
+ a.devices.dma;this.dma_channel=this.dma_irq=this.dma_bytes_block=this.dma_bytes_left=this.dma_bytes_count=this.dma_sample_count=0;this.dma_channel_8bit=1;this.dma_channel_16bit=5;this.dma_autoinit=!1;this.dma_buffer=new ArrayBuffer(65536);this.dma_buffer_int8=new Int8Array(this.dma_buffer);this.dma_buffer_uint8=new Uint8Array(this.dma_buffer);this.dma_buffer_int16=new Int16Array(this.dma_buffer);this.dma_buffer_uint16=new Uint16Array(this.dma_buffer);this.dma_syncbuffer=new Ba(this.dma_buffer);this.dma_paused=
76
76
  this.dma_waiting_transfer=!1;this.sampling_rate=22050;b.send("dac-tell-sampling-rate",this.sampling_rate);this.bytes_per_sample=1;this.e2_value=170;this.e2_count=0;this.asp_registers=new Uint8Array(256);this.mpu_read_buffer=new na(64);this.fm_current_address1=this.fm_current_address0=this.mpu_read_buffer_lastvalue=0;this.fm_waveform_select_enable=!1;this.irq=5;this.irq_triggered=new Uint8Array(16);a.io.register_read_consecutive(544,this,this.port2x0_read,this.port2x1_read,this.port2x2_read,this.port2x3_read);
77
77
  a.io.register_read_consecutive(904,this,this.port2x0_read,this.port2x1_read);a.io.register_read_consecutive(548,this,this.port2x4_read,this.port2x5_read);a.io.register_read(550,this,this.port2x6_read);a.io.register_read(551,this,this.port2x7_read);a.io.register_read(552,this,this.port2x8_read);a.io.register_read(553,this,this.port2x9_read);a.io.register_read(554,this,this.port2xA_read);a.io.register_read(555,this,this.port2xB_read);a.io.register_read(556,this,this.port2xC_read);a.io.register_read(557,
78
78
  this,this.port2xD_read);a.io.register_read_consecutive(558,this,this.port2xE_read,this.port2xF_read);a.io.register_write_consecutive(544,this,this.port2x0_write,this.port2x1_write,this.port2x2_write,this.port2x3_write);a.io.register_write_consecutive(904,this,this.port2x0_write,this.port2x1_write);a.io.register_write_consecutive(548,this,this.port2x4_write,this.port2x5_write);a.io.register_write(550,this,this.port2x6_write);a.io.register_write(551,this,this.port2x7_write);a.io.register_write_consecutive(552,
@@ -82,78 +82,78 @@ this.dma_channel=this.dma_irq=this.dma_bytes_block=this.dma_bytes_left=this.dma_
82
82
  a[4]=this.command_size;a[5]=this.mixer_current_address;a[6]=this.mixer_registers;a[7]=this.dummy_speaker_enabled;a[8]=this.test_register;a[9]=this.dsp_highspeed;a[10]=this.dsp_stereo;a[11]=this.dsp_16bit;a[12]=this.dsp_signed;a[15]=this.dma_sample_count;a[16]=this.dma_bytes_count;a[17]=this.dma_bytes_left;a[18]=this.dma_bytes_block;a[19]=this.dma_irq;a[20]=this.dma_channel;a[21]=this.dma_channel_8bit;a[22]=this.dma_channel_16bit;a[23]=this.dma_autoinit;a[24]=this.dma_buffer_uint8;a[25]=this.dma_waiting_transfer;
83
83
  a[26]=this.dma_paused;a[27]=this.sampling_rate;a[28]=this.bytes_per_sample;a[29]=this.e2_value;a[30]=this.e2_count;a[31]=this.asp_registers;a[33]=this.mpu_read_buffer_last_value;a[34]=this.irq;a[35]=this.irq_triggered;return a};D.prototype.set_state=function(a){this.read_buffer_lastvalue=a[2];this.command=a[3];this.command_size=a[4];this.mixer_current_address=a[5];this.mixer_registers=a[6];this.mixer_full_update();this.dummy_speaker_enabled=a[7];this.test_register=a[8];this.dsp_highspeed=a[9];this.dsp_stereo=
84
84
  a[10];this.dsp_16bit=a[11];this.dsp_signed=a[12];this.dma_sample_count=a[15];this.dma_bytes_count=a[16];this.dma_bytes_left=a[17];this.dma_bytes_block=a[18];this.dma_irq=a[19];this.dma_channel=a[20];this.dma_channel_8bit=a[21];this.dma_channel_16bit=a[22];this.dma_autoinit=a[23];this.dma_buffer_uint8=a[24];this.dma_waiting_transfer=a[25];this.dma_paused=a[26];this.sampling_rate=a[27];this.bytes_per_sample=a[28];this.e2_value=a[29];this.e2_count=a[30];this.asp_registers=a[31];this.mpu_read_buffer_last_value=
85
- a[33];this.irq=a[34];this.irq_triggered=a[35];this.dma_buffer=this.dma_buffer_uint8.buffer;this.dma_buffer_int8=new Int8Array(this.dma_buffer);this.dma_buffer_int16=new Int16Array(this.dma_buffer);this.dma_buffer_uint16=new Uint16Array(this.dma_buffer);this.dma_syncbuffer=new za(this.dma_buffer);this.dma_paused?this.bus.send("dac-disable"):this.bus.send("dac-enable")};D.prototype.port2x0_read=function(){B("220 read: fm music status port (unimplemented)",8388608);return 255};D.prototype.port2x1_read=
85
+ a[33];this.irq=a[34];this.irq_triggered=a[35];this.dma_buffer=this.dma_buffer_uint8.buffer;this.dma_buffer_int8=new Int8Array(this.dma_buffer);this.dma_buffer_int16=new Int16Array(this.dma_buffer);this.dma_buffer_uint16=new Uint16Array(this.dma_buffer);this.dma_syncbuffer=new Ba(this.dma_buffer);this.dma_paused?this.bus.send("dac-disable"):this.bus.send("dac-enable")};D.prototype.port2x0_read=function(){B("220 read: fm music status port (unimplemented)",8388608);return 255};D.prototype.port2x1_read=
86
86
  function(){B("221 read: fm music data port (write only)",8388608);return 255};D.prototype.port2x2_read=function(){B("222 read: advanced fm music status port (unimplemented)",8388608);return 255};D.prototype.port2x3_read=function(){B("223 read: advanced music data port (write only)",8388608);return 255};D.prototype.port2x4_read=function(){B("224 read: mixer address port",8388608);return this.mixer_current_address};D.prototype.port2x5_read=function(){B("225 read: mixer data port",8388608);return this.mixer_read(this.mixer_current_address)};
87
87
  D.prototype.port2x6_read=function(){B("226 read: (write only)",8388608);return 255};D.prototype.port2x7_read=function(){B("227 read: undocumented",8388608);return 255};D.prototype.port2x8_read=function(){B("228 read: fm music status port (unimplemented)",8388608);return 255};D.prototype.port2x9_read=function(){B("229 read: fm music data port (write only)",8388608);return 255};D.prototype.port2xA_read=function(){B("22A read: read data",8388608);this.read_buffer.length&&(this.read_buffer_lastvalue=
88
88
  this.read_buffer.shift());B(" <- "+this.read_buffer_lastvalue+" "+n(this.read_buffer_lastvalue)+" '"+String.fromCharCode(this.read_buffer_lastvalue)+"'",8388608);return this.read_buffer_lastvalue};D.prototype.port2xB_read=function(){B("22B read: undocumented",8388608);return 255};D.prototype.port2xC_read=function(){B("22C read: write-buffer status",8388608);return 127};D.prototype.port2xD_read=function(){B("22D read: undocumented",8388608);return 255};D.prototype.port2xE_read=function(){B("22E read: read-buffer status / irq 8bit ack.",
89
- 8388608);this.irq_triggered[1]&&this.lower_irq(1);return(this.read_buffer.length&&!this.dsp_highspeed)<<7|127};D.prototype.port2xF_read=function(){B("22F read: irq 16bit ack",8388608);this.lower_irq(2);return 0};D.prototype.port2x0_write=function(a){B("220 write: (unimplemented) fm register 0 address = "+n(a),8388608);this.fm_current_address0=0};D.prototype.port2x1_write=function(a){B("221 write: (unimplemented) fm register 0 data = "+n(a),8388608);var b=Ra[this.fm_current_address0];b||(b=this.fm_default_write);
90
- b.call(this,a,0,this.fm_current_address0)};D.prototype.port2x2_write=function(a){B("222 write: (unimplemented) fm register 1 address = "+n(a),8388608);this.fm_current_address1=0};D.prototype.port2x3_write=function(a){B("223 write: (unimplemented) fm register 1 data ="+n(a),8388608);var b=Ra[this.fm_current_address1];b||(b=this.fm_default_write);b.call(this,a,1,this.fm_current_address1)};D.prototype.port2x4_write=function(a){B("224 write: mixer address = "+n(a),8388608);this.mixer_current_address=
89
+ 8388608);this.irq_triggered[1]&&this.lower_irq(1);return(this.read_buffer.length&&!this.dsp_highspeed)<<7|127};D.prototype.port2xF_read=function(){B("22F read: irq 16bit ack",8388608);this.lower_irq(2);return 0};D.prototype.port2x0_write=function(a){B("220 write: (unimplemented) fm register 0 address = "+n(a),8388608);this.fm_current_address0=0};D.prototype.port2x1_write=function(a){B("221 write: (unimplemented) fm register 0 data = "+n(a),8388608);var b=Ta[this.fm_current_address0];b||(b=this.fm_default_write);
90
+ b.call(this,a,0,this.fm_current_address0)};D.prototype.port2x2_write=function(a){B("222 write: (unimplemented) fm register 1 address = "+n(a),8388608);this.fm_current_address1=0};D.prototype.port2x3_write=function(a){B("223 write: (unimplemented) fm register 1 data ="+n(a),8388608);var b=Ta[this.fm_current_address1];b||(b=this.fm_default_write);b.call(this,a,1,this.fm_current_address1)};D.prototype.port2x4_write=function(a){B("224 write: mixer address = "+n(a),8388608);this.mixer_current_address=
91
91
  a};D.prototype.port2x5_write=function(a){B("225 write: mixer data = "+n(a),8388608);this.mixer_write(this.mixer_current_address,a)};D.prototype.port2x6_write=function(a){B("226 write: reset = "+n(a),8388608);this.dsp_highspeed?(B(" -> exit highspeed",8388608),this.dsp_highspeed=!1):a&&(B(" -> reset",8388608),this.dsp_reset());this.read_buffer.clear();this.read_buffer.push(170)};D.prototype.port2x7_write=function(){B("227 write: undocumented",8388608)};D.prototype.port2x8_write=function(){B("228 write: fm music register port (unimplemented)",
92
- 8388608)};D.prototype.port2x9_write=function(){B("229 write: fm music data port (unimplemented)",8388608)};D.prototype.port2xA_write=function(){B("22A write: dsp read data port (read only)",8388608)};D.prototype.port2xB_write=function(){B("22B write: undocumented",8388608)};D.prototype.port2xC_write=function(a){B("22C write: write command/data",8388608);0===this.command?(B("22C write: command = "+n(a),8388608),this.command=a,this.write_buffer.clear(),this.command_size=Ka[a]):(B("22C write: data: "+
92
+ 8388608)};D.prototype.port2x9_write=function(){B("229 write: fm music data port (unimplemented)",8388608)};D.prototype.port2xA_write=function(){B("22A write: dsp read data port (read only)",8388608)};D.prototype.port2xB_write=function(){B("22B write: undocumented",8388608)};D.prototype.port2xC_write=function(a){B("22C write: write command/data",8388608);0===this.command?(B("22C write: command = "+n(a),8388608),this.command=a,this.write_buffer.clear(),this.command_size=Ma[a]):(B("22C write: data: "+
93
93
  n(a),8388608),this.write_buffer.push(a));this.write_buffer.length>=this.command_size&&this.command_do()};D.prototype.port2xD_write=function(){B("22D write: undocumented",8388608)};D.prototype.port2xE_write=function(){B("22E write: dsp read buffer status (read only)",8388608)};D.prototype.port2xF_write=function(){B("22F write: undocumented",8388608)};D.prototype.port3x0_read=function(){B("330 read: mpu data",8388608);this.mpu_read_buffer.length&&(this.mpu_read_buffer_lastvalue=this.mpu_read_buffer.shift());
94
- B(" <- "+n(this.mpu_read_buffer_lastvalue),8388608);return this.mpu_read_buffer_lastvalue};D.prototype.port3x0_write=function(a){B("330 write: mpu data (unimplemented) : "+n(a),8388608)};D.prototype.port3x1_read=function(){B("331 read: mpu status",8388608);return 0|128*!this.mpu_read_buffer.length};D.prototype.port3x1_write=function(a){B("331 write: mpu command: "+n(a),8388608);255===a&&(this.mpu_read_buffer.clear(),this.mpu_read_buffer.push(254))};D.prototype.command_do=function(){var a=La[this.command];
95
- a||(a=this.dsp_default_handler);a.call(this);this.command_size=this.command=0;this.write_buffer.clear()};D.prototype.dsp_default_handler=function(){B("Unhandled command: "+n(this.command),8388608)};function H(a,b,c){c||(c=D.prototype.dsp_default_handler);for(var d=0;d<a.length;d++)Ka[a[d]]=b,La[a[d]]=c}function Sa(a){for(var b=[],c=0;16>c;c++)b.push(a+c);return b}H([14],2,function(){this.asp_registers[this.write_buffer.shift()]=this.write_buffer.shift()});H([15],1,function(){this.read_buffer.clear();
96
- this.read_buffer.push(this.asp_registers[this.write_buffer.shift()])});H([16],1,function(){var a=this.write_buffer.shift();a=Ta(a/127.5+-1,-1,1);this.dac_buffers[0].push(a);this.dac_buffers[1].push(a);this.bus.send("dac-enable")});H([20,21],2,function(){this.dma_irq=1;this.dma_channel=this.dma_channel_8bit;this.dsp_highspeed=this.dsp_16bit=this.dsp_signed=this.dma_autoinit=!1;this.dma_transfer_size_set();this.dma_transfer_start()});H([22],2);H([23],2);H([28],0,function(){this.dma_irq=1;this.dma_channel=
97
- this.dma_channel_8bit;this.dma_autoinit=!0;this.dsp_highspeed=this.dsp_16bit=this.dsp_signed=!1;this.dma_transfer_start()});H([31],0);H([32],0,function(){this.read_buffer.clear();this.read_buffer.push(127)});H([36],2);H([44],0);H([48],0);H([49],0);H([52],0);H([53],0);H([54],0);H([55],0);H([56],0);H([64],1,function(){this.sampling_rate_change(1E6/(256-this.write_buffer.shift())/this.get_channel_count())});H([65,66],2,function(){this.sampling_rate_change(this.write_buffer.shift()<<8|this.write_buffer.shift())});
98
- H([72],2,function(){this.dma_transfer_size_set()});H([116],2);H([117],2);H([118],2);H([119],2);H([125],0);H([127],0);H([128],2);H([144],0,function(){this.dma_irq=1;this.dma_channel=this.dma_channel_8bit;this.dma_autoinit=!0;this.dsp_signed=!1;this.dsp_highspeed=!0;this.dsp_16bit=!1;this.dma_transfer_start()});H([145],0);H([152],0);H([153],0);H([160],0);H([168],0);H(Sa(176),3,function(){if(this.command&8)this.dsp_default_handler();else{var a=this.write_buffer.shift();this.dma_irq=2;this.dma_channel=
99
- this.dma_channel_16bit;this.dma_autoinit=!!(this.command&4);this.dsp_signed=!!(a&16);this.dsp_stereo=!!(a&32);this.dsp_16bit=!0;this.dma_transfer_size_set();this.dma_transfer_start()}});H(Sa(192),3,function(){if(this.command&8)this.dsp_default_handler();else{var a=this.write_buffer.shift();this.dma_irq=1;this.dma_channel=this.dma_channel_8bit;this.dma_autoinit=!!(this.command&4);this.dsp_signed=!!(a&16);this.dsp_stereo=!!(a&32);this.dsp_16bit=!1;this.dma_transfer_size_set();this.dma_transfer_start()}});
100
- H([208],0,function(){this.dma_paused=!0;this.bus.send("dac-disable")});H([209],0,function(){this.dummy_speaker_enabled=!0});H([211],0,function(){this.dummy_speaker_enabled=!1});H([212],0,function(){this.dma_paused=!1;this.bus.send("dac-enable")});H([213],0,function(){this.dma_paused=!0;this.bus.send("dac-disable")});H([214],0,function(){this.dma_paused=!1;this.bus.send("dac-enable")});H([216],0,function(){this.read_buffer.clear();this.read_buffer.push(255*this.dummy_speaker_enabled)});H([217,218],
101
- 0,function(){this.dma_autoinit=!1});H([224],1,function(){this.read_buffer.clear();this.read_buffer.push(~this.write_buffer.shift())});H([225],0,function(){this.read_buffer.clear();this.read_buffer.push(4);this.read_buffer.push(5)});H([226],1);H([227],0,function(){this.read_buffer.clear();for(var a=0;44>a;a++)this.read_buffer.push("COPYRIGHT (C) CREATIVE TECHNOLOGY LTD, 1992.".charCodeAt(a));this.read_buffer.push(0)});H([228],1,function(){this.test_register=this.write_buffer.shift()});H([232],0,function(){this.read_buffer.clear();
102
- this.read_buffer.push(this.test_register)});H([242,243],0,function(){this.raise_irq()});var Ua=new Uint8Array(256);Ua[14]=255;Ua[15]=7;Ua[55]=56;H([249],1,function(){var a=this.write_buffer.shift();B("dsp 0xf9: unknown function. input: "+a,8388608);this.read_buffer.clear();this.read_buffer.push(Ua[a])});D.prototype.mixer_read=function(a){var b=Oa[a];b?b=b.call(this):(b=this.mixer_registers[a],B("unhandled mixer register read. addr:"+n(a)+" data:"+n(b),8388608));return b};D.prototype.mixer_write=function(a,
103
- b){var c=Pa[a];c?c.call(this,b):B("unhandled mixer register write. addr:"+n(a)+" data:"+n(b),8388608)};D.prototype.mixer_default_read=function(){B("mixer register read. addr:"+n(this.mixer_current_address),8388608);return this.mixer_registers[this.mixer_current_address]};D.prototype.mixer_default_write=function(a){B("mixer register write. addr:"+n(this.mixer_current_address)+" data:"+n(a),8388608);this.mixer_registers[this.mixer_current_address]=a};D.prototype.mixer_reset=function(){this.mixer_registers[4]=
94
+ B(" <- "+n(this.mpu_read_buffer_lastvalue),8388608);return this.mpu_read_buffer_lastvalue};D.prototype.port3x0_write=function(a){B("330 write: mpu data (unimplemented) : "+n(a),8388608)};D.prototype.port3x1_read=function(){B("331 read: mpu status",8388608);return 0|128*!this.mpu_read_buffer.length};D.prototype.port3x1_write=function(a){B("331 write: mpu command: "+n(a),8388608);255===a&&(this.mpu_read_buffer.clear(),this.mpu_read_buffer.push(254))};D.prototype.command_do=function(){var a=Pa[this.command];
95
+ a||(a=this.dsp_default_handler);a.call(this);this.command_size=this.command=0;this.write_buffer.clear()};D.prototype.dsp_default_handler=function(){B("Unhandled command: "+n(this.command),8388608)};function G(a,b,c){c||(c=D.prototype.dsp_default_handler);for(var d=0;d<a.length;d++)Ma[a[d]]=b,Pa[a[d]]=c}function Ua(a){for(var b=[],c=0;16>c;c++)b.push(a+c);return b}G([14],2,function(){this.asp_registers[this.write_buffer.shift()]=this.write_buffer.shift()});G([15],1,function(){this.read_buffer.clear();
96
+ this.read_buffer.push(this.asp_registers[this.write_buffer.shift()])});G([16],1,function(){var a=this.write_buffer.shift();a=Va(a/127.5+-1,-1,1);this.dac_buffers[0].push(a);this.dac_buffers[1].push(a);this.bus.send("dac-enable")});G([20,21],2,function(){this.dma_irq=1;this.dma_channel=this.dma_channel_8bit;this.dsp_highspeed=this.dsp_16bit=this.dsp_signed=this.dma_autoinit=!1;this.dma_transfer_size_set();this.dma_transfer_start()});G([22],2);G([23],2);G([28],0,function(){this.dma_irq=1;this.dma_channel=
97
+ this.dma_channel_8bit;this.dma_autoinit=!0;this.dsp_highspeed=this.dsp_16bit=this.dsp_signed=!1;this.dma_transfer_start()});G([31],0);G([32],0,function(){this.read_buffer.clear();this.read_buffer.push(127)});G([36],2);G([44],0);G([48],0);G([49],0);G([52],0);G([53],0);G([54],0);G([55],0);G([56],0);G([64],1,function(){this.sampling_rate_change(1E6/(256-this.write_buffer.shift())/this.get_channel_count())});G([65,66],2,function(){this.sampling_rate_change(this.write_buffer.shift()<<8|this.write_buffer.shift())});
98
+ G([72],2,function(){this.dma_transfer_size_set()});G([116],2);G([117],2);G([118],2);G([119],2);G([125],0);G([127],0);G([128],2);G([144],0,function(){this.dma_irq=1;this.dma_channel=this.dma_channel_8bit;this.dma_autoinit=!0;this.dsp_signed=!1;this.dsp_highspeed=!0;this.dsp_16bit=!1;this.dma_transfer_start()});G([145],0);G([152],0);G([153],0);G([160],0);G([168],0);G(Ua(176),3,function(){if(this.command&8)this.dsp_default_handler();else{var a=this.write_buffer.shift();this.dma_irq=2;this.dma_channel=
99
+ this.dma_channel_16bit;this.dma_autoinit=!!(this.command&4);this.dsp_signed=!!(a&16);this.dsp_stereo=!!(a&32);this.dsp_16bit=!0;this.dma_transfer_size_set();this.dma_transfer_start()}});G(Ua(192),3,function(){if(this.command&8)this.dsp_default_handler();else{var a=this.write_buffer.shift();this.dma_irq=1;this.dma_channel=this.dma_channel_8bit;this.dma_autoinit=!!(this.command&4);this.dsp_signed=!!(a&16);this.dsp_stereo=!!(a&32);this.dsp_16bit=!1;this.dma_transfer_size_set();this.dma_transfer_start()}});
100
+ G([208],0,function(){this.dma_paused=!0;this.bus.send("dac-disable")});G([209],0,function(){this.dummy_speaker_enabled=!0});G([211],0,function(){this.dummy_speaker_enabled=!1});G([212],0,function(){this.dma_paused=!1;this.bus.send("dac-enable")});G([213],0,function(){this.dma_paused=!0;this.bus.send("dac-disable")});G([214],0,function(){this.dma_paused=!1;this.bus.send("dac-enable")});G([216],0,function(){this.read_buffer.clear();this.read_buffer.push(255*this.dummy_speaker_enabled)});G([217,218],
101
+ 0,function(){this.dma_autoinit=!1});G([224],1,function(){this.read_buffer.clear();this.read_buffer.push(~this.write_buffer.shift())});G([225],0,function(){this.read_buffer.clear();this.read_buffer.push(4);this.read_buffer.push(5)});G([226],1);G([227],0,function(){this.read_buffer.clear();for(var a=0;44>a;a++)this.read_buffer.push("COPYRIGHT (C) CREATIVE TECHNOLOGY LTD, 1992.".charCodeAt(a));this.read_buffer.push(0)});G([228],1,function(){this.test_register=this.write_buffer.shift()});G([232],0,function(){this.read_buffer.clear();
102
+ this.read_buffer.push(this.test_register)});G([242,243],0,function(){this.raise_irq()});var Xa=new Uint8Array(256);Xa[14]=255;Xa[15]=7;Xa[55]=56;G([249],1,function(){var a=this.write_buffer.shift();B("dsp 0xf9: unknown function. input: "+a,8388608);this.read_buffer.clear();this.read_buffer.push(Xa[a])});D.prototype.mixer_read=function(a){var b=Qa[a];b?b=b.call(this):(b=this.mixer_registers[a],B("unhandled mixer register read. addr:"+n(a)+" data:"+n(b),8388608));return b};D.prototype.mixer_write=function(a,
103
+ b){var c=Ra[a];c?c.call(this,b):B("unhandled mixer register write. addr:"+n(a)+" data:"+n(b),8388608)};D.prototype.mixer_default_read=function(){B("mixer register read. addr:"+n(this.mixer_current_address),8388608);return this.mixer_registers[this.mixer_current_address]};D.prototype.mixer_default_write=function(a){B("mixer register write. addr:"+n(this.mixer_current_address)+" data:"+n(a),8388608);this.mixer_registers[this.mixer_current_address]=a};D.prototype.mixer_reset=function(){this.mixer_registers[4]=
104
104
  204;this.mixer_registers[34]=204;this.mixer_registers[38]=204;this.mixer_registers[40]=0;this.mixer_registers[46]=0;this.mixer_registers[10]=0;this.mixer_registers[48]=192;this.mixer_registers[49]=192;this.mixer_registers[50]=192;this.mixer_registers[51]=192;this.mixer_registers[52]=192;this.mixer_registers[53]=192;this.mixer_registers[54]=0;this.mixer_registers[55]=0;this.mixer_registers[56]=0;this.mixer_registers[57]=0;this.mixer_registers[59]=0;this.mixer_registers[60]=31;this.mixer_registers[61]=
105
- 21;this.mixer_registers[62]=11;this.mixer_registers[63]=0;this.mixer_registers[64]=0;this.mixer_registers[65]=0;this.mixer_registers[66]=0;this.mixer_registers[67]=0;this.mixer_registers[68]=128;this.mixer_registers[69]=128;this.mixer_registers[70]=128;this.mixer_registers[71]=128;this.mixer_full_update()};D.prototype.mixer_full_update=function(){for(var a=1;a<this.mixer_registers.length;a++)Qa[a]||this.mixer_write(a,this.mixer_registers[a])};function Wa(a,b){b||(b=D.prototype.mixer_default_read);
106
- Oa[a]=b}function Xa(a,b){b||(b=D.prototype.mixer_default_write);Pa[a]=b}function Ya(a,b,c){Qa[a]=1;Oa[a]=function(){return this.mixer_registers[b]&240|this.mixer_registers[c]>>>4};Pa[a]=function(d){this.mixer_registers[a]=d;var e=d<<4&240|this.mixer_registers[c]&15;this.mixer_write(b,d&240|this.mixer_registers[b]&15);this.mixer_write(c,e)}}function Za(a,b,c){Oa[a]=D.prototype.mixer_default_read;Pa[a]=function(d){this.mixer_registers[a]=d;this.bus.send("mixer-volume",[b,c,(d>>>2)-62])}}Wa(0,function(){this.mixer_reset();
107
- return 0});Xa(0);Ya(4,50,51);Ya(34,48,49);Ya(38,52,53);Ya(40,54,55);Ya(46,56,57);Za(48,0,0);Za(49,0,1);Za(50,2,0);Za(51,2,1);Wa(59);Xa(59,function(a){this.mixer_registers[59]=a;this.bus.send("mixer-volume",[1,2,6*(a>>>6)-18])});Wa(65);Xa(65,function(a){this.mixer_registers[65]=a;this.bus.send("mixer-gain-left",6*(a>>>6))});Wa(66);Xa(66,function(a){this.mixer_registers[66]=a;this.bus.send("mixer-gain-right",6*(a>>>6))});Wa(68);Xa(68,function(a){this.mixer_registers[68]=a;a>>>=3;this.bus.send("mixer-treble-left",
108
- a-(16>a?14:16))});Wa(69);Xa(69,function(a){this.mixer_registers[69]=a;a>>>=3;this.bus.send("mixer-treble-right",a-(16>a?14:16))});Wa(70);Xa(70,function(a){this.mixer_registers[70]=a;a>>>=3;this.bus.send("mixer-bass-right",a-(16>a?14:16))});Wa(71);Xa(71,function(a){this.mixer_registers[71]=a;a>>>=3;this.bus.send("mixer-bass-right",a-(16>a?14:16))});Wa(128,function(){switch(this.irq){case 2:return 1;case 5:return 2;case 7:return 4;case 10:return 8;default:return 0}});Xa(128,function(a){a&1&&(this.irq=
109
- 2);a&2&&(this.irq=5);a&4&&(this.irq=7);a&8&&(this.irq=10)});Wa(129,function(){var a=0;switch(this.dma_channel_8bit){case 0:a|=1;break;case 1:a|=2;break;case 3:a|=8}switch(this.dma_channel_16bit){case 5:a|=32;break;case 6:a|=64;break;case 7:a|=128}return a});Xa(129,function(a){a&1&&(this.dma_channel_8bit=0);a&2&&(this.dma_channel_8bit=1);a&8&&(this.dma_channel_8bit=3);a&32&&(this.dma_channel_16bit=5);a&64&&(this.dma_channel_16bit=6);a&128&&(this.dma_channel_16bit=7)});Wa(130,function(){for(var a=32,
110
- b=0;16>b;b++)a|=b*this.irq_triggered[b];return a});D.prototype.fm_default_write=function(a,b,c){B("unhandled fm register write. addr:"+b+"|"+n(c)+" data:"+n(a),8388608)};function $a(a,b){b||(b=D.prototype.fm_default_write);for(var c=0;c<a.length;c++)Ra[a[c]]=b}function ab(a,b){for(var c=[];a<=b;a++)c.push(a);return c}const bb=new Uint8Array(32);bb[0]=0;bb[1]=1;bb[2]=2;bb[3]=3;bb[4]=4;bb[5]=5;bb[8]=6;bb[9]=7;bb[10]=8;bb[11]=9;bb[12]=10;bb[13]=11;bb[16]=12;bb[17]=13;bb[18]=14;bb[19]=15;bb[20]=16;bb[21]=
111
- 17;$a([1],function(a,b){this.fm_waveform_select_enable[b]=a&1;this.fm_update_waveforms()});$a([2]);$a([3]);$a([4],function(){});$a([5],function(a,b,c){0===b&&this.fm_default_write(a,b,c)});$a([8],function(){});$a(ab(32,53),function(){});$a(ab(64,85),function(){});$a(ab(96,117),function(){});$a(ab(128,149),function(){});$a(ab(160,168),function(){});$a(ab(176,184),function(){});$a([189],function(){});$a(ab(192,200),function(){});$a(ab(224,245),function(){});D.prototype.fm_update_waveforms=function(){};
105
+ 21;this.mixer_registers[62]=11;this.mixer_registers[63]=0;this.mixer_registers[64]=0;this.mixer_registers[65]=0;this.mixer_registers[66]=0;this.mixer_registers[67]=0;this.mixer_registers[68]=128;this.mixer_registers[69]=128;this.mixer_registers[70]=128;this.mixer_registers[71]=128;this.mixer_full_update()};D.prototype.mixer_full_update=function(){for(var a=1;a<this.mixer_registers.length;a++)Sa[a]||this.mixer_write(a,this.mixer_registers[a])};function Ya(a,b){b||(b=D.prototype.mixer_default_read);
106
+ Qa[a]=b}function Za(a,b){b||(b=D.prototype.mixer_default_write);Ra[a]=b}function $a(a,b,c){Sa[a]=1;Qa[a]=function(){return this.mixer_registers[b]&240|this.mixer_registers[c]>>>4};Ra[a]=function(d){this.mixer_registers[a]=d;var e=d<<4&240|this.mixer_registers[c]&15;this.mixer_write(b,d&240|this.mixer_registers[b]&15);this.mixer_write(c,e)}}function ab(a,b,c){Qa[a]=D.prototype.mixer_default_read;Ra[a]=function(d){this.mixer_registers[a]=d;this.bus.send("mixer-volume",[b,c,(d>>>2)-62])}}Ya(0,function(){this.mixer_reset();
107
+ return 0});Za(0);$a(4,50,51);$a(34,48,49);$a(38,52,53);$a(40,54,55);$a(46,56,57);ab(48,0,0);ab(49,0,1);ab(50,2,0);ab(51,2,1);Ya(59);Za(59,function(a){this.mixer_registers[59]=a;this.bus.send("mixer-volume",[1,2,6*(a>>>6)-18])});Ya(65);Za(65,function(a){this.mixer_registers[65]=a;this.bus.send("mixer-gain-left",6*(a>>>6))});Ya(66);Za(66,function(a){this.mixer_registers[66]=a;this.bus.send("mixer-gain-right",6*(a>>>6))});Ya(68);Za(68,function(a){this.mixer_registers[68]=a;a>>>=3;this.bus.send("mixer-treble-left",
108
+ a-(16>a?14:16))});Ya(69);Za(69,function(a){this.mixer_registers[69]=a;a>>>=3;this.bus.send("mixer-treble-right",a-(16>a?14:16))});Ya(70);Za(70,function(a){this.mixer_registers[70]=a;a>>>=3;this.bus.send("mixer-bass-right",a-(16>a?14:16))});Ya(71);Za(71,function(a){this.mixer_registers[71]=a;a>>>=3;this.bus.send("mixer-bass-right",a-(16>a?14:16))});Ya(128,function(){switch(this.irq){case 2:return 1;case 5:return 2;case 7:return 4;case 10:return 8;default:return 0}});Za(128,function(a){a&1&&(this.irq=
109
+ 2);a&2&&(this.irq=5);a&4&&(this.irq=7);a&8&&(this.irq=10)});Ya(129,function(){var a=0;switch(this.dma_channel_8bit){case 0:a|=1;break;case 1:a|=2;break;case 3:a|=8}switch(this.dma_channel_16bit){case 5:a|=32;break;case 6:a|=64;break;case 7:a|=128}return a});Za(129,function(a){a&1&&(this.dma_channel_8bit=0);a&2&&(this.dma_channel_8bit=1);a&8&&(this.dma_channel_8bit=3);a&32&&(this.dma_channel_16bit=5);a&64&&(this.dma_channel_16bit=6);a&128&&(this.dma_channel_16bit=7)});Ya(130,function(){for(var a=32,
110
+ b=0;16>b;b++)a|=b*this.irq_triggered[b];return a});D.prototype.fm_default_write=function(a,b,c){B("unhandled fm register write. addr:"+b+"|"+n(c)+" data:"+n(a),8388608)};function bb(a,b){b||(b=D.prototype.fm_default_write);for(var c=0;c<a.length;c++)Ta[a[c]]=b}function cb(a,b){for(var c=[];a<=b;a++)c.push(a);return c}const db=new Uint8Array(32);db[0]=0;db[1]=1;db[2]=2;db[3]=3;db[4]=4;db[5]=5;db[8]=6;db[9]=7;db[10]=8;db[11]=9;db[12]=10;db[13]=11;db[16]=12;db[17]=13;db[18]=14;db[19]=15;db[20]=16;db[21]=
111
+ 17;bb([1],function(a,b){this.fm_waveform_select_enable[b]=a&1;this.fm_update_waveforms()});bb([2]);bb([3]);bb([4],function(){});bb([5],function(a,b,c){0===b&&this.fm_default_write(a,b,c)});bb([8],function(){});bb(cb(32,53),function(){});bb(cb(64,85),function(){});bb(cb(96,117),function(){});bb(cb(128,149),function(){});bb(cb(160,168),function(){});bb(cb(176,184),function(){});bb([189],function(){});bb(cb(192,200),function(){});bb(cb(224,245),function(){});D.prototype.fm_update_waveforms=function(){};
112
112
  D.prototype.sampling_rate_change=function(a){this.sampling_rate=a;this.bus.send("dac-tell-sampling-rate",a)};D.prototype.get_channel_count=function(){return this.dsp_stereo?2:1};D.prototype.dma_transfer_size_set=function(){this.dma_sample_count=1+(this.write_buffer.shift()<<0)+(this.write_buffer.shift()<<8)};D.prototype.dma_transfer_start=function(){B("begin dma transfer",8388608);this.bytes_per_sample=1;this.dsp_16bit&&(this.bytes_per_sample*=2);this.dma_bytes_count=this.dma_sample_count*this.bytes_per_sample;
113
113
  this.dma_bytes_block=1024*this.bytes_per_sample;this.dma_bytes_block=Math.min(Math.max(this.dma_bytes_count>>2&-4,32),this.dma_bytes_block);this.dma_waiting_transfer=!0;this.dma.channel_mask[this.dma_channel]||this.dma_on_unmask(this.dma_channel)};D.prototype.dma_on_unmask=function(a){a===this.dma_channel&&this.dma_waiting_transfer&&(this.dma_waiting_transfer=!1,this.dma_bytes_left=this.dma_bytes_count,this.dma_paused=!1,this.bus.send("dac-enable"))};D.prototype.dma_transfer_next=function(){B("dma transfering next block",
114
114
  8388608);var a=Math.min(this.dma_bytes_left,this.dma_bytes_block),b=Math.floor(a/this.bytes_per_sample);this.dma.do_write(this.dma_syncbuffer,0,a,this.dma_channel,c=>{B("dma block transfer "+(c?"unsuccessful":"successful"),8388608);c||(this.dma_to_dac(b),this.dma_bytes_left-=a,this.dma_bytes_left||(this.raise_irq(this.dma_irq),this.dma_autoinit&&(this.dma_bytes_left=this.dma_bytes_count)))})};D.prototype.dma_to_dac=function(a){var b=this.dsp_16bit?32767.5:127.5,c=this.dsp_signed?0:-1,d=this.dsp_stereo?
115
- 1:2;var e=this.dsp_16bit?this.dsp_signed?this.dma_buffer_int16:this.dma_buffer_uint16:this.dsp_signed?this.dma_buffer_int8:this.dma_buffer_uint8;for(var f=0,g=0;g<a;g++)for(var k=Ta(e[g]/b+c,-1,1),m=0;m<d;m++)this.dac_buffers[f].push(k),f^=1;this.dac_send()};D.prototype.dac_handle_request=function(){!this.dma_bytes_left||this.dma_paused?this.dac_send():this.dma_transfer_next()};D.prototype.dac_send=function(){if(this.dac_buffers[0].length){var a=this.dac_buffers[0].shift_block(this.dac_buffers[0].length),
116
- b=this.dac_buffers[1].shift_block(this.dac_buffers[1].length);this.bus.send("dac-send-data",[a,b],[a.buffer,b.buffer])}};D.prototype.raise_irq=function(a){B("raise irq",8388608);this.irq_triggered[a]=1;this.cpu.device_raise_irq(this.irq)};D.prototype.lower_irq=function(a){B("lower irq",8388608);this.irq_triggered[a]=0;this.cpu.device_lower_irq(this.irq)};function Ta(a,b,c){return(a<b)*b+(a>c)*c+(b<=a&&a<=c)*a}function cb(a){this.message=a}cb.prototype=Error();const db={Uint8Array,Int8Array,Uint16Array,
117
- Int16Array,Uint32Array,Int32Array,Float32Array,Float64Array};function eb(a,b){if("object"!==typeof a||null===a)return l("function"!==typeof a),a;if(Array.isArray(a))return a.map(f=>eb(f,b));a.constructor===Object&&(console.log(a),l(a.constructor!==Object,"Expected non-object"));if(a.BYTES_PER_ELEMENT){var c=new Uint8Array(a.buffer,a.byteOffset,a.length*a.BYTES_PER_ELEMENT);a=a.constructor.name.replace("bound ","");l(db[a]);return{__state_type__:a,buffer_id:b.push(c)-1}}!a.get_state&&console.log("Object without get_state: ",
118
- a);c=a.get_state();a=[];for(var d=0;d<c.length;d++){var e=c[d];l("function"!==typeof e);a[d]=eb(e,b)}return a}function fb(a,b){if("object"!==typeof a||null===a)return l("function"!==typeof a),a;if(Array.isArray(a)){for(var c=0;c<a.length;c++)a[c]=fb(a[c],b);return a}c=a.__state_type__;l(void 0!==c);const d=db[c];l(d,"Unkown type: "+c);return new d(b[a.buffer_id])}function gb(a,b){function c(t,z){const A=t.length;if(16>A)throw new cb("Invalid length: "+A);t=new Int32Array(t.buffer,t.byteOffset,4);
119
- if(-2039052682!==t[0])throw new cb("Invalid header: "+n(t[0]>>>0));if(6!==t[1])throw new cb("Version mismatch: dump="+t[1]+" we=6");if(z&&t[2]!==A)throw new cb("Length doesn't match header: real="+A+" header="+t[2]);return t[3]}function d(t){t=(new TextDecoder).decode(t);return JSON.parse(t)}b=new Uint8Array(b);if(4247762216===(new Uint32Array(b.buffer,0,1))[0]){var e=a.zstd_create_ctx(b.length);(new Uint8Array(a.wasm_memory.buffer,a.zstd_get_src_ptr(e),b.length)).set(b);var f=a.zstd_read(e,16),g=
115
+ 1:2;var e=this.dsp_16bit?this.dsp_signed?this.dma_buffer_int16:this.dma_buffer_uint16:this.dsp_signed?this.dma_buffer_int8:this.dma_buffer_uint8;for(var f=0,g=0;g<a;g++)for(var k=Va(e[g]/b+c,-1,1),m=0;m<d;m++)this.dac_buffers[f].push(k),f^=1;this.dac_send()};D.prototype.dac_handle_request=function(){!this.dma_bytes_left||this.dma_paused?this.dac_send():this.dma_transfer_next()};D.prototype.dac_send=function(){if(this.dac_buffers[0].length){var a=this.dac_buffers[0].shift_block(this.dac_buffers[0].length),
116
+ b=this.dac_buffers[1].shift_block(this.dac_buffers[1].length);this.bus.send("dac-send-data",[a,b],[a.buffer,b.buffer])}};D.prototype.raise_irq=function(a){B("raise irq",8388608);this.irq_triggered[a]=1;this.cpu.device_raise_irq(this.irq)};D.prototype.lower_irq=function(a){B("lower irq",8388608);this.irq_triggered[a]=0;this.cpu.device_lower_irq(this.irq)};function Va(a,b,c){return(a<b)*b+(a>c)*c+(b<=a&&a<=c)*a}function eb(a){this.message=a}eb.prototype=Error();const fb={Uint8Array,Int8Array,Uint16Array,
117
+ Int16Array,Uint32Array,Int32Array,Float32Array,Float64Array};function gb(a,b){if("object"!==typeof a||null===a)return l("function"!==typeof a),a;if(Array.isArray(a))return a.map(f=>gb(f,b));a.constructor===Object&&(console.log(a),l(a.constructor!==Object,"Expected non-object"));if(a.BYTES_PER_ELEMENT){var c=new Uint8Array(a.buffer,a.byteOffset,a.length*a.BYTES_PER_ELEMENT);a=a.constructor.name.replace("bound ","");l(fb[a]);return{__state_type__:a,buffer_id:b.push(c)-1}}!a.get_state&&console.log("Object without get_state: ",
118
+ a);c=a.get_state();a=[];for(var d=0;d<c.length;d++){var e=c[d];l("function"!==typeof e);a[d]=gb(e,b)}return a}function hb(a,b){if("object"!==typeof a||null===a)return l("function"!==typeof a),a;if(Array.isArray(a)){for(var c=0;c<a.length;c++)a[c]=hb(a[c],b);return a}c=a.__state_type__;l(void 0!==c);const d=fb[c];l(d,"Unkown type: "+c);return new d(b[a.buffer_id])}function ib(a,b){function c(t,z){const A=t.length;if(16>A)throw new eb("Invalid length: "+A);t=new Int32Array(t.buffer,t.byteOffset,4);
119
+ if(-2039052682!==t[0])throw new eb("Invalid header: "+n(t[0]>>>0));if(6!==t[1])throw new eb("Version mismatch: dump="+t[1]+" we=6");if(z&&t[2]!==A)throw new eb("Length doesn't match header: real="+A+" header="+t[2]);return t[3]}function d(t){t=(new TextDecoder).decode(t);return JSON.parse(t)}b=new Uint8Array(b);if(4247762216===(new Uint32Array(b.buffer,0,1))[0]){var e=a.zstd_create_ctx(b.length);(new Uint8Array(a.wasm_memory.buffer,a.zstd_get_src_ptr(e),b.length)).set(b);var f=a.zstd_read(e,16),g=
120
120
  new Uint8Array(a.wasm_memory.buffer,f,16),k=c(g,!1);a.zstd_read_free(f,16);f=a.zstd_read(e,k);g=new Uint8Array(a.wasm_memory.buffer,f,k);g=d(g);a.zstd_read_free(f,k);f=g.state;var m=g.buffer_infos;g=[];k=16+k;for(var p of m){m=(k+3&-4)-k;if(1048576<p.length){var q=a.zstd_read(e,m);a.zstd_read_free(q,m);q=new Uint8Array(p.length);g.push(q.buffer);for(var r=0;r<p.length;){var v=p.length-r;l(0<=v);v=Math.min(v,1048576);const t=a.zstd_read(e,v);q.set(new Uint8Array(a.wasm_memory.buffer,t,v),r);a.zstd_read_free(t,
121
- v);r+=v}}else q=a.zstd_read(e,m+p.length),r=q+m,g.push(a.wasm_memory.buffer.slice(r,r+p.length)),a.zstd_read_free(q,m+p.length);k+=m+p.length}f=fb(f,g);a.set_state(f);a.zstd_free_ctx(e)}else{e=c(b,!0);if(0>e||e+12>=b.length)throw new cb("Invalid info block length: "+e);p=b.subarray(16,16+e);f=d(p);p=f.state;f=f.buffer_infos;let t=16+e;t=t+3&-4;e=f.map(z=>{const A=t+z.offset;return b.buffer.slice(A,A+z.length)});p=fb(p,e);a.set_state(p)}}function hb(a,b,c,d,e){let f="";var g=[],k=b?"compiled":c?"jit exit":
121
+ v);r+=v}}else q=a.zstd_read(e,m+p.length),r=q+m,g.push(a.wasm_memory.buffer.slice(r,r+p.length)),a.zstd_read_free(q,m+p.length);k+=m+p.length}f=hb(f,g);a.set_state(f);a.zstd_free_ctx(e)}else{e=c(b,!0);if(0>e||e+12>=b.length)throw new eb("Invalid info block length: "+e);p=b.subarray(16,16+e);f=d(p);p=f.state;f=f.buffer_infos;let t=16+e;t=t+3&-4;e=f.map(z=>{const A=t+z.offset;return b.buffer.slice(A,A+z.length)});p=hb(p,e);a.set_state(p)}}function jb(a,b,c,d,e){let f="";var g=[],k=b?"compiled":c?"jit exit":
122
122
  d?"unguarded register":e?"wasm size":"executed";for(let q=0;256>q;q++)for(let r=0;8>r;r++)for(const v of[!1,!0]){var m=a.wm.exports.get_opstats_buffer(b,c,d,e,q,!1,v,r);g.push({opcode:q,count:m,is_mem:v,fixed_g:r});m=a.wm.exports.get_opstats_buffer(b,c,d,e,q,!0,v,r);g.push({opcode:3840|q,count:m,is_mem:v,fixed_g:r})}a=0;b=new Set([38,46,54,62,100,101,102,103,240,242,243]);for(const {count:q,opcode:r}of g)b.has(r)||(a+=q);if(0===a)return"";c=new Uint32Array(256);b=new Uint32Array(256);for(const {opcode:q,
123
123
  count:r}of g)3840===(q&65280)?b[q&255]+=r:c[q&255]+=r;f=f+"------------------\nTotal: "+(a+"\n");const p=1E7<a?1E3:1;d=Math.max.apply(Math,g.map(({count:q})=>Math.round(q/p)));d=String(d).length;f+=`Instruction counts ${k} (in ${p}):\n`;for(e=0;256>e;e++)f+=e.toString(16).padStart(2,"0")+":"+ca(Math.round(c[e]/p),d),f=15===e%16?f+"\n":f+" ";f=f+"\n"+`Instruction counts ${k} (0f, in ${p}):\n`;for(k=0;256>k;k++)f+=(k&255).toString(16).padStart(2,"0")+":"+ca(Math.round(b[k]/p),d),f=15===k%16?f+"\n":
124
- f+" ";f+="\n";g=g.filter(({count:q})=>q).sort(({count:q},{count:r})=>r-q);for(const {opcode:q,is_mem:r,fixed_g:v,count:t}of g.slice(0,200))g=q.toString(16)+"_"+v+(r?"_m":"_r"),f+=g+":"+(t/a*100).toFixed(2)+" ";return f+"\n"}function jb(a){this.cpu=a;this.cmos_index=0;this.cmos_data=new Uint8Array(128);this.last_update=this.rtc_time=Date.now();this.next_interrupt_alarm=this.next_interrupt=0;this.periodic_interrupt=!1;this.periodic_interrupt_time=.9765625;this.cmos_a=38;this.cmos_b=2;this.nmi_disabled=
125
- this.cmos_diag_status=this.cmos_c=0;this.update_interrupt=!1;this.update_interrupt_time=0;a.io.register_write(112,this,function(b){this.cmos_index=b&127;this.nmi_disabled=b>>7});a.io.register_write(113,this,this.cmos_port_write);a.io.register_read(113,this,this.cmos_port_read)}jb.prototype.get_state=function(){var a=[];a[0]=this.cmos_index;a[1]=this.cmos_data;a[2]=this.rtc_time;a[3]=this.last_update;a[4]=this.next_interrupt;a[5]=this.next_interrupt_alarm;a[6]=this.periodic_interrupt;a[7]=this.periodic_interrupt_time;
126
- a[8]=this.cmos_a;a[9]=this.cmos_b;a[10]=this.cmos_c;a[11]=this.nmi_disabled;a[12]=this.update_interrupt;a[13]=this.update_interrupt_time;a[14]=this.cmos_diag_status;return a};jb.prototype.set_state=function(a){this.cmos_index=a[0];this.cmos_data=a[1];this.rtc_time=a[2];this.last_update=a[3];this.next_interrupt=a[4];this.next_interrupt_alarm=a[5];this.periodic_interrupt=a[6];this.periodic_interrupt_time=a[7];this.cmos_a=a[8];this.cmos_b=a[9];this.cmos_c=a[10];this.nmi_disabled=a[11];this.update_interrupt=
127
- a[12]||!1;this.update_interrupt_time=a[13]||0;this.cmos_diag_status=a[14]||0};jb.prototype.timer=function(a){a=Date.now();this.rtc_time+=a-this.last_update;this.last_update=a;this.periodic_interrupt&&this.next_interrupt<a?(this.cpu.device_raise_irq(8),this.cmos_c|=192,this.next_interrupt+=this.periodic_interrupt_time*Math.ceil((a-this.next_interrupt)/this.periodic_interrupt_time)):this.next_interrupt_alarm&&this.next_interrupt_alarm<a?(this.cpu.device_raise_irq(8),this.cmos_c|=160,this.next_interrupt_alarm=
128
- 0):this.update_interrupt&&this.update_interrupt_time<a&&(this.cpu.device_raise_irq(8),this.cmos_c|=144,this.update_interrupt_time=a+1E3);let b=100;this.periodic_interrupt&&this.next_interrupt&&(b=Math.min(b,Math.max(0,this.next_interrupt-a)));this.next_interrupt_alarm&&(b=Math.min(b,Math.max(0,this.next_interrupt_alarm-a)));this.update_interrupt&&(b=Math.min(b,Math.max(0,this.update_interrupt_time-a)));return b};jb.prototype.bcd_pack=function(a){for(var b=0,c=0,d;a;)d=a%10,c|=d<<4*b,b++,a=(a-d)/10;
129
- return c};jb.prototype.bcd_unpack=function(a){const b=a&15,c=a>>4&15;l(256>a);l(10>b);l(10>c);return b+10*c};jb.prototype.encode_time=function(a){return this.cmos_b&4?a:this.bcd_pack(a)};jb.prototype.decode_time=function(a){return this.cmos_b&4?a:this.bcd_unpack(a)};jb.prototype.cmos_port_read=function(){var a=this.cmos_index;switch(a){case 0:return B("read second: "+n(this.encode_time((new Date(this.rtc_time)).getUTCSeconds())),65536),this.encode_time((new Date(this.rtc_time)).getUTCSeconds());case 2:return B("read minute: "+
124
+ f+" ";f+="\n";g=g.filter(({count:q})=>q).sort(({count:q},{count:r})=>r-q);for(const {opcode:q,is_mem:r,fixed_g:v,count:t}of g.slice(0,200))g=q.toString(16)+"_"+v+(r?"_m":"_r"),f+=g+":"+(t/a*100).toFixed(2)+" ";return f+"\n"}function kb(a){this.cpu=a;this.cmos_index=0;this.cmos_data=new Uint8Array(128);this.last_update=this.rtc_time=Date.now();this.next_interrupt_alarm=this.next_interrupt=0;this.periodic_interrupt=!1;this.periodic_interrupt_time=.9765625;this.cmos_a=38;this.cmos_b=2;this.nmi_disabled=
125
+ this.cmos_diag_status=this.cmos_c=0;this.update_interrupt=!1;this.update_interrupt_time=0;a.io.register_write(112,this,function(b){this.cmos_index=b&127;this.nmi_disabled=b>>7});a.io.register_write(113,this,this.cmos_port_write);a.io.register_read(113,this,this.cmos_port_read)}kb.prototype.get_state=function(){var a=[];a[0]=this.cmos_index;a[1]=this.cmos_data;a[2]=this.rtc_time;a[3]=this.last_update;a[4]=this.next_interrupt;a[5]=this.next_interrupt_alarm;a[6]=this.periodic_interrupt;a[7]=this.periodic_interrupt_time;
126
+ a[8]=this.cmos_a;a[9]=this.cmos_b;a[10]=this.cmos_c;a[11]=this.nmi_disabled;a[12]=this.update_interrupt;a[13]=this.update_interrupt_time;a[14]=this.cmos_diag_status;return a};kb.prototype.set_state=function(a){this.cmos_index=a[0];this.cmos_data=a[1];this.rtc_time=a[2];this.last_update=a[3];this.next_interrupt=a[4];this.next_interrupt_alarm=a[5];this.periodic_interrupt=a[6];this.periodic_interrupt_time=a[7];this.cmos_a=a[8];this.cmos_b=a[9];this.cmos_c=a[10];this.nmi_disabled=a[11];this.update_interrupt=
127
+ a[12]||!1;this.update_interrupt_time=a[13]||0;this.cmos_diag_status=a[14]||0};kb.prototype.timer=function(a){a=Date.now();this.rtc_time+=a-this.last_update;this.last_update=a;this.periodic_interrupt&&this.next_interrupt<a?(this.cpu.device_raise_irq(8),this.cmos_c|=192,this.next_interrupt+=this.periodic_interrupt_time*Math.ceil((a-this.next_interrupt)/this.periodic_interrupt_time)):this.next_interrupt_alarm&&this.next_interrupt_alarm<a?(this.cpu.device_raise_irq(8),this.cmos_c|=160,this.next_interrupt_alarm=
128
+ 0):this.update_interrupt&&this.update_interrupt_time<a&&(this.cpu.device_raise_irq(8),this.cmos_c|=144,this.update_interrupt_time=a+1E3);let b=100;this.periodic_interrupt&&this.next_interrupt&&(b=Math.min(b,Math.max(0,this.next_interrupt-a)));this.next_interrupt_alarm&&(b=Math.min(b,Math.max(0,this.next_interrupt_alarm-a)));this.update_interrupt&&(b=Math.min(b,Math.max(0,this.update_interrupt_time-a)));return b};kb.prototype.bcd_pack=function(a){for(var b=0,c=0,d;a;)d=a%10,c|=d<<4*b,b++,a=(a-d)/10;
129
+ return c};kb.prototype.bcd_unpack=function(a){const b=a&15,c=a>>4&15;l(256>a);l(10>b);l(10>c);return b+10*c};kb.prototype.encode_time=function(a){return this.cmos_b&4?a:this.bcd_pack(a)};kb.prototype.decode_time=function(a){return this.cmos_b&4?a:this.bcd_unpack(a)};kb.prototype.cmos_port_read=function(){var a=this.cmos_index;switch(a){case 0:return B("read second: "+n(this.encode_time((new Date(this.rtc_time)).getUTCSeconds())),65536),this.encode_time((new Date(this.rtc_time)).getUTCSeconds());case 2:return B("read minute: "+
130
130
  n(this.encode_time((new Date(this.rtc_time)).getUTCMinutes())),65536),this.encode_time((new Date(this.rtc_time)).getUTCMinutes());case 4:return B("read hour: "+n(this.encode_time((new Date(this.rtc_time)).getUTCHours())),65536),this.encode_time((new Date(this.rtc_time)).getUTCHours());case 6:return B("read day: "+n(this.encode_time((new Date(this.rtc_time)).getUTCDay()+1)),65536),this.encode_time((new Date(this.rtc_time)).getUTCDay()+1);case 7:return B("read day of month: "+n(this.encode_time((new Date(this.rtc_time)).getUTCDate())),
131
- 65536),this.encode_time((new Date(this.rtc_time)).getUTCDate());case 8:return B("read month: "+n(this.encode_time((new Date(this.rtc_time)).getUTCMonth()+1)),65536),this.encode_time((new Date(this.rtc_time)).getUTCMonth()+1);case 9:return B("read year: "+n(this.encode_time((new Date(this.rtc_time)).getUTCFullYear()%100)),65536),this.encode_time((new Date(this.rtc_time)).getUTCFullYear()%100);case 10:return 999<=I.microtick()%1E3?this.cmos_a|128:this.cmos_a;case 11:return this.cmos_b;case 12:return this.cpu.device_lower_irq(8),
132
- B("cmos reg C read",65536),a=this.cmos_c,this.cmos_c&=-241,a;case 13:return 128;case 14:return B("cmos diagnostic status read",65536),this.cmos_diag_status;case 50:case 55:return B("read century: "+n(this.encode_time((new Date(this.rtc_time)).getUTCFullYear()/100|0)),65536),this.encode_time((new Date(this.rtc_time)).getUTCFullYear()/100|0);default:return B("cmos read from index "+n(a),65536),this.cmos_data[this.cmos_index]}};jb.prototype.cmos_port_write=function(a){switch(this.cmos_index){case 10:this.cmos_a=
131
+ 65536),this.encode_time((new Date(this.rtc_time)).getUTCDate());case 8:return B("read month: "+n(this.encode_time((new Date(this.rtc_time)).getUTCMonth()+1)),65536),this.encode_time((new Date(this.rtc_time)).getUTCMonth()+1);case 9:return B("read year: "+n(this.encode_time((new Date(this.rtc_time)).getUTCFullYear()%100)),65536),this.encode_time((new Date(this.rtc_time)).getUTCFullYear()%100);case 10:return 999<=H.microtick()%1E3?this.cmos_a|128:this.cmos_a;case 11:return this.cmos_b;case 12:return this.cpu.device_lower_irq(8),
132
+ B("cmos reg C read",65536),a=this.cmos_c,this.cmos_c&=-241,a;case 13:return 128;case 14:return B("cmos diagnostic status read",65536),this.cmos_diag_status;case 50:case 55:return B("read century: "+n(this.encode_time((new Date(this.rtc_time)).getUTCFullYear()/100|0)),65536),this.encode_time((new Date(this.rtc_time)).getUTCFullYear()/100|0);default:return B("cmos read from index "+n(a),65536),this.cmos_data[this.cmos_index]}};kb.prototype.cmos_port_write=function(a){switch(this.cmos_index){case 10:this.cmos_a=
133
133
  a&127;this.periodic_interrupt_time=1E3/(32768>>(this.cmos_a&15)-1);B("Periodic interrupt, a="+n(this.cmos_a,2)+" t="+this.periodic_interrupt_time,65536);break;case 11:this.cmos_b=a;this.cmos_b&128&&(this.cmos_b&=239);this.cmos_b&64&&(this.next_interrupt=Date.now());if(this.cmos_b&32){a=new Date;const b=this.decode_time(this.cmos_data[1]),c=this.decode_time(this.cmos_data[3]),d=this.decode_time(this.cmos_data[5]),e=new Date(Date.UTC(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate(),d,c,b));B("RTC alarm scheduled for "+
134
134
  e+" hh:mm:ss="+d+":"+c+":"+b+" ms_from_now="+(e-a),65536);this.next_interrupt_alarm=+e}this.cmos_b&16&&(B("update interrupt",65536),this.update_interrupt_time=Date.now());B("cmos b="+n(this.cmos_b,2),65536);break;case 14:this.cmos_diag_status=a;break;case 1:case 3:case 5:this.cmos_write(this.cmos_index,a);break;default:B("cmos write index "+n(this.cmos_index)+": "+n(a),65536)}this.update_interrupt=16===(this.cmos_b&16)&&0<(this.cmos_a&15);this.periodic_interrupt=64===(this.cmos_b&64)&&0<(this.cmos_a&
135
- 15)};jb.prototype.cmos_read=function(a){l(128>a);return this.cmos_data[a]};jb.prototype.cmos_write=function(a,b){B("cmos "+n(a)+" <- "+n(b),65536);l(128>a);this.cmos_data[a]=b};function kb(a,b){this.cpu=a;this.bus=b;this.counter_start_time=new Float64Array(3);this.counter_start_value=new Uint16Array(3);this.counter_next_low=new Uint8Array(4);this.counter_enabled=new Uint8Array(4);this.counter_mode=new Uint8Array(4);this.counter_read_mode=new Uint8Array(4);this.counter_latch=new Uint8Array(4);this.counter_latch_value=
136
- new Uint16Array(3);this.counter_reload=new Uint16Array(3);a.io.register_read(97,this,function(){var c=I.microtick(),d=66.66666666666667*c&1;c=this.did_rollover(2,c);return d<<4|c<<5});a.io.register_write(97,this,function(c){c&1?this.bus.send("pcspeaker-enable"):this.bus.send("pcspeaker-disable")});a.io.register_read(64,this,function(){return this.counter_read(0)});a.io.register_read(65,this,function(){return this.counter_read(1)});a.io.register_read(66,this,function(){return this.counter_read(2)});
137
- a.io.register_write(64,this,function(c){this.counter_write(0,c)});a.io.register_write(65,this,function(c){this.counter_write(1,c)});a.io.register_write(66,this,function(c){this.counter_write(2,c);this.bus.send("pcspeaker-update",[this.counter_mode[2],this.counter_reload[2]])});a.io.register_write(67,this,this.port43_write)}kb.prototype.get_state=function(){var a=[];a[0]=this.counter_next_low;a[1]=this.counter_enabled;a[2]=this.counter_mode;a[3]=this.counter_read_mode;a[4]=this.counter_latch;a[5]=
138
- this.counter_latch_value;a[6]=this.counter_reload;a[7]=this.counter_start_time;a[8]=this.counter_start_value;return a};kb.prototype.set_state=function(a){this.counter_next_low=a[0];this.counter_enabled=a[1];this.counter_mode=a[2];this.counter_read_mode=a[3];this.counter_latch=a[4];this.counter_latch_value=a[5];this.counter_reload=a[6];this.counter_start_time=a[7];this.counter_start_value=a[8]};kb.prototype.timer=function(a,b){var c=100;b||(this.counter_enabled[0]&&this.did_rollover(0,a)?(this.counter_start_value[0]=
139
- this.get_counter_value(0,a),this.counter_start_time[0]=a,B("pit interrupt. new value: "+this.counter_start_value[0],512),this.cpu.device_lower_irq(0),this.cpu.device_raise_irq(0),0===this.counter_mode[0]&&(this.counter_enabled[0]=0)):this.cpu.device_lower_irq(0),this.counter_enabled[0]&&(c=(this.counter_start_value[0]-Math.floor(1193.1816666*(a-this.counter_start_time[0])))/1193.1816666));return c};kb.prototype.get_counter_value=function(a,b){if(!this.counter_enabled[a])return 0;var c=b-this.counter_start_time[a],
140
- d=Math.floor(1193.1816666*c);b=this.counter_start_value[a]-d;B("diff="+c+" dticks="+d+" value="+b+" reload="+this.counter_reload[a],512);c=this.counter_reload[a];b>=c?(B("Warning: Counter"+a+" value "+b+" is larger than reload "+c,512),b%=c):0>b&&(b=b%c+c);return b};kb.prototype.did_rollover=function(a,b){b-=this.counter_start_time[a];return 0>b?(B("Warning: PIT timer difference is negative, resetting (timer "+a+")"),!0):this.counter_start_value[a]<Math.floor(1193.1816666*b)};kb.prototype.counter_read=
141
- function(a){var b=this.counter_latch[a];if(b)return this.counter_latch[a]--,2===b?this.counter_latch_value[a]&255:this.counter_latch_value[a]>>8;b=this.counter_next_low[a];3===this.counter_mode[a]&&(this.counter_next_low[a]^=1);a=this.get_counter_value(a,I.microtick());return b?a&255:a>>8};kb.prototype.counter_write=function(a,b){this.counter_reload[a]=this.counter_next_low[a]?this.counter_reload[a]&-256|b:this.counter_reload[a]&255|b<<8;3===this.counter_read_mode[a]&&this.counter_next_low[a]||(this.counter_reload[a]||
142
- (this.counter_reload[a]=65535),this.counter_start_value[a]=this.counter_reload[a],this.counter_enabled[a]=!0,this.counter_start_time[a]=I.microtick(),B("counter"+a+" reload="+n(this.counter_reload[a])+" tick="+(this.counter_reload[a]||65536)/1193.1816666+"ms",512));3===this.counter_read_mode[a]&&(this.counter_next_low[a]^=1)};kb.prototype.port43_write=function(a){var b=a>>1&7,c=a&1,d=a>>6&3;a=a>>4&3;1===d&&B("Unimplemented timer1",512);3===d?B("Unimplemented read back",512):0===a?(this.counter_latch[d]=
143
- 2,b=this.get_counter_value(d,I.microtick()),B("latch: "+b,512),this.counter_latch_value[d]=b?b-1:0):(6<=b&&(b&=-5),B("Control: mode="+b+" ctr="+d+" read_mode="+a+" bcd="+c,512),this.counter_next_low[d]=1===a?1:2===a?0:1,0===d&&this.cpu.device_lower_irq(0),0!==b&&3!==b&&2!==b&&B("Unimplemented counter mode: "+n(b),512),this.counter_mode[d]=b,this.counter_read_mode[d]=a,2===d&&this.bus.send("pcspeaker-update",[this.counter_mode[2],this.counter_reload[2]]))};kb.prototype.dump=function(){const a=this.counter_reload[0];
144
- B("counter0 ticks every "+(a||65536)/1193.1816666+"ms (reload="+a+")")};function lb(a){if("undefined"!==typeof window)if(window.AudioContext||window.webkitAudioContext){var b=window.AudioWorklet?mb:nb;this.bus=a;this.audio_context=window.AudioContext?new AudioContext:new webkitAudioContext;this.mixer=new ob(a,this.audio_context);this.pcspeaker=new pb(a,this.audio_context,this.mixer);this.dac=new b(a,this.audio_context,this.mixer);this.pcspeaker.start();a.register("emulator-stopped",function(){this.audio_context.suspend()},
145
- this);a.register("emulator-started",function(){this.audio_context.resume()},this);a.register("speaker-confirm-initialized",function(){a.send("speaker-has-initialized")},this);a.send("speaker-has-initialized")}else console.warn("Web browser doesn't support Web Audio API")}lb.prototype.destroy=function(){this.audio_context&&this.audio_context.close();this.audio_context=null;this.dac&&this.dac.node_processor&&this.dac.node_processor.port.close();this.dac=null};function ob(a,b){function c(d){return function(e){d.gain.setValueAtTime(e,
135
+ 15)};kb.prototype.cmos_read=function(a){l(128>a);return this.cmos_data[a]};kb.prototype.cmos_write=function(a,b){B("cmos "+n(a)+" <- "+n(b),65536);l(128>a);this.cmos_data[a]=b};function lb(a,b){this.cpu=a;this.bus=b;this.counter_start_time=new Float64Array(3);this.counter_start_value=new Uint16Array(3);this.counter_next_low=new Uint8Array(4);this.counter_enabled=new Uint8Array(4);this.counter_mode=new Uint8Array(4);this.counter_read_mode=new Uint8Array(4);this.counter_latch=new Uint8Array(4);this.counter_latch_value=
136
+ new Uint16Array(3);this.counter_reload=new Uint16Array(3);a.io.register_read(97,this,function(){var c=H.microtick(),d=66.66666666666667*c&1;c=this.did_rollover(2,c);return d<<4|c<<5});a.io.register_write(97,this,function(c){c&1?this.bus.send("pcspeaker-enable"):this.bus.send("pcspeaker-disable")});a.io.register_read(64,this,function(){return this.counter_read(0)});a.io.register_read(65,this,function(){return this.counter_read(1)});a.io.register_read(66,this,function(){return this.counter_read(2)});
137
+ a.io.register_write(64,this,function(c){this.counter_write(0,c)});a.io.register_write(65,this,function(c){this.counter_write(1,c)});a.io.register_write(66,this,function(c){this.counter_write(2,c);this.bus.send("pcspeaker-update",[this.counter_mode[2],this.counter_reload[2]])});a.io.register_write(67,this,this.port43_write)}lb.prototype.get_state=function(){var a=[];a[0]=this.counter_next_low;a[1]=this.counter_enabled;a[2]=this.counter_mode;a[3]=this.counter_read_mode;a[4]=this.counter_latch;a[5]=
138
+ this.counter_latch_value;a[6]=this.counter_reload;a[7]=this.counter_start_time;a[8]=this.counter_start_value;return a};lb.prototype.set_state=function(a){this.counter_next_low=a[0];this.counter_enabled=a[1];this.counter_mode=a[2];this.counter_read_mode=a[3];this.counter_latch=a[4];this.counter_latch_value=a[5];this.counter_reload=a[6];this.counter_start_time=a[7];this.counter_start_value=a[8]};lb.prototype.timer=function(a,b){var c=100;b||(this.counter_enabled[0]&&this.did_rollover(0,a)?(this.counter_start_value[0]=
139
+ this.get_counter_value(0,a),this.counter_start_time[0]=a,B("pit interrupt. new value: "+this.counter_start_value[0],512),this.cpu.device_lower_irq(0),this.cpu.device_raise_irq(0),0===this.counter_mode[0]&&(this.counter_enabled[0]=0)):this.cpu.device_lower_irq(0),this.counter_enabled[0]&&(c=(this.counter_start_value[0]-Math.floor(1193.1816666*(a-this.counter_start_time[0])))/1193.1816666));return c};lb.prototype.get_counter_value=function(a,b){if(!this.counter_enabled[a])return 0;var c=b-this.counter_start_time[a],
140
+ d=Math.floor(1193.1816666*c);b=this.counter_start_value[a]-d;B("diff="+c+" dticks="+d+" value="+b+" reload="+this.counter_reload[a],512);c=this.counter_reload[a];b>=c?(B("Warning: Counter"+a+" value "+b+" is larger than reload "+c,512),b%=c):0>b&&(b=b%c+c);return b};lb.prototype.did_rollover=function(a,b){b-=this.counter_start_time[a];return 0>b?(B("Warning: PIT timer difference is negative, resetting (timer "+a+")"),!0):this.counter_start_value[a]<Math.floor(1193.1816666*b)};lb.prototype.counter_read=
141
+ function(a){var b=this.counter_latch[a];if(b)return this.counter_latch[a]--,2===b?this.counter_latch_value[a]&255:this.counter_latch_value[a]>>8;b=this.counter_next_low[a];3===this.counter_mode[a]&&(this.counter_next_low[a]^=1);a=this.get_counter_value(a,H.microtick());return b?a&255:a>>8};lb.prototype.counter_write=function(a,b){this.counter_reload[a]=this.counter_next_low[a]?this.counter_reload[a]&-256|b:this.counter_reload[a]&255|b<<8;3===this.counter_read_mode[a]&&this.counter_next_low[a]||(this.counter_reload[a]||
142
+ (this.counter_reload[a]=65535),this.counter_start_value[a]=this.counter_reload[a],this.counter_enabled[a]=!0,this.counter_start_time[a]=H.microtick(),B("counter"+a+" reload="+n(this.counter_reload[a])+" tick="+(this.counter_reload[a]||65536)/1193.1816666+"ms",512));3===this.counter_read_mode[a]&&(this.counter_next_low[a]^=1)};lb.prototype.port43_write=function(a){var b=a>>1&7,c=a&1,d=a>>6&3;a=a>>4&3;1===d&&B("Unimplemented timer1",512);3===d?B("Unimplemented read back",512):0===a?(this.counter_latch[d]=
143
+ 2,b=this.get_counter_value(d,H.microtick()),B("latch: "+b,512),this.counter_latch_value[d]=b?b-1:0):(6<=b&&(b&=-5),B("Control: mode="+b+" ctr="+d+" read_mode="+a+" bcd="+c,512),this.counter_next_low[d]=1===a?1:2===a?0:1,0===d&&this.cpu.device_lower_irq(0),0!==b&&3!==b&&2!==b&&B("Unimplemented counter mode: "+n(b),512),this.counter_mode[d]=b,this.counter_read_mode[d]=a,2===d&&this.bus.send("pcspeaker-update",[this.counter_mode[2],this.counter_reload[2]]))};lb.prototype.dump=function(){const a=this.counter_reload[0];
144
+ B("counter0 ticks every "+(a||65536)/1193.1816666+"ms (reload="+a+")")};function mb(a){if("undefined"!==typeof window)if(window.AudioContext||window.webkitAudioContext){var b=window.AudioWorklet?nb:ob;this.bus=a;this.audio_context=window.AudioContext?new AudioContext:new webkitAudioContext;this.mixer=new pb(a,this.audio_context);this.pcspeaker=new qb(a,this.audio_context,this.mixer);this.dac=new b(a,this.audio_context,this.mixer);this.pcspeaker.start();a.register("emulator-stopped",function(){this.audio_context.suspend()},
145
+ this);a.register("emulator-started",function(){this.audio_context.resume()},this);a.register("speaker-confirm-initialized",function(){a.send("speaker-has-initialized")},this);a.send("speaker-has-initialized")}else console.warn("Web browser doesn't support Web Audio API")}mb.prototype.destroy=function(){this.audio_context&&this.audio_context.close();this.audio_context=null;this.dac&&this.dac.node_processor&&this.dac.node_processor.port.close();this.dac=null};function pb(a,b){function c(d){return function(e){d.gain.setValueAtTime(e,
146
146
  this.audio_context.currentTime)}}this.audio_context=b;this.sources=new Map;this.gain_right=this.gain_left=this.volume_right=this.volume_left=this.volume_both=1;this.node_treble_left=this.audio_context.createBiquadFilter();this.node_treble_right=this.audio_context.createBiquadFilter();this.node_treble_left.type="highshelf";this.node_treble_right.type="highshelf";this.node_treble_left.frequency.setValueAtTime(2E3,this.audio_context.currentTime);this.node_treble_right.frequency.setValueAtTime(2E3,this.audio_context.currentTime);
147
147
  this.node_bass_left=this.audio_context.createBiquadFilter();this.node_bass_right=this.audio_context.createBiquadFilter();this.node_bass_left.type="lowshelf";this.node_bass_right.type="lowshelf";this.node_bass_left.frequency.setValueAtTime(200,this.audio_context.currentTime);this.node_bass_right.frequency.setValueAtTime(200,this.audio_context.currentTime);this.node_gain_left=this.audio_context.createGain();this.node_gain_right=this.audio_context.createGain();this.node_merger=this.audio_context.createChannelMerger(2);
148
148
  this.input_left=this.node_treble_left;this.input_right=this.node_treble_right;this.node_treble_left.connect(this.node_bass_left);this.node_bass_left.connect(this.node_gain_left);this.node_gain_left.connect(this.node_merger,0,0);this.node_treble_right.connect(this.node_bass_right);this.node_bass_right.connect(this.node_gain_right);this.node_gain_right.connect(this.node_merger,0,1);this.node_merger.connect(this.audio_context.destination);a.register("mixer-connect",function(d){this.connect_source(d[0],
149
149
  d[1])},this);a.register("mixer-disconnect",function(d){this.disconnect_source(d[0],d[1])},this);a.register("mixer-volume",function(d){var e=d[0],f=d[1];d=Math.pow(10,d[2]/20);var g=0===e?this:this.sources.get(e);void 0===g?l(!1,"Mixer set volume - cannot set volume for undefined source: "+e):g.set_volume(d,f)},this);a.register("mixer-gain-left",function(d){this.gain_left=Math.pow(10,d/20);this.update()},this);a.register("mixer-gain-right",function(d){this.gain_right=Math.pow(10,d/20);this.update()},
150
- this);a.register("mixer-treble-left",c(this.node_treble_left),this);a.register("mixer-treble-right",c(this.node_treble_right),this);a.register("mixer-bass-left",c(this.node_bass_left),this);a.register("mixer-bass-right",c(this.node_bass_right),this)}ob.prototype.add_source=function(a,b){a=new qb(this.audio_context,a,this.input_left,this.input_right);l(!this.sources.has(b),"Mixer add source - overwritting source: "+b);this.sources.set(b,a);return a};ob.prototype.connect_source=function(a,b){var c=
151
- this.sources.get(a);void 0===c?l(!1,"Mixer connect - cannot connect undefined source: "+a):c.connect(b)};ob.prototype.disconnect_source=function(a,b){var c=this.sources.get(a);void 0===c?l(!1,"Mixer disconnect - cannot disconnect undefined source: "+a):c.disconnect(b)};ob.prototype.set_volume=function(a,b){void 0===b&&(b=2);switch(b){case 0:this.volume_left=a;break;case 1:this.volume_right=a;break;case 2:this.volume_both=a;break;default:l(!1,"Mixer set master volume - unknown channel: "+b);return}this.update()};
152
- ob.prototype.update=function(){var a=this.volume_both*this.volume_right*this.gain_right;this.node_gain_left.gain.setValueAtTime(this.volume_both*this.volume_left*this.gain_left,this.audio_context.currentTime);this.node_gain_right.gain.setValueAtTime(a,this.audio_context.currentTime)};function qb(a,b,c,d){this.audio_context=a;this.connected_right=this.connected_left=!0;this.volume_right=this.volume_left=this.volume_both=this.gain_hidden=1;this.node_splitter=a.createChannelSplitter(2);this.node_gain_left=
153
- a.createGain();this.node_gain_right=a.createGain();b.connect(this.node_splitter);this.node_splitter.connect(this.node_gain_left,0);this.node_gain_left.connect(c);this.node_splitter.connect(this.node_gain_right,1);this.node_gain_right.connect(d)}qb.prototype.update=function(){var a=this.connected_right*this.gain_hidden*this.volume_both*this.volume_right;this.node_gain_left.gain.setValueAtTime(this.connected_left*this.gain_hidden*this.volume_both*this.volume_left,this.audio_context.currentTime);this.node_gain_right.gain.setValueAtTime(a,
154
- this.audio_context.currentTime)};qb.prototype.connect=function(a){var b=!a||2===a;if(b||0===a)this.connected_left=!0;if(b||1===a)this.connected_right=!0;this.update()};qb.prototype.disconnect=function(a){var b=!a||2===a;if(b||0===a)this.connected_left=!1;if(b||1===a)this.connected_right=!1;this.update()};qb.prototype.set_volume=function(a,b){void 0===b&&(b=2);switch(b){case 0:this.volume_left=a;break;case 1:this.volume_right=a;break;case 2:this.volume_both=a;break;default:l(!1,"Mixer set volume - unknown channel: "+
155
- b);return}this.update()};qb.prototype.set_gain_hidden=function(a){this.gain_hidden=a};function pb(a,b,c){this.node_oscillator=b.createOscillator();this.node_oscillator.type="square";this.node_oscillator.frequency.setValueAtTime(440,b.currentTime);this.mixer_connection=c.add_source(this.node_oscillator,1);this.mixer_connection.disconnect();a.register("pcspeaker-enable",function(){c.connect_source(1)},this);a.register("pcspeaker-disable",function(){c.disconnect_source(1)},this);a.register("pcspeaker-update",
156
- function(d){var e=d[1],f=0;3===d[0]&&(f=Math.min(1193181.6665999999/e,this.node_oscillator.frequency.maxValue),f=Math.max(f,0));this.node_oscillator.frequency.setValueAtTime(f,b.currentTime)},this)}pb.prototype.start=function(){this.node_oscillator.start()};function mb(a,b,c){this.bus=a;this.audio_context=b;this.enabled=!1;this.sampling_rate=48E3;b=function(){function g(p){if(0===p)return 1;p*=Math.PI;return Math.sin(p)/p}function k(){var p=Reflect.construct(AudioWorkletProcessor,[],k);p.kernel_size=
150
+ this);a.register("mixer-treble-left",c(this.node_treble_left),this);a.register("mixer-treble-right",c(this.node_treble_right),this);a.register("mixer-bass-left",c(this.node_bass_left),this);a.register("mixer-bass-right",c(this.node_bass_right),this)}pb.prototype.add_source=function(a,b){a=new rb(this.audio_context,a,this.input_left,this.input_right);l(!this.sources.has(b),"Mixer add source - overwritting source: "+b);this.sources.set(b,a);return a};pb.prototype.connect_source=function(a,b){var c=
151
+ this.sources.get(a);void 0===c?l(!1,"Mixer connect - cannot connect undefined source: "+a):c.connect(b)};pb.prototype.disconnect_source=function(a,b){var c=this.sources.get(a);void 0===c?l(!1,"Mixer disconnect - cannot disconnect undefined source: "+a):c.disconnect(b)};pb.prototype.set_volume=function(a,b){void 0===b&&(b=2);switch(b){case 0:this.volume_left=a;break;case 1:this.volume_right=a;break;case 2:this.volume_both=a;break;default:l(!1,"Mixer set master volume - unknown channel: "+b);return}this.update()};
152
+ pb.prototype.update=function(){var a=this.volume_both*this.volume_right*this.gain_right;this.node_gain_left.gain.setValueAtTime(this.volume_both*this.volume_left*this.gain_left,this.audio_context.currentTime);this.node_gain_right.gain.setValueAtTime(a,this.audio_context.currentTime)};function rb(a,b,c,d){this.audio_context=a;this.connected_right=this.connected_left=!0;this.volume_right=this.volume_left=this.volume_both=this.gain_hidden=1;this.node_splitter=a.createChannelSplitter(2);this.node_gain_left=
153
+ a.createGain();this.node_gain_right=a.createGain();b.connect(this.node_splitter);this.node_splitter.connect(this.node_gain_left,0);this.node_gain_left.connect(c);this.node_splitter.connect(this.node_gain_right,1);this.node_gain_right.connect(d)}rb.prototype.update=function(){var a=this.connected_right*this.gain_hidden*this.volume_both*this.volume_right;this.node_gain_left.gain.setValueAtTime(this.connected_left*this.gain_hidden*this.volume_both*this.volume_left,this.audio_context.currentTime);this.node_gain_right.gain.setValueAtTime(a,
154
+ this.audio_context.currentTime)};rb.prototype.connect=function(a){var b=!a||2===a;if(b||0===a)this.connected_left=!0;if(b||1===a)this.connected_right=!0;this.update()};rb.prototype.disconnect=function(a){var b=!a||2===a;if(b||0===a)this.connected_left=!1;if(b||1===a)this.connected_right=!1;this.update()};rb.prototype.set_volume=function(a,b){void 0===b&&(b=2);switch(b){case 0:this.volume_left=a;break;case 1:this.volume_right=a;break;case 2:this.volume_both=a;break;default:l(!1,"Mixer set volume - unknown channel: "+
155
+ b);return}this.update()};rb.prototype.set_gain_hidden=function(a){this.gain_hidden=a};function qb(a,b,c){this.node_oscillator=b.createOscillator();this.node_oscillator.type="square";this.node_oscillator.frequency.setValueAtTime(440,b.currentTime);this.mixer_connection=c.add_source(this.node_oscillator,1);this.mixer_connection.disconnect();a.register("pcspeaker-enable",function(){c.connect_source(1)},this);a.register("pcspeaker-disable",function(){c.disconnect_source(1)},this);a.register("pcspeaker-update",
156
+ function(d){var e=d[1],f=0;3===d[0]&&(f=Math.min(1193181.6665999999/e,this.node_oscillator.frequency.maxValue),f=Math.max(f,0));this.node_oscillator.frequency.setValueAtTime(f,b.currentTime)},this)}qb.prototype.start=function(){this.node_oscillator.start()};function nb(a,b,c){this.bus=a;this.audio_context=b;this.enabled=!1;this.sampling_rate=48E3;b=function(){function g(p){if(0===p)return 1;p*=Math.PI;return Math.sin(p)/p}function k(){var p=Reflect.construct(AudioWorkletProcessor,[],k);p.kernel_size=
157
157
  3;p.queue_data=Array(1024);p.queue_start=0;p.queue_end=0;p.queue_length=0;p.queue_size=p.queue_data.length;p.queued_samples=0;p.source_buffer_previous=m;p.source_buffer_current=m;p.source_samples_per_destination=1;p.source_block_start=0;p.source_time=0;p.source_offset=0;p.port.onmessage=q=>{switch(q.data.type){case "queue":p.queue_push(q.data.value);break;case "sampling-rate":p.source_samples_per_destination=q.data.value/sampleRate}};return p}var m=[new Float32Array(256),new Float32Array(256)];Reflect.setPrototypeOf(k.prototype,
158
158
  AudioWorkletProcessor.prototype);Reflect.setPrototypeOf(k,AudioWorkletProcessor);k.prototype.process=k.prototype.process=function(p,q){for(p=0;p<q[0][0].length;p++){for(var r=0,v=0,t=this.source_offset+this.kernel_size,z=this.source_offset-this.kernel_size+1;z<=t;z++){var A=this.source_block_start+z;r+=this.get_sample(A,0)*this.kernel(this.source_time-z);v+=this.get_sample(A,1)*this.kernel(this.source_time-z)}if(isNaN(r)||isNaN(v))r=v=0,this.dbg_log("ERROR: NaN values! Ignoring for now.");q[0][0][p]=
159
159
  r;q[0][1][p]=v;this.source_time+=this.source_samples_per_destination;this.source_offset=Math.floor(this.source_time)}q=this.source_offset;q+=this.kernel_size+2;this.source_time-=this.source_offset;this.source_block_start+=this.source_offset;this.source_offset=0;this.ensure_enough_data(q);return!0};k.prototype.kernel=function(p){return g(p)*g(p/this.kernel_size)};k.prototype.get_sample=function(p,q){return 0>p?(p+=this.source_buffer_previous[0].length,this.source_buffer_previous[q][p]):this.source_buffer_current[q][p]};
@@ -162,107 +162,107 @@ this.queue_start,r=0;256>p&&r<this.queue_length;)p+=this.queue_data[q][0].length
162
162
  this.port.postMessage({type:"pump"})};k.prototype.queue_push=function(p){this.queue_length<this.queue_size&&(this.queue_data[this.queue_end]=p,this.queue_end=this.queue_end+1&this.queue_size-1,this.queue_length++,this.queued_samples+=p[0].length,this.pump())};k.prototype.queue_shift=function(){if(!this.queue_length)return m;var p=this.queue_data[this.queue_start];this.queue_data[this.queue_start]=null;this.queue_start=this.queue_start+1&this.queue_size-1;this.queue_length--;this.queued_samples-=p[0].length;
163
163
  return p};k.prototype.dbg_log=function(p){this.port.postMessage({type:"debug-log",value:p})};registerProcessor("dac-processor",k)}.toString();var d=b.indexOf("{")+1,e=b.lastIndexOf("}");b=b.substring(d,e);b=new Blob(["var DEBUG = true;\n"+b],{type:"application/javascript"});var f=URL.createObjectURL(b);this.node_processor=null;this.node_output=this.audio_context.createGain();this.audio_context.audioWorklet.addModule(f).then(()=>{URL.revokeObjectURL(f);this.node_processor=new AudioWorkletNode(this.audio_context,
164
164
  "dac-processor",{numberOfInputs:0,numberOfOutputs:1,outputChannelCount:[2],parameterData:{},processorOptions:{}});this.node_processor.port.postMessage({type:"sampling-rate",value:this.sampling_rate});this.node_processor.port.onmessage=g=>{switch(g.data.type){case "pump":this.pump();break;case "debug-log":B("SpeakerWorkletDAC - Worklet: "+g.data.value)}};this.node_processor.connect(this.node_output)});this.mixer_connection=c.add_source(this.node_output,2);this.mixer_connection.set_gain_hidden(3);a.register("dac-send-data",
165
- function(g){this.queue(g)},this);a.register("dac-enable",function(){this.enabled=!0},this);a.register("dac-disable",function(){this.enabled=!1},this);a.register("dac-tell-sampling-rate",function(g){l(0<g,"Sampling rate should be nonzero");this.sampling_rate=g;this.node_processor&&this.node_processor.port.postMessage({type:"sampling-rate",value:g})},this);this.debugger=new rb(this.audio_context,this.node_output)}mb.prototype.queue=function(a){this.node_processor&&(this.debugger.push_queued_data(a),
166
- this.node_processor.port.postMessage({type:"queue",value:a},[a[0].buffer,a[1].buffer]))};mb.prototype.pump=function(){this.enabled&&this.bus.send("dac-request-data")};function nb(a,b,c){this.bus=a;this.audio_context=b;this.enabled=!1;this.sampling_rate=22050;this.buffered_time=0;this.rate_ratio=1;this.node_lowpass=this.audio_context.createBiquadFilter();this.node_lowpass.type="lowpass";this.node_output=this.node_lowpass;this.mixer_connection=c.add_source(this.node_output,2);this.mixer_connection.set_gain_hidden(3);
167
- a.register("dac-send-data",function(d){this.queue(d)},this);a.register("dac-enable",function(){this.enabled=!0;this.pump()},this);a.register("dac-disable",function(){this.enabled=!1},this);a.register("dac-tell-sampling-rate",function(d){l(0<d,"Sampling rate should be nonzero");this.sampling_rate=d;this.rate_ratio=Math.ceil(8E3/d);this.node_lowpass.frequency.setValueAtTime(d/2,this.audio_context.currentTime)},this);this.debugger=new rb(this.audio_context,this.node_output)}nb.prototype.queue=function(a){this.debugger.push_queued_data(a);
165
+ function(g){this.queue(g)},this);a.register("dac-enable",function(){this.enabled=!0},this);a.register("dac-disable",function(){this.enabled=!1},this);a.register("dac-tell-sampling-rate",function(g){l(0<g,"Sampling rate should be nonzero");this.sampling_rate=g;this.node_processor&&this.node_processor.port.postMessage({type:"sampling-rate",value:g})},this);this.debugger=new wb(this.audio_context,this.node_output)}nb.prototype.queue=function(a){this.node_processor&&(this.debugger.push_queued_data(a),
166
+ this.node_processor.port.postMessage({type:"queue",value:a},[a[0].buffer,a[1].buffer]))};nb.prototype.pump=function(){this.enabled&&this.bus.send("dac-request-data")};function ob(a,b,c){this.bus=a;this.audio_context=b;this.enabled=!1;this.sampling_rate=22050;this.buffered_time=0;this.rate_ratio=1;this.node_lowpass=this.audio_context.createBiquadFilter();this.node_lowpass.type="lowpass";this.node_output=this.node_lowpass;this.mixer_connection=c.add_source(this.node_output,2);this.mixer_connection.set_gain_hidden(3);
167
+ a.register("dac-send-data",function(d){this.queue(d)},this);a.register("dac-enable",function(){this.enabled=!0;this.pump()},this);a.register("dac-disable",function(){this.enabled=!1},this);a.register("dac-tell-sampling-rate",function(d){l(0<d,"Sampling rate should be nonzero");this.sampling_rate=d;this.rate_ratio=Math.ceil(8E3/d);this.node_lowpass.frequency.setValueAtTime(d/2,this.audio_context.currentTime)},this);this.debugger=new wb(this.audio_context,this.node_output)}ob.prototype.queue=function(a){this.debugger.push_queued_data(a);
168
168
  var b=a[0].length,c=b/this.sampling_rate;if(1<this.rate_ratio){var d=this.audio_context.createBuffer(2,b*this.rate_ratio,this.sampling_rate*this.rate_ratio);for(var e=d.getChannelData(0),f=d.getChannelData(1),g=0,k=0;k<b;k++)for(var m=0;m<this.rate_ratio;m++,g++)e[g]=a[0][k],f[g]=a[1][k]}else d=this.audio_context.createBuffer(2,b,this.sampling_rate),d.copyToChannel?(d.copyToChannel(a[0],0),d.copyToChannel(a[1],1)):(d.getChannelData(0).set(a[0]),d.getChannelData(1).set(a[1]));a=this.audio_context.createBufferSource();
169
- a.buffer=d;a.connect(this.node_lowpass);a.addEventListener("ended",this.pump.bind(this));d=this.audio_context.currentTime;if(this.buffered_time<d)for(B("Speaker DAC - Creating/Recreating reserve - shouldn't occur frequently during playback"),this.buffered_time=d,d=.2-c,b=0;b<=d;)b+=c,this.buffered_time+=c,setTimeout(()=>this.pump(),1E3*b);a.start(this.buffered_time);this.buffered_time+=c;setTimeout(()=>this.pump(),0)};nb.prototype.pump=function(){this.enabled&&(.2<this.buffered_time-this.audio_context.currentTime||
170
- this.bus.send("dac-request-data"))};function rb(a,b){this.audio_context=a;this.node_source=b;this.node_processor=null;this.node_gain=this.audio_context.createGain();this.node_gain.gain.setValueAtTime(0,this.audio_context.currentTime);this.node_gain.connect(this.audio_context.destination);this.is_active=!1;this.queued_history=[];this.output_history=[];this.queued=[[],[]];this.output=[[],[]]}rb.prototype.start=function(a){this.is_active=!0;this.queued=[[],[]];this.output=[[],[]];this.queued_history.push(this.queued);
171
- this.output_history.push(this.output);this.node_processor=this.audio_context.createScriptProcessor(1024,2,2);this.node_processor.onaudioprocess=b=>{this.output[0].push(b.inputBuffer.getChannelData(0).slice());this.output[1].push(b.inputBuffer.getChannelData(1).slice())};this.node_source.connect(this.node_processor);this.node_processor.connect(this.node_gain);setTimeout(()=>{this.stop()},a)};rb.prototype.stop=function(){this.is_active=!1;this.node_source.disconnect(this.node_processor);this.node_processor.disconnect();
172
- this.node_processor=null};rb.prototype.push_queued_data=function(a){this.is_active&&(this.queued[0].push(a[0].slice()),this.queued[1].push(a[1].slice()))};rb.prototype.download_txt=function(a,b){a=this.output_history[a][b].map(c=>c.join(" ")).join(" ");qa(a,"dacdata.txt")};rb.prototype.download_csv=function(a){a=this.output_history[a];for(var b=[],c=0;c<a[0].length;c++)for(var d=0;d<a[0][c].length;d++)b.push(`${a[0][c][d]},${a[1][c][d]}`);qa(b.join("\n"),"dacdata.csv")};function wb(a,b,c){this.bus=
173
- b;this.socket=void 0;this.id=c||0;this.send_queue=[];this.url=a;this.reconnect_interval=1E4;this.last_connect_attempt=Date.now()-this.reconnect_interval;this.send_queue_limit=64;this.destroyed=!1;this.bus.register("net"+this.id+"-send",function(d){this.send(d)},this)}wb.prototype.handle_message=function(a){this.bus&&this.bus.send("net"+this.id+"-receive",new Uint8Array(a.data))};wb.prototype.handle_close=function(){this.destroyed||(this.connect(),setTimeout(this.connect.bind(this),this.reconnect_interval))};
174
- wb.prototype.handle_open=function(){for(var a=0;a<this.send_queue.length;a++)this.send(this.send_queue[a]);this.send_queue=[]};wb.prototype.handle_error=function(){};wb.prototype.destroy=function(){this.destroyed=!0;this.socket&&this.socket.close()};wb.prototype.connect=function(){if("undefined"!==typeof WebSocket){if(this.socket){var a=this.socket.readyState;if(0===a||1===a)return}a=Date.now();if(!(this.last_connect_attempt+this.reconnect_interval>a)){this.last_connect_attempt=Date.now();try{this.socket=
175
- new WebSocket(this.url)}catch(b){console.error(b);return}this.socket.binaryType="arraybuffer";this.socket.onopen=this.handle_open.bind(this);this.socket.onmessage=this.handle_message.bind(this);this.socket.onclose=this.handle_close.bind(this);this.socket.onerror=this.handle_error.bind(this)}}};wb.prototype.send=function(a){this.socket&&1===this.socket.readyState?this.socket.send(a):(this.send_queue.push(a),this.send_queue.length>2*this.send_queue_limit&&(this.send_queue=this.send_queue.slice(-this.send_queue_limit)),
176
- this.connect())};wb.prototype.change_proxy=function(a){this.url=a;this.socket&&(this.socket.onclose=function(){},this.socket.onerror=function(){},this.socket.close(),this.socket=void 0)};const xb=(new Date("1970-01-01T00:00:00Z")).getTime(),yb=(new Date("1900-01-01T00:00:00Z")).getTime(),zb=xb-yb,Ab=Math.pow(2,32),Bb=[118,56,54];function Cb(a){return[0,1,2,3,4,5].map(b=>a[b].toString(16)).map(b=>1===b.length?"0"+b:b).join(":")}function Db(a){return a[0]<<24|a[1]<<16|a[2]<<8|a[3]}class Eb{constructor(a,
169
+ a.buffer=d;a.connect(this.node_lowpass);a.addEventListener("ended",this.pump.bind(this));d=this.audio_context.currentTime;if(this.buffered_time<d)for(B("Speaker DAC - Creating/Recreating reserve - shouldn't occur frequently during playback"),this.buffered_time=d,d=.2-c,b=0;b<=d;)b+=c,this.buffered_time+=c,setTimeout(()=>this.pump(),1E3*b);a.start(this.buffered_time);this.buffered_time+=c;setTimeout(()=>this.pump(),0)};ob.prototype.pump=function(){this.enabled&&(.2<this.buffered_time-this.audio_context.currentTime||
170
+ this.bus.send("dac-request-data"))};function wb(a,b){this.audio_context=a;this.node_source=b;this.node_processor=null;this.node_gain=this.audio_context.createGain();this.node_gain.gain.setValueAtTime(0,this.audio_context.currentTime);this.node_gain.connect(this.audio_context.destination);this.is_active=!1;this.queued_history=[];this.output_history=[];this.queued=[[],[]];this.output=[[],[]]}wb.prototype.start=function(a){this.is_active=!0;this.queued=[[],[]];this.output=[[],[]];this.queued_history.push(this.queued);
171
+ this.output_history.push(this.output);this.node_processor=this.audio_context.createScriptProcessor(1024,2,2);this.node_processor.onaudioprocess=b=>{this.output[0].push(b.inputBuffer.getChannelData(0).slice());this.output[1].push(b.inputBuffer.getChannelData(1).slice())};this.node_source.connect(this.node_processor);this.node_processor.connect(this.node_gain);setTimeout(()=>{this.stop()},a)};wb.prototype.stop=function(){this.is_active=!1;this.node_source.disconnect(this.node_processor);this.node_processor.disconnect();
172
+ this.node_processor=null};wb.prototype.push_queued_data=function(a){this.is_active&&(this.queued[0].push(a[0].slice()),this.queued[1].push(a[1].slice()))};wb.prototype.download_txt=function(a,b){a=this.output_history[a][b].map(c=>c.join(" ")).join(" ");qa(a,"dacdata.txt")};wb.prototype.download_csv=function(a){a=this.output_history[a];for(var b=[],c=0;c<a[0].length;c++)for(var d=0;d<a[0][c].length;d++)b.push(`${a[0][c][d]},${a[1][c][d]}`);qa(b.join("\n"),"dacdata.csv")};function xb(a,b,c){this.bus=
173
+ b;this.socket=void 0;this.id=c||0;this.send_queue=[];this.url=a;this.reconnect_interval=1E4;this.last_connect_attempt=Date.now()-this.reconnect_interval;this.send_queue_limit=64;this.destroyed=!1;this.bus.register("net"+this.id+"-send",function(d){this.send(d)},this)}xb.prototype.handle_message=function(a){this.bus&&this.bus.send("net"+this.id+"-receive",new Uint8Array(a.data))};xb.prototype.handle_close=function(){this.destroyed||(this.connect(),setTimeout(this.connect.bind(this),this.reconnect_interval))};
174
+ xb.prototype.handle_open=function(){for(var a=0;a<this.send_queue.length;a++)this.send(this.send_queue[a]);this.send_queue=[]};xb.prototype.handle_error=function(){};xb.prototype.destroy=function(){this.destroyed=!0;this.socket&&this.socket.close()};xb.prototype.connect=function(){if("undefined"!==typeof WebSocket){if(this.socket){var a=this.socket.readyState;if(0===a||1===a)return}a=Date.now();if(!(this.last_connect_attempt+this.reconnect_interval>a)){this.last_connect_attempt=Date.now();try{this.socket=
175
+ new WebSocket(this.url)}catch(b){console.error(b);return}this.socket.binaryType="arraybuffer";this.socket.onopen=this.handle_open.bind(this);this.socket.onmessage=this.handle_message.bind(this);this.socket.onclose=this.handle_close.bind(this);this.socket.onerror=this.handle_error.bind(this)}}};xb.prototype.send=function(a){this.socket&&1===this.socket.readyState?this.socket.send(a):(this.send_queue.push(a),this.send_queue.length>2*this.send_queue_limit&&(this.send_queue=this.send_queue.slice(-this.send_queue_limit)),
176
+ this.connect())};xb.prototype.change_proxy=function(a){this.url=a;this.socket&&(this.socket.onclose=function(){},this.socket.onerror=function(){},this.socket.close(),this.socket=void 0)};const yb=(new Date("1970-01-01T00:00:00Z")).getTime(),zb=(new Date("1900-01-01T00:00:00Z")).getTime(),Ab=yb-zb,Bb=Math.pow(2,32),Cb=[118,56,54];function Db(a){return[0,1,2,3,4,5].map(b=>a[b].toString(16)).map(b=>1===b.length?"0"+b:b).join(":")}function Eb(a){return a[0]<<24|a[1]<<16|a[2]<<8|a[3]}class Fb{constructor(a,
177
177
  b){a=Math.min(a,16);this.maximum_capacity=b?Math.max(b,a):0;this.length=this.head=this.tail=0;this.buffer=new Uint8Array(a)}write(a){const b=a.length;var c=this.length+b;let d=this.buffer.length;if(d<c){for(l(0<d);d<c;)d*=2;if(this.maximum_capacity&&d>this.maximum_capacity)throw Error("stream capacity overflow in GrowableRingbuffer.write(), package dropped");c=new Uint8Array(d);this.peek(c);this.tail=0;this.head=this.length;this.buffer=c}c=this.buffer;const e=this.head+b;if(e>d){const f=d-this.head;
178
- c.set(a.subarray(0,f),this.head);c.set(a.subarray(f))}else c.set(a,this.head);this.head=e%d;this.length+=b}peek(a){const b=Math.min(this.length,a.length);if(b){const e=this.buffer;var c=e.length,d=this.tail+b;d>c?(d%=c,c-=this.tail,a.set(e.subarray(this.tail)),a.set(e.subarray(0,d),c)):a.set(e.subarray(this.tail,d))}return b}remove(a){a>this.length&&(a=this.length);a&&(this.tail=(this.tail+a)%this.buffer.length,this.length-=a);return a}}function Fb(){const a=new Uint8Array(1518),b=a.buffer,c=a.byteOffset;
179
- return{eth_frame:a,eth_frame_view:new DataView(b),eth_payload_view:new DataView(b,c+14,1500),ipv4_payload_view:new DataView(b,c+34,1480),udp_payload_view:new DataView(b,c+42,1472),text_encoder:new TextEncoder}}function Gb(a,b,c,d){d.eth_frame.set(b,c.byteOffset+a);return b.length}function Hb(a,b,c,d){const e=c.byteOffset+(a&-2);d=d.eth_frame;for(c=c.byteOffset;c<e;c+=2)b+=d[c]<<8|d[c+1];for(a&1&&(b+=d[e]<<8);b>>>16;)b=(b&65535)+(b>>>16);return~b&65535}function Ib(a,b){l(b.eth);a.eth_frame.fill(0);
180
- var c=a.eth_frame,d=c.subarray,e=a.eth_frame_view;Gb(0,b.eth.dest,e,a);Gb(6,b.eth.src,e,a);e.setUint16(12,b.eth.ethertype);e=14;if(b.arp){var f=a.eth_payload_view;f.setUint16(0,b.arp.htype);f.setUint16(2,b.arp.ptype);f.setUint8(4,b.arp.sha.length);f.setUint8(5,b.arp.spa.length);f.setUint16(6,b.arp.oper);Gb(8,b.arp.sha,f,a);Gb(14,b.arp.spa,f,a);Gb(18,b.arp.tha,f,a);Gb(24,b.arp.tpa,f,a);e+=28}else if(b.ipv4){f=a.eth_payload_view;var g=20;if(b.icmp){var k=a.ipv4_payload_view;k.setUint8(0,b.icmp.type);
181
- k.setUint8(1,b.icmp.code);k.setUint16(2,0);var m=4+Gb(4,b.icmp.data,k,a);k.setUint16(2,Hb(m,0,k,a));g+=m}else if(b.udp){k=a.ipv4_payload_view;var p=8;if(b.dhcp){m=p;var q=a.udp_payload_view;q.setUint8(0,b.dhcp.op);q.setUint8(1,b.dhcp.htype);q.setUint8(2,b.dhcp.hlen);q.setUint8(3,b.dhcp.hops);q.setUint32(4,b.dhcp.xid);q.setUint16(8,b.dhcp.secs);q.setUint16(10,b.dhcp.flags);q.setUint32(12,b.dhcp.ciaddr);q.setUint32(16,b.dhcp.yiaddr);q.setUint32(20,b.dhcp.siaddr);q.setUint32(24,b.dhcp.giaddr);Gb(28,
182
- b.dhcp.chaddr,q,a);q.setUint32(236,1669485411);p=240;for(var r of b.dhcp.options)p+=Gb(p,r,q,a);m+=p}else if(b.dns){r=p;p=a.udp_payload_view;p.setUint16(0,b.dns.id);p.setUint16(2,b.dns.flags);p.setUint16(4,b.dns.questions.length);p.setUint16(6,b.dns.answers.length);let z=12;for(var v=0;v<b.dns.questions.length;++v){var t=b.dns.questions[v];for(q of t.name){const A=a.text_encoder.encodeInto(q,a.eth_frame.subarray(p.byteOffset+(z+1))).written;p.setUint8(z,A);z+=1+A}p.setUint16(z,t.type);z+=2;p.setUint16(z,
183
- t.class);z+=2}for(v=0;v<b.dns.answers.length;++v){q=b.dns.answers[v];for(m of q.name)t=a.text_encoder.encodeInto(m,a.eth_frame.subarray(p.byteOffset+(z+1))).written,p.setUint8(z,t),z+=1+t;p.setUint16(z,q.type);z+=2;p.setUint16(z,q.class);z+=2;p.setUint32(z,q.ttl);z+=4;p.setUint16(z,q.data.length);z+=2;z+=Gb(z,q.data,p,a)}m=r+z}else b.ntp?(m=p,q=a.udp_payload_view,q.setUint8(0,b.ntp.flags),q.setUint8(1,b.ntp.stratum),q.setUint8(2,b.ntp.poll),q.setUint8(3,b.ntp.precision),q.setUint32(4,b.ntp.root_delay),
184
- q.setUint32(8,b.ntp.root_disp),q.setUint32(12,b.ntp.ref_id),q.setUint32(16,b.ntp.ref_ts_i),q.setUint32(20,b.ntp.ref_ts_f),q.setUint32(24,b.ntp.ori_ts_i),q.setUint32(28,b.ntp.ori_ts_f),q.setUint32(32,b.ntp.rec_ts_i),q.setUint32(36,b.ntp.rec_ts_f),q.setUint32(40,b.ntp.trans_ts_i),q.setUint32(44,b.ntp.trans_ts_f),m+=48):m=p+Gb(0,b.udp.data,a.udp_payload_view,a);p=m;k.setUint16(0,b.udp.sport);k.setUint16(2,b.udp.dport);k.setUint16(4,p);k.setUint16(6,0);k.setUint16(6,Hb(p,(b.ipv4.src[0]<<8|b.ipv4.src[1])+
185
- (b.ipv4.src[2]<<8|b.ipv4.src[3])+(b.ipv4.dest[0]<<8|b.ipv4.dest[1])+(b.ipv4.dest[2]<<8|b.ipv4.dest[3])+17+p,k,a));g+=p}else b.tcp&&(k=a.ipv4_payload_view,m=0,q=b.tcp,q.fin&&(m|=1),q.syn&&(m|=2),q.rst&&(m|=4),q.psh&&(m|=8),q.ack&&(m|=16),q.urg&&(m|=32),q.ece&&(m|=64),q.cwr&&(m|=128),k.setUint16(0,q.sport),k.setUint16(2,q.dport),k.setUint32(4,q.seq),k.setUint32(8,q.ackn),k.setUint8(12,80),k.setUint8(13,m),k.setUint16(14,q.winsize),k.setUint16(16,0),k.setUint16(18,q.urgent||0),m=20,b.tcp_data&&(m+=Gb(20,
186
- b.tcp_data,k,a)),k.setUint16(16,Hb(m,(b.ipv4.src[0]<<8|b.ipv4.src[1])+(b.ipv4.src[2]<<8|b.ipv4.src[3])+(b.ipv4.dest[0]<<8|b.ipv4.dest[1])+(b.ipv4.dest[2]<<8|b.ipv4.dest[3])+6+m,k,a)),g+=m);f.setUint8(0,69);f.setUint8(1,b.ipv4.tos||0);f.setUint16(2,g);f.setUint16(4,b.ipv4.id||0);f.setUint8(6,64);f.setUint8(8,b.ipv4.ttl||32);f.setUint8(9,b.ipv4.proto);f.setUint16(10,0);Gb(12,b.ipv4.src,f,a);Gb(16,b.ipv4.dest,f,a);f.setUint16(10,Hb(20,0,f,a));e+=g}return d.call(c,0,e)}function Jb(a,b){fetch(`https://${b.doh_server||
187
- "cloudflare-dns.com"}/dns-query`,{method:"POST",headers:[["content-type","application/dns-message"]],body:a.udp.data}).then(async c=>{c={eth:{ethertype:2048,src:b.router_mac,dest:a.eth.src},ipv4:{proto:17,src:b.router_ip,dest:a.ipv4.src},udp:{sport:53,dport:a.udp.sport,data:new Uint8Array(await c.arrayBuffer())}};b.receive(Ib(b.eth_encoder_buf,c))});return!0}function Tb(a,b){let c={};c.eth={ethertype:2048,src:b.router_mac,dest:a.eth.src};c.ipv4={proto:17,src:b.router_ip,dest:b.vm_ip};c.udp={sport:67,
188
- dport:68};c.dhcp={htype:1,hlen:6,hops:0,xid:a.dhcp.xid,secs:0,flags:0,ciaddr:0,yiaddr:Db(b.vm_ip),siaddr:Db(b.router_ip),giaddr:Db(b.router_ip),chaddr:a.dhcp.chaddr};let d=[],e=a.dhcp.options.find(function(f){return 53===f[0]});e&&3===e[2]&&(a.dhcp.op=3);1===a.dhcp.op&&(c.dhcp.op=2,d.push(new Uint8Array([53,1,2])));3===a.dhcp.op&&(c.dhcp.op=2,d.push(new Uint8Array([53,1,5])),d.push(new Uint8Array([51,4,8,0,0,0])));a=[b.router_ip[0],b.router_ip[1],b.router_ip[2],b.router_ip[3]];d.push(new Uint8Array([1,
189
- 4,255,255,255,0]));b.masquerade&&(d.push(new Uint8Array([3,4].concat(a))),d.push(new Uint8Array([6,4].concat(a))));d.push(new Uint8Array([54,4].concat(a)));d.push(new Uint8Array([60,3].concat(Bb)));d.push(new Uint8Array([255,0]));c.dhcp.options=d;b.receive(Ib(b.eth_encoder_buf,c))}function Ub(a,b){let c={};var d=(new DataView(a.buffer,a.byteOffset,a.byteLength)).getUint16(12),e={ethertype:d,dest:a.subarray(0,6),dest_s:Cb(a.subarray(0,6)),src:a.subarray(6,12),src_s:Cb(a.subarray(6,12))};c.eth=e;a=
178
+ c.set(a.subarray(0,f),this.head);c.set(a.subarray(f))}else c.set(a,this.head);this.head=e%d;this.length+=b}peek(a){const b=Math.min(this.length,a.length);if(b){const e=this.buffer;var c=e.length,d=this.tail+b;d>c?(d%=c,c-=this.tail,a.set(e.subarray(this.tail)),a.set(e.subarray(0,d),c)):a.set(e.subarray(this.tail,d))}return b}remove(a){a>this.length&&(a=this.length);a&&(this.tail=(this.tail+a)%this.buffer.length,this.length-=a);return a}}function Gb(){const a=new Uint8Array(1518),b=a.buffer,c=a.byteOffset;
179
+ return{eth_frame:a,eth_frame_view:new DataView(b),eth_payload_view:new DataView(b,c+14,1500),ipv4_payload_view:new DataView(b,c+34,1480),udp_payload_view:new DataView(b,c+42,1472),text_encoder:new TextEncoder}}function Hb(a,b,c,d){d.eth_frame.set(b,c.byteOffset+a);return b.length}function Ib(a,b,c,d){const e=c.byteOffset+(a&-2);d=d.eth_frame;for(c=c.byteOffset;c<e;c+=2)b+=d[c]<<8|d[c+1];for(a&1&&(b+=d[e]<<8);b>>>16;)b=(b&65535)+(b>>>16);return~b&65535}function Jb(a,b){l(b.eth);a.eth_frame.fill(0);
180
+ var c=a.eth_frame,d=c.subarray,e=a.eth_frame_view;Hb(0,b.eth.dest,e,a);Hb(6,b.eth.src,e,a);e.setUint16(12,b.eth.ethertype);e=14;if(b.arp){var f=a.eth_payload_view;f.setUint16(0,b.arp.htype);f.setUint16(2,b.arp.ptype);f.setUint8(4,b.arp.sha.length);f.setUint8(5,b.arp.spa.length);f.setUint16(6,b.arp.oper);Hb(8,b.arp.sha,f,a);Hb(14,b.arp.spa,f,a);Hb(18,b.arp.tha,f,a);Hb(24,b.arp.tpa,f,a);e+=28}else if(b.ipv4){f=a.eth_payload_view;var g=20;if(b.icmp){var k=a.ipv4_payload_view;k.setUint8(0,b.icmp.type);
181
+ k.setUint8(1,b.icmp.code);k.setUint16(2,0);var m=4+Hb(4,b.icmp.data,k,a);k.setUint16(2,Ib(m,0,k,a));g+=m}else if(b.udp){k=a.ipv4_payload_view;var p=8;if(b.dhcp){m=p;var q=a.udp_payload_view;q.setUint8(0,b.dhcp.op);q.setUint8(1,b.dhcp.htype);q.setUint8(2,b.dhcp.hlen);q.setUint8(3,b.dhcp.hops);q.setUint32(4,b.dhcp.xid);q.setUint16(8,b.dhcp.secs);q.setUint16(10,b.dhcp.flags);q.setUint32(12,b.dhcp.ciaddr);q.setUint32(16,b.dhcp.yiaddr);q.setUint32(20,b.dhcp.siaddr);q.setUint32(24,b.dhcp.giaddr);Hb(28,
182
+ b.dhcp.chaddr,q,a);q.setUint32(236,1669485411);p=240;for(var r of b.dhcp.options)p+=Hb(p,r,q,a);m+=p}else if(b.dns){r=p;p=a.udp_payload_view;p.setUint16(0,b.dns.id);p.setUint16(2,b.dns.flags);p.setUint16(4,b.dns.questions.length);p.setUint16(6,b.dns.answers.length);let z=12;for(var v=0;v<b.dns.questions.length;++v){var t=b.dns.questions[v];for(q of t.name){const A=a.text_encoder.encodeInto(q,a.eth_frame.subarray(p.byteOffset+(z+1))).written;p.setUint8(z,A);z+=1+A}p.setUint16(z,t.type);z+=2;p.setUint16(z,
183
+ t.class);z+=2}for(v=0;v<b.dns.answers.length;++v){q=b.dns.answers[v];for(m of q.name)t=a.text_encoder.encodeInto(m,a.eth_frame.subarray(p.byteOffset+(z+1))).written,p.setUint8(z,t),z+=1+t;p.setUint16(z,q.type);z+=2;p.setUint16(z,q.class);z+=2;p.setUint32(z,q.ttl);z+=4;p.setUint16(z,q.data.length);z+=2;z+=Hb(z,q.data,p,a)}m=r+z}else b.ntp?(m=p,q=a.udp_payload_view,q.setUint8(0,b.ntp.flags),q.setUint8(1,b.ntp.stratum),q.setUint8(2,b.ntp.poll),q.setUint8(3,b.ntp.precision),q.setUint32(4,b.ntp.root_delay),
184
+ q.setUint32(8,b.ntp.root_disp),q.setUint32(12,b.ntp.ref_id),q.setUint32(16,b.ntp.ref_ts_i),q.setUint32(20,b.ntp.ref_ts_f),q.setUint32(24,b.ntp.ori_ts_i),q.setUint32(28,b.ntp.ori_ts_f),q.setUint32(32,b.ntp.rec_ts_i),q.setUint32(36,b.ntp.rec_ts_f),q.setUint32(40,b.ntp.trans_ts_i),q.setUint32(44,b.ntp.trans_ts_f),m+=48):m=p+Hb(0,b.udp.data,a.udp_payload_view,a);p=m;k.setUint16(0,b.udp.sport);k.setUint16(2,b.udp.dport);k.setUint16(4,p);k.setUint16(6,0);k.setUint16(6,Ib(p,(b.ipv4.src[0]<<8|b.ipv4.src[1])+
185
+ (b.ipv4.src[2]<<8|b.ipv4.src[3])+(b.ipv4.dest[0]<<8|b.ipv4.dest[1])+(b.ipv4.dest[2]<<8|b.ipv4.dest[3])+17+p,k,a));g+=p}else b.tcp&&(k=a.ipv4_payload_view,m=0,q=b.tcp,q.fin&&(m|=1),q.syn&&(m|=2),q.rst&&(m|=4),q.psh&&(m|=8),q.ack&&(m|=16),q.urg&&(m|=32),q.ece&&(m|=64),q.cwr&&(m|=128),k.setUint16(0,q.sport),k.setUint16(2,q.dport),k.setUint32(4,q.seq),k.setUint32(8,q.ackn),k.setUint8(12,80),k.setUint8(13,m),k.setUint16(14,q.winsize),k.setUint16(16,0),k.setUint16(18,q.urgent||0),m=20,b.tcp_data&&(m+=Hb(20,
186
+ b.tcp_data,k,a)),k.setUint16(16,Ib(m,(b.ipv4.src[0]<<8|b.ipv4.src[1])+(b.ipv4.src[2]<<8|b.ipv4.src[3])+(b.ipv4.dest[0]<<8|b.ipv4.dest[1])+(b.ipv4.dest[2]<<8|b.ipv4.dest[3])+6+m,k,a)),g+=m);f.setUint8(0,69);f.setUint8(1,b.ipv4.tos||0);f.setUint16(2,g);f.setUint16(4,b.ipv4.id||0);f.setUint8(6,64);f.setUint8(8,b.ipv4.ttl||32);f.setUint8(9,b.ipv4.proto);f.setUint16(10,0);Hb(12,b.ipv4.src,f,a);Hb(16,b.ipv4.dest,f,a);f.setUint16(10,Ib(20,0,f,a));e+=g}return d.call(c,0,e)}function Tb(a,b){fetch(`https://${b.doh_server||
187
+ "cloudflare-dns.com"}/dns-query`,{method:"POST",headers:[["content-type","application/dns-message"]],body:a.udp.data}).then(async c=>{c={eth:{ethertype:2048,src:b.router_mac,dest:a.eth.src},ipv4:{proto:17,src:b.router_ip,dest:a.ipv4.src},udp:{sport:53,dport:a.udp.sport,data:new Uint8Array(await c.arrayBuffer())}};b.receive(Jb(b.eth_encoder_buf,c))});return!0}function Ub(a,b){let c={};c.eth={ethertype:2048,src:b.router_mac,dest:a.eth.src};c.ipv4={proto:17,src:b.router_ip,dest:b.vm_ip};c.udp={sport:67,
188
+ dport:68};c.dhcp={htype:1,hlen:6,hops:0,xid:a.dhcp.xid,secs:0,flags:0,ciaddr:0,yiaddr:Eb(b.vm_ip),siaddr:Eb(b.router_ip),giaddr:Eb(b.router_ip),chaddr:a.dhcp.chaddr};let d=[],e=a.dhcp.options.find(function(f){return 53===f[0]});e&&3===e[2]&&(a.dhcp.op=3);1===a.dhcp.op&&(c.dhcp.op=2,d.push(new Uint8Array([53,1,2])));3===a.dhcp.op&&(c.dhcp.op=2,d.push(new Uint8Array([53,1,5])),d.push(new Uint8Array([51,4,8,0,0,0])));a=[b.router_ip[0],b.router_ip[1],b.router_ip[2],b.router_ip[3]];d.push(new Uint8Array([1,
189
+ 4,255,255,255,0]));b.masquerade&&(d.push(new Uint8Array([3,4].concat(a))),d.push(new Uint8Array([6,4].concat(a))));d.push(new Uint8Array([54,4].concat(a)));d.push(new Uint8Array([60,3].concat(Cb)));d.push(new Uint8Array([255,0]));c.dhcp.options=d;b.receive(Jb(b.eth_encoder_buf,c))}function Vb(a,b){let c={};var d=(new DataView(a.buffer,a.byteOffset,a.byteLength)).getUint16(12),e={ethertype:d,dest:a.subarray(0,6),dest_s:Db(a.subarray(0,6)),src:a.subarray(6,12),src_s:Db(a.subarray(6,12))};c.eth=e;a=
190
190
  a.subarray(14,a.length);if(2048===d){var f=new DataView(a.buffer,a.byteOffset,a.byteLength),g=a[0]>>4&15;e=a[0]&15;var k=f.getUint8(1),m=f.getUint16(2);let p=f.getUint8(8);d=f.getUint8(9);f=f.getUint16(10);g={version:g,ihl:e,tos:k,len:m,ttl:p,proto:d,ip_checksum:f,src:a.subarray(12,16),dest:a.subarray(16,20)};Math.max(m,46)!==a.length&&B(`ipv4 Length mismatch: ${m} != ${a.length}`,16777216);c.ipv4=g;e=a.subarray(4*e,m);if(1===d)a=new DataView(e.buffer,e.byteOffset,e.byteLength),a={type:a.getUint8(0),
191
191
  code:a.getUint8(1),checksum:a.getUint16(2),data:e.subarray(4)},c.icmp=a;else if(6===d)d=new DataView(e.buffer,e.byteOffset,e.byteLength),a={sport:d.getUint16(0),dport:d.getUint16(2),seq:d.getUint32(4),ackn:d.getUint32(8),doff:d.getUint8(12)>>4,winsize:d.getUint16(14),checksum:d.getUint16(16),urgent:d.getUint16(18)},d=d.getUint8(13),a.fin=!!(d&1),a.syn=!!(d&2),a.rst=!!(d&4),a.psh=!!(d&8),a.ack=!!(d&16),a.urg=!!(d&32),a.ece=!!(d&64),a.cwr=!!(d&128),c.tcp=a,c.tcp_data=e.subarray(4*a.doff);else if(17===
192
192
  d){a=new DataView(e.buffer,e.byteOffset,e.byteLength);a={sport:a.getUint16(0),dport:a.getUint16(2),len:a.getUint16(4),checksum:a.getUint16(6),data:e.subarray(8),data_s:(new TextDecoder).decode(e.subarray(8))};if(67===a.dport||67===a.sport){e=e.subarray(8);d=new DataView(e.buffer,e.byteOffset,e.byteLength);e.subarray(44,236);d={op:d.getUint8(0),htype:d.getUint8(1),hlen:d.getUint8(2),hops:d.getUint8(3),xid:d.getUint32(4),secs:d.getUint16(8),flags:d.getUint16(10),ciaddr:d.getUint32(12),yiaddr:d.getUint32(16),
193
- siaddr:d.getUint32(20),giaddr:d.getUint32(24),chaddr:e.subarray(28,44),magic:d.getUint32(236),options:[]};e=e.subarray(240);for(m=0;m<e.length;++m)g=m,0!==e[m]&&(++m,k=e[m],m+=k,d.options.push(e.subarray(g,g+k+2)));c.dhcp=d;c.dhcp_options=d.options}else 53===a.dport||53===a.sport?Vb(e.subarray(8),c):123===a.dport&&(d=e.subarray(8),d=new DataView(d.buffer,d.byteOffset,d.byteLength),c.ntp={flags:d.getUint8(0),stratum:d.getUint8(1),poll:d.getUint8(2),precision:d.getUint8(3),root_delay:d.getUint32(4),
193
+ siaddr:d.getUint32(20),giaddr:d.getUint32(24),chaddr:e.subarray(28,44),magic:d.getUint32(236),options:[]};e=e.subarray(240);for(m=0;m<e.length;++m)g=m,0!==e[m]&&(++m,k=e[m],m+=k,d.options.push(e.subarray(g,g+k+2)));c.dhcp=d;c.dhcp_options=d.options}else 53===a.dport||53===a.sport?Wb(e.subarray(8),c):123===a.dport&&(d=e.subarray(8),d=new DataView(d.buffer,d.byteOffset,d.byteLength),c.ntp={flags:d.getUint8(0),stratum:d.getUint8(1),poll:d.getUint8(2),precision:d.getUint8(3),root_delay:d.getUint32(4),
194
194
  root_disp:d.getUint32(8),ref_id:d.getUint32(12),ref_ts_i:d.getUint32(16),ref_ts_f:d.getUint32(20),ori_ts_i:d.getUint32(24),ori_ts_f:d.getUint32(28),rec_ts_i:d.getUint32(32),rec_ts_f:d.getUint32(36),trans_ts_i:d.getUint32(40),trans_ts_f:d.getUint32(44)});c.udp=a}}else 2054===d?(d=new DataView(a.buffer,a.byteOffset,a.byteLength),a={htype:d.getUint16(0),ptype:d.getUint16(2),oper:d.getUint16(6),sha:a.subarray(8,14),spa:a.subarray(14,18),tha:a.subarray(18,24),tpa:a.subarray(24,28)},c.arp=a):34525===d?
195
195
  B("Unimplemented: ipv6"):B("Unknown ethertype: "+n(d),16777216);if(c.ipv4)if(c.tcp)a:{a=`${c.ipv4.src.join(".")}:${c.tcp.sport}:${c.ipv4.dest.join(".")}:${c.tcp.dport}`;if(c.tcp.syn&&(b.tcp_conn[a]&&B("SYN to already opened port",16777216),b.on_tcp_connection(c,a)))break a;if(b.tcp_conn[a])b.tcp_conn[a].process(c);else{B(`I dont know about ${a}, so resetting`,16777216);a=c.tcp.ackn;if(c.tcp.fin||c.tcp.syn)a+=1;d={};d.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src};d.ipv4={proto:6,src:c.ipv4.dest,
196
- dest:c.ipv4.src};d.tcp={sport:c.tcp.dport,dport:c.tcp.sport,seq:a,ackn:c.tcp.seq+(c.tcp.syn?1:0),winsize:c.tcp.winsize,rst:!0,ack:c.tcp.syn};b.receive(Ib(b.eth_encoder_buf,d))}}else if(c.udp)if(c.dns)if("static"===b.dns_method){a={};a.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src};a.ipv4={proto:17,src:b.router_ip,dest:c.ipv4.src};a.udp={sport:53,dport:c.udp.sport};d=[];for(e=0;e<c.dns.questions.length;++e)switch(m=c.dns.questions[e],m.type){case 1:d.push({name:m.name,type:m.type,class:m.class,
197
- ttl:600,data:[192,168,87,1]})}a.dns={id:c.dns.id,flags:33152,questions:c.dns.questions,answers:d};b.receive(Ib(b.eth_encoder_buf,a))}else Jb(c,b);else c.dhcp?Tb(c,b):c.ntp?(a=Date.now()+zb,d=a%1E3/1E3*Ab,e={},e.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src},e.ipv4={proto:17,src:c.ipv4.dest,dest:c.ipv4.src},e.udp={sport:123,dport:c.udp.sport},e.ntp=Object.assign({},c.ntp),e.ntp.flags=36,e.ntp.poll=10,e.ntp.ori_ts_i=c.ntp.trans_ts_i,e.ntp.ori_ts_f=c.ntp.trans_ts_f,e.ntp.rec_ts_i=a/1E3,e.ntp.rec_ts_f=
198
- d,e.ntp.trans_ts_i=a/1E3,e.ntp.trans_ts_f=d,e.ntp.stratum=2,b.receive(Ib(b.eth_encoder_buf,e))):8===c.udp.dport&&(a={},a.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src},a.ipv4={proto:17,src:c.ipv4.dest,dest:c.ipv4.src},a.udp={sport:c.udp.dport,dport:c.udp.sport,data:(new TextEncoder).encode(c.udp.data_s)},b.receive(Ib(b.eth_encoder_buf,a)));else c.icmp&&8===c.icmp.type&&(a={},a.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src},a.ipv4={proto:1,src:c.ipv4.dest,dest:c.ipv4.src},a.icmp={type:0,
199
- code:c.icmp.code,data:c.icmp.data},b.receive(Ib(b.eth_encoder_buf,a)));else c.arp&&1===c.arp.oper&&2048===c.arp.ptype&&(a=Db(c.arp.tpa)&4294967040,d=Db(b.router_ip)&4294967040,!b.masquerade&&a!==d||a===d&&99<c.arp.tpa[3]||(a={},a.eth={ethertype:2054,src:b.router_mac,dest:c.eth.src},a.arp={htype:1,ptype:2048,oper:2,sha:b.router_mac,spa:c.arp.tpa,tha:c.eth.src,tpa:c.arp.spa},b.receive(Ib(b.eth_encoder_buf,a))))}function Vb(a,b){function c(){let p=[],q;do q=d.getUint8(k),p.push((new TextDecoder).decode(a.subarray(k+
196
+ dest:c.ipv4.src};d.tcp={sport:c.tcp.dport,dport:c.tcp.sport,seq:a,ackn:c.tcp.seq+(c.tcp.syn?1:0),winsize:c.tcp.winsize,rst:!0,ack:c.tcp.syn};b.receive(Jb(b.eth_encoder_buf,d))}}else if(c.udp)if(c.dns)if("static"===b.dns_method){a={};a.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src};a.ipv4={proto:17,src:b.router_ip,dest:c.ipv4.src};a.udp={sport:53,dport:c.udp.sport};d=[];for(e=0;e<c.dns.questions.length;++e)switch(m=c.dns.questions[e],m.type){case 1:d.push({name:m.name,type:m.type,class:m.class,
197
+ ttl:600,data:[192,168,87,1]})}a.dns={id:c.dns.id,flags:33152,questions:c.dns.questions,answers:d};b.receive(Jb(b.eth_encoder_buf,a))}else Tb(c,b);else c.dhcp?Ub(c,b):c.ntp?(a=Date.now()+Ab,d=a%1E3/1E3*Bb,e={},e.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src},e.ipv4={proto:17,src:c.ipv4.dest,dest:c.ipv4.src},e.udp={sport:123,dport:c.udp.sport},e.ntp=Object.assign({},c.ntp),e.ntp.flags=36,e.ntp.poll=10,e.ntp.ori_ts_i=c.ntp.trans_ts_i,e.ntp.ori_ts_f=c.ntp.trans_ts_f,e.ntp.rec_ts_i=a/1E3,e.ntp.rec_ts_f=
198
+ d,e.ntp.trans_ts_i=a/1E3,e.ntp.trans_ts_f=d,e.ntp.stratum=2,b.receive(Jb(b.eth_encoder_buf,e))):8===c.udp.dport&&(a={},a.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src},a.ipv4={proto:17,src:c.ipv4.dest,dest:c.ipv4.src},a.udp={sport:c.udp.dport,dport:c.udp.sport,data:(new TextEncoder).encode(c.udp.data_s)},b.receive(Jb(b.eth_encoder_buf,a)));else c.icmp&&8===c.icmp.type&&(a={},a.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src},a.ipv4={proto:1,src:c.ipv4.dest,dest:c.ipv4.src},a.icmp={type:0,
199
+ code:c.icmp.code,data:c.icmp.data},b.receive(Jb(b.eth_encoder_buf,a)));else c.arp&&1===c.arp.oper&&2048===c.arp.ptype&&(a=Eb(c.arp.tpa)&4294967040,d=Eb(b.router_ip)&4294967040,!b.masquerade&&a!==d||a===d&&99<c.arp.tpa[3]||(a={},a.eth={ethertype:2054,src:b.router_mac,dest:c.eth.src},a.arp={htype:1,ptype:2048,oper:2,sha:b.router_mac,spa:c.arp.tpa,tha:c.eth.src,tpa:c.arp.spa},b.receive(Jb(b.eth_encoder_buf,a))))}function Wb(a,b){function c(){let p=[],q;do q=d.getUint8(k),p.push((new TextDecoder).decode(a.subarray(k+
200
200
  1,k+1+q))),k+=q+1;while(0<q);return p}let d=new DataView(a.buffer,a.byteOffset,a.byteLength),e={id:d.getUint16(0),flags:d.getUint16(2),questions:[],answers:[]};var f=d.getUint16(4);let g=d.getUint16(6);d.getUint16(8);d.getUint16(10);let k=12;for(var m=0;m<f;m++)e.questions.push({name:c(),type:d.getInt16(k),class:d.getInt16(k+2)}),k+=4;for(f=0;f<g;f++){m={name:c(),type:d.getInt16(k),class:d.getUint16(k+2),ttl:d.getUint32(k+4)};k+=8;let p=d.getUint16(k);k+=2;m.data=a.subarray(k,k+p);k+=p;e.answers.push(m)}b.dns=
201
- e}function Wb(a,b){var c=b.vm_ip.join(".");const d=b.router_ip.join("."),e=16383*Math.random()|0;let f,g,k=0;do f=49152+(e+k)%16383,g=`${c}:${a}:${d}:${f}`;while(16383>++k&&b.tcp_conn[g]);if(b.tcp_conn[g])throw Error("pool of dynamic TCP port numbers exhausted, connection aborted");c=new Xb;c.tuple=g;c.hsrc=b.router_mac;c.psrc=b.router_ip;c.sport=f;c.hdest=b.vm_mac;c.dport=a;c.pdest=b.vm_ip;c.net=b;b.tcp_conn[g]=c;c.connect();return c}function Yb(a,b){return new Promise(c=>{let d=Wb(a,b);d.state=
202
- "syn-probe";d.on("probe",c)})}function Xb(){this.state="closed";this.net=null;this.send_buffer=new Eb(2048,0);this.send_chunk_buf=new Uint8Array(1460);this.delayed_send_fin=this.in_active_close=!1;this.delayed_state=void 0;this.events_handlers={}}Xb.prototype.on=function(a,b){this.events_handlers[a]=b};Xb.prototype.emit=function(a,...b){this.events_handlers[a]&&this.events_handlers[a].apply(this,b)};Xb.prototype.ipv4_reply=function(){let a={};a.eth={ethertype:2048,src:this.hsrc,dest:this.hdest};a.ipv4=
203
- {proto:6,src:this.psrc,dest:this.pdest};a.tcp={sport:this.sport,dport:this.dport,winsize:this.winsize,ackn:this.ack,seq:this.seq,ack:!0};return a};Xb.prototype.packet_reply=function(a,b){a={sport:a.tcp.dport,dport:a.tcp.sport,winsize:a.tcp.winsize,ackn:this.ack,seq:this.seq};if(b)for(const c in b)a[c]=b[c];b=this.ipv4_reply();b.tcp=a;return b};Xb.prototype.connect=function(){this.seq=1338;this.ack=1;this.start_seq=0;this.winsize=64240;this.state="syn-sent";let a=this.ipv4_reply();a.ipv4.id=2345;a.tcp=
204
- {sport:this.sport,dport:this.dport,seq:1337,ackn:0,winsize:0,syn:!0};this.net.receive(Ib(this.net.eth_encoder_buf,a))};Xb.prototype.accept=function(a){this.seq=1338;this.ack=a.tcp.seq+1;this.start_seq=a.tcp.seq;this.hsrc=this.net.router_mac;this.psrc=a.ipv4.dest;this.sport=a.tcp.dport;this.hdest=a.eth.src;this.dport=a.tcp.sport;this.pdest=a.ipv4.src;this.winsize=a.tcp.winsize;let b=this.ipv4_reply();b.tcp={sport:this.sport,dport:this.dport,seq:1337,ackn:this.ack,winsize:a.tcp.winsize,syn:!0,ack:!0};
205
- this.state="established";this.net.receive(Ib(this.net.eth_encoder_buf,b))};Xb.prototype.process=function(a){if("closed"===this.state)a=this.packet_reply(a,{rst:!0}),this.net.receive(Ib(this.net.eth_encoder_buf,a));else if(a.tcp.rst){if("syn-probe"===this.state)this.emit("probe",!1);else this.on_close();this.release()}else if(a.tcp.syn){if("syn-sent"===this.state&&a.tcp.ack){this.ack=a.tcp.seq+1;this.start_seq=a.tcp.seq;this.last_received_ackn=a.tcp.ackn;var b=this.ipv4_reply();this.net.receive(Ib(this.net.eth_encoder_buf,
206
- b));this.state="established";this.emit("connect")}else"syn-probe"===this.state&&a.tcp.ack?(this.emit("probe",!0),b=this.packet_reply(a,{rst:!0}),this.net.receive(Ib(this.net.eth_encoder_buf,b)),this.release()):B(`TCP[${this.tuple}]: WARNING: unexpected SYN packet dropped`,16777216);a.tcp_data.length&&B(`TCP[${this.tuple}]: WARNING: ${a.tcp_data.length} bytes of unexpected SYN packet payload dropped`,16777216)}else{if(a.tcp.ack)if("syn-received"===this.state)this.state="established";else if("fin-wait-1"===
207
- this.state)a.tcp.fin||(this.state="fin-wait-2");else if("closing"===this.state||"last-ack"===this.state){this.release();return}if(void 0===this.last_received_ackn)this.last_received_ackn=a.tcp.ackn;else if(b=a.tcp.ackn-this.last_received_ackn,0<b){if(this.last_received_ackn=a.tcp.ackn,this.send_buffer.remove(b),this.seq+=b,this.pending=!1,this.delayed_send_fin&&!this.send_buffer.length){this.delayed_send_fin=!1;this.state=this.delayed_state;a=this.ipv4_reply();a.tcp.fin=!0;this.net.receive(Ib(this.net.eth_encoder_buf,
208
- a));return}}else if(0>b){B(`TCP[${this.tuple}]: ERROR: ack underflow (pkt=${a.tcp.ackn} last=${this.last_received_ackn}), resetting`,16777216);a=this.packet_reply(a,{rst:!0});this.net.receive(Ib(this.net.eth_encoder_buf,a));this.on_close();this.release();return}a.tcp.fin?(this.ack!==a.tcp.seq&&B(`TCP[${this.tuple}]: WARNING: closing connection in state "${this.state}" with invalid seq (${this.ack} != ${a.tcp.seq})`,16777216),++this.ack,b=this.packet_reply(a,{}),"established"===this.state?(b.tcp.ack=
209
- !0,this.state="close-wait",this.on_shutdown()):"fin-wait-1"===this.state?(a.tcp.ack?this.release():this.state="closing",b.tcp.ack=!0):"fin-wait-2"===this.state?(this.release(),b.tcp.ack=!0):(this.release(),this.on_close(),b.tcp.rst=!0),this.net.receive(Ib(this.net.eth_encoder_buf,b))):this.ack!==a.tcp.seq?(this.ack!==a.tcp.seq+1&&B(`Packet seq was wrong ex: ${this.ack} ~${this.ack-this.start_seq} `+`pk: ${a.tcp.seq} ~${this.start_seq-a.tcp.seq} `+`(${this.ack-a.tcp.seq}) = ${this.name}`,16777216),
210
- a=this.packet_reply(a,{ack:!0}),this.net.receive(Ib(this.net.eth_encoder_buf,a))):a.tcp.ack&&0<a.tcp_data.length&&(this.ack+=a.tcp_data.length,b=this.ipv4_reply(),this.net.receive(Ib(this.net.eth_encoder_buf,b)),this.emit("data",a.tcp_data));this.pump()}};Xb.prototype.write=function(a){this.in_active_close||this.send_buffer.write(a);this.pump()};Xb.prototype.writev=function(a){if(!this.in_active_close)for(const b of a)this.send_buffer.write(b);this.pump()};Xb.prototype.close=function(){if(!this.in_active_close){this.in_active_close=
211
- !0;if("established"===this.state||"syn-received"===this.state)var a="fin-wait-1";else if("close-wait"===this.state)a="last-ack";else{"syn-sent"!==this.state&&B(`TCP[${this.tuple}]: active close in unexpected state "${this.state}"`,16777216);this.release();return}this.send_buffer.length||this.pending?(this.delayed_send_fin=!0,this.delayed_state=a):(this.state=a,a=this.ipv4_reply(),a.tcp.fin=!0,this.net.receive(Ib(this.net.eth_encoder_buf,a)))}this.pump()};Xb.prototype.on_shutdown=function(){this.emit("shutdown")};
212
- Xb.prototype.on_close=function(){this.emit("close")};Xb.prototype.release=function(){this.net.tcp_conn[this.tuple]&&(this.state="closed",delete this.net.tcp_conn[this.tuple])};Xb.prototype.pump=function(){if(this.send_buffer.length&&!this.pending){const a=this.send_chunk_buf,b=this.send_buffer.peek(a),c=this.ipv4_reply();c.tcp.psh=!0;c.tcp_data=a.subarray(0,b);this.net.receive(Ib(this.net.eth_encoder_buf,c));this.pending=!0}};function Zb(a,b){b=b||{};this.bus=a;this.id=b.id||0;this.router_mac=new Uint8Array((b.router_mac||
213
- "52:54:0:1:2:3").split(":").map(function(c){return parseInt(c,16)}));this.router_ip=new Uint8Array((b.router_ip||"192.168.86.1").split(".").map(function(c){return parseInt(c,10)}));this.vm_ip=new Uint8Array((b.vm_ip||"192.168.86.100").split(".").map(function(c){return parseInt(c,10)}));this.masquerade=void 0===b.masquerade||!!b.masquerade;this.vm_mac=new Uint8Array(6);this.dns_method=b.dns_method||"static";this.doh_server=b.doh_server;this.tcp_conn={};this.eth_encoder_buf=Fb();this.fetch=(...c)=>
214
- fetch(...c);this.cors_proxy=b.cors_proxy;this.bus.register("net"+this.id+"-mac",function(c){this.vm_mac=new Uint8Array(c.split(":").map(function(d){return parseInt(d,16)}))},this);this.bus.register("net"+this.id+"-send",function(c){this.send(c)},this)}Zb.prototype.destroy=function(){};Zb.prototype.on_tcp_connection=function(a,b){if(80===a.tcp.dport){let c=new Xb;c.state="syn-received";c.net=this;c.on("data",$b);c.tuple=b;c.accept(a);this.tcp_conn[b]=c;return!0}return!1};Zb.prototype.connect=function(a){return Wb(a,
215
- this)};Zb.prototype.tcp_probe=function(a){return Yb(a,this)};async function $b(a){this.read=this.read||"";if((this.read+=(new TextDecoder).decode(a))&&-1!==this.read.indexOf("\r\n\r\n")){a=this.read.indexOf("\r\n\r\n");var b=this.read.substring(0,a).split(/\r\n/);a=this.read.substring(a+4);this.read="";let c=b[0].split(" "),d;d=/^https?:/.test(c[1])?new URL(c[1]):new URL("http://host"+c[1]);"undefined"!==typeof window&&"http:"===d.protocol&&"https:"===window.location.protocol&&(d.protocol="https:");
201
+ e}function Xb(a,b){var c=b.vm_ip.join(".");const d=b.router_ip.join("."),e=16383*Math.random()|0;let f,g,k=0;do f=49152+(e+k)%16383,g=`${c}:${a}:${d}:${f}`;while(16383>++k&&b.tcp_conn[g]);if(b.tcp_conn[g])throw Error("pool of dynamic TCP port numbers exhausted, connection aborted");c=new Yb;c.tuple=g;c.hsrc=b.router_mac;c.psrc=b.router_ip;c.sport=f;c.hdest=b.vm_mac;c.dport=a;c.pdest=b.vm_ip;c.net=b;b.tcp_conn[g]=c;c.connect();return c}function Zb(a,b){return new Promise(c=>{let d=Xb(a,b);d.state=
202
+ "syn-probe";d.on("probe",c)})}function Yb(){this.state="closed";this.net=null;this.send_buffer=new Fb(2048,0);this.send_chunk_buf=new Uint8Array(1460);this.delayed_send_fin=this.in_active_close=!1;this.delayed_state=void 0;this.events_handlers={}}Yb.prototype.on=function(a,b){this.events_handlers[a]=b};Yb.prototype.emit=function(a,...b){this.events_handlers[a]&&this.events_handlers[a].apply(this,b)};Yb.prototype.ipv4_reply=function(){let a={};a.eth={ethertype:2048,src:this.hsrc,dest:this.hdest};a.ipv4=
203
+ {proto:6,src:this.psrc,dest:this.pdest};a.tcp={sport:this.sport,dport:this.dport,winsize:this.winsize,ackn:this.ack,seq:this.seq,ack:!0};return a};Yb.prototype.packet_reply=function(a,b){a={sport:a.tcp.dport,dport:a.tcp.sport,winsize:a.tcp.winsize,ackn:this.ack,seq:this.seq};if(b)for(const c in b)a[c]=b[c];b=this.ipv4_reply();b.tcp=a;return b};Yb.prototype.connect=function(){this.seq=1338;this.ack=1;this.start_seq=0;this.winsize=64240;this.state="syn-sent";let a=this.ipv4_reply();a.ipv4.id=2345;a.tcp=
204
+ {sport:this.sport,dport:this.dport,seq:1337,ackn:0,winsize:0,syn:!0};this.net.receive(Jb(this.net.eth_encoder_buf,a))};Yb.prototype.accept=function(a){this.seq=1338;this.ack=a.tcp.seq+1;this.start_seq=a.tcp.seq;this.hsrc=this.net.router_mac;this.psrc=a.ipv4.dest;this.sport=a.tcp.dport;this.hdest=a.eth.src;this.dport=a.tcp.sport;this.pdest=a.ipv4.src;this.winsize=a.tcp.winsize;let b=this.ipv4_reply();b.tcp={sport:this.sport,dport:this.dport,seq:1337,ackn:this.ack,winsize:a.tcp.winsize,syn:!0,ack:!0};
205
+ this.state="established";this.net.receive(Jb(this.net.eth_encoder_buf,b))};Yb.prototype.process=function(a){if("closed"===this.state)a=this.packet_reply(a,{rst:!0}),this.net.receive(Jb(this.net.eth_encoder_buf,a));else if(a.tcp.rst){if("syn-probe"===this.state)this.emit("probe",!1);else this.on_close();this.release()}else if(a.tcp.syn){if("syn-sent"===this.state&&a.tcp.ack){this.ack=a.tcp.seq+1;this.start_seq=a.tcp.seq;this.last_received_ackn=a.tcp.ackn;var b=this.ipv4_reply();this.net.receive(Jb(this.net.eth_encoder_buf,
206
+ b));this.state="established";this.emit("connect")}else"syn-probe"===this.state&&a.tcp.ack?(this.emit("probe",!0),b=this.packet_reply(a,{rst:!0}),this.net.receive(Jb(this.net.eth_encoder_buf,b)),this.release()):B(`TCP[${this.tuple}]: WARNING: unexpected SYN packet dropped`,16777216);a.tcp_data.length&&B(`TCP[${this.tuple}]: WARNING: ${a.tcp_data.length} bytes of unexpected SYN packet payload dropped`,16777216)}else{if(a.tcp.ack)if("syn-received"===this.state)this.state="established";else if("fin-wait-1"===
207
+ this.state)a.tcp.fin||(this.state="fin-wait-2");else if("closing"===this.state||"last-ack"===this.state){this.release();return}if(void 0===this.last_received_ackn)this.last_received_ackn=a.tcp.ackn;else if(b=a.tcp.ackn-this.last_received_ackn,0<b){if(this.last_received_ackn=a.tcp.ackn,this.send_buffer.remove(b),this.seq+=b,this.pending=!1,this.delayed_send_fin&&!this.send_buffer.length){this.delayed_send_fin=!1;this.state=this.delayed_state;a=this.ipv4_reply();a.tcp.fin=!0;this.net.receive(Jb(this.net.eth_encoder_buf,
208
+ a));return}}else if(0>b){B(`TCP[${this.tuple}]: ERROR: ack underflow (pkt=${a.tcp.ackn} last=${this.last_received_ackn}), resetting`,16777216);a=this.packet_reply(a,{rst:!0});this.net.receive(Jb(this.net.eth_encoder_buf,a));this.on_close();this.release();return}a.tcp.fin?(this.ack!==a.tcp.seq&&B(`TCP[${this.tuple}]: WARNING: closing connection in state "${this.state}" with invalid seq (${this.ack} != ${a.tcp.seq})`,16777216),++this.ack,b=this.packet_reply(a,{}),"established"===this.state?(b.tcp.ack=
209
+ !0,this.state="close-wait",this.on_shutdown()):"fin-wait-1"===this.state?(a.tcp.ack?this.release():this.state="closing",b.tcp.ack=!0):"fin-wait-2"===this.state?(this.release(),b.tcp.ack=!0):(this.release(),this.on_close(),b.tcp.rst=!0),this.net.receive(Jb(this.net.eth_encoder_buf,b))):this.ack!==a.tcp.seq?(this.ack!==a.tcp.seq+1&&B(`Packet seq was wrong ex: ${this.ack} ~${this.ack-this.start_seq} `+`pk: ${a.tcp.seq} ~${this.start_seq-a.tcp.seq} `+`(${this.ack-a.tcp.seq}) = ${this.name}`,16777216),
210
+ a=this.packet_reply(a,{ack:!0}),this.net.receive(Jb(this.net.eth_encoder_buf,a))):a.tcp.ack&&0<a.tcp_data.length&&(this.ack+=a.tcp_data.length,b=this.ipv4_reply(),this.net.receive(Jb(this.net.eth_encoder_buf,b)),this.emit("data",a.tcp_data));this.pump()}};Yb.prototype.write=function(a){this.in_active_close||this.send_buffer.write(a);this.pump()};Yb.prototype.writev=function(a){if(!this.in_active_close)for(const b of a)this.send_buffer.write(b);this.pump()};Yb.prototype.close=function(){if(!this.in_active_close){this.in_active_close=
211
+ !0;if("established"===this.state||"syn-received"===this.state)var a="fin-wait-1";else if("close-wait"===this.state)a="last-ack";else{"syn-sent"!==this.state&&B(`TCP[${this.tuple}]: active close in unexpected state "${this.state}"`,16777216);this.release();return}this.send_buffer.length||this.pending?(this.delayed_send_fin=!0,this.delayed_state=a):(this.state=a,a=this.ipv4_reply(),a.tcp.fin=!0,this.net.receive(Jb(this.net.eth_encoder_buf,a)))}this.pump()};Yb.prototype.on_shutdown=function(){this.emit("shutdown")};
212
+ Yb.prototype.on_close=function(){this.emit("close")};Yb.prototype.release=function(){this.net.tcp_conn[this.tuple]&&(this.state="closed",delete this.net.tcp_conn[this.tuple])};Yb.prototype.pump=function(){if(this.send_buffer.length&&!this.pending){const a=this.send_chunk_buf,b=this.send_buffer.peek(a),c=this.ipv4_reply();c.tcp.psh=!0;c.tcp_data=a.subarray(0,b);this.net.receive(Jb(this.net.eth_encoder_buf,c));this.pending=!0}};function $b(a,b){b=b||{};this.bus=a;this.id=b.id||0;this.router_mac=new Uint8Array((b.router_mac||
213
+ "52:54:0:1:2:3").split(":").map(function(c){return parseInt(c,16)}));this.router_ip=new Uint8Array((b.router_ip||"192.168.86.1").split(".").map(function(c){return parseInt(c,10)}));this.vm_ip=new Uint8Array((b.vm_ip||"192.168.86.100").split(".").map(function(c){return parseInt(c,10)}));this.masquerade=void 0===b.masquerade||!!b.masquerade;this.vm_mac=new Uint8Array(6);this.dns_method=b.dns_method||"static";this.doh_server=b.doh_server;this.tcp_conn={};this.eth_encoder_buf=Gb();this.fetch=(...c)=>
214
+ fetch(...c);this.cors_proxy=b.cors_proxy;this.bus.register("net"+this.id+"-mac",function(c){this.vm_mac=new Uint8Array(c.split(":").map(function(d){return parseInt(d,16)}))},this);this.bus.register("net"+this.id+"-send",function(c){this.send(c)},this)}$b.prototype.destroy=function(){};$b.prototype.on_tcp_connection=function(a,b){if(80===a.tcp.dport){let c=new Yb;c.state="syn-received";c.net=this;c.on("data",ac);c.tuple=b;c.accept(a);this.tcp_conn[b]=c;return!0}return!1};$b.prototype.connect=function(a){return Xb(a,
215
+ this)};$b.prototype.tcp_probe=function(a){return Zb(a,this)};async function ac(a){this.read=this.read||"";if((this.read+=(new TextDecoder).decode(a))&&-1!==this.read.indexOf("\r\n\r\n")){a=this.read.indexOf("\r\n\r\n");var b=this.read.substring(0,a).split(/\r\n/);a=this.read.substring(a+4);this.read="";let c=b[0].split(" "),d;d=/^https?:/.test(c[1])?new URL(c[1]):new URL("http://host"+c[1]);"undefined"!==typeof window&&"http:"===d.protocol&&"https:"===window.location.protocol&&(d.protocol="https:");
216
216
  let e=new Headers;for(let k=1;k<b.length;++k){const m=this.net.parse_http_header(b[k]);if(!m){console.warn('The request contains an invalid header: "%s"',b[k]);this.net.respond_text_and_close(this,400,"Bad Request",`Invalid header in request: ${b[k]}`);return}"host"===m.key.toLowerCase()?d.host=m.value:e.append(m.key,m.value)}if(!this.net.cors_proxy&&/^\d+\.external$/.test(d.hostname))if(B("Request to localhost: "+d.href,16777216),b=parseInt(d.hostname.split(".")[0],10),!isNaN(b)&&0<b&&65536>b)d.protocol=
217
217
  "http:",d.hostname="localhost",d.port=b.toString(10);else{console.warn('Unknown port for localhost: "%s"',d.href);this.net.respond_text_and_close(this,400,"Bad Request",`Unknown port for localhost: ${d.href}`);return}B("HTTP Dispatch: "+d.href,16777216);this.name=d.href;b={method:c[0],headers:e};-1!==["put","post"].indexOf(b.method.toLowerCase())&&(b.body=a);const f=this.net.cors_proxy?this.net.cors_proxy+encodeURIComponent(d.href):d.href;new TextEncoder;let g=!1;this.net.fetch(f,b).then(k=>{let m=
218
218
  new Headers(k.headers);m.delete("content-encoding");m.delete("keep-alive");m.delete("content-length");m.delete("transfer-encoding");m.set("x-was-fetch-redirected",`${!!k.redirected}`);m.set("x-fetch-resp-url",k.url);m.set("connection","close");this.write(this.net.form_response_head(k.status,k.statusText,m));g=!0;if(k.body&&k.body.getReader){const p=k.body.getReader(),q=({value:r,done:v})=>{r&&this.write(r);if(v)this.close();else return p.read().then(q)};p.read().then(q)}else k.arrayBuffer().then(p=>
219
- {this.write(new Uint8Array(p));this.close()})}).catch(k=>{console.warn("Fetch Failed: "+f+"\n"+k);g||this.net.respond_text_and_close(this,502,"Fetch Error",`Fetch ${f} failed:\n\n${k.stack||k.message}`);this.close()})}}Zb.prototype.fetch=async function(a,b){this.cors_proxy&&(a=this.cors_proxy+encodeURIComponent(a));try{const c=await fetch(a,b),d=await c.arrayBuffer();return[c,d]}catch(c){return console.warn("Fetch Failed: "+a+"\n"+c),[{status:502,statusText:"Fetch Error",headers:new Headers({"Content-Type":"text/plain"})},
220
- (new TextEncoder).encode(`Fetch ${a} failed:\n\n${c.stack}`).buffer]}};Zb.prototype.form_response_head=function(a,b,c){a=[`HTTP/1.1 ${a} ${b}`];for(const [d,e]of c.entries())a.push(`${d}: ${e}`);return(new TextEncoder).encode(a.join("\r\n")+"\r\n\r\n")};Zb.prototype.respond_text_and_close=function(a,b,c,d){const e=new Headers({"content-type":"text/plain","content-length":d.length.toString(10),connection:"close"});a.writev([this.form_response_head(b,c,e),(new TextEncoder).encode(d)]);a.close()};Zb.prototype.parse_http_header=
221
- function(a){var b=a.match(/^([^:]*):(.*)$/);if(b)if(a=b[1],b=b[2].trim(),0===a.length)B("Header key is empty, raw header",16777216);else if(0===b.length)B("Header value is empty",16777216);else if(/^[\w-]+$/.test(a)){if(/^[\x20-\x7E]+$/.test(b))return{key:a,value:b};B("Header value contains forbidden characters",16777216)}else B("Header key contains forbidden characters",16777216);else B("Unable to parse HTTP header",16777216)};Zb.prototype.send=function(a){Ub(a,this)};Zb.prototype.receive=function(a){this.bus.send("net"+
222
- this.id+"-receive",new Uint8Array(a))};function ac(a,b,c){this.register_ws(a);this.last_stream=1;this.connections={0:{congestion:0}};this.congested_buffer=[];c=c||{};this.bus=b;this.id=c.id||0;this.router_mac=new Uint8Array((c.router_mac||"52:54:0:1:2:3").split(":").map(function(d){return parseInt(d,16)}));this.router_ip=new Uint8Array((c.router_ip||"192.168.86.1").split(".").map(function(d){return parseInt(d,10)}));this.vm_ip=new Uint8Array((c.vm_ip||"192.168.86.100").split(".").map(function(d){return parseInt(d,
223
- 10)}));this.masquerade=void 0===c.masquerade||!!c.masquerade;this.vm_mac=new Uint8Array(6);this.dns_method=c.dns_method||"doh";this.doh_server=c.doh_server;this.tcp_conn={};this.eth_encoder_buf=Fb();this.bus.register("net"+this.id+"-mac",function(d){this.vm_mac=new Uint8Array(d.split(":").map(function(e){return parseInt(e,16)}))},this);this.bus.register("net"+this.id+"-send",function(d){this.send(d)},this)}ac.prototype.register_ws=function(a){this.wispws=new WebSocket(a.replace("wisp://","ws://").replace("wisps://",
224
- "wss://"));this.wispws.binaryType="arraybuffer";this.wispws.onmessage=b=>{this.process_incoming_wisp_frame(new Uint8Array(b.data))};this.wispws.onclose=()=>{setTimeout(()=>{this.register_ws(a)},1E4)}};ac.prototype.send_packet=function(a,b,c){this.connections[c]&&(0<this.connections[c].congestion?("DATA"===b&&this.connections[c].congestion--,this.wispws.send(a)):(this.connections[c].congested=!0,this.congested_buffer.push({data:a,type:b})))};ac.prototype.process_incoming_wisp_frame=function(a){const b=
219
+ {this.write(new Uint8Array(p));this.close()})}).catch(k=>{console.warn("Fetch Failed: "+f+"\n"+k);g||this.net.respond_text_and_close(this,502,"Fetch Error",`Fetch ${f} failed:\n\n${k.stack||k.message}`);this.close()})}}$b.prototype.fetch=async function(a,b){this.cors_proxy&&(a=this.cors_proxy+encodeURIComponent(a));try{const c=await fetch(a,b),d=await c.arrayBuffer();return[c,d]}catch(c){return console.warn("Fetch Failed: "+a+"\n"+c),[{status:502,statusText:"Fetch Error",headers:new Headers({"Content-Type":"text/plain"})},
220
+ (new TextEncoder).encode(`Fetch ${a} failed:\n\n${c.stack}`).buffer]}};$b.prototype.form_response_head=function(a,b,c){a=[`HTTP/1.1 ${a} ${b}`];for(const [d,e]of c.entries())a.push(`${d}: ${e}`);return(new TextEncoder).encode(a.join("\r\n")+"\r\n\r\n")};$b.prototype.respond_text_and_close=function(a,b,c,d){const e=new Headers({"content-type":"text/plain","content-length":d.length.toString(10),connection:"close"});a.writev([this.form_response_head(b,c,e),(new TextEncoder).encode(d)]);a.close()};$b.prototype.parse_http_header=
221
+ function(a){var b=a.match(/^([^:]*):(.*)$/);if(b)if(a=b[1],b=b[2].trim(),0===a.length)B("Header key is empty, raw header",16777216);else if(0===b.length)B("Header value is empty",16777216);else if(/^[\w-]+$/.test(a)){if(/^[\x20-\x7E]+$/.test(b))return{key:a,value:b};B("Header value contains forbidden characters",16777216)}else B("Header key contains forbidden characters",16777216);else B("Unable to parse HTTP header",16777216)};$b.prototype.send=function(a){Vb(a,this)};$b.prototype.receive=function(a){this.bus.send("net"+
222
+ this.id+"-receive",new Uint8Array(a))};function bc(a,b,c){this.register_ws(a);this.last_stream=1;this.connections={0:{congestion:0}};this.congested_buffer=[];c=c||{};this.bus=b;this.id=c.id||0;this.router_mac=new Uint8Array((c.router_mac||"52:54:0:1:2:3").split(":").map(function(d){return parseInt(d,16)}));this.router_ip=new Uint8Array((c.router_ip||"192.168.86.1").split(".").map(function(d){return parseInt(d,10)}));this.vm_ip=new Uint8Array((c.vm_ip||"192.168.86.100").split(".").map(function(d){return parseInt(d,
223
+ 10)}));this.masquerade=void 0===c.masquerade||!!c.masquerade;this.vm_mac=new Uint8Array(6);this.dns_method=c.dns_method||"doh";this.doh_server=c.doh_server;this.tcp_conn={};this.eth_encoder_buf=Gb();this.bus.register("net"+this.id+"-mac",function(d){this.vm_mac=new Uint8Array(d.split(":").map(function(e){return parseInt(e,16)}))},this);this.bus.register("net"+this.id+"-send",function(d){this.send(d)},this)}bc.prototype.register_ws=function(a){this.wispws=new WebSocket(a.replace("wisp://","ws://").replace("wisps://",
224
+ "wss://"));this.wispws.binaryType="arraybuffer";this.wispws.onmessage=b=>{this.process_incoming_wisp_frame(new Uint8Array(b.data))};this.wispws.onclose=()=>{setTimeout(()=>{this.register_ws(a)},1E4)}};bc.prototype.send_packet=function(a,b,c){this.connections[c]&&(0<this.connections[c].congestion?("DATA"===b&&this.connections[c].congestion--,this.wispws.send(a)):(this.connections[c].congested=!0,this.congested_buffer.push({data:a,type:b})))};bc.prototype.process_incoming_wisp_frame=function(a){const b=
225
225
  new DataView(a.buffer),c=b.getUint32(1,!0);switch(a[0]){case 1:B("Server sent client-only packet CONNECT",1048576);break;case 2:if(this.connections[c])this.connections[c].data_callback(a.slice(5));else throw Error("Got a DATA packet but stream not registered. ID: "+c);break;case 3:this.connections[c]&&(this.connections[c].congestion=b.getUint32(5,!0));if(this.connections[c].congested){for(const d of this.congested_buffer)this.send_packet(d.data,d.type,c);this.connections[c].congested=!1}break;case 4:this.connections[c]&&
226
- this.connections[c].close_callback(b.getUint8(5));delete this.connections[c];break;case 5:B("got a wisp V2 upgrade request, ignoring",1048576);break;default:B("Wisp server returned unknown packet: "+a[0],1048576)}};ac.prototype.send_wisp_frame=function(a){let b,c;switch(a.type){case "CONNECT":const d=(new TextEncoder).encode(a.hostname);b=new Uint8Array(8+d.length);c=new DataView(b.buffer);c.setUint8(0,1);c.setUint32(1,a.stream_id,!0);c.setUint8(5,1);c.setUint16(6,a.port,!0);b.set(d,8);this.connections[a.stream_id]=
227
- {data_callback:a.data_callback,close_callback:a.close_callback,congestion:this.connections[0].congestion};break;case "DATA":b=new Uint8Array(5+a.data.length);c=new DataView(b.buffer);c.setUint8(0,2);c.setUint32(1,a.stream_id,!0);b.set(a.data,5);break;case "CLOSE":b=new Uint8Array(6);c=new DataView(b.buffer);c.setUint8(0,4);c.setUint32(1,a.stream_id,!0);c.setUint8(5,a.reason);break;default:B("Client tried to send unknown packet: "+a.type,1048576)}this.send_packet(b,a.type,a.stream_id)};ac.prototype.destroy=
228
- function(){this.wispws&&(this.wispws.onmessage=null,this.wispws.onclose=null,this.wispws.close(),this.wispws=null)};ac.prototype.on_tcp_connection=function(a,b){let c=new Xb;c.state="syn-received";c.net=this;c.tuple=b;c.stream_id=this.last_stream++;this.tcp_conn[b]=c;c.on("data",d=>{0!==d.length&&this.send_wisp_frame({type:"DATA",stream_id:c.stream_id,data:d})});c.on_close=()=>{this.send_wisp_frame({type:"CLOSE",stream_id:c.stream_id,reason:2})};c.on_shutdown=c.on_close;this.send_wisp_frame({type:"CONNECT",
229
- stream_id:c.stream_id,hostname:a.ipv4.dest.join("."),port:a.tcp.dport,data_callback:d=>{c.write(d)},close_callback:()=>{c.close()}});c.accept(a);return!0};ac.prototype.send=function(a){Ub(a,this)};ac.prototype.receive=function(a){this.bus.send("net"+this.id+"-receive",new Uint8Array(a))};const bc="undefined"!==typeof window&&0<=window.navigator.platform.toString().toLowerCase().search("win");function cc(a){function b(x){return x.shiftKey&&x.ctrlKey&&(73===x.keyCode||74===x.keyCode||75===x.keyCode)||
230
- !z.emu_enabled?!1:x.target?x.target.classList.contains("phone_keyboard")||"INPUT"!==x.target.nodeName&&"TEXTAREA"!==x.target.nodeName:!0}function c(x){!x.altKey&&q[56]&&m(56,!1);return g(x,!1)}function d(x){!x.altKey&&q[56]&&m(56,!1);return g(x,!0)}function e(){for(var x=Object.keys(q),N,V=0;V<x.length;V++)N=+x[V],q[N]&&m(N,!1);q={}}function f(x){if(z.bus&&b(x))switch(x.inputType){case "insertText":for(var N=0;N<x.data.length;N++)z.simulate_char(x.data[N]);break;case "insertLineBreak":z.simulate_press(13);
231
- break;case "deleteContentBackward":z.simulate_press(8)}}function g(x,N){if(z.bus&&b(x)&&""!==x.code&&"Process"!==x.key&&"Unidentified"!==x.key&&229!==x.keyCode){x.preventDefault&&x.preventDefault();if(bc&&(r&&(clearTimeout(t),x.getModifierState&&x.getModifierState("AltGraph")&&v===N&&"ControlLeft"===r.code&&"AltRight"===x.code||k(r,v),r=null),"ControlLeft"===x.code))return r=x,v=N,t=setTimeout(()=>{k(r,v);r=null},10),!1;k(x,N);return!1}}function k(x,N){a:{if(void 0!==x.code){var V=F[x.code];if(void 0!==
232
- V)break a}V=A[x.keyCode]}V?m(V,N,x.repeat):console.log("Missing char in map: keyCode="+(x.keyCode||-1).toString(16)+" code="+x.code)}function m(x,N,V){if(N)q[x]&&!V&&m(x,!1);else if(!q[x])return;(q[x]=N)||(x|=128);255<x?(p(x>>8),p(x&255)):p(x)}function p(x){z.bus.send("keyboard-code",x)}var q={},r=null,v=!1,t=0,z=this;this.emu_enabled=!0;const A=new Uint16Array([0,0,0,0,0,0,0,0,14,15,0,0,0,28,0,0,42,29,56,0,58,0,0,0,0,0,0,1,0,0,0,0,57,57417,57425,57423,57415,57419,57416,57421,80,0,0,0,0,82,83,0,11,
226
+ this.connections[c].close_callback(b.getUint8(5));delete this.connections[c];break;case 5:B("got a wisp V2 upgrade request, ignoring",1048576);break;default:B("Wisp server returned unknown packet: "+a[0],1048576)}};bc.prototype.send_wisp_frame=function(a){let b,c;switch(a.type){case "CONNECT":const d=(new TextEncoder).encode(a.hostname);b=new Uint8Array(8+d.length);c=new DataView(b.buffer);c.setUint8(0,1);c.setUint32(1,a.stream_id,!0);c.setUint8(5,1);c.setUint16(6,a.port,!0);b.set(d,8);this.connections[a.stream_id]=
227
+ {data_callback:a.data_callback,close_callback:a.close_callback,congestion:this.connections[0].congestion};break;case "DATA":b=new Uint8Array(5+a.data.length);c=new DataView(b.buffer);c.setUint8(0,2);c.setUint32(1,a.stream_id,!0);b.set(a.data,5);break;case "CLOSE":b=new Uint8Array(6);c=new DataView(b.buffer);c.setUint8(0,4);c.setUint32(1,a.stream_id,!0);c.setUint8(5,a.reason);break;default:B("Client tried to send unknown packet: "+a.type,1048576)}this.send_packet(b,a.type,a.stream_id)};bc.prototype.destroy=
228
+ function(){this.wispws&&(this.wispws.onmessage=null,this.wispws.onclose=null,this.wispws.close(),this.wispws=null)};bc.prototype.on_tcp_connection=function(a,b){let c=new Yb;c.state="syn-received";c.net=this;c.tuple=b;c.stream_id=this.last_stream++;this.tcp_conn[b]=c;c.on("data",d=>{0!==d.length&&this.send_wisp_frame({type:"DATA",stream_id:c.stream_id,data:d})});c.on_close=()=>{this.send_wisp_frame({type:"CLOSE",stream_id:c.stream_id,reason:2})};c.on_shutdown=c.on_close;this.send_wisp_frame({type:"CONNECT",
229
+ stream_id:c.stream_id,hostname:a.ipv4.dest.join("."),port:a.tcp.dport,data_callback:d=>{c.write(d)},close_callback:()=>{c.close()}});c.accept(a);return!0};bc.prototype.send=function(a){Vb(a,this)};bc.prototype.receive=function(a){this.bus.send("net"+this.id+"-receive",new Uint8Array(a))};const cc="undefined"!==typeof window&&0<=window.navigator.platform.toString().toLowerCase().search("win");function dc(a){function b(x){return x.shiftKey&&x.ctrlKey&&(73===x.keyCode||74===x.keyCode||75===x.keyCode)||
230
+ !z.emu_enabled?!1:x.target?x.target.classList.contains("phone_keyboard")||"INPUT"!==x.target.nodeName&&"TEXTAREA"!==x.target.nodeName:!0}function c(x){!x.altKey&&q[56]&&m(56,!1);return g(x,!1)}function d(x){!x.altKey&&q[56]&&m(56,!1);return g(x,!0)}function e(){for(var x=Object.keys(q),M,V=0;V<x.length;V++)M=+x[V],q[M]&&m(M,!1);q={}}function f(x){if(z.bus&&b(x))switch(x.inputType){case "insertText":for(var M=0;M<x.data.length;M++)z.simulate_char(x.data[M]);break;case "insertLineBreak":z.simulate_press(13);
231
+ break;case "deleteContentBackward":z.simulate_press(8)}}function g(x,M){if(z.bus&&b(x)&&""!==x.code&&"Process"!==x.key&&"Unidentified"!==x.key&&229!==x.keyCode){x.preventDefault&&x.preventDefault();if(cc&&(r&&(clearTimeout(t),x.getModifierState&&x.getModifierState("AltGraph")&&v===M&&"ControlLeft"===r.code&&"AltRight"===x.code||k(r,v),r=null),"ControlLeft"===x.code))return r=x,v=M,t=setTimeout(()=>{k(r,v);r=null},10),!1;k(x,M);return!1}}function k(x,M){a:{if(void 0!==x.code){var V=F[x.code];if(void 0!==
232
+ V)break a}V=A[x.keyCode]}V?m(V,M,x.repeat):console.log("Missing char in map: keyCode="+(x.keyCode||-1).toString(16)+" code="+x.code)}function m(x,M,V){if(M)q[x]&&!V&&m(x,!1);else if(!q[x])return;(q[x]=M)||(x|=128);255<x?(p(x>>8),p(x&255)):p(x)}function p(x){z.bus.send("keyboard-code",x)}var q={},r=null,v=!1,t=0,z=this;this.emu_enabled=!0;const A=new Uint16Array([0,0,0,0,0,0,0,0,14,15,0,0,0,28,0,0,42,29,56,0,58,0,0,0,0,0,0,1,0,0,0,0,57,57417,57425,57423,57415,57419,57416,57421,80,0,0,0,0,82,83,0,11,
233
233
  2,3,4,5,6,7,8,9,10,0,39,0,13,0,0,0,30,48,46,32,18,33,34,35,23,36,37,38,50,49,24,25,16,19,31,20,22,47,17,45,21,44,57435,57436,57437,0,0,82,79,80,81,75,76,77,71,72,73,0,0,0,0,0,0,59,60,61,62,63,64,65,66,67,68,87,88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,39,13,51,12,52,53,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,43,27,40,0,57435,57400,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),u={8:8,10:13,32:32,39:222,44:188,
234
234
  45:189,46:190,47:191,48:48,49:49,50:50,51:51,52:52,53:53,54:54,55:55,56:56,57:57,59:186,61:187,91:219,92:220,93:221,96:192,97:65,98:66,99:67,100:68,101:69,102:70,103:71,104:72,105:73,106:74,107:75,108:76,109:77,110:78,111:79,112:80,113:81,114:82,115:83,116:84,117:85,118:86,119:87,120:88,121:89,122:90},E={33:49,34:222,35:51,36:52,37:53,38:55,40:57,41:48,42:56,43:187,58:186,60:188,62:190,63:191,64:50,65:65,66:66,67:67,68:68,69:69,70:70,71:71,72:72,73:73,74:74,75:75,76:76,77:77,78:78,79:79,80:80,81:81,
235
235
  82:82,83:83,84:84,85:85,86:86,87:87,88:88,89:89,90:90,94:54,95:189,123:219,124:220,125:221,126:192};var F={Escape:1,Digit1:2,Digit2:3,Digit3:4,Digit4:5,Digit5:6,Digit6:7,Digit7:8,Digit8:9,Digit9:10,Digit0:11,Minus:12,Equal:13,Backspace:14,Tab:15,KeyQ:16,KeyW:17,KeyE:18,KeyR:19,KeyT:20,KeyY:21,KeyU:22,KeyI:23,KeyO:24,KeyP:25,BracketLeft:26,BracketRight:27,Enter:28,ControlLeft:29,KeyA:30,KeyS:31,KeyD:32,KeyF:33,KeyG:34,KeyH:35,KeyJ:36,KeyK:37,KeyL:38,Semicolon:39,Quote:40,Backquote:41,ShiftLeft:42,
236
236
  Backslash:43,KeyZ:44,KeyX:45,KeyC:46,KeyV:47,KeyB:48,KeyN:49,KeyM:50,Comma:51,Period:52,Slash:53,IntlRo:53,ShiftRight:54,NumpadMultiply:55,AltLeft:56,Space:57,CapsLock:58,F1:59,F2:60,F3:61,F4:62,F5:63,F6:64,F7:65,F8:66,F9:67,F10:68,NumLock:69,ScrollLock:70,Numpad7:71,Numpad8:72,Numpad9:73,NumpadSubtract:74,Numpad4:75,Numpad5:76,Numpad6:77,NumpadAdd:78,Numpad1:79,Numpad2:80,Numpad3:81,Numpad0:82,NumpadDecimal:83,IntlBackslash:86,F11:87,F12:88,NumpadEnter:57372,ControlRight:57373,NumpadDivide:57397,
237
237
  AltRight:57400,Home:57415,ArrowUp:57416,PageUp:57417,ArrowLeft:57419,ArrowRight:57421,End:57423,ArrowDown:57424,PageDown:57425,Insert:57426,Delete:57427,MetaLeft:57435,OSLeft:57435,MetaRight:57436,OSRight:57436,ContextMenu:57437};this.bus=a;this.destroy=function(){"undefined"!==typeof window&&(window.removeEventListener("keyup",c,!1),window.removeEventListener("keydown",d,!1),window.removeEventListener("blur",e,!1),window.removeEventListener("input",f,!1))};this.init=function(){"undefined"!==typeof window&&
238
- (this.destroy(),window.addEventListener("keyup",c,!1),window.addEventListener("keydown",d,!1),window.addEventListener("blur",e,!1),window.addEventListener("input",f,!1))};this.init();this.simulate_press=function(x){x={keyCode:x};g(x,!0);g(x,!1)};this.simulate_char=function(x){var N=x.charCodeAt(0);N in u?this.simulate_press(u[N]):N in E?(p(42),this.simulate_press(E[N]),p(170)):console.log("ascii -> keyCode not found: ",N,x)}}function dc(a,b){function c(u){if(!A.enabled||!A.emu_enabled)return!1;var E=
238
+ (this.destroy(),window.addEventListener("keyup",c,!1),window.addEventListener("keydown",d,!1),window.addEventListener("blur",e,!1),window.addEventListener("input",f,!1))};this.init();this.simulate_press=function(x){x={keyCode:x};g(x,!0);g(x,!1)};this.simulate_char=function(x){var M=x.charCodeAt(0);M in u?this.simulate_press(u[M]):M in E?(p(42),this.simulate_press(E[M]),p(170)):console.log("ascii -> keyCode not found: ",M,x)}}function ec(a,b){function c(u){if(!A.enabled||!A.emu_enabled)return!1;var E=
239
239
  b||document.body,F;if(!(F=document.pointerLockElement))a:{for(u=u.target;u.parentNode;){if(u===E){F=!0;break a}u=u.parentNode}F=!1}return F}function d(u){c(u)&&(u=u.changedTouches)&&u.length&&(u=u[u.length-1],t=u.clientX,z=u.clientY)}function e(){if(q||v||r)A.bus.send("mouse-click",[!1,!1,!1]),q=v=r=!1}function f(u){if(A.bus&&c(u)&&A.is_running){var E=0,F=0,x=u.changedTouches;x?x.length&&(x=x[x.length-1],E=x.clientX-t,F=x.clientY-z,t=x.clientX,z=x.clientY,u.preventDefault()):"number"===typeof u.movementX?
240
240
  (E=u.movementX,F=u.movementY):"number"===typeof u.webkitMovementX?(E=u.webkitMovementX,F=u.webkitMovementY):"number"===typeof u.mozMovementX?(E=u.mozMovementX,F=u.mozMovementY):(E=u.clientX-t,F=u.clientY-z,t=u.clientX,z=u.clientY);A.bus.send("mouse-delta",[1*E,-(1*F)]);b&&A.bus.send("mouse-absolute",[u.pageX-b.offsetLeft,u.pageY-b.offsetTop,b.offsetWidth,b.offsetHeight])}}function g(u){c(u)&&m(u,!0)}function k(u){c(u)&&m(u,!1)}function m(u,E){A.bus&&(1===u.which?q=E:2===u.which?v=E:3===u.which?r=
241
241
  E:B("Unknown event.which: "+u.which),A.bus.send("mouse-click",[q,v,r]),u.preventDefault())}function p(u){if(c(u)){var E=u.wheelDelta||-u.detail;0>E?E=-1:0<E&&(E=1);A.bus.send("mouse-wheel",[E,0]);u.preventDefault()}}var q=!1,r=!1,v=!1,t=0,z=0,A=this;this.enabled=!1;this.emu_enabled=!0;this.bus=a;this.bus.register("mouse-enable",function(u){this.enabled=u},this);this.is_running=!1;this.bus.register("emulator-stopped",function(){this.is_running=!1},this);this.bus.register("emulator-started",function(){this.is_running=
242
242
  !0},this);this.destroy=function(){"undefined"!==typeof window&&(window.removeEventListener("touchstart",d,!1),window.removeEventListener("touchend",e,!1),window.removeEventListener("touchmove",f,!1),window.removeEventListener("mousemove",f,!1),window.removeEventListener("mousedown",g,!1),window.removeEventListener("mouseup",k,!1),window.removeEventListener("wheel",p,{passive:!1}))};this.init=function(){"undefined"!==typeof window&&(this.destroy(),window.addEventListener("touchstart",d,!1),window.addEventListener("touchend",
243
- e,!1),window.addEventListener("touchmove",f,!1),window.addEventListener("mousemove",f,!1),window.addEventListener("mousedown",g,!1),window.addEventListener("mouseup",k,!1),window.addEventListener("wheel",p,{passive:!1}))};this.init()}function ec(){var a,b=0,c=0;this.put_char=function(d,e,f){l(0<=d&&d<c);l(0<=e&&e<b);a[d*b+e]=f};this.destroy=function(){};this.pause=function(){};this.continue=function(){};this.set_mode=function(){};this.set_font_bitmap=function(){};this.set_font_page=function(){};this.clear_screen=
244
- function(){};this.set_size_text=function(d,e){if(d!==b||e!==c)a=new Uint8Array(d*e),b=d,c=e};this.set_size_graphical=function(){};this.set_scale=function(){};this.update_cursor_scanline=function(){};this.update_cursor=function(){};this.update_buffer=function(){};this.get_text_screen=function(){for(var d=[],e=0;e<c;e++)d.push(this.get_text_row(e));return d};this.get_text_row=function(d){d*=b;return String.fromCharCode.apply(String,a.subarray(d,d+b))};this.set_size_text(80,25)}function lc(a,b){function c(k){g.bus&&
245
- g.enabled&&(g.send_char(k.which),k.preventDefault())}function d(k){var m=k.which;8===m?(g.send_char(127),k.preventDefault()):9===m&&(g.send_char(9),k.preventDefault())}function e(k){if(g.enabled){for(var m=k.clipboardData.getData("text/plain"),p=0;p<m.length;p++)g.send_char(m.charCodeAt(p));k.preventDefault()}}function f(k){k.target!==a&&a.blur()}var g=this;this.enabled=!0;this.bus=b;this.text="";this.text_new_line=!1;this.last_update=0;this.bus.register("serial0-output-byte",function(k){k=String.fromCharCode(k);
246
- this.show_char(k)},this);this.destroy=function(){a.removeEventListener("keypress",c,!1);a.removeEventListener("keydown",d,!1);a.removeEventListener("paste",e,!1);window.removeEventListener("mousedown",f,!1)};this.init=function(){this.destroy();a.style.display="block";a.addEventListener("keypress",c,!1);a.addEventListener("keydown",d,!1);a.addEventListener("paste",e,!1);window.addEventListener("mousedown",f,!1)};this.init();this.show_char=function(k){"\b"===k?(this.text=this.text.slice(0,-1),this.update()):
247
- "\r"!==k&&(this.text+=k,"\n"===k&&(this.text_new_line=!0),this.update())};this.update=function(){var k=Date.now(),m=k-this.last_update;16>m?void 0===this.update_timer&&(this.update_timer=setTimeout(()=>{this.update_timer=void 0;var p=Date.now();l(15<=p-this.last_update);this.last_update=p;this.render()},16-m)):(void 0!==this.update_timer&&(clearTimeout(this.update_timer),this.update_timer=void 0),this.last_update=k,this.render())};this.render=function(){a.value=this.text;this.text_new_line&&(this.text_new_line=
248
- !1,a.scrollTop=1E9)};this.send_char=function(k){g.bus&&g.bus.send("serial0-input",k)}}function mc(a,b){this.element=a;if(window.Terminal){var c=this.term=new window.Terminal({logLevel:"off",convertEol:"true"});c.write("This is the serial console. Whatever you type or paste here will be sent to COM1");var d=c.onData(function(e){for(let f=0;f<e.length;f++)b.send("serial0-input",e.charCodeAt(f))});b.register("serial0-output-byte",function(e){c.write(Uint8Array.of(e))},this);this.destroy=function(){d.dispose();
249
- c.dispose()}}}mc.prototype.show=function(){this.term&&this.term.open(this.element)};function nc(a,b){b=b.id||0;this.bus=a;this.bus_send_msgid=`net${b}-send`;this.bus_recv_msgid=`net${b}-receive`;this.channel=new BroadcastChannel(`v86-inbrowser-${b}`);this.is_open=!0;this.nic_to_hub_fn=c=>{this.channel.postMessage(c)};this.bus.register(this.bus_send_msgid,this.nic_to_hub_fn,this);this.hub_to_nic_fn=c=>{this.bus.send(this.bus_recv_msgid,c.data)};this.channel.addEventListener("message",this.hub_to_nic_fn)}
250
- nc.prototype.destroy=function(){this.is_open&&(this.bus.unregister(this.bus_send_msgid,this.nic_to_hub_fn),this.channel.removeEventListener("message",this.hub_to_nic_fn),this.channel.close(),this.is_open=!1)};function oc(){this.filedata=new Map}oc.prototype.read=async function(a,b,c){l(a,"MemoryFileStorage read: sha256sum should be a non-empty string");return(a=this.filedata.get(a))?a.subarray(b,b+c):null};oc.prototype.cache=async function(a,b){l(a,"MemoryFileStorage cache: sha256sum should be a non-empty string");
251
- this.filedata.set(a,b)};oc.prototype.uncache=function(a){this.filedata.delete(a)};function pc(a,b){l(b,"ServerMemoryFileStorage: baseurl should not be empty");b.endsWith("/")||(b+="/");this.storage=a;this.baseurl=b}pc.prototype.load_from_server=function(a){return new Promise(b=>{ta(this.baseurl+a,{done:async c=>{c=new Uint8Array(c);await this.cache(a,c);b(c)}})})};pc.prototype.read=async function(a,b,c){const d=await this.storage.read(a,b,c);return d?d:(await this.load_from_server(a)).subarray(b,
252
- b+c)};pc.prototype.cache=async function(a,b){return await this.storage.cache(a,b)};pc.prototype.uncache=function(a){this.storage.uncache(a)};const qc=new TextDecoder,rc=new TextEncoder;function J(a,b,c,d){for(var e,f=0,g=0;g<a.length;g++)switch(e=b[g],a[g]){case "w":c[d++]=e&255;c[d++]=e>>8&255;c[d++]=e>>16&255;c[d++]=e>>24&255;f+=4;break;case "d":c[d++]=e&255;c[d++]=e>>8&255;c[d++]=e>>16&255;c[d++]=e>>24&255;c[d++]=0;c[d++]=0;c[d++]=0;c[d++]=0;f+=8;break;case "h":c[d++]=e&255;c[d++]=e>>8;f+=2;break;
253
- case "b":c[d++]=e;f+=1;break;case "s":var k=d,m=0;c[d++]=0;c[d++]=0;f+=2;e=rc.encode(e);f+=e.byteLength;m+=e.byteLength;c.set(e,d);d+=e.byteLength;c[k+0]=m&255;c[k+1]=m>>8&255;break;case "Q":J(["b","w","d"],[e.type,e.version,e.path],c,d);d+=13;f+=13;break;default:B("Marshall: Unknown type="+a[g])}return f}function K(a,b,c){let d=c.offset;for(var e=[],f=0;f<a.length;f++)switch(a[f]){case "w":var g=b[d++];g+=b[d++]<<8;g+=b[d++]<<16;g+=b[d++]<<24>>>0;e.push(g);break;case "d":g=b[d++];g+=b[d++]<<8;g+=
254
- b[d++]<<16;g+=b[d++]<<24>>>0;d+=4;e.push(g);break;case "h":g=b[d++];e.push(g+(b[d++]<<8));break;case "b":e.push(b[d++]);break;case "s":g=b[d++];g+=b[d++]<<8;var k=b.slice(d,d+g);d+=g;e.push(qc.decode(k));break;case "Q":c.offset=d;g=K(["b","w","d"],b,c);d=c.offset;e.push({type:g[0],version:g[1],path:g[2]});break;default:B("Error in Unmarshall: Unknown type="+a[f])}c.offset=d;return e}const sc=new TextEncoder;function L(a,b){this.inodes=[];this.storage=a;this.qidcounter=b||{last_qidnumber:0};this.inodedata=
255
- {};this.total_size=274877906944;this.used_size=0;this.mounts=[];this.CreateDirectory("",-1)}L.prototype.get_state=function(){let a=[];a[0]=this.inodes;a[1]=this.qidcounter.last_qidnumber;a[2]=[];for(const [b,c]of Object.entries(this.inodedata))0===(this.inodes[b].mode&16384)&&a[2].push([b,c]);a[3]=this.total_size;a[4]=this.used_size;return a=a.concat(this.mounts)};L.prototype.set_state=function(a){this.inodes=a[0].map(b=>{const c=new tc(0);c.set_state(b);return c});this.qidcounter.last_qidnumber=
243
+ e,!1),window.addEventListener("touchmove",f,!1),window.addEventListener("mousemove",f,!1),window.addEventListener("mousedown",g,!1),window.addEventListener("mouseup",k,!1),window.addEventListener("wheel",p,{passive:!1}))};this.init()}function fc(a){var b,c=0,d=0,e=ya(a?.encoding);this.put_char=function(f,g,k){l(0<=f&&f<d);l(0<=g&&g<c);b[f*c+g]=k};this.destroy=function(){};this.pause=function(){};this.continue=function(){};this.set_mode=function(){};this.set_font_bitmap=function(){};this.set_font_page=
244
+ function(){};this.clear_screen=function(){};this.set_size_text=function(f,g){if(f!==c||g!==d)b=new Uint8Array(f*g),c=f,d=g};this.set_size_graphical=function(){};this.set_scale=function(){};this.update_cursor_scanline=function(){};this.update_cursor=function(){};this.update_buffer=function(){};this.get_text_screen=function(){for(var f=[],g=0;g<d;g++)f.push(this.get_text_row(g));return f};this.get_text_row=function(f){f*=c;return Array.from(b.subarray(f,f+c),g=>e[g]).join("")};this.set_size_text(80,
245
+ 25)}function mc(a,b){function c(k){g.bus&&g.enabled&&(g.send_char(k.which),k.preventDefault())}function d(k){var m=k.which;8===m?(g.send_char(127),k.preventDefault()):9===m&&(g.send_char(9),k.preventDefault())}function e(k){if(g.enabled){for(var m=k.clipboardData.getData("text/plain"),p=0;p<m.length;p++)g.send_char(m.charCodeAt(p));k.preventDefault()}}function f(k){k.target!==a&&a.blur()}var g=this;this.enabled=!0;this.bus=b;this.text="";this.text_new_line=!1;this.last_update=0;this.bus.register("serial0-output-byte",
246
+ function(k){k=String.fromCharCode(k);this.show_char(k)},this);this.destroy=function(){a.removeEventListener("keypress",c,!1);a.removeEventListener("keydown",d,!1);a.removeEventListener("paste",e,!1);window.removeEventListener("mousedown",f,!1)};this.init=function(){this.destroy();a.style.display="block";a.addEventListener("keypress",c,!1);a.addEventListener("keydown",d,!1);a.addEventListener("paste",e,!1);window.addEventListener("mousedown",f,!1)};this.init();this.show_char=function(k){"\b"===k?(this.text=
247
+ this.text.slice(0,-1),this.update()):"\r"!==k&&(this.text+=k,"\n"===k&&(this.text_new_line=!0),this.update())};this.update=function(){var k=Date.now(),m=k-this.last_update;16>m?void 0===this.update_timer&&(this.update_timer=setTimeout(()=>{this.update_timer=void 0;var p=Date.now();l(15<=p-this.last_update);this.last_update=p;this.render()},16-m)):(void 0!==this.update_timer&&(clearTimeout(this.update_timer),this.update_timer=void 0),this.last_update=k,this.render())};this.render=function(){a.value=
248
+ this.text;this.text_new_line&&(this.text_new_line=!1,a.scrollTop=1E9)};this.send_char=function(k){g.bus&&g.bus.send("serial0-input",k)}}function nc(a,b){this.element=a;if(window.Terminal){var c=this.term=new window.Terminal({logLevel:"off",convertEol:"true"});c.write("This is the serial console. Whatever you type or paste here will be sent to COM1");var d=c.onData(function(e){for(let f=0;f<e.length;f++)b.send("serial0-input",e.charCodeAt(f))});b.register("serial0-output-byte",function(e){c.write(Uint8Array.of(e))},
249
+ this);this.destroy=function(){d.dispose();c.dispose()}}}nc.prototype.show=function(){this.term&&this.term.open(this.element)};function oc(a,b){b=b.id||0;this.bus=a;this.bus_send_msgid=`net${b}-send`;this.bus_recv_msgid=`net${b}-receive`;this.channel=new BroadcastChannel(`v86-inbrowser-${b}`);this.is_open=!0;this.nic_to_hub_fn=c=>{this.channel.postMessage(c)};this.bus.register(this.bus_send_msgid,this.nic_to_hub_fn,this);this.hub_to_nic_fn=c=>{this.bus.send(this.bus_recv_msgid,c.data)};this.channel.addEventListener("message",
250
+ this.hub_to_nic_fn)}oc.prototype.destroy=function(){this.is_open&&(this.bus.unregister(this.bus_send_msgid,this.nic_to_hub_fn),this.channel.removeEventListener("message",this.hub_to_nic_fn),this.channel.close(),this.is_open=!1)};function pc(){this.filedata=new Map}pc.prototype.read=async function(a,b,c){l(a,"MemoryFileStorage read: sha256sum should be a non-empty string");return(a=this.filedata.get(a))?a.subarray(b,b+c):null};pc.prototype.cache=async function(a,b){l(a,"MemoryFileStorage cache: sha256sum should be a non-empty string");
251
+ this.filedata.set(a,b)};pc.prototype.uncache=function(a){this.filedata.delete(a)};function qc(a,b){l(b,"ServerMemoryFileStorage: baseurl should not be empty");b.endsWith("/")||(b+="/");this.storage=a;this.baseurl=b}qc.prototype.load_from_server=function(a){return new Promise(b=>{ta(this.baseurl+a,{done:async c=>{c=new Uint8Array(c);await this.cache(a,c);b(c)}})})};qc.prototype.read=async function(a,b,c){const d=await this.storage.read(a,b,c);return d?d:(await this.load_from_server(a)).subarray(b,
252
+ b+c)};qc.prototype.cache=async function(a,b){return await this.storage.cache(a,b)};qc.prototype.uncache=function(a){this.storage.uncache(a)};const rc=new TextDecoder,sc=new TextEncoder;function I(a,b,c,d){for(var e,f=0,g=0;g<a.length;g++)switch(e=b[g],a[g]){case "w":c[d++]=e&255;c[d++]=e>>8&255;c[d++]=e>>16&255;c[d++]=e>>24&255;f+=4;break;case "d":c[d++]=e&255;c[d++]=e>>8&255;c[d++]=e>>16&255;c[d++]=e>>24&255;c[d++]=0;c[d++]=0;c[d++]=0;c[d++]=0;f+=8;break;case "h":c[d++]=e&255;c[d++]=e>>8;f+=2;break;
253
+ case "b":c[d++]=e;f+=1;break;case "s":var k=d,m=0;c[d++]=0;c[d++]=0;f+=2;e=sc.encode(e);f+=e.byteLength;m+=e.byteLength;c.set(e,d);d+=e.byteLength;c[k+0]=m&255;c[k+1]=m>>8&255;break;case "Q":I(["b","w","d"],[e.type,e.version,e.path],c,d);d+=13;f+=13;break;default:B("Marshall: Unknown type="+a[g])}return f}function J(a,b,c){let d=c.offset;for(var e=[],f=0;f<a.length;f++)switch(a[f]){case "w":var g=b[d++];g+=b[d++]<<8;g+=b[d++]<<16;g+=b[d++]<<24>>>0;e.push(g);break;case "d":g=b[d++];g+=b[d++]<<8;g+=
254
+ b[d++]<<16;g+=b[d++]<<24>>>0;d+=4;e.push(g);break;case "h":g=b[d++];e.push(g+(b[d++]<<8));break;case "b":e.push(b[d++]);break;case "s":g=b[d++];g+=b[d++]<<8;var k=b.slice(d,d+g);d+=g;e.push(rc.decode(k));break;case "Q":c.offset=d;g=J(["b","w","d"],b,c);d=c.offset;e.push({type:g[0],version:g[1],path:g[2]});break;default:B("Error in Unmarshall: Unknown type="+a[f])}c.offset=d;return e}const tc=new TextEncoder;function L(a,b){this.inodes=[];this.storage=a;this.qidcounter=b||{last_qidnumber:0};this.inodedata=
255
+ {};this.total_size=274877906944;this.used_size=0;this.mounts=[];this.CreateDirectory("",-1)}L.prototype.get_state=function(){let a=[];a[0]=this.inodes;a[1]=this.qidcounter.last_qidnumber;a[2]=[];for(const [b,c]of Object.entries(this.inodedata))0===(this.inodes[b].mode&16384)&&a[2].push([b,c]);a[3]=this.total_size;a[4]=this.used_size;return a=a.concat(this.mounts)};L.prototype.set_state=function(a){this.inodes=a[0].map(b=>{const c=new uc(0);c.set_state(b);return c});this.qidcounter.last_qidnumber=
256
256
  a[1];this.inodedata={};for(let [b,c]of a[2])c.buffer.byteLength!==c.byteLength&&(c=c.slice()),this.inodedata[b]=c;this.total_size=a[3];this.used_size=a[4];this.mounts=a.slice(5)};L.prototype.load_from_json=function(a){l(a,"Invalid fs passed to load_from_json");if(3!==a.version)throw"The filesystem JSON format has changed. Please recreate the filesystem JSON.";var b=a.fsroot;this.used_size=a.size;for(a=0;a<b.length;a++)this.LoadRecursive(b[a],0)};L.prototype.LoadRecursive=function(a,b){var c=this.CreateInode();
257
257
  const d=a[0];c.size=a[1];c.mtime=a[2];c.ctime=c.mtime;c.atime=c.mtime;c.mode=a[3];c.uid=a[4];c.gid=a[5];var e=c.mode&61440;16384===e?(this.PushInode(c,b,d),this.LoadDir(this.inodes.length-1,a[6])):32768===e?(c.status=2,c.sha256sum=a[6],l(c.sha256sum),this.PushInode(c,b,d)):40960===e?(c.symlink=a[6],this.PushInode(c,b,d)):49152!==e&&B("Unexpected ifmt: "+n(e)+" ("+d+")",4194304)};L.prototype.LoadDir=function(a,b){for(var c=0;c<b.length;c++)this.LoadRecursive(b[c],a)};L.prototype.should_be_linked=function(a){return!this.is_forwarder(a)||
258
258
  0===a.foreign_id};L.prototype.link_under_dir=function(a,b,c){const d=this.inodes[b],e=this.inodes[a];l(!this.is_forwarder(e),"Filesystem: Shouldn't link under fowarder parents");l(this.IsDirectory(a),"Filesystem: Can't link under non-directories");l(this.should_be_linked(d),"Filesystem: Can't link across filesystems apart from their root");l(0<=d.nlinks,"Filesystem: Found negative nlinks value of "+d.nlinks);l(!e.direntries.has(c),"Filesystem: Name '"+c+"' is already taken");e.direntries.set(c,b);
259
259
  d.nlinks++;this.IsDirectory(b)&&(l(!d.direntries.has(".."),"Filesystem: Cannot link a directory twice"),d.direntries.has(".")||d.nlinks++,d.direntries.set(".",b),d.direntries.set("..",a),e.nlinks++)};L.prototype.unlink_from_dir=function(a,b){const c=this.Search(a,b),d=this.inodes[c],e=this.inodes[a];l(!this.is_forwarder(e),"Filesystem: Can't unlink from forwarders");l(this.IsDirectory(a),"Filesystem: Can't unlink from non-directories");e.direntries.delete(b)?(d.nlinks--,this.IsDirectory(c)&&(l(d.direntries.get("..")===
260
260
  a,"Filesystem: Found directory with bad parent id"),d.direntries.delete(".."),e.nlinks--),l(0<=d.nlinks,"Filesystem: Found negative nlinks value of "+d.nlinks)):l(!1,"Filesystem: Can't unlink non-existent file: "+b)};L.prototype.PushInode=function(a,b,c){-1!==b?(this.inodes.push(a),a.fid=this.inodes.length-1,this.link_under_dir(b,a.fid,c)):0===this.inodes.length?(this.inodes.push(a),a.direntries.set(".",0),a.direntries.set("..",0),a.nlinks=2):l(!1,"Error in Filesystem: Pushed inode with name = "+
261
- c+" has no parent")};function tc(a){this.direntries=new Map;this.minor=this.major=this.mtime=this.atime=this.ctime=this.fid=this.gid=this.uid=this.size=this.status=0;this.symlink="";this.mode=493;this.qid={type:0,version:0,path:a};this.caps=void 0;this.nlinks=0;this.sha256sum="";this.locks=[];this.foreign_id=this.mount_id=-1}tc.prototype.get_state=function(){const a=[];a[0]=this.mode;a[1]=16384===(this.mode&61440)?[...this.direntries]:32768===(this.mode&61440)?this.sha256sum:40960===(this.mode&61440)?
262
- this.symlink:49152===(this.mode&61440)?[this.minor,this.major]:null;a[2]=this.locks;a[3]=this.status;a[4]=this.size;a[5]=this.uid;a[6]=this.gid;a[7]=this.fid;a[8]=this.ctime;a[9]=this.atime;a[10]=this.mtime;a[11]=this.qid.version;a[12]=this.qid.path;a[13]=this.nlinks;return a};tc.prototype.set_state=function(a){this.mode=a[0];if(16384===(this.mode&61440)){this.direntries=new Map;for(const [b,c]of a[1])this.direntries.set(b,c)}else 32768===(this.mode&61440)?this.sha256sum=a[1]:40960===(this.mode&61440)?
263
- this.symlink=a[1]:49152===(this.mode&61440)&&([this.minor,this.major]=a[1]);this.locks=[];for(const b of a[2]){const c=new uc;c.set_state(b);this.locks.push(c)}this.status=a[3];this.size=a[4];this.uid=a[5];this.gid=a[6];this.fid=a[7];this.ctime=a[8];this.atime=a[9];this.mtime=a[10];this.qid.type=(this.mode&61440)>>8;this.qid.version=a[11];this.qid.path=a[12];this.nlinks=a[13]};L.prototype.divert=function(a,b){const c=this.Search(a,b),d=this.inodes[c],e=new tc(-1);l(d,"Filesystem divert: name ("+b+
261
+ c+" has no parent")};function uc(a){this.direntries=new Map;this.minor=this.major=this.mtime=this.atime=this.ctime=this.fid=this.gid=this.uid=this.size=this.status=0;this.symlink="";this.mode=493;this.qid={type:0,version:0,path:a};this.caps=void 0;this.nlinks=0;this.sha256sum="";this.locks=[];this.foreign_id=this.mount_id=-1}uc.prototype.get_state=function(){const a=[];a[0]=this.mode;a[1]=16384===(this.mode&61440)?[...this.direntries]:32768===(this.mode&61440)?this.sha256sum:40960===(this.mode&61440)?
262
+ this.symlink:49152===(this.mode&61440)?[this.minor,this.major]:null;a[2]=this.locks;a[3]=this.status;a[4]=this.size;a[5]=this.uid;a[6]=this.gid;a[7]=this.fid;a[8]=this.ctime;a[9]=this.atime;a[10]=this.mtime;a[11]=this.qid.version;a[12]=this.qid.path;a[13]=this.nlinks;return a};uc.prototype.set_state=function(a){this.mode=a[0];if(16384===(this.mode&61440)){this.direntries=new Map;for(const [b,c]of a[1])this.direntries.set(b,c)}else 32768===(this.mode&61440)?this.sha256sum=a[1]:40960===(this.mode&61440)?
263
+ this.symlink=a[1]:49152===(this.mode&61440)&&([this.minor,this.major]=a[1]);this.locks=[];for(const b of a[2]){const c=new vc;c.set_state(b);this.locks.push(c)}this.status=a[3];this.size=a[4];this.uid=a[5];this.gid=a[6];this.fid=a[7];this.ctime=a[8];this.atime=a[9];this.mtime=a[10];this.qid.type=(this.mode&61440)>>8;this.qid.version=a[11];this.qid.path=a[12];this.nlinks=a[13]};L.prototype.divert=function(a,b){const c=this.Search(a,b),d=this.inodes[c],e=new uc(-1);l(d,"Filesystem divert: name ("+b+
264
264
  ") not found");l(this.IsDirectory(c)||1>=d.nlinks,"Filesystem: can't divert hardlinked file '"+b+"' with nlinks="+d.nlinks);Object.assign(e,d);const f=this.inodes.length;this.inodes.push(e);e.fid=f;this.is_forwarder(d)&&this.mounts[d.mount_id].backtrack.set(d.foreign_id,f);this.should_be_linked(d)&&(this.unlink_from_dir(a,b),this.link_under_dir(a,f,b));if(this.IsDirectory(c)&&!this.is_forwarder(d))for(const [g,k]of e.direntries)"."!==g&&".."!==g&&this.IsDirectory(k)&&this.inodes[k].direntries.set("..",
265
- f);this.inodedata[f]=this.inodedata[c];delete this.inodedata[c];d.direntries=new Map;d.nlinks=0;return f};L.prototype.copy_inode=function(a,b){Object.assign(b,a,{fid:b.fid,direntries:b.direntries,nlinks:b.nlinks})};L.prototype.CreateInode=function(){const a=Math.round(Date.now()/1E3),b=new tc(++this.qidcounter.last_qidnumber);b.atime=b.ctime=b.mtime=a;return b};L.prototype.CreateDirectory=function(a,b){var c=this.inodes[b];if(0<=b&&this.is_forwarder(c))return b=c.foreign_id,a=this.follow_fs(c).CreateDirectory(a,
265
+ f);this.inodedata[f]=this.inodedata[c];delete this.inodedata[c];d.direntries=new Map;d.nlinks=0;return f};L.prototype.copy_inode=function(a,b){Object.assign(b,a,{fid:b.fid,direntries:b.direntries,nlinks:b.nlinks})};L.prototype.CreateInode=function(){const a=Math.round(Date.now()/1E3),b=new uc(++this.qidcounter.last_qidnumber);b.atime=b.ctime=b.mtime=a;return b};L.prototype.CreateDirectory=function(a,b){var c=this.inodes[b];if(0<=b&&this.is_forwarder(c))return b=c.foreign_id,a=this.follow_fs(c).CreateDirectory(a,
266
266
  b),this.create_forwarder(c.mount_id,a);c=this.CreateInode();c.mode=16895;0<=b&&(c.uid=this.inodes[b].uid,c.gid=this.inodes[b].gid,c.mode=this.inodes[b].mode&511|16384);c.qid.type=64;this.PushInode(c,b,a);this.NotifyListeners(this.inodes.length-1,"newdir");return this.inodes.length-1};L.prototype.CreateFile=function(a,b){var c=this.inodes[b];if(this.is_forwarder(c))return b=c.foreign_id,a=this.follow_fs(c).CreateFile(a,b),this.create_forwarder(c.mount_id,a);c=this.CreateInode();c.uid=this.inodes[b].uid;
267
267
  c.gid=this.inodes[b].gid;c.qid.type=128;c.mode=this.inodes[b].mode&438|32768;this.PushInode(c,b,a);this.NotifyListeners(this.inodes.length-1,"newfile");return this.inodes.length-1};L.prototype.CreateNode=function(a,b,c,d){var e=this.inodes[b];if(this.is_forwarder(e))return b=e.foreign_id,a=this.follow_fs(e).CreateNode(a,b,c,d),this.create_forwarder(e.mount_id,a);e=this.CreateInode();e.major=c;e.minor=d;e.uid=this.inodes[b].uid;e.gid=this.inodes[b].gid;e.qid.type=192;e.mode=this.inodes[b].mode&438;
268
268
  this.PushInode(e,b,a);return this.inodes.length-1};L.prototype.CreateSymlink=function(a,b,c){var d=this.inodes[b];if(this.is_forwarder(d))return b=d.foreign_id,a=this.follow_fs(d).CreateSymlink(a,b,c),this.create_forwarder(d.mount_id,a);d=this.CreateInode();d.uid=this.inodes[b].uid;d.gid=this.inodes[b].gid;d.qid.type=160;d.symlink=c;d.mode=40960;this.PushInode(d,b,a);return this.inodes.length-1};L.prototype.CreateTextFile=async function(a,b,c){var d=this.inodes[b];if(this.is_forwarder(d))return b=
@@ -283,98 +283,98 @@ l(0<=a&&a<this.inodes.length,"Filesystem GetInode: out of range idx:"+a);a=this.
283
283
  e=b.length;c.GetRecursiveList(this.inodes[a].foreign_id,b);for(a=e;a<b.length;a++)b[a].parentid=this.get_forwarder(d,b[a].parentid)}else for(const [c,d]of this.inodes[a].direntries)"."!==c&&".."!==c&&(b.push({parentid:a,name:c}),this.IsDirectory(d)&&this.GetRecursiveList(d,b))};L.prototype.RecursiveDelete=function(a){var b=[];a=this.SearchPath(a);if(-1!==a.id)for(this.GetRecursiveList(a.id,b),a=b.length-1;0<=a;a--){const c=this.Unlink(b[a].parentid,b[a].name);l(0===c,"Filesystem RecursiveDelete failed at parent="+
284
284
  b[a].parentid+", name='"+b[a].name+"' with error code: "+-c)}};L.prototype.DeleteNode=function(a){var b=this.SearchPath(a);-1!==b.id&&(32768===(this.inodes[b.id].mode&61440)?(a=this.Unlink(b.parentid,b.name),l(0===a,"Filesystem DeleteNode failed with error code: "+-a)):16384===(this.inodes[b.id].mode&61440)&&(this.RecursiveDelete(a),a=this.Unlink(b.parentid,b.name),l(0===a,"Filesystem DeleteNode failed with error code: "+-a)))};L.prototype.NotifyListeners=function(){};L.prototype.Check=function(){for(var a=
285
285
  1;a<this.inodes.length;a++)if(-1!==this.inodes[a].status){var b=this.GetInode(a);0>b.nlinks&&B("Error in filesystem: negative nlinks="+b.nlinks+" at id ="+a,4194304);if(this.IsDirectory(a)){b=this.GetInode(a);this.IsDirectory(a)&&0>this.GetParent(a)&&B("Error in filesystem: negative parent id "+a,4194304);for(const [c,d]of b.direntries){0===c.length&&B("Error in filesystem: inode with no name and id "+d,4194304);for(const e of c)32>e&&B("Error in filesystem: Unallowed char in filename",4194304)}}}};
286
- L.prototype.FillDirectory=function(a){var b=this.inodes[a];if(this.is_forwarder(b))this.follow_fs(b).FillDirectory(b.foreign_id);else{var c=0;for(const d of b.direntries.keys())c+=24+sc.encode(d).length;a=this.inodedata[a]=new Uint8Array(c);b.size=c;c=0;for(const [d,e]of b.direntries)b=this.GetInode(e),c+=J(["Q","d","b","s"],[b.qid,c+13+8+1+2+sc.encode(d).length,b.mode>>12,d],a,c)}};L.prototype.RoundToDirentry=function(a,b){const c=this.inodedata[a];l(c,`FS directory data for dirid=${a} should be generated`);
287
- l(c.length,"FS directory should have at least an entry");if(b>=c.length)return c.length;for(a=0;;){const d=K(["Q","d"],c,{offset:a})[1];if(d>b)break;a=d}return a};L.prototype.IsDirectory=function(a){a=this.inodes[a];return this.is_forwarder(a)?this.follow_fs(a).IsDirectory(a.foreign_id):16384===(a.mode&61440)};L.prototype.IsEmpty=function(a){a=this.inodes[a];if(this.is_forwarder(a))return this.follow_fs(a).IsDirectory(a.foreign_id);for(const b of a.direntries.keys())if("."!==b&&".."!==b)return!1;
286
+ L.prototype.FillDirectory=function(a){var b=this.inodes[a];if(this.is_forwarder(b))this.follow_fs(b).FillDirectory(b.foreign_id);else{var c=0;for(const d of b.direntries.keys())c+=24+tc.encode(d).length;a=this.inodedata[a]=new Uint8Array(c);b.size=c;c=0;for(const [d,e]of b.direntries)b=this.GetInode(e),c+=I(["Q","d","b","s"],[b.qid,c+13+8+1+2+tc.encode(d).length,b.mode>>12,d],a,c)}};L.prototype.RoundToDirentry=function(a,b){const c=this.inodedata[a];l(c,`FS directory data for dirid=${a} should be generated`);
287
+ l(c.length,"FS directory should have at least an entry");if(b>=c.length)return c.length;for(a=0;;){const d=J(["Q","d"],c,{offset:a})[1];if(d>b)break;a=d}return a};L.prototype.IsDirectory=function(a){a=this.inodes[a];return this.is_forwarder(a)?this.follow_fs(a).IsDirectory(a.foreign_id):16384===(a.mode&61440)};L.prototype.IsEmpty=function(a){a=this.inodes[a];if(this.is_forwarder(a))return this.follow_fs(a).IsDirectory(a.foreign_id);for(const b of a.direntries.keys())if("."!==b&&".."!==b)return!1;
288
288
  return!0};L.prototype.GetChildren=function(a){l(this.IsDirectory(a),"Filesystem: cannot get children of non-directory inode");a=this.inodes[a];if(this.is_forwarder(a))return this.follow_fs(a).GetChildren(a.foreign_id);const b=[];for(const c of a.direntries.keys())"."!==c&&".."!==c&&b.push(c);return b};L.prototype.GetParent=function(a){l(this.IsDirectory(a),"Filesystem: cannot get parent of non-directory inode");a=this.inodes[a];if(this.should_be_linked(a))return a.direntries.get("..");const b=this.follow_fs(a).GetParent(a.foreign_id);
289
289
  l(-1!==b,"Filesystem: should not have invalid parent ids");return this.get_forwarder(a.mount_id,b)};L.prototype.PrepareCAPs=function(a){a=this.GetInode(a);if(a.caps)return a.caps.length;a.caps=new Uint8Array(20);a.caps[0]=0;a.caps[1]=0;a.caps[2]=0;a.caps[3]=2;a.caps[4]=255;a.caps[5]=255;a.caps[6]=255;a.caps[7]=255;a.caps[8]=255;a.caps[9]=255;a.caps[10]=255;a.caps[11]=255;a.caps[12]=63;a.caps[13]=0;a.caps[14]=0;a.caps[15]=0;a.caps[16]=63;a.caps[17]=0;a.caps[18]=0;a.caps[19]=0;return a.caps.length};
290
- function vc(a){this.fs=a;this.backtrack=new Map}vc.prototype.get_state=function(){const a=[];a[0]=this.fs;a[1]=[...this.backtrack];return a};vc.prototype.set_state=function(a){this.fs=a[0];this.backtrack=new Map(a[1])};L.prototype.set_forwarder=function(a,b,c){const d=this.inodes[a];l(0===d.nlinks,"Filesystem: attempted to convert an inode into forwarder before unlinking the inode");this.is_forwarder(d)&&this.mounts[d.mount_id].backtrack.delete(d.foreign_id);d.status=5;d.mount_id=b;d.foreign_id=c;
290
+ function wc(a){this.fs=a;this.backtrack=new Map}wc.prototype.get_state=function(){const a=[];a[0]=this.fs;a[1]=[...this.backtrack];return a};wc.prototype.set_state=function(a){this.fs=a[0];this.backtrack=new Map(a[1])};L.prototype.set_forwarder=function(a,b,c){const d=this.inodes[a];l(0===d.nlinks,"Filesystem: attempted to convert an inode into forwarder before unlinking the inode");this.is_forwarder(d)&&this.mounts[d.mount_id].backtrack.delete(d.foreign_id);d.status=5;d.mount_id=b;d.foreign_id=c;
291
291
  this.mounts[b].backtrack.set(c,a)};L.prototype.create_forwarder=function(a,b){const c=this.CreateInode(),d=this.inodes.length;this.inodes.push(c);c.fid=d;this.set_forwarder(d,a,b);return d};L.prototype.is_forwarder=function(a){return 5===a.status};L.prototype.is_a_root=function(a){return 0===this.GetInode(a).fid};L.prototype.get_forwarder=function(a,b){var c=this.mounts[a];l(0<=b,"Filesystem get_forwarder: invalid foreign_id: "+b);l(c,"Filesystem get_forwarder: invalid mount number: "+a);c=c.backtrack.get(b);
292
292
  return void 0===c?this.create_forwarder(a,b):c};L.prototype.delete_forwarder=function(a){l(this.is_forwarder(a),"Filesystem delete_forwarder: expected forwarder");a.status=-1;this.mounts[a.mount_id].backtrack.delete(a.foreign_id)};L.prototype.follow_fs=function(a){const b=this.mounts[a.mount_id];l(this.is_forwarder(a),"Filesystem follow_fs: inode should be a forwarding inode");l(b,"Filesystem follow_fs: inode<id="+a.fid+"> should point to valid mounted FS");return b.fs};L.prototype.Mount=function(a,
293
- b){l(b.qidcounter===this.qidcounter,"Cannot mount filesystem whose qid numbers aren't synchronised with current filesystem.");var c=this.SearchPath(a);if(-1===c.parentid)return B("Mount failed: parent for path not found: "+a,4194304),-2;if(-1!==c.id)return B("Mount failed: file already exists at path: "+a,4194304),-17;if(c.forward_path)return a=this.inodes[c.parentid],c=this.follow_fs(a).Mount(c.forward_path,b),0>c?c:this.get_forwarder(a.mount_id,c);a=this.mounts.length;this.mounts.push(new vc(b));
294
- b=this.create_forwarder(a,0);this.link_under_dir(c.parentid,b,c.name);return b};function uc(){this.type=2;this.start=0;this.length=Infinity;this.proc_id=-1;this.client_id=""}uc.prototype.get_state=function(){const a=[];a[0]=this.type;a[1]=this.start;a[2]=Infinity===this.length?0:this.length;a[3]=this.proc_id;a[4]=this.client_id;return a};uc.prototype.set_state=function(a){this.type=a[0];this.start=a[1];this.length=0===a[2]?Infinity:a[2];this.proc_id=a[3];this.client_id=a[4]};uc.prototype.clone=function(){const a=
295
- new uc;a.set_state(this.get_state());return a};uc.prototype.conflicts_with=function(a){return this.proc_id===a.proc_id&&this.client_id===a.client_id||2===this.type||2===a.type||1!==this.type&&1!==a.type||this.start+this.length<=a.start||a.start+a.length<=this.start?!1:!0};uc.prototype.is_alike=function(a){return a.proc_id===this.proc_id&&a.client_id===this.client_id&&a.type===this.type};uc.prototype.may_merge_after=function(a){return this.is_alike(a)&&a.start+a.length===this.start};L.prototype.DescribeLock=
296
- function(a,b,c,d,e){l(0===a||1===a||2===a,"Filesystem: Invalid lock type: "+a);l(0<=b,"Filesystem: Invalid negative lock starting offset: "+b);l(0<c,"Filesystem: Invalid non-positive lock length: "+c);const f=new uc;f.type=a;f.start=b;f.length=c;f.proc_id=d;f.client_id=e;return f};L.prototype.GetLock=function(a,b){a=this.inodes[a];if(this.is_forwarder(a)){var c=a.foreign_id;return this.follow_fs(a).GetLock(c,b)}for(c of a.locks)if(b.conflicts_with(c))return c.clone();return null};L.prototype.Lock=
293
+ b){l(b.qidcounter===this.qidcounter,"Cannot mount filesystem whose qid numbers aren't synchronised with current filesystem.");var c=this.SearchPath(a);if(-1===c.parentid)return B("Mount failed: parent for path not found: "+a,4194304),-2;if(-1!==c.id)return B("Mount failed: file already exists at path: "+a,4194304),-17;if(c.forward_path)return a=this.inodes[c.parentid],c=this.follow_fs(a).Mount(c.forward_path,b),0>c?c:this.get_forwarder(a.mount_id,c);a=this.mounts.length;this.mounts.push(new wc(b));
294
+ b=this.create_forwarder(a,0);this.link_under_dir(c.parentid,b,c.name);return b};function vc(){this.type=2;this.start=0;this.length=Infinity;this.proc_id=-1;this.client_id=""}vc.prototype.get_state=function(){const a=[];a[0]=this.type;a[1]=this.start;a[2]=Infinity===this.length?0:this.length;a[3]=this.proc_id;a[4]=this.client_id;return a};vc.prototype.set_state=function(a){this.type=a[0];this.start=a[1];this.length=0===a[2]?Infinity:a[2];this.proc_id=a[3];this.client_id=a[4]};vc.prototype.clone=function(){const a=
295
+ new vc;a.set_state(this.get_state());return a};vc.prototype.conflicts_with=function(a){return this.proc_id===a.proc_id&&this.client_id===a.client_id||2===this.type||2===a.type||1!==this.type&&1!==a.type||this.start+this.length<=a.start||a.start+a.length<=this.start?!1:!0};vc.prototype.is_alike=function(a){return a.proc_id===this.proc_id&&a.client_id===this.client_id&&a.type===this.type};vc.prototype.may_merge_after=function(a){return this.is_alike(a)&&a.start+a.length===this.start};L.prototype.DescribeLock=
296
+ function(a,b,c,d,e){l(0===a||1===a||2===a,"Filesystem: Invalid lock type: "+a);l(0<=b,"Filesystem: Invalid negative lock starting offset: "+b);l(0<c,"Filesystem: Invalid non-positive lock length: "+c);const f=new vc;f.type=a;f.start=b;f.length=c;f.proc_id=d;f.client_id=e;return f};L.prototype.GetLock=function(a,b){a=this.inodes[a];if(this.is_forwarder(a)){var c=a.foreign_id;return this.follow_fs(a).GetLock(c,b)}for(c of a.locks)if(b.conflicts_with(c))return c.clone();return null};L.prototype.Lock=
297
297
  function(a,b,c){const d=this.inodes[a];if(this.is_forwarder(d))return a=d.foreign_id,this.follow_fs(d).Lock(a,b,c);b=b.clone();if(2!==b.type&&this.GetLock(a,b))return 1;for(c=0;c<d.locks.length;c++){a=d.locks[c];l(0<a.length,"Filesystem: Found non-positive lock region length: "+a.length);l(0===a.type||1===a.type,"Filesystem: Found invalid lock type: "+a.type);l(!d.locks[c-1]||d.locks[c-1].start<=a.start,"Filesystem: Locks should be sorted by starting offset");if(a.start+a.length<=b.start)continue;
298
298
  if(b.start+b.length<=a.start)break;if(a.proc_id!==b.proc_id||a.client_id!==b.client_id){l(!a.conflicts_with(b),"Filesytem: Found conflicting lock region, despite already checked for conflicts");continue}var e=b.start+b.length;const f=b.start-a.start,g=a.start+a.length-e;if(0<f&&0<g&&a.type===b.type)return 0;0<f&&(a.length=f);if(0>=f&&0<g)a.start=e,a.length=g;else if(0<g){for(;c<d.locks.length&&d.locks[c].start<e;)c++;d.locks.splice(c,0,this.DescribeLock(a.type,e,g,a.proc_id,a.client_id))}else 0>=
299
299
  f&&(d.locks.splice(c,1),c--)}if(2!==b.type){c=b;a=!1;for(e=0;e<d.locks.length&&!(c.may_merge_after(d.locks[e])&&(d.locks[e].length+=b.length,c=d.locks[e],a=!0),b.start<=d.locks[e].start);e++);a||(d.locks.splice(e,0,c),e++);for(;e<d.locks.length;e++)if(d.locks[e].is_alike(c)){d.locks[e].may_merge_after(c)&&(c.length+=d.locks[e].length,d.locks.splice(e,1));break}}return 0};L.prototype.read_dir=function(a){a=this.SearchPath(a);if(-1!==a.id)return a=this.GetInode(a.id),Array.from(a.direntries.keys()).filter(b=>
300
- "."!==b&&".."!==b)};L.prototype.read_file=function(a){a=this.SearchPath(a);if(-1===a.id)return Promise.resolve(null);const b=this.GetInode(a.id);return this.Read(a.id,0,b.size)};function O(a){"number"===typeof a.log_level&&(xa=a.log_level);this.cpu_is_running=!1;this.cpu_exception_hook=function(){};var b=Ia.create();this.bus=b[0];this.emulator_bus=b[1];var c,d;const e=new WebAssembly.Table({element:"anyfunc",initial:1924});b={cpu_exception_hook:g=>this.cpu_exception_hook(g),run_hardware_timers:function(g,
301
- k){return c.run_hardware_timers(g,k)},cpu_event_halt:()=>{this.emulator_bus.send("cpu-event-halt")},abort:function(){l(!1)},microtick:I.microtick,get_rand_int:function(){return ea()},stop_idling:function(){return c.stop_idling()},io_port_read8:function(g){return c.io.port_read8(g)},io_port_read16:function(g){return c.io.port_read16(g)},io_port_read32:function(g){return c.io.port_read32(g)},io_port_write8:function(g,k){c.io.port_write8(g,k)},io_port_write16:function(g,k){c.io.port_write16(g,k)},io_port_write32:function(g,
300
+ "."!==b&&".."!==b)};L.prototype.read_file=function(a){a=this.SearchPath(a);if(-1===a.id)return Promise.resolve(null);const b=this.GetInode(a.id);return this.Read(a.id,0,b.size)};function N(a){"number"===typeof a.log_level&&(za=a.log_level);this.cpu_is_running=!1;this.cpu_exception_hook=function(){};var b=Ka.create();this.bus=b[0];this.emulator_bus=b[1];var c,d;const e=new WebAssembly.Table({element:"anyfunc",initial:1924});b={cpu_exception_hook:g=>this.cpu_exception_hook(g),run_hardware_timers:function(g,
301
+ k){return c.run_hardware_timers(g,k)},cpu_event_halt:()=>{this.emulator_bus.send("cpu-event-halt")},abort:function(){l(!1)},microtick:H.microtick,get_rand_int:function(){return ea()},stop_idling:function(){return c.stop_idling()},io_port_read8:function(g){return c.io.port_read8(g)},io_port_read16:function(g){return c.io.port_read16(g)},io_port_read32:function(g){return c.io.port_read32(g)},io_port_write8:function(g,k){c.io.port_write8(g,k)},io_port_write16:function(g,k){c.io.port_write16(g,k)},io_port_write32:function(g,
302
302
  k){c.io.port_write32(g,k)},mmap_read8:function(g){return c.mmap_read8(g)},mmap_read16:function(g){return c.mmap_read16(g)},mmap_read32:function(g){return c.mmap_read32(g)},mmap_write8:function(g,k){c.mmap_write8(g,k)},mmap_write16:function(g,k){c.mmap_write16(g,k)},mmap_write32:function(g,k){c.mmap_write32(g,k)},mmap_write64:function(g,k,m){c.mmap_write64(g,k,m)},mmap_write128:function(g,k,m,p,q){c.mmap_write128(g,k,m,p,q)},log_from_wasm:function(g,k){g=va(d,g,k);B(g,2)},console_log_from_wasm:function(g,
303
303
  k){g=va(d,g,k);console.error(g)},dbg_trace_from_wasm:function(){B(Error().stack,2)},codegen_finalize:(g,k,m,p,q)=>{c.codegen_finalize(g,k,m,p,q)},jit_clear_func:g=>c.jit_clear_func(g),jit_clear_all_funcs:()=>c.jit_clear_all_funcs(),__indirect_function_table:e};let f=a.wasm_fn;f||(f=g=>new Promise(k=>{let m="v86-debug.wasm",p="v86-fallback.wasm";a.wasm_path?(m=a.wasm_path,p=m.replace("v86.wasm","v86-fallback.wasm")):"undefined"===typeof window&&"string"===typeof __dirname?(m=__dirname+"/"+m,p=__dirname+
304
- "/"+p):(m="build/"+m,p="build/"+p);ta(m,{done:async q=>{try{const {instance:r}=await WebAssembly.instantiate(q,g);this.wasm_source=q;k(r.exports)}catch(r){ta(p,{done:async v=>{const {instance:t}=await WebAssembly.instantiate(v,g);this.wasm_source=v;k(t.exports)}})}},progress:q=>{this.emulator_bus.send("download-progress",{file_index:0,file_count:1,file_name:m,lengthComputable:q.lengthComputable,total:q.total,loaded:q.loaded})}})}));f({env:b}).then(g=>{d=g.memory;g.rust_init();g=this.v86=new I(this.emulator_bus,
305
- {exports:g,wasm_table:e});c=g.cpu;this.continue_init(g,a)});this.zstd_worker=null;this.zstd_worker_request_id=0}O.prototype.continue_init=async function(a,b){function c(v,t){switch(v){case "hda":e.hda=this.disk_images.hda=t;break;case "hdb":e.hdb=this.disk_images.hdb=t;break;case "cdrom":e.cdrom=this.disk_images.cdrom=t;break;case "fda":e.fda=this.disk_images.fda=t;break;case "fdb":e.fdb=this.disk_images.fdb=t;break;case "multiboot":e.multiboot=this.disk_images.multiboot=t.buffer;break;case "bzimage":e.bzimage=
304
+ "/"+p):(m="build/"+m,p="build/"+p);ta(m,{done:async q=>{try{const {instance:r}=await WebAssembly.instantiate(q,g);this.wasm_source=q;k(r.exports)}catch(r){ta(p,{done:async v=>{const {instance:t}=await WebAssembly.instantiate(v,g);this.wasm_source=v;k(t.exports)}})}},progress:q=>{this.emulator_bus.send("download-progress",{file_index:0,file_count:1,file_name:m,lengthComputable:q.lengthComputable,total:q.total,loaded:q.loaded})}})}));f({env:b}).then(g=>{d=g.memory;g.rust_init();g=this.v86=new H(this.emulator_bus,
305
+ {exports:g,wasm_table:e});c=g.cpu;this.continue_init(g,a)});this.zstd_worker=null;this.zstd_worker_request_id=0}N.prototype.continue_init=async function(a,b){function c(v,t){switch(v){case "hda":e.hda=this.disk_images.hda=t;break;case "hdb":e.hdb=this.disk_images.hdb=t;break;case "cdrom":e.cdrom=this.disk_images.cdrom=t;break;case "fda":e.fda=this.disk_images.fda=t;break;case "fdb":e.fdb=this.disk_images.fdb=t;break;case "multiboot":e.multiboot=this.disk_images.multiboot=t.buffer;break;case "bzimage":e.bzimage=
306
306
  this.disk_images.bzimage=t.buffer;break;case "initrd":e.initrd=this.disk_images.initrd=t.buffer;break;case "bios":e.bios=t.buffer;break;case "vga_bios":e.vga_bios=t.buffer;break;case "initial_state":e.initial_state=t.buffer;break;case "fs9p_json":e.fs9p_json=t;break;default:l(!1,v)}}async function d(){if(e.fs9p&&e.fs9p_json)if(e.initial_state)B("Filesystem basefs ignored: Overridden by state image");else{if(e.fs9p.load_from_json(e.fs9p_json),b.bzimage_initrd_from_filesystem){const {bzimage_path:v,
307
- initrd_path:t}=this.get_bzimage_initrd_from_filesystem(e.fs9p);B("Found bzimage: "+v+" and initrd: "+t);const [z,A]=await Promise.all([e.fs9p.read_file(t),e.fs9p.read_file(v)]);c.call(this,"initrd",new za(z.buffer));c.call(this,"bzimage",new za(A.buffer))}}else l(!b.bzimage_initrd_from_filesystem||e.initial_state,"bzimage_initrd_from_filesystem: Requires a filesystem");this.serial_adapter&&this.serial_adapter.show&&this.serial_adapter.show();this.v86.init(e);e.initial_state&&(a.restore_state(e.initial_state),
307
+ initrd_path:t}=this.get_bzimage_initrd_from_filesystem(e.fs9p);B("Found bzimage: "+v+" and initrd: "+t);const [z,A]=await Promise.all([e.fs9p.read_file(t),e.fs9p.read_file(v)]);c.call(this,"initrd",new Ba(z.buffer));c.call(this,"bzimage",new Ba(A.buffer))}}else l(!b.bzimage_initrd_from_filesystem||e.initial_state,"bzimage_initrd_from_filesystem: Requires a filesystem");this.serial_adapter&&this.serial_adapter.show&&this.serial_adapter.show();this.v86.init(e);e.initial_state&&(a.restore_state(e.initial_state),
308
308
  e.initial_state=void 0);b.autostart&&this.v86.run();this.emulator_bus.send("emulator-loaded")}this.bus.register("emulator-stopped",function(){this.cpu_is_running=!1;this.screen_adapter.pause()},this);this.bus.register("emulator-started",function(){this.cpu_is_running=!0;this.screen_adapter.continue()},this);var e={};this.disk_images={fda:void 0,fdb:void 0,hda:void 0,hdb:void 0,cdrom:void 0};var f=b.boot_order?b.boot_order:b.fda?801:b.hda?786:291;e.acpi=b.acpi;e.disable_jit=b.disable_jit;e.load_devices=
309
- !0;e.memory_size=b.memory_size||67108864;e.vga_memory_size=b.vga_memory_size||8388608;e.boot_order=f;e.fastboot=b.fastboot||!1;e.fda=void 0;e.fdb=void 0;e.uart1=b.uart1;e.uart2=b.uart2;e.uart3=b.uart3;e.cmdline=b.cmdline;e.preserve_mac_from_state_image=b.preserve_mac_from_state_image;e.mac_address_translation=b.mac_address_translation;e.cpuid_level=b.cpuid_level;e.virtio_balloon=b.virtio_balloon;e.virtio_console=b.virtio_console;e.screen_options=b.screen_options;if(f=b.network_relay_url||b.net_device&&
310
- b.net_device.relay_url)"fetch"===f?this.network_adapter=new Zb(this.bus,b.net_device):"inbrowser"===f?this.network_adapter=new nc(this.bus,b.net_device):f.startsWith("wisp://")||f.startsWith("wisps://")?this.network_adapter=new ac(f,this.bus,b.net_device):this.network_adapter=new wb(f,this.bus);e.net_device=b.net_device||{type:"ne2k"};f=b.screen||{};b.screen_container&&(f.container=b.screen_container);b.disable_keyboard||(this.keyboard_adapter=new cc(this.bus));b.disable_mouse||(this.mouse_adapter=
311
- new dc(this.bus,f.container));this.screen_adapter=f.container?new ya(f,()=>this.v86.cpu.devices.vga&&this.v86.cpu.devices.vga.screen_fill_buffer()):new ec;e.screen=this.screen_adapter;e.screen_options=f;b.serial_container&&(this.serial_adapter=new lc(b.serial_container,this.bus));b.serial_container_xtermjs&&(this.serial_adapter=new mc(b.serial_container_xtermjs,this.bus));b.disable_speaker||(this.speaker_adapter=new lb(this.bus));var g=[];f=(v,t)=>{if(t)if(t.get&&t.set&&t.load)g.push({name:v,loadable:t});
312
- else{if("bios"===v||"vga_bios"===v||"initial_state"===v||"multiboot"===v||"bzimage"===v||"initrd"===v)t.async=!1;if("fda"===v||"fdb"===v)t.async=!1;t.url&&!t.async?g.push({name:v,url:t.url,size:t.size}):g.push({name:v,loadable:Ea(t,this.zstd_decompress_worker.bind(this))})}};b.state&&console.warn("Warning: Unknown option 'state'. Did you mean 'initial_state'?");f("bios",b.bios);f("vga_bios",b.vga_bios);f("cdrom",b.cdrom);f("hda",b.hda);f("hdb",b.hdb);f("fda",b.fda);f("fdb",b.fdb);f("initial_state",
313
- b.initial_state);f("multiboot",b.multiboot);f("bzimage",b.bzimage);f("initrd",b.initrd);if(b.filesystem&&b.filesystem.handle9p)e.handle9p=b.filesystem.handle9p;else if(b.filesystem&&b.filesystem.proxy_url)e.proxy9p=b.filesystem.proxy_url;else if(b.filesystem){f=b.filesystem.basefs;var k=b.filesystem.baseurl;let v=new oc;k&&(v=new pc(v,k));e.fs9p=this.fs9p=new L(v);if(f){l(k,"Filesystem: baseurl must be specified");if("object"===typeof f){var m=f.size;f=f.url}l("string"===typeof f);g.push({name:"fs9p_json",
314
- url:f,size:m,as_json:!0})}}var p=this,q=g.length,r=function(v){if(v===q)setTimeout(d.bind(this),0);else{var t=g[v];t.loadable?(t.loadable.onload=function(){c.call(this,t.name,t.loadable);r(v+1)}.bind(this),t.loadable.load()):ta(t.url,{done:function(z){t.url.endsWith(".zst")&&"initial_state"!==t.name&&(l(t.size,"A size must be provided for compressed images"),z=this.zstd_decompress(t.size,new Uint8Array(z)));c.call(this,t.name,t.as_json?z:new za(z));r(v+1)}.bind(this),progress:function(z){200===z.target.status?
315
- p.emulator_bus.send("download-progress",{file_index:v,file_count:q,file_name:t.url,lengthComputable:z.lengthComputable,total:z.total||t.size,loaded:z.loaded}):p.emulator_bus.send("download-error",{file_index:v,file_count:q,file_name:t.url,request:z.target})},as_json:t.as_json})}}.bind(this);r(0)};O.prototype.zstd_decompress=function(a,b){const c=this.v86.cpu;l(!this.zstd_context);this.zstd_context=c.zstd_create_ctx(b.length);(new Uint8Array(c.wasm_memory.buffer)).set(b,c.zstd_get_src_ptr(this.zstd_context));
316
- b=c.zstd_read(this.zstd_context,a);const d=c.wasm_memory.buffer.slice(b,b+a);c.zstd_read_free(b,a);c.zstd_free_ctx(this.zstd_context);this.zstd_context=null;return d};O.prototype.zstd_decompress_worker=async function(a,b){if(!this.zstd_worker){const c=URL.createObjectURL(new Blob(["("+function(){let d;globalThis.onmessage=function(e){if(d){var {src:f,decompressed_size:g,id:k}=e.data;e=d.exports;var m=e.zstd_create_ctx(f.length);(new Uint8Array(e.memory.buffer)).set(f,e.zstd_get_src_ptr(m));var p=
317
- e.zstd_read(m,g),q=e.memory.buffer.slice(p,p+g);e.zstd_read_free(p,g);e.zstd_free_ctx(m);postMessage({result:q,id:k},[q])}else m=Object.fromEntries("cpu_exception_hook run_hardware_timers cpu_event_halt microtick get_rand_int stop_idling io_port_read8 io_port_read16 io_port_read32 io_port_write8 io_port_write16 io_port_write32 mmap_read8 mmap_read16 mmap_read32 mmap_write8 mmap_write16 mmap_write32 mmap_write64 mmap_write128 codegen_finalize jit_clear_func jit_clear_all_funcs".split(" ").map(r=>[r,
318
- ()=>console.error("zstd worker unexpectedly called "+r)])),m.__indirect_function_table=new WebAssembly.Table({element:"anyfunc",initial:1024}),m.abort=()=>{throw Error("zstd worker aborted");},m.log_from_wasm=m.console_log_from_wasm=(r,v)=>{console.log(va(d.exports.memory.buffer,r,v))},m.dbg_trace_from_wasm=()=>console.trace(),d=new WebAssembly.Instance(new WebAssembly.Module(e.data),{env:m})}}.toString()+")()"],{type:"text/javascript"}));this.zstd_worker=new Worker(c);URL.revokeObjectURL(c);this.zstd_worker.postMessage(this.wasm_source,
319
- [this.wasm_source])}return new Promise(c=>{const d=this.zstd_worker_request_id++,e=async f=>{f.data.id===d&&(this.zstd_worker.removeEventListener("message",e),l(a===f.data.result.byteLength),c(f.data.result))};this.zstd_worker.addEventListener("message",e);this.zstd_worker.postMessage({src:b,decompressed_size:a,id:d},[b.buffer])})};O.prototype.get_bzimage_initrd_from_filesystem=function(a){const b=(a.read_dir("/")||[]).map(e=>"/"+e);a=(a.read_dir("/boot/")||[]).map(e=>"/boot/"+e);let c,d;for(const e of[].concat(b,
320
- a)){const f=/old/i.test(e)||/fallback/i.test(e),g=/vmlinuz/i.test(e)||/bzimage/i.test(e),k=/initrd/i.test(e)||/initramfs/i.test(e);!g||d&&f||(d=e);!k||c&&f||(c=e)}c&&d||(console.log("Failed to find bzimage or initrd in filesystem. Files:"),console.log(b.join(" ")),console.log(a.join(" ")));return{initrd_path:c,bzimage_path:d}};O.prototype.run=async function(){this.v86.run()};O.prototype.stop=async function(){this.cpu_is_running&&await new Promise(a=>{const b=()=>{this.remove_listener("emulator-stopped",
321
- b);a()};this.add_listener("emulator-stopped",b);this.v86.stop()})};O.prototype.destroy=async function(){await this.stop();this.v86.destroy();this.keyboard_adapter&&this.keyboard_adapter.destroy();this.network_adapter&&this.network_adapter.destroy();this.mouse_adapter&&this.mouse_adapter.destroy();this.screen_adapter&&this.screen_adapter.destroy();this.serial_adapter&&this.serial_adapter.destroy();this.speaker_adapter&&this.speaker_adapter.destroy()};O.prototype.restart=function(){this.v86.restart()};
322
- O.prototype.add_listener=function(a,b){this.bus.register(a,b,this)};O.prototype.remove_listener=function(a,b){this.bus.unregister(a,b)};O.prototype.restore_state=async function(a){l(1===arguments.length);this.v86.restore_state(a)};O.prototype.save_state=async function(){l(0===arguments.length);return this.v86.save_state()};O.prototype.get_instruction_counter=function(){return this.v86?this.v86.cpu.instruction_counter[0]>>>0:0};O.prototype.is_running=function(){return this.cpu_is_running};O.prototype.set_fda=
323
- async function(a){const b=this.v86.cpu.devices.fdc.drives[0];if(a.url&&!a.async)await new Promise(c=>{ta(a.url,{done:d=>{b.insert_disk(new za(d));c()}})});else{const c=Ea(a,this.zstd_decompress_worker.bind(this));c.onload=()=>{b.insert_disk(c)};await c.load()}};O.prototype.set_fdb=async function(a){const b=this.v86.cpu.devices.fdc.drives[1];if(a.url&&!a.async)await new Promise(c=>{ta(a.url,{done:d=>{b.insert_disk(new za(d));c()}})});else{const c=Ea(a,this.zstd_decompress_worker.bind(this));c.onload=
324
- ()=>{b.insert_disk(c)};await c.load()}};O.prototype.eject_fda=function(){this.v86.cpu.devices.fdc.drives[0].eject_disk()};O.prototype.eject_fdb=function(){this.v86.cpu.devices.fdc.drives[1].eject_disk()};O.prototype.get_disk_fda=function(){return this.v86.cpu.devices.fdc.drives[0].get_buffer()};O.prototype.get_disk_fdb=function(){return this.v86.cpu.devices.fdc.drives[1].get_buffer()};O.prototype.set_cdrom=async function(a){if(a.url&&!a.async)ta(a.url,{done:b=>{this.v86.cpu.devices.cdrom.set_cdrom(new za(b))}});
325
- else{const b=Ea(a,this.zstd_decompress_worker.bind(this));b.onload=()=>{this.v86.cpu.devices.cdrom.set_cdrom(b)};await b.load()}};O.prototype.eject_cdrom=function(){this.v86.cpu.devices.cdrom.eject()};O.prototype.keyboard_send_scancodes=async function(a,b){for(var c=0;c<a.length;c++)this.bus.send("keyboard-code",a[c]),b&&await new Promise(d=>setTimeout(d,b))};O.prototype.keyboard_send_keys=async function(a,b){for(var c=0;c<a.length;c++)this.keyboard_adapter.simulate_press(a[c]),b&&await new Promise(d=>
326
- setTimeout(d,b))};O.prototype.keyboard_send_text=async function(a,b){for(var c=0;c<a.length;c++)this.keyboard_adapter.simulate_char(a[c]),b&&await new Promise(d=>setTimeout(d,b))};O.prototype.screen_make_screenshot=function(){return this.screen_adapter?this.screen_adapter.make_screenshot():null};O.prototype.screen_set_scale=function(a,b){this.screen_adapter&&this.screen_adapter.set_scale(a,b)};O.prototype.screen_go_fullscreen=function(){if(this.screen_adapter){var a=document.getElementById("screen_container");
327
- if(a){var b=a.requestFullScreen||a.webkitRequestFullscreen||a.mozRequestFullScreen||a.msRequestFullScreen;b&&(b.call(a),(a=document.getElementsByClassName("phone_keyboard")[0])&&a.focus());try{navigator.keyboard.lock()}catch(c){}this.lock_mouse()}}};O.prototype.lock_mouse=async function(){const a=document.body;try{await a.requestPointerLock({unadjustedMovement:!0})}catch(b){await a.requestPointerLock()}};O.prototype.mouse_set_enabled=function(a){this.mouse_adapter&&(this.mouse_adapter.emu_enabled=
328
- a)};O.prototype.mouse_set_status=O.prototype.mouse_set_enabled;O.prototype.keyboard_set_enabled=function(a){this.keyboard_adapter&&(this.keyboard_adapter.emu_enabled=a)};O.prototype.keyboard_set_status=O.prototype.keyboard_set_enabled;O.prototype.serial0_send=function(a){for(var b=0;b<a.length;b++)this.bus.send("serial0-input",a.charCodeAt(b))};O.prototype.serial_send_bytes=function(a,b){for(var c=0;c<b.length;c++)this.bus.send("serial"+a+"-input",b[c])};O.prototype.serial_set_modem_status=function(a,
329
- b){this.bus.send("serial"+a+"-modem-status-input",b)};O.prototype.serial_set_carrier_detect=function(a,b){this.bus.send("serial"+a+"-carrier-detect-input",b)};O.prototype.serial_set_ring_indicator=function(a,b){this.bus.send("serial"+a+"-ring-indicator-input",b)};O.prototype.serial_set_data_set_ready=function(a,b){this.bus.send("serial"+a+"-data-set-ready-input",b)};O.prototype.serial_set_clear_to_send=function(a,b){this.bus.send("serial"+a+"-clear-to-send-input",b)};O.prototype.create_file=async function(a,
330
- b){l(2===arguments.length);var c=this.fs9p;if(c){var d=a.split("/");d=d[d.length-1];var e=c.SearchPath(a).parentid;if(""!==d&&-1!==e)await c.CreateBinaryFile(d,e,b);else return Promise.reject(new wc)}};O.prototype.read_file=async function(a){l(1===arguments.length);var b=this.fs9p;if(b)return(b=await b.read_file(a))?b:Promise.reject(new wc)};O.prototype.automatically=function(a){const b=c=>{const d=c[0];if(d){var e=c.slice(1);d.sleep?setTimeout(()=>b(e),1E3*d.sleep):d.vga_text?this.wait_until_vga_screen_contains(d.vga_text).then(()=>
331
- b(e)):d.keyboard_send?(Array.isArray(d.keyboard_send)?this.keyboard_send_scancodes(d.keyboard_send):(l("string"===typeof d.keyboard_send),this.keyboard_send_text(d.keyboard_send)),b(e)):d.call?(d.call(),b(e)):l(!1,d)}};b(a)};O.prototype.wait_until_vga_screen_contains=async function(a,b){const c=Array.isArray(a);var d=b?.timeout_msec||0;const e=new Set;b=p=>e.add(p[0]);const f=(p,q)=>q.test?q.test(p):p.startsWith(q),g=[];this.add_listener("screen-put-char",b);for(var k of this.screen_adapter.get_text_screen())if(c)g.push(k.trimRight());
332
- else if(f(k,a))return this.remove_listener("screen-put-char",b),!0;k=!1;d=d?performance.now()+d:0;a:for(;!d||performance.now()<d;){if(c){for(var m=g.length;0<m&&""===g[m-1];)m--;m-=a.length;if(0<=m){let p=!0;for(let q=0;q<a.length&&p;q++)p=f(g[m+q],a[q]);if(p){k=!0;break}}}await new Promise(p=>setTimeout(p,100));for(const p of e)if(m=this.screen_adapter.get_text_row(p),c)g[p]=m.trimRight();else if(f(m,a)){k=!0;break a}e.clear()}this.remove_listener("screen-put-char",b);return k};O.prototype.read_memory=
333
- function(a,b){return this.v86.cpu.read_blob(a,b)};O.prototype.write_memory=function(a,b){this.v86.cpu.write_blob(a,b)};O.prototype.set_serial_container_xtermjs=function(a){this.serial_adapter&&this.serial_adapter.destroy&&this.serial_adapter.destroy();this.serial_adapter=new mc(a,this.bus);this.serial_adapter.show()};O.prototype.get_instruction_stats=function(){var a=this.v86.cpu;var b="";var c="COMPILE COMPILE_SKIPPED_NO_NEW_ENTRY_POINTS COMPILE_WRONG_ADDRESS_SPACE COMPILE_CUT_OFF_AT_END_OF_PAGE COMPILE_WITH_LOOP_SAFETY COMPILE_PAGE COMPILE_PAGE/COMPILE COMPILE_BASIC_BLOCK COMPILE_DUPLICATED_BASIC_BLOCK COMPILE_WASM_BLOCK COMPILE_WASM_LOOP COMPILE_DISPATCHER COMPILE_ENTRY_POINT COMPILE_WASM_TOTAL_BYTES COMPILE_WASM_TOTAL_BYTES/COMPILE_PAGE RUN_INTERPRETED RUN_INTERPRETED_NEW_PAGE RUN_INTERPRETED_PAGE_HAS_CODE RUN_INTERPRETED_PAGE_HAS_ENTRY_AFTER_PAGE_WALK RUN_INTERPRETED_NEAR_END_OF_PAGE RUN_INTERPRETED_DIFFERENT_STATE RUN_INTERPRETED_DIFFERENT_STATE_CPL3 RUN_INTERPRETED_DIFFERENT_STATE_FLAT RUN_INTERPRETED_DIFFERENT_STATE_IS32 RUN_INTERPRETED_DIFFERENT_STATE_SS32 RUN_INTERPRETED_MISSED_COMPILED_ENTRY_RUN_INTERPRETED RUN_INTERPRETED_STEPS RUN_FROM_CACHE RUN_FROM_CACHE_STEPS RUN_FROM_CACHE_STEPS/RUN_FROM_CACHE RUN_FROM_CACHE_STEPS/RUN_INTERPRETED_STEPS DIRECT_EXIT INDIRECT_JUMP INDIRECT_JUMP_NO_ENTRY NORMAL_PAGE_CHANGE NORMAL_FALLTHRU NORMAL_FALLTHRU_WITH_TARGET_BLOCK NORMAL_BRANCH NORMAL_BRANCH_WITH_TARGET_BLOCK CONDITIONAL_JUMP CONDITIONAL_JUMP_PAGE_CHANGE CONDITIONAL_JUMP_EXIT CONDITIONAL_JUMP_FALLTHRU CONDITIONAL_JUMP_FALLTHRU_WITH_TARGET_BLOCK CONDITIONAL_JUMP_BRANCH CONDITIONAL_JUMP_BRANCH_WITH_TARGET_BLOCK DISPATCHER_SMALL DISPATCHER_LARGE LOOP LOOP_SAFETY CONDITION_OPTIMISED CONDITION_UNOPTIMISED CONDITION_UNOPTIMISED_PF CONDITION_UNOPTIMISED_UNHANDLED_L CONDITION_UNOPTIMISED_UNHANDLED_LE FAILED_PAGE_CHANGE SAFE_READ_FAST SAFE_READ_SLOW_PAGE_CROSSED SAFE_READ_SLOW_NOT_VALID SAFE_READ_SLOW_NOT_USER SAFE_READ_SLOW_IN_MAPPED_RANGE SAFE_WRITE_FAST SAFE_WRITE_SLOW_PAGE_CROSSED SAFE_WRITE_SLOW_NOT_VALID SAFE_WRITE_SLOW_NOT_USER SAFE_WRITE_SLOW_IN_MAPPED_RANGE SAFE_WRITE_SLOW_READ_ONLY SAFE_WRITE_SLOW_HAS_CODE SAFE_READ_WRITE_FAST SAFE_READ_WRITE_SLOW_PAGE_CROSSED SAFE_READ_WRITE_SLOW_NOT_VALID SAFE_READ_WRITE_SLOW_NOT_USER SAFE_READ_WRITE_SLOW_IN_MAPPED_RANGE SAFE_READ_WRITE_SLOW_READ_ONLY SAFE_READ_WRITE_SLOW_HAS_CODE PAGE_FAULT TLB_MISS MAIN_LOOP MAIN_LOOP_IDLE DO_MANY_CYCLES CYCLE_INTERNAL INVALIDATE_ALL_MODULES_NO_FREE_WASM_INDICES INVALIDATE_MODULE_WRITTEN_WHILE_COMPILED INVALIDATE_MODULE_UNUSED_AFTER_OVERWRITE INVALIDATE_MODULE_DIRTY_PAGE INVALIDATE_PAGE_HAD_CODE INVALIDATE_PAGE_HAD_ENTRY_POINTS DIRTY_PAGE_DID_NOT_HAVE_CODE RUN_FROM_CACHE_EXIT_SAME_PAGE RUN_FROM_CACHE_EXIT_NEAR_END_OF_PAGE RUN_FROM_CACHE_EXIT_DIFFERENT_PAGE CLEAR_TLB FULL_CLEAR_TLB TLB_FULL TLB_GLOBAL_FULL MODRM_SIMPLE_REG MODRM_SIMPLE_REG_WITH_OFFSET MODRM_SIMPLE_CONST_OFFSET MODRM_COMPLEX SEG_OFFSET_OPTIMISED SEG_OFFSET_NOT_OPTIMISED SEG_OFFSET_NOT_OPTIMISED_ES SEG_OFFSET_NOT_OPTIMISED_FS SEG_OFFSET_NOT_OPTIMISED_GS SEG_OFFSET_NOT_OPTIMISED_NOT_FLAT".split(" "),
309
+ !0;e.memory_size=b.memory_size||67108864;e.vga_memory_size=b.vga_memory_size||8388608;e.boot_order=f;e.fastboot=b.fastboot||!1;e.fda=void 0;e.fdb=void 0;e.uart1=b.uart1;e.uart2=b.uart2;e.uart3=b.uart3;e.cmdline=b.cmdline;e.preserve_mac_from_state_image=b.preserve_mac_from_state_image;e.mac_address_translation=b.mac_address_translation;e.cpuid_level=b.cpuid_level;e.virtio_balloon=b.virtio_balloon;e.virtio_console=b.virtio_console;if(f=b.network_relay_url||b.net_device&&b.net_device.relay_url)"fetch"===
310
+ f?this.network_adapter=new $b(this.bus,b.net_device):"inbrowser"===f?this.network_adapter=new oc(this.bus,b.net_device):f.startsWith("wisp://")||f.startsWith("wisps://")?this.network_adapter=new bc(f,this.bus,b.net_device):this.network_adapter=new xb(f,this.bus);e.net_device=b.net_device||{type:"ne2k"};f=b.screen||{};b.screen_container&&(f.container=b.screen_container);b.disable_keyboard||(this.keyboard_adapter=new dc(this.bus));b.disable_mouse||(this.mouse_adapter=new ec(this.bus,f.container));this.screen_adapter=
311
+ f.container?new Aa(f,()=>this.v86.cpu.devices.vga&&this.v86.cpu.devices.vga.screen_fill_buffer()):new fc(f);e.screen=this.screen_adapter;e.screen_options=f;b.serial_container&&(this.serial_adapter=new mc(b.serial_container,this.bus));b.serial_container_xtermjs&&(this.serial_adapter=new nc(b.serial_container_xtermjs,this.bus));b.disable_speaker||(this.speaker_adapter=new mb(this.bus));var g=[];f=(v,t)=>{if(t)if(t.get&&t.set&&t.load)g.push({name:v,loadable:t});else{if("bios"===v||"vga_bios"===v||"initial_state"===
312
+ v||"multiboot"===v||"bzimage"===v||"initrd"===v)t.async=!1;if("fda"===v||"fdb"===v)t.async=!1;t.url&&!t.async?g.push({name:v,url:t.url,size:t.size}):g.push({name:v,loadable:Ga(t,this.zstd_decompress_worker.bind(this))})}};b.state&&console.warn("Warning: Unknown option 'state'. Did you mean 'initial_state'?");f("bios",b.bios);f("vga_bios",b.vga_bios);f("cdrom",b.cdrom);f("hda",b.hda);f("hdb",b.hdb);f("fda",b.fda);f("fdb",b.fdb);f("initial_state",b.initial_state);f("multiboot",b.multiboot);f("bzimage",
313
+ b.bzimage);f("initrd",b.initrd);if(b.filesystem&&b.filesystem.handle9p)e.handle9p=b.filesystem.handle9p;else if(b.filesystem&&b.filesystem.proxy_url)e.proxy9p=b.filesystem.proxy_url;else if(b.filesystem){f=b.filesystem.basefs;var k=b.filesystem.baseurl;let v=new pc;k&&(v=new qc(v,k));e.fs9p=this.fs9p=new L(v);if(f){l(k,"Filesystem: baseurl must be specified");if("object"===typeof f){var m=f.size;f=f.url}l("string"===typeof f);g.push({name:"fs9p_json",url:f,size:m,as_json:!0})}}var p=this,q=g.length,
314
+ r=function(v){if(v===q)setTimeout(d.bind(this),0);else{var t=g[v];t.loadable?(t.loadable.onload=function(){c.call(this,t.name,t.loadable);r(v+1)}.bind(this),t.loadable.load()):ta(t.url,{done:function(z){t.url.endsWith(".zst")&&"initial_state"!==t.name&&(l(t.size,"A size must be provided for compressed images"),z=this.zstd_decompress(t.size,new Uint8Array(z)));c.call(this,t.name,t.as_json?z:new Ba(z));r(v+1)}.bind(this),progress:function(z){200===z.target.status?p.emulator_bus.send("download-progress",
315
+ {file_index:v,file_count:q,file_name:t.url,lengthComputable:z.lengthComputable,total:z.total||t.size,loaded:z.loaded}):p.emulator_bus.send("download-error",{file_index:v,file_count:q,file_name:t.url,request:z.target})},as_json:t.as_json})}}.bind(this);r(0)};N.prototype.zstd_decompress=function(a,b){const c=this.v86.cpu;l(!this.zstd_context);this.zstd_context=c.zstd_create_ctx(b.length);(new Uint8Array(c.wasm_memory.buffer)).set(b,c.zstd_get_src_ptr(this.zstd_context));b=c.zstd_read(this.zstd_context,
316
+ a);const d=c.wasm_memory.buffer.slice(b,b+a);c.zstd_read_free(b,a);c.zstd_free_ctx(this.zstd_context);this.zstd_context=null;return d};N.prototype.zstd_decompress_worker=async function(a,b){if(!this.zstd_worker){const c=URL.createObjectURL(new Blob(["("+function(){let d;globalThis.onmessage=function(e){if(d){var {src:f,decompressed_size:g,id:k}=e.data;e=d.exports;var m=e.zstd_create_ctx(f.length);(new Uint8Array(e.memory.buffer)).set(f,e.zstd_get_src_ptr(m));var p=e.zstd_read(m,g),q=e.memory.buffer.slice(p,
317
+ p+g);e.zstd_read_free(p,g);e.zstd_free_ctx(m);postMessage({result:q,id:k},[q])}else m=Object.fromEntries("cpu_exception_hook run_hardware_timers cpu_event_halt microtick get_rand_int stop_idling io_port_read8 io_port_read16 io_port_read32 io_port_write8 io_port_write16 io_port_write32 mmap_read8 mmap_read16 mmap_read32 mmap_write8 mmap_write16 mmap_write32 mmap_write64 mmap_write128 codegen_finalize jit_clear_func jit_clear_all_funcs".split(" ").map(r=>[r,()=>console.error("zstd worker unexpectedly called "+
318
+ r)])),m.__indirect_function_table=new WebAssembly.Table({element:"anyfunc",initial:1024}),m.abort=()=>{throw Error("zstd worker aborted");},m.log_from_wasm=m.console_log_from_wasm=(r,v)=>{console.log(va(d.exports.memory.buffer,r,v))},m.dbg_trace_from_wasm=()=>console.trace(),d=new WebAssembly.Instance(new WebAssembly.Module(e.data),{env:m})}}.toString()+")()"],{type:"text/javascript"}));this.zstd_worker=new Worker(c);URL.revokeObjectURL(c);this.zstd_worker.postMessage(this.wasm_source,[this.wasm_source])}return new Promise(c=>
319
+ {const d=this.zstd_worker_request_id++,e=async f=>{f.data.id===d&&(this.zstd_worker.removeEventListener("message",e),l(a===f.data.result.byteLength),c(f.data.result))};this.zstd_worker.addEventListener("message",e);this.zstd_worker.postMessage({src:b,decompressed_size:a,id:d},[b.buffer])})};N.prototype.get_bzimage_initrd_from_filesystem=function(a){const b=(a.read_dir("/")||[]).map(e=>"/"+e);a=(a.read_dir("/boot/")||[]).map(e=>"/boot/"+e);let c,d;for(const e of[].concat(b,a)){const f=/old/i.test(e)||
320
+ /fallback/i.test(e),g=/vmlinuz/i.test(e)||/bzimage/i.test(e),k=/initrd/i.test(e)||/initramfs/i.test(e);!g||d&&f||(d=e);!k||c&&f||(c=e)}c&&d||(console.log("Failed to find bzimage or initrd in filesystem. Files:"),console.log(b.join(" ")),console.log(a.join(" ")));return{initrd_path:c,bzimage_path:d}};N.prototype.run=async function(){this.v86.run()};N.prototype.stop=async function(){this.cpu_is_running&&await new Promise(a=>{const b=()=>{this.remove_listener("emulator-stopped",b);a()};this.add_listener("emulator-stopped",
321
+ b);this.v86.stop()})};N.prototype.destroy=async function(){await this.stop();this.v86.destroy();this.keyboard_adapter&&this.keyboard_adapter.destroy();this.network_adapter&&this.network_adapter.destroy();this.mouse_adapter&&this.mouse_adapter.destroy();this.screen_adapter&&this.screen_adapter.destroy();this.serial_adapter&&this.serial_adapter.destroy();this.speaker_adapter&&this.speaker_adapter.destroy()};N.prototype.restart=function(){this.v86.restart()};N.prototype.add_listener=function(a,b){this.bus.register(a,
322
+ b,this)};N.prototype.remove_listener=function(a,b){this.bus.unregister(a,b)};N.prototype.restore_state=async function(a){l(1===arguments.length);this.v86.restore_state(a)};N.prototype.save_state=async function(){l(0===arguments.length);return this.v86.save_state()};N.prototype.get_instruction_counter=function(){return this.v86?this.v86.cpu.instruction_counter[0]>>>0:0};N.prototype.is_running=function(){return this.cpu_is_running};N.prototype.set_fda=async function(a){const b=this.v86.cpu.devices.fdc.drives[0];
323
+ if(a.url&&!a.async)await new Promise(c=>{ta(a.url,{done:d=>{b.insert_disk(new Ba(d));c()}})});else{const c=Ga(a,this.zstd_decompress_worker.bind(this));c.onload=()=>{b.insert_disk(c)};await c.load()}};N.prototype.set_fdb=async function(a){const b=this.v86.cpu.devices.fdc.drives[1];if(a.url&&!a.async)await new Promise(c=>{ta(a.url,{done:d=>{b.insert_disk(new Ba(d));c()}})});else{const c=Ga(a,this.zstd_decompress_worker.bind(this));c.onload=()=>{b.insert_disk(c)};await c.load()}};N.prototype.eject_fda=
324
+ function(){this.v86.cpu.devices.fdc.drives[0].eject_disk()};N.prototype.eject_fdb=function(){this.v86.cpu.devices.fdc.drives[1].eject_disk()};N.prototype.get_disk_fda=function(){return this.v86.cpu.devices.fdc.drives[0].get_buffer()};N.prototype.get_disk_fdb=function(){return this.v86.cpu.devices.fdc.drives[1].get_buffer()};N.prototype.set_cdrom=async function(a){if(a.url&&!a.async)ta(a.url,{done:b=>{this.v86.cpu.devices.cdrom.set_cdrom(new Ba(b))}});else{const b=Ga(a,this.zstd_decompress_worker.bind(this));
325
+ b.onload=()=>{this.v86.cpu.devices.cdrom.set_cdrom(b)};await b.load()}};N.prototype.eject_cdrom=function(){this.v86.cpu.devices.cdrom.eject()};N.prototype.keyboard_send_scancodes=async function(a,b){for(var c=0;c<a.length;c++)this.bus.send("keyboard-code",a[c]),b&&await new Promise(d=>setTimeout(d,b))};N.prototype.keyboard_send_keys=async function(a,b){for(var c=0;c<a.length;c++)this.keyboard_adapter.simulate_press(a[c]),b&&await new Promise(d=>setTimeout(d,b))};N.prototype.keyboard_send_text=async function(a,
326
+ b){for(var c=0;c<a.length;c++)this.keyboard_adapter.simulate_char(a[c]),b&&await new Promise(d=>setTimeout(d,b))};N.prototype.screen_make_screenshot=function(){return this.screen_adapter?this.screen_adapter.make_screenshot():null};N.prototype.screen_set_scale=function(a,b){this.screen_adapter&&this.screen_adapter.set_scale(a,b)};N.prototype.screen_go_fullscreen=function(){if(this.screen_adapter){var a=document.getElementById("screen_container");if(a){var b=a.requestFullScreen||a.webkitRequestFullscreen||
327
+ a.mozRequestFullScreen||a.msRequestFullScreen;b&&(b.call(a),(a=document.getElementsByClassName("phone_keyboard")[0])&&a.focus());try{navigator.keyboard.lock()}catch(c){}this.lock_mouse()}}};N.prototype.lock_mouse=async function(){const a=document.body;try{await a.requestPointerLock({unadjustedMovement:!0})}catch(b){await a.requestPointerLock()}};N.prototype.mouse_set_enabled=function(a){this.mouse_adapter&&(this.mouse_adapter.emu_enabled=a)};N.prototype.mouse_set_status=N.prototype.mouse_set_enabled;
328
+ N.prototype.keyboard_set_enabled=function(a){this.keyboard_adapter&&(this.keyboard_adapter.emu_enabled=a)};N.prototype.keyboard_set_status=N.prototype.keyboard_set_enabled;N.prototype.serial0_send=function(a){for(var b=0;b<a.length;b++)this.bus.send("serial0-input",a.charCodeAt(b))};N.prototype.serial_send_bytes=function(a,b){for(var c=0;c<b.length;c++)this.bus.send("serial"+a+"-input",b[c])};N.prototype.serial_set_modem_status=function(a,b){this.bus.send("serial"+a+"-modem-status-input",b)};N.prototype.serial_set_carrier_detect=
329
+ function(a,b){this.bus.send("serial"+a+"-carrier-detect-input",b)};N.prototype.serial_set_ring_indicator=function(a,b){this.bus.send("serial"+a+"-ring-indicator-input",b)};N.prototype.serial_set_data_set_ready=function(a,b){this.bus.send("serial"+a+"-data-set-ready-input",b)};N.prototype.serial_set_clear_to_send=function(a,b){this.bus.send("serial"+a+"-clear-to-send-input",b)};N.prototype.create_file=async function(a,b){l(2===arguments.length);var c=this.fs9p;if(c){var d=a.split("/");d=d[d.length-
330
+ 1];var e=c.SearchPath(a).parentid;if(""!==d&&-1!==e)await c.CreateBinaryFile(d,e,b);else return Promise.reject(new xc)}};N.prototype.read_file=async function(a){l(1===arguments.length);var b=this.fs9p;if(b)return(b=await b.read_file(a))?b:Promise.reject(new xc)};N.prototype.automatically=function(a){const b=c=>{const d=c[0];if(d){var e=c.slice(1);d.sleep?setTimeout(()=>b(e),1E3*d.sleep):d.vga_text?this.wait_until_vga_screen_contains(d.vga_text).then(()=>b(e)):d.keyboard_send?(Array.isArray(d.keyboard_send)?
331
+ this.keyboard_send_scancodes(d.keyboard_send):(l("string"===typeof d.keyboard_send),this.keyboard_send_text(d.keyboard_send)),b(e)):d.call?(d.call(),b(e)):l(!1,d)}};b(a)};N.prototype.wait_until_vga_screen_contains=async function(a,b){const c=Array.isArray(a);var d=b?.timeout_msec||0;const e=new Set;b=p=>e.add(p[0]);const f=(p,q)=>q.test?q.test(p):p.startsWith(q),g=[];this.add_listener("screen-put-char",b);for(var k of this.screen_adapter.get_text_screen())if(c)g.push(k.trimRight());else if(f(k,a))return this.remove_listener("screen-put-char",
332
+ b),!0;k=!1;d=d?performance.now()+d:0;a:for(;!d||performance.now()<d;){if(c){for(var m=g.length;0<m&&""===g[m-1];)m--;m-=a.length;if(0<=m){let p=!0;for(let q=0;q<a.length&&p;q++)p=f(g[m+q],a[q]);if(p){k=!0;break}}}await new Promise(p=>setTimeout(p,100));for(const p of e)if(m=this.screen_adapter.get_text_row(p),c)g[p]=m.trimRight();else if(f(m,a)){k=!0;break a}e.clear()}this.remove_listener("screen-put-char",b);return k};N.prototype.read_memory=function(a,b){return this.v86.cpu.read_blob(a,b)};N.prototype.write_memory=
333
+ function(a,b){this.v86.cpu.write_blob(a,b)};N.prototype.set_serial_container_xtermjs=function(a){this.serial_adapter&&this.serial_adapter.destroy&&this.serial_adapter.destroy();this.serial_adapter=new nc(a,this.bus);this.serial_adapter.show()};N.prototype.get_instruction_stats=function(){var a=this.v86.cpu;var b="";var c="COMPILE COMPILE_SKIPPED_NO_NEW_ENTRY_POINTS COMPILE_WRONG_ADDRESS_SPACE COMPILE_CUT_OFF_AT_END_OF_PAGE COMPILE_WITH_LOOP_SAFETY COMPILE_PAGE COMPILE_PAGE/COMPILE COMPILE_BASIC_BLOCK COMPILE_DUPLICATED_BASIC_BLOCK COMPILE_WASM_BLOCK COMPILE_WASM_LOOP COMPILE_DISPATCHER COMPILE_ENTRY_POINT COMPILE_WASM_TOTAL_BYTES COMPILE_WASM_TOTAL_BYTES/COMPILE_PAGE RUN_INTERPRETED RUN_INTERPRETED_NEW_PAGE RUN_INTERPRETED_PAGE_HAS_CODE RUN_INTERPRETED_PAGE_HAS_ENTRY_AFTER_PAGE_WALK RUN_INTERPRETED_NEAR_END_OF_PAGE RUN_INTERPRETED_DIFFERENT_STATE RUN_INTERPRETED_DIFFERENT_STATE_CPL3 RUN_INTERPRETED_DIFFERENT_STATE_FLAT RUN_INTERPRETED_DIFFERENT_STATE_IS32 RUN_INTERPRETED_DIFFERENT_STATE_SS32 RUN_INTERPRETED_MISSED_COMPILED_ENTRY_RUN_INTERPRETED RUN_INTERPRETED_STEPS RUN_FROM_CACHE RUN_FROM_CACHE_STEPS RUN_FROM_CACHE_STEPS/RUN_FROM_CACHE RUN_FROM_CACHE_STEPS/RUN_INTERPRETED_STEPS DIRECT_EXIT INDIRECT_JUMP INDIRECT_JUMP_NO_ENTRY NORMAL_PAGE_CHANGE NORMAL_FALLTHRU NORMAL_FALLTHRU_WITH_TARGET_BLOCK NORMAL_BRANCH NORMAL_BRANCH_WITH_TARGET_BLOCK CONDITIONAL_JUMP CONDITIONAL_JUMP_PAGE_CHANGE CONDITIONAL_JUMP_EXIT CONDITIONAL_JUMP_FALLTHRU CONDITIONAL_JUMP_FALLTHRU_WITH_TARGET_BLOCK CONDITIONAL_JUMP_BRANCH CONDITIONAL_JUMP_BRANCH_WITH_TARGET_BLOCK DISPATCHER_SMALL DISPATCHER_LARGE LOOP LOOP_SAFETY CONDITION_OPTIMISED CONDITION_UNOPTIMISED CONDITION_UNOPTIMISED_PF CONDITION_UNOPTIMISED_UNHANDLED_L CONDITION_UNOPTIMISED_UNHANDLED_LE FAILED_PAGE_CHANGE SAFE_READ_FAST SAFE_READ_SLOW_PAGE_CROSSED SAFE_READ_SLOW_NOT_VALID SAFE_READ_SLOW_NOT_USER SAFE_READ_SLOW_IN_MAPPED_RANGE SAFE_WRITE_FAST SAFE_WRITE_SLOW_PAGE_CROSSED SAFE_WRITE_SLOW_NOT_VALID SAFE_WRITE_SLOW_NOT_USER SAFE_WRITE_SLOW_IN_MAPPED_RANGE SAFE_WRITE_SLOW_READ_ONLY SAFE_WRITE_SLOW_HAS_CODE SAFE_READ_WRITE_FAST SAFE_READ_WRITE_SLOW_PAGE_CROSSED SAFE_READ_WRITE_SLOW_NOT_VALID SAFE_READ_WRITE_SLOW_NOT_USER SAFE_READ_WRITE_SLOW_IN_MAPPED_RANGE SAFE_READ_WRITE_SLOW_READ_ONLY SAFE_READ_WRITE_SLOW_HAS_CODE PAGE_FAULT TLB_MISS MAIN_LOOP MAIN_LOOP_IDLE DO_MANY_CYCLES CYCLE_INTERNAL INVALIDATE_ALL_MODULES_NO_FREE_WASM_INDICES INVALIDATE_MODULE_WRITTEN_WHILE_COMPILED INVALIDATE_MODULE_UNUSED_AFTER_OVERWRITE INVALIDATE_MODULE_DIRTY_PAGE INVALIDATE_PAGE_HAD_CODE INVALIDATE_PAGE_HAD_ENTRY_POINTS DIRTY_PAGE_DID_NOT_HAVE_CODE RUN_FROM_CACHE_EXIT_SAME_PAGE RUN_FROM_CACHE_EXIT_NEAR_END_OF_PAGE RUN_FROM_CACHE_EXIT_DIFFERENT_PAGE CLEAR_TLB FULL_CLEAR_TLB TLB_FULL TLB_GLOBAL_FULL MODRM_SIMPLE_REG MODRM_SIMPLE_REG_WITH_OFFSET MODRM_SIMPLE_CONST_OFFSET MODRM_COMPLEX SEG_OFFSET_OPTIMISED SEG_OFFSET_NOT_OPTIMISED SEG_OFFSET_NOT_OPTIMISED_ES SEG_OFFSET_NOT_OPTIMISED_FS SEG_OFFSET_NOT_OPTIMISED_GS SEG_OFFSET_NOT_OPTIMISED_NOT_FLAT".split(" "),
334
334
  d=0;const e={};for(let g=0;g<c.length;g++){const k=c[g];var f=void 0;if(k.includes("/")){d++;const [m,p]=k.split("/");f=e[m]/e[p]}else f=e[k]=a.wm.exports.profiler_stat_get(g-d),f=1E8<=f?Math.round(f/1E6)+"m":1E5<=f?Math.round(f/1E3)+"k":f;b+=k+"="+f+"\n"}b+="\n";c=a.wm.exports.get_valid_tlb_entries_count();d=a.wm.exports.get_valid_global_tlb_entries_count();b=b+("TLB_ENTRIES="+c+" ("+d+" global, "+(c-d)+" non-global)\nWASM_TABLE_FREE=")+(a.wm.exports.jit_get_wasm_table_index_free_list_count()+"\n");
335
- b+="JIT_CACHE_SIZE="+a.wm.exports.jit_get_cache_size()+"\n";b+="FLAT_SEGMENTS="+a.wm.exports.has_flat_segmentation()+"\n";b+="wasm memory size: "+(a.wasm_memory.buffer.byteLength>>20)+"m\n";b=b+"Config:\nJIT_DISABLED="+(a.wm.exports.get_jit_config(0)+"\n");b+="MAX_PAGES="+a.wm.exports.get_jit_config(1)+"\n";b+="JIT_USE_LOOP_SAFETY="+!!a.wm.exports.get_jit_config(2)+"\n";b+="MAX_EXTRA_BASIC_BLOCKS="+a.wm.exports.get_jit_config(3)+"\n";a=[hb(a,!1,!1,!1,!1),hb(a,!0,!1,!1,!1),hb(a,!1,!0,!1,!1),hb(a,!1,
336
- !1,!0,!1),hb(a,!1,!1,!1,!0)].join("\n\n");return b+a};function wc(a){this.message=a||"File not found"}wc.prototype=Error.prototype;"undefined"!==typeof module&&"undefined"!==typeof module.exports?module.exports.V86=O:"undefined"!==typeof window?window.V86=O:"function"===typeof importScripts&&(self.V86=O);function I(a,b){this.stopping=this.running=!1;this.idle=!0;this.tick_counter=0;this.worker=null;this.cpu=new P(a,b,()=>{this.idle&&this.next_tick(0)});this.bus=a;this.register_yield()}I.prototype.run=
337
- function(){this.stopping=!1;this.running||(this.running=!0,this.bus.send("emulator-started"));this.next_tick(0)};I.prototype.do_tick=function(){if(this.stopping||!this.running)this.stopping=this.running=!1,this.bus.send("emulator-stopped");else{this.idle=!1;var a=this.cpu.main_loop();this.next_tick(a)}};I.prototype.next_tick=function(a){const b=++this.tick_counter;this.idle=!0;this.yield(a,b)};I.prototype.yield_callback=function(a){a===this.tick_counter&&this.do_tick()};I.prototype.stop=function(){this.running&&
338
- (this.stopping=!0)};I.prototype.destroy=function(){this.unregister_yield()};I.prototype.restart=function(){this.cpu.reset_cpu();this.cpu.load_bios()};I.prototype.init=function(a){this.cpu.init(a,this.bus);this.bus.send("emulator-ready")};if("undefined"!==typeof process)I.prototype.yield=function(a,b){1>a?global.setImmediate(c=>this.yield_callback(c),b):setTimeout(c=>this.yield_callback(c),a,b)},I.prototype.register_yield=function(){},I.prototype.unregister_yield=function(){};else if("undefined"!==
339
- typeof Worker){function a(){let b;globalThis.onmessage=function(c){const d=c.data.t;b=b&&clearTimeout(b);1>d?postMessage(c.data.tick):b=setTimeout(()=>postMessage(c.data.tick),d)}}I.prototype.register_yield=function(){const b=URL.createObjectURL(new Blob(["("+a.toString()+")()"],{type:"text/javascript"}));this.worker=new Worker(b);this.worker.onmessage=c=>this.yield_callback(c.data);URL.revokeObjectURL(b)};I.prototype.yield=function(b,c){this.worker.postMessage({t:b,tick:c})};I.prototype.unregister_yield=
340
- function(){this.worker&&this.worker.terminate();this.worker=null}}else I.prototype.yield=function(a){setTimeout(()=>{this.do_tick()},a)},I.prototype.register_yield=function(){},I.prototype.unregister_yield=function(){};I.prototype.save_state=function(){for(var a=[],b=eb(this.cpu,a),c=[],d=0,e=0;e<a.length;e++){var f=a[e].byteLength;c[e]={offset:d,length:f};d+=f;d=d+3&-4}b=JSON.stringify({buffer_infos:c,state:b});b=(new TextEncoder).encode(b);e=16+b.length;e=e+3&-4;var g=e+d;d=new ArrayBuffer(g);var k=
341
- new Int32Array(d,0,4);(new Uint8Array(d,16,b.length)).set(b);f=new Uint8Array(d,e);k[0]=-2039052682;k[1]=6;k[2]=g;k[3]=b.length;for(e=0;e<a.length;e++)g=a[e],l(g.constructor===Uint8Array),f.set(g,c[e].offset);B("State: json size "+(b.byteLength>>10)+"k");B("State: Total buffers size "+(f.byteLength>>10)+"k");return d};I.prototype.restore_state=function(a){return gb(this.cpu,a)};if("object"===typeof performance&&performance.now)I.microtick=performance.now.bind(performance);else if("function"===typeof require){const {performance:a}=
342
- require("perf_hooks");I.microtick=a.now.bind(a)}else I.microtick="object"===typeof process&&process.hrtime?function(){var a=process.hrtime();return 1E3*a[0]+a[1]/1E6}:Date.now;function xc(a){this.cpu=a;var b=a.io;a.devices.pci.register_device({pci_id:56,pci_space:[134,128,19,113,7,0,128,2,8,0,128,6,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,1,0,0],pci_bars:[],name:"acpi"});this.timer_imprecision_offset=this.timer_last_value=0;this.status=1;
343
- this.pm1_enable=this.pm1_status=0;this.last_timer=this.get_timer(I.microtick());this.gpe=new Uint8Array(4);b.register_read(45056,this,void 0,function(){B("ACPI pm1_status read",262144);return this.pm1_status});b.register_write(45056,this,void 0,function(c){B("ACPI pm1_status write: "+n(c,4),262144);this.pm1_status&=~c});b.register_read(45058,this,void 0,function(){B("ACPI pm1_enable read",262144);return this.pm1_enable});b.register_write(45058,this,void 0,function(c){B("ACPI pm1_enable write: "+n(c),
344
- 262144);this.pm1_enable=c});b.register_read(45060,this,function(){B("ACPI status read8",262144);return this.status&255},function(){B("ACPI status read",262144);return this.status});b.register_write(45060,this,void 0,function(c){B("ACPI status write: "+n(c),262144);this.status=c});b.register_read(45064,this,void 0,void 0,function(){return this.get_timer(I.microtick())&16777215});b.register_read(45024,this,function(){B("Read gpe#0",262144);return this.gpe[0]});b.register_read(45025,this,function(){B("Read gpe#1",
335
+ b+="JIT_CACHE_SIZE="+a.wm.exports.jit_get_cache_size()+"\n";b+="FLAT_SEGMENTS="+a.wm.exports.has_flat_segmentation()+"\n";b+="wasm memory size: "+(a.wasm_memory.buffer.byteLength>>20)+"m\n";b=b+"Config:\nJIT_DISABLED="+(a.wm.exports.get_jit_config(0)+"\n");b+="MAX_PAGES="+a.wm.exports.get_jit_config(1)+"\n";b+="JIT_USE_LOOP_SAFETY="+!!a.wm.exports.get_jit_config(2)+"\n";b+="MAX_EXTRA_BASIC_BLOCKS="+a.wm.exports.get_jit_config(3)+"\n";a=[jb(a,!1,!1,!1,!1),jb(a,!0,!1,!1,!1),jb(a,!1,!0,!1,!1),jb(a,!1,
336
+ !1,!0,!1),jb(a,!1,!1,!1,!0)].join("\n\n");return b+a};function xc(a){this.message=a||"File not found"}xc.prototype=Error.prototype;"undefined"!==typeof module&&"undefined"!==typeof module.exports?module.exports.V86=N:"undefined"!==typeof window?window.V86=N:"function"===typeof importScripts&&(self.V86=N);function H(a,b){this.stopping=this.running=!1;this.idle=!0;this.tick_counter=0;this.worker=null;this.cpu=new P(a,b,()=>{this.idle&&this.next_tick(0)});this.bus=a;this.register_yield()}H.prototype.run=
337
+ function(){this.stopping=!1;this.running||(this.running=!0,this.bus.send("emulator-started"));this.next_tick(0)};H.prototype.do_tick=function(){if(this.stopping||!this.running)this.stopping=this.running=!1,this.bus.send("emulator-stopped");else{this.idle=!1;var a=this.cpu.main_loop();this.next_tick(a)}};H.prototype.next_tick=function(a){const b=++this.tick_counter;this.idle=!0;this.yield(a,b)};H.prototype.yield_callback=function(a){a===this.tick_counter&&this.do_tick()};H.prototype.stop=function(){this.running&&
338
+ (this.stopping=!0)};H.prototype.destroy=function(){this.unregister_yield()};H.prototype.restart=function(){this.cpu.reset_cpu();this.cpu.load_bios()};H.prototype.init=function(a){this.cpu.init(a,this.bus);this.bus.send("emulator-ready")};if("undefined"!==typeof process)H.prototype.yield=function(a,b){1>a?global.setImmediate(c=>this.yield_callback(c),b):setTimeout(c=>this.yield_callback(c),a,b)},H.prototype.register_yield=function(){},H.prototype.unregister_yield=function(){};else if("undefined"!==
339
+ typeof Worker){function a(){let b;globalThis.onmessage=function(c){const d=c.data.t;b=b&&clearTimeout(b);1>d?postMessage(c.data.tick):b=setTimeout(()=>postMessage(c.data.tick),d)}}H.prototype.register_yield=function(){const b=URL.createObjectURL(new Blob(["("+a.toString()+")()"],{type:"text/javascript"}));this.worker=new Worker(b);this.worker.onmessage=c=>this.yield_callback(c.data);URL.revokeObjectURL(b)};H.prototype.yield=function(b,c){this.worker.postMessage({t:b,tick:c})};H.prototype.unregister_yield=
340
+ function(){this.worker&&this.worker.terminate();this.worker=null}}else H.prototype.yield=function(a){setTimeout(()=>{this.do_tick()},a)},H.prototype.register_yield=function(){},H.prototype.unregister_yield=function(){};H.prototype.save_state=function(){for(var a=[],b=gb(this.cpu,a),c=[],d=0,e=0;e<a.length;e++){var f=a[e].byteLength;c[e]={offset:d,length:f};d+=f;d=d+3&-4}b=JSON.stringify({buffer_infos:c,state:b});b=(new TextEncoder).encode(b);e=16+b.length;e=e+3&-4;var g=e+d;d=new ArrayBuffer(g);var k=
341
+ new Int32Array(d,0,4);(new Uint8Array(d,16,b.length)).set(b);f=new Uint8Array(d,e);k[0]=-2039052682;k[1]=6;k[2]=g;k[3]=b.length;for(e=0;e<a.length;e++)g=a[e],l(g.constructor===Uint8Array),f.set(g,c[e].offset);B("State: json size "+(b.byteLength>>10)+"k");B("State: Total buffers size "+(f.byteLength>>10)+"k");return d};H.prototype.restore_state=function(a){return ib(this.cpu,a)};if("object"===typeof performance&&performance.now)H.microtick=performance.now.bind(performance);else if("function"===typeof require){const {performance:a}=
342
+ require("perf_hooks");H.microtick=a.now.bind(a)}else H.microtick="object"===typeof process&&process.hrtime?function(){var a=process.hrtime();return 1E3*a[0]+a[1]/1E6}:Date.now;function yc(a){this.cpu=a;var b=a.io;a.devices.pci.register_device({pci_id:56,pci_space:[134,128,19,113,7,0,128,2,8,0,128,6,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,1,0,0],pci_bars:[],name:"acpi"});this.timer_imprecision_offset=this.timer_last_value=0;this.status=1;
343
+ this.pm1_enable=this.pm1_status=0;this.last_timer=this.get_timer(H.microtick());this.gpe=new Uint8Array(4);b.register_read(45056,this,void 0,function(){B("ACPI pm1_status read",262144);return this.pm1_status});b.register_write(45056,this,void 0,function(c){B("ACPI pm1_status write: "+n(c,4),262144);this.pm1_status&=~c});b.register_read(45058,this,void 0,function(){B("ACPI pm1_enable read",262144);return this.pm1_enable});b.register_write(45058,this,void 0,function(c){B("ACPI pm1_enable write: "+n(c),
344
+ 262144);this.pm1_enable=c});b.register_read(45060,this,function(){B("ACPI status read8",262144);return this.status&255},function(){B("ACPI status read",262144);return this.status});b.register_write(45060,this,void 0,function(c){B("ACPI status write: "+n(c),262144);this.status=c});b.register_read(45064,this,void 0,void 0,function(){return this.get_timer(H.microtick())&16777215});b.register_read(45024,this,function(){B("Read gpe#0",262144);return this.gpe[0]});b.register_read(45025,this,function(){B("Read gpe#1",
345
345
  262144);return this.gpe[1]});b.register_read(45026,this,function(){B("Read gpe#2",262144);return this.gpe[2]});b.register_read(45027,this,function(){B("Read gpe#3",262144);return this.gpe[3]});b.register_write(45024,this,function(c){B("Write gpe#0: "+n(c),262144);this.gpe[0]=c});b.register_write(45025,this,function(c){B("Write gpe#1: "+n(c),262144);this.gpe[1]=c});b.register_write(45026,this,function(c){B("Write gpe#2: "+n(c),262144);this.gpe[2]=c});b.register_write(45027,this,function(c){B("Write gpe#3: "+
346
- n(c),262144);this.gpe[3]=c})}xc.prototype.timer=function(a){a=this.get_timer(a);var b=0!==((a^this.last_timer)&8388608);this.pm1_enable&1&&b?(B("ACPI raise irq",262144),this.pm1_status|=1,this.cpu.device_raise_irq(9)):this.cpu.device_lower_irq(9);this.last_timer=a;return 100};xc.prototype.get_timer=function(a){a=Math.round(3579.545*a);a===this.timer_last_value?3579.545>this.timer_imprecision_offset&&this.timer_imprecision_offset++:(l(a>this.timer_last_value),this.timer_last_value+this.timer_imprecision_offset<=
347
- a?(this.timer_imprecision_offset=0,this.timer_last_value=a):B("Warning: Overshot pmtimer, waiting; current="+a+" last="+this.timer_last_value+" offset="+this.timer_imprecision_offset,262144));return this.timer_last_value+this.timer_imprecision_offset};xc.prototype.get_state=function(){var a=[];a[0]=this.status;a[1]=this.pm1_status;a[2]=this.pm1_enable;a[3]=this.gpe;return a};xc.prototype.set_state=function(a){this.status=a[0];this.pm1_status=a[1];this.pm1_enable=a[2];this.gpe=a[3]};function yc(a,
346
+ n(c),262144);this.gpe[3]=c})}yc.prototype.timer=function(a){a=this.get_timer(a);var b=0!==((a^this.last_timer)&8388608);this.pm1_enable&1&&b?(B("ACPI raise irq",262144),this.pm1_status|=1,this.cpu.device_raise_irq(9)):this.cpu.device_lower_irq(9);this.last_timer=a;return 100};yc.prototype.get_timer=function(a){a=Math.round(3579.545*a);a===this.timer_last_value?3579.545>this.timer_imprecision_offset&&this.timer_imprecision_offset++:(l(a>this.timer_last_value),this.timer_last_value+this.timer_imprecision_offset<=
347
+ a?(this.timer_imprecision_offset=0,this.timer_last_value=a):B("Warning: Overshot pmtimer, waiting; current="+a+" last="+this.timer_last_value+" offset="+this.timer_imprecision_offset,262144));return this.timer_last_value+this.timer_imprecision_offset};yc.prototype.get_state=function(){var a=[];a[0]=this.status;a[1]=this.pm1_status;a[2]=this.pm1_enable;a[3]=this.gpe;return a};yc.prototype.set_state=function(a){this.status=a[0];this.pm1_status=a[1];this.pm1_enable=a[2];this.gpe=a[3]};function zc(a,
348
348
  b,c){this.bus=c;this.cpu=a;this.ints=4;this.line_control=this.baud_rate=0;this.lsr=96;this.ier=this.fifo_control=0;this.iir=1;this.irq=this.scratch_register=this.modem_status=this.modem_control=0;this.input=[];this.current_line="";switch(b){case 1016:this.com=0;this.irq=4;break;case 760:this.com=1;this.irq=3;break;case 1E3:this.com=2;this.irq=4;break;case 744:this.irq=this.com=3;break;default:B("Invalid serial port: "+n(b),16384),this.com=0,this.irq=4}this.bus.register("serial"+this.com+"-input",
349
349
  function(d){this.data_received(d)},this);this.bus.register("serial"+this.com+"-modem-status-input",function(d){this.set_modem_status(d)},this);this.bus.register("serial"+this.com+"-carrier-detect-input",function(d){this.set_modem_status(d?this.modem_status|136:this.modem_status&-137)},this);this.bus.register("serial"+this.com+"-ring-indicator-input",function(d){this.set_modem_status(d?this.modem_status|68:this.modem_status&-69)},this);this.bus.register("serial"+this.com+"-data-set-ready-input",function(d){this.set_modem_status(d?
350
350
  this.modem_status|34:this.modem_status&-35)},this);this.bus.register("serial"+this.com+"-clear-to-send-input",function(d){this.set_modem_status(d?this.modem_status|17:this.modem_status&-18)},this);a=a.io;a.register_write(b,this,function(d){this.write_data(d)},function(d){this.write_data(d&255);this.write_data(d>>8)});a.register_write(b|1,this,function(d){this.line_control&128?(this.baud_rate=this.baud_rate&255|d<<8,B("baud rate: "+n(this.baud_rate),16384)):(0===(this.ier&2)&&d&2&&this.ThrowInterrupt(2),
351
351
  this.ier=d&15,B("interrupt enable: "+n(d),16384),this.CheckInterrupt())});a.register_read(b,this,function(){if(this.line_control&128)return this.baud_rate&255;let d=0;0===this.input.length?B("Read input empty",16384):(d=this.input.shift(),B("Read input: "+n(d),16384));0===this.input.length&&(this.lsr&=-2,this.ClearInterrupt(12),this.ClearInterrupt(4));return d});a.register_read(b|1,this,function(){return this.line_control&128?this.baud_rate>>8:this.ier&15});a.register_read(b|2,this,function(){var d=
352
352
  this.iir&15;B("read interrupt identification: "+n(this.iir),16384);2===this.iir&&this.ClearInterrupt(2);this.fifo_control&1&&(d|=192);return d});a.register_write(b|2,this,function(d){B("fifo control: "+n(d),16384);this.fifo_control=d});a.register_read(b|3,this,function(){B("read line control: "+n(this.line_control),16384);return this.line_control});a.register_write(b|3,this,function(d){B("line control: "+n(d),16384);this.line_control=d});a.register_read(b|4,this,function(){return this.modem_control});
353
353
  a.register_write(b|4,this,function(d){B("modem control: "+n(d),16384);this.modem_control=d});a.register_read(b|5,this,function(){B("read line status: "+n(this.lsr),16384);return this.lsr});a.register_write(b|5,this,function(){B("Factory test write",16384)});a.register_read(b|6,this,function(){B("read modem status: "+n(this.modem_status),16384);return this.modem_status&=240});a.register_write(b|6,this,function(d){B("write modem status: "+n(d),16384);this.set_modem_status(d)});a.register_read(b|7,this,
354
- function(){return this.scratch_register});a.register_write(b|7,this,function(d){this.scratch_register=d})}yc.prototype.get_state=function(){var a=[];a[0]=this.ints;a[1]=this.baud_rate;a[2]=this.line_control;a[3]=this.lsr;a[4]=this.fifo_control;a[5]=this.ier;a[6]=this.iir;a[7]=this.modem_control;a[8]=this.modem_status;a[9]=this.scratch_register;a[10]=this.irq;return a};yc.prototype.set_state=function(a){this.ints=a[0];this.baud_rate=a[1];this.line_control=a[2];this.lsr=a[3];this.fifo_control=a[4];
355
- this.ier=a[5];this.iir=a[6];this.modem_control=a[7];this.modem_status=a[8];this.scratch_register=a[9];this.irq=a[10]};yc.prototype.CheckInterrupt=function(){this.ints&4096&&this.ier&1?(this.iir=12,this.cpu.device_raise_irq(this.irq)):this.ints&16&&this.ier&1?(this.iir=4,this.cpu.device_raise_irq(this.irq)):this.ints&4&&this.ier&2?(this.iir=2,this.cpu.device_raise_irq(this.irq)):this.ints&1&&this.ier&8?(this.iir=0,this.cpu.device_raise_irq(this.irq)):(this.iir=1,this.cpu.device_lower_irq(this.irq))};
356
- yc.prototype.ThrowInterrupt=function(a){this.ints|=1<<a;this.CheckInterrupt()};yc.prototype.ClearInterrupt=function(a){this.ints&=~(1<<a);this.CheckInterrupt()};yc.prototype.data_received=function(a){B("input: "+n(a),16384);this.input.push(a);this.lsr|=1;this.fifo_control&1?this.ThrowInterrupt(12):this.ThrowInterrupt(4)};yc.prototype.write_data=function(a){this.line_control&128?this.baud_rate=this.baud_rate&-256|a:(B("data: "+n(a),16384),this.ThrowInterrupt(2),this.bus.send("serial"+this.com+"-output-byte",
357
- a),a=String.fromCharCode(a),this.current_line+=a,"\n"===a&&(a=this.current_line.trimRight().replace(/[\x00-\x08\x0b-\x1f\x7f\x80-\xff]/g,""),B("SERIAL: "+a),this.current_line=""))};yc.prototype.set_modem_status=function(a){B("modem status: "+n(a),16384);const b=this.modem_status&15;let c=(this.modem_status^a)>>4;this.modem_status=a;this.modem_status=this.modem_status|c|b};function zc(a){this.pci_addr=new Uint8Array(4);this.pci_value=new Uint8Array(4);this.pci_response=new Uint8Array(4);this.pci_status=
354
+ function(){return this.scratch_register});a.register_write(b|7,this,function(d){this.scratch_register=d})}zc.prototype.get_state=function(){var a=[];a[0]=this.ints;a[1]=this.baud_rate;a[2]=this.line_control;a[3]=this.lsr;a[4]=this.fifo_control;a[5]=this.ier;a[6]=this.iir;a[7]=this.modem_control;a[8]=this.modem_status;a[9]=this.scratch_register;a[10]=this.irq;return a};zc.prototype.set_state=function(a){this.ints=a[0];this.baud_rate=a[1];this.line_control=a[2];this.lsr=a[3];this.fifo_control=a[4];
355
+ this.ier=a[5];this.iir=a[6];this.modem_control=a[7];this.modem_status=a[8];this.scratch_register=a[9];this.irq=a[10]};zc.prototype.CheckInterrupt=function(){this.ints&4096&&this.ier&1?(this.iir=12,this.cpu.device_raise_irq(this.irq)):this.ints&16&&this.ier&1?(this.iir=4,this.cpu.device_raise_irq(this.irq)):this.ints&4&&this.ier&2?(this.iir=2,this.cpu.device_raise_irq(this.irq)):this.ints&1&&this.ier&8?(this.iir=0,this.cpu.device_raise_irq(this.irq)):(this.iir=1,this.cpu.device_lower_irq(this.irq))};
356
+ zc.prototype.ThrowInterrupt=function(a){this.ints|=1<<a;this.CheckInterrupt()};zc.prototype.ClearInterrupt=function(a){this.ints&=~(1<<a);this.CheckInterrupt()};zc.prototype.data_received=function(a){B("input: "+n(a),16384);this.input.push(a);this.lsr|=1;this.fifo_control&1?this.ThrowInterrupt(12):this.ThrowInterrupt(4)};zc.prototype.write_data=function(a){this.line_control&128?this.baud_rate=this.baud_rate&-256|a:(B("data: "+n(a),16384),this.ThrowInterrupt(2),this.bus.send("serial"+this.com+"-output-byte",
357
+ a),a=String.fromCharCode(a),this.current_line+=a,"\n"===a&&(a=this.current_line.trimRight().replace(/[\x00-\x08\x0b-\x1f\x7f\x80-\xff]/g,""),B("SERIAL: "+a),this.current_line=""))};zc.prototype.set_modem_status=function(a){B("modem status: "+n(a),16384);const b=this.modem_status&15;let c=(this.modem_status^a)>>4;this.modem_status=a;this.modem_status=this.modem_status|c|b};function Ac(a){this.pci_addr=new Uint8Array(4);this.pci_value=new Uint8Array(4);this.pci_response=new Uint8Array(4);this.pci_status=
358
358
  new Uint8Array(4);this.pci_addr32=new Int32Array(this.pci_addr.buffer);this.pci_value32=new Int32Array(this.pci_value.buffer);this.pci_response32=new Int32Array(this.pci_response.buffer);this.pci_status32=new Int32Array(this.pci_status.buffer);this.device_spaces=[];this.devices=[];this.cpu=a;for(var b=0;256>b;b++)this.device_spaces[b]=void 0,this.devices[b]=void 0;this.io=a.io;a.io.register_write(3324,this,function(c){this.pci_write8(this.pci_addr32[0],c)},function(c){this.pci_write16(this.pci_addr32[0],
359
359
  c)},function(c){this.pci_write32(this.pci_addr32[0],c)});a.io.register_write(3325,this,function(c){this.pci_write8(this.pci_addr32[0]+1|0,c)});a.io.register_write(3326,this,function(c){this.pci_write8(this.pci_addr32[0]+2|0,c)},function(c){this.pci_write16(this.pci_addr32[0]+2|0,c)});a.io.register_write(3327,this,function(c){this.pci_write8(this.pci_addr32[0]+3|0,c)});a.io.register_read_consecutive(3324,this,function(){return this.pci_response[0]},function(){return this.pci_response[1]},function(){return this.pci_response[2]},
360
360
  function(){return this.pci_response[3]});a.io.register_read_consecutive(3320,this,function(){return this.pci_status[0]},function(){return this.pci_status[1]},function(){return this.pci_status[2]},function(){return this.pci_status[3]});a.io.register_write_consecutive(3320,this,function(c){this.pci_addr[0]=c&252},function(c){2===(this.pci_addr[1]&6)&&6===(c&6)?(B("CPU reboot via PCI"),a.reboot_internal()):this.pci_addr[1]=c},function(c){this.pci_addr[2]=c},function(c){this.pci_addr[3]=c;this.pci_query()});
361
361
  this.register_device({pci_id:0,pci_space:[134,128,55,18,0,0,0,0,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0],pci_bars:[],name:"82441FX PMC"});this.isa_bridge={pci_id:8,pci_space:[134,128,0,112,7,0,0,2,0,0,1,6,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],pci_bars:[],name:"82371SB PIIX3 ISA"};this.isa_bridge_space=
362
- this.register_device(this.isa_bridge);this.isa_bridge_space8=new Uint8Array(this.isa_bridge_space.buffer)}zc.prototype.get_state=function(){for(var a=[],b=0;256>b;b++)a[b]=this.device_spaces[b];a[256]=this.pci_addr;a[257]=this.pci_value;a[258]=this.pci_response;a[259]=this.pci_status;return a};zc.prototype.set_state=function(a){for(var b=0;256>b;b++){var c=this.devices[b],d=a[b];if(c&&d){for(var e=0;e<c.pci_bars.length;e++){var f=d[4+e];if(f&1){var g=c.pci_bars[e];this.set_io_bars(g,g.original_bar&
363
- 65534,f&65534)}}this.device_spaces[b].set(d)}else c&&B("Warning: While restoring PCI device: Device exists in current configuration but not in snapshot ("+c.name+")"),d&&B("Warning: While restoring PCI device: Device doesn't exist in current configuration but does in snapshot (device "+n(b,2)+")")}this.pci_addr.set(a[256]);this.pci_value.set(a[257]);this.pci_response.set(a[258]);this.pci_status.set(a[259])};zc.prototype.pci_query=function(){var a=this.pci_addr[2]<<8|this.pci_addr[1],b=this.pci_addr[0]&
364
- 252,c=a>>3&31;var d="query enabled="+(this.pci_addr[3]>>7)+(" bdf="+n(a,4));d+=" dev="+n(c,2);d+=" addr="+n(b,2);c=this.device_spaces[a];void 0!==c?(this.pci_status32[0]=-2147483648,this.pci_response32[0]=b<c.byteLength?c[b>>2]:0,d+=" "+n(this.pci_addr32[0]>>>0,8)+" -> "+n(this.pci_response32[0]>>>0,8),b>=c.byteLength&&(d+=" (undef)"),d+=" ("+this.devices[a].name+")",B(d,2048)):(this.pci_response32[0]=-1,this.pci_status32[0]=0)};zc.prototype.pci_write8=function(a,b){var c=a>>8&65535;a&=255;var d=
365
- new Uint8Array(this.device_spaces[c].buffer),e=this.devices[c];d&&(l(!(16<=a&&44>a||48<=a&&52>a),"PCI: Expected 32-bit write, got 8-bit (addr: "+n(a)+")"),B("PCI write8 dev="+n(c>>3,2)+" ("+e.name+") addr="+n(a,4)+" value="+n(b,2),2048),d[a]=b)};zc.prototype.pci_write16=function(a,b){l(0===(a&1));var c=a>>8&65535;a&=255;var d=new Uint16Array(this.device_spaces[c].buffer),e=this.devices[c];d&&(16<=a&&44>a?B("Warning: PCI: Expected 32-bit write, got 16-bit (addr: "+n(a)+")"):(l(!(48<=a&&52>a),"PCI: Expected 32-bit write, got 16-bit (addr: "+
366
- n(a)+")"),B("PCI writ16 dev="+n(c>>3,2)+" ("+e.name+") addr="+n(a,4)+" value="+n(b,4),2048),d[a>>>1]=b))};zc.prototype.pci_write32=function(a,b){l(0===(a&3));var c=a>>8&65535;a&=255;var d=this.device_spaces[c],e=this.devices[c];if(d)if(16<=a&&40>a){var f=a-16>>2,g=e.pci_bars[f];B("BAR"+f+" exists="+(g?"y":"n")+" changed from "+n(d[a>>2])+" to "+n(b>>>0)+" dev="+n(c>>3,2)+" ("+e.name+") ",2048);g?(l(!(g.size&g.size-1),"bar size should be power of 2"),c=a>>2,e=d[c]&1,-1===(b|3|g.size-1)?(b=~(g.size-
362
+ this.register_device(this.isa_bridge);this.isa_bridge_space8=new Uint8Array(this.isa_bridge_space.buffer)}Ac.prototype.get_state=function(){for(var a=[],b=0;256>b;b++)a[b]=this.device_spaces[b];a[256]=this.pci_addr;a[257]=this.pci_value;a[258]=this.pci_response;a[259]=this.pci_status;return a};Ac.prototype.set_state=function(a){for(var b=0;256>b;b++){var c=this.devices[b],d=a[b];if(c&&d){for(var e=0;e<c.pci_bars.length;e++){var f=d[4+e];if(f&1){var g=c.pci_bars[e];this.set_io_bars(g,g.original_bar&
363
+ 65534,f&65534)}}this.device_spaces[b].set(d)}else c&&B("Warning: While restoring PCI device: Device exists in current configuration but not in snapshot ("+c.name+")"),d&&B("Warning: While restoring PCI device: Device doesn't exist in current configuration but does in snapshot (device "+n(b,2)+")")}this.pci_addr.set(a[256]);this.pci_value.set(a[257]);this.pci_response.set(a[258]);this.pci_status.set(a[259])};Ac.prototype.pci_query=function(){var a=this.pci_addr[2]<<8|this.pci_addr[1],b=this.pci_addr[0]&
364
+ 252,c=a>>3&31;var d="query enabled="+(this.pci_addr[3]>>7)+(" bdf="+n(a,4));d+=" dev="+n(c,2);d+=" addr="+n(b,2);c=this.device_spaces[a];void 0!==c?(this.pci_status32[0]=-2147483648,this.pci_response32[0]=b<c.byteLength?c[b>>2]:0,d+=" "+n(this.pci_addr32[0]>>>0,8)+" -> "+n(this.pci_response32[0]>>>0,8),b>=c.byteLength&&(d+=" (undef)"),d+=" ("+this.devices[a].name+")",B(d,2048)):(this.pci_response32[0]=-1,this.pci_status32[0]=0)};Ac.prototype.pci_write8=function(a,b){var c=a>>8&65535;a&=255;var d=
365
+ new Uint8Array(this.device_spaces[c].buffer),e=this.devices[c];d&&(l(!(16<=a&&44>a||48<=a&&52>a),"PCI: Expected 32-bit write, got 8-bit (addr: "+n(a)+")"),B("PCI write8 dev="+n(c>>3,2)+" ("+e.name+") addr="+n(a,4)+" value="+n(b,2),2048),d[a]=b)};Ac.prototype.pci_write16=function(a,b){l(0===(a&1));var c=a>>8&65535;a&=255;var d=new Uint16Array(this.device_spaces[c].buffer),e=this.devices[c];d&&(16<=a&&44>a?B("Warning: PCI: Expected 32-bit write, got 16-bit (addr: "+n(a)+")"):(l(!(48<=a&&52>a),"PCI: Expected 32-bit write, got 16-bit (addr: "+
366
+ n(a)+")"),B("PCI writ16 dev="+n(c>>3,2)+" ("+e.name+") addr="+n(a,4)+" value="+n(b,4),2048),d[a>>>1]=b))};Ac.prototype.pci_write32=function(a,b){l(0===(a&3));var c=a>>8&65535;a&=255;var d=this.device_spaces[c],e=this.devices[c];if(d)if(16<=a&&40>a){var f=a-16>>2,g=e.pci_bars[f];B("BAR"+f+" exists="+(g?"y":"n")+" changed from "+n(d[a>>2])+" to "+n(b>>>0)+" dev="+n(c>>3,2)+" ("+e.name+") ",2048);g?(l(!(g.size&g.size-1),"bar size should be power of 2"),c=a>>2,e=d[c]&1,-1===(b|3|g.size-1)?(b=~(g.size-
367
367
  1)|e,0===e&&(d[c]=b)):0===e&&(f=g.original_bar,(b&-16)!==(f&-16)&&B("Warning: Changing memory bar not supported, ignored",2048),d[c]=f),1===e&&(l(1===e),e=d[c]&65534,f=b&65534,B("io bar changed from "+n(e>>>0,8)+" to "+n(f>>>0,8)+" size="+g.size,2048),this.set_io_bars(g,e,f),d[c]=b|1)):d[a>>2]=0;B("BAR effective value: "+n(d[a>>2]>>>0),2048)}else 48===a?(B("PCI write rom address dev="+n(c>>3,2)+" ("+e.name+") value="+n(b>>>0,8),2048),d[a>>2]=e.pci_rom_size?-1===(b|2047)?-e.pci_rom_size|0:e.pci_rom_address|
368
- 0:0):4===a?B("PCI write dev="+n(c>>3,2)+" ("+e.name+") addr="+n(a,4)+" value="+n(b>>>0,8),2048):(B("PCI write dev="+n(c>>3,2)+" ("+e.name+") addr="+n(a,4)+" value="+n(b>>>0,8),2048),d[a>>>2]=b)};zc.prototype.register_device=function(a){l(void 0!==a.pci_id);l(void 0!==a.pci_space);l(void 0!==a.pci_bars);var b=a.pci_id;B("PCI register bdf="+n(b)+" ("+a.name+")",2048);this.devices[b]&&B("warning: overwriting device "+this.devices[b].name+" with "+a.name,2048);l(64<=a.pci_space.length);l(b<this.devices.length);
369
- var c=new Int32Array(64);c.set(new Int32Array((new Uint8Array(a.pci_space)).buffer));this.device_spaces[b]=c;this.devices[b]=a;b=c.slice(4,10);for(var d=0;d<a.pci_bars.length;d++){var e=a.pci_bars[d];if(e){var f=b[d],g=f&1;B("device "+a.name+" register bar of size "+e.size+" at "+n(f),2048);e.original_bar=f;e.entries=[];if(0!==g)for(l(1===g),f&=-2,g=0;g<e.size;g++)e.entries[g]=this.io.ports[f+g]}}return c};zc.prototype.set_io_bars=function(a,b,c){var d=a.size;B("Move io bars: from="+n(b)+" to="+n(c)+
370
- " count="+d,2048);for(var e=this.io.ports,f=0;f<d;f++){4096<=b+f&&(e[b+f]=this.io.create_empty_entry());var g=a.entries[f],k=e[c+f];l(g&&k);4096<=c+f&&(e[c+f]=g)}};zc.prototype.raise_irq=function(a){var b=this.device_spaces[a];l(b);this.cpu.device_raise_irq(this.isa_bridge_space8[96+((b[15]>>8&255)-1+((a>>3)-1&255)&3)])};zc.prototype.lower_irq=function(a){var b=this.device_spaces[a];l(b);this.cpu.device_lower_irq(this.isa_bridge_space8[96+((b[15]>>8&255)+(a>>3&255)-2&3)])};function Ac(a,b,c){a[0]===
368
+ 0:0):4===a?B("PCI write dev="+n(c>>3,2)+" ("+e.name+") addr="+n(a,4)+" value="+n(b>>>0,8),2048):(B("PCI write dev="+n(c>>3,2)+" ("+e.name+") addr="+n(a,4)+" value="+n(b>>>0,8),2048),d[a>>>2]=b)};Ac.prototype.register_device=function(a){l(void 0!==a.pci_id);l(void 0!==a.pci_space);l(void 0!==a.pci_bars);var b=a.pci_id;B("PCI register bdf="+n(b)+" ("+a.name+")",2048);this.devices[b]&&B("warning: overwriting device "+this.devices[b].name+" with "+a.name,2048);l(64<=a.pci_space.length);l(b<this.devices.length);
369
+ var c=new Int32Array(64);c.set(new Int32Array((new Uint8Array(a.pci_space)).buffer));this.device_spaces[b]=c;this.devices[b]=a;b=c.slice(4,10);for(var d=0;d<a.pci_bars.length;d++){var e=a.pci_bars[d];if(e){var f=b[d],g=f&1;B("device "+a.name+" register bar of size "+e.size+" at "+n(f),2048);e.original_bar=f;e.entries=[];if(0!==g)for(l(1===g),f&=-2,g=0;g<e.size;g++)e.entries[g]=this.io.ports[f+g]}}return c};Ac.prototype.set_io_bars=function(a,b,c){var d=a.size;B("Move io bars: from="+n(b)+" to="+n(c)+
370
+ " count="+d,2048);for(var e=this.io.ports,f=0;f<d;f++){4096<=b+f&&(e[b+f]=this.io.create_empty_entry());var g=a.entries[f],k=e[c+f];l(g&&k);4096<=c+f&&(e[c+f]=g)}};Ac.prototype.raise_irq=function(a){var b=this.device_spaces[a];l(b);this.cpu.device_raise_irq(this.isa_bridge_space8[96+((b[15]>>8&255)-1+((a>>3)-1&255)&3)])};Ac.prototype.lower_irq=function(a){var b=this.device_spaces[a];l(b);this.cpu.device_lower_irq(this.isa_bridge_space8[96+((b[15]>>8&255)+(a>>3&255)-2&3)])};function Bc(a,b,c){a[0]===
371
371
  b[0]&&a[1]===b[1]&&a[2]===b[2]&&a[3]===b[3]&&a[4]===b[4]&&a[5]===b[5]&&(B("Replace mac in eth destination field",1048576),a[0]=c[0],a[1]=c[1],a[2]=c[2],a[3]=c[3],a[4]=c[4],a[5]=c[5]);a[6]===b[0]&&a[7]===b[1]&&a[8]===b[2]&&a[9]===b[3]&&a[10]===b[4]&&a[11]===b[5]&&(B("Replace mac in eth source field",1048576),a[6]=c[0],a[7]=c[1],a[8]=c[2],a[9]=c[3],a[10]=c[4],a[11]=c[5]);var d=a[12]<<8|a[13];if(2048===d)if(a=a.subarray(14),d=a[0]>>4,4!==d)B("Expected ipv4.version==4 but got: "+d,1048576);else{if(l(5===
372
372
  (a[0]&15),"TODO: ihl!=5"),17===a[9]){a=a.subarray(20);d=a[0]<<8|a[1];var e=a[2]<<8|a[3];B("udp srcport="+d+" dstport="+e+" checksum="+n(a[6]<<8|a[7],4),1048576);if(67===d||67===e)if(d=a.subarray(8),e=d[236]<<24|d[237]<<16|d[238]<<8|d[239],1669485411!==e)B("dhcp packet didn't match magic: "+n(e,8));else for(d[28]===b[0]&&d[29]===b[1]&&d[30]===b[2]&&d[31]===b[3]&&d[32]===b[4]&&d[33]===b[5]&&(B("Replace mac in dhcp.chaddr",1048576),d[28]=c[0],d[29]=c[1],d[30]=c[2],d[31]=c[3],d[32]=c[4],d[33]=c[5],a[6]=
373
- a[7]=0),e=240;e<d.length;){const f=d[e++];if(255===f)break;const g=d[e++];61===f&&1===d[e+0]&&d[e+1]===b[0]&&d[e+2]===b[1]&&d[e+3]===b[2]&&d[e+4]===b[3]&&d[e+5]===b[4]&&d[e+6]===b[5]&&(B("Replace mac in dhcp.clientidentifier",1048576),d[e+1]=c[0],d[e+2]=c[1],d[e+3]=c[2],d[e+4]=c[3],d[e+5]=c[4],d[e+6]=c[5],a[6]=a[7]=0);e+=g}}}else 2054===d&&(a=a.subarray(14),B("arp oper="+a[7]+" "+Bc(a.subarray(8,14))+" "+Bc(a.subarray(18,24)),1048576),a[8]===b[0]&&a[9]===b[1]&&a[10]===b[2]&&a[11]===b[3]&&a[12]===
374
- b[4]&&a[13]===b[5]&&(B("Replace mac in arp.sha",1048576),a[8]=c[0],a[9]=c[1],a[10]=c[2],a[11]=c[3],a[12]=c[4],a[13]=c[5]))}function Bc(a){return[a[0].toString(16).padStart(2,"0"),a[1].toString(16).padStart(2,"0"),a[2].toString(16).padStart(2,"0"),a[3].toString(16).padStart(2,"0"),a[4].toString(16).padStart(2,"0"),a[5].toString(16).padStart(2,"0")].join(":")}function Cc(a,b,c,d,e){this.cpu=a;this.pci=a.devices.pci;this.id=e||0;this.preserve_mac_from_state_image=c;this.mac_address_translation=d;this.bus=
373
+ a[7]=0),e=240;e<d.length;){const f=d[e++];if(255===f)break;const g=d[e++];61===f&&1===d[e+0]&&d[e+1]===b[0]&&d[e+2]===b[1]&&d[e+3]===b[2]&&d[e+4]===b[3]&&d[e+5]===b[4]&&d[e+6]===b[5]&&(B("Replace mac in dhcp.clientidentifier",1048576),d[e+1]=c[0],d[e+2]=c[1],d[e+3]=c[2],d[e+4]=c[3],d[e+5]=c[4],d[e+6]=c[5],a[6]=a[7]=0);e+=g}}}else 2054===d&&(a=a.subarray(14),B("arp oper="+a[7]+" "+Cc(a.subarray(8,14))+" "+Cc(a.subarray(18,24)),1048576),a[8]===b[0]&&a[9]===b[1]&&a[10]===b[2]&&a[11]===b[3]&&a[12]===
374
+ b[4]&&a[13]===b[5]&&(B("Replace mac in arp.sha",1048576),a[8]=c[0],a[9]=c[1],a[10]=c[2],a[11]=c[3],a[12]=c[4],a[13]=c[5]))}function Cc(a){return[a[0].toString(16).padStart(2,"0"),a[1].toString(16).padStart(2,"0"),a[2].toString(16).padStart(2,"0"),a[3].toString(16).padStart(2,"0"),a[4].toString(16).padStart(2,"0"),a[5].toString(16).padStart(2,"0")].join(":")}function Dc(a,b,c,d,e){this.cpu=a;this.pci=a.devices.pci;this.id=e||0;this.preserve_mac_from_state_image=c;this.mac_address_translation=d;this.bus=
375
375
  b;this.bus.register("net"+this.id+"-receive",function(f){this.receive(f)},this);this.port=768+256*this.id;this.name="ne2k";this.pci_space=[236,16,41,128,3,1,0,0,0,0,0,2,0,0,0,0,this.port&255|1,this.port>>8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,26,0,17,0,0,184,254,0,0,0,0,0,0,0,0,0,1,0,0];this.pci_id=(0===this.id?5:7+this.id)<<3;this.pci_bars=[{size:32}];this.imr=this.isr=0;this.cr=1;this.tpsr=this.tcnt=this.rcnt=this.dcfg=0;this.memory=new Uint8Array(32768);this.txcr=this.rxcr=0;
376
- this.tsr=1;this.mac=new Uint8Array([0,34,21,255*Math.random()|0,255*Math.random()|0,255*Math.random()|0]);this.bus.send("net"+this.id+"-mac",Bc(this.mac));this.mar=Uint8Array.of(255,255,255,255,255,255,255,255);this.mac_address_in_state=null;for(b=0;6>b;b++)this.memory[b<<1]=this.memory[b<<1|1]=this.mac[b];this.memory[28]=this.memory[29]=87;this.memory[30]=this.memory[31]=87;B("Mac: "+Bc(this.mac),1048576);this.rsar=0;this.pstart=64;this.pstop=128;this.boundary=this.curpg=76;b=a.io;b.register_read(this.port|
377
- 0,this,function(){B("Read cmd",1048576);return this.cr},function(){B("Read16 cmd",1048576);return this.cr});b.register_write(this.port|0,this,function(f){this.cr=f;B("Write command: "+n(f,2)+" newpg="+(this.cr>>6)+" txcr="+n(this.txcr,2),1048576);this.cr&1||(f&24&&0===this.rcnt&&this.do_interrupt(64),f&4&&(f=this.tpsr<<8,f=this.memory.subarray(f,f+this.tcnt),this.mac_address_in_state&&(f=new Uint8Array(f),Ac(f,this.mac_address_in_state,this.mac)),this.bus.send("net"+this.id+"-send",f),this.bus.send("eth-transmit-end",
376
+ this.tsr=1;this.mac=new Uint8Array([0,34,21,255*Math.random()|0,255*Math.random()|0,255*Math.random()|0]);this.bus.send("net"+this.id+"-mac",Cc(this.mac));this.mar=Uint8Array.of(255,255,255,255,255,255,255,255);this.mac_address_in_state=null;for(b=0;6>b;b++)this.memory[b<<1]=this.memory[b<<1|1]=this.mac[b];this.memory[28]=this.memory[29]=87;this.memory[30]=this.memory[31]=87;B("Mac: "+Cc(this.mac),1048576);this.rsar=0;this.pstart=64;this.pstop=128;this.boundary=this.curpg=76;b=a.io;b.register_read(this.port|
377
+ 0,this,function(){B("Read cmd",1048576);return this.cr},function(){B("Read16 cmd",1048576);return this.cr});b.register_write(this.port|0,this,function(f){this.cr=f;B("Write command: "+n(f,2)+" newpg="+(this.cr>>6)+" txcr="+n(this.txcr,2),1048576);this.cr&1||(f&24&&0===this.rcnt&&this.do_interrupt(64),f&4&&(f=this.tpsr<<8,f=this.memory.subarray(f,f+this.tcnt),this.mac_address_in_state&&(f=new Uint8Array(f),Bc(f,this.mac_address_in_state,this.mac)),this.bus.send("net"+this.id+"-send",f),this.bus.send("eth-transmit-end",
378
378
  [f.length]),this.cr&=-5,this.do_interrupt(2),B("Command: Transfer. length="+n(f.byteLength),1048576)))});b.register_read(this.port|13,this,function(){var f=this.get_page();if(1===f)return B("Read mar5",1048576),this.mar[5];B("Read counter0 pg="+f,1048576);return 0});b.register_read(this.port|14,this,function(){var f=this.get_page();if(1===f)return B("Read mar6",1048576),this.mar[6];B("Read8 counter1 pg="+f,1048576);return 0},function(){B("Read16 counter1 pg="+this.get_page(),1048576);return 0});b.register_read(this.port|
379
379
  15,this,function(){var f=this.get_page();if(1===f)return B("Read mar7",1048576),this.mar[7];B("Read counter2 pg="+f,1048576);return 0});b.register_read(this.port|31,this,function(){this.get_page();B("Read reset",1048576);this.do_interrupt(128);return 0});b.register_write(this.port|31,this,function(f){this.get_page();B("Write reset: "+n(f,2),1048576)});b.register_read(this.port|1,this,function(){var f=this.get_page();if(0===f)return this.pstart;if(1===f)return B("Read pg1/01 (mac[0])",1048576),this.mac[0];
380
380
  if(2===f)return this.pstart;B("Read pg"+f+"/01");l(!1);return 0});b.register_write(this.port|1,this,function(f){var g=this.get_page();0===g?(B("start page: "+n(f,2),1048576),this.pstart=f):1===g?(B("mac[0] = "+n(f),1048576),this.mac[0]=f):3===g?B("Unimplemented: Write pg3/01 (9346CR): "+n(f),1048576):(B("Write pg"+g+"/01: "+n(f),1048576),l(!1))});b.register_read(this.port|2,this,function(){var f=this.get_page();if(0===f)return this.pstop;if(1===f)return B("Read pg1/02 (mac[1])",1048576),this.mac[1];
@@ -389,45 +389,45 @@ this.boundary=f):1===g?(B("mac[2] = "+n(f),1048576),this.mac[2]=f):(B("Write pg"
389
389
  n(f),1048576),l(!1))});b.register_read(this.port|5,this,function(){var f=this.get_page();if(0===f)return B("Unimplemented: Read pg0/05 (NCR: Number of Collisions Register)",1048576),0;if(1===f)return B("Read pg1/05 (mac[4])",1048576),this.mac[4];3===f?B("Unimplemented: Read pg3/05 (CONFIG2)",1048576):(B("Read pg"+f+"/05",1048576),l(!1));return 0});b.register_write(this.port|5,this,function(f){var g=this.get_page();0===g?(B("Write tcnt low: "+n(f,2),1048576),this.tcnt=this.tcnt&-256|f):1===g?(B("mac[4] = "+
390
390
  n(f),1048576),this.mac[4]=f):3===g?B("Unimplemented: Write pg3/05 (CONFIG2): "+n(f),1048576):(B("Write pg"+g+"/05: "+n(f),1048576),l(!1))});b.register_read(this.port|6,this,function(){var f=this.get_page();if(0===f)return l(!1,"TODO"),0;if(1===f)return B("Read pg1/06 (mac[5])",1048576),this.mac[5];3===f?B("Unimplemented: Read pg3/06 (CONFIG3)",1048576):(B("Read pg"+f+"/06",1048576),l(!1));return 0});b.register_write(this.port|6,this,function(f){var g=this.get_page();0===g?(B("Write tcnt high: "+n(f,
391
391
  2),1048576),this.tcnt=this.tcnt&255|f<<8):1===g?(B("mac[5] = "+n(f),1048576),this.mac[5]=f):3===g?B("Unimplemented: Write pg3/06 (CONFIG3): "+n(f),1048576):(B("Write pg"+g+"/06: "+n(f),1048576),l(!1))});b.register_read(this.port|12,this,function(){var f=this.get_page();if(0===f)return 9;if(1===f)return B("Read mar4",1048576),this.mar[4];B("Unimplemented: Read pg"+f+"/0c",1048576);l(!1);return 0});b.register_write(this.port|12,this,function(f){var g=this.get_page();0===g?(B("RX configuration reg write: "+
392
- n(f,2),1048576),this.rxcr=f):B("Unimplemented: Write pg"+g+"/0c: "+n(f),1048576)});b.register_read(this.port|16,this,this.data_port_read8,this.data_port_read16,this.data_port_read32);b.register_write(this.port|16,this,this.data_port_write16,this.data_port_write16,this.data_port_write32);a.devices.pci.register_device(this)}Cc.prototype.get_state=function(){var a=[];a[0]=this.isr;a[1]=this.imr;a[2]=this.cr;a[3]=this.dcfg;a[4]=this.rcnt;a[5]=this.tcnt;a[6]=this.tpsr;a[7]=this.rsar;a[8]=this.pstart;a[9]=
393
- this.curpg;a[10]=this.boundary;a[11]=this.pstop;a[12]=this.rxcr;a[13]=this.txcr;a[14]=this.tsr;a[15]=this.mac;a[16]=this.memory;return a};Cc.prototype.set_state=function(a){this.isr=a[0];this.imr=a[1];this.cr=a[2];this.dcfg=a[3];this.rcnt=a[4];this.tcnt=a[5];this.tpsr=a[6];this.rsar=a[7];this.pstart=a[8];this.curpg=a[9];this.boundary=a[10];this.pstop=a[11];this.rxcr=a[12];this.txcr=a[13];this.tsr=a[14];this.preserve_mac_from_state_image?(this.mac=a[15],this.memory=a[16]):this.mac_address_translation&&
394
- (this.mac_address_in_state=a[15],this.memory=a[16],B("Using mac address translation guest_os_mac="+Bc(this.mac_address_in_state)+" real_mac="+Bc(this.mac),1048576));this.bus.send("net"+this.id+"-mac",Bc(this.mac))};Cc.prototype.do_interrupt=function(a){B("Do interrupt "+n(a,2),1048576);this.isr|=a;this.update_irq()};Cc.prototype.update_irq=function(){this.imr&this.isr?this.pci.raise_irq(this.pci_id):this.pci.lower_irq(this.pci_id)};Cc.prototype.data_port_write=function(a){if(16>=this.rsar||16384<=
395
- this.rsar&&32768>this.rsar)this.memory[this.rsar]=a;this.rsar++;this.rcnt--;this.rsar>=this.pstop<<8&&(this.rsar+=this.pstart-this.pstop<<8);0===this.rcnt&&this.do_interrupt(64)};Cc.prototype.data_port_write16=function(a){this.data_port_write(a);this.dcfg&1&&this.data_port_write(a>>8)};Cc.prototype.data_port_write32=function(a){this.data_port_write(a);this.data_port_write(a>>8);this.data_port_write(a>>16);this.data_port_write(a>>24)};Cc.prototype.data_port_read=function(){let a=0;32768>this.rsar&&
396
- (a=this.memory[this.rsar]);this.rsar++;this.rcnt--;this.rsar>=this.pstop<<8&&(this.rsar+=this.pstart-this.pstop<<8);0===this.rcnt&&this.do_interrupt(64);return a};Cc.prototype.data_port_read8=function(){return this.data_port_read16()&255};Cc.prototype.data_port_read16=function(){return this.dcfg&1?this.data_port_read()|this.data_port_read()<<8:this.data_port_read()};Cc.prototype.data_port_read32=function(){return this.data_port_read()|this.data_port_read()<<8|this.data_port_read()<<16|this.data_port_read()<<
397
- 24};Cc.prototype.receive=function(a){if(!(this.cr&1)&&(this.bus.send("eth-receive-end",[a.length]),this.rxcr&16||this.rxcr&4&&255===a[0]&&255===a[1]&&255===a[2]&&255===a[3]&&255===a[4]&&255===a[5]||!(this.rxcr&8&&1===(a[0]&1)||a[0]!==this.mac[0]||a[1]!==this.mac[1]||a[2]!==this.mac[2]||a[3]!==this.mac[3]||a[4]!==this.mac[4]||a[5]!==this.mac[5]))){this.mac_address_in_state&&(a=new Uint8Array(a),Ac(a,this.mac,this.mac_address_in_state));var b=this.curpg<<8,c=Math.max(60,a.length)+4,d=b+4,e=this.curpg+
392
+ n(f,2),1048576),this.rxcr=f):B("Unimplemented: Write pg"+g+"/0c: "+n(f),1048576)});b.register_read(this.port|16,this,this.data_port_read8,this.data_port_read16,this.data_port_read32);b.register_write(this.port|16,this,this.data_port_write16,this.data_port_write16,this.data_port_write32);a.devices.pci.register_device(this)}Dc.prototype.get_state=function(){var a=[];a[0]=this.isr;a[1]=this.imr;a[2]=this.cr;a[3]=this.dcfg;a[4]=this.rcnt;a[5]=this.tcnt;a[6]=this.tpsr;a[7]=this.rsar;a[8]=this.pstart;a[9]=
393
+ this.curpg;a[10]=this.boundary;a[11]=this.pstop;a[12]=this.rxcr;a[13]=this.txcr;a[14]=this.tsr;a[15]=this.mac;a[16]=this.memory;return a};Dc.prototype.set_state=function(a){this.isr=a[0];this.imr=a[1];this.cr=a[2];this.dcfg=a[3];this.rcnt=a[4];this.tcnt=a[5];this.tpsr=a[6];this.rsar=a[7];this.pstart=a[8];this.curpg=a[9];this.boundary=a[10];this.pstop=a[11];this.rxcr=a[12];this.txcr=a[13];this.tsr=a[14];this.preserve_mac_from_state_image?(this.mac=a[15],this.memory=a[16]):this.mac_address_translation&&
394
+ (this.mac_address_in_state=a[15],this.memory=a[16],B("Using mac address translation guest_os_mac="+Cc(this.mac_address_in_state)+" real_mac="+Cc(this.mac),1048576));this.bus.send("net"+this.id+"-mac",Cc(this.mac))};Dc.prototype.do_interrupt=function(a){B("Do interrupt "+n(a,2),1048576);this.isr|=a;this.update_irq()};Dc.prototype.update_irq=function(){this.imr&this.isr?this.pci.raise_irq(this.pci_id):this.pci.lower_irq(this.pci_id)};Dc.prototype.data_port_write=function(a){if(16>=this.rsar||16384<=
395
+ this.rsar&&32768>this.rsar)this.memory[this.rsar]=a;this.rsar++;this.rcnt--;this.rsar>=this.pstop<<8&&(this.rsar+=this.pstart-this.pstop<<8);0===this.rcnt&&this.do_interrupt(64)};Dc.prototype.data_port_write16=function(a){this.data_port_write(a);this.dcfg&1&&this.data_port_write(a>>8)};Dc.prototype.data_port_write32=function(a){this.data_port_write(a);this.data_port_write(a>>8);this.data_port_write(a>>16);this.data_port_write(a>>24)};Dc.prototype.data_port_read=function(){let a=0;32768>this.rsar&&
396
+ (a=this.memory[this.rsar]);this.rsar++;this.rcnt--;this.rsar>=this.pstop<<8&&(this.rsar+=this.pstart-this.pstop<<8);0===this.rcnt&&this.do_interrupt(64);return a};Dc.prototype.data_port_read8=function(){return this.data_port_read16()&255};Dc.prototype.data_port_read16=function(){return this.dcfg&1?this.data_port_read()|this.data_port_read()<<8:this.data_port_read()};Dc.prototype.data_port_read32=function(){return this.data_port_read()|this.data_port_read()<<8|this.data_port_read()<<16|this.data_port_read()<<
397
+ 24};Dc.prototype.receive=function(a){if(!(this.cr&1)&&(this.bus.send("eth-receive-end",[a.length]),this.rxcr&16||this.rxcr&4&&255===a[0]&&255===a[1]&&255===a[2]&&255===a[3]&&255===a[4]&&255===a[5]||!(this.rxcr&8&&1===(a[0]&1)||a[0]!==this.mac[0]||a[1]!==this.mac[1]||a[2]!==this.mac[2]||a[3]!==this.mac[3]||a[4]!==this.mac[4]||a[5]!==this.mac[5]))){this.mac_address_in_state&&(a=new Uint8Array(a),Bc(a,this.mac,this.mac_address_in_state));var b=this.curpg<<8,c=Math.max(60,a.length)+4,d=b+4,e=this.curpg+
398
398
  1+(c>>8),f=b+c,g=1+(c>>8),k=this.boundary>this.curpg?this.boundary-this.curpg:this.pstop-this.curpg+this.boundary-this.pstart;k<g&&0!==this.boundary?B("Buffer full, dropping packet pstart="+n(this.pstart)+" pstop="+n(this.pstop)+" curpg="+n(this.curpg)+" needed="+n(g)+" boundary="+n(this.boundary)+" available="+n(k),1048576):(f>this.pstop<<8?(l(60<=a.length),f=(this.pstop<<8)-d,l(0<=f),this.memory.set(a.subarray(0,f),d),this.memory.set(a.subarray(f),this.pstart<<8),B("rcv cut="+n(f),1048576)):(this.memory.set(a,
399
- d),60>a.length&&this.memory.fill(0,d+a.length,d+60)),e>=this.pstop&&(e+=this.pstart-this.pstop),this.memory[b]=1,this.memory[b+1]=e,this.memory[b+2]=c,this.memory[b+3]=c>>8,this.curpg=e,B("rcv offset="+n(b)+" len="+n(c)+" next="+n(e),1048576),this.do_interrupt(1))}};Cc.prototype.get_page=function(){return this.cr>>6&3};function Dc(a,b){this.bus=b;this.rows=25;this.cols=80;this.ports=4;b=[{size_supported:16,notify_offset:0},{size_supported:16,notify_offset:1},{size_supported:16,notify_offset:2},{size_supported:16,
400
- notify_offset:3}];for(let c=1;c<this.ports;++c)b.push({size_supported:16,notify_offset:0}),b.push({size_supported:8,notify_offset:1});this.virtio=new Ec(a,{name:"virtio-console",pci_id:96,device_id:4163,subsystem_device_id:3,common:{initial_port:47104,queues:b,features:[0,1,32],on_driver_ok:()=>{}},notification:{initial_port:47360,single_handler:!1,handlers:[()=>{},c=>{const d=this.virtio.queues[c],e=3<c?c-3>>1:0;for(;d.has_request();){const f=d.pop_request(),g=new Uint8Array(f.length_readable);f.get_next_blob(g);
401
- this.bus.send("virtio-console"+e+"-output-bytes",g);this.Ack(c,f)}},c=>{if(2!==c)l(!1,"VirtioConsole Notified for wrong queue: "+c+" (expected queue_id of 2)");else for(c=this.virtio.queues[c];c.count_requests()>c.size-2;)c.pop_request()},c=>{if(3!==c)l(!1,"VirtioConsole Notified for wrong queue: "+c+" (expected queue_id of 3)");else for(var d=this.virtio.queues[c];d.has_request();){var e=d.pop_request(),f=new Uint8Array(e.length_readable);e.get_next_blob(f);var g=K(["w","h","h"],f,{offset:0});f=
399
+ d),60>a.length&&this.memory.fill(0,d+a.length,d+60)),e>=this.pstop&&(e+=this.pstart-this.pstop),this.memory[b]=1,this.memory[b+1]=e,this.memory[b+2]=c,this.memory[b+3]=c>>8,this.curpg=e,B("rcv offset="+n(b)+" len="+n(c)+" next="+n(e),1048576),this.do_interrupt(1))}};Dc.prototype.get_page=function(){return this.cr>>6&3};function Ec(a,b){this.bus=b;this.rows=25;this.cols=80;this.ports=4;b=[{size_supported:16,notify_offset:0},{size_supported:16,notify_offset:1},{size_supported:16,notify_offset:2},{size_supported:16,
400
+ notify_offset:3}];for(let c=1;c<this.ports;++c)b.push({size_supported:16,notify_offset:0}),b.push({size_supported:8,notify_offset:1});this.virtio=new Fc(a,{name:"virtio-console",pci_id:96,device_id:4163,subsystem_device_id:3,common:{initial_port:47104,queues:b,features:[0,1,32],on_driver_ok:()=>{}},notification:{initial_port:47360,single_handler:!1,handlers:[()=>{},c=>{const d=this.virtio.queues[c],e=3<c?c-3>>1:0;for(;d.has_request();){const f=d.pop_request(),g=new Uint8Array(f.length_readable);f.get_next_blob(g);
401
+ this.bus.send("virtio-console"+e+"-output-bytes",g);this.Ack(c,f)}},c=>{if(2!==c)l(!1,"VirtioConsole Notified for wrong queue: "+c+" (expected queue_id of 2)");else for(c=this.virtio.queues[c];c.count_requests()>c.size-2;)c.pop_request()},c=>{if(3!==c)l(!1,"VirtioConsole Notified for wrong queue: "+c+" (expected queue_id of 3)");else for(var d=this.virtio.queues[c];d.has_request();){var e=d.pop_request(),f=new Uint8Array(e.length_readable);e.get_next_blob(f);var g=J(["w","h","h"],f,{offset:0});f=
402
402
  g[0];g=g[1];this.Ack(c,e);switch(g){case 0:for(e=0;e<this.ports;++e)this.SendEvent(e,1,0);break;case 3:this.Ack(c,e);this.SendEvent(f,4,1);this.SendName(f,"virtio-"+f);this.SendEvent(f,6,1);break;case 6:this.Ack(c,e);0===f&&this.SendWindowSize(f);break;default:l(!1," VirtioConsole received unknown event: "+g[1]);return}}}]},isr_status:{initial_port:46848},device_specific:{initial_port:46592,struct:[{bytes:2,name:"cols",read:()=>this.cols,write:()=>{}},{bytes:2,name:"rows",read:()=>this.rows,write:()=>
403
403
  {}},{bytes:4,name:"max_nr_ports",read:()=>this.ports,write:()=>{}},{bytes:4,name:"emerg_wr",read:()=>0,write:()=>{l(!1,"Emergency write!")}}]}});for(let c=0;c<this.ports;++c){const d=0===c?0:2*c+2;this.bus.register("virtio-console"+c+"-input-bytes",function(e){var f=this.virtio.queues[d];f.has_request()&&(f=f.pop_request(),this.Send(d,f,new Uint8Array(e)))},this);this.bus.register("virtio-console"+c+"-resize",function(e){0===c&&(this.cols=e[0],this.rows=e[1]);this.virtio.queues[2].is_configured()&&
404
- this.virtio.queues[2].has_request()&&this.SendWindowSize(c,e[0],e[1])},this)}}Dc.prototype.SendWindowSize=function(a,b,c){c=c||this.rows;b=b||this.cols;const d=this.virtio.queues[2].pop_request(),e=new Uint8Array(12);J(["w","h","h","h","h"],[a,5,0,c,b],e,0);this.Send(2,d,e)};Dc.prototype.SendName=function(a,b){const c=this.virtio.queues[2].pop_request();b=(new TextEncoder).encode(b);const d=new Uint8Array(8+b.length+1);J(["w","h","h"],[a,7,1],d,0);for(a=0;a<b.length;++a)d[a+8]=b[a];d[8+b.length]=
405
- 0;this.Send(2,c,d)};Dc.prototype.get_state=function(){const a=[];a[0]=this.virtio;a[1]=this.rows;a[2]=this.cols;a[3]=this.ports;return a};Dc.prototype.set_state=function(a){this.virtio.set_state(a[0]);this.rows=a[1];this.cols=a[2];this.ports=a[3]};Dc.prototype.reset=function(){this.virtio.reset()};Dc.prototype.SendEvent=function(a,b,c){const d=this.virtio.queues[2].pop_request(),e=new Uint8Array(8);J(["w","h","h"],[a,b,c],e,0);this.Send(2,d,e)};Dc.prototype.Send=function(a,b,c){b.set_next_blob(c);
406
- this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};Dc.prototype.Ack=function(a,b){b.set_next_blob(new Uint8Array(0));this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};function Fc(a,b){this.cpu=a;this.bus=b;this.reset();this.bus.register("keyboard-code",function(c){this.kbd_send_code(c)},this);this.bus.register("mouse-click",function(c){this.mouse_send_click(c[0],c[1],c[2])},this);this.bus.register("mouse-delta",function(c){this.mouse_send_delta(c[0],
407
- c[1])},this);this.bus.register("mouse-wheel",function(c){this.wheel_movement-=c[0];this.wheel_movement-=2*c[1];this.wheel_movement=Math.min(7,Math.max(-8,this.wheel_movement));this.send_mouse_packet(0,0)},this);a.io.register_read(96,this,this.port60_read);a.io.register_read(100,this,this.port64_read);a.io.register_write(96,this,this.port60_write);a.io.register_write(100,this,this.port64_write)}Fc.prototype.reset=function(){this.use_mouse=this.enable_mouse_stream=!1;this.have_mouse=!0;this.mouse_clicks=
404
+ this.virtio.queues[2].has_request()&&this.SendWindowSize(c,e[0],e[1])},this)}}Ec.prototype.SendWindowSize=function(a,b,c){c=c||this.rows;b=b||this.cols;const d=this.virtio.queues[2].pop_request(),e=new Uint8Array(12);I(["w","h","h","h","h"],[a,5,0,c,b],e,0);this.Send(2,d,e)};Ec.prototype.SendName=function(a,b){const c=this.virtio.queues[2].pop_request();b=(new TextEncoder).encode(b);const d=new Uint8Array(8+b.length+1);I(["w","h","h"],[a,7,1],d,0);for(a=0;a<b.length;++a)d[a+8]=b[a];d[8+b.length]=
405
+ 0;this.Send(2,c,d)};Ec.prototype.get_state=function(){const a=[];a[0]=this.virtio;a[1]=this.rows;a[2]=this.cols;a[3]=this.ports;return a};Ec.prototype.set_state=function(a){this.virtio.set_state(a[0]);this.rows=a[1];this.cols=a[2];this.ports=a[3]};Ec.prototype.reset=function(){this.virtio.reset()};Ec.prototype.SendEvent=function(a,b,c){const d=this.virtio.queues[2].pop_request(),e=new Uint8Array(8);I(["w","h","h"],[a,b,c],e,0);this.Send(2,d,e)};Ec.prototype.Send=function(a,b,c){b.set_next_blob(c);
406
+ this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};Ec.prototype.Ack=function(a,b){b.set_next_blob(new Uint8Array(0));this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};function Gc(a,b){this.cpu=a;this.bus=b;this.reset();this.bus.register("keyboard-code",function(c){this.kbd_send_code(c)},this);this.bus.register("mouse-click",function(c){this.mouse_send_click(c[0],c[1],c[2])},this);this.bus.register("mouse-delta",function(c){this.mouse_send_delta(c[0],
407
+ c[1])},this);this.bus.register("mouse-wheel",function(c){this.wheel_movement-=c[0];this.wheel_movement-=2*c[1];this.wheel_movement=Math.min(7,Math.max(-8,this.wheel_movement));this.send_mouse_packet(0,0)},this);a.io.register_read(96,this,this.port60_read);a.io.register_read(100,this,this.port64_read);a.io.register_write(96,this,this.port60_write);a.io.register_write(100,this,this.port64_write)}Gc.prototype.reset=function(){this.use_mouse=this.enable_mouse_stream=!1;this.have_mouse=!0;this.mouse_clicks=
408
408
  this.mouse_delta_y=this.mouse_delta_x=0;this.have_keyboard=!0;this.next_read_resolution=this.next_read_rate=this.next_handle_scan_code_set=this.next_read_led=this.next_read_sample=this.next_is_mouse_command=this.enable_keyboard_stream=!1;this.kbd_buffer=new na(1024);this.last_port60_byte=0;this.sample_rate=100;this.mouse_id=this.mouse_detect_state=0;this.mouse_reset_workaround=!1;this.wheel_movement=0;this.resolution=4;this.scaling2=!1;this.last_mouse_packet=-1;this.mouse_buffer=new na(1024);this.next_byte_is_aux=
409
- this.next_byte_is_ready=!1;this.command_register=5;this.controller_output_port=0;this.read_controller_output_port=this.read_command_register=this.read_output_register=!1};Fc.prototype.get_state=function(){var a=[];a[0]=this.enable_mouse_stream;a[1]=this.use_mouse;a[2]=this.have_mouse;a[3]=this.mouse_delta_x;a[4]=this.mouse_delta_y;a[5]=this.mouse_clicks;a[6]=this.have_keyboard;a[7]=this.enable_keyboard_stream;a[8]=this.next_is_mouse_command;a[9]=this.next_read_sample;a[10]=this.next_read_led;a[11]=
410
- this.next_handle_scan_code_set;a[12]=this.next_read_rate;a[13]=this.next_read_resolution;a[15]=this.last_port60_byte;a[16]=this.sample_rate;a[17]=this.resolution;a[18]=this.scaling2;a[20]=this.command_register;a[21]=this.read_output_register;a[22]=this.read_command_register;a[23]=this.controller_output_port;a[24]=this.read_controller_output_port;a[25]=this.mouse_id;a[26]=this.mouse_detect_state;a[27]=this.mouse_reset_workaround;return a};Fc.prototype.set_state=function(a){this.enable_mouse_stream=
409
+ this.next_byte_is_ready=!1;this.command_register=5;this.controller_output_port=0;this.read_controller_output_port=this.read_command_register=this.read_output_register=!1};Gc.prototype.get_state=function(){var a=[];a[0]=this.enable_mouse_stream;a[1]=this.use_mouse;a[2]=this.have_mouse;a[3]=this.mouse_delta_x;a[4]=this.mouse_delta_y;a[5]=this.mouse_clicks;a[6]=this.have_keyboard;a[7]=this.enable_keyboard_stream;a[8]=this.next_is_mouse_command;a[9]=this.next_read_sample;a[10]=this.next_read_led;a[11]=
410
+ this.next_handle_scan_code_set;a[12]=this.next_read_rate;a[13]=this.next_read_resolution;a[15]=this.last_port60_byte;a[16]=this.sample_rate;a[17]=this.resolution;a[18]=this.scaling2;a[20]=this.command_register;a[21]=this.read_output_register;a[22]=this.read_command_register;a[23]=this.controller_output_port;a[24]=this.read_controller_output_port;a[25]=this.mouse_id;a[26]=this.mouse_detect_state;a[27]=this.mouse_reset_workaround;return a};Gc.prototype.set_state=function(a){this.enable_mouse_stream=
411
411
  a[0];this.use_mouse=a[1];this.have_mouse=a[2];this.mouse_delta_x=a[3];this.mouse_delta_y=a[4];this.mouse_clicks=a[5];this.have_keyboard=a[6];this.enable_keyboard_stream=a[7];this.next_is_mouse_command=a[8];this.next_read_sample=a[9];this.next_read_led=a[10];this.next_handle_scan_code_set=a[11];this.next_read_rate=a[12];this.next_read_resolution=a[13];this.last_port60_byte=a[15];this.sample_rate=a[16];this.resolution=a[17];this.scaling2=a[18];this.command_register=a[20];this.read_output_register=a[21];
412
- this.read_command_register=a[22];this.controller_output_port=a[23];this.read_controller_output_port=a[24];this.mouse_id=a[25]||0;this.mouse_detect_state=a[26]||0;this.mouse_reset_workaround=a[27]||!1;this.next_byte_is_aux=this.next_byte_is_ready=!1;this.kbd_buffer.clear();this.mouse_buffer.clear();this.bus.send("mouse-enable",this.use_mouse)};Fc.prototype.raise_irq=function(){this.next_byte_is_ready||(this.kbd_buffer.length?this.kbd_irq():this.mouse_buffer.length&&this.mouse_irq())};Fc.prototype.mouse_irq=
413
- function(){this.next_byte_is_aux=this.next_byte_is_ready=!0;this.command_register&2&&(B("Mouse irq",64),this.cpu.device_lower_irq(12),this.cpu.device_raise_irq(12))};Fc.prototype.kbd_irq=function(){this.next_byte_is_ready=!0;this.next_byte_is_aux=!1;this.command_register&1&&(B("Keyboard irq",64),this.cpu.device_lower_irq(1),this.cpu.device_raise_irq(1))};Fc.prototype.kbd_send_code=function(a){this.enable_keyboard_stream&&(B("adding kbd code: "+n(a),64),this.kbd_buffer.push(a),this.raise_irq())};Fc.prototype.mouse_send_delta=
414
- function(a,b){this.have_mouse&&this.use_mouse&&(this.mouse_delta_x+=1*a,this.mouse_delta_y+=1*b,this.enable_mouse_stream&&(a=this.mouse_delta_x|0,b=this.mouse_delta_y|0,a||b))&&(this.mouse_delta_x-=a,this.mouse_delta_y-=b,this.send_mouse_packet(a,b))};Fc.prototype.mouse_send_click=function(a,b,c){this.have_mouse&&this.use_mouse&&(this.mouse_clicks=a|c<<1|b<<2,this.enable_mouse_stream&&this.send_mouse_packet(0,0))};Fc.prototype.send_mouse_packet=function(a,b){var c=(0>b)<<5|(0>a)<<4|8|this.mouse_clicks;
415
- this.last_mouse_packet=Date.now();this.mouse_buffer.push(c);this.mouse_buffer.push(a);this.mouse_buffer.push(b);4===this.mouse_id?(this.mouse_buffer.push(0|this.wheel_movement&15),this.wheel_movement=0):3===this.mouse_id&&(this.mouse_buffer.push(this.wheel_movement&255),this.wheel_movement=0);this.raise_irq()};Fc.prototype.apply_scaling2=function(a){var b=a>>31;switch(Math.abs(a)){case 0:case 1:case 3:return a;case 2:return b;case 4:return 6*b;case 5:return 9*b;default:return a<<1}};Fc.prototype.port60_read=
412
+ this.read_command_register=a[22];this.controller_output_port=a[23];this.read_controller_output_port=a[24];this.mouse_id=a[25]||0;this.mouse_detect_state=a[26]||0;this.mouse_reset_workaround=a[27]||!1;this.next_byte_is_aux=this.next_byte_is_ready=!1;this.kbd_buffer.clear();this.mouse_buffer.clear();this.bus.send("mouse-enable",this.use_mouse)};Gc.prototype.raise_irq=function(){this.next_byte_is_ready||(this.kbd_buffer.length?this.kbd_irq():this.mouse_buffer.length&&this.mouse_irq())};Gc.prototype.mouse_irq=
413
+ function(){this.next_byte_is_aux=this.next_byte_is_ready=!0;this.command_register&2&&(B("Mouse irq",64),this.cpu.device_lower_irq(12),this.cpu.device_raise_irq(12))};Gc.prototype.kbd_irq=function(){this.next_byte_is_ready=!0;this.next_byte_is_aux=!1;this.command_register&1&&(B("Keyboard irq",64),this.cpu.device_lower_irq(1),this.cpu.device_raise_irq(1))};Gc.prototype.kbd_send_code=function(a){this.enable_keyboard_stream&&(B("adding kbd code: "+n(a),64),this.kbd_buffer.push(a),this.raise_irq())};Gc.prototype.mouse_send_delta=
414
+ function(a,b){this.have_mouse&&this.use_mouse&&(this.mouse_delta_x+=1*a,this.mouse_delta_y+=1*b,this.enable_mouse_stream&&(a=this.mouse_delta_x|0,b=this.mouse_delta_y|0,a||b))&&(this.mouse_delta_x-=a,this.mouse_delta_y-=b,this.send_mouse_packet(a,b))};Gc.prototype.mouse_send_click=function(a,b,c){this.have_mouse&&this.use_mouse&&(this.mouse_clicks=a|c<<1|b<<2,this.enable_mouse_stream&&this.send_mouse_packet(0,0))};Gc.prototype.send_mouse_packet=function(a,b){var c=(0>b)<<5|(0>a)<<4|8|this.mouse_clicks;
415
+ this.last_mouse_packet=Date.now();this.mouse_buffer.push(c);this.mouse_buffer.push(a);this.mouse_buffer.push(b);4===this.mouse_id?(this.mouse_buffer.push(0|this.wheel_movement&15),this.wheel_movement=0):3===this.mouse_id&&(this.mouse_buffer.push(this.wheel_movement&255),this.wheel_movement=0);this.raise_irq()};Gc.prototype.apply_scaling2=function(a){var b=a>>31;switch(Math.abs(a)){case 0:case 1:case 3:return a;case 2:return b;case 4:return 6*b;case 5:return 9*b;default:return a<<1}};Gc.prototype.port60_read=
416
416
  function(){this.next_byte_is_ready=!1;if(!this.kbd_buffer.length&&!this.mouse_buffer.length)return B("Port 60 read: Empty",64),this.last_port60_byte;this.next_byte_is_aux?(this.cpu.device_lower_irq(12),this.last_port60_byte=this.mouse_buffer.shift(),B("Port 60 read (mouse): "+n(this.last_port60_byte),64)):(this.cpu.device_lower_irq(1),this.last_port60_byte=this.kbd_buffer.shift(),B("Port 60 read (kbd) : "+n(this.last_port60_byte),64));(this.kbd_buffer.length||this.mouse_buffer.length)&&this.raise_irq();
417
- return this.last_port60_byte};Fc.prototype.port64_read=function(){var a=16;this.next_byte_is_ready&&(a|=1);this.next_byte_is_aux&&(a|=32);B("port 64 read: "+n(a),64);return a};Fc.prototype.port60_write=function(a){B("port 60 write: "+n(a),64);if(this.read_command_register)this.command_register=a,this.read_command_register=!1,B("Keyboard command register = "+n(this.command_register),64);else if(this.read_output_register)this.read_output_register=!1,this.mouse_buffer.clear(),this.mouse_buffer.push(a),
417
+ return this.last_port60_byte};Gc.prototype.port64_read=function(){var a=16;this.next_byte_is_ready&&(a|=1);this.next_byte_is_aux&&(a|=32);B("port 64 read: "+n(a),64);return a};Gc.prototype.port60_write=function(a){B("port 60 write: "+n(a),64);if(this.read_command_register)this.command_register=a,this.read_command_register=!1,B("Keyboard command register = "+n(this.command_register),64);else if(this.read_output_register)this.read_output_register=!1,this.mouse_buffer.clear(),this.mouse_buffer.push(a),
418
418
  this.mouse_irq();else if(this.next_read_sample){this.next_read_sample=!1;this.mouse_buffer.clear();this.mouse_buffer.push(250);this.sample_rate=a;switch(this.mouse_detect_state){case -1:60===a?(this.mouse_reset_workaround=!0,this.mouse_detect_state=0):(this.mouse_reset_workaround=!1,this.mouse_detect_state=200===a?1:0);break;case 0:200===a&&(this.mouse_detect_state=1);break;case 1:this.mouse_detect_state=100===a?2:200===a?3:0;break;case 2:80===a&&(this.mouse_id=3);this.mouse_detect_state=-1;break;
419
419
  case 3:80===a&&(this.mouse_id=4),this.mouse_detect_state=-1}B("mouse sample rate: "+n(a)+", mouse id: "+n(this.mouse_id),64);this.sample_rate||(B("invalid sample rate, reset to 100",64),this.sample_rate=100);this.mouse_irq()}else if(this.next_read_resolution)this.next_read_resolution=!1,this.mouse_buffer.clear(),this.mouse_buffer.push(250),3<a?(this.resolution=4,B("invalid resolution, resetting to 4",64)):(this.resolution=1<<a,B("resolution: "+this.resolution,64)),this.mouse_irq();else if(this.next_read_led)this.next_read_led=
420
420
  !1,this.kbd_buffer.push(250),this.kbd_irq();else if(this.next_handle_scan_code_set)this.next_handle_scan_code_set=!1,this.kbd_buffer.push(250),this.kbd_irq(),a||this.kbd_buffer.push(1);else if(this.next_read_rate)this.next_read_rate=!1,this.kbd_buffer.push(250),this.kbd_irq();else if(this.next_is_mouse_command){if(this.next_is_mouse_command=!1,B("Port 60 data register write: "+n(a),64),this.have_mouse){this.kbd_buffer.clear();this.mouse_buffer.clear();this.mouse_buffer.push(250);switch(a){case 230:B("Scaling 1:1",
421
421
  64);this.scaling2=!1;break;case 231:B("Scaling 2:1",64);this.scaling2=!0;break;case 232:this.next_read_resolution=!0;break;case 233:this.send_mouse_packet(0,0);break;case 235:B("unimplemented request single packet",64);this.send_mouse_packet(0,0);break;case 242:B("required id: "+n(this.mouse_id),64);this.mouse_buffer.push(this.mouse_id);this.mouse_clicks=this.mouse_delta_x=this.mouse_delta_y=0;this.raise_irq();break;case 243:this.next_read_sample=!0;break;case 244:this.use_mouse=this.enable_mouse_stream=
422
422
  !0;this.bus.send("mouse-enable",!0);this.mouse_clicks=this.mouse_delta_x=this.mouse_delta_y=0;break;case 245:this.enable_mouse_stream=!1;break;case 246:this.enable_mouse_stream=!1;this.sample_rate=100;this.scaling2=!1;this.resolution=4;break;case 255:B("Mouse reset",64);this.mouse_buffer.push(170);this.mouse_buffer.push(0);this.use_mouse=!0;this.bus.send("mouse-enable",!0);this.enable_mouse_stream=!1;this.sample_rate=100;this.scaling2=!1;this.resolution=4;this.mouse_reset_workaround||(this.mouse_id=
423
423
  0);this.mouse_clicks=this.mouse_delta_x=this.mouse_delta_y=0;break;default:B("Unimplemented mouse command: "+n(a),64)}this.mouse_irq()}}else if(this.read_controller_output_port)this.read_controller_output_port=!1,this.controller_output_port=a;else{B("Port 60 data register write: "+n(a),64);this.mouse_buffer.clear();this.kbd_buffer.clear();this.kbd_buffer.push(250);switch(a){case 237:this.next_read_led=!0;break;case 240:this.next_handle_scan_code_set=!0;break;case 242:this.kbd_buffer.push(171);this.kbd_buffer.push(131);
424
- break;case 243:this.next_read_rate=!0;break;case 244:B("kbd enable scanning",64);this.enable_keyboard_stream=!0;break;case 245:B("kbd disable scanning",64);this.enable_keyboard_stream=!1;break;case 246:break;case 255:this.kbd_buffer.clear();this.kbd_buffer.push(250);this.kbd_buffer.push(170);this.kbd_buffer.push(0);break;default:B("Unimplemented keyboard command: "+n(a),64)}this.kbd_irq()}};Fc.prototype.port64_write=function(a){B("port 64 write: "+n(a),64);switch(a){case 32:this.kbd_buffer.clear();
424
+ break;case 243:this.next_read_rate=!0;break;case 244:B("kbd enable scanning",64);this.enable_keyboard_stream=!0;break;case 245:B("kbd disable scanning",64);this.enable_keyboard_stream=!1;break;case 246:break;case 255:this.kbd_buffer.clear();this.kbd_buffer.push(250);this.kbd_buffer.push(170);this.kbd_buffer.push(0);break;default:B("Unimplemented keyboard command: "+n(a),64)}this.kbd_irq()}};Gc.prototype.port64_write=function(a){B("port 64 write: "+n(a),64);switch(a){case 32:this.kbd_buffer.clear();
425
425
  this.mouse_buffer.clear();this.kbd_buffer.push(this.command_register);this.kbd_irq();break;case 96:this.read_command_register=!0;break;case 209:this.read_controller_output_port=!0;break;case 211:this.read_output_register=!0;break;case 212:this.next_is_mouse_command=!0;break;case 167:B("Disable second port",64);this.command_register|=32;break;case 168:B("Enable second port",64);this.command_register&=-33;break;case 169:this.kbd_buffer.clear();this.mouse_buffer.clear();this.kbd_buffer.push(0);this.kbd_irq();
426
- break;case 170:this.kbd_buffer.clear();this.mouse_buffer.clear();this.kbd_buffer.push(85);this.kbd_irq();break;case 171:this.kbd_buffer.clear();this.mouse_buffer.clear();this.kbd_buffer.push(0);this.kbd_irq();break;case 173:B("Disable Keyboard",64);this.command_register|=16;break;case 174:B("Enable Keyboard",64);this.command_register&=-17;break;case 254:B("CPU reboot via PS2");this.cpu.reboot_internal();break;default:B("port 64: Unimplemented command byte: "+n(a),64)}};const Gc=DataView.prototype,
427
- Hc={size:1,get:Gc.getUint8,set:Gc.setUint8},Ic={size:2,get:Gc.getUint16,set:Gc.setUint16},Q={size:4,get:Gc.getUint32,set:Gc.setUint32},Kc=Jc([{magic:Q},{class:Hc},{data:Hc},{version0:Hc},{osabi:Hc},{abiversion:Hc},{pad0:function(a){return{size:a,get:()=>-1}}(7)},{type:Ic},{machine:Ic},{version1:Q},{entry:Q},{phoff:Q},{shoff:Q},{flags:Q},{ehsize:Ic},{phentsize:Ic},{phnum:Ic},{shentsize:Ic},{shnum:Ic},{shstrndx:Ic}]);console.assert(52===Kc.reduce((a,b)=>a+b.size,0));const Lc=Jc([{type:Q},{offset:Q},
428
- {vaddr:Q},{paddr:Q},{filesz:Q},{memsz:Q},{flags:Q},{align:Q}]);console.assert(32===Lc.reduce((a,b)=>a+b.size,0));const Mc=Jc([{name:Q},{type:Q},{flags:Q},{addr:Q},{offset:Q},{size:Q},{link:Q},{info:Q},{addralign:Q},{entsize:Q}]);console.assert(40===Mc.reduce((a,b)=>a+b.size,0));function Jc(a){return a.map(function(b){var c=Object.keys(b);console.assert(1===c.length);c=c[0];b=b[c];console.assert(0<b.size);return{name:c,type:b,size:b.size,get:b.get,set:b.set}})}function Nc(a,b){const c={};let d=0;for(const e of b)b=
429
- e.get.call(a,d,!0),console.assert(void 0===c[e.name]),c[e.name]=b,d+=e.size;return[c,d]}function Oc(a,b,c){const d=[];let e=0;for(var f=0;f<c;f++){const [g,k]=Nc(new DataView(a.buffer,a.byteOffset+e,void 0),b);d.push(g);e+=k}return[d,e]}const Pc={[0]:0,[1]:525,[2]:525,[3]:350,[4]:350,[5]:350};function W(a,b,c,d){this.io=a.io;this.cpu=a;this.dma=a.devices.dma;this.cmd_table=this.build_cmd_lookup_table();this.sra=0;this.srb=192;this.dor=12;this.tdr=0;this.msr=128;this.dsr=0;this.cmd_phase=1;this.cmd_flags=
430
- this.cmd_code=0;this.cmd_buffer=new Uint8Array(17);this.cmd_remaining=this.cmd_cursor=0;this.response_data=new Uint8Array(15);this.reset_sense_int_count=this.curr_drive_no=this.status1=this.status0=this.response_length=this.response_cursor=0;this.locked=!1;this.head_load_time=this.step_rate_interval=0;this.fdc_config=96;this.eot=this.precomp_trk=0;this.drives=[new Qc("fda",d?.fda,b,4),new Qc("fdb",d?.fdb,c,4)];Object.seal(this);this.cpu.devices.rtc.cmos_write(16,this.drives[0].drive_type<<4|this.drives[1].drive_type);
426
+ break;case 170:this.kbd_buffer.clear();this.mouse_buffer.clear();this.kbd_buffer.push(85);this.kbd_irq();break;case 171:this.kbd_buffer.clear();this.mouse_buffer.clear();this.kbd_buffer.push(0);this.kbd_irq();break;case 173:B("Disable Keyboard",64);this.command_register|=16;break;case 174:B("Enable Keyboard",64);this.command_register&=-17;break;case 254:B("CPU reboot via PS2");this.cpu.reboot_internal();break;default:B("port 64: Unimplemented command byte: "+n(a),64)}};const Hc=DataView.prototype,
427
+ Ic={size:1,get:Hc.getUint8,set:Hc.setUint8},Jc={size:2,get:Hc.getUint16,set:Hc.setUint16},Q={size:4,get:Hc.getUint32,set:Hc.setUint32},Lc=Kc([{magic:Q},{class:Ic},{data:Ic},{version0:Ic},{osabi:Ic},{abiversion:Ic},{pad0:function(a){return{size:a,get:()=>-1}}(7)},{type:Jc},{machine:Jc},{version1:Q},{entry:Q},{phoff:Q},{shoff:Q},{flags:Q},{ehsize:Jc},{phentsize:Jc},{phnum:Jc},{shentsize:Jc},{shnum:Jc},{shstrndx:Jc}]);console.assert(52===Lc.reduce((a,b)=>a+b.size,0));const Mc=Kc([{type:Q},{offset:Q},
428
+ {vaddr:Q},{paddr:Q},{filesz:Q},{memsz:Q},{flags:Q},{align:Q}]);console.assert(32===Mc.reduce((a,b)=>a+b.size,0));const Nc=Kc([{name:Q},{type:Q},{flags:Q},{addr:Q},{offset:Q},{size:Q},{link:Q},{info:Q},{addralign:Q},{entsize:Q}]);console.assert(40===Nc.reduce((a,b)=>a+b.size,0));function Kc(a){return a.map(function(b){var c=Object.keys(b);console.assert(1===c.length);c=c[0];b=b[c];console.assert(0<b.size);return{name:c,type:b,size:b.size,get:b.get,set:b.set}})}function Oc(a,b){const c={};let d=0;for(const e of b)b=
429
+ e.get.call(a,d,!0),console.assert(void 0===c[e.name]),c[e.name]=b,d+=e.size;return[c,d]}function Pc(a,b,c){const d=[];let e=0;for(var f=0;f<c;f++){const [g,k]=Oc(new DataView(a.buffer,a.byteOffset+e,void 0),b);d.push(g);e+=k}return[d,e]}const Qc={[0]:0,[1]:525,[2]:525,[3]:350,[4]:350,[5]:350};function W(a,b,c,d){this.io=a.io;this.cpu=a;this.dma=a.devices.dma;this.cmd_table=this.build_cmd_lookup_table();this.sra=0;this.srb=192;this.dor=12;this.tdr=0;this.msr=128;this.dsr=0;this.cmd_phase=1;this.cmd_flags=
430
+ this.cmd_code=0;this.cmd_buffer=new Uint8Array(17);this.cmd_remaining=this.cmd_cursor=0;this.response_data=new Uint8Array(15);this.reset_sense_int_count=this.curr_drive_no=this.status1=this.status0=this.response_length=this.response_cursor=0;this.locked=!1;this.head_load_time=this.step_rate_interval=0;this.fdc_config=96;this.eot=this.precomp_trk=0;this.drives=[new Rc("fda",d?.fda,b,4),new Rc("fdb",d?.fdb,c,4)];Object.seal(this);this.cpu.devices.rtc.cmos_write(16,this.drives[0].drive_type<<4|this.drives[1].drive_type);
431
431
  this.io.register_read(1008,this,this.read_reg_sra);this.io.register_read(1009,this,this.read_reg_srb);this.io.register_read(1010,this,this.read_reg_dor);this.io.register_read(1011,this,this.read_reg_tdr);this.io.register_read(1012,this,this.read_reg_msr);this.io.register_read(1013,this,this.read_reg_fifo);this.io.register_read(1015,this,this.read_reg_dir);this.io.register_write(1010,this,this.write_reg_dor);this.io.register_write(1011,this,this.write_reg_tdr);this.io.register_write(1012,this,this.write_reg_dsr);
432
432
  this.io.register_write(1013,this,this.write_reg_fifo);this.io.register_write(1015,this,this.write_reg_ccr);B("floppy controller ready",8192)}W.prototype.build_cmd_lookup_table=function(){const a=[{code:6,mask:31,argc:8,name:"READ",handler:this.exec_read},{code:5,mask:63,argc:8,name:"WRITE",handler:this.exec_write},{code:15,mask:255,argc:2,name:"SEEK",handler:this.exec_seek},{code:8,mask:255,argc:0,name:"SENSE INTERRUPT STATUS",handler:this.exec_sense_interrupt_status},{code:7,mask:255,argc:1,name:"RECALIBRATE",
433
433
  handler:this.exec_recalibrate},{code:13,mask:191,argc:5,name:"FORMAT TRACK",handler:this.exec_format_track},{code:2,mask:191,argc:8,name:"READ TRACK",handler:this.exec_unimplemented},{code:78,mask:255,argc:17,name:"RESTORE",handler:this.exec_unimplemented},{code:46,mask:255,argc:0,name:"SAVE",handler:this.exec_unimplemented},{code:12,mask:31,argc:8,name:"READ DELETED DATA",handler:this.exec_unimplemented},{code:17,mask:31,argc:8,name:"SCAN EQUAL",handler:this.exec_unimplemented},{code:22,mask:31,
@@ -455,32 +455,32 @@ W.prototype.end_read_write=function(a,b,c){const d=this.drives[this.curr_drive_n
455
455
  W.prototype.seek_next_sect=function(){const a=this.drives[this.curr_drive_no];let b=a.curr_track,c=a.curr_head,d=a.curr_sect,e=1;d>=a.max_sect||d===this.eot?(d=1,this.cmd_flags&1?0===c&&2===a.max_head?c=1:(c=0,b++,this.status0|=32,1===a.max_head&&(e=0)):(this.status0|=32,b++,e=0)):d++;a.seek(c,b,d);return e};W.prototype.get_state=function(){const a=[];a[19]=this.sra;a[20]=this.srb;a[21]=this.dor;a[22]=this.tdr;a[23]=this.msr;a[24]=this.dsr;a[25]=this.cmd_phase;a[26]=this.cmd_code;a[27]=this.cmd_flags;
456
456
  a[28]=this.cmd_buffer;a[29]=this.cmd_cursor;a[30]=this.cmd_remaining;a[31]=this.response_data;a[32]=this.response_cursor;a[33]=this.response_length;a[34]=this.status0;a[35]=this.status1;a[36]=this.curr_drive_no;a[37]=this.reset_sense_int_count;a[38]=this.locked;a[39]=this.step_rate_interval;a[40]=this.head_load_time;a[41]=this.fdc_config;a[42]=this.precomp_trk;a[43]=this.eot;a[44]=this.drives[0].get_state();a[45]=this.drives[1].get_state();return a};W.prototype.set_state=function(a){"undefined"!==
457
457
  typeof a[19]&&(this.sra=a[19],this.srb=a[20],this.dor=a[21],this.tdr=a[22],this.msr=a[23],this.dsr=a[24],this.cmd_phase=a[25],this.cmd_code=a[26],this.cmd_flags=a[27],this.cmd_buffer.set(a[28]),this.cmd_cursor=a[29],this.cmd_remaining=a[30],this.response_data.set(a[31]),this.response_cursor=a[32],this.response_length=a[33],this.status0=a[34],this.status1=a[35],this.curr_drive_no=a[36],this.reset_sense_int_count=a[37],this.locked=a[38],this.step_rate_interval=a[39],this.head_load_time=a[40],this.fdc_config=
458
- a[41],this.precomp_trk=a[42],this.eot=a[43],this.drives[0].set_state(a[44]),this.drives[1].set_state(a[45]))};const Rc=[{drive_type:4,sectors:18,tracks:80,heads:2},{drive_type:4,sectors:20,tracks:80,heads:2},{drive_type:4,sectors:21,tracks:80,heads:2},{drive_type:4,sectors:21,tracks:82,heads:2},{drive_type:4,sectors:21,tracks:83,heads:2},{drive_type:4,sectors:22,tracks:80,heads:2},{drive_type:4,sectors:23,tracks:80,heads:2},{drive_type:4,sectors:24,tracks:80,heads:2},{drive_type:5,sectors:36,tracks:80,
458
+ a[41],this.precomp_trk=a[42],this.eot=a[43],this.drives[0].set_state(a[44]),this.drives[1].set_state(a[45]))};const Sc=[{drive_type:4,sectors:18,tracks:80,heads:2},{drive_type:4,sectors:20,tracks:80,heads:2},{drive_type:4,sectors:21,tracks:80,heads:2},{drive_type:4,sectors:21,tracks:82,heads:2},{drive_type:4,sectors:21,tracks:83,heads:2},{drive_type:4,sectors:22,tracks:80,heads:2},{drive_type:4,sectors:23,tracks:80,heads:2},{drive_type:4,sectors:24,tracks:80,heads:2},{drive_type:5,sectors:36,tracks:80,
459
459
  heads:2},{drive_type:5,sectors:39,tracks:80,heads:2},{drive_type:5,sectors:40,tracks:80,heads:2},{drive_type:5,sectors:44,tracks:80,heads:2},{drive_type:5,sectors:48,tracks:80,heads:2},{drive_type:4,sectors:8,tracks:80,heads:2},{drive_type:4,sectors:9,tracks:80,heads:2},{drive_type:4,sectors:10,tracks:80,heads:2},{drive_type:4,sectors:10,tracks:82,heads:2},{drive_type:4,sectors:10,tracks:83,heads:2},{drive_type:4,sectors:13,tracks:80,heads:2},{drive_type:4,sectors:14,tracks:80,heads:2},{drive_type:2,
460
460
  sectors:15,tracks:80,heads:2},{drive_type:2,sectors:18,tracks:80,heads:2},{drive_type:2,sectors:18,tracks:82,heads:2},{drive_type:2,sectors:18,tracks:83,heads:2},{drive_type:2,sectors:20,tracks:80,heads:2},{drive_type:2,sectors:9,tracks:80,heads:2},{drive_type:2,sectors:11,tracks:80,heads:2},{drive_type:2,sectors:9,tracks:40,heads:2},{drive_type:2,sectors:9,tracks:40,heads:1},{drive_type:2,sectors:10,tracks:41,heads:2},{drive_type:2,sectors:10,tracks:42,heads:2},{drive_type:2,sectors:8,tracks:40,
461
- heads:2},{drive_type:2,sectors:8,tracks:40,heads:1},{drive_type:4,sectors:9,tracks:80,heads:1},{drive_type:1,sectors:10,tracks:40,heads:1},{drive_type:1,sectors:10,tracks:40,heads:2}];function Qc(a,b,c,d){this.name=a;this.curr_head=this.curr_track=this.max_sect=this.max_head=this.max_track=this.drive_type=0;this.curr_sect=1;this.perpendicular=0;this.read_only=!1;this.media_changed=!0;this.buffer=null;Object.seal(this);a=b?.drive_type;void 0!==a&&0<=a&&5>=a&&(this.drive_type=a);this.insert_disk(c,
462
- !!b?.read_only);0===this.drive_type&&void 0===a&&(this.drive_type=d);B("floppy drive "+this.name+" ready, drive type: "+this.drive_type,8192)}Qc.prototype.insert_disk=function(a,b){if(!a)return!1;a instanceof Uint8Array&&(a=new za(a.buffer));const [c,d]=this.find_disk_format(a,this.drive_type);if(!c)return B("WARNING: disk rejected, no suitable disk format found for image of size "+a.byteLength+" bytes",8192),!1;this.max_track=d.tracks;this.max_head=d.heads;this.max_sect=d.sectors;this.read_only=
463
- !!b;this.media_changed=!0;this.buffer=c;0===this.drive_type&&(this.drive_type=d.drive_type);B("disk inserted into "+this.name+": type: "+d.drive_type+", C/H/S: "+d.tracks+"/"+d.heads+"/"+d.sectors+", size: "+c.byteLength,8192);return!0};Qc.prototype.eject_disk=function(){this.max_sect=this.max_head=this.max_track=0;this.media_changed=!0;this.buffer=null};Qc.prototype.get_buffer=function(){return this.buffer?this.buffer.buffer:null};Qc.prototype.chs2lba=function(a,b,c){return(a*this.max_head+b)*this.max_sect+
464
- c-1};Qc.prototype.find_disk_format=function(a,b){const c=0===b,d=a.byteLength;let e=-1,f=-1,g=-1,k=-1,m=-1;for(let p=0;p<Rc.length;p++){const q=Rc[p],r=q.sectors*q.tracks*q.heads*512;if(d===r)if(c||q.drive_type===b){e=p;break}else c||Pc[q.drive_type]!==Pc[b]?g=-1===g?p:g:f=-1===f?p:f;else d<r&&(-1===m||r<m)&&(k=p,m=r)}return-1!==e?[a,Rc[e]]:-1!==f?[a,Rc[f]]:-1!==g?[a,Rc[g]]:-1!==k?(b=new Uint8Array(m),b.set(new Uint8Array(a.buffer)),[new za(b.buffer),Rc[k]]):[null,null]};Qc.prototype.seek=function(a,
461
+ heads:2},{drive_type:2,sectors:8,tracks:40,heads:1},{drive_type:4,sectors:9,tracks:80,heads:1},{drive_type:1,sectors:10,tracks:40,heads:1},{drive_type:1,sectors:10,tracks:40,heads:2}];function Rc(a,b,c,d){this.name=a;this.curr_head=this.curr_track=this.max_sect=this.max_head=this.max_track=this.drive_type=0;this.curr_sect=1;this.perpendicular=0;this.read_only=!1;this.media_changed=!0;this.buffer=null;Object.seal(this);a=b?.drive_type;void 0!==a&&0<=a&&5>=a&&(this.drive_type=a);this.insert_disk(c,
462
+ !!b?.read_only);0===this.drive_type&&void 0===a&&(this.drive_type=d);B("floppy drive "+this.name+" ready, drive type: "+this.drive_type,8192)}Rc.prototype.insert_disk=function(a,b){if(!a)return!1;a instanceof Uint8Array&&(a=new Ba(a.buffer));const [c,d]=this.find_disk_format(a,this.drive_type);if(!c)return B("WARNING: disk rejected, no suitable disk format found for image of size "+a.byteLength+" bytes",8192),!1;this.max_track=d.tracks;this.max_head=d.heads;this.max_sect=d.sectors;this.read_only=
463
+ !!b;this.media_changed=!0;this.buffer=c;0===this.drive_type&&(this.drive_type=d.drive_type);B("disk inserted into "+this.name+": type: "+d.drive_type+", C/H/S: "+d.tracks+"/"+d.heads+"/"+d.sectors+", size: "+c.byteLength,8192);return!0};Rc.prototype.eject_disk=function(){this.max_sect=this.max_head=this.max_track=0;this.media_changed=!0;this.buffer=null};Rc.prototype.get_buffer=function(){return this.buffer?this.buffer.buffer:null};Rc.prototype.chs2lba=function(a,b,c){return(a*this.max_head+b)*this.max_sect+
464
+ c-1};Rc.prototype.find_disk_format=function(a,b){const c=0===b,d=a.byteLength;let e=-1,f=-1,g=-1,k=-1,m=-1;for(let p=0;p<Sc.length;p++){const q=Sc[p],r=q.sectors*q.tracks*q.heads*512;if(d===r)if(c||q.drive_type===b){e=p;break}else c||Qc[q.drive_type]!==Qc[b]?g=-1===g?p:g:f=-1===f?p:f;else d<r&&(-1===m||r<m)&&(k=p,m=r)}return-1!==e?[a,Sc[e]]:-1!==f?[a,Sc[f]]:-1!==g?[a,Sc[g]]:-1!==k?(b=new Uint8Array(m),b.set(new Uint8Array(a.buffer)),[new Ba(b.buffer),Sc[k]]):[null,null]};Rc.prototype.seek=function(a,
465
465
  b,c){if(b>this.max_track||0!==a&&1===this.max_head)return B("WARNING: attempt to seek to invalid track: head: "+a+", track: "+b+", sect: "+c,8192),2;if(c>this.max_sect)return B("WARNING: attempt to seek beyond last sector: "+c+" (max: "+this.max_sect+")",8192),3;let d=0;const e=this.chs2lba(this.curr_track,this.curr_head,this.curr_sect),f=this.chs2lba(b,a,c);e!==f&&(this.curr_track!==b&&(this.buffer&&(this.media_changed=!1),d=1),this.curr_head=a,this.curr_track=b,this.curr_sect=c);this.buffer||(d=
466
- 2);return d};Qc.prototype.get_state=function(){const a=[];a[0]=this.drive_type;a[1]=this.max_track;a[2]=this.max_head;a[3]=this.max_sect;a[4]=this.curr_track;a[5]=this.curr_head;a[6]=this.curr_sect;a[7]=this.perpendicular;a[8]=this.read_only;a[9]=this.media_changed;a[10]=this.buffer?this.buffer.get_state():null;return a};Qc.prototype.set_state=function(a){this.drive_type=a[0];this.max_track=a[1];this.max_head=a[2];this.max_sect=a[3];this.curr_track=a[4];this.curr_head=a[5];this.curr_sect=a[6];this.perpendicular=
467
- a[7];this.read_only=a[8];this.media_changed=a[9];a[10]?(this.buffer||(this.buffer=new za(new ArrayBuffer(0))),this.buffer.set_state(a[10])):this.buffer=null};const Sc={[8]:"DEVICE RESET",[144]:"EXECUTE DEVICE DIAGNOSTIC",[231]:"FLUSH CACHE",[234]:"FLUSH CACHE EXT",[218]:"GET MEDIA STATUS",[236]:"IDENTIFY DEVICE",[161]:"IDENTIFY PACKET DEVICE",[225]:"IDLE IMMEDIATE",[145]:"INITIALIZE DEVICE PARAMETERS",[222]:"MEDIA LOCK",[0]:"NOP",[160]:"PACKET",[200]:"READ DMA",[37]:"READ DMA EXT",[41]:"READ MULTIPLE",
468
- [196]:"READ MULTIPLE EXT",[248]:"READ NATIVE MAX ADDRESS",[39]:"READ NATIVE MAX ADDRESS EXT",[32]:"READ SECTORS",[36]:"READ SECTORS EXT",[64]:"READ VERIFY SECTORS",[245]:"SECURITY FREEZE LOCK",[239]:"SET FEATURES",[249]:"SET MAX",[198]:"SET MULTIPLE MODE",[224]:"STANDBY IMMEDIATE",[202]:"WRITE DMA",[53]:"WRITE DMA EXT",[57]:"WRITE MULTIPLE",[197]:"WRITE MULTIPLE EXT",[48]:"WRITE SECTORS",[52]:"WRITE SECTORS EXT",[16]:"<UNKNOWN 10h>",[240]:"<VENDOR-SPECIFIC F0h>"},Tc={[70]:{name:"GET CONFIGURATION",
466
+ 2);return d};Rc.prototype.get_state=function(){const a=[];a[0]=this.drive_type;a[1]=this.max_track;a[2]=this.max_head;a[3]=this.max_sect;a[4]=this.curr_track;a[5]=this.curr_head;a[6]=this.curr_sect;a[7]=this.perpendicular;a[8]=this.read_only;a[9]=this.media_changed;a[10]=this.buffer?this.buffer.get_state():null;return a};Rc.prototype.set_state=function(a){this.drive_type=a[0];this.max_track=a[1];this.max_head=a[2];this.max_sect=a[3];this.curr_track=a[4];this.curr_head=a[5];this.curr_sect=a[6];this.perpendicular=
467
+ a[7];this.read_only=a[8];this.media_changed=a[9];a[10]?(this.buffer||(this.buffer=new Ba(new ArrayBuffer(0))),this.buffer.set_state(a[10])):this.buffer=null};const Tc={[8]:"DEVICE RESET",[144]:"EXECUTE DEVICE DIAGNOSTIC",[231]:"FLUSH CACHE",[234]:"FLUSH CACHE EXT",[218]:"GET MEDIA STATUS",[236]:"IDENTIFY DEVICE",[161]:"IDENTIFY PACKET DEVICE",[225]:"IDLE IMMEDIATE",[145]:"INITIALIZE DEVICE PARAMETERS",[222]:"MEDIA LOCK",[0]:"NOP",[160]:"PACKET",[200]:"READ DMA",[37]:"READ DMA EXT",[41]:"READ MULTIPLE",
468
+ [196]:"READ MULTIPLE EXT",[248]:"READ NATIVE MAX ADDRESS",[39]:"READ NATIVE MAX ADDRESS EXT",[32]:"READ SECTORS",[36]:"READ SECTORS EXT",[64]:"READ VERIFY SECTORS",[245]:"SECURITY FREEZE LOCK",[239]:"SET FEATURES",[249]:"SET MAX",[198]:"SET MULTIPLE MODE",[224]:"STANDBY IMMEDIATE",[202]:"WRITE DMA",[53]:"WRITE DMA EXT",[57]:"WRITE MULTIPLE",[197]:"WRITE MULTIPLE EXT",[48]:"WRITE SECTORS",[52]:"WRITE SECTORS EXT",[16]:"<UNKNOWN 10h>",[240]:"<VENDOR-SPECIFIC F0h>"},Uc={[70]:{name:"GET CONFIGURATION",
469
469
  flags:0},[74]:{name:"GET EVENT STATUS NOTIFICATION",flags:0},[18]:{name:"INQUIRY",flags:0},[189]:{name:"MECHANISM STATUS",flags:0},[26]:{name:"MODE SENSE (6)",flags:0},[90]:{name:"MODE SENSE (10)",flags:0},[69]:{name:"PAUSE",flags:1},[30]:{name:"PREVENT ALLOW MEDIUM REMOVAL",flags:0},[40]:{name:"READ (10)",flags:1},[168]:{name:"READ (12)",flags:1},[37]:{name:"READ CAPACITY",flags:1},[190]:{name:"READ CD",flags:1},[81]:{name:"READ DISK INFORMATION",flags:1},[66]:{name:"READ SUBCHANNEL",flags:1},[67]:{name:"READ TOC PMA ATIP",
470
- flags:1},[82]:{name:"READ TRACK INFORMATION",flags:1},[3]:{name:"REQUEST SENSE",flags:0},[27]:{name:"START STOP UNIT",flags:0},[0]:{name:"TEST UNIT READY",flags:1}};function Uc(a,b,c){this.cpu=a;this.bus=b;this.secondary=this.primary=void 0;b=c&&c[0][0];const d=c&&c[1][0];if(b||d){b&&(this.primary=new Vc(this,0,c[0],496,1014,14));d&&(this.secondary=new Vc(this,1,c[1],368,886,15));c=b?this.primary.command_base:0;const e=b?this.primary.control_base:0,f=d?this.secondary.command_base:0,g=d?this.secondary.control_base:
470
+ flags:1},[82]:{name:"READ TRACK INFORMATION",flags:1},[3]:{name:"REQUEST SENSE",flags:0},[27]:{name:"START STOP UNIT",flags:0},[0]:{name:"TEST UNIT READY",flags:1}};function Vc(a,b,c){this.cpu=a;this.bus=b;this.secondary=this.primary=void 0;b=c&&c[0][0];const d=c&&c[1][0];if(b||d){b&&(this.primary=new Wc(this,0,c[0],496,1014,14));d&&(this.secondary=new Wc(this,1,c[1],368,886,15));c=b?this.primary.command_base:0;const e=b?this.primary.control_base:0,f=d?this.secondary.command_base:0,g=d?this.secondary.control_base:
471
471
  0;this.name="ide";this.pci_id=240;this.pci_space=[134,128,16,112,5,0,160,2,0,128,1,1,0,0,0,0,c&255|1,c>>8,0,0,e&255|1,e>>8,0,0,f&255|1,f>>8,0,0,g&255|1,g>>8,0,0,1,180,0,0,0,0,0,0,0,0,0,0,67,16,212,130,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.pci_bars=[b?{size:8}:void 0,b?{size:1}:void 0,d?{size:8}:void 0,d?{size:1}:
472
- void 0,{size:16}];a.devices.pci.register_device(this)}Object.seal(this)}Uc.prototype.get_state=function(){const a=[];a[0]=this.primary;a[1]=this.secondary;return a};Uc.prototype.set_state=function(a){this.primary&&this.primary.set_state(a[0]);this.secondary&&this.secondary.set_state(a[1])};function Vc(a,b,c,d,e,f){this.controller=a;this.channel_nr=b;this.cpu=a.cpu;this.bus=a.bus;this.command_base=d;this.control_base=e;this.irq=f;this.name="ide"+b;d=c?c[0]:void 0;c=c?c[1]:void 0;this.master=new X(this,
472
+ void 0,{size:16}];a.devices.pci.register_device(this)}Object.seal(this)}Vc.prototype.get_state=function(){const a=[];a[0]=this.primary;a[1]=this.secondary;return a};Vc.prototype.set_state=function(a){this.primary&&this.primary.set_state(a[0]);this.secondary&&this.secondary.set_state(a[1])};function Wc(a,b,c,d,e,f){this.controller=a;this.channel_nr=b;this.cpu=a.cpu;this.bus=a.bus;this.command_base=d;this.control_base=e;this.irq=f;this.name="ide"+b;d=c?c[0]:void 0;c=c?c[1]:void 0;this.master=new X(this,
473
473
  0,d?.buffer,d?.is_cdrom);this.slave=new X(this,1,c?.buffer,c?.is_cdrom);this.current_interface=this.master;this.device_control_reg=2;this.dma_command=this.dma_status=this.prdt_addr=0;a=a.cpu;a.io.register_read(this.command_base|0,this,function(){return this.current_interface.read_data(1)},function(){return this.current_interface.read_data(2)},function(){return this.current_interface.read_data(4)});a.io.register_read(this.command_base|1,this,function(){return this.current_interface.error_reg&255});
474
474
  a.io.register_read(this.command_base|2,this,function(){return this.current_interface.sector_count_reg&255});a.io.register_read(this.command_base|3,this,function(){return this.current_interface.lba_low_reg&255});a.io.register_read(this.command_base|4,this,function(){return this.current_interface.lba_mid_reg&255});a.io.register_read(this.command_base|5,this,function(){return this.current_interface.lba_high_reg&255});a.io.register_read(this.command_base|6,this,function(){return this.current_interface.device_reg&
475
475
  255});a.io.register_read(this.command_base|7,this,function(){const g=this.read_status();this.cpu.device_lower_irq(this.irq);return g});a.io.register_write(this.command_base|0,this,function(g){this.current_interface.write_data_port8(g)},function(g){this.current_interface.write_data_port16(g)},function(g){this.current_interface.write_data_port32(g)});a.io.register_write(this.command_base|1,this,function(g){this.current_interface.features_reg=(this.current_interface.features_reg<<8|g)&65535});a.io.register_write(this.command_base|
476
476
  2,this,function(g){this.current_interface.sector_count_reg=(this.current_interface.sector_count_reg<<8|g)&65535});a.io.register_write(this.command_base|3,this,function(g){this.current_interface.lba_low_reg=(this.current_interface.lba_low_reg<<8|g)&65535});a.io.register_write(this.command_base|4,this,function(g){this.current_interface.lba_mid_reg=(this.current_interface.lba_mid_reg<<8|g)&65535});a.io.register_write(this.command_base|5,this,function(g){this.current_interface.lba_high_reg=(this.current_interface.lba_high_reg<<
477
477
  8|g)&65535});a.io.register_write(this.command_base|6,this,function(g){const k=g&16;if(k&&this.current_interface===this.master||!k&&this.current_interface===this.slave)k?(B(`${this.current_interface.name}: select slave device (${this.channel_nr?"secondary":"primary"})`,32768),this.current_interface=this.slave):(B(`${this.current_interface.name}: select master device (${this.channel_nr?"secondary":"primary"})`,32768),this.current_interface=this.master);this.current_interface.device_reg=g;this.current_interface.is_lba=
478
478
  g>>6&1;this.current_interface.head=g&15});a.io.register_write(this.command_base|7,this,function(g){this.current_interface.status_reg&=-34;this.current_interface.ata_command(g);this.cpu.device_lower_irq(this.irq)});a.io.register_read(this.control_base|0,this,this.read_status);a.io.register_write(this.control_base|0,this,this.write_control);b=46080+8*b;a.io.register_read(b|0,this,this.dma_read_command8,void 0,this.dma_read_command);a.io.register_write(b|0,this,this.dma_write_command8,void 0,this.dma_write_command);
479
- a.io.register_read(b|2,this,this.dma_read_status);a.io.register_write(b|2,this,this.dma_write_status);a.io.register_read(b|4,this,void 0,void 0,this.dma_read_addr);a.io.register_write(b|4,this,void 0,void 0,this.dma_set_addr);Object.seal(this)}Vc.prototype.read_status=function(){return this.current_interface.drive_connected?this.current_interface.status_reg:0};Vc.prototype.write_control=function(a){a&4&&(B(`${this.current_interface.name}: soft reset via control port (lower IRQ ${this.irq})`,32768),
480
- this.cpu.device_lower_irq(this.irq),this.master.device_reset(),this.slave.device_reset());this.device_control_reg=a};Vc.prototype.dma_read_addr=function(){return this.prdt_addr};Vc.prototype.dma_set_addr=function(a){this.prdt_addr=a};Vc.prototype.dma_read_status=function(){return this.dma_status};Vc.prototype.dma_write_status=function(a){this.dma_status&=~(a&6)};Vc.prototype.dma_read_command=function(){return this.dma_read_command8()|this.dma_read_status()<<16};Vc.prototype.dma_read_command8=function(){return this.dma_command};
481
- Vc.prototype.dma_write_command=function(a){this.dma_write_command8(a&255);this.dma_write_status(a>>16&255)};Vc.prototype.dma_write_command8=function(a){const b=this.dma_command;this.dma_command=a&9;if((b&1)!==(a&1))if(0===(a&1))this.dma_status&=-2;else switch(this.dma_status|=1,this.current_interface.current_command){case 200:case 37:this.current_interface.do_ata_read_sectors_dma();break;case 202:case 53:this.current_interface.do_ata_write_sectors_dma();break;case 160:this.current_interface.do_atapi_dma();
482
- break;default:B(this.current_interface.name+": spurious DMA command write, current command: "+n(this.current_interface.current_command),32768),B(this.current_interface.name+": DMA clear status bit 1h, set status bit 2h",32768),this.dma_status&=-2,this.dma_status|=2,this.push_irq()}};Vc.prototype.push_irq=function(){0===(this.device_control_reg&2)&&(this.dma_status|=4,this.cpu.device_raise_irq(this.irq))};Vc.prototype.get_state=function(){var a=[];a[0]=this.master;a[1]=this.slave;a[2]=this.command_base;
483
- a[3]=this.irq;a[5]=this.control_base;a[7]=this.name;a[8]=this.device_control_reg;a[9]=this.prdt_addr;a[10]=this.dma_status;a[11]=this.current_interface===this.master;a[12]=this.dma_command;return a};Vc.prototype.set_state=function(a){this.master.set_state(a[0]);this.slave.set_state(a[1]);this.command_base=a[2];this.irq=a[3];this.control_base=a[5];this.name=a[7];this.device_control_reg=a[8];this.prdt_addr=a[9];this.dma_status=a[10];this.current_interface=a[11]?this.master:this.slave;this.dma_command=
479
+ a.io.register_read(b|2,this,this.dma_read_status);a.io.register_write(b|2,this,this.dma_write_status);a.io.register_read(b|4,this,void 0,void 0,this.dma_read_addr);a.io.register_write(b|4,this,void 0,void 0,this.dma_set_addr);Object.seal(this)}Wc.prototype.read_status=function(){return this.current_interface.drive_connected?this.current_interface.status_reg:0};Wc.prototype.write_control=function(a){a&4&&(B(`${this.current_interface.name}: soft reset via control port (lower IRQ ${this.irq})`,32768),
480
+ this.cpu.device_lower_irq(this.irq),this.master.device_reset(),this.slave.device_reset());this.device_control_reg=a};Wc.prototype.dma_read_addr=function(){return this.prdt_addr};Wc.prototype.dma_set_addr=function(a){this.prdt_addr=a};Wc.prototype.dma_read_status=function(){return this.dma_status};Wc.prototype.dma_write_status=function(a){this.dma_status&=~(a&6)};Wc.prototype.dma_read_command=function(){return this.dma_read_command8()|this.dma_read_status()<<16};Wc.prototype.dma_read_command8=function(){return this.dma_command};
481
+ Wc.prototype.dma_write_command=function(a){this.dma_write_command8(a&255);this.dma_write_status(a>>16&255)};Wc.prototype.dma_write_command8=function(a){const b=this.dma_command;this.dma_command=a&9;if((b&1)!==(a&1))if(0===(a&1))this.dma_status&=-2;else switch(this.dma_status|=1,this.current_interface.current_command){case 200:case 37:this.current_interface.do_ata_read_sectors_dma();break;case 202:case 53:this.current_interface.do_ata_write_sectors_dma();break;case 160:this.current_interface.do_atapi_dma();
482
+ break;default:B(this.current_interface.name+": spurious DMA command write, current command: "+n(this.current_interface.current_command),32768),B(this.current_interface.name+": DMA clear status bit 1h, set status bit 2h",32768),this.dma_status&=-2,this.dma_status|=2,this.push_irq()}};Wc.prototype.push_irq=function(){0===(this.device_control_reg&2)&&(this.dma_status|=4,this.cpu.device_raise_irq(this.irq))};Wc.prototype.get_state=function(){var a=[];a[0]=this.master;a[1]=this.slave;a[2]=this.command_base;
483
+ a[3]=this.irq;a[5]=this.control_base;a[7]=this.name;a[8]=this.device_control_reg;a[9]=this.prdt_addr;a[10]=this.dma_status;a[11]=this.current_interface===this.master;a[12]=this.dma_command;return a};Wc.prototype.set_state=function(a){this.master.set_state(a[0]);this.slave.set_state(a[1]);this.command_base=a[2];this.irq=a[3];this.control_base=a[5];this.name=a[7];this.device_control_reg=a[8];this.prdt_addr=a[9];this.dma_status=a[10];this.current_interface=a[11]?this.master:this.slave;this.dma_command=
484
484
  a[12]};function X(a,b,c,d){this.channel=a;this.name=a.name+"."+b;this.bus=a.bus;this.channel_nr=a.channel_nr;this.interface_nr=b;this.cpu=a.cpu;this.buffer=null;this.drive_connected=d||!!c;this.sector_size=d?2048:512;this.is_atapi=d;this.sector_count=0;this.head_count=this.is_atapi?1:0;this.device_reg=this.head=this.lba_high_reg=this.lba_mid_reg=this.features_reg=this.lba_low_reg=this.sector_count_reg=this.is_lba=this.cylinder_count=this.sectors_per_track=0;this.status_reg=80;this.sectors_per_drq=
485
485
  128;this.data_pointer=this.error_reg=0;this.data=new Uint8Array(65536);this.data16=new Uint16Array(this.data.buffer);this.data32=new Int32Array(this.data.buffer);this.data_end=this.data_length=0;this.current_command=-1;this.last_io_id=this.write_dest=0;this.in_progress_io_ids=new Set;this.cancelled_io_ids=new Set;this.current_atapi_command=-1;this.atapi_add_sense=this.atapi_sense_key=0;this.medium_changed=!1;this.set_disk_buffer(c);this.drive_connected&&B(`${this.name}: ${this.is_atapi?"ATAPI CD-ROM":
486
486
  "ATA HD"} device ready`,32768);Object.seal(this)}X.prototype.has_disk=function(){return!!this.buffer};X.prototype.eject=function(){this.is_atapi&&this.buffer&&(this.medium_changed=!0,this.buffer=null,this.status_reg=89,this.error_reg=96,this.push_irq())};X.prototype.set_cdrom=function(a){this.is_atapi&&a&&(this.set_disk_buffer(a),this.medium_changed=!0)};X.prototype.set_disk_buffer=function(a){if(a){this.buffer=a;this.is_atapi&&(this.status_reg=89,this.error_reg=96);this.sector_count=this.buffer.byteLength/
@@ -493,8 +493,8 @@ this.cylinder_count=Math.floor(this.cylinder_count));if(0===this.interface_nr){a
493
493
  this.channel.slave.error_reg=1,this.channel.slave.push_irq());break;case 145:this.status_reg=80;this.push_irq();break;case 160:this.is_atapi?(c=!1,this.data_allocate(12),this.data_end=12,this.sector_count_reg=1,this.status_reg=88,this.push_irq()):this.ata_abort_command();break;case 161:this.is_atapi?(this.create_identify_packet(),this.status_reg=88,this.push_irq()):this.ata_abort_command();break;case 198:B(this.name+": logical sectors per DRQ Block: "+n(this.sector_count_reg&255),32768);this.sectors_per_drq=
494
494
  this.sector_count_reg&255;this.status_reg=80;this.push_irq();break;case 200:case 37:c=!1;this.ata_read_sectors_dma(a);break;case 202:case 53:c=!1;this.ata_write_sectors_dma(a);break;case 64:this.status_reg=80;this.push_irq();break;case 218:this.is_atapi&&(this.buffer||(this.error_reg|=2),this.medium_changed&&(this.error_reg|=32,this.medium_changed=!1),this.error_reg|=64);this.status_reg=80;this.push_irq();break;case 224:this.status_reg=80;this.push_irq();break;case 225:this.status_reg=80;this.push_irq();
495
495
  break;case 231:this.status_reg=80;this.push_irq();break;case 234:this.status_reg=80;this.push_irq();break;case 236:this.is_atapi?(this.lba_mid_reg=20,this.lba_high_reg=235,this.ata_abort_command()):(this.create_identify_packet(),this.status_reg=88,this.push_irq());break;case 239:this.status_reg=80;this.push_irq();break;case 222:this.status_reg=64;this.push_irq();break;case 245:this.status_reg=80;this.push_irq();break;case 249:this.ata_abort_command();break;case 0:this.ata_abort_command();break;case 240:B(`${this.name}: error: unimplemented vendor-specific ATA command ${n(a)}: ABORT [${this.capture_regs()}]`,
496
- 32768);this.ata_abort_command();break;default:l(!1,`${this.name}: error: unimplemented ATA command ${n(a)}: ABORT [${this.capture_regs()}]`,32768),this.ata_abort_command()}c&&(b=`[${b}] -> [${this.capture_regs()}]`,c=this.status_reg&1?this.error_reg&4?"ABORT":"ERROR":"OK",B(`${this.name}: ATA command ${Sc[a]} (${n(a)}): ${c} ${b}`,32768))}else B(`${this.name}: ATA command ${Sc[a]} (${n(a)}) ignored: no slave drive connected`,32768)};X.prototype.atapi_handle=function(){const a=this.data[0],b=Tc[a]?
497
- Tc[a].name:"<undefined>";var c=Tc[a]?Tc[a].flags:0,d=this.capture_regs(),e=!0;let f;this.data_pointer=0;this.current_atapi_command=a;3!==a&&(this.atapi_add_sense=this.atapi_sense_key=0);if(!this.buffer&&c&1)this.atapi_check_condition_response(2,58),this.push_irq(),B(`${this.name}: ATAPI command ${b} (${n(a)}) without medium: ERROR [${d}]`,32768);else{switch(a){case 0:this.buffer?(this.data_allocate(0),this.data_end=this.data_length,this.status_reg=80):this.atapi_check_condition_response(2,58);break;
496
+ 32768);this.ata_abort_command();break;default:l(!1,`${this.name}: error: unimplemented ATA command ${n(a)}: ABORT [${this.capture_regs()}]`,32768),this.ata_abort_command()}c&&(b=`[${b}] -> [${this.capture_regs()}]`,c=this.status_reg&1?this.error_reg&4?"ABORT":"ERROR":"OK",B(`${this.name}: ATA command ${Tc[a]} (${n(a)}): ${c} ${b}`,32768))}else B(`${this.name}: ATA command ${Tc[a]} (${n(a)}) ignored: no slave drive connected`,32768)};X.prototype.atapi_handle=function(){const a=this.data[0],b=Uc[a]?
497
+ Uc[a].name:"<undefined>";var c=Uc[a]?Uc[a].flags:0,d=this.capture_regs(),e=!0;let f;this.data_pointer=0;this.current_atapi_command=a;3!==a&&(this.atapi_add_sense=this.atapi_sense_key=0);if(!this.buffer&&c&1)this.atapi_check_condition_response(2,58),this.push_irq(),B(`${this.name}: ATAPI command ${b} (${n(a)}) without medium: ERROR [${d}]`,32768);else{switch(a){case 0:this.buffer?(this.data_allocate(0),this.data_end=this.data_length,this.status_reg=80):this.atapi_check_condition_response(2,58);break;
498
498
  case 3:this.data_allocate(this.data[4]);this.data_end=this.data_length;this.status_reg=88;this.data[0]=240;this.data[2]=this.atapi_sense_key;this.data[7]=8;this.data[12]=this.atapi_add_sense;this.atapi_add_sense=this.atapi_sense_key=0;break;case 18:c=this.data[4];this.status_reg=88;f="lun="+n(this.data[1],2)+" length="+c;this.data.set([5,128,1,49,31,0,0,0,83,79,78,89,32,32,32,32,67,68,45,82,79,77,32,67,68,85,45,49,48,48,48,32,49,46,49,97]);this.data_end=this.data_length=Math.min(36,c);break;case 26:this.data_allocate(this.data[4]);
499
499
  this.data_end=this.data_length;this.status_reg=88;break;case 30:this.data_allocate(0);this.data_end=this.data_length;this.status_reg=80;break;case 37:c=this.sector_count-1;this.data_set(new Uint8Array([c>>24&255,c>>16&255,c>>8&255,c&255,0,0,this.sector_size>>8&255,this.sector_size&255]));this.data_end=this.data_length;this.status_reg=88;break;case 40:case 168:e=!1;this.features_reg&1?this.atapi_read_dma(this.data):this.atapi_read(this.data);break;case 66:c=this.data[8];f="length="+c;this.data_allocate(Math.min(8,
500
500
  c));this.data_end=this.data_length;this.status_reg=88;break;case 67:c=this.data[8]|this.data[7]<<8;var g=this.data[9]>>6;f=`${n(g,2)} length=${c} ${!!(this.data[1]&2)} ${n(this.data[6])}`;this.data_allocate(c);this.data_end=this.data_length;0===g?(c=this.sector_count,this.data.set(new Uint8Array([0,18,1,1,0,20,1,0,0,0,0,0,0,22,170,0,c>>24,c>>16&255,c>>8&255,c&255]))):1===g?this.data.set(new Uint8Array([0,10,1,1,0,0,0,0,0,0,0,0])):l(!1,this.name+": error: unimplemented format: "+g);this.status_reg=
@@ -527,13 +527,13 @@ this.channel.dma_status&=-2;this.current_command=-1});this.report_write(a)};X.pr
527
527
  0])};X.prototype.read_buffer=function(a,b,c){const d=this.last_io_id++;this.in_progress_io_ids.add(d);this.buffer.get(a,b,e=>{if(this.cancelled_io_ids.delete(d))l(!this.in_progress_io_ids.has(d));else{var f=this.in_progress_io_ids.delete(d);l(f);c(e)}})};X.prototype.cancel_io_operations=function(){for(const a of this.in_progress_io_ids)this.cancelled_io_ids.add(a);this.in_progress_io_ids.clear()};X.prototype.get_state=function(){var a=[];a[0]=this.sector_count_reg;a[1]=this.cylinder_count;a[2]=this.lba_high_reg;
528
528
  a[3]=this.lba_mid_reg;a[4]=this.data_pointer;a[5]=0;a[6]=0;a[7]=0;a[8]=0;a[9]=this.device_reg;a[10]=this.error_reg;a[11]=this.head;a[12]=this.head_count;a[13]=this.is_atapi;a[14]=this.is_lba;a[15]=this.features_reg;a[16]=this.data;a[17]=this.data_length;a[18]=this.lba_low_reg;a[19]=this.sector_count;a[20]=this.sector_size;a[21]=this.sectors_per_drq;a[22]=this.sectors_per_track;a[23]=this.status_reg;a[24]=this.write_dest;a[25]=this.current_command;a[26]=this.data_end;a[27]=this.current_atapi_command;
529
529
  a[28]=this.buffer;return a};X.prototype.set_state=function(a){this.sector_count_reg=a[0];this.cylinder_count=a[1];this.lba_high_reg=a[2];this.lba_mid_reg=a[3];this.data_pointer=a[4];this.device_reg=a[9];this.error_reg=a[10];this.head=a[11];this.head_count=a[12];this.is_atapi=a[13];this.is_lba=a[14];this.features_reg=a[15];this.data=a[16];this.data_length=a[17];this.lba_low_reg=a[18];this.sector_count=a[19];this.sector_size=a[20];this.sectors_per_drq=a[21];this.sectors_per_track=a[22];this.status_reg=
530
- a[23];this.write_dest=a[24];this.current_command=a[25];this.data_end=a[26];this.current_atapi_command=a[27];this.data16=new Uint16Array(this.data.buffer);this.data32=new Int32Array(this.data.buffer);this.buffer&&this.buffer.set_state(a[28]);this.drive_connected=this.is_atapi||this.buffer;this.medium_changed=!1};function Wc(a,b,c){this.bus=b;this.id=a.devices.net?1:0;this.status=this.pairs=1;this.preserve_mac_from_state_image=c;this.mac=new Uint8Array([0,34,21,255*Math.random()|0,255*Math.random()|
531
- 0,255*Math.random()|0]);this.bus.send("net"+this.id+"-mac",Bc(this.mac));b=[];for(c=0;c<this.pairs;++c)b.push({size_supported:1024,notify_offset:0}),b.push({size_supported:1024,notify_offset:1});b.push({size_supported:16,notify_offset:2});this.virtio=new Ec(a,{name:"virtio-net",pci_id:80,device_id:4161,subsystem_device_id:1,common:{initial_port:51200,queues:b,features:[5,16,22,3,17,23,32],on_driver_ok:()=>{}},notification:{initial_port:51456,single_handler:!1,handlers:[()=>{},d=>{const e=this.virtio.queues[d];
530
+ a[23];this.write_dest=a[24];this.current_command=a[25];this.data_end=a[26];this.current_atapi_command=a[27];this.data16=new Uint16Array(this.data.buffer);this.data32=new Int32Array(this.data.buffer);this.buffer&&this.buffer.set_state(a[28]);this.drive_connected=this.is_atapi||this.buffer;this.medium_changed=!1};function Xc(a,b,c){this.bus=b;this.id=a.devices.net?1:0;this.status=this.pairs=1;this.preserve_mac_from_state_image=c;this.mac=new Uint8Array([0,34,21,255*Math.random()|0,255*Math.random()|
531
+ 0,255*Math.random()|0]);this.bus.send("net"+this.id+"-mac",Cc(this.mac));b=[];for(c=0;c<this.pairs;++c)b.push({size_supported:1024,notify_offset:0}),b.push({size_supported:1024,notify_offset:1});b.push({size_supported:16,notify_offset:2});this.virtio=new Fc(a,{name:"virtio-net",pci_id:80,device_id:4161,subsystem_device_id:1,common:{initial_port:51200,queues:b,features:[5,16,22,3,17,23,32],on_driver_ok:()=>{}},notification:{initial_port:51456,single_handler:!1,handlers:[()=>{},d=>{const e=this.virtio.queues[d];
532
532
  for(;e.has_request();){const f=e.pop_request(),g=new Uint8Array(f.length_readable);f.get_next_blob(g);this.bus.send("net"+this.id+"-send",g.subarray(12));this.bus.send("eth-transmit-end",[g.length-12]);this.virtio.queues[d].push_reply(f)}this.virtio.queues[d].flush_replies()},d=>{if(d!==2*this.pairs)l(!1,"VirtioNet Notified for wrong queue: "+d+" (expected queue_id of 3)");else for(var e=this.virtio.queues[d];e.has_request();){const k=e.pop_request();var f=new Uint8Array(k.length_readable);k.get_next_blob(f);
533
- var g=K(["b","b"],f,{offset:0});const m=g[0];g=g[1];switch(m<<8|g){case 1024:f=K(["h"],f,{offset:2});l(1===f[0]);this.Send(d,k,new Uint8Array([0]));break;case 257:this.mac=f.subarray(2,8);this.Send(d,k,new Uint8Array([0]));this.bus.send("net"+this.id+"-mac",Bc(this.mac));break;default:l(!1," VirtioNet received unknown command: "+m+":"+g);this.Send(d,k,new Uint8Array([1]));return}}}]},isr_status:{initial_port:50944},device_specific:{initial_port:50688,struct:[0,1,2,3,4,5].map((d,e)=>({bytes:1,name:"mac_"+
533
+ var g=J(["b","b"],f,{offset:0});const m=g[0];g=g[1];switch(m<<8|g){case 1024:f=J(["h"],f,{offset:2});l(1===f[0]);this.Send(d,k,new Uint8Array([0]));break;case 257:this.mac=f.subarray(2,8);this.Send(d,k,new Uint8Array([0]));this.bus.send("net"+this.id+"-mac",Cc(this.mac));break;default:l(!1," VirtioNet received unknown command: "+m+":"+g);this.Send(d,k,new Uint8Array([1]));return}}}]},isr_status:{initial_port:50944},device_specific:{initial_port:50688,struct:[0,1,2,3,4,5].map((d,e)=>({bytes:1,name:"mac_"+
534
534
  e,read:()=>this.mac[e],write:()=>{}})).concat([{bytes:2,name:"status",read:()=>this.status,write:()=>{}},{bytes:2,name:"max_pairs",read:()=>this.pairs,write:()=>{}},{bytes:2,name:"mtu",read:()=>1500,write:()=>{}}])}});this.bus.register("net"+this.id+"-receive",d=>{this.bus.send("eth-receive-end",[d.length]);const e=new Uint8Array(12+d.byteLength);(new DataView(e.buffer,e.byteOffset,e.byteLength)).setInt16(10,1);e.set(d,12);d=this.virtio.queues[0];d.has_request()?(d=d.pop_request(),d.set_next_blob(e),
535
- this.virtio.queues[0].push_reply(d),this.virtio.queues[0].flush_replies()):console.log("No buffer to write into!")},this)}Wc.prototype.get_state=function(){const a=[];a[0]=this.virtio;a[1]=this.id;a[2]=this.mac;return a};Wc.prototype.set_state=function(a){this.virtio.set_state(a[0]);this.id=a[1];this.preserve_mac_from_state_image&&(this.mac=a[2],this.bus.send("net"+this.id+"-mac",Bc(this.mac)))};Wc.prototype.reset=function(){this.virtio.reset()};Wc.prototype.Send=function(a,b,c){b.set_next_blob(c);
536
- this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};Wc.prototype.Ack=function(a,b){this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};const Xc=Uint32Array.from([655360,655360,720896,753664]),Yc=Uint32Array.from([131072,65536,32768,32768]);function Y(a,b,c,d){this.cpu=a;this.bus=b;this.screen=c;this.vga_memory_size=d;this.cursor_address=0;this.cursor_scanline_start=14;this.cursor_scanline_end=15;this.max_cols=80;this.max_rows=25;this.virtual_height=this.virtual_width=
535
+ this.virtio.queues[0].push_reply(d),this.virtio.queues[0].flush_replies()):console.log("No buffer to write into!")},this)}Xc.prototype.get_state=function(){const a=[];a[0]=this.virtio;a[1]=this.id;a[2]=this.mac;return a};Xc.prototype.set_state=function(a){this.virtio.set_state(a[0]);this.id=a[1];this.preserve_mac_from_state_image&&(this.mac=a[2],this.bus.send("net"+this.id+"-mac",Cc(this.mac)))};Xc.prototype.reset=function(){this.virtio.reset()};Xc.prototype.Send=function(a,b,c){b.set_next_blob(c);
536
+ this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};Xc.prototype.Ack=function(a,b){this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};const Yc=Uint32Array.from([655360,655360,720896,753664]),Zc=Uint32Array.from([131072,65536,32768,32768]);function Y(a,b,c,d){this.cpu=a;this.bus=b;this.screen=c;this.vga_memory_size=d;this.cursor_address=0;this.cursor_scanline_start=14;this.cursor_scanline_end=15;this.max_cols=80;this.max_rows=25;this.virtual_height=this.virtual_width=
537
537
  this.screen_height=this.screen_width=0;this.layers=[];this.start_address_latched=this.start_address=0;this.crtc=new Uint8Array(25);this.line_compare=this.offset_register=this.preset_row_scan=this.underline_location_register=this.vertical_blank_start=this.vertical_display_enable_end=this.horizontal_blank_start=this.horizontal_display_enable_end=this.crtc_mode=0;this.graphical_mode=!1;this.vga256_palette=new Int32Array(256);this.latch_dword=0;this.svga_version=45253;this.svga_height=this.svga_width=
538
538
  0;this.svga_enabled=!1;this.svga_bpp=32;this.svga_offset_y=this.svga_offset_x=this.svga_offset=this.svga_bank_offset=0;this.vga_memory_size=void 0===this.vga_memory_size||262144>this.vga_memory_size?262144:268435456<this.vga_memory_size?268435456:ma(this.vga_memory_size);B("effective vga memory size: "+this.vga_memory_size,256);this.pci_space=[52,18,17,17,3,1,0,0,0,0,0,3,0,0,0,0,8,14680064,57344,224,0,0,0,0,0,0,191,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,26,0,17,0,0,190,254,0,0,0,0,0,0,0,0,0,0,0,
539
539
  0];this.pci_id=144;this.pci_bars=[{size:this.vga_memory_size}];this.pci_rom_size=65536;this.pci_rom_address=4272947200;this.name="vga";this.dac_state=this.dac_color_index_read=this.dac_color_index_write=this.index_crtc=0;this.dac_mask=255;this.dac_map=new Uint8Array(16);this.attribute_controller_index=-1;this.palette_source=32;this.color_select=this.horizontal_panning=this.color_plane_enable=this.attribute_mode=0;this.sequencer_index=-1;this.plane_write_bm=15;this.clocking_mode=this.sequencer_memory_mode=
@@ -551,8 +551,8 @@ a[14];this.svga_width=a[15];this.svga_height=a[16];this.crtc_mode=a[17];this.svg
551
551
  a[34];this.miscellaneous_output_register=a[35];this.port_3DA_value=a[36];this.dispi_index=a[37];this.dispi_enable_value=a[38];this.svga_memory.set(a[39]);this.attribute_controller_index=a[41];this.offset_register=a[42];this.planar_setreset=a[43];this.planar_setreset_enable=a[44];this.start_address_latched=a[45];this.crtc.set(a[46]);this.horizontal_display_enable_end=a[47];this.horizontal_blank_start=a[48];this.vertical_display_enable_end=a[49];this.vertical_blank_start=a[50];this.underline_location_register=
552
552
  a[51];this.preset_row_scan=a[52];this.offset_register=a[53];this.palette_source=a[54];this.attribute_mode=a[55];this.color_plane_enable=a[56];this.horizontal_panning=a[57];this.color_select=a[58];this.clocking_mode=a[59];this.line_compare=a[60];a[61]&&this.pixel_buffer.set(a[61]);this.dac_mask=void 0===a[62]?255:a[62];this.character_map_select=void 0===a[63]?0:a[63];this.font_page_ab_enabled=void 0===a[64]?0:a[64];this.screen.set_mode(this.graphical_mode);this.graphical_mode?(this.screen_height=this.screen_width=
553
553
  0,this.svga_enabled?(this.set_size_graphical(this.svga_width,this.svga_height,this.svga_width,this.svga_height,this.svga_bpp),this.update_layers()):(this.update_vga_size(),this.update_layers(),this.complete_replot())):(this.set_font_bitmap(!0),this.set_size_text(this.max_cols,this.max_rows),this.set_font_page(),this.update_cursor_scanline(),this.update_cursor());this.complete_redraw()};Y.prototype.vga_memory_read=function(a){if(this.svga_enabled)return this.cpu.read8((a-655360|this.svga_bank_offset)+
554
- 3758096384|0);var b=this.miscellaneous_graphics_register>>2&3;a-=Xc[b];if(0>a||a>=Yc[b])return B("vga read outside memory space: addr:"+n(a>>>0),256),0;this.latch_dword=this.plane0[a];this.latch_dword|=this.plane1[a]<<8;this.latch_dword|=this.plane2[a]<<16;this.latch_dword|=this.plane3[a]<<24;if(this.planar_mode&8)return b=255,this.color_dont_care&1&&(b&=this.plane0[a]^~(this.color_compare&1?255:0)),this.color_dont_care&2&&(b&=this.plane1[a]^~(this.color_compare&2?255:0)),this.color_dont_care&4&&
555
- (b&=this.plane2[a]^~(this.color_compare&4?255:0)),this.color_dont_care&8&&(b&=this.plane3[a]^~(this.color_compare&8?255:0)),b;b=this.plane_read;this.graphical_mode?this.sequencer_memory_mode&8?(b=a&3,a&=-4):this.planar_mode&16&&(b=a&1,a&=-2):b&=3;return this.vga_memory[b<<16|a]};Y.prototype.vga_memory_write=function(a,b){if(this.svga_enabled)this.cpu.write8((a-655360|this.svga_bank_offset)+3758096384|0,b);else{var c=this.miscellaneous_graphics_register>>2&3;a-=Xc[c];0>a||a>=Yc[c]?B("vga write outside memory space: addr:"+
554
+ 3758096384|0);var b=this.miscellaneous_graphics_register>>2&3;a-=Yc[b];if(0>a||a>=Zc[b])return B("vga read outside memory space: addr:"+n(a>>>0),256),0;this.latch_dword=this.plane0[a];this.latch_dword|=this.plane1[a]<<8;this.latch_dword|=this.plane2[a]<<16;this.latch_dword|=this.plane3[a]<<24;if(this.planar_mode&8)return b=255,this.color_dont_care&1&&(b&=this.plane0[a]^~(this.color_compare&1?255:0)),this.color_dont_care&2&&(b&=this.plane1[a]^~(this.color_compare&2?255:0)),this.color_dont_care&4&&
555
+ (b&=this.plane2[a]^~(this.color_compare&4?255:0)),this.color_dont_care&8&&(b&=this.plane3[a]^~(this.color_compare&8?255:0)),b;b=this.plane_read;this.graphical_mode?this.sequencer_memory_mode&8?(b=a&3,a&=-4):this.planar_mode&16&&(b=a&1,a&=-2):b&=3;return this.vga_memory[b<<16|a]};Y.prototype.vga_memory_write=function(a,b){if(this.svga_enabled)this.cpu.write8((a-655360|this.svga_bank_offset)+3758096384|0,b);else{var c=this.miscellaneous_graphics_register>>2&3;a-=Yc[c];0>a||a>=Zc[c]?B("vga write outside memory space: addr:"+
556
556
  n(a>>>0)+", value:"+n(b),256):this.graphical_mode?this.vga_memory_write_graphical(a,b):this.plane_write_bm&3?this.vga_memory_write_text_mode(a,b):this.plane_write_bm&4&&(this.plane2[a]=b)}};Y.prototype.vga_memory_write_graphical=function(a,b){var c=this.planar_mode&3,d=this.apply_feed(this.planar_bitmap),e=this.apply_expand(this.planar_setreset),f=this.apply_expand(this.planar_setreset_enable);switch(c){case 0:b=this.apply_rotate(b);var g=this.apply_feed(b);g=this.apply_setreset(g,f);g=this.apply_logical(g,
557
557
  this.latch_dword);g=this.apply_bitmask(g,d);break;case 1:g=this.latch_dword;break;case 2:g=this.apply_expand(b);g=this.apply_logical(g,this.latch_dword);g=this.apply_bitmask(g,d);break;case 3:b=this.apply_rotate(b),d&=this.apply_feed(b),g=this.apply_bitmask(e,d)}b=15;switch(this.sequencer_memory_mode&12){case 0:b=5<<(a&1);a&=-2;break;case 8:case 12:b=1<<(a&3),a&=-4}b&=this.plane_write_bm;b&1&&(this.plane0[a]=g>>0&255);b&2&&(this.plane1[a]=g>>8&255);b&4&&(this.plane2[a]=g>>16&255);b&8&&(this.plane3[a]=
558
558
  g>>24&255);a=this.vga_addr_to_pixel(a);this.partial_replot(a,a+7)};Y.prototype.apply_feed=function(a){return a|a<<8|a<<16|a<<24};Y.prototype.apply_expand=function(a){return(a&1?255:0)|(a&2?255:0)<<8|(a&4?255:0)<<16|(a&8?255:0)<<24};Y.prototype.apply_rotate=function(a){return(a|a<<8)>>>(this.planar_rotate_reg&7)&255};Y.prototype.apply_setreset=function(a,b){var c=this.apply_expand(this.planar_setreset);return(a|b&c)&(~b|c)};Y.prototype.apply_logical=function(a,b){switch(this.planar_rotate_reg&24){case 8:return a&
@@ -565,7 +565,7 @@ this.cpu.svga_mark_dirty():(this.diff_addr_min=0,this.diff_addr_max=524288):this
565
565
  this.underline_location_register&64;a-=this.attribute_mode&64;return a>>>6};Y.prototype.vga_addr_to_pixel=function(a){var b=this.vga_addr_shift_count();if(~this.crtc_mode&3){var c=a-this.start_address;c&=this.crtc_mode<<13|-24577;c<<=b;var d=c/this.virtual_width|0;c%=this.virtual_width;switch(this.crtc_mode&3){case 2:d=d<<1|a>>13&1;break;case 1:d=d<<1|a>>14&1;break;case 0:d=d<<2|a>>13&3}return d*this.virtual_width+c+(this.start_address<<b)}return a<<b};Y.prototype.scan_line_to_screen_row=function(a){this.max_scan_line&
566
566
  128&&(a>>>=1);a=Math.ceil(a/(1+(this.max_scan_line&31)));this.crtc_mode&1||(a<<=1);this.crtc_mode&2||(a<<=1);return a};Y.prototype.set_size_text=function(a,b){l(!this.graphical_mode);this.max_cols=a;this.max_rows=b;this.screen.set_size_text(a,b);this.bus.send("screen-set-size",[a,b,0])};Y.prototype.set_size_graphical=function(a,b,c,d,e){l(this.graphical_mode);c=Math.max(c,1);d=Math.max(d,1);if(this.screen_width!==a||this.screen_height!==b||this.virtual_width!==c||this.virtual_height!==d){this.screen_width=
567
567
  a;this.screen_height=b;this.virtual_width=c;this.virtual_height=d;if("undefined"!==typeof ImageData){const f=c*d,g=this.cpu.svga_allocate_dest_buffer(f)>>>0;this.dest_buffet_offset=g;this.image_data=new ImageData(new Uint8ClampedArray(this.cpu.wasm_memory.buffer,g,4*f),c,d);this.cpu.svga_mark_dirty()}this.screen.set_size_graphical(a,b,c,d);this.bus.send("screen-set-size",[a,b,e])}};Y.prototype.update_vga_size=function(){if(!this.svga_enabled){var a=Math.min(1+this.horizontal_display_enable_end,this.horizontal_blank_start),
568
- b=Math.min(1+this.vertical_display_enable_end,this.vertical_blank_start);if(a&&b)if(this.graphical_mode){a<<=3;var c=this.offset_register<<4,d=4;this.attribute_mode&64?(a>>>=1,c>>>=1,d=8):this.attribute_mode&2&&(d=1);b=this.scan_line_to_screen_row(b);var e=Yc[0];const f=this.vga_bytes_per_line();this.set_size_graphical(a,b,c,f?Math.ceil(e/f):b,d);this.update_vertical_retrace();this.update_layers()}else this.max_scan_line&128&&(b>>>=1),c=b/(1+(this.max_scan_line&31))|0,a&&c&&this.set_size_text(a,c)}};
568
+ b=Math.min(1+this.vertical_display_enable_end,this.vertical_blank_start);if(a&&b)if(this.graphical_mode){a<<=3;var c=this.offset_register<<4,d=4;this.attribute_mode&64?(a>>>=1,c>>>=1,d=8):this.attribute_mode&2&&(d=1);b=this.scan_line_to_screen_row(b);var e=Zc[0];const f=this.vga_bytes_per_line();this.set_size_graphical(a,b,c,f?Math.ceil(e/f):b,d);this.update_vertical_retrace();this.update_layers()}else this.max_scan_line&128&&(b>>>=1),c=b/(1+(this.max_scan_line&31))|0,a&&c&&this.set_size_text(a,c)}};
569
569
  Y.prototype.update_layers=function(){this.graphical_mode||this.text_mode_redraw();if(this.svga_enabled)this.layers=[];else if(this.virtual_width&&this.screen_width)if(!this.palette_source||this.clocking_mode&32)this.layers=[],this.screen.clear_screen();else{var a=this.start_address_latched,b=this.horizontal_panning;this.attribute_mode&64&&(b>>>=1);var c=this.preset_row_scan>>5&3,d=this.vga_addr_to_pixel(a+c);a=d/this.virtual_width|0;var e=d%this.virtual_width+b;d=this.scan_line_to_screen_row(1+this.line_compare);
570
570
  d=Math.min(d,this.screen_height);var f=this.screen_height-d;this.layers=[];e=-e;for(var g=0;e<this.screen_width;e+=this.virtual_width,g++)this.layers.push({image_data:this.image_data,screen_x:e,screen_y:0,buffer_x:0,buffer_y:a+g,buffer_width:this.virtual_width,buffer_height:d});a=0;this.attribute_mode&32||(a=this.vga_addr_to_pixel(c)+b);e=-a;for(g=0;e<this.screen_width;e+=this.virtual_width,g++)this.layers.push({image_data:this.image_data,screen_x:e,screen_y:d,buffer_x:0,buffer_y:g,buffer_width:this.virtual_width,
571
571
  buffer_height:f})}};Y.prototype.update_vertical_retrace=function(){this.port_3DA_value|=8;this.start_address_latched!==this.start_address&&(this.start_address_latched=this.start_address,this.update_layers())};Y.prototype.update_cursor_scanline=function(){var a=this.max_scan_line&31;const b=Math.min(a,this.cursor_scanline_start&31);a=Math.min(a,this.cursor_scanline_end&31);this.screen.update_cursor_scanline(b,a,!(this.cursor_scanline_start&32)&&b<a)};Y.prototype.port3C0_write=function(a){if(-1===this.attribute_controller_index)B("attribute controller index register: "+
@@ -603,14 +603,14 @@ g[k]<<4|g[k+1];else for(r=0;8>r;r++,a++)this.pixel_buffer[a]=g[r]}};Y.prototype.
603
603
  e|=this.color_select<<4&192;a<=b;a++)f=this.dac_map[this.pixel_buffer[a]&this.color_plane_enable]&d|e,f=this.vga256_palette[f],c[a]=f&65280|f<<16|f>>16|4278190080};Y.prototype.screen_fill_buffer=function(){if(this.graphical_mode){if(0===this.image_data.data.byteLength){var a=new Uint8ClampedArray(this.cpu.wasm_memory.buffer,this.dest_buffet_offset,4*this.virtual_width*this.virtual_height);this.image_data=new ImageData(a,this.virtual_width,this.virtual_height);this.update_layers()}if(this.svga_enabled){a=
604
604
  0;let d=this.svga_height;if(8===this.svga_bpp){const e=new Int32Array(this.cpu.wasm_memory.buffer,this.dest_buffet_offset,this.screen_width*this.screen_height),f=new Uint8Array(this.cpu.wasm_memory.buffer,this.svga_memory.byteOffset,this.vga_memory_size);for(var b=0;b<e.length;b++){var c=this.vga256_palette[f[b]];e[b]=c&65280|c<<16|c>>16|4278190080}}else this.cpu.svga_fill_pixel_buffer(this.svga_bpp,this.svga_offset),b=15===this.svga_bpp?2:this.svga_bpp/8,a=((this.cpu.svga_dirty_bitmap_min_offset[0]/
605
605
  b|0)-this.svga_offset)/this.svga_width|0,d=(((this.cpu.svga_dirty_bitmap_max_offset[0]/b|0)-this.svga_offset)/this.svga_width|0)+1;a<d&&(a=Math.max(a,0),d=Math.min(d,this.svga_height),this.screen.update_buffer([{image_data:this.image_data,screen_x:0,screen_y:a,buffer_x:0,buffer_y:a,buffer_width:this.svga_width,buffer_height:d-a}]))}else this.vga_replot(),this.vga_redraw(),this.screen.update_buffer(this.layers);this.reset_diffs()}this.update_vertical_retrace()};Y.prototype.set_font_bitmap=function(a){const b=
606
- this.max_scan_line&31;if(b&&!this.graphical_mode){const c=!!(this.clocking_mode&8);this.screen.set_font_bitmap(b+1,!c&&!(this.clocking_mode&1),c,!!(this.attribute_mode&4),this.plane2,a)}};Y.prototype.set_font_page=function(){const a=[0,2,4,6,1,3,5,7],b=(this.character_map_select&12)>>2|(this.character_map_select&32)>>3,c=this.character_map_select&3|(this.character_map_select&16)>>2;this.font_page_ab_enabled=b!==c;this.screen.set_font_page(a[b],a[c]);this.complete_redraw()};const Zc="SWAP_IN SWAP_OUT MAJFLT MINFLT MEMFREE MEMTOT AVAIL CACHES HTLB_PGALLOC HTLB_PGFAIL".split(" ");
607
- function $c(a,b){this.bus=b;this.zeroed=this.fp_cmd=this.actual=this.num_pages=0;this.virtio=new Ec(a,{name:"virtio-balloon",pci_id:88,device_id:4165,subsystem_device_id:5,common:{initial_port:55296,queues:[{size_supported:32,notify_offset:0},{size_supported:32,notify_offset:0},{size_supported:2,notify_offset:1},{size_supported:64,notify_offset:2}],features:[1,3,32],on_driver_ok:()=>{B("Balloon setup",2048)}},notification:{initial_port:55552,single_handler:!1,handlers:[c=>{const d=this.virtio.queues[c];
608
- for(;d.has_request();){var e=d.pop_request();const f=new Uint8Array(e.length_readable);e.get_next_blob(f);this.virtio.queues[c].push_reply(e);e=f.byteLength/4;this.actual+=0===c?e:-e}this.virtio.queues[c].flush_replies()},c=>{var d=this.virtio.queues[c];if(d.has_request()){d=d.pop_request();const e=new Uint8Array(d.length_readable);d.get_next_blob(e);let f={};for(let g=0;g<d.length_readable;g+=10){let [k,m]=K(["h","d"],e,{offset:g});f[Zc[k]]=m}this.virtio.queues[c].push_reply(d);this.stats_cb&&this.stats_cb(f)}},
609
- c=>{const d=this.virtio.queues[c];for(;d.has_request();){const f=d.pop_request();if(0<f.length_readable){var e=new Uint8Array(f.length_readable);f.get_next_blob(e);[e]=K(["w"],e,{offset:0});0===e&&(this.free_cb&&this.free_cb(this.zeroed),1<this.fp_cmd&&(this.fp_cmd=1),this.virtio.notify_config_changes())}if(0<f.length_writable)for(new Uint8Array(0),e=0;e<f.write_buffers.length;++e){let g=f.write_buffers[e];this.zeroed+=g.len;this.virtio.cpu.zero_memory(g.addr_low,g.len)}this.virtio.queues[c].push_reply(f)}this.virtio.queues[c].flush_replies()}]},
610
- isr_status:{initial_port:55040},device_specific:{initial_port:54784,struct:[{bytes:4,name:"num_pages",read:()=>this.num_pages,write:()=>{}},{bytes:4,name:"actual",read:()=>this.actual,write:()=>{}},{bytes:4,name:"free_page_hint_cmd_id",read:()=>this.fp_cmd,write:()=>{}}]}})}$c.prototype.Inflate=function(a){this.num_pages+=a;this.virtio.notify_config_changes()};$c.prototype.Deflate=function(a){this.num_pages-=a;this.virtio.notify_config_changes()};$c.prototype.Cleanup=function(a){this.fp_cmd=2;this.free_cb=
611
- a;this.zeroed=0;this.virtio.notify_config_changes()};$c.prototype.get_state=function(){const a=[];a[0]=this.virtio;a[1]=this.num_pages;a[2]=this.actual;return a};$c.prototype.set_state=function(a){this.virtio.set_state(a[0]);this.num_pages=a[1];this.actual=a[2]};$c.prototype.GetStats=function(a){this.stats_cb=a;for(a=this.virtio.queues[2];a.has_request();){const b=a.pop_request();this.virtio.queues[2].push_reply(b)}this.virtio.queues[2].flush_replies()};$c.prototype.Reset=function(){};function ad(a,
612
- b,c,d){B("Trying to load kernel of size "+b.byteLength);var e=new Uint8Array(b);const f=new Uint16Array(b);var g=new Uint32Array(b),k=e[497]||4,m=f[255];if(43605!==m)B("Bad checksum1: "+n(m));else if(m=f[257]|f[258]<<16,1400005704!==m)B("Bad checksum2: "+n(m));else{m=f[259];l(514<=m);var p=e[529];l(p&1);var q=f[283],r=g[139],v=g[140],t=e[564],z=e[565],A=518<=m?g[142]:255,u=g[146],E=g[147],F=g[150],x=g[151],N=g[152];B("kernel boot protocol version: "+n(m));B("flags="+n(p)+" xflags="+n(q));B("code32_start="+
613
- n(g[133]));B("initrd_addr_max="+n(r));B("kernel_alignment="+n(v));B("relocatable="+t);B("min_alignment="+n(z));B("cmdline max="+n(A));B("payload offset="+n(u)+" size="+n(E));B("pref_address="+n(x)+":"+n(F));B("init_size="+n(N));e[528]=255;e[529]=p&-97|128;f[274]=56832;f[253]=65535;B("heap_end_ptr="+n(56832));d+="\x00";l(d.length<A);B("cmd_line_ptr="+n(581632));g[138]=581632;for(e=0;e<d.length;e++)a[581632+e]=d.charCodeAt(e);k=512*(k+1);B("prot_mode_kernel_start="+n(k));d=new Uint8Array(b,0,k);b=new Uint8Array(b,
606
+ this.max_scan_line&31;if(b&&!this.graphical_mode){const c=!!(this.clocking_mode&8);this.screen.set_font_bitmap(b+1,!c&&!(this.clocking_mode&1),c,!!(this.attribute_mode&4),this.plane2,a)}};Y.prototype.set_font_page=function(){const a=[0,2,4,6,1,3,5,7],b=(this.character_map_select&12)>>2|(this.character_map_select&32)>>3,c=this.character_map_select&3|(this.character_map_select&16)>>2;this.font_page_ab_enabled=b!==c;this.screen.set_font_page(a[b],a[c]);this.complete_redraw()};const $c="SWAP_IN SWAP_OUT MAJFLT MINFLT MEMFREE MEMTOT AVAIL CACHES HTLB_PGALLOC HTLB_PGFAIL".split(" ");
607
+ function ad(a,b){this.bus=b;this.zeroed=this.fp_cmd=this.actual=this.num_pages=0;this.virtio=new Fc(a,{name:"virtio-balloon",pci_id:88,device_id:4165,subsystem_device_id:5,common:{initial_port:55296,queues:[{size_supported:32,notify_offset:0},{size_supported:32,notify_offset:0},{size_supported:2,notify_offset:1},{size_supported:64,notify_offset:2}],features:[1,3,32],on_driver_ok:()=>{B("Balloon setup",2048)}},notification:{initial_port:55552,single_handler:!1,handlers:[c=>{const d=this.virtio.queues[c];
608
+ for(;d.has_request();){var e=d.pop_request();const f=new Uint8Array(e.length_readable);e.get_next_blob(f);this.virtio.queues[c].push_reply(e);e=f.byteLength/4;this.actual+=0===c?e:-e}this.virtio.queues[c].flush_replies()},c=>{var d=this.virtio.queues[c];if(d.has_request()){d=d.pop_request();const e=new Uint8Array(d.length_readable);d.get_next_blob(e);let f={};for(let g=0;g<d.length_readable;g+=10){let [k,m]=J(["h","d"],e,{offset:g});f[$c[k]]=m}this.virtio.queues[c].push_reply(d);this.stats_cb&&this.stats_cb(f)}},
609
+ c=>{const d=this.virtio.queues[c];for(;d.has_request();){const f=d.pop_request();if(0<f.length_readable){var e=new Uint8Array(f.length_readable);f.get_next_blob(e);[e]=J(["w"],e,{offset:0});0===e&&(this.free_cb&&this.free_cb(this.zeroed),1<this.fp_cmd&&(this.fp_cmd=1),this.virtio.notify_config_changes())}if(0<f.length_writable)for(new Uint8Array(0),e=0;e<f.write_buffers.length;++e){let g=f.write_buffers[e];this.zeroed+=g.len;this.virtio.cpu.zero_memory(g.addr_low,g.len)}this.virtio.queues[c].push_reply(f)}this.virtio.queues[c].flush_replies()}]},
610
+ isr_status:{initial_port:55040},device_specific:{initial_port:54784,struct:[{bytes:4,name:"num_pages",read:()=>this.num_pages,write:()=>{}},{bytes:4,name:"actual",read:()=>this.actual,write:()=>{}},{bytes:4,name:"free_page_hint_cmd_id",read:()=>this.fp_cmd,write:()=>{}}]}})}ad.prototype.Inflate=function(a){this.num_pages+=a;this.virtio.notify_config_changes()};ad.prototype.Deflate=function(a){this.num_pages-=a;this.virtio.notify_config_changes()};ad.prototype.Cleanup=function(a){this.fp_cmd=2;this.free_cb=
611
+ a;this.zeroed=0;this.virtio.notify_config_changes()};ad.prototype.get_state=function(){const a=[];a[0]=this.virtio;a[1]=this.num_pages;a[2]=this.actual;return a};ad.prototype.set_state=function(a){this.virtio.set_state(a[0]);this.num_pages=a[1];this.actual=a[2]};ad.prototype.GetStats=function(a){this.stats_cb=a;for(a=this.virtio.queues[2];a.has_request();){const b=a.pop_request();this.virtio.queues[2].push_reply(b)}this.virtio.queues[2].flush_replies()};ad.prototype.Reset=function(){};function bd(a,
612
+ b,c,d){B("Trying to load kernel of size "+b.byteLength);var e=new Uint8Array(b);const f=new Uint16Array(b);var g=new Uint32Array(b),k=e[497]||4,m=f[255];if(43605!==m)B("Bad checksum1: "+n(m));else if(m=f[257]|f[258]<<16,1400005704!==m)B("Bad checksum2: "+n(m));else{m=f[259];l(514<=m);var p=e[529];l(p&1);var q=f[283],r=g[139],v=g[140],t=e[564],z=e[565],A=518<=m?g[142]:255,u=g[146],E=g[147],F=g[150],x=g[151],M=g[152];B("kernel boot protocol version: "+n(m));B("flags="+n(p)+" xflags="+n(q));B("code32_start="+
613
+ n(g[133]));B("initrd_addr_max="+n(r));B("kernel_alignment="+n(v));B("relocatable="+t);B("min_alignment="+n(z));B("cmdline max="+n(A));B("payload offset="+n(u)+" size="+n(E));B("pref_address="+n(x)+":"+n(F));B("init_size="+n(M));e[528]=255;e[529]=p&-97|128;f[274]=56832;f[253]=65535;B("heap_end_ptr="+n(56832));d+="\x00";l(d.length<A);B("cmd_line_ptr="+n(581632));g[138]=581632;for(e=0;e<d.length;e++)a[581632+e]=d.charCodeAt(e);k=512*(k+1);B("prot_mode_kernel_start="+n(k));d=new Uint8Array(b,0,k);b=new Uint8Array(b,
614
614
  k);e=k=0;c&&(k=67108864,e=c.byteLength,l(1048576+b.length<k),a.set(new Uint8Array(c),k));g[134]=k;g[135]=e;l(655360>524288+d.length);a.set(d,524288);a.set(b,1048576);a=new Uint8Array(512);(new Uint16Array(a.buffer))[0]=43605;a[2]=1;c=3;a[c++]=250;a[c++]=184;a[c++]=32768;a[c++]=128;a[c++]=142;a[c++]=192;a[c++]=142;a[c++]=216;a[c++]=142;a[c++]=224;a[c++]=142;a[c++]=232;a[c++]=142;a[c++]=208;a[c++]=188;a[c++]=57344;a[c++]=224;a[c++]=234;a[c++]=0;a[c++]=0;a[c++]=32800;a[c++]=128;l(512>c);g=a[c]=0;for(b=
615
615
  0;b<a.length;b++)g+=a[b];a[c]=-g;return{name:"genroms/kernel.bin",data:a}}}function P(a,b,c){this.stop_idling=c;this.wm=b;this.wasm_patch();this.create_jit_imports();this.wasm_memory=b=this.wm.exports.memory;this.memory_size=h(Uint32Array,b,812,1);this.mem8=new Uint8Array(0);this.mem32s=new Int32Array(this.mem8.buffer);this.segment_is_null=h(Uint8Array,b,724,8);this.segment_offsets=h(Int32Array,b,736,8);this.segment_limits=h(Uint32Array,b,768,8);this.segment_access_bytes=h(Uint8Array,b,512,8);this.protected_mode=
616
616
  h(Int32Array,b,800,1);this.idtr_size=h(Int32Array,b,564,1);this.idtr_offset=h(Int32Array,b,568,1);this.gdtr_size=h(Int32Array,b,572,1);this.gdtr_offset=h(Int32Array,b,576,1);this.tss_size_32=h(Int32Array,b,1128,1);this.page_fault=h(Uint32Array,b,540,8);this.cr=h(Int32Array,b,580,8);this.cpl=h(Uint8Array,b,612,1);this.is_32=h(Int32Array,b,804,1);this.stack_size_32=h(Int32Array,b,808,1);this.in_hlt=h(Uint8Array,b,616,1);this.last_virt_eip=h(Int32Array,b,620,1);this.eip_phys=h(Int32Array,b,624,1);this.sysenter_cs=
@@ -634,7 +634,7 @@ b[6];d[7]=b[7];d[8]=b[8];d[9]=b[9];d[10]=b[10];d[11]=b[11];d[12]=b[12];return c}
634
634
  8===a[1].length?(this.segment_is_null.set(a[1]),this.segment_access_bytes.fill(242),this.segment_access_bytes[1]=250):16===a[1].length?(this.segment_is_null.set(a[1].subarray(0,8)),this.segment_access_bytes.set(a[1].subarray(8,16))):l("Unexpected cpu segment state length:"+a[1].length);this.segment_offsets.set(a[2]);this.segment_limits.set(a[3]);this.protected_mode[0]=a[4];this.idtr_offset[0]=a[5];this.idtr_size[0]=a[6];this.gdtr_offset[0]=a[7];this.gdtr_size[0]=a[8];this.page_fault[0]=a[9];this.cr.set(a[10]);
635
635
  this.cpl[0]=a[11];this.is_32[0]=a[13];this.stack_size_32[0]=a[16];this.in_hlt[0]=a[17];this.last_virt_eip[0]=a[18];this.eip_phys[0]=a[19];this.sysenter_cs[0]=a[22];this.sysenter_eip[0]=a[23];this.sysenter_esp[0]=a[24];this.prefixes[0]=a[25];this.flags[0]=a[26];this.flags_changed[0]=a[27];this.last_op1[0]=a[28];this.last_op_size[0]=a[30];this.instruction_pointer[0]=a[37];this.previous_ip[0]=a[38];this.reg32.set(a[39]);this.sreg.set(a[40]);this.dreg.set(a[41]);a[42]&&this.reg_pdpte.set(a[42]);this.set_tsc(a[43][0],
636
636
  a[43][1]);this.devices.virtio_9p&&this.devices.virtio_9p.set_state(a[45]);a[46]&&this.set_state_apic(a[46]);this.devices.rtc&&this.devices.rtc.set_state(a[47]);this.devices.dma&&this.devices.dma.set_state(a[49]);this.devices.acpi&&this.devices.acpi.set_state(a[50]);this.devices.vga&&this.devices.vga.set_state(a[52]);this.devices.ps2&&this.devices.ps2.set_state(a[53]);this.devices.uart0&&this.devices.uart0.set_state(a[54]);this.devices.fdc&&this.devices.fdc.set_state(a[55]);if(a[56]||a[57]){var b=
637
- [[void 0,void 0],[void 0,void 0]];b[0][0]=a[56]?{is_cdrom:!0,buffer:this.devices.cdrom.buffer}:{is_cdrom:!1,buffer:this.devices.ide.primary.master.buffer};this.devices.ide=new Uc(this,this.devices.ide.bus,b);this.devices.cdrom=a[56]?this.devices.ide.primary.master:void 0;this.devices.ide.primary.set_state(a[56]||a[57])}else a[85]&&this.devices.ide.set_state(a[85]);this.devices.pci&&this.devices.pci.set_state(a[48]);this.devices.pit&&this.devices.pit.set_state(a[58]);this.devices.net&&this.devices.net.set_state(a[59]);
637
+ [[void 0,void 0],[void 0,void 0]];b[0][0]=a[56]?{is_cdrom:!0,buffer:this.devices.cdrom.buffer}:{is_cdrom:!1,buffer:this.devices.ide.primary.master.buffer};this.devices.ide=new Vc(this,this.devices.ide.bus,b);this.devices.cdrom=a[56]?this.devices.ide.primary.master:void 0;this.devices.ide.primary.set_state(a[56]||a[57])}else a[85]&&this.devices.ide.set_state(a[85]);this.devices.pci&&this.devices.pci.set_state(a[48]);this.devices.pit&&this.devices.pit.set_state(a[58]);this.devices.net&&this.devices.net.set_state(a[59]);
638
638
  this.set_state_pic(a[60]);this.devices.sb16&&this.devices.sb16.set_state(a[61]);this.devices.uart1&&this.devices.uart1.set_state(a[79]);this.devices.uart2&&this.devices.uart2.set_state(a[80]);this.devices.uart3&&this.devices.uart3.set_state(a[81]);this.devices.virtio_console&&this.devices.virtio_console.set_state(a[82]);this.devices.virtio_net&&this.devices.virtio_net.set_state(a[83]);this.devices.virtio_balloon&&this.devices.virtio_balloon.set_state(a[84]);this.fw_value=a[62];a[63]&&this.set_state_ioapic(a[63]);
639
639
  this.tss_size_32[0]=a[64];this.reg_xmm32s.set(a[66]);this.fpu_st.set(a[67]);this.fpu_stack_empty[0]=a[68];this.fpu_stack_ptr[0]=a[69];this.fpu_control_word[0]=a[70];this.fpu_ip[0]=a[71];this.fpu_ip_selector[0]=a[72];this.fpu_dp[0]=a[73];this.fpu_dp_selector[0]=a[74];this.fpu_opcode[0]=a[75];b=new ra(a[78].buffer);this.unpack_memory(b,a[77]);this.update_state_flags();this.full_clear_tlb();this.jit_clear_cache()};P.prototype.set_state_pic=function(a){const b=new Uint8Array(this.wasm_memory.buffer,this.get_pic_addr_master(),
640
640
  13),c=new Uint8Array(this.wasm_memory.buffer,this.get_pic_addr_slave(),13);b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];const d=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];c[0]=d[0];c[1]=d[1];c[2]=d[2];c[3]=d[3];c[4]=d[4];c[6]=d[6];c[7]=d[7];c[8]=d[8];c[9]=d[9];c[10]=d[10];c[11]=d[11];c[12]=d[12]};P.prototype.set_state_apic=function(a){if(a instanceof Array){var b=new Int32Array(this.wasm_memory.buffer,this.get_apic_addr(),46);b[0]=a[0];b[1]=a[1];b[2]=a[2];
@@ -642,19 +642,19 @@ b[3]=a[3];b[4]=a[4];b[7]=a[6];b[8]=a[7];b[9]=a[8];b[10]=a[9];b[11]=a[10];b[12]=a
642
642
  this.get_ioapic_addr(),52);b.set(a[0],0);b.set(a[1],24);b[48]=a[2];b[49]=a[3];b[50]=a[4];b[51]=a[5]}else b=new Uint8Array(this.wasm_memory.buffer,this.get_ioapic_addr(),208),l(a instanceof Uint8Array),l(a.length===b.length),b.set(a)};P.prototype.pack_memory=function(){l(0===(this.mem8.length&4095));var a=this.mem8.length>>12,b=[];for(var c=0;c<a;c++)this.is_memory_zeroed(c<<12,4096)||b.push(c);a=new ra(a);c=new Uint8Array(b.length<<12);for(const [d,e]of b.entries())a.set(e,1),b=e<<12,b=this.mem8.subarray(b,
643
643
  b+4096),c.set(b,d<<12);return{bitmap:a,packed_memory:c}};P.prototype.unpack_memory=function(a,b){this.zero_memory(0,this.memory_size[0]);const c=this.memory_size[0]>>12;let d=0;for(let f=0;f<c;f++)if(a.get(f)){var e=d<<12;e=b.subarray(e,e+4096);this.mem8.set(e,f<<12);d++}};P.prototype.reboot_internal=function(){this.reset_cpu();this.fw_value=[];this.devices.virtio_9p&&this.devices.virtio_9p.reset();this.devices.virtio_console&&this.devices.virtio_console.reset();this.devices.virtio_net&&this.devices.virtio_net.reset();
644
644
  this.devices.ps2&&this.devices.ps2.reset();this.load_bios()};P.prototype.reset_memory=function(){this.mem8.fill(0)};P.prototype.create_memory=function(a,b){a<b?(a=b,B("Rounding memory size up to "+a,2)):0>(a|0)&&(a=Math.pow(2,31)-131072,B("Rounding memory size down to "+a,2));a=(a-1|131071)+1|0;l(0<(a|0));l(0===(a&131071));console.assert(0===this.memory_size[0],"Expected uninitialised memory");this.memory_size[0]=a;b=this.allocate_memory(a);this.mem8=h(Uint8Array,this.wasm_memory,b,a);this.mem32s=
645
- h(Uint32Array,this.wasm_memory,b,a>>2)};P.prototype.init=function(a,b){this.create_memory(a.memory_size||67108864,a.initrd?67108864:1048576);a.disable_jit&&this.set_jit_config(0,1);a.cpuid_level&&this.set_cpuid_level(a.cpuid_level);this.acpi_enabled[0]=+a.acpi;this.reset_cpu();var c=new Fa(this);this.io=c;this.bios.main=a.bios;this.bios.vga=a.vga_bios;this.load_bios();if(a.bzimage){const e=ad(this.mem8,a.bzimage,a.initrd,a.cmdline||"");e&&this.option_roms.push(e)}c.register_read(179,this,function(){B("port 0xB3 read");
645
+ h(Uint32Array,this.wasm_memory,b,a>>2)};P.prototype.init=function(a,b){this.create_memory(a.memory_size||67108864,a.initrd?67108864:1048576);a.disable_jit&&this.set_jit_config(0,1);a.cpuid_level&&this.set_cpuid_level(a.cpuid_level);this.acpi_enabled[0]=+a.acpi;this.reset_cpu();var c=new Ia(this);this.io=c;this.bios.main=a.bios;this.bios.vga=a.vga_bios;this.load_bios();if(a.bzimage){const e=bd(this.mem8,a.bzimage,a.initrd,a.cmdline||"");e&&this.option_roms.push(e)}c.register_read(179,this,function(){B("port 0xB3 read");
646
646
  return 0});var d=0;c.register_read(146,this,function(){return d});c.register_write(146,this,function(e){d=e});c.register_read(1297,this,function(){if(this.fw_pointer<this.fw_value.length)return this.fw_value[this.fw_pointer++];l(!1,"config port: Read past value");return 0});c.register_write(1296,this,void 0,function(e){function f(m){return new Uint8Array(Int32Array.of(m).buffer)}function g(m){return m>>8|m<<8&65280}function k(m){return m<<24|m<<8&16711680|m>>8&65280|m>>>24}B("bios config port, index="+
647
647
  n(e));this.fw_pointer=0;if(0===e)this.fw_value=f(1431127377);else if(1===e)this.fw_value=f(0);else if(3===e)this.fw_value=f(this.memory_size[0]);else if(5===e)this.fw_value=f(1);else if(15===e)this.fw_value=f(1);else if(13===e)this.fw_value=new Uint8Array(16);else if(25===e){e=new Int32Array(4+64*this.option_roms.length);const m=new Uint8Array(e.buffer);e[0]=k(this.option_roms.length);for(let p=0;p<this.option_roms.length;p++){const {name:q,data:r}=this.option_roms[p],v=4+64*p;l(65536>49152+p);e[v+
648
- 0>>2]=k(r.length);e[v+4>>2]=g(49152+p);l(56>q.length);for(let t=0;t<q.length;t++)m[v+8+t]=q.charCodeAt(t)}this.fw_value=m}else 32768<=e&&49152>e?this.fw_value=f(0):49152<=e&&e-49152<this.option_roms.length?this.fw_value=this.option_roms[e-49152].data:(B("Warning: Unimplemented fw index: "+n(e)),this.fw_value=f(0))});c.register_write(128,this,function(){});c.register_read(128,this,function(){return 255});c.register_write(233,this,function(){});this.devices={};a.load_devices&&(this.devices.pci=new zc(this),
649
- this.acpi_enabled[0]&&(this.devices.acpi=new xc(this)),this.devices.rtc=new jb(this),this.fill_cmos(this.devices.rtc,a),this.devices.dma=new C(this),this.devices.vga=new Y(this,b,a.screen,a.vga_memory_size||8388608),this.devices.ps2=new Fc(this,b),this.devices.uart0=new yc(this,1016,b),a.uart1&&(this.devices.uart1=new yc(this,760,b)),a.uart2&&(this.devices.uart2=new yc(this,1E3,b)),a.uart3&&(this.devices.uart3=new yc(this,744,b)),this.devices.fdc=new W(this,a.fda,a.fdb),c=[[void 0,void 0],[void 0,
650
- void 0]],a.hda&&(c[0][0]={buffer:a.hda},c[0][1]={buffer:a.hdb}),c[1][0]={is_cdrom:!0,buffer:a.cdrom},this.devices.ide=new Uc(this,b,c),this.devices.cdrom=this.devices.ide.secondary.master,this.devices.pit=new kb(this,b),"ne2k"===a.net_device.type?this.devices.net=new Cc(this,b,a.preserve_mac_from_state_image,a.mac_address_translation):"virtio"===a.net_device.type&&(this.devices.virtio_net=new Wc(this,b,a.preserve_mac_from_state_image)),a.fs9p?this.devices.virtio_9p=new bd(a.fs9p,this,b):a.handle9p?
651
- this.devices.virtio_9p=new cd(a.handle9p,this):a.proxy9p&&(this.devices.virtio_9p=new dd(a.proxy9p,this)),a.virtio_console&&(this.devices.virtio_console=new Dc(this,b)),a.virtio_balloon&&(this.devices.virtio_balloon=new $c(this,b)),this.devices.sb16=new D(this,b));a.multiboot&&(B("loading multiboot",2),a=this.load_multiboot_option_rom(a.multiboot,a.initrd,a.cmdline))&&(this.bios.main?(B("adding option rom for multiboot",2),this.option_roms.push(a)):(B("loaded multiboot without bios",2),this.reg32[0]=
648
+ 0>>2]=k(r.length);e[v+4>>2]=g(49152+p);l(56>q.length);for(let t=0;t<q.length;t++)m[v+8+t]=q.charCodeAt(t)}this.fw_value=m}else 32768<=e&&49152>e?this.fw_value=f(0):49152<=e&&e-49152<this.option_roms.length?this.fw_value=this.option_roms[e-49152].data:(B("Warning: Unimplemented fw index: "+n(e)),this.fw_value=f(0))});c.register_write(128,this,function(){});c.register_read(128,this,function(){return 255});c.register_write(233,this,function(){});this.devices={};a.load_devices&&(this.devices.pci=new Ac(this),
649
+ this.acpi_enabled[0]&&(this.devices.acpi=new yc(this)),this.devices.rtc=new kb(this),this.fill_cmos(this.devices.rtc,a),this.devices.dma=new C(this),this.devices.vga=new Y(this,b,a.screen,a.vga_memory_size||8388608),this.devices.ps2=new Gc(this,b),this.devices.uart0=new zc(this,1016,b),a.uart1&&(this.devices.uart1=new zc(this,760,b)),a.uart2&&(this.devices.uart2=new zc(this,1E3,b)),a.uart3&&(this.devices.uart3=new zc(this,744,b)),this.devices.fdc=new W(this,a.fda,a.fdb),c=[[void 0,void 0],[void 0,
650
+ void 0]],a.hda&&(c[0][0]={buffer:a.hda},c[0][1]={buffer:a.hdb}),c[1][0]={is_cdrom:!0,buffer:a.cdrom},this.devices.ide=new Vc(this,b,c),this.devices.cdrom=this.devices.ide.secondary.master,this.devices.pit=new lb(this,b),"ne2k"===a.net_device.type?this.devices.net=new Dc(this,b,a.preserve_mac_from_state_image,a.mac_address_translation):"virtio"===a.net_device.type&&(this.devices.virtio_net=new Xc(this,b,a.preserve_mac_from_state_image)),a.fs9p?this.devices.virtio_9p=new cd(a.fs9p,this,b):a.handle9p?
651
+ this.devices.virtio_9p=new dd(a.handle9p,this):a.proxy9p&&(this.devices.virtio_9p=new ed(a.proxy9p,this)),a.virtio_console&&(this.devices.virtio_console=new Ec(this,b)),a.virtio_balloon&&(this.devices.virtio_balloon=new ad(this,b)),this.devices.sb16=new D(this,b));a.multiboot&&(B("loading multiboot",2),a=this.load_multiboot_option_rom(a.multiboot,a.initrd,a.cmdline))&&(this.bios.main?(B("adding option rom for multiboot",2),this.option_roms.push(a)):(B("loaded multiboot without bios",2),this.reg32[0]=
652
652
  this.io.port_read32(244)));this.debug_init()};P.prototype.load_multiboot=function(a){this.bios.main&&l(!1,"load_multiboot not supported with BIOS");this.load_multiboot_option_rom(a,void 0,"")&&(B("loaded multiboot",2),this.reg32[0]=this.io.port_read32(244))};P.prototype.load_multiboot_option_rom=function(a,b,c){B("Trying multiboot from buffer of size "+a.byteLength,2);if(8192>a.byteLength){var d=new Int32Array(2048);(new Uint8Array(d.buffer)).set(new Uint8Array(a))}else d=new Int32Array(a,0,2048);
653
653
  for(var e=0;8192>e;e+=4){if(464367618===d[e>>2]){var f=d[e+4>>2];if(464367618+f+d[e+8>>2]|0){B("Multiboot checksum check failed",2);continue}}else continue;B("Multiboot magic found, flags: "+n(f>>>0,8),2);l(0===(f&-65540),"TODO");var g=this;this.io.register_read(244,this,function(){return 0},function(){return 0},function(){var q=31860,r=0;if(c){r|=4;g.write32(31760,q);c+="\x00";var v=(new TextEncoder).encode(c);g.write_blob(v,q);q+=v.length}if(f&2){r|=64;v=0;g.write32(31788,0);g.write32(31792,q);
654
654
  var t=0;let F=!1;for(let x=0;4294967296>x;x+=131072)F&&void 0!==g.memory_map_read8[x>>>17]?(g.write32(q,20),g.write32(q+4,t),g.write32(q+8,0),g.write32(q+12,x-t),g.write32(q+16,0),g.write32(q+20,1),q+=24,v+=24,F=!1):F||void 0!==g.memory_map_read8[x>>>17]||(t=x,F=!0);l(!F,"top of 4GB shouldn't have memory");g.write32(31788,v)}g.write32(31744,r);v=r=0;if(f&65536){B("Multiboot specifies its own address table",2);var z=d[e+12>>2];var A=d[e+16>>2];var u=d[e+20>>2];var E=d[e+24>>2];r=d[e+28>>2];B("header="+
655
- n(z,8)+" load="+n(A,8)+" load_end="+n(u,8)+" bss_end="+n(E,8)+" entry="+n(r,8));l(A<=z);z=e-(z-A);0===u?v=void 0:(l(u>=A),v=u-A);z=new Uint8Array(a,z,v);g.write_blob(z,A);r|=0;v=Math.max(u,E)}else if(1179403647===d[0]){B("Multiboot image is in elf format",2);t=new DataView(a);const [F,x]=Nc(t,Kc);console.assert(52===x);for(z of Object.keys(F))B(z+": 0x"+(F[z].toString(16)>>>0));console.assert(1179403647===F.magic,"Bad magic");console.assert(1===F.class,"Unimplemented: 64 bit elf");console.assert(1===
656
- F.data,"Unimplemented: big endian");console.assert(1===F.version0,"Bad version0");console.assert(2===F.type,"Unimplemented type");console.assert(1===F.version1,"Bad version1");console.assert(52===F.ehsize,"Bad header size");console.assert(32===F.phentsize,"Bad program header size");console.assert(40===F.shentsize,"Bad section header size");[r]=Oc(new DataView(t.buffer,t.byteOffset+F.phoff,F.phentsize*F.phnum),Lc,F.phnum);[z]=Oc(new DataView(t.buffer,t.byteOffset+F.shoff,F.shentsize*F.shnum),Mc,F.shnum);
657
- if(xa){console.log("%d program headers:",r.length);for(E of r)console.log("type=%s offset=%s vaddr=%s paddr=%s filesz=%s memsz=%s flags=%s align=%s",E.type.toString(16),E.offset.toString(16),E.vaddr.toString(16),E.paddr.toString(16),E.filesz.toString(16),E.memsz.toString(16),E.flags.toString(16),E.align.toString(16));console.log("%d section headers:",z.length);for(A of z)console.log("name=%s type=%s flags=%s addr=%s offset=%s size=%s link=%s info=%s addralign=%s entsize=%s",A.name.toString(16),A.type.toString(16),
655
+ n(z,8)+" load="+n(A,8)+" load_end="+n(u,8)+" bss_end="+n(E,8)+" entry="+n(r,8));l(A<=z);z=e-(z-A);0===u?v=void 0:(l(u>=A),v=u-A);z=new Uint8Array(a,z,v);g.write_blob(z,A);r|=0;v=Math.max(u,E)}else if(1179403647===d[0]){B("Multiboot image is in elf format",2);t=new DataView(a);const [F,x]=Oc(t,Lc);console.assert(52===x);for(z of Object.keys(F))B(z+": 0x"+(F[z].toString(16)>>>0));console.assert(1179403647===F.magic,"Bad magic");console.assert(1===F.class,"Unimplemented: 64 bit elf");console.assert(1===
656
+ F.data,"Unimplemented: big endian");console.assert(1===F.version0,"Bad version0");console.assert(2===F.type,"Unimplemented type");console.assert(1===F.version1,"Bad version1");console.assert(52===F.ehsize,"Bad header size");console.assert(32===F.phentsize,"Bad program header size");console.assert(40===F.shentsize,"Bad section header size");[r]=Pc(new DataView(t.buffer,t.byteOffset+F.phoff,F.phentsize*F.phnum),Mc,F.phnum);[z]=Pc(new DataView(t.buffer,t.byteOffset+F.shoff,F.shentsize*F.shnum),Nc,F.shnum);
657
+ if(za){console.log("%d program headers:",r.length);for(E of r)console.log("type=%s offset=%s vaddr=%s paddr=%s filesz=%s memsz=%s flags=%s align=%s",E.type.toString(16),E.offset.toString(16),E.vaddr.toString(16),E.paddr.toString(16),E.filesz.toString(16),E.memsz.toString(16),E.flags.toString(16),E.align.toString(16));console.log("%d section headers:",z.length);for(A of z)console.log("name=%s type=%s flags=%s addr=%s offset=%s size=%s link=%s info=%s addralign=%s entsize=%s",A.name.toString(16),A.type.toString(16),
658
658
  A.flags.toString(16),A.addr.toString(16),A.offset.toString(16),A.size.toString(16),A.link.toString(16),A.info.toString(16),A.addralign.toString(16),A.entsize.toString(16))}E=F;A=r;r=E.entry;for(u of A)0!==u.type&&(1===u.type?(l(u.filesz<=u.memsz),u.paddr+u.memsz<g.memory_size[0]?(u.filesz&&(A=new Uint8Array(a,u.offset,u.filesz),g.write_blob(A,u.paddr)),v=Math.max(v,u.paddr+u.memsz),B("prg load "+u.paddr+" to "+(u.paddr+u.memsz),2),r===E.entry&&u.vaddr<=r&&u.vaddr+u.memsz>r&&(r=r-u.vaddr+u.paddr)):
659
659
  B("Warning: Skipped loading section, paddr="+n(u.paddr)+" memsz="+u.memsz,2)):2===u.type||3===u.type||4===u.type||6===u.type||7===u.type||1685382480===u.type||1685382481===u.type||1685382482===u.type||1685382483===u.type?B("skip load type "+u.type+" "+u.paddr+" to "+(u.paddr+u.memsz),2):l(!1,"unimplemented elf section type: "+n(u.type)))}else l(!1,"Not a bootable multiboot format");b&&(g.write32(31764,1),g.write32(31768,q),u=v,0!==(u&4095)&&(u=(u&-4096)+4096),B("ramdisk address "+u),E=u+b.byteLength,
660
660
  g.write32(q,u),g.write32(q+4,E),g.write32(q+8,0),g.write32(q+12,0),l(E<g.memory_size[0]),g.write_blob(new Uint8Array(b),u));g.reg32[3]=31744;g.cr[0]=1;g.protected_mode[0]=1;g.flags[0]=2;g.is_32[0]=1;g.stack_size_32[0]=1;for(q=0;6>q;q++)g.segment_is_null[q]=0,g.segment_offsets[q]=0,g.segment_limits[q]=4294967295,g.sreg[q]=45058;g.instruction_pointer[0]=g.get_seg_cs()+r|0;g.update_state_flags();B("Starting multiboot kernel at:",2);g.dump_state();g.dump_regs_short();return 732803074});this.io.register_write_consecutive(244,
@@ -674,70 +674,70 @@ k*f),p=d(m,b,!0);if(p)if(m="",m+=p.size?"S ":" ",m+=p.accessed?"A ":" ",m+=p.c
674
674
  n(c+(k<<g|q<<12)>>>0,8)+" -> "+n(v.address,8)+" | "+m+" (at "+n(r,8)+")"))}}}};P.prototype.get_memory_dump=function(a,b){void 0===a?(a=0,b=this.memory_size[0]):void 0===b&&(b=a,a=0);return this.mem8.slice(a,a+b).buffer};P.prototype.memory_hex_dump=function(a,b){b=b||64;for(var c,d,e=0;e<b>>4;e++){c=n(a+(e<<4),5)+" ";for(var f=0;16>f;f++)d=this.read8(a+(e<<4)+f),c+=n(d,2)+" ";c+=" ";for(f=0;16>f;f++)d=this.read8(a+(e<<4)+f),c+=33>d||126<d?".":String.fromCharCode(d);B(c)}};P.prototype.used_memory_dump=
675
675
  function(){for(var a=this.memory_size[0]/128/16|0,b,c=0;16>c;c++){b=n(128*c*a,8)+" | ";for(var d=0;128>d;d++)b+=0<this.mem32s[(128*c+d)*a]?"X":" ";B(b)}};P.prototype.debug_interrupt=function(){};P.prototype.debug_dump_code=function(a,b,c){if(!this.capstone_decoder){let d=window.cs;"function"===typeof require&&(d=require("./capstone-x86.min.js"));if(void 0===d){B("Warning: Missing capstone library, disassembly not available");return}this.capstone_decoder=[new d.Capstone(d.ARCH_X86,d.MODE_16),new d.Capstone(d.ARCH_X86,
676
676
  d.MODE_32)]}b instanceof Array&&(b=new Uint8Array(b));try{this.capstone_decoder[+a].disasm(b,c).forEach(function(d){B(n(d.address>>>0)+": "+ca(d.bytes.map(e=>n(e,2).slice(-2)).join(" "),20)+" "+d.mnemonic+" "+d.op_str)}),B("")}catch(d){B("Could not disassemble: "+Array.from(b).map(e=>n(e,2)).join(" "))}};P.prototype.dump_wasm=function(a){if(void 0===this.wabt&&(this.wabt="function"===typeof require?require("./libwabt.cjs"):new window.WabtModule,void 0===this.wabt)){B("Warning: Missing libwabt, wasm dump not available");
677
- return}a=a.slice();try{var b=this.wabt.readWasm(a,{readDebugNames:!1});b.generateNames();b.applyNames();const c=b.toText({foldExprs:!0,inlineExport:!0});B(c)}catch(c){qa(a,"failed.wasm"),console.log(c.toString())}finally{b&&b.destroy()}};function Ec(a,b){this.cpu=a;this.pci=a.devices.pci;this.device_id=b.device_id;this.pci_space=[244,26,b.device_id&255,b.device_id>>8,7,5,16,0,1,0,2,0,0,0,0,0,1,168,0,0,0,16,191,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,26,b.subsystem_device_id&255,b.subsystem_device_id>>
677
+ return}a=a.slice();try{var b=this.wabt.readWasm(a,{readDebugNames:!1});b.generateNames();b.applyNames();const c=b.toText({foldExprs:!0,inlineExport:!0});B(c)}catch(c){qa(a,"failed.wasm"),console.log(c.toString())}finally{b&&b.destroy()}};function Fc(a,b){this.cpu=a;this.pci=a.devices.pci;this.device_id=b.device_id;this.pci_space=[244,26,b.device_id&255,b.device_id>>8,7,5,16,0,1,0,2,0,0,0,0,0,1,168,0,0,0,16,191,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,26,b.subsystem_device_id&255,b.subsystem_device_id>>
678
678
  8,0,0,0,0,64,0,0,0,0,0,0,0,0,1,0,0];this.pci_space=this.pci_space.concat(Array(256-this.pci_space.length).fill(0));this.pci_id=b.pci_id;this.pci_bars=[];this.name=b.name;this.driver_feature_select=this.device_feature_select=0;this.device_feature=new Uint32Array(4);this.driver_feature=new Uint32Array(4);for(var c of b.common.features)l(0<=c,"VirtIO device<"+this.name+"> feature bit numbers must be non-negative"),l(128>c,"VirtIO device<"+this.name+"> feature bit numbers assumed less than 128 in implementation"),
679
679
  this.device_feature[c>>>5]|=1<<(c&31),this.driver_feature[c>>>5]|=1<<(c&31);l(b.common.features.includes(32),"VirtIO device<"+this.name+"> only non-transitional devices are supported");this.features_ok=!0;this.device_status=0;this.config_has_changed=!1;this.config_generation=0;this.queues=[];for(var d of b.common.queues)this.queues.push(new Z(a,this,d));this.queue_select=0;this.queue_selected=this.queues[0];this.isr_status=0;c=new Set;for(var e of this.queues.map(f=>f.notify_offset))d=b.notification.single_handler?
680
680
  0:e,c.add(d),l(b.notification.handlers[d],"VirtIO device<"+this.name+"> every queue's notifier must exist");for(const [f,g]of b.notification.handlers.entries())l(!g||c.has(f),"VirtIO device<"+this.name+"> no defined notify handler should be unused");e=[];e.push(this.create_common_capability(b.common));e.push(this.create_notification_capability(b.notification));e.push(this.create_isr_capability(b.isr_status));b.device_specific&&e.push(this.create_device_specific_capability(b.device_specific));this.init_capabilities(e);
681
- a.devices.pci.register_device(this);this.reset()}Ec.prototype.create_common_capability=function(a){return{type:1,bar:0,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:[{bytes:4,name:"device_feature_select",read:()=>this.device_feature_select,write:b=>{this.device_feature_select=b}},{bytes:4,name:"device_feature",read:()=>this.device_feature[this.device_feature_select]||0,write:()=>{}},{bytes:4,name:"driver_feature_select",read:()=>this.driver_feature_select,write:b=>{this.driver_feature_select=
681
+ a.devices.pci.register_device(this);this.reset()}Fc.prototype.create_common_capability=function(a){return{type:1,bar:0,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:[{bytes:4,name:"device_feature_select",read:()=>this.device_feature_select,write:b=>{this.device_feature_select=b}},{bytes:4,name:"device_feature",read:()=>this.device_feature[this.device_feature_select]||0,write:()=>{}},{bytes:4,name:"driver_feature_select",read:()=>this.driver_feature_select,write:b=>{this.driver_feature_select=
682
682
  b}},{bytes:4,name:"driver_feature",read:()=>this.driver_feature[this.driver_feature_select]||0,write:b=>{const c=this.device_feature[this.driver_feature_select];this.driver_feature_select<this.driver_feature.length&&(this.driver_feature[this.driver_feature_select]=b&c);this.features_ok=this.features_ok&&!(b&~c)}},{bytes:2,name:"msix_config",read:()=>{B("No msi-x capability supported.",2097152);return 65535},write:()=>{B("No msi-x capability supported.",2097152)}},{bytes:2,name:"num_queues",read:()=>
683
683
  this.queues.length,write:()=>{}},{bytes:1,name:"device_status",read:()=>this.device_status,write:b=>{0===b?(B("Reset device<"+this.name+">",2097152),this.reset()):b&128?B("Warning: Device<"+this.name+"> status failed",2097152):B("Device<"+this.name+"> status: "+(b&1?"ACKNOWLEDGE ":"")+(b&2?"DRIVER ":"")+(b&4?"DRIVER_OK":"")+(b&8?"FEATURES_OK ":"")+(b&64?"DEVICE_NEEDS_RESET":""),2097152);b&~this.device_status&4&&this.device_status&64&&this.notify_config_changes();this.features_ok||(b&8&&B("Removing FEATURES_OK",
684
684
  2097152),b&=-9);this.device_status=b;if(b&~this.device_status&4)a.on_driver_ok()}},{bytes:1,name:"config_generation",read:()=>this.config_generation,write:()=>{}},{bytes:2,name:"queue_select",read:()=>this.queue_select,write:b=>{this.queue_select=b;this.queue_selected=this.queue_select<this.queues.length?this.queues[this.queue_select]:null}},{bytes:2,name:"queue_size",read:()=>this.queue_selected?this.queue_selected.size:0,write:b=>{this.queue_selected&&(b&b-1&&(B("Warning: dev<"+this.name+"> Given queue size was not a power of 2. Rounding up to next power of 2.",
685
685
  2097152),b=1<<fa(b-1)+1),b>this.queue_selected.size_supported&&(B("Warning: dev<"+this.name+"> Trying to set queue size greater than supported. Clamping to supported size.",2097152),b=this.queue_selected.size_supported),this.queue_selected.set_size(b))}},{bytes:2,name:"queue_msix_vector",read:()=>{B("No msi-x capability supported.",2097152);return 65535},write:()=>{B("No msi-x capability supported.",2097152)}},{bytes:2,name:"queue_enable",read:()=>this.queue_selected?this.queue_selected.enabled|0:
686
686
  0,write:b=>{this.queue_selected&&(1===b?this.queue_selected.is_configured()?this.queue_selected.enable():B("Driver bug: tried enabling unconfigured queue",2097152):0===b&&B("Driver bug: tried writing 0 to queue_enable",2097152))}},{bytes:2,name:"queue_notify_off",read:()=>this.queue_selected?this.queue_selected.notify_offset:0,write:()=>{}},{bytes:4,name:"queue_desc (low dword)",read:()=>this.queue_selected?this.queue_selected.desc_addr:0,write:b=>{this.queue_selected&&(this.queue_selected.desc_addr=
687
687
  b)}},{bytes:4,name:"queue_desc (high dword)",read:()=>0,write:b=>{0!==b&&B("Warning: High dword of 64 bit queue_desc ignored:"+b,2097152)}},{bytes:4,name:"queue_avail (low dword)",read:()=>this.queue_selected?this.queue_selected.avail_addr:0,write:b=>{this.queue_selected&&(this.queue_selected.avail_addr=b)}},{bytes:4,name:"queue_avail (high dword)",read:()=>0,write:b=>{0!==b&&B("Warning: High dword of 64 bit queue_avail ignored:"+b,2097152)}},{bytes:4,name:"queue_used (low dword)",read:()=>this.queue_selected?
688
- this.queue_selected.used_addr:0,write:b=>{this.queue_selected&&(this.queue_selected.used_addr=b)}},{bytes:4,name:"queue_used (high dword)",read:()=>0,write:b=>{0!==b&&B("Warning: High dword of 64 bit queue_used ignored:"+b,2097152)}}]}};Ec.prototype.create_notification_capability=function(a){const b=[];let c;a.single_handler?(l(1===a.handlers.length,"VirtIO device<"+this.name+"> too many notify handlers specified: expected single handler"),c=0):c=2;for(const [d,e]of a.handlers.entries())b.push({bytes:2,
689
- name:"notify"+d,read:()=>65535,write:e||(()=>{})});return{type:2,bar:1,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array([c&255,c>>8&255,c>>16&255,c>>24]),struct:b}};Ec.prototype.create_isr_capability=function(a){return{type:3,bar:2,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:[{bytes:1,name:"isr_status",read:()=>{const b=this.isr_status;this.lower_irq();return b},write:()=>{}}]}};Ec.prototype.create_device_specific_capability=function(a){l(~a.offset&3,"VirtIO device<"+
690
- this.name+"> device specific cap offset must be 4-byte aligned");return{type:4,bar:3,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:a.struct}};Ec.prototype.init_capabilities=function(a){let b=this.pci_space[52]=64;var c=b;for(const e of a){a=16+e.extra.length;c=b;b=c+a;l(256>=b,"VirtIO device<"+this.name+"> can't fit all capabilities into 256byte configspace");l(0<=e.bar&&6>e.bar,"VirtIO device<"+this.name+"> capability invalid bar number");var d=e.struct.reduce((f,g)=>f+
688
+ this.queue_selected.used_addr:0,write:b=>{this.queue_selected&&(this.queue_selected.used_addr=b)}},{bytes:4,name:"queue_used (high dword)",read:()=>0,write:b=>{0!==b&&B("Warning: High dword of 64 bit queue_used ignored:"+b,2097152)}}]}};Fc.prototype.create_notification_capability=function(a){const b=[];let c;a.single_handler?(l(1===a.handlers.length,"VirtIO device<"+this.name+"> too many notify handlers specified: expected single handler"),c=0):c=2;for(const [d,e]of a.handlers.entries())b.push({bytes:2,
689
+ name:"notify"+d,read:()=>65535,write:e||(()=>{})});return{type:2,bar:1,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array([c&255,c>>8&255,c>>16&255,c>>24]),struct:b}};Fc.prototype.create_isr_capability=function(a){return{type:3,bar:2,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:[{bytes:1,name:"isr_status",read:()=>{const b=this.isr_status;this.lower_irq();return b},write:()=>{}}]}};Fc.prototype.create_device_specific_capability=function(a){l(~a.offset&3,"VirtIO device<"+
690
+ this.name+"> device specific cap offset must be 4-byte aligned");return{type:4,bar:3,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:a.struct}};Fc.prototype.init_capabilities=function(a){let b=this.pci_space[52]=64;var c=b;for(const e of a){a=16+e.extra.length;c=b;b=c+a;l(256>=b,"VirtIO device<"+this.name+"> can't fit all capabilities into 256byte configspace");l(0<=e.bar&&6>e.bar,"VirtIO device<"+this.name+"> capability invalid bar number");var d=e.struct.reduce((f,g)=>f+
691
691
  g.bytes,0);d+=e.offset;d=16>d?16:1<<fa(d-1)+1;l(0===(e.port&d-1),"VirtIO device<"+this.name+"> capability port should be aligned to pci bar size");this.pci_bars[e.bar]={size:d};this.pci_space[c]=9;this.pci_space[c+1]=b;this.pci_space[c+2]=a;this.pci_space[c+3]=e.type;this.pci_space[c+4]=e.bar;this.pci_space[c+5]=0;this.pci_space[c+6]=0;this.pci_space[c+7]=0;this.pci_space[c+8]=e.offset&255;this.pci_space[c+9]=e.offset>>>8&255;this.pci_space[c+10]=e.offset>>>16&255;this.pci_space[c+11]=e.offset>>>
692
692
  24;this.pci_space[c+12]=d&255;this.pci_space[c+13]=d>>>8&255;this.pci_space[c+14]=d>>>16&255;this.pci_space[c+15]=d>>>24;for(const [f,g]of e.extra.entries())this.pci_space[c+16+f]=g;c=16+4*e.bar;this.pci_space[c]=e.port&254|!e.use_mmio;this.pci_space[c+1]=e.port>>>8&255;this.pci_space[c+2]=e.port>>>16&255;this.pci_space[c+3]=e.port>>>24&255;c=e.port+e.offset;for(const f of e.struct){let g=f.read;a=f.write;g=()=>{const k=f.read();B("Device<"+this.name+"> cap["+e.type+"] read["+f.name+"] => "+n(k,8*
693
693
  f.bytes),2097152);return k};a=k=>{B("Device<"+this.name+"> cap["+e.type+"] write["+f.name+"] <= "+n(k,8*f.bytes),2097152);f.write(k)};if(e.use_mmio)l(!1,"VirtIO device <"+this.name+"> mmio capability not implemented.");else{d=function(p){B("Warning: 8-bit read from 16-bit virtio port",2097152);return g(p&-2)>>((p&1)<<3)&255};const k=function(p){B("Warning: 8-bit read from 32-bit virtio port",2097152);return g(p&-4)>>((p&3)<<3)&255},m=function(p){B("Warning: 32-bit read from 16-bit virtio port",2097152);
694
694
  return g(p)};switch(f.bytes){case 4:this.cpu.io.register_read(c,this,k,void 0,g);this.cpu.io.register_read(c+1,this,k);this.cpu.io.register_read(c+2,this,k);this.cpu.io.register_read(c+3,this,k);this.cpu.io.register_write(c,this,void 0,void 0,a);break;case 2:this.cpu.io.register_read(c,this,d,g,m);this.cpu.io.register_read(c+1,this,d);this.cpu.io.register_write(c,this,void 0,a);break;case 1:this.cpu.io.register_read(c,this,g);this.cpu.io.register_write(c,this,a);break;default:l(!1,"VirtIO device <"+
695
695
  this.name+"> invalid capability field width of "+f.bytes+" bytes")}}c+=f.bytes}}l(256>=b+20,"VirtIO device<"+this.name+"> can't fit all capabilities into 256byte configspace");this.pci_space[b]=9;this.pci_space[b+1]=0;this.pci_space[b+2]=20;this.pci_space[b+3]=5;this.pci_space[b+4]=0;this.pci_space[b+5]=0;this.pci_space[b+6]=0;this.pci_space[b+7]=0;this.pci_space[b+8]=0;this.pci_space[b+9]=0;this.pci_space[b+10]=0;this.pci_space[b+11]=0;this.pci_space[b+12]=0;this.pci_space[b+13]=0;this.pci_space[b+
696
- 14]=0;this.pci_space[b+15]=0;this.pci_space[b+16]=0;this.pci_space[b+17]=0;this.pci_space[b+18]=0;this.pci_space[b+19]=0};Ec.prototype.get_state=function(){let a=[];a[0]=this.device_feature_select;a[1]=this.driver_feature_select;a[2]=this.device_feature;a[3]=this.driver_feature;a[4]=this.features_ok;a[5]=this.device_status;a[6]=this.config_has_changed;a[7]=this.config_generation;a[8]=this.isr_status;a[9]=this.queue_select;return a=a.concat(this.queues)};Ec.prototype.set_state=function(a){this.device_feature_select=
697
- a[0];this.driver_feature_select=a[1];this.device_feature=a[2];this.driver_feature=a[3];this.features_ok=a[4];this.device_status=a[5];this.config_has_changed=a[6];this.config_generation=a[7];this.isr_status=a[8];this.queue_select=a[9];let b=0;for(const c of a.slice(10))this.queues[b].set_state(c),b++;this.queue_selected=this.queues[this.queue_select]||null};Ec.prototype.reset=function(){this.driver_feature_select=this.device_feature_select=0;this.driver_feature.set(this.device_feature);this.features_ok=
698
- !0;this.queue_select=this.device_status=0;this.queue_selected=this.queues[0];for(const a of this.queues)a.reset();this.config_has_changed=!1;this.config_generation=0;this.lower_irq()};Ec.prototype.notify_config_changes=function(){this.config_has_changed=!0;this.device_status&4?this.raise_irq(2):l(!1,"VirtIO device<"+this.name+"> attempted to notify driver before DRIVER_OK")};Ec.prototype.update_config_generation=function(){this.config_has_changed&&(this.config_generation++,this.config_generation&=
699
- 255,this.config_has_changed=!1)};Ec.prototype.is_feature_negotiated=function(a){return 0<(this.driver_feature[a>>>5]&1<<(a&31))};Ec.prototype.needs_reset=function(){B("Device<"+this.name+"> experienced error - requires reset",2097152);this.device_status|=64;this.device_status&4&&this.notify_config_changes()};Ec.prototype.raise_irq=function(a){B("Raise irq "+n(a),2097152);this.isr_status|=a;this.pci.raise_irq(this.pci_id)};Ec.prototype.lower_irq=function(){B("Lower irq ",2097152);this.isr_status=0;
696
+ 14]=0;this.pci_space[b+15]=0;this.pci_space[b+16]=0;this.pci_space[b+17]=0;this.pci_space[b+18]=0;this.pci_space[b+19]=0};Fc.prototype.get_state=function(){let a=[];a[0]=this.device_feature_select;a[1]=this.driver_feature_select;a[2]=this.device_feature;a[3]=this.driver_feature;a[4]=this.features_ok;a[5]=this.device_status;a[6]=this.config_has_changed;a[7]=this.config_generation;a[8]=this.isr_status;a[9]=this.queue_select;return a=a.concat(this.queues)};Fc.prototype.set_state=function(a){this.device_feature_select=
697
+ a[0];this.driver_feature_select=a[1];this.device_feature=a[2];this.driver_feature=a[3];this.features_ok=a[4];this.device_status=a[5];this.config_has_changed=a[6];this.config_generation=a[7];this.isr_status=a[8];this.queue_select=a[9];let b=0;for(const c of a.slice(10))this.queues[b].set_state(c),b++;this.queue_selected=this.queues[this.queue_select]||null};Fc.prototype.reset=function(){this.driver_feature_select=this.device_feature_select=0;this.driver_feature.set(this.device_feature);this.features_ok=
698
+ !0;this.queue_select=this.device_status=0;this.queue_selected=this.queues[0];for(const a of this.queues)a.reset();this.config_has_changed=!1;this.config_generation=0;this.lower_irq()};Fc.prototype.notify_config_changes=function(){this.config_has_changed=!0;this.device_status&4?this.raise_irq(2):l(!1,"VirtIO device<"+this.name+"> attempted to notify driver before DRIVER_OK")};Fc.prototype.update_config_generation=function(){this.config_has_changed&&(this.config_generation++,this.config_generation&=
699
+ 255,this.config_has_changed=!1)};Fc.prototype.is_feature_negotiated=function(a){return 0<(this.driver_feature[a>>>5]&1<<(a&31))};Fc.prototype.needs_reset=function(){B("Device<"+this.name+"> experienced error - requires reset",2097152);this.device_status|=64;this.device_status&4&&this.notify_config_changes()};Fc.prototype.raise_irq=function(a){B("Raise irq "+n(a),2097152);this.isr_status|=a;this.pci.raise_irq(this.pci_id)};Fc.prototype.lower_irq=function(){B("Lower irq ",2097152);this.isr_status=0;
700
700
  this.pci.lower_irq(this.pci_id)};function Z(a,b,c){this.cpu=a;this.virtio=b;this.size_supported=this.size=c.size_supported;this.mask=this.size-1;this.enabled=!1;this.notify_offset=c.notify_offset;this.num_staged_replies=this.used_addr=this.avail_last_idx=this.avail_addr=this.desc_addr=0;this.reset()}Z.prototype.get_state=function(){const a=[];a[0]=this.size;a[1]=this.size_supported;a[2]=this.enabled;a[3]=this.notify_offset;a[4]=this.desc_addr;a[5]=this.avail_addr;a[6]=this.avail_last_idx;a[7]=this.used_addr;
701
701
  a[8]=this.num_staged_replies;a[9]=1;return a};Z.prototype.set_state=function(a){this.size=a[0];this.size_supported=a[1];this.enabled=a[2];this.notify_offset=a[3];this.desc_addr=a[4];this.avail_addr=a[5];this.avail_last_idx=a[6];this.used_addr=a[7];this.num_staged_replies=a[8];this.mask=this.size-1;this.fix_wrapping=1!==a[9]};Z.prototype.reset=function(){this.enabled=!1;this.num_staged_replies=this.used_addr=this.avail_last_idx=this.avail_addr=this.desc_addr=0;this.set_size(this.size_supported)};Z.prototype.is_configured=
702
702
  function(){return this.desc_addr&&this.avail_addr&&this.used_addr};Z.prototype.enable=function(){l(this.is_configured(),"VirtQueue must be configured before enabled");this.enabled=!0};Z.prototype.set_size=function(a){l(0===(a&a-1),"VirtQueue size must be power of 2 or zero");l(a<=this.size_supported,"VirtQueue size must be within supported size");this.size=a;this.mask=a-1};Z.prototype.count_requests=function(){l(this.avail_addr,"VirtQueue addresses must be configured before use");this.fix_wrapping&&
703
703
  (this.fix_wrapping=!1,this.avail_last_idx=(this.avail_get_idx()&~this.mask)+(this.avail_last_idx&this.mask));return this.avail_get_idx()-this.avail_last_idx&65535};Z.prototype.has_request=function(){l(this.avail_addr,"VirtQueue addresses must be configured before use");return 0!==this.count_requests()};Z.prototype.pop_request=function(){l(this.avail_addr,"VirtQueue addresses must be configured before use");l(this.has_request(),"VirtQueue must not pop nonexistent request");var a=this.avail_get_entry(this.avail_last_idx);
704
- B("Pop request: avail_last_idx="+this.avail_last_idx+" desc_idx="+a,2097152);a=new ed(this,a);this.avail_last_idx=this.avail_last_idx+1&65535;return a};Z.prototype.push_reply=function(a){l(this.used_addr,"VirtQueue addresses must be configured before use");l(this.num_staged_replies<this.size,"VirtQueue replies must not exceed queue size");const b=this.used_get_idx()+this.num_staged_replies&this.mask;B("Push reply: used_idx="+b+" desc_idx="+a.head_idx,2097152);this.used_set_entry(b,a.head_idx,a.length_written);
704
+ B("Pop request: avail_last_idx="+this.avail_last_idx+" desc_idx="+a,2097152);a=new fd(this,a);this.avail_last_idx=this.avail_last_idx+1&65535;return a};Z.prototype.push_reply=function(a){l(this.used_addr,"VirtQueue addresses must be configured before use");l(this.num_staged_replies<this.size,"VirtQueue replies must not exceed queue size");const b=this.used_get_idx()+this.num_staged_replies&this.mask;B("Push reply: used_idx="+b+" desc_idx="+a.head_idx,2097152);this.used_set_entry(b,a.head_idx,a.length_written);
705
705
  this.num_staged_replies++};Z.prototype.flush_replies=function(){l(this.used_addr,"VirtQueue addresses must be configured before use");if(0===this.num_staged_replies)B("flush_replies: Nothing to flush",2097152);else{B("Flushing "+this.num_staged_replies+" replies",2097152);var a=this.used_get_idx()+this.num_staged_replies&65535;this.used_set_idx(a);this.num_staged_replies=0;this.virtio.is_feature_negotiated(29)?(this.avail_get_used_event(),this.virtio.raise_irq(1)):~this.avail_get_flags()&1&&this.virtio.raise_irq(1)}};
706
706
  Z.prototype.notify_me_after=function(a){l(0<=a,"Must skip a non-negative number of requests");a=this.avail_get_idx()+a&65535;this.used_set_avail_event(a)};Z.prototype.get_descriptor=function(a,b){return{addr_low:this.cpu.read32s(a+16*b),addr_high:this.cpu.read32s(a+16*b+4),len:this.cpu.read32s(a+16*b+8),flags:this.cpu.read16(a+16*b+12),next:this.cpu.read16(a+16*b+14)}};Z.prototype.avail_get_flags=function(){return this.cpu.read16(this.avail_addr)};Z.prototype.avail_get_idx=function(){return this.cpu.read16(this.avail_addr+
707
707
  2)};Z.prototype.avail_get_entry=function(a){return this.cpu.read16(this.avail_addr+4+2*(a&this.mask))};Z.prototype.avail_get_used_event=function(){return this.cpu.read16(this.avail_addr+4+2*this.size)};Z.prototype.used_get_flags=function(){return this.cpu.read16(this.used_addr)};Z.prototype.used_set_flags=function(a){this.cpu.write16(this.used_addr,a)};Z.prototype.used_get_idx=function(){return this.cpu.read16(this.used_addr+2)};Z.prototype.used_set_idx=function(a){this.cpu.write16(this.used_addr+
708
- 2,a)};Z.prototype.used_set_entry=function(a,b,c){this.cpu.write32(this.used_addr+4+8*a,b);this.cpu.write32(this.used_addr+8+8*a,c)};Z.prototype.used_set_avail_event=function(a){this.cpu.write16(this.used_addr+4+8*this.size,a)};function ed(a,b){this.cpu=a.cpu;this.virtio=a.virtio;this.head_idx=b;this.read_buffers=[];this.length_readable=this.read_buffer_offset=this.read_buffer_idx=0;this.write_buffers=[];this.length_writable=this.length_written=this.write_buffer_offset=this.write_buffer_idx=0;let c=
708
+ 2,a)};Z.prototype.used_set_entry=function(a,b,c){this.cpu.write32(this.used_addr+4+8*a,b);this.cpu.write32(this.used_addr+8+8*a,c)};Z.prototype.used_set_avail_event=function(a){this.cpu.write16(this.used_addr+4+8*this.size,a)};function fd(a,b){this.cpu=a.cpu;this.virtio=a.virtio;this.head_idx=b;this.read_buffers=[];this.length_readable=this.read_buffer_offset=this.read_buffer_idx=0;this.write_buffers=[];this.length_writable=this.length_written=this.write_buffer_offset=this.write_buffer_idx=0;let c=
709
709
  a.desc_addr,d=0,e=a.size,f=!1;const g=this.virtio.is_feature_negotiated(28);B("<<< Descriptor chain start",2097152);do{const k=a.get_descriptor(c,b);B("descriptor: idx="+b+" addr="+n(k.addr_high,8)+":"+n(k.addr_low,8)+" len="+n(k.len,8)+" flags="+n(k.flags,4)+" next="+n(k.next,4),2097152);if(g&&k.flags&4)k.flags&1&&B("Driver bug: has set VIRTQ_DESC_F_NEXT flag in an indirect table descriptor",2097152),c=k.addr_low,d=b=0,e=k.len/16,B("start indirect",2097152);else{if(k.flags&2)f=!0,this.write_buffers.push(k),
710
- this.length_writable+=k.len;else{if(f){B("Driver bug: readonly buffer after writeonly buffer within chain",2097152);break}this.read_buffers.push(k);this.length_readable+=k.len}d++;if(d>e){B("Driver bug: descriptor chain cycle detected",2097152);break}if(k.flags&1)b=k.next;else break}}while(1);B("Descriptor chain end >>>",2097152)}ed.prototype.get_next_blob=function(a){let b=0,c=a.length;for(;c;){if(this.read_buffer_idx===this.read_buffers.length){B("Device<"+this.virtio.name+"> Read more than device-readable buffers has",
711
- 2097152);break}var d=this.read_buffers[this.read_buffer_idx];const e=d.addr_low+this.read_buffer_offset;d=d.len-this.read_buffer_offset;d>c?(d=c,this.read_buffer_offset+=c):(this.read_buffer_idx++,this.read_buffer_offset=0);a.set(this.cpu.read_blob(e,d),b);b+=d;c-=d}return b};ed.prototype.set_next_blob=function(a){let b=0,c=a.length;for(;c;){if(this.write_buffer_idx===this.write_buffers.length){B("Device<"+this.virtio.name+"> Write more than device-writable capacity",2097152);break}var d=this.write_buffers[this.write_buffer_idx];
712
- const e=d.addr_low+this.write_buffer_offset;d=d.len-this.write_buffer_offset;d>c?(d=c,this.write_buffer_offset+=c):(this.write_buffer_idx++,this.write_buffer_offset=0);this.cpu.write_blob(a.subarray(b,b+d),e);b+=d;c-=d}this.length_written+=b;return b};const fd=["shared","exclusive","unlock"];function gd(a,b,c,d){const e=new Ec(a,{name:"virtio-9p",pci_id:48,device_id:4169,subsystem_device_id:9,common:{initial_port:43008,queues:[{size_supported:32,notify_offset:0}],features:[0,32,29,28],on_driver_ok:()=>
710
+ this.length_writable+=k.len;else{if(f){B("Driver bug: readonly buffer after writeonly buffer within chain",2097152);break}this.read_buffers.push(k);this.length_readable+=k.len}d++;if(d>e){B("Driver bug: descriptor chain cycle detected",2097152);break}if(k.flags&1)b=k.next;else break}}while(1);B("Descriptor chain end >>>",2097152)}fd.prototype.get_next_blob=function(a){let b=0,c=a.length;for(;c;){if(this.read_buffer_idx===this.read_buffers.length){B("Device<"+this.virtio.name+"> Read more than device-readable buffers has",
711
+ 2097152);break}var d=this.read_buffers[this.read_buffer_idx];const e=d.addr_low+this.read_buffer_offset;d=d.len-this.read_buffer_offset;d>c?(d=c,this.read_buffer_offset+=c):(this.read_buffer_idx++,this.read_buffer_offset=0);a.set(this.cpu.read_blob(e,d),b);b+=d;c-=d}return b};fd.prototype.set_next_blob=function(a){let b=0,c=a.length;for(;c;){if(this.write_buffer_idx===this.write_buffers.length){B("Device<"+this.virtio.name+"> Write more than device-writable capacity",2097152);break}var d=this.write_buffers[this.write_buffer_idx];
712
+ const e=d.addr_low+this.write_buffer_offset;d=d.len-this.write_buffer_offset;d>c?(d=c,this.write_buffer_offset+=c):(this.write_buffer_idx++,this.write_buffer_offset=0);this.cpu.write_blob(a.subarray(b,b+d),e);b+=d;c-=d}this.length_written+=b;return b};const gd=["shared","exclusive","unlock"];function hd(a,b,c,d){const e=new Fc(a,{name:"virtio-9p",pci_id:48,device_id:4169,subsystem_device_id:9,common:{initial_port:43008,queues:[{size_supported:32,notify_offset:0}],features:[0,32,29,28],on_driver_ok:()=>
713
713
  {}},notification:{initial_port:43264,single_handler:!1,handlers:[f=>{if(0!==f)l(!1,"Virtio9P Notified for non-existent queue: "+f+" (expected queue_id of 0)");else{for(f=e.queues[0];f.has_request();){const g=f.pop_request();d(g)}f.notify_me_after(0)}}]},isr_status:{initial_port:42752},device_specific:{initial_port:42496,struct:[{bytes:2,name:"mount tag length",read:()=>b,write:()=>{}}].concat(Array.from(Array(254).keys()).map(f=>({bytes:1,name:"mount tag name "+f,read:()=>c[f]||0,write:()=>{}})))}});
714
- return e}function bd(a,b,c){this.fs=a;this.bus=c;this.configspace_tagname=[104,111,115,116,57,112];this.configspace_taglen=this.configspace_tagname.length;this.virtio=gd(b,this.configspace_taglen,this.configspace_tagname,this.ReceiveRequest.bind(this));this.virtqueue=this.virtio.queues[0];this.VERSION="9P2000.L";this.msize=this.BLOCKSIZE=8192;this.replybuffer=new Uint8Array(2*this.msize);this.replybuffersize=0;this.fids=[]}bd.prototype.get_state=function(){var a=[];a[0]=this.configspace_tagname;a[1]=
715
- this.configspace_taglen;a[2]=this.virtio;a[3]=this.VERSION;a[4]=this.BLOCKSIZE;a[5]=this.msize;a[6]=this.replybuffer;a[7]=this.replybuffersize;a[8]=this.fids.map(function(b){return[b.inodeid,b.type,b.uid,b.dbg_name]});a[9]=this.fs;return a};bd.prototype.set_state=function(a){this.configspace_tagname=a[0];this.configspace_taglen=a[1];this.virtio.set_state(a[2]);this.virtqueue=this.virtio.queues[0];this.VERSION=a[3];this.BLOCKSIZE=a[4];this.msize=a[5];this.replybuffer=a[6];this.replybuffersize=a[7];
716
- this.fids=a[8].map(function(b){return{inodeid:b[0],type:b[1],uid:b[2],dbg_name:b[3]}});this.fs.set_state(a[9])};bd.prototype.Createfid=function(a,b,c,d){return{inodeid:a,type:b,uid:c,dbg_name:d}};bd.prototype.update_dbg_name=function(a,b){for(const c of this.fids)c.inodeid===a&&(c.dbg_name=b)};bd.prototype.reset=function(){this.fids=[];this.virtio.reset()};bd.prototype.BuildReply=function(a,b,c){l(0<=c,"9P: Negative payload size");J(["w","b","h"],[c+7,a+1,b],this.replybuffer,0);c+7>=this.replybuffer.length&&
717
- B("Error in 9p: payloadsize exceeds maximum length",4194304);this.replybuffersize=c+7};bd.prototype.SendError=function(a,b,c){b=J(["w"],[c],this.replybuffer,7);this.BuildReply(6,a,b)};bd.prototype.SendReply=function(a){l(0<=this.replybuffersize,"9P: Negative replybuffersize");a.set_next_blob(this.replybuffer.subarray(0,this.replybuffersize));this.virtqueue.push_reply(a);this.virtqueue.flush_replies()};bd.prototype.ReceiveRequest=async function(a){var b=new Uint8Array(a.length_readable);a.get_next_blob(b);
718
- var c={offset:0},d=K(["w","b","h"],b,c),e=d[1];d=d[2];switch(e){case 8:var f=this.fs.GetTotalSize();var g=this.fs.GetSpace(),k=[16914839];k[1]=this.BLOCKSIZE;k[2]=Math.floor(g/k[1]);k[3]=k[2]-Math.floor(f/k[1]);k[4]=k[2]-Math.floor(f/k[1]);k[5]=this.fs.CountUsedInodes();k[6]=this.fs.CountFreeInodes();k[7]=0;k[8]=256;f=J("wwddddddw".split(""),k,this.replybuffer,7);this.BuildReply(e,d,f);this.SendReply(a);break;case 112:case 12:k=K(["w","w"],b,c);f=k[0];c=k[1];B("[open] fid="+f+", mode="+c,4194304);
719
- b=this.fids[f].inodeid;var m=this.fs.GetInode(b);B("file open "+this.fids[f].dbg_name+" tag:"+d,4194304);await this.fs.OpenInode(b,c);k=[];k[0]=m.qid;k[1]=this.msize-24;J(["Q","w"],k,this.replybuffer,7);this.BuildReply(e,d,17);this.SendReply(a);break;case 70:k=K(["w","w","s"],b,c);b=k[0];f=k[1];g=k[2];B("[link] dfid="+b+", name="+g,4194304);f=this.fs.Link(this.fids[b].inodeid,this.fids[f].inodeid,g);if(0>f){-1===f?e="Operation not permitted":(e="Unknown error: "+-f,l(!1,"[link]: Unexpected error code: "+
720
- -f));this.SendError(d,e,-f);this.SendReply(a);break}this.BuildReply(e,d,0);this.SendReply(a);break;case 16:k=K(["w","s","s","w"],b,c);f=k[0];g=k[1];b=k[2];k=k[3];B("[symlink] fid="+f+", name="+g+", symgt="+b+", gid="+k,4194304);b=this.fs.CreateSymlink(g,this.fids[f].inodeid,b);m=this.fs.GetInode(b);m.uid=this.fids[f].uid;m.gid=k;J(["Q"],[m.qid],this.replybuffer,7);this.BuildReply(e,d,13);this.SendReply(a);break;case 18:k=K("wswwww".split(""),b,c);f=k[0];g=k[1];c=k[2];b=k[3];m=k[4];k=k[5];B("[mknod] fid="+
721
- f+", name="+g+", major="+b+", minor="+m,4194304);b=this.fs.CreateNode(g,this.fids[f].inodeid,b,m);m=this.fs.GetInode(b);m.mode=c;m.uid=this.fids[f].uid;m.gid=k;J(["Q"],[m.qid],this.replybuffer,7);this.BuildReply(e,d,13);this.SendReply(a);break;case 22:k=K(["w"],b,c);f=k[0];m=this.fs.GetInode(this.fids[f].inodeid);B("[readlink] fid="+f+" name="+this.fids[f].dbg_name+" target="+m.symlink,4194304);f=J(["s"],[m.symlink],this.replybuffer,7);this.BuildReply(e,d,f);this.SendReply(a);break;case 72:k=K(["w",
722
- "s","w","w"],b,c);f=k[0];g=k[1];c=k[2];k=k[3];B("[mkdir] fid="+f+", name="+g+", mode="+c+", gid="+k,4194304);b=this.fs.CreateDirectory(g,this.fids[f].inodeid);m=this.fs.GetInode(b);m.mode=c|16384;m.uid=this.fids[f].uid;m.gid=k;J(["Q"],[m.qid],this.replybuffer,7);this.BuildReply(e,d,13);this.SendReply(a);break;case 14:k=K(["w","s","w","w","w"],b,c);f=k[0];g=k[1];b=k[2];c=k[3];k=k[4];this.bus.send("9p-create",[g,this.fids[f].inodeid]);B("[create] fid="+f+", name="+g+", flags="+b+", mode="+c+", gid="+
723
- k,4194304);b=this.fs.CreateFile(g,this.fids[f].inodeid);this.fids[f].inodeid=b;this.fids[f].type=1;this.fids[f].dbg_name=g;m=this.fs.GetInode(b);m.uid=this.fids[f].uid;m.gid=k;m.mode=c|32768;J(["Q","w"],[m.qid,this.msize-24],this.replybuffer,7);this.BuildReply(e,d,17);this.SendReply(a);break;case 52:k=K("wbwddws".split(""),b,c);f=k[0];b=k[2];g=0===k[4]?Infinity:k[4];k=this.fs.DescribeLock(k[1],k[3],g,k[5],k[6]);B("[lock] fid="+f+", type="+fd[k.type]+", start="+k.start+", length="+k.length+", proc_id="+
724
- k.proc_id);f=this.fs.Lock(this.fids[f].inodeid,k,b);J(["b"],[f],this.replybuffer,7);this.BuildReply(e,d,1);this.SendReply(a);break;case 54:k=K("wbddws".split(""),b,c);f=k[0];g=0===k[3]?Infinity:k[3];k=this.fs.DescribeLock(k[1],k[2],g,k[4],k[5]);B("[getlock] fid="+f+", type="+fd[k.type]+", start="+k.start+", length="+k.length+", proc_id="+k.proc_id);f=this.fs.GetLock(this.fids[f].inodeid,k);f||(f=k,f.type=2);f=J(["b","d","d","w","s"],[f.type,f.start,Infinity===f.length?0:f.length,f.proc_id,f.client_id],
725
- this.replybuffer,7);this.BuildReply(e,d,f);this.SendReply(a);break;case 24:k=K(["w","d"],b,c);f=k[0];m=this.fs.GetInode(this.fids[f].inodeid);B("[getattr]: fid="+f+" name="+this.fids[f].dbg_name+" request mask="+k[1],4194304);if(!m||4===m.status){B("getattr: unlinked",4194304);this.SendError(d,"No such file or directory",2);this.SendReply(a);break}k[0]=k[1];k[1]=m.qid;k[2]=m.mode;k[3]=m.uid;k[4]=m.gid;k[5]=m.nlinks;k[6]=m.major<<8|m.minor;k[7]=m.size;k[8]=this.BLOCKSIZE;k[9]=Math.floor(m.size/512+
726
- 1);k[10]=m.atime;k[11]=0;k[12]=m.mtime;k[13]=0;k[14]=m.ctime;k[15]=0;k[16]=0;k[17]=0;k[18]=0;k[19]=0;J("dQwwwddddddddddddddd".split(""),k,this.replybuffer,7);this.BuildReply(e,d,153);this.SendReply(a);break;case 26:k=K("wwwwwddddd".split(""),b,c);f=k[0];m=this.fs.GetInode(this.fids[f].inodeid);B("[setattr]: fid="+f+" request mask="+k[1]+" name="+this.fids[f].dbg_name,4194304);k[1]&1&&(m.mode=k[2]);k[1]&2&&(m.uid=k[3]);k[1]&4&&(m.gid=k[4]);k[1]&16&&(m.atime=Math.floor((new Date).getTime()/1E3));k[1]&
727
- 32&&(m.mtime=Math.floor((new Date).getTime()/1E3));k[1]&64&&(m.ctime=Math.floor((new Date).getTime()/1E3));k[1]&128&&(m.atime=k[6]);k[1]&256&&(m.mtime=k[8]);k[1]&8&&await this.fs.ChangeSize(this.fids[f].inodeid,k[5]);this.BuildReply(e,d,0);this.SendReply(a);break;case 50:K(["w","d"],b,c);this.BuildReply(e,d,0);this.SendReply(a);break;case 40:case 116:k=K(["w","d","w"],b,c);f=k[0];g=k[1];var p=k[2];m=this.fs.GetInode(this.fids[f].inodeid);40===e&&B("[treaddir]: fid="+f+" offset="+g+" count="+p,4194304);
714
+ return e}function cd(a,b,c){this.fs=a;this.bus=c;this.configspace_tagname=[104,111,115,116,57,112];this.configspace_taglen=this.configspace_tagname.length;this.virtio=hd(b,this.configspace_taglen,this.configspace_tagname,this.ReceiveRequest.bind(this));this.virtqueue=this.virtio.queues[0];this.VERSION="9P2000.L";this.msize=this.BLOCKSIZE=8192;this.replybuffer=new Uint8Array(2*this.msize);this.replybuffersize=0;this.fids=[]}cd.prototype.get_state=function(){var a=[];a[0]=this.configspace_tagname;a[1]=
715
+ this.configspace_taglen;a[2]=this.virtio;a[3]=this.VERSION;a[4]=this.BLOCKSIZE;a[5]=this.msize;a[6]=this.replybuffer;a[7]=this.replybuffersize;a[8]=this.fids.map(function(b){return[b.inodeid,b.type,b.uid,b.dbg_name]});a[9]=this.fs;return a};cd.prototype.set_state=function(a){this.configspace_tagname=a[0];this.configspace_taglen=a[1];this.virtio.set_state(a[2]);this.virtqueue=this.virtio.queues[0];this.VERSION=a[3];this.BLOCKSIZE=a[4];this.msize=a[5];this.replybuffer=a[6];this.replybuffersize=a[7];
716
+ this.fids=a[8].map(function(b){return{inodeid:b[0],type:b[1],uid:b[2],dbg_name:b[3]}});this.fs.set_state(a[9])};cd.prototype.Createfid=function(a,b,c,d){return{inodeid:a,type:b,uid:c,dbg_name:d}};cd.prototype.update_dbg_name=function(a,b){for(const c of this.fids)c.inodeid===a&&(c.dbg_name=b)};cd.prototype.reset=function(){this.fids=[];this.virtio.reset()};cd.prototype.BuildReply=function(a,b,c){l(0<=c,"9P: Negative payload size");I(["w","b","h"],[c+7,a+1,b],this.replybuffer,0);c+7>=this.replybuffer.length&&
717
+ B("Error in 9p: payloadsize exceeds maximum length",4194304);this.replybuffersize=c+7};cd.prototype.SendError=function(a,b,c){b=I(["w"],[c],this.replybuffer,7);this.BuildReply(6,a,b)};cd.prototype.SendReply=function(a){l(0<=this.replybuffersize,"9P: Negative replybuffersize");a.set_next_blob(this.replybuffer.subarray(0,this.replybuffersize));this.virtqueue.push_reply(a);this.virtqueue.flush_replies()};cd.prototype.ReceiveRequest=async function(a){var b=new Uint8Array(a.length_readable);a.get_next_blob(b);
718
+ var c={offset:0},d=J(["w","b","h"],b,c),e=d[1];d=d[2];switch(e){case 8:var f=this.fs.GetTotalSize();var g=this.fs.GetSpace(),k=[16914839];k[1]=this.BLOCKSIZE;k[2]=Math.floor(g/k[1]);k[3]=k[2]-Math.floor(f/k[1]);k[4]=k[2]-Math.floor(f/k[1]);k[5]=this.fs.CountUsedInodes();k[6]=this.fs.CountFreeInodes();k[7]=0;k[8]=256;f=I("wwddddddw".split(""),k,this.replybuffer,7);this.BuildReply(e,d,f);this.SendReply(a);break;case 112:case 12:k=J(["w","w"],b,c);f=k[0];c=k[1];B("[open] fid="+f+", mode="+c,4194304);
719
+ b=this.fids[f].inodeid;var m=this.fs.GetInode(b);B("file open "+this.fids[f].dbg_name+" tag:"+d,4194304);await this.fs.OpenInode(b,c);k=[];k[0]=m.qid;k[1]=this.msize-24;I(["Q","w"],k,this.replybuffer,7);this.BuildReply(e,d,17);this.SendReply(a);break;case 70:k=J(["w","w","s"],b,c);b=k[0];f=k[1];g=k[2];B("[link] dfid="+b+", name="+g,4194304);f=this.fs.Link(this.fids[b].inodeid,this.fids[f].inodeid,g);if(0>f){-1===f?e="Operation not permitted":(e="Unknown error: "+-f,l(!1,"[link]: Unexpected error code: "+
720
+ -f));this.SendError(d,e,-f);this.SendReply(a);break}this.BuildReply(e,d,0);this.SendReply(a);break;case 16:k=J(["w","s","s","w"],b,c);f=k[0];g=k[1];b=k[2];k=k[3];B("[symlink] fid="+f+", name="+g+", symgt="+b+", gid="+k,4194304);b=this.fs.CreateSymlink(g,this.fids[f].inodeid,b);m=this.fs.GetInode(b);m.uid=this.fids[f].uid;m.gid=k;I(["Q"],[m.qid],this.replybuffer,7);this.BuildReply(e,d,13);this.SendReply(a);break;case 18:k=J("wswwww".split(""),b,c);f=k[0];g=k[1];c=k[2];b=k[3];m=k[4];k=k[5];B("[mknod] fid="+
721
+ f+", name="+g+", major="+b+", minor="+m,4194304);b=this.fs.CreateNode(g,this.fids[f].inodeid,b,m);m=this.fs.GetInode(b);m.mode=c;m.uid=this.fids[f].uid;m.gid=k;I(["Q"],[m.qid],this.replybuffer,7);this.BuildReply(e,d,13);this.SendReply(a);break;case 22:k=J(["w"],b,c);f=k[0];m=this.fs.GetInode(this.fids[f].inodeid);B("[readlink] fid="+f+" name="+this.fids[f].dbg_name+" target="+m.symlink,4194304);f=I(["s"],[m.symlink],this.replybuffer,7);this.BuildReply(e,d,f);this.SendReply(a);break;case 72:k=J(["w",
722
+ "s","w","w"],b,c);f=k[0];g=k[1];c=k[2];k=k[3];B("[mkdir] fid="+f+", name="+g+", mode="+c+", gid="+k,4194304);b=this.fs.CreateDirectory(g,this.fids[f].inodeid);m=this.fs.GetInode(b);m.mode=c|16384;m.uid=this.fids[f].uid;m.gid=k;I(["Q"],[m.qid],this.replybuffer,7);this.BuildReply(e,d,13);this.SendReply(a);break;case 14:k=J(["w","s","w","w","w"],b,c);f=k[0];g=k[1];b=k[2];c=k[3];k=k[4];this.bus.send("9p-create",[g,this.fids[f].inodeid]);B("[create] fid="+f+", name="+g+", flags="+b+", mode="+c+", gid="+
723
+ k,4194304);b=this.fs.CreateFile(g,this.fids[f].inodeid);this.fids[f].inodeid=b;this.fids[f].type=1;this.fids[f].dbg_name=g;m=this.fs.GetInode(b);m.uid=this.fids[f].uid;m.gid=k;m.mode=c|32768;I(["Q","w"],[m.qid,this.msize-24],this.replybuffer,7);this.BuildReply(e,d,17);this.SendReply(a);break;case 52:k=J("wbwddws".split(""),b,c);f=k[0];b=k[2];g=0===k[4]?Infinity:k[4];k=this.fs.DescribeLock(k[1],k[3],g,k[5],k[6]);B("[lock] fid="+f+", type="+gd[k.type]+", start="+k.start+", length="+k.length+", proc_id="+
724
+ k.proc_id);f=this.fs.Lock(this.fids[f].inodeid,k,b);I(["b"],[f],this.replybuffer,7);this.BuildReply(e,d,1);this.SendReply(a);break;case 54:k=J("wbddws".split(""),b,c);f=k[0];g=0===k[3]?Infinity:k[3];k=this.fs.DescribeLock(k[1],k[2],g,k[4],k[5]);B("[getlock] fid="+f+", type="+gd[k.type]+", start="+k.start+", length="+k.length+", proc_id="+k.proc_id);f=this.fs.GetLock(this.fids[f].inodeid,k);f||(f=k,f.type=2);f=I(["b","d","d","w","s"],[f.type,f.start,Infinity===f.length?0:f.length,f.proc_id,f.client_id],
725
+ this.replybuffer,7);this.BuildReply(e,d,f);this.SendReply(a);break;case 24:k=J(["w","d"],b,c);f=k[0];m=this.fs.GetInode(this.fids[f].inodeid);B("[getattr]: fid="+f+" name="+this.fids[f].dbg_name+" request mask="+k[1],4194304);if(!m||4===m.status){B("getattr: unlinked",4194304);this.SendError(d,"No such file or directory",2);this.SendReply(a);break}k[0]=k[1];k[1]=m.qid;k[2]=m.mode;k[3]=m.uid;k[4]=m.gid;k[5]=m.nlinks;k[6]=m.major<<8|m.minor;k[7]=m.size;k[8]=this.BLOCKSIZE;k[9]=Math.floor(m.size/512+
726
+ 1);k[10]=m.atime;k[11]=0;k[12]=m.mtime;k[13]=0;k[14]=m.ctime;k[15]=0;k[16]=0;k[17]=0;k[18]=0;k[19]=0;I("dQwwwddddddddddddddd".split(""),k,this.replybuffer,7);this.BuildReply(e,d,153);this.SendReply(a);break;case 26:k=J("wwwwwddddd".split(""),b,c);f=k[0];m=this.fs.GetInode(this.fids[f].inodeid);B("[setattr]: fid="+f+" request mask="+k[1]+" name="+this.fids[f].dbg_name,4194304);k[1]&1&&(m.mode=k[2]);k[1]&2&&(m.uid=k[3]);k[1]&4&&(m.gid=k[4]);k[1]&16&&(m.atime=Math.floor((new Date).getTime()/1E3));k[1]&
727
+ 32&&(m.mtime=Math.floor((new Date).getTime()/1E3));k[1]&64&&(m.ctime=Math.floor((new Date).getTime()/1E3));k[1]&128&&(m.atime=k[6]);k[1]&256&&(m.mtime=k[8]);k[1]&8&&await this.fs.ChangeSize(this.fids[f].inodeid,k[5]);this.BuildReply(e,d,0);this.SendReply(a);break;case 50:J(["w","d"],b,c);this.BuildReply(e,d,0);this.SendReply(a);break;case 40:case 116:k=J(["w","d","w"],b,c);f=k[0];g=k[1];var p=k[2];m=this.fs.GetInode(this.fids[f].inodeid);40===e&&B("[treaddir]: fid="+f+" offset="+g+" count="+p,4194304);
728
728
  116===e&&B("[read]: fid="+f+" ("+this.fids[f].dbg_name+") offset="+g+" count="+p+" fidtype="+this.fids[f].type,4194304);if(!m||4===m.status){B("read/treaddir: unlinked",4194304);this.SendError(d,"No such file or directory",2);this.SendReply(a);break}if(2===this.fids[f].type)for(m.caps.length<g+p&&(p=m.caps.length-g),k=0;k<p;k++)this.replybuffer[11+k]=m.caps[g+k];else await this.fs.OpenInode(this.fids[f].inodeid,void 0),k=this.fids[f].inodeid,p=Math.min(p,this.replybuffer.length-11),m.size<g+p?p=m.size-
729
- g:40===e&&(p=this.fs.RoundToDirentry(k,g+p)-g),g>m.size&&(p=0),this.bus.send("9p-read-start",[this.fids[f].dbg_name]),k=await this.fs.Read(k,g,p),this.bus.send("9p-read-end",[this.fids[f].dbg_name,p]),k&&this.replybuffer.set(k,11);J(["w"],[p],this.replybuffer,7);this.BuildReply(e,d,4+p);this.SendReply(a);break;case 118:k=K(["w","d","w"],b,c);f=k[0];g=k[1];p=k[2];k=this.fids[f].dbg_name;B("[write]: fid="+f+" ("+k+") offset="+g+" count="+p+" fidtype="+this.fids[f].type,4194304);if(2===this.fids[f].type){this.SendError(d,
730
- "Setxattr not supported",95);this.SendReply(a);break}else await this.fs.Write(this.fids[f].inodeid,g,p,b.subarray(c.offset));this.bus.send("9p-write-end",[k,p]);J(["w"],[p],this.replybuffer,7);this.BuildReply(e,d,4);this.SendReply(a);break;case 74:k=K(["w","s","w","s"],b,c);f=k[0];g=k[1];b=k[2];k=k[3];B("[renameat]: oldname="+g+" newname="+k,4194304);f=await this.fs.Rename(this.fids[f].inodeid,g,this.fids[b].inodeid,k);if(0>f){-2===f?e="No such file or directory":-1===f?e="Operation not permitted":
731
- -39===f?e="Directory not empty":(e="Unknown error: "+-f,l(!1,"[renameat]: Unexpected error code: "+-f));this.SendError(d,e,-f);this.SendReply(a);break}this.BuildReply(e,d,0);this.SendReply(a);break;case 76:k=K(["w","s","w"],b,c);c=k[0];g=k[1];b=k[2];B("[unlink]: dirfd="+c+" name="+g+" flags="+b,4194304);f=this.fs.Search(this.fids[c].inodeid,g);if(-1===f){this.SendError(d,"No such file or directory",2);this.SendReply(a);break}f=this.fs.Unlink(this.fids[c].inodeid,g);if(0>f){-39===f?e="Directory not empty":
732
- -1===f?e="Operation not permitted":(e="Unknown error: "+-f,l(!1,"[unlink]: Unexpected error code: "+-f));this.SendError(d,e,-f);this.SendReply(a);break}this.BuildReply(e,d,0);this.SendReply(a);break;case 100:f=K(["w","s"],b,c);B("[version]: msize="+f[0]+" version="+f[1],4194304);this.msize!==f[0]&&(this.msize=f[0],this.replybuffer=new Uint8Array(Math.min(16777216,2*this.msize)));f=J(["w","s"],[this.msize,this.VERSION],this.replybuffer,7);this.BuildReply(e,d,f);this.SendReply(a);break;case 104:k=K(["w",
733
- "w","s","s","w"],b,c);f=k[0];g=k[4];B("[attach]: fid="+f+" afid="+n(k[1])+" uname="+k[2]+" aname="+k[3],4194304);this.fids[f]=this.Createfid(0,1,g,"");m=this.fs.GetInode(this.fids[f].inodeid);J(["Q"],[m.qid],this.replybuffer,7);this.BuildReply(e,d,13);this.SendReply(a);this.bus.send("9p-attach");break;case 108:K(["h"],b,c);B("[flush] "+d,4194304);this.BuildReply(e,d,0);this.SendReply(a);break;case 110:k=K(["w","w","h"],b,c);f=k[0];m=k[1];p=k[2];B("[walk]: fid="+k[0]+" nwfid="+k[1]+" nwname="+p,4194304);
734
- if(0===p){this.fids[m]=this.Createfid(this.fids[f].inodeid,1,this.fids[f].uid,this.fids[f].dbg_name);J(["h"],[0],this.replybuffer,7);this.BuildReply(e,d,2);this.SendReply(a);break}g=[];for(k=0;k<p;k++)g.push("s");c=K(g,b,c);b=this.fids[f].inodeid;g=9;var q=0;B("walk in dir "+this.fids[f].dbg_name+" to: "+c.toString(),4194304);for(k=0;k<p;k++){b=this.fs.Search(b,c[k]);if(-1===b){B("Could not find: "+c[k],4194304);break}g+=J(["Q"],[this.fs.GetInode(b).qid],this.replybuffer,g);q++;this.fids[m]=this.Createfid(b,
735
- 1,this.fids[f].uid,c[k])}J(["h"],[q],this.replybuffer,7);this.BuildReply(e,d,g-7);this.SendReply(a);break;case 120:k=K(["w"],b,c);B("[clunk]: fid="+k[0],4194304);this.fids[k[0]]&&0<=this.fids[k[0]].inodeid&&(await this.fs.CloseInode(this.fids[k[0]].inodeid),this.fids[k[0]].inodeid=-1,this.fids[k[0]].type=-1);this.BuildReply(e,d,0);this.SendReply(a);break;case 32:k=K(["w","s","d","w"],b,c);f=k[0];g=k[1];c=k[2];b=k[3];B("[txattrcreate]: fid="+f+" name="+g+" attr_size="+c+" flags="+b,4194304);this.fids[f].type=
736
- 2;this.BuildReply(e,d,0);this.SendReply(a);break;case 30:k=K(["w","w","s"],b,c);B("[xattrwalk]: fid="+k[0]+" newfid="+k[1]+" name="+k[2],4194304);this.SendError(d,"Setxattr not supported",95);this.SendReply(a);break;default:B("Error in Virtio9p: Unknown id "+e+" received",4194304),l(!1)}};function cd(a,b){this.handle_fn=a;this.tag_bufchain=new Map;this.configspace_tagname=[104,111,115,116,57,112];this.configspace_taglen=this.configspace_tagname.length;this.virtio=gd(b,this.configspace_taglen,this.configspace_tagname,
737
- async c=>{const d=new Uint8Array(c.length_readable);c.get_next_blob(d);var e=K(["w","b","h"],d,{offset:0})[2];this.tag_bufchain.set(e,c);this.handle_fn(d,f=>{var g=K(["w","b","h"],f,{offset:0})[2];const k=this.tag_bufchain.get(g);k?(k.set_next_blob(f),this.virtqueue.push_reply(k),this.virtqueue.flush_replies(),this.tag_bufchain.delete(g)):console.error("No bufchain found for tag: "+g)})});this.virtqueue=this.virtio.queues[0]}cd.prototype.get_state=function(){var a=[];a[0]=this.configspace_tagname;
738
- a[1]=this.configspace_taglen;a[2]=this.virtio;a[3]=this.tag_bufchain;return a};cd.prototype.set_state=function(a){this.configspace_tagname=a[0];this.configspace_taglen=a[1];this.virtio.set_state(a[2]);this.virtqueue=this.virtio.queues[0];this.tag_bufchain=a[3]};cd.prototype.reset=function(){this.virtio.reset()};function dd(a,b){this.socket=void 0;this.cpu=b;this.send_queue=[];this.url=a;this.reconnect_interval=1E4;this.last_connect_attempt=Date.now()-this.reconnect_interval;this.send_queue_limit=
739
- 64;this.destroyed=!1;this.tag_bufchain=new Map;this.configspace_tagname=[104,111,115,116,57,112];this.configspace_taglen=this.configspace_tagname.length;this.virtio=gd(b,this.configspace_taglen,this.configspace_tagname,async c=>{const d=new Uint8Array(c.length_readable);c.get_next_blob(d);const e=K(["w","b","h"],d,{offset:0})[2];this.tag_bufchain.set(e,c);this.send(d)});this.virtqueue=this.virtio.queues[0]}dd.prototype.get_state=function(){var a=[];a[0]=this.configspace_tagname;a[1]=this.configspace_taglen;
740
- a[2]=this.virtio;a[3]=this.tag_bufchain;return a};dd.prototype.set_state=function(a){this.configspace_tagname=a[0];this.configspace_taglen=a[1];this.virtio.set_state(a[2]);this.virtqueue=this.virtio.queues[0];this.tag_bufchain=a[3]};dd.prototype.reset=function(){this.virtio.reset()};dd.prototype.handle_message=function(a){a=new Uint8Array(a.data);const b=K(["w","b","h"],a,{offset:0})[2],c=this.tag_bufchain.get(b);c?(c.set_next_blob(a),this.virtqueue.push_reply(c),this.virtqueue.flush_replies(),this.tag_bufchain.delete(b)):
741
- console.error("Virtio9pProxy: No bufchain found for tag: "+b)};dd.prototype.handle_close=function(){this.destroyed||(this.connect(),setTimeout(this.connect.bind(this),this.reconnect_interval))};dd.prototype.handle_open=function(){for(var a=0;a<this.send_queue.length;a++)this.send(this.send_queue[a]);this.send_queue=[]};dd.prototype.handle_error=function(){};dd.prototype.destroy=function(){this.destroyed=!0;this.socket&&this.socket.close()};dd.prototype.connect=function(){if("undefined"!==typeof WebSocket){if(this.socket){var a=
742
- this.socket.readyState;if(0===a||1===a)return}a=Date.now();if(!(this.last_connect_attempt+this.reconnect_interval>a)){this.last_connect_attempt=Date.now();try{this.socket=new WebSocket(this.url)}catch(b){console.error(b);return}this.socket.binaryType="arraybuffer";this.socket.onopen=this.handle_open.bind(this);this.socket.onmessage=this.handle_message.bind(this);this.socket.onclose=this.handle_close.bind(this);this.socket.onerror=this.handle_error.bind(this)}}};dd.prototype.send=function(a){this.socket&&
743
- 1===this.socket.readyState?this.socket.send(a):(this.send_queue.push(a),this.send_queue.length>2*this.send_queue_limit&&(this.send_queue=this.send_queue.slice(-this.send_queue_limit)),this.connect())};dd.prototype.change_proxy=function(a){this.url=a;this.socket&&(this.socket.onclose=function(){},this.socket.onerror=function(){},this.socket.close(),this.socket=void 0)};export{};; export default module.exports.V86; export let {V86, CPU} = module.exports;
729
+ g:40===e&&(p=this.fs.RoundToDirentry(k,g+p)-g),g>m.size&&(p=0),this.bus.send("9p-read-start",[this.fids[f].dbg_name]),k=await this.fs.Read(k,g,p),this.bus.send("9p-read-end",[this.fids[f].dbg_name,p]),k&&this.replybuffer.set(k,11);I(["w"],[p],this.replybuffer,7);this.BuildReply(e,d,4+p);this.SendReply(a);break;case 118:k=J(["w","d","w"],b,c);f=k[0];g=k[1];p=k[2];k=this.fids[f].dbg_name;B("[write]: fid="+f+" ("+k+") offset="+g+" count="+p+" fidtype="+this.fids[f].type,4194304);if(2===this.fids[f].type){this.SendError(d,
730
+ "Setxattr not supported",95);this.SendReply(a);break}else await this.fs.Write(this.fids[f].inodeid,g,p,b.subarray(c.offset));this.bus.send("9p-write-end",[k,p]);I(["w"],[p],this.replybuffer,7);this.BuildReply(e,d,4);this.SendReply(a);break;case 74:k=J(["w","s","w","s"],b,c);f=k[0];g=k[1];b=k[2];k=k[3];B("[renameat]: oldname="+g+" newname="+k,4194304);f=await this.fs.Rename(this.fids[f].inodeid,g,this.fids[b].inodeid,k);if(0>f){-2===f?e="No such file or directory":-1===f?e="Operation not permitted":
731
+ -39===f?e="Directory not empty":(e="Unknown error: "+-f,l(!1,"[renameat]: Unexpected error code: "+-f));this.SendError(d,e,-f);this.SendReply(a);break}this.BuildReply(e,d,0);this.SendReply(a);break;case 76:k=J(["w","s","w"],b,c);c=k[0];g=k[1];b=k[2];B("[unlink]: dirfd="+c+" name="+g+" flags="+b,4194304);f=this.fs.Search(this.fids[c].inodeid,g);if(-1===f){this.SendError(d,"No such file or directory",2);this.SendReply(a);break}f=this.fs.Unlink(this.fids[c].inodeid,g);if(0>f){-39===f?e="Directory not empty":
732
+ -1===f?e="Operation not permitted":(e="Unknown error: "+-f,l(!1,"[unlink]: Unexpected error code: "+-f));this.SendError(d,e,-f);this.SendReply(a);break}this.BuildReply(e,d,0);this.SendReply(a);break;case 100:f=J(["w","s"],b,c);B("[version]: msize="+f[0]+" version="+f[1],4194304);this.msize!==f[0]&&(this.msize=f[0],this.replybuffer=new Uint8Array(Math.min(16777216,2*this.msize)));f=I(["w","s"],[this.msize,this.VERSION],this.replybuffer,7);this.BuildReply(e,d,f);this.SendReply(a);break;case 104:k=J(["w",
733
+ "w","s","s","w"],b,c);f=k[0];g=k[4];B("[attach]: fid="+f+" afid="+n(k[1])+" uname="+k[2]+" aname="+k[3],4194304);this.fids[f]=this.Createfid(0,1,g,"");m=this.fs.GetInode(this.fids[f].inodeid);I(["Q"],[m.qid],this.replybuffer,7);this.BuildReply(e,d,13);this.SendReply(a);this.bus.send("9p-attach");break;case 108:J(["h"],b,c);B("[flush] "+d,4194304);this.BuildReply(e,d,0);this.SendReply(a);break;case 110:k=J(["w","w","h"],b,c);f=k[0];m=k[1];p=k[2];B("[walk]: fid="+k[0]+" nwfid="+k[1]+" nwname="+p,4194304);
734
+ if(0===p){this.fids[m]=this.Createfid(this.fids[f].inodeid,1,this.fids[f].uid,this.fids[f].dbg_name);I(["h"],[0],this.replybuffer,7);this.BuildReply(e,d,2);this.SendReply(a);break}g=[];for(k=0;k<p;k++)g.push("s");c=J(g,b,c);b=this.fids[f].inodeid;g=9;var q=0;B("walk in dir "+this.fids[f].dbg_name+" to: "+c.toString(),4194304);for(k=0;k<p;k++){b=this.fs.Search(b,c[k]);if(-1===b){B("Could not find: "+c[k],4194304);break}g+=I(["Q"],[this.fs.GetInode(b).qid],this.replybuffer,g);q++;this.fids[m]=this.Createfid(b,
735
+ 1,this.fids[f].uid,c[k])}I(["h"],[q],this.replybuffer,7);this.BuildReply(e,d,g-7);this.SendReply(a);break;case 120:k=J(["w"],b,c);B("[clunk]: fid="+k[0],4194304);this.fids[k[0]]&&0<=this.fids[k[0]].inodeid&&(await this.fs.CloseInode(this.fids[k[0]].inodeid),this.fids[k[0]].inodeid=-1,this.fids[k[0]].type=-1);this.BuildReply(e,d,0);this.SendReply(a);break;case 32:k=J(["w","s","d","w"],b,c);f=k[0];g=k[1];c=k[2];b=k[3];B("[txattrcreate]: fid="+f+" name="+g+" attr_size="+c+" flags="+b,4194304);this.fids[f].type=
736
+ 2;this.BuildReply(e,d,0);this.SendReply(a);break;case 30:k=J(["w","w","s"],b,c);B("[xattrwalk]: fid="+k[0]+" newfid="+k[1]+" name="+k[2],4194304);this.SendError(d,"Setxattr not supported",95);this.SendReply(a);break;default:B("Error in Virtio9p: Unknown id "+e+" received",4194304),l(!1)}};function dd(a,b){this.handle_fn=a;this.tag_bufchain=new Map;this.configspace_tagname=[104,111,115,116,57,112];this.configspace_taglen=this.configspace_tagname.length;this.virtio=hd(b,this.configspace_taglen,this.configspace_tagname,
737
+ async c=>{const d=new Uint8Array(c.length_readable);c.get_next_blob(d);var e=J(["w","b","h"],d,{offset:0})[2];this.tag_bufchain.set(e,c);this.handle_fn(d,f=>{var g=J(["w","b","h"],f,{offset:0})[2];const k=this.tag_bufchain.get(g);k?(k.set_next_blob(f),this.virtqueue.push_reply(k),this.virtqueue.flush_replies(),this.tag_bufchain.delete(g)):console.error("No bufchain found for tag: "+g)})});this.virtqueue=this.virtio.queues[0]}dd.prototype.get_state=function(){var a=[];a[0]=this.configspace_tagname;
738
+ a[1]=this.configspace_taglen;a[2]=this.virtio;a[3]=this.tag_bufchain;return a};dd.prototype.set_state=function(a){this.configspace_tagname=a[0];this.configspace_taglen=a[1];this.virtio.set_state(a[2]);this.virtqueue=this.virtio.queues[0];this.tag_bufchain=a[3]};dd.prototype.reset=function(){this.virtio.reset()};function ed(a,b){this.socket=void 0;this.cpu=b;this.send_queue=[];this.url=a;this.reconnect_interval=1E4;this.last_connect_attempt=Date.now()-this.reconnect_interval;this.send_queue_limit=
739
+ 64;this.destroyed=!1;this.tag_bufchain=new Map;this.configspace_tagname=[104,111,115,116,57,112];this.configspace_taglen=this.configspace_tagname.length;this.virtio=hd(b,this.configspace_taglen,this.configspace_tagname,async c=>{const d=new Uint8Array(c.length_readable);c.get_next_blob(d);const e=J(["w","b","h"],d,{offset:0})[2];this.tag_bufchain.set(e,c);this.send(d)});this.virtqueue=this.virtio.queues[0]}ed.prototype.get_state=function(){var a=[];a[0]=this.configspace_tagname;a[1]=this.configspace_taglen;
740
+ a[2]=this.virtio;a[3]=this.tag_bufchain;return a};ed.prototype.set_state=function(a){this.configspace_tagname=a[0];this.configspace_taglen=a[1];this.virtio.set_state(a[2]);this.virtqueue=this.virtio.queues[0];this.tag_bufchain=a[3]};ed.prototype.reset=function(){this.virtio.reset()};ed.prototype.handle_message=function(a){a=new Uint8Array(a.data);const b=J(["w","b","h"],a,{offset:0})[2],c=this.tag_bufchain.get(b);c?(c.set_next_blob(a),this.virtqueue.push_reply(c),this.virtqueue.flush_replies(),this.tag_bufchain.delete(b)):
741
+ console.error("Virtio9pProxy: No bufchain found for tag: "+b)};ed.prototype.handle_close=function(){this.destroyed||(this.connect(),setTimeout(this.connect.bind(this),this.reconnect_interval))};ed.prototype.handle_open=function(){for(var a=0;a<this.send_queue.length;a++)this.send(this.send_queue[a]);this.send_queue=[]};ed.prototype.handle_error=function(){};ed.prototype.destroy=function(){this.destroyed=!0;this.socket&&this.socket.close()};ed.prototype.connect=function(){if("undefined"!==typeof WebSocket){if(this.socket){var a=
742
+ this.socket.readyState;if(0===a||1===a)return}a=Date.now();if(!(this.last_connect_attempt+this.reconnect_interval>a)){this.last_connect_attempt=Date.now();try{this.socket=new WebSocket(this.url)}catch(b){console.error(b);return}this.socket.binaryType="arraybuffer";this.socket.onopen=this.handle_open.bind(this);this.socket.onmessage=this.handle_message.bind(this);this.socket.onclose=this.handle_close.bind(this);this.socket.onerror=this.handle_error.bind(this)}}};ed.prototype.send=function(a){this.socket&&
743
+ 1===this.socket.readyState?this.socket.send(a):(this.send_queue.push(a),this.send_queue.length>2*this.send_queue_limit&&(this.send_queue=this.send_queue.slice(-this.send_queue_limit)),this.connect())};ed.prototype.change_proxy=function(a){this.url=a;this.socket&&(this.socket.onclose=function(){},this.socket.onerror=function(){},this.socket.close(),this.socket=void 0)};export{};; export default module.exports.V86; export let {V86, CPU} = module.exports;