diff --git a/babel.config.js b/babel.config.js index 786d5ac46..27e3805dd 100644 --- a/babel.config.js +++ b/babel.config.js @@ -2,10 +2,8 @@ module.exports = api => { api.cache(false); return { - presets: ['@babel/env', '@babel/react', '@babel/flow'], + presets: [['@babel/env', { loose: true, modules: false }], '@babel/react', '@babel/flow'], plugins: [ - '@babel/plugin-proposal-object-rest-spread', - '@babel/plugin-syntax-dynamic-import', 'import-glob', '@babel/plugin-transform-runtime', ['@babel/plugin-proposal-decorators', { decoratorsBeforeExport: true }], diff --git a/lbrytv/middleware/redirect.js b/lbrytv/middleware/redirect.js index 2c09af97b..05caa563c 100644 --- a/lbrytv/middleware/redirect.js +++ b/lbrytv/middleware/redirect.js @@ -1,5 +1,7 @@ const config = require('../../config'); -const redirectHosts = ['open.lbry.com']; +const PAGES = require('../../ui/constants/pages'); +const { formatInAppUrl } = require('../../ui/util/url'); +const { parseURI } = require('lbry-redux'); async function redirectMiddleware(ctx, next) { const requestHost = ctx.host; @@ -16,8 +18,16 @@ async function redirectMiddleware(ctx, next) { return; } - if (redirectHosts.includes(requestHost)) { - const redirectUrl = config.URL + path; + if (requestHost === 'open.lbry.com' || requestHost === 'open.lbry.io') { + const openQuery = '?src=open'; + let redirectUrl = config.URL + formatInAppUrl(url, openQuery); + + if (redirectUrl.includes('?')) { + redirectUrl = redirectUrl.replace('?', `${openQuery}&`); + } else { + redirectUrl += openQuery; + } + ctx.redirect(redirectUrl); return; } diff --git a/lbrytv/package.json b/lbrytv/package.json index d07e57206..20af7da15 100644 --- a/lbrytv/package.json +++ b/lbrytv/package.json @@ -38,6 +38,7 @@ "@babel/core": "^7.0.0", "@babel/plugin-proposal-class-properties": "^7.0.0", "@babel/plugin-proposal-decorators": "^7.3.0", + "@babel/plugin-proposal-object-rest-spread": "^7.6.2", "@babel/plugin-transform-flow-strip-types": "^7.2.3", "@babel/plugin-transform-runtime": "^7.4.3", "@babel/polyfill": "^7.2.5", diff --git a/lbrytv/webpack.config.js b/lbrytv/webpack.config.js index 9ca886c22..5ca8ddb26 100644 --- a/lbrytv/webpack.config.js +++ b/lbrytv/webpack.config.js @@ -28,9 +28,9 @@ const webConfig = { { loader: 'babel-loader', test: /\.jsx?$/, - exclude: /node_modules/, options: { - rootMode: 'upward', + presets: ['@babel/env', '@babel/react', '@babel/flow'], + plugins: ['@babel/plugin-proposal-object-rest-spread', '@babel/plugin-proposal-class-properties'], }, }, { diff --git a/package.json b/package.json index 5c7d891ed..9bac12553 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "@babel/register": "^7.0.0", "@exponent/electron-cookies": "^2.0.0", "@hot-loader/react-dom": "^16.8", - "@lbry/components": "^2.8.0", + "@lbry/components": "^3.0.2", "@reach/menu-button": "^0.1.18", "@reach/rect": "^0.2.1", "@reach/tabs": "^0.1.5", @@ -79,6 +79,7 @@ "babel-plugin-add-module-exports": "^1.0.0", "babel-plugin-import-glob": "^2.0.0", "babel-plugin-transform-imports": "^1.5.1", + "babel-plugin-transform-object-rest-spread": "^6.26.0", "bluebird": "^3.5.1", "chalk": "^2.4.2", "classnames": "^2.2.5", @@ -167,6 +168,7 @@ "redux-persist-transform-compress": "^4.2.0", "redux-persist-transform-filter": "0.0.16", "redux-thunk": "^2.2.0", + "reakit": "^1.0.0-beta.13", "remark": "^9.0.0", "remark-attr": "^0.8.3", "remark-emoji": "^2.0.1", @@ -184,7 +186,7 @@ "tree-kill": "^1.1.0", "unist-util-visit": "^1.4.1", "video.js": "^7.2.2", - "villain": "btzr-io/Villain", + "villain-react": "^1.0.6", "wavesurfer.js": "^2.2.1", "webpack": "^4.28.4", "webpack-bundle-analyzer": "^3.1.0", diff --git a/static/app-strings.json b/static/app-strings.json index d3566cbf6..bf9cd4f44 100644 --- a/static/app-strings.json +++ b/static/app-strings.json @@ -820,7 +820,6 @@ "Advanced Editor": "Advanced Editor", "If you bid more than %amount% LBC, when someone navigates to %uri%, it will load your published content. However, you can get a longer version of this URL for any bid.": "If you bid more than %amount% LBC, when someone navigates to %uri%, it will load your published content. However, you can get a longer version of this URL for any bid.", "%nameOrTitle% has been published to lbry://%name%. Click here to view it.": "%nameOrTitle% has been published to lbry://%name%. Click here to view it.", - "Discussion": "Discussion", "If you don't choose a file, the file from your existing claim %name% will be used": "If you don't choose a file, the file from your existing claim %name% will be used", "To enable this feature, check 'Save Password' the next time you start the app.": "To enable this feature, check 'Save Password' the next time you start the app.", "for adding a subscription!": "for adding a subscription!", @@ -890,4 +889,18 @@ "allow you to receive notifications related to new content.": "allow you to receive notifications related to new content.", "files": "files", "Invalid claim ID %claimId%.": "Invalid claim ID %claimId%." -} \ No newline at end of file + "Suggested": "Suggested", + "%amountBehind% blocks behind": "%amountBehind% blocks behind", + "Startup Preferences": "Startup Preferences", + "This will clear the application cache, and might fix issues you are having. Your wallet will not be affected. ": "This will clear the application cache, and might fix issues you are having. Your wallet will not be affected. ", + "Start minimized": "Start minimized", + "Improve view speed and help the LBRY network by allowing the app to cuddle up in your system tray.": "Improve view speed and help the LBRY network by allowing the app to cuddle up in your system tray.", + "Content Type": "Content Type", + "Submit Feedback": "Submit Feedback", + "Checking your publishes...": "Checking your publishes...", + "Checking your publishes": "Checking your publishes", + "Checking for channels": "Checking for channels", + "Error Starting Up": "Error Starting Up", + "Reach out to hello@lbry.com for help, or check out %help_link%.": "Reach out to hello@lbry.com for help, or check out %help_link%.", + "You're not following any tags. Smash that %customize% button!": "You're not following any tags. Smash that %customize% button!", + "customize": "customize" diff --git a/static/webworkers/wasm-gen/libarchive.js b/static/webworkers/wasm-gen/libarchive.js index a74d4a62b..1b76be91a 100644 --- a/static/webworkers/wasm-gen/libarchive.js +++ b/static/webworkers/wasm-gen/libarchive.js @@ -1,4 +1,5112 @@ -var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("Module['ENVIRONMENT'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){process["exit"](1)}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=(function(title){document.title=title})}else{throw new Error("not compiled for this environment")}Module["print"]=typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){assert(!staticSealed);var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret}function dynamicAlloc(size){assert(DYNAMICTOP_PTR);var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0}}return ret}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}var functionPointers=new Array(0);var GLOBAL_BASE=1024;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"arrayToC":(function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_STATIC=2;var ALLOC_NONE=4;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[typeof _malloc==="function"?_malloc:staticAlloc,stackAlloc,staticAlloc,dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var ASMJS_PAGE_SIZE=16777216;var MIN_TOTAL_MEMORY=16777216;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBuffer(buf){Module["buffer"]=buffer=buf}function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}if(!Module["reallocBuffer"])Module["reallocBuffer"]=(function(size){var ret;try{if(ArrayBuffer.transfer){ret=ArrayBuffer.transfer(buffer,size)}else{var oldHEAP8=HEAP8;ret=new ArrayBuffer(size);var temp=new Int8Array(ret);temp.set(oldHEAP8)}}catch(e){return false}var success=_emscripten_replace_memory(ret);if(!success)return false;return ret});function enlargeMemory(){var PAGE_MULTIPLE=Module["usingWasm"]?WASM_PAGE_SIZE:ASMJS_PAGE_SIZE;var LIMIT=2147483648-PAGE_MULTIPLE;if(HEAP32[DYNAMICTOP_PTR>>2]>LIMIT){return false}var OLD_TOTAL_MEMORY=TOTAL_MEMORY;TOTAL_MEMORY=Math.max(TOTAL_MEMORY,MIN_TOTAL_MEMORY);while(TOTAL_MEMORY>2]){if(TOTAL_MEMORY<=536870912){TOTAL_MEMORY=alignUp(2*TOTAL_MEMORY,PAGE_MULTIPLE)}else{TOTAL_MEMORY=Math.min(alignUp((3*TOTAL_MEMORY+2147483648)/4,PAGE_MULTIPLE),LIMIT)}}var replacement=Module["reallocBuffer"](TOTAL_MEMORY);if(!replacement||replacement.byteLength!=TOTAL_MEMORY){TOTAL_MEMORY=OLD_TOTAL_MEMORY;return false}updateGlobalBuffer(replacement);updateGlobalBufferViews();return true}var byteLength;try{byteLength=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);byteLength(new ArrayBuffer(4))}catch(e){byteLength=(function(buffer){return buffer.byteLength})}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_round=Math.round;var Math_min=Math.min;var Math_max=Math.max;var Math_clz32=Math.clz32;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}function integrateWasmJS(){var wasmTextFile="libarchive.wast";var wasmBinaryFile="libarchive.wasm";var asmjsCodeFile="libarchive.temp.asm.js";if(typeof Module["locateFile"]==="function"){if(!isDataURI(wasmTextFile)){wasmTextFile=Module["locateFile"](wasmTextFile)}if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=Module["locateFile"](wasmBinaryFile)}if(!isDataURI(asmjsCodeFile)){asmjsCodeFile=Module["locateFile"](asmjsCodeFile)}}var wasmPageSize=64*1024;var info={"global":null,"env":null,"asm2wasm":{"f64-rem":(function(x,y){return x%y}),"debugger":(function(){debugger})},"parent":Module};var exports=null;function mergeMemory(newBuffer){var oldBuffer=Module["buffer"];if(newBuffer.byteLength>2]=value;return value}var PATH={splitPath:(function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)}),normalizeArray:(function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts}),normalize:(function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path}),dirname:(function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir}),basename:(function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)}),extname:(function(path){return PATH.splitPath(path)[3]}),join:(function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))}),join2:(function(l,r){return PATH.normalize(l+"/"+r)}),resolve:(function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter((function(p){return!!p})),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."}),relative:(function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()}),put_char:(function(tty,val){if(val===null||val===10){Module["print"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module["print"](UTF8ArrayToString(tty.output,0));tty.output=[]}})},default_tty1_ops:{put_char:(function(tty,val){if(val===null||val===10){Module["printErr"](UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){Module["printErr"](UTF8ArrayToString(tty.output,0));tty.output=[]}})}};var MEMFS={ops_table:null,mount:(function(mount){return MEMFS.createNode(null,"/",16384|511,0)}),createNode:(function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node}),getFileDataAsRegularArray:(function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;inode.contents.length){node.contents=MEMFS.getFileDataAsRegularArray(node);node.usedBytes=node.contents.length}if(!node.contents||node.contents.subarray){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return}if(!node.contents&&newCapacity>0)node.contents=[];while(node.contents.lengthnewSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}}));var remove=[];Object.keys(dst.entries).forEach((function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}}));if(!total){return callback(null)}var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=(function(e){done(this.error);e.preventDefault()});create.sort().forEach((function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,(function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)}))}else{IDBFS.loadLocalEntry(path,(function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)}))}}));remove.sort().reverse().forEach((function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}}))})};var NODEFS={isWindows:false,staticInit:(function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={"1024":flags["O_APPEND"],"64":flags["O_CREAT"],"128":flags["O_EXCL"],"0":flags["O_RDONLY"],"2":flags["O_RDWR"],"4096":flags["O_SYNC"],"512":flags["O_TRUNC"],"1":flags["O_WRONLY"]}}),bufferFrom:(function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)}),mount:(function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)}),createNode:(function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node}),getMode:(function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return stat.mode}),realPath:(function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)}),flagsForNode:(function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}}),node_ops:{getattr:(function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}}),setattr:(function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),lookup:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)}),mknod:(function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return node}),rename:(function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),unlink:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),rmdir:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readdir:(function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),symlink:(function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readlink:(function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}})},stream_ops:{open:(function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),close:(function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),read:(function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),write:(function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position})}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:(function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size}),write:(function(stream,buffer,offset,length,position){throw new FS.ErrnoError(ERRNO_CODES.EIO)}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position})}};STATICTOP+=16;STATICTOP+=16;STATICTOP+=16;var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:(function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)}),lookupPath:(function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}var parts=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}}}}return{path:current_path,node:current}}),getPath:(function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}}),hashName:(function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length}),hashAddNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node}),hashRemoveNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}}),lookupNode:(function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)}),createNode:(function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=(function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev});FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:(function(){return(this.mode&readMode)===readMode}),set:(function(val){val?this.mode|=readMode:this.mode&=~readMode})},write:{get:(function(){return(this.mode&writeMode)===writeMode}),set:(function(val){val?this.mode|=writeMode:this.mode&=~writeMode})},isFolder:{get:(function(){return FS.isDir(this.mode)})},isDevice:{get:(function(){return FS.isChrdev(this.mode)})}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node}),destroyNode:(function(node){FS.hashRemoveNode(node)}),isRoot:(function(node){return node===node.parent}),isMountpoint:(function(node){return!!node.mounted}),isFile:(function(mode){return(mode&61440)===32768}),isDir:(function(mode){return(mode&61440)===16384}),isLink:(function(mode){return(mode&61440)===40960}),isChrdev:(function(mode){return(mode&61440)===8192}),isBlkdev:(function(mode){return(mode&61440)===24576}),isFIFO:(function(mode){return(mode&61440)===4096}),isSocket:(function(mode){return(mode&49152)===49152}),flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:(function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags}),flagsToPermissionString:(function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms}),nodePermissions:(function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return ERRNO_CODES.EACCES}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return ERRNO_CODES.EACCES}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return ERRNO_CODES.EACCES}return 0}),mayLookup:(function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return ERRNO_CODES.EACCES;return 0}),mayCreate:(function(dir,name){try{var node=FS.lookupNode(dir,name);return ERRNO_CODES.EEXIST}catch(e){}return FS.nodePermissions(dir,"wx")}),mayDelete:(function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return ERRNO_CODES.ENOTDIR}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return ERRNO_CODES.EBUSY}}else{if(FS.isDir(node.mode)){return ERRNO_CODES.EISDIR}}return 0}),mayOpen:(function(node,flags){if(!node){return ERRNO_CODES.ENOENT}if(FS.isLink(node.mode)){return ERRNO_CODES.ELOOP}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return ERRNO_CODES.EISDIR}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))}),MAX_OPEN_FDS:4096,nextfd:(function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(ERRNO_CODES.EMFILE)}),getStream:(function(fd){return FS.streams[fd]}),createStream:(function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=(function(){});FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:(function(){return this.node}),set:(function(val){this.node=val})},isRead:{get:(function(){return(this.flags&2097155)!==1})},isWrite:{get:(function(){return(this.flags&2097155)!==0})},isAppend:{get:(function(){return this.flags&1024})}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream}),closeStream:(function(fd){FS.streams[fd]=null}),chrdev_stream_ops:{open:(function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}}),llseek:(function(){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)})},major:(function(dev){return dev>>8}),minor:(function(dev){return dev&255}),makedev:(function(ma,mi){return ma<<8|mi}),registerDevice:(function(dev,ops){FS.devices[dev]={stream_ops:ops}}),getDevice:(function(dev){return FS.devices[dev]}),getMounts:(function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts}),syncfs:(function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach((function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)}))}),mount:(function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot}),unmount:(function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach((function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}}));node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)}),lookup:(function(parent,name){return parent.node_ops.lookup(parent,name)}),mknod:(function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.mknod(parent,name,mode,dev)}),create:(function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)}),mkdir:(function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)}),mkdirTree:(function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}});var lazyArray=this;lazyArray.setDataGetter((function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]}));if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._length})},chunkSize:{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize})}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:(function(){return this.contents.length})}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach((function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}return fn.apply(null,arguments)}}));stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;HEAP32[buf+36>>2]=stat.size;HEAP32[buf+40>>2]=4096;HEAP32[buf+44>>2]=stat.blocks;HEAP32[buf+48>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+52>>2]=0;HEAP32[buf+56>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ino;return 0}),doMsync:(function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)}),doMkdir:(function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}),doMknod:(function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0}),doReadlink:(function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len}),doAccess:(function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0}),doDup:(function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd}),doReadv:(function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret}),varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),getStreamFromFD:(function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream}),getSocketFromFD:(function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket}),getSocketAddress:(function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall168(which,varargs){SYSCALLS.varargs=varargs;try{var fds=SYSCALLS.get(),nfds=SYSCALLS.get(),timeout=SYSCALLS.get();var nonzero=0;for(var i=0;i>2];var events=HEAP16[pollfd+4>>1];var mask=32;var stream=FS.getStream(fd);if(stream){mask=SYSCALLS.DEFAULT_POLLMASK;if(stream.stream_ops.poll){mask=stream.stream_ops.poll(stream)}}mask&=events|8|16;if(mask)nonzero++;HEAP16[pollfd+6>>1]=mask}return nonzero}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall195(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),buf=SYSCALLS.get();return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall196(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),buf=SYSCALLS.get();return SYSCALLS.doStat(FS.lstat,path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall197(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),buf=SYSCALLS.get();return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd};case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0};case 12:case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0};case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall3(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),buf=SYSCALLS.get(),count=SYSCALLS.get();return FS.read(stream,HEAP8,buf,count)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall4(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),buf=SYSCALLS.get(),count=SYSCALLS.get();return FS.write(stream,HEAP8,buf,count)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall41(which,varargs){SYSCALLS.varargs=varargs;try{var old=SYSCALLS.getStreamFromFD();return FS.open(old.path,old.flags,0).fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var PIPEFS={BUCKET_BUFFER_SIZE:8192,mount:(function(mount){return FS.createNode(null,"/",16384|511,0)}),createPipe:(function(){var pipe={buckets:[]};pipe.buckets.push({buffer:new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),offset:0,roffset:0});var rName=PIPEFS.nextname();var wName=PIPEFS.nextname();var rNode=FS.createNode(PIPEFS.root,rName,4096,0);var wNode=FS.createNode(PIPEFS.root,wName,4096,0);rNode.pipe=pipe;wNode.pipe=pipe;var readableStream=FS.createStream({path:rName,node:rNode,flags:FS.modeStringToFlags("r"),seekable:false,stream_ops:PIPEFS.stream_ops});rNode.stream=readableStream;var writableStream=FS.createStream({path:wName,node:wNode,flags:FS.modeStringToFlags("w"),seekable:false,stream_ops:PIPEFS.stream_ops});wNode.stream=writableStream;return{readable_fd:readableStream.fd,writable_fd:writableStream.fd}}),stream_ops:{poll:(function(stream){var pipe=stream.node.pipe;if((stream.flags&2097155)===1){return 256|4}else{if(pipe.buckets.length>0){for(var i=0;i0){return 64|1}}}}return 0}),ioctl:(function(stream,request,varargs){return ERRNO_CODES.EINVAL}),read:(function(stream,buffer,offset,length,position){var pipe=stream.node.pipe;var currentLength=0;for(var i=0;i=dataLen){currBucket.buffer.set(data,currBucket.offset);currBucket.offset+=dataLen;return dataLen}else if(freeBytesInCurrBuffer>0){currBucket.buffer.set(data.subarray(0,freeBytesInCurrBuffer),currBucket.offset);currBucket.offset+=freeBytesInCurrBuffer;data=data.subarray(freeBytesInCurrBuffer,data.byteLength)}var numBuckets=data.byteLength/PIPEFS.BUCKET_BUFFER_SIZE|0;var remElements=data.byteLength%PIPEFS.BUCKET_BUFFER_SIZE;for(var i=0;i0){var newBucket={buffer:new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),offset:data.byteLength,roffset:0};pipe.buckets.push(newBucket);newBucket.buffer.set(data)}return dataLen}),close:(function(stream){var pipe=stream.node.pipe;pipe.buckets=null})},nextname:(function(){if(!PIPEFS.nextname.current){PIPEFS.nextname.current=0}return"pipe["+PIPEFS.nextname.current++ +"]"})};function ___syscall42(which,varargs){SYSCALLS.varargs=varargs;try{var fdPtr=SYSCALLS.get();if(fdPtr==0){throw new FS.ErrnoError(ERRNO_CODES.EFAULT)}var res=PIPEFS.createPipe();HEAP32[fdPtr>>2]=res.readable_fd;HEAP32[fdPtr+4>>2]=res.writable_fd;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _abort(){Module["abort"]()}function __exit(status){Module["exit"](status)}function _exit(status){__exit(status)}var ___tm_current=STATICTOP;STATICTOP+=48;var ___tm_timezone=allocate(intArrayFromString("GMT"),"i8",ALLOC_STATIC);function _tzset(){if(_tzset.called)return;_tzset.called=true;HEAP32[__get_timezone()>>2]=(new Date).getTimezoneOffset()*60;var winter=new Date(2e3,0,1);var summer=new Date(2e3,6,1);HEAP32[__get_daylight()>>2]=Number(winter.getTimezoneOffset()!=summer.getTimezoneOffset());function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocate(intArrayFromString(winterName),"i8",ALLOC_NORMAL);var summerNamePtr=allocate(intArrayFromString(summerName),"i8",ALLOC_NORMAL);if(summer.getTimezoneOffset()>2]=winterNamePtr;HEAP32[__get_tzname()+4>>2]=summerNamePtr}else{HEAP32[__get_tzname()>>2]=summerNamePtr;HEAP32[__get_tzname()+4>>2]=winterNamePtr}}function _localtime_r(time,tmPtr){_tzset();var date=new Date(HEAP32[time>>2]*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var start=new Date(date.getFullYear(),0,1);var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var summerOffset=(new Date(2e3,6,1)).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst;var zonePtr=HEAP32[__get_tzname()+(dst?4:0)>>2];HEAP32[tmPtr+40>>2]=zonePtr;return tmPtr}function _localtime(time){return _localtime_r(time,___tm_current)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}function _mktime(tmPtr){_tzset();var date=new Date(HEAP32[tmPtr+20>>2]+1900,HEAP32[tmPtr+16>>2],HEAP32[tmPtr+12>>2],HEAP32[tmPtr+8>>2],HEAP32[tmPtr+4>>2],HEAP32[tmPtr>>2],0);var dst=HEAP32[tmPtr+32>>2];var guessedOffset=date.getTimezoneOffset();var start=new Date(date.getFullYear(),0,1);var summerOffset=(new Date(2e3,6,1)).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dstOffset=Math.min(winterOffset,summerOffset);if(dst<0){HEAP32[tmPtr+32>>2]=Number(summerOffset!=winterOffset&&dstOffset==guessedOffset)}else if(dst>0!=(dstOffset==guessedOffset)){var nonDstOffset=Math.max(winterOffset,summerOffset);var trueOffset=dst>0?dstOffset:nonDstOffset;date.setTime(date.getTime()+(trueOffset-guessedOffset)*6e4)}HEAP32[tmPtr+24>>2]=date.getDay();var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;return date.getTime()/1e3|0}function _posix_spawn_file_actions_addclose(){Module["printErr"]("missing function: posix_spawn_file_actions_addclose");abort(-1)}function _posix_spawn_file_actions_adddup2(){Module["printErr"]("missing function: posix_spawn_file_actions_adddup2");abort(-1)}function _posix_spawn_file_actions_destroy(){Module["printErr"]("missing function: posix_spawn_file_actions_destroy");abort(-1)}function _posix_spawn_file_actions_init(){Module["printErr"]("missing function: posix_spawn_file_actions_init");abort(-1)}function _fork(){___setErrNo(ERRNO_CODES.EAGAIN);return-1}function _posix_spawnp(){return _fork.apply(null,arguments)}function _timegm(tmPtr){_tzset();var time=Date.UTC(HEAP32[tmPtr+20>>2]+1900,HEAP32[tmPtr+16>>2],HEAP32[tmPtr+12>>2],HEAP32[tmPtr+8>>2],HEAP32[tmPtr+4>>2],HEAP32[tmPtr>>2],0);var date=new Date(time);HEAP32[tmPtr+24>>2]=date.getUTCDay();var start=Date.UTC(date.getUTCFullYear(),0,1,0,0,0,0);var yday=(date.getTime()-start)/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;return date.getTime()/1e3|0}function _wait(stat_loc){___setErrNo(ERRNO_CODES.ECHILD);return-1}function _waitpid(){return _wait.apply(null,arguments)}FS.staticInit();__ATINIT__.unshift((function(){if(!Module["noFSInit"]&&!FS.init.initialized)FS.init()}));__ATMAIN__.push((function(){FS.ignorePermissions=false}));__ATEXIT__.push((function(){FS.quit()}));__ATINIT__.unshift((function(){TTY.init()}));__ATEXIT__.push((function(){TTY.shutdown()}));if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}__ATINIT__.push((function(){PIPEFS.root=FS.mount(PIPEFS,{},null)}));DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}Module["wasmTableSize"]=374;Module["wasmMaxTableSize"]=374;Module.asmGlobalArg={};Module.asmLibraryArg={"abort":abort,"enlargeMemory":enlargeMemory,"getTotalMemory":getTotalMemory,"abortOnCannotGrowMemory":abortOnCannotGrowMemory,"___setErrNo":___setErrNo,"___syscall140":___syscall140,"___syscall146":___syscall146,"___syscall168":___syscall168,"___syscall195":___syscall195,"___syscall196":___syscall196,"___syscall197":___syscall197,"___syscall221":___syscall221,"___syscall3":___syscall3,"___syscall4":___syscall4,"___syscall41":___syscall41,"___syscall42":___syscall42,"___syscall5":___syscall5,"___syscall6":___syscall6,"_abort":_abort,"_emscripten_memcpy_big":_emscripten_memcpy_big,"_exit":_exit,"_localtime":_localtime,"_mktime":_mktime,"_posix_spawn_file_actions_addclose":_posix_spawn_file_actions_addclose,"_posix_spawn_file_actions_adddup2":_posix_spawn_file_actions_adddup2,"_posix_spawn_file_actions_destroy":_posix_spawn_file_actions_destroy,"_posix_spawn_file_actions_init":_posix_spawn_file_actions_init,"_posix_spawnp":_posix_spawnp,"_timegm":_timegm,"_waitpid":_waitpid,"DYNAMICTOP_PTR":DYNAMICTOP_PTR,"STACKTOP":STACKTOP};var asm=Module["asm"](Module.asmGlobalArg,Module.asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=(function(){return Module["asm"]["___errno_location"].apply(null,arguments)});var __get_daylight=Module["__get_daylight"]=(function(){return Module["asm"]["__get_daylight"].apply(null,arguments)});var __get_timezone=Module["__get_timezone"]=(function(){return Module["asm"]["__get_timezone"].apply(null,arguments)});var __get_tzname=Module["__get_tzname"]=(function(){return Module["asm"]["__get_tzname"].apply(null,arguments)});var _archive_close=Module["_archive_close"]=(function(){return Module["asm"]["_archive_close"].apply(null,arguments)});var _archive_entry_filetype=Module["_archive_entry_filetype"]=(function(){return Module["asm"]["_archive_entry_filetype"].apply(null,arguments)});var _archive_entry_pathname=Module["_archive_entry_pathname"]=(function(){return Module["asm"]["_archive_entry_pathname"].apply(null,arguments)});var _archive_entry_pathname_utf8=Module["_archive_entry_pathname_utf8"]=(function(){return Module["asm"]["_archive_entry_pathname_utf8"].apply(null,arguments)});var _archive_entry_size=Module["_archive_entry_size"]=(function(){return Module["asm"]["_archive_entry_size"].apply(null,arguments)});var _archive_error_string=Module["_archive_error_string"]=(function(){return Module["asm"]["_archive_error_string"].apply(null,arguments)});var _archive_open=Module["_archive_open"]=(function(){return Module["asm"]["_archive_open"].apply(null,arguments)});var _archive_read_data_skip=Module["_archive_read_data_skip"]=(function(){return Module["asm"]["_archive_read_data_skip"].apply(null,arguments)});var _emscripten_replace_memory=Module["_emscripten_replace_memory"]=(function(){return Module["asm"]["_emscripten_replace_memory"].apply(null,arguments)});var _free=Module["_free"]=(function(){return Module["asm"]["_free"].apply(null,arguments)});var _get_filedata=Module["_get_filedata"]=(function(){return Module["asm"]["_get_filedata"].apply(null,arguments)});var _get_next_entry=Module["_get_next_entry"]=(function(){return Module["asm"]["_get_next_entry"].apply(null,arguments)});var _get_version=Module["_get_version"]=(function(){return Module["asm"]["_get_version"].apply(null,arguments)});var _malloc=Module["_malloc"]=(function(){return Module["asm"]["_malloc"].apply(null,arguments)});var stackAlloc=Module["stackAlloc"]=(function(){return Module["asm"]["stackAlloc"].apply(null,arguments)});var stackRestore=Module["stackRestore"]=(function(){return Module["asm"]["stackRestore"].apply(null,arguments)});var stackSave=Module["stackSave"]=(function(){return Module["asm"]["stackSave"].apply(null,arguments)});var dynCall_vi=Module["dynCall_vi"]=(function(){return Module["asm"]["dynCall_vi"].apply(null,arguments)});Module["asm"]=asm;Module["cwrap"]=cwrap;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["exit"](status)}Module["quit"](status,new ExitStatus(status))}Module["exit"]=exit;function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() - +var libarchive = (function() { + var _scriptDir = + typeof document !== 'undefined' && document.currentScript + ? document.currentScript.src + : undefined + return function(libarchive) { + libarchive = libarchive || {} + var Module = typeof libarchive !== 'undefined' ? libarchive : {} + var moduleOverrides = {} + var key + for (key in Module) { + if (Module.hasOwnProperty(key)) { + moduleOverrides[key] = Module[key] + } + } + Module['arguments'] = [] + Module['thisProgram'] = './this.program' + Module['quit'] = function(status, toThrow) { + throw toThrow + } + Module['preRun'] = [] + Module['postRun'] = [] + var ENVIRONMENT_IS_WEB = false + var ENVIRONMENT_IS_WORKER = false + var ENVIRONMENT_IS_NODE = false + var ENVIRONMENT_IS_SHELL = false + ENVIRONMENT_IS_WEB = typeof window === 'object' + ENVIRONMENT_IS_WORKER = typeof importScripts === 'function' + ENVIRONMENT_IS_NODE = + typeof process === 'object' && + typeof require === 'function' && + !ENVIRONMENT_IS_WEB && + !ENVIRONMENT_IS_WORKER + ENVIRONMENT_IS_SHELL = + !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER + var scriptDirectory = '' + function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory) + } else { + return scriptDirectory + path + } + } + if (ENVIRONMENT_IS_NODE) { + scriptDirectory = __dirname + '/' + var nodeFS + var nodePath + Module['read'] = function shell_read(filename, binary) { + var ret + if (!nodeFS) nodeFS = require('fs') + if (!nodePath) nodePath = require('path') + filename = nodePath['normalize'](filename) + ret = nodeFS['readFileSync'](filename) + return binary ? ret : ret.toString() + } + Module['readBinary'] = function readBinary(filename) { + var ret = Module['read'](filename, true) + if (!ret.buffer) { + ret = new Uint8Array(ret) + } + assert(ret.buffer) + return ret + } + if (process['argv'].length > 1) { + Module['thisProgram'] = process['argv'][1].replace(/\\/g, '/') + } + Module['arguments'] = process['argv'].slice(2) + process['on']('uncaughtException', function(ex) { + if (!(ex instanceof ExitStatus)) { + throw ex + } + }) + process['on']('unhandledRejection', abort) + Module['quit'] = function(status) { + process['exit'](status) + } + Module['inspect'] = function() { + return '[Emscripten Module object]' + } + } else if (ENVIRONMENT_IS_SHELL) { + if (typeof read != 'undefined') { + Module['read'] = function shell_read(f) { + return read(f) + } + } + Module['readBinary'] = function readBinary(f) { + var data + if (typeof readbuffer === 'function') { + return new Uint8Array(readbuffer(f)) + } + data = read(f, 'binary') + assert(typeof data === 'object') + return data + } + if (typeof scriptArgs != 'undefined') { + Module['arguments'] = scriptArgs + } else if (typeof arguments != 'undefined') { + Module['arguments'] = arguments + } + if (typeof quit === 'function') { + Module['quit'] = function(status) { + quit(status) + } + } + } else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = self.location.href + } else if (document.currentScript) { + scriptDirectory = document.currentScript.src + } + if (_scriptDir) { + scriptDirectory = _scriptDir + } + if (scriptDirectory.indexOf('blob:') !== 0) { + scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf('/') + 1) + } else { + scriptDirectory = '' + } + Module['read'] = function shell_read(url) { + var xhr = new XMLHttpRequest() + xhr.open('GET', url, false) + xhr.send(null) + return xhr.responseText + } + if (ENVIRONMENT_IS_WORKER) { + Module['readBinary'] = function readBinary(url) { + var xhr = new XMLHttpRequest() + xhr.open('GET', url, false) + xhr.responseType = 'arraybuffer' + xhr.send(null) + return new Uint8Array(xhr.response) + } + } + Module['readAsync'] = function readAsync(url, onload, onerror) { + var xhr = new XMLHttpRequest() + xhr.open('GET', url, true) + xhr.responseType = 'arraybuffer' + xhr.onload = function xhr_onload() { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { + onload(xhr.response) + return + } + onerror() + } + xhr.onerror = onerror + xhr.send(null) + } + Module['setWindowTitle'] = function(title) { + document.title = title + } + } else { + } + var out = + Module['print'] || + (typeof console !== 'undefined' + ? console.log.bind(console) + : typeof print !== 'undefined' + ? print + : null) + var err = + Module['printErr'] || + (typeof printErr !== 'undefined' + ? printErr + : (typeof console !== 'undefined' && console.warn.bind(console)) || out) + for (key in moduleOverrides) { + if (moduleOverrides.hasOwnProperty(key)) { + Module[key] = moduleOverrides[key] + } + } + moduleOverrides = undefined + function dynamicAlloc(size) { + var ret = HEAP32[DYNAMICTOP_PTR >> 2] + var end = (ret + size + 15) & -16 + if (end <= _emscripten_get_heap_size()) { + HEAP32[DYNAMICTOP_PTR >> 2] = end + } else { + var success = _emscripten_resize_heap(end) + if (!success) return 0 + } + return ret + } + function getNativeTypeSize(type) { + switch (type) { + case 'i1': + case 'i8': + return 1 + case 'i16': + return 2 + case 'i32': + return 4 + case 'i64': + return 8 + case 'float': + return 4 + case 'double': + return 8 + default: { + if (type[type.length - 1] === '*') { + return 4 + } else if (type[0] === 'i') { + var bits = parseInt(type.substr(1)) + assert( + bits % 8 === 0, + 'getNativeTypeSize invalid bits ' + bits + ', type ' + type + ) + return bits / 8 + } else { + return 0 + } + } + } + } + var asm2wasmImports = { + 'f64-rem': function(x, y) { + return x % y + }, + debugger: function() { + debugger + }, + } + var functionPointers = new Array(0) + var tempRet0 = 0 + var setTempRet0 = function(value) { + tempRet0 = value + } + if (typeof WebAssembly !== 'object') { + err('no native wasm support detected') + } + var wasmMemory + var wasmTable + var ABORT = false + var EXITSTATUS = 0 + function assert(condition, text) { + if (!condition) { + abort('Assertion failed: ' + text) + } + } + function getCFunc(ident) { + var func = Module['_' + ident] + assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported') + return func + } + function ccall(ident, returnType, argTypes, args, opts) { + var toC = { + string: function(str) { + var ret = 0 + if (str !== null && str !== undefined && str !== 0) { + var len = (str.length << 2) + 1 + ret = stackAlloc(len) + stringToUTF8(str, ret, len) + } + return ret + }, + array: function(arr) { + var ret = stackAlloc(arr.length) + writeArrayToMemory(arr, ret) + return ret + }, + } + function convertReturnValue(ret) { + if (returnType === 'string') return UTF8ToString(ret) + if (returnType === 'boolean') return Boolean(ret) + return ret + } + var func = getCFunc(ident) + var cArgs = [] + var stack = 0 + if (args) { + for (var i = 0; i < args.length; i++) { + var converter = toC[argTypes[i]] + if (converter) { + if (stack === 0) stack = stackSave() + cArgs[i] = converter(args[i]) + } else { + cArgs[i] = args[i] + } + } + } + var ret = func.apply(null, cArgs) + ret = convertReturnValue(ret) + if (stack !== 0) stackRestore(stack) + return ret + } + function cwrap(ident, returnType, argTypes, opts) { + argTypes = argTypes || [] + var numericArgs = argTypes.every(function(type) { + return type === 'number' + }) + var numericRet = returnType !== 'string' + if (numericRet && numericArgs && !opts) { + return getCFunc(ident) + } + return function() { + return ccall(ident, returnType, argTypes, arguments, opts) + } + } + function setValue(ptr, value, type, noSafe) { + type = type || 'i8' + if (type.charAt(type.length - 1) === '*') type = 'i32' + switch (type) { + case 'i1': + HEAP8[ptr >> 0] = value + break + case 'i8': + HEAP8[ptr >> 0] = value + break + case 'i16': + HEAP16[ptr >> 1] = value + break + case 'i32': + HEAP32[ptr >> 2] = value + break + case 'i64': + ;(tempI64 = [ + value >>> 0, + ((tempDouble = value), + +Math_abs(tempDouble) >= 1 + ? tempDouble > 0 + ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 + : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 + : 0), + ]), + (HEAP32[ptr >> 2] = tempI64[0]), + (HEAP32[(ptr + 4) >> 2] = tempI64[1]) + break + case 'float': + HEAPF32[ptr >> 2] = value + break + case 'double': + HEAPF64[ptr >> 3] = value + break + default: + abort('invalid type for setValue: ' + type) + } + } + var ALLOC_NORMAL = 0 + var ALLOC_NONE = 3 + function allocate(slab, types, allocator, ptr) { + var zeroinit, size + if (typeof slab === 'number') { + zeroinit = true + size = slab + } else { + zeroinit = false + size = slab.length + } + var singleType = typeof types === 'string' ? types : null + var ret + if (allocator == ALLOC_NONE) { + ret = ptr + } else { + ret = [_malloc, stackAlloc, dynamicAlloc][allocator]( + Math.max(size, singleType ? 1 : types.length) + ) + } + if (zeroinit) { + var stop + ptr = ret + assert((ret & 3) == 0) + stop = ret + (size & ~3) + for (; ptr < stop; ptr += 4) { + HEAP32[ptr >> 2] = 0 + } + stop = ret + size + while (ptr < stop) { + HEAP8[ptr++ >> 0] = 0 + } + return ret + } + if (singleType === 'i8') { + if (slab.subarray || slab.slice) { + HEAPU8.set(slab, ret) + } else { + HEAPU8.set(new Uint8Array(slab), ret) + } + return ret + } + var i = 0, + type, + typeSize, + previousType + while (i < size) { + var curr = slab[i] + type = singleType || types[i] + if (type === 0) { + i++ + continue + } + if (type == 'i64') type = 'i32' + setValue(ret + i, curr, type) + if (previousType !== type) { + typeSize = getNativeTypeSize(type) + previousType = type + } + i += typeSize + } + return ret + } + function getMemory(size) { + if (!runtimeInitialized) return dynamicAlloc(size) + return _malloc(size) + } + var UTF8Decoder = + typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined + function UTF8ArrayToString(u8Array, idx, maxBytesToRead) { + var endIdx = idx + maxBytesToRead + var endPtr = idx + while (u8Array[endPtr] && !(endPtr >= endIdx)) ++endPtr + if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) { + return UTF8Decoder.decode(u8Array.subarray(idx, endPtr)) + } else { + var str = '' + while (idx < endPtr) { + var u0 = u8Array[idx++] + if (!(u0 & 128)) { + str += String.fromCharCode(u0) + continue + } + var u1 = u8Array[idx++] & 63 + if ((u0 & 224) == 192) { + str += String.fromCharCode(((u0 & 31) << 6) | u1) + continue + } + var u2 = u8Array[idx++] & 63 + if ((u0 & 240) == 224) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2 + } else { + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (u8Array[idx++] & 63) + } + if (u0 < 65536) { + str += String.fromCharCode(u0) + } else { + var ch = u0 - 65536 + str += String.fromCharCode(55296 | (ch >> 10), 56320 | (ch & 1023)) + } + } + } + return str + } + function UTF8ToString(ptr, maxBytesToRead) { + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '' + } + function stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) { + if (!(maxBytesToWrite > 0)) return 0 + var startIdx = outIdx + var endIdx = outIdx + maxBytesToWrite - 1 + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i) + if (u >= 55296 && u <= 57343) { + var u1 = str.charCodeAt(++i) + u = (65536 + ((u & 1023) << 10)) | (u1 & 1023) + } + if (u <= 127) { + if (outIdx >= endIdx) break + outU8Array[outIdx++] = u + } else if (u <= 2047) { + if (outIdx + 1 >= endIdx) break + outU8Array[outIdx++] = 192 | (u >> 6) + outU8Array[outIdx++] = 128 | (u & 63) + } else if (u <= 65535) { + if (outIdx + 2 >= endIdx) break + outU8Array[outIdx++] = 224 | (u >> 12) + outU8Array[outIdx++] = 128 | ((u >> 6) & 63) + outU8Array[outIdx++] = 128 | (u & 63) + } else { + if (outIdx + 3 >= endIdx) break + outU8Array[outIdx++] = 240 | (u >> 18) + outU8Array[outIdx++] = 128 | ((u >> 12) & 63) + outU8Array[outIdx++] = 128 | ((u >> 6) & 63) + outU8Array[outIdx++] = 128 | (u & 63) + } + } + outU8Array[outIdx] = 0 + return outIdx - startIdx + } + function stringToUTF8(str, outPtr, maxBytesToWrite) { + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite) + } + function lengthBytesUTF8(str) { + var len = 0 + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i) + if (u >= 55296 && u <= 57343) + u = (65536 + ((u & 1023) << 10)) | (str.charCodeAt(++i) & 1023) + if (u <= 127) ++len + else if (u <= 2047) len += 2 + else if (u <= 65535) len += 3 + else len += 4 + } + return len + } + var UTF16Decoder = + typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined + function writeArrayToMemory(array, buffer) { + HEAP8.set(array, buffer) + } + function writeAsciiToMemory(str, buffer, dontAddNull) { + for (var i = 0; i < str.length; ++i) { + HEAP8[buffer++ >> 0] = str.charCodeAt(i) + } + if (!dontAddNull) HEAP8[buffer >> 0] = 0 + } + function demangle(func) { + return func + } + function demangleAll(text) { + var regex = /__Z[\w\d_]+/g + return text.replace(regex, function(x) { + var y = demangle(x) + return x === y ? x : y + ' [' + x + ']' + }) + } + function jsStackTrace() { + var err = new Error() + if (!err.stack) { + try { + throw new Error(0) + } catch (e) { + err = e + } + if (!err.stack) { + return '(no stack trace available)' + } + } + return err.stack.toString() + } + function stackTrace() { + var js = jsStackTrace() + if (Module['extraStackTrace']) js += '\n' + Module['extraStackTrace']() + return demangleAll(js) + } + var WASM_PAGE_SIZE = 65536 + function alignUp(x, multiple) { + if (x % multiple > 0) { + x += multiple - (x % multiple) + } + return x + } + var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64 + function updateGlobalBufferViews() { + Module['HEAP8'] = HEAP8 = new Int8Array(buffer) + Module['HEAP16'] = HEAP16 = new Int16Array(buffer) + Module['HEAP32'] = HEAP32 = new Int32Array(buffer) + Module['HEAPU8'] = HEAPU8 = new Uint8Array(buffer) + Module['HEAPU16'] = HEAPU16 = new Uint16Array(buffer) + Module['HEAPU32'] = HEAPU32 = new Uint32Array(buffer) + Module['HEAPF32'] = HEAPF32 = new Float32Array(buffer) + Module['HEAPF64'] = HEAPF64 = new Float64Array(buffer) + } + var DYNAMIC_BASE = 5520464, + DYNAMICTOP_PTR = 277552 + var TOTAL_STACK = 5242880 + var INITIAL_TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 16777216 + if (INITIAL_TOTAL_MEMORY < TOTAL_STACK) + err( + 'TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + + INITIAL_TOTAL_MEMORY + + '! (TOTAL_STACK=' + + TOTAL_STACK + + ')' + ) + if (Module['buffer']) { + buffer = Module['buffer'] + } else { + if (typeof WebAssembly === 'object' && typeof WebAssembly.Memory === 'function') { + wasmMemory = new WebAssembly.Memory({ + initial: INITIAL_TOTAL_MEMORY / WASM_PAGE_SIZE, + }) + buffer = wasmMemory.buffer + } else { + buffer = new ArrayBuffer(INITIAL_TOTAL_MEMORY) + } + } + updateGlobalBufferViews() + HEAP32[DYNAMICTOP_PTR >> 2] = DYNAMIC_BASE + function callRuntimeCallbacks(callbacks) { + while (callbacks.length > 0) { + var callback = callbacks.shift() + if (typeof callback == 'function') { + callback() + continue + } + var func = callback.func + if (typeof func === 'number') { + if (callback.arg === undefined) { + Module['dynCall_v'](func) + } else { + Module['dynCall_vi'](func, callback.arg) + } + } else { + func(callback.arg === undefined ? null : callback.arg) + } + } + } + var __ATPRERUN__ = [] + var __ATINIT__ = [] + var __ATMAIN__ = [] + var __ATPOSTRUN__ = [] + var runtimeInitialized = false + var runtimeExited = false + function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']] + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()) + } + } + callRuntimeCallbacks(__ATPRERUN__) + } + function ensureInitRuntime() { + if (runtimeInitialized) return + runtimeInitialized = true + if (!Module['noFSInit'] && !FS.init.initialized) FS.init() + TTY.init() + PIPEFS.root = FS.mount(PIPEFS, {}, null) + callRuntimeCallbacks(__ATINIT__) + } + function preMain() { + FS.ignorePermissions = false + callRuntimeCallbacks(__ATMAIN__) + } + function exitRuntime() { + runtimeExited = true + } + function postRun() { + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') + Module['postRun'] = [Module['postRun']] + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()) + } + } + callRuntimeCallbacks(__ATPOSTRUN__) + } + function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb) + } + function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb) + } + var Math_abs = Math.abs + var Math_ceil = Math.ceil + var Math_floor = Math.floor + var Math_min = Math.min + var runDependencies = 0 + var runDependencyWatcher = null + var dependenciesFulfilled = null + function getUniqueRunDependency(id) { + return id + } + function addRunDependency(id) { + runDependencies++ + if (Module['monitorRunDependencies']) { + Module['monitorRunDependencies'](runDependencies) + } + } + function removeRunDependency(id) { + runDependencies-- + if (Module['monitorRunDependencies']) { + Module['monitorRunDependencies'](runDependencies) + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher) + runDependencyWatcher = null + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled + dependenciesFulfilled = null + callback() + } + } + } + Module['preloadedImages'] = {} + Module['preloadedAudios'] = {} + var dataURIPrefix = 'data:application/octet-stream;base64,' + function isDataURI(filename) { + return String.prototype.startsWith + ? filename.startsWith(dataURIPrefix) + : filename.indexOf(dataURIPrefix) === 0 + } + var wasmBinaryFile = 'libarchive.wasm' + if (!isDataURI(wasmBinaryFile)) { + wasmBinaryFile = locateFile(wasmBinaryFile) + } + function getBinary() { + try { + if (Module['wasmBinary']) { + return new Uint8Array(Module['wasmBinary']) + } + if (Module['readBinary']) { + return Module['readBinary'](wasmBinaryFile) + } else { + throw 'both async and sync fetching of the wasm failed' + } + } catch (err) { + abort(err) + } + } + function getBinaryPromise() { + if ( + !Module['wasmBinary'] && + (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && + typeof fetch === 'function' + ) { + return fetch(wasmBinaryFile, { credentials: 'same-origin' }) + .then(function(response) { + if (!response['ok']) { + throw "failed to load wasm binary file at '" + wasmBinaryFile + "'" + } + return response['arrayBuffer']() + }) + .catch(function() { + return getBinary() + }) + } + return new Promise(function(resolve, reject) { + resolve(getBinary()) + }) + } + function createWasm(env) { + var info = { + env: env, + global: { NaN: NaN, Infinity: Infinity }, + 'global.Math': Math, + asm2wasm: asm2wasmImports, + } + function receiveInstance(instance, module) { + var exports = instance.exports + Module['asm'] = exports + removeRunDependency('wasm-instantiate') + } + addRunDependency('wasm-instantiate') + if (Module['instantiateWasm']) { + try { + return Module['instantiateWasm'](info, receiveInstance) + } catch (e) { + err('Module.instantiateWasm callback failed with error: ' + e) + return false + } + } + function receiveInstantiatedSource(output) { + receiveInstance(output['instance']) + } + function instantiateArrayBuffer(receiver) { + getBinaryPromise() + .then(function(binary) { + return WebAssembly.instantiate(binary, info) + }) + .then(receiver, function(reason) { + err('failed to asynchronously prepare wasm: ' + reason) + abort(reason) + }) + } + if ( + !Module['wasmBinary'] && + typeof WebAssembly.instantiateStreaming === 'function' && + !isDataURI(wasmBinaryFile) && + typeof fetch === 'function' + ) { + WebAssembly.instantiateStreaming( + fetch(wasmBinaryFile, { credentials: 'same-origin' }), + info + ).then(receiveInstantiatedSource, function(reason) { + err('wasm streaming compile failed: ' + reason) + err('falling back to ArrayBuffer instantiation') + instantiateArrayBuffer(receiveInstantiatedSource) + }) + } else { + instantiateArrayBuffer(receiveInstantiatedSource) + } + return {} + } + Module['asm'] = function(global, env, providedBuffer) { + env['memory'] = wasmMemory + env['table'] = wasmTable = new WebAssembly.Table({ + initial: 507, + maximum: 507, + element: 'anyfunc', + }) + env['__memory_base'] = 1024 + env['__table_base'] = 0 + var exports = createWasm(env) + return exports + } + __ATINIT__.push({ + func: function() { + ___emscripten_environ_constructor() + }, + }) + var ENV = {} + function ___buildEnvironment(environ) { + var MAX_ENV_VALUES = 64 + var TOTAL_ENV_SIZE = 1024 + var poolPtr + var envPtr + if (!___buildEnvironment.called) { + ___buildEnvironment.called = true + ENV['USER'] = ENV['LOGNAME'] = 'web_user' + ENV['PATH'] = '/' + ENV['PWD'] = '/' + ENV['HOME'] = '/home/web_user' + ENV['LANG'] = 'C.UTF-8' + ENV['_'] = Module['thisProgram'] + poolPtr = getMemory(TOTAL_ENV_SIZE) + envPtr = getMemory(MAX_ENV_VALUES * 4) + HEAP32[envPtr >> 2] = poolPtr + HEAP32[environ >> 2] = envPtr + } else { + envPtr = HEAP32[environ >> 2] + poolPtr = HEAP32[envPtr >> 2] + } + var strings = [] + var totalSize = 0 + for (var key in ENV) { + if (typeof ENV[key] === 'string') { + var line = key + '=' + ENV[key] + strings.push(line) + totalSize += line.length + } + } + if (totalSize > TOTAL_ENV_SIZE) { + throw new Error('Environment size exceeded TOTAL_ENV_SIZE!') + } + var ptrSize = 4 + for (var i = 0; i < strings.length; i++) { + var line = strings[i] + writeAsciiToMemory(line, poolPtr) + HEAP32[(envPtr + i * ptrSize) >> 2] = poolPtr + poolPtr += line.length + 1 + } + HEAP32[(envPtr + strings.length * ptrSize) >> 2] = 0 + } + var PATH = { + splitPath: function(filename) { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/ + return splitPathRe.exec(filename).slice(1) + }, + normalizeArray: function(parts, allowAboveRoot) { + var up = 0 + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i] + if (last === '.') { + parts.splice(i, 1) + } else if (last === '..') { + parts.splice(i, 1) + up++ + } else if (up) { + parts.splice(i, 1) + up-- + } + } + if (allowAboveRoot) { + for (; up; up--) { + parts.unshift('..') + } + } + return parts + }, + normalize: function(path) { + var isAbsolute = path.charAt(0) === '/', + trailingSlash = path.substr(-1) === '/' + path = PATH.normalizeArray( + path.split('/').filter(function(p) { + return !!p + }), + !isAbsolute + ).join('/') + if (!path && !isAbsolute) { + path = '.' + } + if (path && trailingSlash) { + path += '/' + } + return (isAbsolute ? '/' : '') + path + }, + dirname: function(path) { + var result = PATH.splitPath(path), + root = result[0], + dir = result[1] + if (!root && !dir) { + return '.' + } + if (dir) { + dir = dir.substr(0, dir.length - 1) + } + return root + dir + }, + basename: function(path) { + if (path === '/') return '/' + var lastSlash = path.lastIndexOf('/') + if (lastSlash === -1) return path + return path.substr(lastSlash + 1) + }, + extname: function(path) { + return PATH.splitPath(path)[3] + }, + join: function() { + var paths = Array.prototype.slice.call(arguments, 0) + return PATH.normalize(paths.join('/')) + }, + join2: function(l, r) { + return PATH.normalize(l + '/' + r) + }, + } + function ___setErrNo(value) { + if (Module['___errno_location']) HEAP32[Module['___errno_location']() >> 2] = value + return value + } + var PATH_FS = { + resolve: function() { + var resolvedPath = '', + resolvedAbsolute = false + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = i >= 0 ? arguments[i] : FS.cwd() + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings') + } else if (!path) { + return '' + } + resolvedPath = path + '/' + resolvedPath + resolvedAbsolute = path.charAt(0) === '/' + } + resolvedPath = PATH.normalizeArray( + resolvedPath.split('/').filter(function(p) { + return !!p + }), + !resolvedAbsolute + ).join('/') + return (resolvedAbsolute ? '/' : '') + resolvedPath || '.' + }, + relative: function(from, to) { + from = PATH_FS.resolve(from).substr(1) + to = PATH_FS.resolve(to).substr(1) + function trim(arr) { + var start = 0 + for (; start < arr.length; start++) { + if (arr[start] !== '') break + } + var end = arr.length - 1 + for (; end >= 0; end--) { + if (arr[end] !== '') break + } + if (start > end) return [] + return arr.slice(start, end - start + 1) + } + var fromParts = trim(from.split('/')) + var toParts = trim(to.split('/')) + var length = Math.min(fromParts.length, toParts.length) + var samePartsLength = length + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i + break + } + } + var outputParts = [] + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..') + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)) + return outputParts.join('/') + }, + } + var TTY = { + ttys: [], + init: function() {}, + shutdown: function() {}, + register: function(dev, ops) { + TTY.ttys[dev] = { input: [], output: [], ops: ops } + FS.registerDevice(dev, TTY.stream_ops) + }, + stream_ops: { + open: function(stream) { + var tty = TTY.ttys[stream.node.rdev] + if (!tty) { + throw new FS.ErrnoError(19) + } + stream.tty = tty + stream.seekable = false + }, + close: function(stream) { + stream.tty.ops.flush(stream.tty) + }, + flush: function(stream) { + stream.tty.ops.flush(stream.tty) + }, + read: function(stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(6) + } + var bytesRead = 0 + for (var i = 0; i < length; i++) { + var result + try { + result = stream.tty.ops.get_char(stream.tty) + } catch (e) { + throw new FS.ErrnoError(5) + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(11) + } + if (result === null || result === undefined) break + bytesRead++ + buffer[offset + i] = result + } + if (bytesRead) { + stream.node.timestamp = Date.now() + } + return bytesRead + }, + write: function(stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(6) + } + try { + for (var i = 0; i < length; i++) { + stream.tty.ops.put_char(stream.tty, buffer[offset + i]) + } + } catch (e) { + throw new FS.ErrnoError(5) + } + if (length) { + stream.node.timestamp = Date.now() + } + return i + }, + }, + default_tty_ops: { + get_char: function(tty) { + if (!tty.input.length) { + var result = null + if (ENVIRONMENT_IS_NODE) { + var BUFSIZE = 256 + var buf = new Buffer(BUFSIZE) + var bytesRead = 0 + var isPosixPlatform = process.platform != 'win32' + var fd = process.stdin.fd + if (isPosixPlatform) { + var usingDevice = false + try { + fd = fs.openSync('/dev/stdin', 'r') + usingDevice = true + } catch (e) {} + } + try { + bytesRead = fs.readSync(fd, buf, 0, BUFSIZE, null) + } catch (e) { + if (e.toString().indexOf('EOF') != -1) bytesRead = 0 + else throw e + } + if (usingDevice) { + fs.closeSync(fd) + } + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString('utf-8') + } else { + result = null + } + } else if ( + typeof window != 'undefined' && + typeof window.prompt == 'function' + ) { + result = window.prompt('Input: ') + if (result !== null) { + result += '\n' + } + } else if (typeof readline == 'function') { + result = readline() + if (result !== null) { + result += '\n' + } + } + if (!result) { + return null + } + tty.input = intArrayFromString(result, true) + } + return tty.input.shift() + }, + put_char: function(tty, val) { + if (val === null || val === 10) { + out(UTF8ArrayToString(tty.output, 0)) + tty.output = [] + } else { + if (val != 0) tty.output.push(val) + } + }, + flush: function(tty) { + if (tty.output && tty.output.length > 0) { + out(UTF8ArrayToString(tty.output, 0)) + tty.output = [] + } + }, + }, + default_tty1_ops: { + put_char: function(tty, val) { + if (val === null || val === 10) { + err(UTF8ArrayToString(tty.output, 0)) + tty.output = [] + } else { + if (val != 0) tty.output.push(val) + } + }, + flush: function(tty) { + if (tty.output && tty.output.length > 0) { + err(UTF8ArrayToString(tty.output, 0)) + tty.output = [] + } + }, + }, + } + var MEMFS = { + ops_table: null, + mount: function(mount) { + return MEMFS.createNode(null, '/', 16384 | 511, 0) + }, + createNode: function(parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + throw new FS.ErrnoError(1) + } + if (!MEMFS.ops_table) { + MEMFS.ops_table = { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink, + }, + stream: { llseek: MEMFS.stream_ops.llseek }, + }, + file: { + node: { getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + allocate: MEMFS.stream_ops.allocate, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync, + }, + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink, + }, + stream: {}, + }, + chrdev: { + node: { getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr }, + stream: FS.chrdev_stream_ops, + }, + } + } + var node = FS.createNode(parent, name, mode, dev) + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node + node.stream_ops = MEMFS.ops_table.dir.stream + node.contents = {} + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node + node.stream_ops = MEMFS.ops_table.file.stream + node.usedBytes = 0 + node.contents = null + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node + node.stream_ops = MEMFS.ops_table.link.stream + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node + node.stream_ops = MEMFS.ops_table.chrdev.stream + } + node.timestamp = Date.now() + if (parent) { + parent.contents[name] = node + } + return node + }, + getFileDataAsRegularArray: function(node) { + if (node.contents && node.contents.subarray) { + var arr = [] + for (var i = 0; i < node.usedBytes; ++i) arr.push(node.contents[i]) + return arr + } + return node.contents + }, + getFileDataAsTypedArray: function(node) { + if (!node.contents) return new Uint8Array() + if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes) + return new Uint8Array(node.contents) + }, + expandFileStorage: function(node, newCapacity) { + var prevCapacity = node.contents ? node.contents.length : 0 + if (prevCapacity >= newCapacity) return + var CAPACITY_DOUBLING_MAX = 1024 * 1024 + newCapacity = Math.max( + newCapacity, + (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125)) | 0 + ) + if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256) + var oldContents = node.contents + node.contents = new Uint8Array(newCapacity) + if (node.usedBytes > 0) + node.contents.set(oldContents.subarray(0, node.usedBytes), 0) + return + }, + resizeFileStorage: function(node, newSize) { + if (node.usedBytes == newSize) return + if (newSize == 0) { + node.contents = null + node.usedBytes = 0 + return + } + if (!node.contents || node.contents.subarray) { + var oldContents = node.contents + node.contents = new Uint8Array(new ArrayBuffer(newSize)) + if (oldContents) { + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))) + } + node.usedBytes = newSize + return + } + if (!node.contents) node.contents = [] + if (node.contents.length > newSize) node.contents.length = newSize + else while (node.contents.length < newSize) node.contents.push(0) + node.usedBytes = newSize + }, + node_ops: { + getattr: function(node) { + var attr = {} + attr.dev = FS.isChrdev(node.mode) ? node.id : 1 + attr.ino = node.id + attr.mode = node.mode + attr.nlink = 1 + attr.uid = 0 + attr.gid = 0 + attr.rdev = node.rdev + if (FS.isDir(node.mode)) { + attr.size = 4096 + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length + } else { + attr.size = 0 + } + attr.atime = new Date(node.timestamp) + attr.mtime = new Date(node.timestamp) + attr.ctime = new Date(node.timestamp) + attr.blksize = 4096 + attr.blocks = Math.ceil(attr.size / attr.blksize) + return attr + }, + setattr: function(node, attr) { + if (attr.mode !== undefined) { + node.mode = attr.mode + } + if (attr.timestamp !== undefined) { + node.timestamp = attr.timestamp + } + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size) + } + }, + lookup: function(parent, name) { + throw FS.genericErrors[2] + }, + mknod: function(parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev) + }, + rename: function(old_node, new_dir, new_name) { + if (FS.isDir(old_node.mode)) { + var new_node + try { + new_node = FS.lookupNode(new_dir, new_name) + } catch (e) {} + if (new_node) { + for (var i in new_node.contents) { + throw new FS.ErrnoError(39) + } + } + } + delete old_node.parent.contents[old_node.name] + old_node.name = new_name + new_dir.contents[new_name] = old_node + old_node.parent = new_dir + }, + unlink: function(parent, name) { + delete parent.contents[name] + }, + rmdir: function(parent, name) { + var node = FS.lookupNode(parent, name) + for (var i in node.contents) { + throw new FS.ErrnoError(39) + } + delete parent.contents[name] + }, + readdir: function(node) { + var entries = ['.', '..'] + for (var key in node.contents) { + if (!node.contents.hasOwnProperty(key)) { + continue + } + entries.push(key) + } + return entries + }, + symlink: function(parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 511 | 40960, 0) + node.link = oldpath + return node + }, + readlink: function(node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(22) + } + return node.link + }, + }, + stream_ops: { + read: function(stream, buffer, offset, length, position) { + var contents = stream.node.contents + if (position >= stream.node.usedBytes) return 0 + var size = Math.min(stream.node.usedBytes - position, length) + if (size > 8 && contents.subarray) { + buffer.set(contents.subarray(position, position + size), offset) + } else { + for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i] + } + return size + }, + write: function(stream, buffer, offset, length, position, canOwn) { + canOwn = false + if (!length) return 0 + var node = stream.node + node.timestamp = Date.now() + if (buffer.subarray && (!node.contents || node.contents.subarray)) { + if (canOwn) { + node.contents = buffer.subarray(offset, offset + length) + node.usedBytes = length + return length + } else if (node.usedBytes === 0 && position === 0) { + node.contents = new Uint8Array(buffer.subarray(offset, offset + length)) + node.usedBytes = length + return length + } else if (position + length <= node.usedBytes) { + node.contents.set(buffer.subarray(offset, offset + length), position) + return length + } + } + MEMFS.expandFileStorage(node, position + length) + if (node.contents.subarray && buffer.subarray) + node.contents.set(buffer.subarray(offset, offset + length), position) + else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i] + } + } + node.usedBytes = Math.max(node.usedBytes, position + length) + return length + }, + llseek: function(stream, offset, whence) { + var position = offset + if (whence === 1) { + position += stream.position + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes + } + } + if (position < 0) { + throw new FS.ErrnoError(22) + } + return position + }, + allocate: function(stream, offset, length) { + MEMFS.expandFileStorage(stream.node, offset + length) + stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length) + }, + mmap: function(stream, buffer, offset, length, position, prot, flags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(19) + } + var ptr + var allocated + var contents = stream.node.contents + if ( + !(flags & 2) && + (contents.buffer === buffer || contents.buffer === buffer.buffer) + ) { + allocated = false + ptr = contents.byteOffset + } else { + if (position > 0 || position + length < stream.node.usedBytes) { + if (contents.subarray) { + contents = contents.subarray(position, position + length) + } else { + contents = Array.prototype.slice.call( + contents, + position, + position + length + ) + } + } + allocated = true + ptr = _malloc(length) + if (!ptr) { + throw new FS.ErrnoError(12) + } + buffer.set(contents, ptr) + } + return { ptr: ptr, allocated: allocated } + }, + msync: function(stream, buffer, offset, length, mmapFlags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(19) + } + if (mmapFlags & 2) { + return 0 + } + var bytesWritten = MEMFS.stream_ops.write( + stream, + buffer, + 0, + length, + offset, + false + ) + return 0 + }, + }, + } + var IDBFS = { + dbs: {}, + indexedDB: function() { + if (typeof indexedDB !== 'undefined') return indexedDB + var ret = null + if (typeof window === 'object') + ret = + window.indexedDB || + window.mozIndexedDB || + window.webkitIndexedDB || + window.msIndexedDB + assert(ret, 'IDBFS used, but indexedDB not supported') + return ret + }, + DB_VERSION: 21, + DB_STORE_NAME: 'FILE_DATA', + mount: function(mount) { + return MEMFS.mount.apply(null, arguments) + }, + syncfs: function(mount, populate, callback) { + IDBFS.getLocalSet(mount, function(err, local) { + if (err) return callback(err) + IDBFS.getRemoteSet(mount, function(err, remote) { + if (err) return callback(err) + var src = populate ? remote : local + var dst = populate ? local : remote + IDBFS.reconcile(src, dst, callback) + }) + }) + }, + getDB: function(name, callback) { + var db = IDBFS.dbs[name] + if (db) { + return callback(null, db) + } + var req + try { + req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION) + } catch (e) { + return callback(e) + } + if (!req) { + return callback('Unable to connect to IndexedDB') + } + req.onupgradeneeded = function(e) { + var db = e.target.result + var transaction = e.target.transaction + var fileStore + if (db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)) { + fileStore = transaction.objectStore(IDBFS.DB_STORE_NAME) + } else { + fileStore = db.createObjectStore(IDBFS.DB_STORE_NAME) + } + if (!fileStore.indexNames.contains('timestamp')) { + fileStore.createIndex('timestamp', 'timestamp', { unique: false }) + } + } + req.onsuccess = function() { + db = req.result + IDBFS.dbs[name] = db + callback(null, db) + } + req.onerror = function(e) { + callback(this.error) + e.preventDefault() + } + }, + getLocalSet: function(mount, callback) { + var entries = {} + function isRealDir(p) { + return p !== '.' && p !== '..' + } + function toAbsolute(root) { + return function(p) { + return PATH.join2(root, p) + } + } + var check = FS.readdir(mount.mountpoint) + .filter(isRealDir) + .map(toAbsolute(mount.mountpoint)) + while (check.length) { + var path = check.pop() + var stat + try { + stat = FS.stat(path) + } catch (e) { + return callback(e) + } + if (FS.isDir(stat.mode)) { + check.push.apply( + check, + FS.readdir(path) + .filter(isRealDir) + .map(toAbsolute(path)) + ) + } + entries[path] = { timestamp: stat.mtime } + } + return callback(null, { type: 'local', entries: entries }) + }, + getRemoteSet: function(mount, callback) { + var entries = {} + IDBFS.getDB(mount.mountpoint, function(err, db) { + if (err) return callback(err) + try { + var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readonly') + transaction.onerror = function(e) { + callback(this.error) + e.preventDefault() + } + var store = transaction.objectStore(IDBFS.DB_STORE_NAME) + var index = store.index('timestamp') + index.openKeyCursor().onsuccess = function(event) { + var cursor = event.target.result + if (!cursor) { + return callback(null, { type: 'remote', db: db, entries: entries }) + } + entries[cursor.primaryKey] = { timestamp: cursor.key } + cursor.continue() + } + } catch (e) { + return callback(e) + } + }) + }, + loadLocalEntry: function(path, callback) { + var stat, node + try { + var lookup = FS.lookupPath(path) + node = lookup.node + stat = FS.stat(path) + } catch (e) { + return callback(e) + } + if (FS.isDir(stat.mode)) { + return callback(null, { timestamp: stat.mtime, mode: stat.mode }) + } else if (FS.isFile(stat.mode)) { + node.contents = MEMFS.getFileDataAsTypedArray(node) + return callback(null, { + timestamp: stat.mtime, + mode: stat.mode, + contents: node.contents, + }) + } else { + return callback(new Error('node type not supported')) + } + }, + storeLocalEntry: function(path, entry, callback) { + try { + if (FS.isDir(entry.mode)) { + FS.mkdir(path, entry.mode) + } else if (FS.isFile(entry.mode)) { + FS.writeFile(path, entry.contents, { canOwn: true }) + } else { + return callback(new Error('node type not supported')) + } + FS.chmod(path, entry.mode) + FS.utime(path, entry.timestamp, entry.timestamp) + } catch (e) { + return callback(e) + } + callback(null) + }, + removeLocalEntry: function(path, callback) { + try { + var lookup = FS.lookupPath(path) + var stat = FS.stat(path) + if (FS.isDir(stat.mode)) { + FS.rmdir(path) + } else if (FS.isFile(stat.mode)) { + FS.unlink(path) + } + } catch (e) { + return callback(e) + } + callback(null) + }, + loadRemoteEntry: function(store, path, callback) { + var req = store.get(path) + req.onsuccess = function(event) { + callback(null, event.target.result) + } + req.onerror = function(e) { + callback(this.error) + e.preventDefault() + } + }, + storeRemoteEntry: function(store, path, entry, callback) { + var req = store.put(entry, path) + req.onsuccess = function() { + callback(null) + } + req.onerror = function(e) { + callback(this.error) + e.preventDefault() + } + }, + removeRemoteEntry: function(store, path, callback) { + var req = store.delete(path) + req.onsuccess = function() { + callback(null) + } + req.onerror = function(e) { + callback(this.error) + e.preventDefault() + } + }, + reconcile: function(src, dst, callback) { + var total = 0 + var create = [] + Object.keys(src.entries).forEach(function(key) { + var e = src.entries[key] + var e2 = dst.entries[key] + if (!e2 || e.timestamp > e2.timestamp) { + create.push(key) + total++ + } + }) + var remove = [] + Object.keys(dst.entries).forEach(function(key) { + var e = dst.entries[key] + var e2 = src.entries[key] + if (!e2) { + remove.push(key) + total++ + } + }) + if (!total) { + return callback(null) + } + var errored = false + var completed = 0 + var db = src.type === 'remote' ? src.db : dst.db + var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readwrite') + var store = transaction.objectStore(IDBFS.DB_STORE_NAME) + function done(err) { + if (err) { + if (!done.errored) { + done.errored = true + return callback(err) + } + return + } + if (++completed >= total) { + return callback(null) + } + } + transaction.onerror = function(e) { + done(this.error) + e.preventDefault() + } + create.sort().forEach(function(path) { + if (dst.type === 'local') { + IDBFS.loadRemoteEntry(store, path, function(err, entry) { + if (err) return done(err) + IDBFS.storeLocalEntry(path, entry, done) + }) + } else { + IDBFS.loadLocalEntry(path, function(err, entry) { + if (err) return done(err) + IDBFS.storeRemoteEntry(store, path, entry, done) + }) + } + }) + remove + .sort() + .reverse() + .forEach(function(path) { + if (dst.type === 'local') { + IDBFS.removeLocalEntry(path, done) + } else { + IDBFS.removeRemoteEntry(store, path, done) + } + }) + }, + } + var NODEFS = { + isWindows: false, + staticInit: function() { + NODEFS.isWindows = !!process.platform.match(/^win/) + var flags = process['binding']('constants') + if (flags['fs']) { + flags = flags['fs'] + } + NODEFS.flagsForNodeMap = { + 1024: flags['O_APPEND'], + 64: flags['O_CREAT'], + 128: flags['O_EXCL'], + 0: flags['O_RDONLY'], + 2: flags['O_RDWR'], + 4096: flags['O_SYNC'], + 512: flags['O_TRUNC'], + 1: flags['O_WRONLY'], + } + }, + bufferFrom: function(arrayBuffer) { + return Buffer.alloc ? Buffer.from(arrayBuffer) : new Buffer(arrayBuffer) + }, + mount: function(mount) { + assert(ENVIRONMENT_IS_NODE) + return NODEFS.createNode(null, '/', NODEFS.getMode(mount.opts.root), 0) + }, + createNode: function(parent, name, mode, dev) { + if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) { + throw new FS.ErrnoError(22) + } + var node = FS.createNode(parent, name, mode) + node.node_ops = NODEFS.node_ops + node.stream_ops = NODEFS.stream_ops + return node + }, + getMode: function(path) { + var stat + try { + stat = fs.lstatSync(path) + if (NODEFS.isWindows) { + stat.mode = stat.mode | ((stat.mode & 292) >> 2) + } + } catch (e) { + if (!e.code) throw e + throw new FS.ErrnoError(-e.errno) + } + return stat.mode + }, + realPath: function(node) { + var parts = [] + while (node.parent !== node) { + parts.push(node.name) + node = node.parent + } + parts.push(node.mount.opts.root) + parts.reverse() + return PATH.join.apply(null, parts) + }, + flagsForNode: function(flags) { + flags &= ~2097152 + flags &= ~2048 + flags &= ~32768 + flags &= ~524288 + var newFlags = 0 + for (var k in NODEFS.flagsForNodeMap) { + if (flags & k) { + newFlags |= NODEFS.flagsForNodeMap[k] + flags ^= k + } + } + if (!flags) { + return newFlags + } else { + throw new FS.ErrnoError(22) + } + }, + node_ops: { + getattr: function(node) { + var path = NODEFS.realPath(node) + var stat + try { + stat = fs.lstatSync(path) + } catch (e) { + if (!e.code) throw e + throw new FS.ErrnoError(-e.errno) + } + if (NODEFS.isWindows && !stat.blksize) { + stat.blksize = 4096 + } + if (NODEFS.isWindows && !stat.blocks) { + stat.blocks = ((stat.size + stat.blksize - 1) / stat.blksize) | 0 + } + return { + dev: stat.dev, + ino: stat.ino, + mode: stat.mode, + nlink: stat.nlink, + uid: stat.uid, + gid: stat.gid, + rdev: stat.rdev, + size: stat.size, + atime: stat.atime, + mtime: stat.mtime, + ctime: stat.ctime, + blksize: stat.blksize, + blocks: stat.blocks, + } + }, + setattr: function(node, attr) { + var path = NODEFS.realPath(node) + try { + if (attr.mode !== undefined) { + fs.chmodSync(path, attr.mode) + node.mode = attr.mode + } + if (attr.timestamp !== undefined) { + var date = new Date(attr.timestamp) + fs.utimesSync(path, date, date) + } + if (attr.size !== undefined) { + fs.truncateSync(path, attr.size) + } + } catch (e) { + if (!e.code) throw e + throw new FS.ErrnoError(-e.errno) + } + }, + lookup: function(parent, name) { + var path = PATH.join2(NODEFS.realPath(parent), name) + var mode = NODEFS.getMode(path) + return NODEFS.createNode(parent, name, mode) + }, + mknod: function(parent, name, mode, dev) { + var node = NODEFS.createNode(parent, name, mode, dev) + var path = NODEFS.realPath(node) + try { + if (FS.isDir(node.mode)) { + fs.mkdirSync(path, node.mode) + } else { + fs.writeFileSync(path, '', { mode: node.mode }) + } + } catch (e) { + if (!e.code) throw e + throw new FS.ErrnoError(-e.errno) + } + return node + }, + rename: function(oldNode, newDir, newName) { + var oldPath = NODEFS.realPath(oldNode) + var newPath = PATH.join2(NODEFS.realPath(newDir), newName) + try { + fs.renameSync(oldPath, newPath) + } catch (e) { + if (!e.code) throw e + throw new FS.ErrnoError(-e.errno) + } + }, + unlink: function(parent, name) { + var path = PATH.join2(NODEFS.realPath(parent), name) + try { + fs.unlinkSync(path) + } catch (e) { + if (!e.code) throw e + throw new FS.ErrnoError(-e.errno) + } + }, + rmdir: function(parent, name) { + var path = PATH.join2(NODEFS.realPath(parent), name) + try { + fs.rmdirSync(path) + } catch (e) { + if (!e.code) throw e + throw new FS.ErrnoError(-e.errno) + } + }, + readdir: function(node) { + var path = NODEFS.realPath(node) + try { + return fs.readdirSync(path) + } catch (e) { + if (!e.code) throw e + throw new FS.ErrnoError(-e.errno) + } + }, + symlink: function(parent, newName, oldPath) { + var newPath = PATH.join2(NODEFS.realPath(parent), newName) + try { + fs.symlinkSync(oldPath, newPath) + } catch (e) { + if (!e.code) throw e + throw new FS.ErrnoError(-e.errno) + } + }, + readlink: function(node) { + var path = NODEFS.realPath(node) + try { + path = fs.readlinkSync(path) + path = NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root), path) + return path + } catch (e) { + if (!e.code) throw e + throw new FS.ErrnoError(-e.errno) + } + }, + }, + stream_ops: { + open: function(stream) { + var path = NODEFS.realPath(stream.node) + try { + if (FS.isFile(stream.node.mode)) { + stream.nfd = fs.openSync(path, NODEFS.flagsForNode(stream.flags)) + } + } catch (e) { + if (!e.code) throw e + throw new FS.ErrnoError(-e.errno) + } + }, + close: function(stream) { + try { + if (FS.isFile(stream.node.mode) && stream.nfd) { + fs.closeSync(stream.nfd) + } + } catch (e) { + if (!e.code) throw e + throw new FS.ErrnoError(-e.errno) + } + }, + read: function(stream, buffer, offset, length, position) { + if (length === 0) return 0 + try { + return fs.readSync( + stream.nfd, + NODEFS.bufferFrom(buffer.buffer), + offset, + length, + position + ) + } catch (e) { + throw new FS.ErrnoError(-e.errno) + } + }, + write: function(stream, buffer, offset, length, position) { + try { + return fs.writeSync( + stream.nfd, + NODEFS.bufferFrom(buffer.buffer), + offset, + length, + position + ) + } catch (e) { + throw new FS.ErrnoError(-e.errno) + } + }, + llseek: function(stream, offset, whence) { + var position = offset + if (whence === 1) { + position += stream.position + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + try { + var stat = fs.fstatSync(stream.nfd) + position += stat.size + } catch (e) { + throw new FS.ErrnoError(-e.errno) + } + } + } + if (position < 0) { + throw new FS.ErrnoError(22) + } + return position + }, + }, + } + var WORKERFS = { + DIR_MODE: 16895, + FILE_MODE: 33279, + reader: null, + mount: function(mount) { + assert(ENVIRONMENT_IS_WORKER) + if (!WORKERFS.reader) WORKERFS.reader = new FileReaderSync() + var root = WORKERFS.createNode(null, '/', WORKERFS.DIR_MODE, 0) + var createdParents = {} + function ensureParent(path) { + var parts = path.split('/') + var parent = root + for (var i = 0; i < parts.length - 1; i++) { + var curr = parts.slice(0, i + 1).join('/') + if (!createdParents[curr]) { + createdParents[curr] = WORKERFS.createNode( + parent, + parts[i], + WORKERFS.DIR_MODE, + 0 + ) + } + parent = createdParents[curr] + } + return parent + } + function base(path) { + var parts = path.split('/') + return parts[parts.length - 1] + } + Array.prototype.forEach.call(mount.opts['files'] || [], function(file) { + WORKERFS.createNode( + ensureParent(file.name), + base(file.name), + WORKERFS.FILE_MODE, + 0, + file, + file.lastModifiedDate + ) + }) + ;(mount.opts['blobs'] || []).forEach(function(obj) { + WORKERFS.createNode( + ensureParent(obj['name']), + base(obj['name']), + WORKERFS.FILE_MODE, + 0, + obj['data'] + ) + }) + ;(mount.opts['packages'] || []).forEach(function(pack) { + pack['metadata'].files.forEach(function(file) { + var name = file.filename.substr(1) + WORKERFS.createNode( + ensureParent(name), + base(name), + WORKERFS.FILE_MODE, + 0, + pack['blob'].slice(file.start, file.end) + ) + }) + }) + return root + }, + createNode: function(parent, name, mode, dev, contents, mtime) { + var node = FS.createNode(parent, name, mode) + node.mode = mode + node.node_ops = WORKERFS.node_ops + node.stream_ops = WORKERFS.stream_ops + node.timestamp = (mtime || new Date()).getTime() + assert(WORKERFS.FILE_MODE !== WORKERFS.DIR_MODE) + if (mode === WORKERFS.FILE_MODE) { + node.size = contents.size + node.contents = contents + } else { + node.size = 4096 + node.contents = {} + } + if (parent) { + parent.contents[name] = node + } + return node + }, + node_ops: { + getattr: function(node) { + return { + dev: 1, + ino: undefined, + mode: node.mode, + nlink: 1, + uid: 0, + gid: 0, + rdev: undefined, + size: node.size, + atime: new Date(node.timestamp), + mtime: new Date(node.timestamp), + ctime: new Date(node.timestamp), + blksize: 4096, + blocks: Math.ceil(node.size / 4096), + } + }, + setattr: function(node, attr) { + if (attr.mode !== undefined) { + node.mode = attr.mode + } + if (attr.timestamp !== undefined) { + node.timestamp = attr.timestamp + } + }, + lookup: function(parent, name) { + throw new FS.ErrnoError(2) + }, + mknod: function(parent, name, mode, dev) { + throw new FS.ErrnoError(1) + }, + rename: function(oldNode, newDir, newName) { + throw new FS.ErrnoError(1) + }, + unlink: function(parent, name) { + throw new FS.ErrnoError(1) + }, + rmdir: function(parent, name) { + throw new FS.ErrnoError(1) + }, + readdir: function(node) { + var entries = ['.', '..'] + for (var key in node.contents) { + if (!node.contents.hasOwnProperty(key)) { + continue + } + entries.push(key) + } + return entries + }, + symlink: function(parent, newName, oldPath) { + throw new FS.ErrnoError(1) + }, + readlink: function(node) { + throw new FS.ErrnoError(1) + }, + }, + stream_ops: { + read: function(stream, buffer, offset, length, position) { + if (position >= stream.node.size) return 0 + var chunk = stream.node.contents.slice(position, position + length) + var ab = WORKERFS.reader.readAsArrayBuffer(chunk) + buffer.set(new Uint8Array(ab), offset) + return chunk.size + }, + write: function(stream, buffer, offset, length, position) { + throw new FS.ErrnoError(5) + }, + llseek: function(stream, offset, whence) { + var position = offset + if (whence === 1) { + position += stream.position + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.size + } + } + if (position < 0) { + throw new FS.ErrnoError(22) + } + return position + }, + }, + } + var FS = { + root: null, + mounts: [], + devices: {}, + streams: [], + nextInode: 1, + nameTable: null, + currentPath: '/', + initialized: false, + ignorePermissions: true, + trackingDelegate: {}, + tracking: { openFlags: { READ: 1, WRITE: 2 } }, + ErrnoError: null, + genericErrors: {}, + filesystems: null, + syncFSRequests: 0, + handleFSError: function(e) { + if (!(e instanceof FS.ErrnoError)) throw e + ' : ' + stackTrace() + return ___setErrNo(e.errno) + }, + lookupPath: function(path, opts) { + path = PATH_FS.resolve(FS.cwd(), path) + opts = opts || {} + if (!path) return { path: '', node: null } + var defaults = { follow_mount: true, recurse_count: 0 } + for (var key in defaults) { + if (opts[key] === undefined) { + opts[key] = defaults[key] + } + } + if (opts.recurse_count > 8) { + throw new FS.ErrnoError(40) + } + var parts = PATH.normalizeArray( + path.split('/').filter(function(p) { + return !!p + }), + false + ) + var current = FS.root + var current_path = '/' + for (var i = 0; i < parts.length; i++) { + var islast = i === parts.length - 1 + if (islast && opts.parent) { + break + } + current = FS.lookupNode(current, parts[i]) + current_path = PATH.join2(current_path, parts[i]) + if (FS.isMountpoint(current)) { + if (!islast || (islast && opts.follow_mount)) { + current = current.mounted.root + } + } + if (!islast || opts.follow) { + var count = 0 + while (FS.isLink(current.mode)) { + var link = FS.readlink(current_path) + current_path = PATH_FS.resolve(PATH.dirname(current_path), link) + var lookup = FS.lookupPath(current_path, { + recurse_count: opts.recurse_count, + }) + current = lookup.node + if (count++ > 40) { + throw new FS.ErrnoError(40) + } + } + } + } + return { path: current_path, node: current } + }, + getPath: function(node) { + var path + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint + if (!path) return mount + return mount[mount.length - 1] !== '/' ? mount + '/' + path : mount + path + } + path = path ? node.name + '/' + path : node.name + node = node.parent + } + }, + hashName: function(parentid, name) { + var hash = 0 + for (var i = 0; i < name.length; i++) { + hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0 + } + return ((parentid + hash) >>> 0) % FS.nameTable.length + }, + hashAddNode: function(node) { + var hash = FS.hashName(node.parent.id, node.name) + node.name_next = FS.nameTable[hash] + FS.nameTable[hash] = node + }, + hashRemoveNode: function(node) { + var hash = FS.hashName(node.parent.id, node.name) + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next + } else { + var current = FS.nameTable[hash] + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next + break + } + current = current.name_next + } + } + }, + lookupNode: function(parent, name) { + var err = FS.mayLookup(parent) + if (err) { + throw new FS.ErrnoError(err, parent) + } + var hash = FS.hashName(parent.id, name) + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name + if (node.parent.id === parent.id && nodeName === name) { + return node + } + } + return FS.lookup(parent, name) + }, + createNode: function(parent, name, mode, rdev) { + if (!FS.FSNode) { + FS.FSNode = function(parent, name, mode, rdev) { + if (!parent) { + parent = this + } + this.parent = parent + this.mount = parent.mount + this.mounted = null + this.id = FS.nextInode++ + this.name = name + this.mode = mode + this.node_ops = {} + this.stream_ops = {} + this.rdev = rdev + } + FS.FSNode.prototype = {} + var readMode = 292 | 73 + var writeMode = 146 + Object.defineProperties(FS.FSNode.prototype, { + read: { + get: function() { + return (this.mode & readMode) === readMode + }, + set: function(val) { + val ? (this.mode |= readMode) : (this.mode &= ~readMode) + }, + }, + write: { + get: function() { + return (this.mode & writeMode) === writeMode + }, + set: function(val) { + val ? (this.mode |= writeMode) : (this.mode &= ~writeMode) + }, + }, + isFolder: { + get: function() { + return FS.isDir(this.mode) + }, + }, + isDevice: { + get: function() { + return FS.isChrdev(this.mode) + }, + }, + }) + } + var node = new FS.FSNode(parent, name, mode, rdev) + FS.hashAddNode(node) + return node + }, + destroyNode: function(node) { + FS.hashRemoveNode(node) + }, + isRoot: function(node) { + return node === node.parent + }, + isMountpoint: function(node) { + return !!node.mounted + }, + isFile: function(mode) { + return (mode & 61440) === 32768 + }, + isDir: function(mode) { + return (mode & 61440) === 16384 + }, + isLink: function(mode) { + return (mode & 61440) === 40960 + }, + isChrdev: function(mode) { + return (mode & 61440) === 8192 + }, + isBlkdev: function(mode) { + return (mode & 61440) === 24576 + }, + isFIFO: function(mode) { + return (mode & 61440) === 4096 + }, + isSocket: function(mode) { + return (mode & 49152) === 49152 + }, + flagModes: { + r: 0, + rs: 1052672, + 'r+': 2, + w: 577, + wx: 705, + xw: 705, + 'w+': 578, + 'wx+': 706, + 'xw+': 706, + a: 1089, + ax: 1217, + xa: 1217, + 'a+': 1090, + 'ax+': 1218, + 'xa+': 1218, + }, + modeStringToFlags: function(str) { + var flags = FS.flagModes[str] + if (typeof flags === 'undefined') { + throw new Error('Unknown file open mode: ' + str) + } + return flags + }, + flagsToPermissionString: function(flag) { + var perms = ['r', 'w', 'rw'][flag & 3] + if (flag & 512) { + perms += 'w' + } + return perms + }, + nodePermissions: function(node, perms) { + if (FS.ignorePermissions) { + return 0 + } + if (perms.indexOf('r') !== -1 && !(node.mode & 292)) { + return 13 + } else if (perms.indexOf('w') !== -1 && !(node.mode & 146)) { + return 13 + } else if (perms.indexOf('x') !== -1 && !(node.mode & 73)) { + return 13 + } + return 0 + }, + mayLookup: function(dir) { + var err = FS.nodePermissions(dir, 'x') + if (err) return err + if (!dir.node_ops.lookup) return 13 + return 0 + }, + mayCreate: function(dir, name) { + try { + var node = FS.lookupNode(dir, name) + return 17 + } catch (e) {} + return FS.nodePermissions(dir, 'wx') + }, + mayDelete: function(dir, name, isdir) { + var node + try { + node = FS.lookupNode(dir, name) + } catch (e) { + return e.errno + } + var err = FS.nodePermissions(dir, 'wx') + if (err) { + return err + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return 20 + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return 16 + } + } else { + if (FS.isDir(node.mode)) { + return 21 + } + } + return 0 + }, + mayOpen: function(node, flags) { + if (!node) { + return 2 + } + if (FS.isLink(node.mode)) { + return 40 + } else if (FS.isDir(node.mode)) { + if (FS.flagsToPermissionString(flags) !== 'r' || flags & 512) { + return 21 + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)) + }, + MAX_OPEN_FDS: 4096, + nextfd: function(fd_start, fd_end) { + fd_start = fd_start || 0 + fd_end = fd_end || FS.MAX_OPEN_FDS + for (var fd = fd_start; fd <= fd_end; fd++) { + if (!FS.streams[fd]) { + return fd + } + } + throw new FS.ErrnoError(24) + }, + getStream: function(fd) { + return FS.streams[fd] + }, + createStream: function(stream, fd_start, fd_end) { + if (!FS.FSStream) { + FS.FSStream = function() {} + FS.FSStream.prototype = {} + Object.defineProperties(FS.FSStream.prototype, { + object: { + get: function() { + return this.node + }, + set: function(val) { + this.node = val + }, + }, + isRead: { + get: function() { + return (this.flags & 2097155) !== 1 + }, + }, + isWrite: { + get: function() { + return (this.flags & 2097155) !== 0 + }, + }, + isAppend: { + get: function() { + return this.flags & 1024 + }, + }, + }) + } + var newStream = new FS.FSStream() + for (var p in stream) { + newStream[p] = stream[p] + } + stream = newStream + var fd = FS.nextfd(fd_start, fd_end) + stream.fd = fd + FS.streams[fd] = stream + return stream + }, + closeStream: function(fd) { + FS.streams[fd] = null + }, + chrdev_stream_ops: { + open: function(stream) { + var device = FS.getDevice(stream.node.rdev) + stream.stream_ops = device.stream_ops + if (stream.stream_ops.open) { + stream.stream_ops.open(stream) + } + }, + llseek: function() { + throw new FS.ErrnoError(29) + }, + }, + major: function(dev) { + return dev >> 8 + }, + minor: function(dev) { + return dev & 255 + }, + makedev: function(ma, mi) { + return (ma << 8) | mi + }, + registerDevice: function(dev, ops) { + FS.devices[dev] = { stream_ops: ops } + }, + getDevice: function(dev) { + return FS.devices[dev] + }, + getMounts: function(mount) { + var mounts = [] + var check = [mount] + while (check.length) { + var m = check.pop() + mounts.push(m) + check.push.apply(check, m.mounts) + } + return mounts + }, + syncfs: function(populate, callback) { + if (typeof populate === 'function') { + callback = populate + populate = false + } + FS.syncFSRequests++ + if (FS.syncFSRequests > 1) { + console.log( + 'warning: ' + + FS.syncFSRequests + + ' FS.syncfs operations in flight at once, probably just doing extra work' + ) + } + var mounts = FS.getMounts(FS.root.mount) + var completed = 0 + function doCallback(err) { + FS.syncFSRequests-- + return callback(err) + } + function done(err) { + if (err) { + if (!done.errored) { + done.errored = true + return doCallback(err) + } + return + } + if (++completed >= mounts.length) { + doCallback(null) + } + } + mounts.forEach(function(mount) { + if (!mount.type.syncfs) { + return done(null) + } + mount.type.syncfs(mount, populate, done) + }) + }, + mount: function(type, opts, mountpoint) { + var root = mountpoint === '/' + var pseudo = !mountpoint + var node + if (root && FS.root) { + throw new FS.ErrnoError(16) + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }) + mountpoint = lookup.path + node = lookup.node + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(16) + } + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(20) + } + } + var mount = { type: type, opts: opts, mountpoint: mountpoint, mounts: [] } + var mountRoot = type.mount(mount) + mountRoot.mount = mount + mount.root = mountRoot + if (root) { + FS.root = mountRoot + } else if (node) { + node.mounted = mount + if (node.mount) { + node.mount.mounts.push(mount) + } + } + return mountRoot + }, + unmount: function(mountpoint) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }) + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(22) + } + var node = lookup.node + var mount = node.mounted + var mounts = FS.getMounts(mount) + Object.keys(FS.nameTable).forEach(function(hash) { + var current = FS.nameTable[hash] + while (current) { + var next = current.name_next + if (mounts.indexOf(current.mount) !== -1) { + FS.destroyNode(current) + } + current = next + } + }) + node.mounted = null + var idx = node.mount.mounts.indexOf(mount) + node.mount.mounts.splice(idx, 1) + }, + lookup: function(parent, name) { + return parent.node_ops.lookup(parent, name) + }, + mknod: function(path, mode, dev) { + var lookup = FS.lookupPath(path, { parent: true }) + var parent = lookup.node + var name = PATH.basename(path) + if (!name || name === '.' || name === '..') { + throw new FS.ErrnoError(22) + } + var err = FS.mayCreate(parent, name) + if (err) { + throw new FS.ErrnoError(err) + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(1) + } + return parent.node_ops.mknod(parent, name, mode, dev) + }, + create: function(path, mode) { + mode = mode !== undefined ? mode : 438 + mode &= 4095 + mode |= 32768 + return FS.mknod(path, mode, 0) + }, + mkdir: function(path, mode) { + mode = mode !== undefined ? mode : 511 + mode &= 511 | 512 + mode |= 16384 + return FS.mknod(path, mode, 0) + }, + mkdirTree: function(path, mode) { + var dirs = path.split('/') + var d = '' + for (var i = 0; i < dirs.length; ++i) { + if (!dirs[i]) continue + d += '/' + dirs[i] + try { + FS.mkdir(d, mode) + } catch (e) { + if (e.errno != 17) throw e + } + } + }, + mkdev: function(path, mode, dev) { + if (typeof dev === 'undefined') { + dev = mode + mode = 438 + } + mode |= 8192 + return FS.mknod(path, mode, dev) + }, + symlink: function(oldpath, newpath) { + if (!PATH_FS.resolve(oldpath)) { + throw new FS.ErrnoError(2) + } + var lookup = FS.lookupPath(newpath, { parent: true }) + var parent = lookup.node + if (!parent) { + throw new FS.ErrnoError(2) + } + var newname = PATH.basename(newpath) + var err = FS.mayCreate(parent, newname) + if (err) { + throw new FS.ErrnoError(err) + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(1) + } + return parent.node_ops.symlink(parent, newname, oldpath) + }, + rename: function(old_path, new_path) { + var old_dirname = PATH.dirname(old_path) + var new_dirname = PATH.dirname(new_path) + var old_name = PATH.basename(old_path) + var new_name = PATH.basename(new_path) + var lookup, old_dir, new_dir + try { + lookup = FS.lookupPath(old_path, { parent: true }) + old_dir = lookup.node + lookup = FS.lookupPath(new_path, { parent: true }) + new_dir = lookup.node + } catch (e) { + throw new FS.ErrnoError(16) + } + if (!old_dir || !new_dir) throw new FS.ErrnoError(2) + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(18) + } + var old_node = FS.lookupNode(old_dir, old_name) + var relative = PATH_FS.relative(old_path, new_dirname) + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(22) + } + relative = PATH_FS.relative(new_path, old_dirname) + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(39) + } + var new_node + try { + new_node = FS.lookupNode(new_dir, new_name) + } catch (e) {} + if (old_node === new_node) { + return + } + var isdir = FS.isDir(old_node.mode) + var err = FS.mayDelete(old_dir, old_name, isdir) + if (err) { + throw new FS.ErrnoError(err) + } + err = new_node + ? FS.mayDelete(new_dir, new_name, isdir) + : FS.mayCreate(new_dir, new_name) + if (err) { + throw new FS.ErrnoError(err) + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(1) + } + if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { + throw new FS.ErrnoError(16) + } + if (new_dir !== old_dir) { + err = FS.nodePermissions(old_dir, 'w') + if (err) { + throw new FS.ErrnoError(err) + } + } + try { + if (FS.trackingDelegate['willMovePath']) { + FS.trackingDelegate['willMovePath'](old_path, new_path) + } + } catch (e) { + console.log( + "FS.trackingDelegate['willMovePath']('" + + old_path + + "', '" + + new_path + + "') threw an exception: " + + e.message + ) + } + FS.hashRemoveNode(old_node) + try { + old_dir.node_ops.rename(old_node, new_dir, new_name) + } catch (e) { + throw e + } finally { + FS.hashAddNode(old_node) + } + try { + if (FS.trackingDelegate['onMovePath']) + FS.trackingDelegate['onMovePath'](old_path, new_path) + } catch (e) { + console.log( + "FS.trackingDelegate['onMovePath']('" + + old_path + + "', '" + + new_path + + "') threw an exception: " + + e.message + ) + } + }, + rmdir: function(path) { + var lookup = FS.lookupPath(path, { parent: true }) + var parent = lookup.node + var name = PATH.basename(path) + var node = FS.lookupNode(parent, name) + var err = FS.mayDelete(parent, name, true) + if (err) { + throw new FS.ErrnoError(err) + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(1) + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(16) + } + try { + if (FS.trackingDelegate['willDeletePath']) { + FS.trackingDelegate['willDeletePath'](path) + } + } catch (e) { + console.log( + "FS.trackingDelegate['willDeletePath']('" + + path + + "') threw an exception: " + + e.message + ) + } + parent.node_ops.rmdir(parent, name) + FS.destroyNode(node) + try { + if (FS.trackingDelegate['onDeletePath']) + FS.trackingDelegate['onDeletePath'](path) + } catch (e) { + console.log( + "FS.trackingDelegate['onDeletePath']('" + + path + + "') threw an exception: " + + e.message + ) + } + }, + readdir: function(path) { + var lookup = FS.lookupPath(path, { follow: true }) + var node = lookup.node + if (!node.node_ops.readdir) { + throw new FS.ErrnoError(20) + } + return node.node_ops.readdir(node) + }, + unlink: function(path) { + var lookup = FS.lookupPath(path, { parent: true }) + var parent = lookup.node + var name = PATH.basename(path) + var node = FS.lookupNode(parent, name) + var err = FS.mayDelete(parent, name, false) + if (err) { + throw new FS.ErrnoError(err) + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(1) + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(16) + } + try { + if (FS.trackingDelegate['willDeletePath']) { + FS.trackingDelegate['willDeletePath'](path) + } + } catch (e) { + console.log( + "FS.trackingDelegate['willDeletePath']('" + + path + + "') threw an exception: " + + e.message + ) + } + parent.node_ops.unlink(parent, name) + FS.destroyNode(node) + try { + if (FS.trackingDelegate['onDeletePath']) + FS.trackingDelegate['onDeletePath'](path) + } catch (e) { + console.log( + "FS.trackingDelegate['onDeletePath']('" + + path + + "') threw an exception: " + + e.message + ) + } + }, + readlink: function(path) { + var lookup = FS.lookupPath(path) + var link = lookup.node + if (!link) { + throw new FS.ErrnoError(2) + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(22) + } + return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link)) + }, + stat: function(path, dontFollow) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }) + var node = lookup.node + if (!node) { + throw new FS.ErrnoError(2) + } + if (!node.node_ops.getattr) { + throw new FS.ErrnoError(1) + } + return node.node_ops.getattr(node) + }, + lstat: function(path) { + return FS.stat(path, true) + }, + chmod: function(path, mode, dontFollow) { + var node + if (typeof path === 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }) + node = lookup.node + } else { + node = path + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(1) + } + node.node_ops.setattr(node, { + mode: (mode & 4095) | (node.mode & ~4095), + timestamp: Date.now(), + }) + }, + lchmod: function(path, mode) { + FS.chmod(path, mode, true) + }, + fchmod: function(fd, mode) { + var stream = FS.getStream(fd) + if (!stream) { + throw new FS.ErrnoError(9) + } + FS.chmod(stream.node, mode) + }, + chown: function(path, uid, gid, dontFollow) { + var node + if (typeof path === 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }) + node = lookup.node + } else { + node = path + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(1) + } + node.node_ops.setattr(node, { timestamp: Date.now() }) + }, + lchown: function(path, uid, gid) { + FS.chown(path, uid, gid, true) + }, + fchown: function(fd, uid, gid) { + var stream = FS.getStream(fd) + if (!stream) { + throw new FS.ErrnoError(9) + } + FS.chown(stream.node, uid, gid) + }, + truncate: function(path, len) { + if (len < 0) { + throw new FS.ErrnoError(22) + } + var node + if (typeof path === 'string') { + var lookup = FS.lookupPath(path, { follow: true }) + node = lookup.node + } else { + node = path + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(1) + } + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(21) + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(22) + } + var err = FS.nodePermissions(node, 'w') + if (err) { + throw new FS.ErrnoError(err) + } + node.node_ops.setattr(node, { size: len, timestamp: Date.now() }) + }, + ftruncate: function(fd, len) { + var stream = FS.getStream(fd) + if (!stream) { + throw new FS.ErrnoError(9) + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(22) + } + FS.truncate(stream.node, len) + }, + utime: function(path, atime, mtime) { + var lookup = FS.lookupPath(path, { follow: true }) + var node = lookup.node + node.node_ops.setattr(node, { timestamp: Math.max(atime, mtime) }) + }, + open: function(path, flags, mode, fd_start, fd_end) { + if (path === '') { + throw new FS.ErrnoError(2) + } + flags = typeof flags === 'string' ? FS.modeStringToFlags(flags) : flags + mode = typeof mode === 'undefined' ? 438 : mode + if (flags & 64) { + mode = (mode & 4095) | 32768 + } else { + mode = 0 + } + var node + if (typeof path === 'object') { + node = path + } else { + path = PATH.normalize(path) + try { + var lookup = FS.lookupPath(path, { follow: !(flags & 131072) }) + node = lookup.node + } catch (e) {} + } + var created = false + if (flags & 64) { + if (node) { + if (flags & 128) { + throw new FS.ErrnoError(17) + } + } else { + node = FS.mknod(path, mode, 0) + created = true + } + } + if (!node) { + throw new FS.ErrnoError(2) + } + if (FS.isChrdev(node.mode)) { + flags &= ~512 + } + if (flags & 65536 && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(20) + } + if (!created) { + var err = FS.mayOpen(node, flags) + if (err) { + throw new FS.ErrnoError(err) + } + } + if (flags & 512) { + FS.truncate(node, 0) + } + flags &= ~(128 | 512) + var stream = FS.createStream( + { + node: node, + path: FS.getPath(node), + flags: flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + ungotten: [], + error: false, + }, + fd_start, + fd_end + ) + if (stream.stream_ops.open) { + stream.stream_ops.open(stream) + } + if (Module['logReadFiles'] && !(flags & 1)) { + if (!FS.readFiles) FS.readFiles = {} + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1 + console.log('FS.trackingDelegate error on read file: ' + path) + } + } + try { + if (FS.trackingDelegate['onOpenFile']) { + var trackingFlags = 0 + if ((flags & 2097155) !== 1) { + trackingFlags |= FS.tracking.openFlags.READ + } + if ((flags & 2097155) !== 0) { + trackingFlags |= FS.tracking.openFlags.WRITE + } + FS.trackingDelegate['onOpenFile'](path, trackingFlags) + } + } catch (e) { + console.log( + "FS.trackingDelegate['onOpenFile']('" + + path + + "', flags) threw an exception: " + + e.message + ) + } + return stream + }, + close: function(stream) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(9) + } + if (stream.getdents) stream.getdents = null + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream) + } + } catch (e) { + throw e + } finally { + FS.closeStream(stream.fd) + } + stream.fd = null + }, + isClosed: function(stream) { + return stream.fd === null + }, + llseek: function(stream, offset, whence) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(9) + } + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(29) + } + if (whence != 0 && whence != 1 && whence != 2) { + throw new FS.ErrnoError(22) + } + stream.position = stream.stream_ops.llseek(stream, offset, whence) + stream.ungotten = [] + return stream.position + }, + read: function(stream, buffer, offset, length, position) { + if (length < 0 || position < 0) { + throw new FS.ErrnoError(22) + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(9) + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(9) + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(21) + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(22) + } + var seeking = typeof position !== 'undefined' + if (!seeking) { + position = stream.position + } else if (!stream.seekable) { + throw new FS.ErrnoError(29) + } + var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position) + if (!seeking) stream.position += bytesRead + return bytesRead + }, + write: function(stream, buffer, offset, length, position, canOwn) { + if (length < 0 || position < 0) { + throw new FS.ErrnoError(22) + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(9) + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(9) + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(21) + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(22) + } + if (stream.flags & 1024) { + FS.llseek(stream, 0, 2) + } + var seeking = typeof position !== 'undefined' + if (!seeking) { + position = stream.position + } else if (!stream.seekable) { + throw new FS.ErrnoError(29) + } + var bytesWritten = stream.stream_ops.write( + stream, + buffer, + offset, + length, + position, + canOwn + ) + if (!seeking) stream.position += bytesWritten + try { + if (stream.path && FS.trackingDelegate['onWriteToFile']) + FS.trackingDelegate['onWriteToFile'](stream.path) + } catch (e) { + console.log( + "FS.trackingDelegate['onWriteToFile']('" + + stream.path + + "') threw an exception: " + + e.message + ) + } + return bytesWritten + }, + allocate: function(stream, offset, length) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(9) + } + if (offset < 0 || length <= 0) { + throw new FS.ErrnoError(22) + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(9) + } + if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(19) + } + if (!stream.stream_ops.allocate) { + throw new FS.ErrnoError(95) + } + stream.stream_ops.allocate(stream, offset, length) + }, + mmap: function(stream, buffer, offset, length, position, prot, flags) { + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(13) + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(19) + } + return stream.stream_ops.mmap( + stream, + buffer, + offset, + length, + position, + prot, + flags + ) + }, + msync: function(stream, buffer, offset, length, mmapFlags) { + if (!stream || !stream.stream_ops.msync) { + return 0 + } + return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags) + }, + munmap: function(stream) { + return 0 + }, + ioctl: function(stream, cmd, arg) { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(25) + } + return stream.stream_ops.ioctl(stream, cmd, arg) + }, + readFile: function(path, opts) { + opts = opts || {} + opts.flags = opts.flags || 'r' + opts.encoding = opts.encoding || 'binary' + if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { + throw new Error('Invalid encoding type "' + opts.encoding + '"') + } + var ret + var stream = FS.open(path, opts.flags) + var stat = FS.stat(path) + var length = stat.size + var buf = new Uint8Array(length) + FS.read(stream, buf, 0, length, 0) + if (opts.encoding === 'utf8') { + ret = UTF8ArrayToString(buf, 0) + } else if (opts.encoding === 'binary') { + ret = buf + } + FS.close(stream) + return ret + }, + writeFile: function(path, data, opts) { + opts = opts || {} + opts.flags = opts.flags || 'w' + var stream = FS.open(path, opts.flags, opts.mode) + if (typeof data === 'string') { + var buf = new Uint8Array(lengthBytesUTF8(data) + 1) + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length) + FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn) + } else if (ArrayBuffer.isView(data)) { + FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn) + } else { + throw new Error('Unsupported data type') + } + FS.close(stream) + }, + cwd: function() { + return FS.currentPath + }, + chdir: function(path) { + var lookup = FS.lookupPath(path, { follow: true }) + if (lookup.node === null) { + throw new FS.ErrnoError(2) + } + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(20) + } + var err = FS.nodePermissions(lookup.node, 'x') + if (err) { + throw new FS.ErrnoError(err) + } + FS.currentPath = lookup.path + }, + createDefaultDirectories: function() { + FS.mkdir('/tmp') + FS.mkdir('/home') + FS.mkdir('/home/web_user') + }, + createDefaultDevices: function() { + FS.mkdir('/dev') + FS.registerDevice(FS.makedev(1, 3), { + read: function() { + return 0 + }, + write: function(stream, buffer, offset, length, pos) { + return length + }, + }) + FS.mkdev('/dev/null', FS.makedev(1, 3)) + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops) + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops) + FS.mkdev('/dev/tty', FS.makedev(5, 0)) + FS.mkdev('/dev/tty1', FS.makedev(6, 0)) + var random_device + if ( + typeof crypto === 'object' && + typeof crypto['getRandomValues'] === 'function' + ) { + var randomBuffer = new Uint8Array(1) + random_device = function() { + crypto.getRandomValues(randomBuffer) + return randomBuffer[0] + } + } else if (ENVIRONMENT_IS_NODE) { + try { + var crypto_module = require('crypto') + random_device = function() { + return crypto_module['randomBytes'](1)[0] + } + } catch (e) {} + } else { + } + if (!random_device) { + random_device = function() { + abort('random_device') + } + } + FS.createDevice('/dev', 'random', random_device) + FS.createDevice('/dev', 'urandom', random_device) + FS.mkdir('/dev/shm') + FS.mkdir('/dev/shm/tmp') + }, + createSpecialDirectories: function() { + FS.mkdir('/proc') + FS.mkdir('/proc/self') + FS.mkdir('/proc/self/fd') + FS.mount( + { + mount: function() { + var node = FS.createNode('/proc/self', 'fd', 16384 | 511, 73) + node.node_ops = { + lookup: function(parent, name) { + var fd = +name + var stream = FS.getStream(fd) + if (!stream) throw new FS.ErrnoError(9) + var ret = { + parent: null, + mount: { mountpoint: 'fake' }, + node_ops: { + readlink: function() { + return stream.path + }, + }, + } + ret.parent = ret + return ret + }, + } + return node + }, + }, + {}, + '/proc/self/fd' + ) + }, + createStandardStreams: function() { + if (Module['stdin']) { + FS.createDevice('/dev', 'stdin', Module['stdin']) + } else { + FS.symlink('/dev/tty', '/dev/stdin') + } + if (Module['stdout']) { + FS.createDevice('/dev', 'stdout', null, Module['stdout']) + } else { + FS.symlink('/dev/tty', '/dev/stdout') + } + if (Module['stderr']) { + FS.createDevice('/dev', 'stderr', null, Module['stderr']) + } else { + FS.symlink('/dev/tty1', '/dev/stderr') + } + var stdin = FS.open('/dev/stdin', 'r') + var stdout = FS.open('/dev/stdout', 'w') + var stderr = FS.open('/dev/stderr', 'w') + }, + ensureErrnoError: function() { + if (FS.ErrnoError) return + FS.ErrnoError = function ErrnoError(errno, node) { + this.node = node + this.setErrno = function(errno) { + this.errno = errno + } + this.setErrno(errno) + this.message = 'FS error' + if (this.stack) + Object.defineProperty(this, 'stack', { + value: new Error().stack, + writable: true, + }) + } + FS.ErrnoError.prototype = new Error() + FS.ErrnoError.prototype.constructor = FS.ErrnoError + ;[2].forEach(function(code) { + FS.genericErrors[code] = new FS.ErrnoError(code) + FS.genericErrors[code].stack = '' + }) + }, + staticInit: function() { + FS.ensureErrnoError() + FS.nameTable = new Array(4096) + FS.mount(MEMFS, {}, '/') + FS.createDefaultDirectories() + FS.createDefaultDevices() + FS.createSpecialDirectories() + FS.filesystems = { + MEMFS: MEMFS, + IDBFS: IDBFS, + NODEFS: NODEFS, + WORKERFS: WORKERFS, + } + }, + init: function(input, output, error) { + FS.init.initialized = true + FS.ensureErrnoError() + Module['stdin'] = input || Module['stdin'] + Module['stdout'] = output || Module['stdout'] + Module['stderr'] = error || Module['stderr'] + FS.createStandardStreams() + }, + quit: function() { + FS.init.initialized = false + var fflush = Module['_fflush'] + if (fflush) fflush(0) + for (var i = 0; i < FS.streams.length; i++) { + var stream = FS.streams[i] + if (!stream) { + continue + } + FS.close(stream) + } + }, + getMode: function(canRead, canWrite) { + var mode = 0 + if (canRead) mode |= 292 | 73 + if (canWrite) mode |= 146 + return mode + }, + joinPath: function(parts, forceRelative) { + var path = PATH.join.apply(null, parts) + if (forceRelative && path[0] == '/') path = path.substr(1) + return path + }, + absolutePath: function(relative, base) { + return PATH_FS.resolve(base, relative) + }, + standardizePath: function(path) { + return PATH.normalize(path) + }, + findObject: function(path, dontResolveLastLink) { + var ret = FS.analyzePath(path, dontResolveLastLink) + if (ret.exists) { + return ret.object + } else { + ___setErrNo(ret.error) + return null + } + }, + analyzePath: function(path, dontResolveLastLink) { + try { + var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }) + path = lookup.path + } catch (e) {} + var ret = { + isRoot: false, + exists: false, + error: 0, + name: null, + path: null, + object: null, + parentExists: false, + parentPath: null, + parentObject: null, + } + try { + var lookup = FS.lookupPath(path, { parent: true }) + ret.parentExists = true + ret.parentPath = lookup.path + ret.parentObject = lookup.node + ret.name = PATH.basename(path) + lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }) + ret.exists = true + ret.path = lookup.path + ret.object = lookup.node + ret.name = lookup.node.name + ret.isRoot = lookup.path === '/' + } catch (e) { + ret.error = e.errno + } + return ret + }, + createFolder: function(parent, name, canRead, canWrite) { + var path = PATH.join2( + typeof parent === 'string' ? parent : FS.getPath(parent), + name + ) + var mode = FS.getMode(canRead, canWrite) + return FS.mkdir(path, mode) + }, + createPath: function(parent, path, canRead, canWrite) { + parent = typeof parent === 'string' ? parent : FS.getPath(parent) + var parts = path.split('/').reverse() + while (parts.length) { + var part = parts.pop() + if (!part) continue + var current = PATH.join2(parent, part) + try { + FS.mkdir(current) + } catch (e) {} + parent = current + } + return current + }, + createFile: function(parent, name, properties, canRead, canWrite) { + var path = PATH.join2( + typeof parent === 'string' ? parent : FS.getPath(parent), + name + ) + var mode = FS.getMode(canRead, canWrite) + return FS.create(path, mode) + }, + createDataFile: function(parent, name, data, canRead, canWrite, canOwn) { + var path = name + ? PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name) + : parent + var mode = FS.getMode(canRead, canWrite) + var node = FS.create(path, mode) + if (data) { + if (typeof data === 'string') { + var arr = new Array(data.length) + for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i) + data = arr + } + FS.chmod(node, mode | 146) + var stream = FS.open(node, 'w') + FS.write(stream, data, 0, data.length, 0, canOwn) + FS.close(stream) + FS.chmod(node, mode) + } + return node + }, + createDevice: function(parent, name, input, output) { + var path = PATH.join2( + typeof parent === 'string' ? parent : FS.getPath(parent), + name + ) + var mode = FS.getMode(!!input, !!output) + if (!FS.createDevice.major) FS.createDevice.major = 64 + var dev = FS.makedev(FS.createDevice.major++, 0) + FS.registerDevice(dev, { + open: function(stream) { + stream.seekable = false + }, + close: function(stream) { + if (output && output.buffer && output.buffer.length) { + output(10) + } + }, + read: function(stream, buffer, offset, length, pos) { + var bytesRead = 0 + for (var i = 0; i < length; i++) { + var result + try { + result = input() + } catch (e) { + throw new FS.ErrnoError(5) + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(11) + } + if (result === null || result === undefined) break + bytesRead++ + buffer[offset + i] = result + } + if (bytesRead) { + stream.node.timestamp = Date.now() + } + return bytesRead + }, + write: function(stream, buffer, offset, length, pos) { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset + i]) + } catch (e) { + throw new FS.ErrnoError(5) + } + } + if (length) { + stream.node.timestamp = Date.now() + } + return i + }, + }) + return FS.mkdev(path, mode, dev) + }, + createLink: function(parent, name, target, canRead, canWrite) { + var path = PATH.join2( + typeof parent === 'string' ? parent : FS.getPath(parent), + name + ) + return FS.symlink(target, path) + }, + forceLoadFile: function(obj) { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true + var success = true + if (typeof XMLHttpRequest !== 'undefined') { + throw new Error( + 'Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.' + ) + } else if (Module['read']) { + try { + obj.contents = intArrayFromString(Module['read'](obj.url), true) + obj.usedBytes = obj.contents.length + } catch (e) { + success = false + } + } else { + throw new Error('Cannot load without read() or XMLHttpRequest.') + } + if (!success) ___setErrNo(5) + return success + }, + createLazyFile: function(parent, name, url, canRead, canWrite) { + function LazyUint8Array() { + this.lengthKnown = false + this.chunks = [] + } + LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) { + if (idx > this.length - 1 || idx < 0) { + return undefined + } + var chunkOffset = idx % this.chunkSize + var chunkNum = (idx / this.chunkSize) | 0 + return this.getter(chunkNum)[chunkOffset] + } + LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter( + getter + ) { + this.getter = getter + } + LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() { + var xhr = new XMLHttpRequest() + xhr.open('HEAD', url, false) + xhr.send(null) + if (!((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304)) + throw new Error("Couldn't load " + url + '. Status: ' + xhr.status) + var datalength = Number(xhr.getResponseHeader('Content-length')) + var header + var hasByteServing = + (header = xhr.getResponseHeader('Accept-Ranges')) && header === 'bytes' + var usesGzip = + (header = xhr.getResponseHeader('Content-Encoding')) && header === 'gzip' + var chunkSize = 1024 * 1024 + if (!hasByteServing) chunkSize = datalength + var doXHR = function(from, to) { + if (from > to) + throw new Error( + 'invalid range (' + from + ', ' + to + ') or no bytes requested!' + ) + if (to > datalength - 1) + throw new Error( + 'only ' + datalength + ' bytes available! programmer error!' + ) + var xhr = new XMLHttpRequest() + xhr.open('GET', url, false) + if (datalength !== chunkSize) + xhr.setRequestHeader('Range', 'bytes=' + from + '-' + to) + if (typeof Uint8Array != 'undefined') xhr.responseType = 'arraybuffer' + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=x-user-defined') + } + xhr.send(null) + if (!((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304)) + throw new Error("Couldn't load " + url + '. Status: ' + xhr.status) + if (xhr.response !== undefined) { + return new Uint8Array(xhr.response || []) + } else { + return intArrayFromString(xhr.responseText || '', true) + } + } + var lazyArray = this + lazyArray.setDataGetter(function(chunkNum) { + var start = chunkNum * chunkSize + var end = (chunkNum + 1) * chunkSize - 1 + end = Math.min(end, datalength - 1) + if (typeof lazyArray.chunks[chunkNum] === 'undefined') { + lazyArray.chunks[chunkNum] = doXHR(start, end) + } + if (typeof lazyArray.chunks[chunkNum] === 'undefined') + throw new Error('doXHR failed!') + return lazyArray.chunks[chunkNum] + }) + if (usesGzip || !datalength) { + chunkSize = datalength = 1 + datalength = this.getter(0).length + chunkSize = datalength + console.log( + 'LazyFiles on gzip forces download of the whole file when length is accessed' + ) + } + this._length = datalength + this._chunkSize = chunkSize + this.lengthKnown = true + } + if (typeof XMLHttpRequest !== 'undefined') { + if (!ENVIRONMENT_IS_WORKER) + throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc' + var lazyArray = new LazyUint8Array() + Object.defineProperties(lazyArray, { + length: { + get: function() { + if (!this.lengthKnown) { + this.cacheLength() + } + return this._length + }, + }, + chunkSize: { + get: function() { + if (!this.lengthKnown) { + this.cacheLength() + } + return this._chunkSize + }, + }, + }) + var properties = { isDevice: false, contents: lazyArray } + } else { + var properties = { isDevice: false, url: url } + } + var node = FS.createFile(parent, name, properties, canRead, canWrite) + if (properties.contents) { + node.contents = properties.contents + } else if (properties.url) { + node.contents = null + node.url = properties.url + } + Object.defineProperties(node, { + usedBytes: { + get: function() { + return this.contents.length + }, + }, + }) + var stream_ops = {} + var keys = Object.keys(node.stream_ops) + keys.forEach(function(key) { + var fn = node.stream_ops[key] + stream_ops[key] = function forceLoadLazyFile() { + if (!FS.forceLoadFile(node)) { + throw new FS.ErrnoError(5) + } + return fn.apply(null, arguments) + } + }) + stream_ops.read = function stream_ops_read( + stream, + buffer, + offset, + length, + position + ) { + if (!FS.forceLoadFile(node)) { + throw new FS.ErrnoError(5) + } + var contents = stream.node.contents + if (position >= contents.length) return 0 + var size = Math.min(contents.length - position, length) + if (contents.slice) { + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i] + } + } else { + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents.get(position + i) + } + } + return size + } + node.stream_ops = stream_ops + return node + }, + createPreloadedFile: function( + parent, + name, + url, + canRead, + canWrite, + onload, + onerror, + dontCreateFile, + canOwn, + preFinish + ) { + Browser.init() + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent + var dep = getUniqueRunDependency('cp ' + fullname) + function processData(byteArray) { + function finish(byteArray) { + if (preFinish) preFinish() + if (!dontCreateFile) { + FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn) + } + if (onload) onload() + removeRunDependency(dep) + } + var handled = false + Module['preloadPlugins'].forEach(function(plugin) { + if (handled) return + if (plugin['canHandle'](fullname)) { + plugin['handle'](byteArray, fullname, finish, function() { + if (onerror) onerror() + removeRunDependency(dep) + }) + handled = true + } + }) + if (!handled) finish(byteArray) + } + addRunDependency(dep) + if (typeof url == 'string') { + Browser.asyncLoad( + url, + function(byteArray) { + processData(byteArray) + }, + onerror + ) + } else { + processData(url) + } + }, + indexedDB: function() { + return ( + window.indexedDB || + window.mozIndexedDB || + window.webkitIndexedDB || + window.msIndexedDB + ) + }, + DB_NAME: function() { + return 'EM_FS_' + window.location.pathname + }, + DB_VERSION: 20, + DB_STORE_NAME: 'FILE_DATA', + saveFilesToDB: function(paths, onload, onerror) { + onload = onload || function() {} + onerror = onerror || function() {} + var indexedDB = FS.indexedDB() + try { + var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION) + } catch (e) { + return onerror(e) + } + openRequest.onupgradeneeded = function openRequest_onupgradeneeded() { + console.log('creating db') + var db = openRequest.result + db.createObjectStore(FS.DB_STORE_NAME) + } + openRequest.onsuccess = function openRequest_onsuccess() { + var db = openRequest.result + var transaction = db.transaction([FS.DB_STORE_NAME], 'readwrite') + var files = transaction.objectStore(FS.DB_STORE_NAME) + var ok = 0, + fail = 0, + total = paths.length + function finish() { + if (fail == 0) onload() + else onerror() + } + paths.forEach(function(path) { + var putRequest = files.put(FS.analyzePath(path).object.contents, path) + putRequest.onsuccess = function putRequest_onsuccess() { + ok++ + if (ok + fail == total) finish() + } + putRequest.onerror = function putRequest_onerror() { + fail++ + if (ok + fail == total) finish() + } + }) + transaction.onerror = onerror + } + openRequest.onerror = onerror + }, + loadFilesFromDB: function(paths, onload, onerror) { + onload = onload || function() {} + onerror = onerror || function() {} + var indexedDB = FS.indexedDB() + try { + var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION) + } catch (e) { + return onerror(e) + } + openRequest.onupgradeneeded = onerror + openRequest.onsuccess = function openRequest_onsuccess() { + var db = openRequest.result + try { + var transaction = db.transaction([FS.DB_STORE_NAME], 'readonly') + } catch (e) { + onerror(e) + return + } + var files = transaction.objectStore(FS.DB_STORE_NAME) + var ok = 0, + fail = 0, + total = paths.length + function finish() { + if (fail == 0) onload() + else onerror() + } + paths.forEach(function(path) { + var getRequest = files.get(path) + getRequest.onsuccess = function getRequest_onsuccess() { + if (FS.analyzePath(path).exists) { + FS.unlink(path) + } + FS.createDataFile( + PATH.dirname(path), + PATH.basename(path), + getRequest.result, + true, + true, + true + ) + ok++ + if (ok + fail == total) finish() + } + getRequest.onerror = function getRequest_onerror() { + fail++ + if (ok + fail == total) finish() + } + }) + transaction.onerror = onerror + } + openRequest.onerror = onerror + }, + } + var SYSCALLS = { + DEFAULT_POLLMASK: 5, + mappings: {}, + umask: 511, + calculateAt: function(dirfd, path) { + if (path[0] !== '/') { + var dir + if (dirfd === -100) { + dir = FS.cwd() + } else { + var dirstream = FS.getStream(dirfd) + if (!dirstream) throw new FS.ErrnoError(9) + dir = dirstream.path + } + path = PATH.join2(dir, path) + } + return path + }, + doStat: function(func, path, buf) { + try { + var stat = func(path) + } catch (e) { + if ( + e && + e.node && + PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node)) + ) { + return -20 + } + throw e + } + HEAP32[buf >> 2] = stat.dev + HEAP32[(buf + 4) >> 2] = 0 + HEAP32[(buf + 8) >> 2] = stat.ino + HEAP32[(buf + 12) >> 2] = stat.mode + HEAP32[(buf + 16) >> 2] = stat.nlink + HEAP32[(buf + 20) >> 2] = stat.uid + HEAP32[(buf + 24) >> 2] = stat.gid + HEAP32[(buf + 28) >> 2] = stat.rdev + HEAP32[(buf + 32) >> 2] = 0 + ;(tempI64 = [ + stat.size >>> 0, + ((tempDouble = stat.size), + +Math_abs(tempDouble) >= 1 + ? tempDouble > 0 + ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 + : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 + : 0), + ]), + (HEAP32[(buf + 40) >> 2] = tempI64[0]), + (HEAP32[(buf + 44) >> 2] = tempI64[1]) + HEAP32[(buf + 48) >> 2] = 4096 + HEAP32[(buf + 52) >> 2] = stat.blocks + HEAP32[(buf + 56) >> 2] = (stat.atime.getTime() / 1e3) | 0 + HEAP32[(buf + 60) >> 2] = 0 + HEAP32[(buf + 64) >> 2] = (stat.mtime.getTime() / 1e3) | 0 + HEAP32[(buf + 68) >> 2] = 0 + HEAP32[(buf + 72) >> 2] = (stat.ctime.getTime() / 1e3) | 0 + HEAP32[(buf + 76) >> 2] = 0 + ;(tempI64 = [ + stat.ino >>> 0, + ((tempDouble = stat.ino), + +Math_abs(tempDouble) >= 1 + ? tempDouble > 0 + ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 + : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 + : 0), + ]), + (HEAP32[(buf + 80) >> 2] = tempI64[0]), + (HEAP32[(buf + 84) >> 2] = tempI64[1]) + return 0 + }, + doMsync: function(addr, stream, len, flags) { + var buffer = new Uint8Array(HEAPU8.subarray(addr, addr + len)) + FS.msync(stream, buffer, 0, len, flags) + }, + doMkdir: function(path, mode) { + path = PATH.normalize(path) + if (path[path.length - 1] === '/') path = path.substr(0, path.length - 1) + FS.mkdir(path, mode, 0) + return 0 + }, + doMknod: function(path, mode, dev) { + switch (mode & 61440) { + case 32768: + case 8192: + case 24576: + case 4096: + case 49152: + break + default: + return -22 + } + FS.mknod(path, mode, dev) + return 0 + }, + doReadlink: function(path, buf, bufsize) { + if (bufsize <= 0) return -22 + var ret = FS.readlink(path) + var len = Math.min(bufsize, lengthBytesUTF8(ret)) + var endChar = HEAP8[buf + len] + stringToUTF8(ret, buf, bufsize + 1) + HEAP8[buf + len] = endChar + return len + }, + doAccess: function(path, amode) { + if (amode & ~7) { + return -22 + } + var node + var lookup = FS.lookupPath(path, { follow: true }) + node = lookup.node + var perms = '' + if (amode & 4) perms += 'r' + if (amode & 2) perms += 'w' + if (amode & 1) perms += 'x' + if (perms && FS.nodePermissions(node, perms)) { + return -13 + } + return 0 + }, + doDup: function(path, flags, suggestFD) { + var suggest = FS.getStream(suggestFD) + if (suggest) FS.close(suggest) + return FS.open(path, flags, 0, suggestFD, suggestFD).fd + }, + doReadv: function(stream, iov, iovcnt, offset) { + var ret = 0 + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAP32[(iov + i * 8) >> 2] + var len = HEAP32[(iov + (i * 8 + 4)) >> 2] + var curr = FS.read(stream, HEAP8, ptr, len, offset) + if (curr < 0) return -1 + ret += curr + if (curr < len) break + } + return ret + }, + doWritev: function(stream, iov, iovcnt, offset) { + var ret = 0 + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAP32[(iov + i * 8) >> 2] + var len = HEAP32[(iov + (i * 8 + 4)) >> 2] + var curr = FS.write(stream, HEAP8, ptr, len, offset) + if (curr < 0) return -1 + ret += curr + } + return ret + }, + varargs: 0, + get: function(varargs) { + SYSCALLS.varargs += 4 + var ret = HEAP32[(SYSCALLS.varargs - 4) >> 2] + return ret + }, + getStr: function() { + var ret = UTF8ToString(SYSCALLS.get()) + return ret + }, + getStreamFromFD: function() { + var stream = FS.getStream(SYSCALLS.get()) + if (!stream) throw new FS.ErrnoError(9) + return stream + }, + get64: function() { + var low = SYSCALLS.get(), + high = SYSCALLS.get() + return low + }, + getZero: function() { + SYSCALLS.get() + }, + } + function ___syscall140(which, varargs) { + SYSCALLS.varargs = varargs + try { + var stream = SYSCALLS.getStreamFromFD(), + offset_high = SYSCALLS.get(), + offset_low = SYSCALLS.get(), + result = SYSCALLS.get(), + whence = SYSCALLS.get() + if ( + !(offset_high == -1 && offset_low < 0) && + !(offset_high == 0 && offset_low >= 0) + ) { + return -75 + } + var offset = offset_low + FS.llseek(stream, offset, whence) + ;(tempI64 = [ + stream.position >>> 0, + ((tempDouble = stream.position), + +Math_abs(tempDouble) >= 1 + ? tempDouble > 0 + ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 + : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 + : 0), + ]), + (HEAP32[result >> 2] = tempI64[0]), + (HEAP32[(result + 4) >> 2] = tempI64[1]) + if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null + return 0 + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e) + return -e.errno + } + } + function ___syscall146(which, varargs) { + SYSCALLS.varargs = varargs + try { + var stream = SYSCALLS.getStreamFromFD(), + iov = SYSCALLS.get(), + iovcnt = SYSCALLS.get() + return SYSCALLS.doWritev(stream, iov, iovcnt) + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e) + return -e.errno + } + } + function ___syscall168(which, varargs) { + SYSCALLS.varargs = varargs + try { + var fds = SYSCALLS.get(), + nfds = SYSCALLS.get(), + timeout = SYSCALLS.get() + var nonzero = 0 + for (var i = 0; i < nfds; i++) { + var pollfd = fds + 8 * i + var fd = HEAP32[pollfd >> 2] + var events = HEAP16[(pollfd + 4) >> 1] + var mask = 32 + var stream = FS.getStream(fd) + if (stream) { + mask = SYSCALLS.DEFAULT_POLLMASK + if (stream.stream_ops.poll) { + mask = stream.stream_ops.poll(stream) + } + } + mask &= events | 8 | 16 + if (mask) nonzero++ + HEAP16[(pollfd + 6) >> 1] = mask + } + return nonzero + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e) + return -e.errno + } + } + function ___syscall195(which, varargs) { + SYSCALLS.varargs = varargs + try { + var path = SYSCALLS.getStr(), + buf = SYSCALLS.get() + return SYSCALLS.doStat(FS.stat, path, buf) + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e) + return -e.errno + } + } + function ___syscall196(which, varargs) { + SYSCALLS.varargs = varargs + try { + var path = SYSCALLS.getStr(), + buf = SYSCALLS.get() + return SYSCALLS.doStat(FS.lstat, path, buf) + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e) + return -e.errno + } + } + function ___syscall197(which, varargs) { + SYSCALLS.varargs = varargs + try { + var stream = SYSCALLS.getStreamFromFD(), + buf = SYSCALLS.get() + return SYSCALLS.doStat(FS.stat, stream.path, buf) + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e) + return -e.errno + } + } + function ___syscall221(which, varargs) { + SYSCALLS.varargs = varargs + try { + var stream = SYSCALLS.getStreamFromFD(), + cmd = SYSCALLS.get() + switch (cmd) { + case 0: { + var arg = SYSCALLS.get() + if (arg < 0) { + return -22 + } + var newStream + newStream = FS.open(stream.path, stream.flags, 0, arg) + return newStream.fd + } + case 1: + case 2: + return 0 + case 3: + return stream.flags + case 4: { + var arg = SYSCALLS.get() + stream.flags |= arg + return 0 + } + case 12: { + var arg = SYSCALLS.get() + var offset = 0 + HEAP16[(arg + offset) >> 1] = 2 + return 0 + } + case 13: + case 14: + return 0 + case 16: + case 8: + return -22 + case 9: + ___setErrNo(22) + return -1 + default: { + return -22 + } + } + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e) + return -e.errno + } + } + function ___syscall3(which, varargs) { + SYSCALLS.varargs = varargs + try { + var stream = SYSCALLS.getStreamFromFD(), + buf = SYSCALLS.get(), + count = SYSCALLS.get() + return FS.read(stream, HEAP8, buf, count) + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e) + return -e.errno + } + } + function ___syscall4(which, varargs) { + SYSCALLS.varargs = varargs + try { + var stream = SYSCALLS.getStreamFromFD(), + buf = SYSCALLS.get(), + count = SYSCALLS.get() + return FS.write(stream, HEAP8, buf, count) + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e) + return -e.errno + } + } + function ___syscall41(which, varargs) { + SYSCALLS.varargs = varargs + try { + var old = SYSCALLS.getStreamFromFD() + return FS.open(old.path, old.flags, 0).fd + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e) + return -e.errno + } + } + var ERRNO_CODES = { + EPERM: 1, + ENOENT: 2, + ESRCH: 3, + EINTR: 4, + EIO: 5, + ENXIO: 6, + E2BIG: 7, + ENOEXEC: 8, + EBADF: 9, + ECHILD: 10, + EAGAIN: 11, + EWOULDBLOCK: 11, + ENOMEM: 12, + EACCES: 13, + EFAULT: 14, + ENOTBLK: 15, + EBUSY: 16, + EEXIST: 17, + EXDEV: 18, + ENODEV: 19, + ENOTDIR: 20, + EISDIR: 21, + EINVAL: 22, + ENFILE: 23, + EMFILE: 24, + ENOTTY: 25, + ETXTBSY: 26, + EFBIG: 27, + ENOSPC: 28, + ESPIPE: 29, + EROFS: 30, + EMLINK: 31, + EPIPE: 32, + EDOM: 33, + ERANGE: 34, + ENOMSG: 42, + EIDRM: 43, + ECHRNG: 44, + EL2NSYNC: 45, + EL3HLT: 46, + EL3RST: 47, + ELNRNG: 48, + EUNATCH: 49, + ENOCSI: 50, + EL2HLT: 51, + EDEADLK: 35, + ENOLCK: 37, + EBADE: 52, + EBADR: 53, + EXFULL: 54, + ENOANO: 55, + EBADRQC: 56, + EBADSLT: 57, + EDEADLOCK: 35, + EBFONT: 59, + ENOSTR: 60, + ENODATA: 61, + ETIME: 62, + ENOSR: 63, + ENONET: 64, + ENOPKG: 65, + EREMOTE: 66, + ENOLINK: 67, + EADV: 68, + ESRMNT: 69, + ECOMM: 70, + EPROTO: 71, + EMULTIHOP: 72, + EDOTDOT: 73, + EBADMSG: 74, + ENOTUNIQ: 76, + EBADFD: 77, + EREMCHG: 78, + ELIBACC: 79, + ELIBBAD: 80, + ELIBSCN: 81, + ELIBMAX: 82, + ELIBEXEC: 83, + ENOSYS: 38, + ENOTEMPTY: 39, + ENAMETOOLONG: 36, + ELOOP: 40, + EOPNOTSUPP: 95, + EPFNOSUPPORT: 96, + ECONNRESET: 104, + ENOBUFS: 105, + EAFNOSUPPORT: 97, + EPROTOTYPE: 91, + ENOTSOCK: 88, + ENOPROTOOPT: 92, + ESHUTDOWN: 108, + ECONNREFUSED: 111, + EADDRINUSE: 98, + ECONNABORTED: 103, + ENETUNREACH: 101, + ENETDOWN: 100, + ETIMEDOUT: 110, + EHOSTDOWN: 112, + EHOSTUNREACH: 113, + EINPROGRESS: 115, + EALREADY: 114, + EDESTADDRREQ: 89, + EMSGSIZE: 90, + EPROTONOSUPPORT: 93, + ESOCKTNOSUPPORT: 94, + EADDRNOTAVAIL: 99, + ENETRESET: 102, + EISCONN: 106, + ENOTCONN: 107, + ETOOMANYREFS: 109, + EUSERS: 87, + EDQUOT: 122, + ESTALE: 116, + ENOTSUP: 95, + ENOMEDIUM: 123, + EILSEQ: 84, + EOVERFLOW: 75, + ECANCELED: 125, + ENOTRECOVERABLE: 131, + EOWNERDEAD: 130, + ESTRPIPE: 86, + } + var PIPEFS = { + BUCKET_BUFFER_SIZE: 8192, + mount: function(mount) { + return FS.createNode(null, '/', 16384 | 511, 0) + }, + createPipe: function() { + var pipe = { buckets: [] } + pipe.buckets.push({ + buffer: new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE), + offset: 0, + roffset: 0, + }) + var rName = PIPEFS.nextname() + var wName = PIPEFS.nextname() + var rNode = FS.createNode(PIPEFS.root, rName, 4096, 0) + var wNode = FS.createNode(PIPEFS.root, wName, 4096, 0) + rNode.pipe = pipe + wNode.pipe = pipe + var readableStream = FS.createStream({ + path: rName, + node: rNode, + flags: FS.modeStringToFlags('r'), + seekable: false, + stream_ops: PIPEFS.stream_ops, + }) + rNode.stream = readableStream + var writableStream = FS.createStream({ + path: wName, + node: wNode, + flags: FS.modeStringToFlags('w'), + seekable: false, + stream_ops: PIPEFS.stream_ops, + }) + wNode.stream = writableStream + return { readable_fd: readableStream.fd, writable_fd: writableStream.fd } + }, + stream_ops: { + poll: function(stream) { + var pipe = stream.node.pipe + if ((stream.flags & 2097155) === 1) { + return 256 | 4 + } else { + if (pipe.buckets.length > 0) { + for (var i = 0; i < pipe.buckets.length; i++) { + var bucket = pipe.buckets[i] + if (bucket.offset - bucket.roffset > 0) { + return 64 | 1 + } + } + } + } + return 0 + }, + ioctl: function(stream, request, varargs) { + return ERRNO_CODES.EINVAL + }, + read: function(stream, buffer, offset, length, position) { + var pipe = stream.node.pipe + var currentLength = 0 + for (var i = 0; i < pipe.buckets.length; i++) { + var bucket = pipe.buckets[i] + currentLength += bucket.offset - bucket.roffset + } + assert(buffer instanceof ArrayBuffer || ArrayBuffer.isView(buffer)) + var data = buffer.subarray(offset, offset + length) + if (length <= 0) { + return 0 + } + if (currentLength == 0) { + throw new FS.ErrnoError(ERRNO_CODES.EAGAIN) + } + var toRead = Math.min(currentLength, length) + var totalRead = toRead + var toRemove = 0 + for (var i = 0; i < pipe.buckets.length; i++) { + var currBucket = pipe.buckets[i] + var bucketSize = currBucket.offset - currBucket.roffset + if (toRead <= bucketSize) { + var tmpSlice = currBucket.buffer.subarray( + currBucket.roffset, + currBucket.offset + ) + if (toRead < bucketSize) { + tmpSlice = tmpSlice.subarray(0, toRead) + currBucket.roffset += toRead + } else { + toRemove++ + } + data.set(tmpSlice) + break + } else { + var tmpSlice = currBucket.buffer.subarray( + currBucket.roffset, + currBucket.offset + ) + data.set(tmpSlice) + data = data.subarray(tmpSlice.byteLength) + toRead -= tmpSlice.byteLength + toRemove++ + } + } + if (toRemove && toRemove == pipe.buckets.length) { + toRemove-- + pipe.buckets[toRemove].offset = 0 + pipe.buckets[toRemove].roffset = 0 + } + pipe.buckets.splice(0, toRemove) + return totalRead + }, + write: function(stream, buffer, offset, length, position) { + var pipe = stream.node.pipe + assert(buffer instanceof ArrayBuffer || ArrayBuffer.isView(buffer)) + var data = buffer.subarray(offset, offset + length) + var dataLen = data.byteLength + if (dataLen <= 0) { + return 0 + } + var currBucket = null + if (pipe.buckets.length == 0) { + currBucket = { + buffer: new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE), + offset: 0, + roffset: 0, + } + pipe.buckets.push(currBucket) + } else { + currBucket = pipe.buckets[pipe.buckets.length - 1] + } + assert(currBucket.offset <= PIPEFS.BUCKET_BUFFER_SIZE) + var freeBytesInCurrBuffer = PIPEFS.BUCKET_BUFFER_SIZE - currBucket.offset + if (freeBytesInCurrBuffer >= dataLen) { + currBucket.buffer.set(data, currBucket.offset) + currBucket.offset += dataLen + return dataLen + } else if (freeBytesInCurrBuffer > 0) { + currBucket.buffer.set( + data.subarray(0, freeBytesInCurrBuffer), + currBucket.offset + ) + currBucket.offset += freeBytesInCurrBuffer + data = data.subarray(freeBytesInCurrBuffer, data.byteLength) + } + var numBuckets = (data.byteLength / PIPEFS.BUCKET_BUFFER_SIZE) | 0 + var remElements = data.byteLength % PIPEFS.BUCKET_BUFFER_SIZE + for (var i = 0; i < numBuckets; i++) { + var newBucket = { + buffer: new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE), + offset: PIPEFS.BUCKET_BUFFER_SIZE, + roffset: 0, + } + pipe.buckets.push(newBucket) + newBucket.buffer.set(data.subarray(0, PIPEFS.BUCKET_BUFFER_SIZE)) + data = data.subarray(PIPEFS.BUCKET_BUFFER_SIZE, data.byteLength) + } + if (remElements > 0) { + var newBucket = { + buffer: new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE), + offset: data.byteLength, + roffset: 0, + } + pipe.buckets.push(newBucket) + newBucket.buffer.set(data) + } + return dataLen + }, + close: function(stream) { + var pipe = stream.node.pipe + pipe.buckets = null + }, + }, + nextname: function() { + if (!PIPEFS.nextname.current) { + PIPEFS.nextname.current = 0 + } + return 'pipe[' + PIPEFS.nextname.current++ + ']' + }, + } + function ___syscall42(which, varargs) { + SYSCALLS.varargs = varargs + try { + var fdPtr = SYSCALLS.get() + if (fdPtr == 0) { + throw new FS.ErrnoError(14) + } + var res = PIPEFS.createPipe() + HEAP32[fdPtr >> 2] = res.readable_fd + HEAP32[(fdPtr + 4) >> 2] = res.writable_fd + return 0 + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e) + return -e.errno + } + } + function ___syscall5(which, varargs) { + SYSCALLS.varargs = varargs + try { + var pathname = SYSCALLS.getStr(), + flags = SYSCALLS.get(), + mode = SYSCALLS.get() + var stream = FS.open(pathname, flags, mode) + return stream.fd + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e) + return -e.errno + } + } + function ___syscall6(which, varargs) { + SYSCALLS.varargs = varargs + try { + var stream = SYSCALLS.getStreamFromFD() + FS.close(stream) + return 0 + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e) + return -e.errno + } + } + function _abort() { + Module['abort']() + } + function _emscripten_get_heap_size() { + return HEAP8.length + } + function abortOnCannotGrowMemory(requestedSize) { + abort('OOM') + } + function emscripten_realloc_buffer(size) { + var PAGE_MULTIPLE = 65536 + size = alignUp(size, PAGE_MULTIPLE) + var oldSize = buffer.byteLength + try { + var result = wasmMemory.grow((size - oldSize) / 65536) + if (result !== (-1 | 0)) { + buffer = wasmMemory.buffer + return true + } else { + return false + } + } catch (e) { + return false + } + } + function _emscripten_resize_heap(requestedSize) { + var oldSize = _emscripten_get_heap_size() + var PAGE_MULTIPLE = 65536 + var LIMIT = 2147483648 - PAGE_MULTIPLE + if (requestedSize > LIMIT) { + return false + } + var MIN_TOTAL_MEMORY = 16777216 + var newSize = Math.max(oldSize, MIN_TOTAL_MEMORY) + while (newSize < requestedSize) { + if (newSize <= 536870912) { + newSize = alignUp(2 * newSize, PAGE_MULTIPLE) + } else { + newSize = Math.min( + alignUp((3 * newSize + 2147483648) / 4, PAGE_MULTIPLE), + LIMIT + ) + } + } + if (!emscripten_realloc_buffer(newSize)) { + return false + } + updateGlobalBufferViews() + return true + } + function _exit(status) { + exit(status) + } + var ___tm_current = 277408 + var ___tm_timezone = (stringToUTF8('GMT', 277456, 4), 277456) + function _tzset() { + if (_tzset.called) return + _tzset.called = true + HEAP32[__get_timezone() >> 2] = new Date().getTimezoneOffset() * 60 + var winter = new Date(2e3, 0, 1) + var summer = new Date(2e3, 6, 1) + HEAP32[__get_daylight() >> 2] = Number( + winter.getTimezoneOffset() != summer.getTimezoneOffset() + ) + function extractZone(date) { + var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/) + return match ? match[1] : 'GMT' + } + var winterName = extractZone(winter) + var summerName = extractZone(summer) + var winterNamePtr = allocate(intArrayFromString(winterName), 'i8', ALLOC_NORMAL) + var summerNamePtr = allocate(intArrayFromString(summerName), 'i8', ALLOC_NORMAL) + if (summer.getTimezoneOffset() < winter.getTimezoneOffset()) { + HEAP32[__get_tzname() >> 2] = winterNamePtr + HEAP32[(__get_tzname() + 4) >> 2] = summerNamePtr + } else { + HEAP32[__get_tzname() >> 2] = summerNamePtr + HEAP32[(__get_tzname() + 4) >> 2] = winterNamePtr + } + } + function _localtime_r(time, tmPtr) { + _tzset() + var date = new Date(HEAP32[time >> 2] * 1e3) + HEAP32[tmPtr >> 2] = date.getSeconds() + HEAP32[(tmPtr + 4) >> 2] = date.getMinutes() + HEAP32[(tmPtr + 8) >> 2] = date.getHours() + HEAP32[(tmPtr + 12) >> 2] = date.getDate() + HEAP32[(tmPtr + 16) >> 2] = date.getMonth() + HEAP32[(tmPtr + 20) >> 2] = date.getFullYear() - 1900 + HEAP32[(tmPtr + 24) >> 2] = date.getDay() + var start = new Date(date.getFullYear(), 0, 1) + var yday = ((date.getTime() - start.getTime()) / (1e3 * 60 * 60 * 24)) | 0 + HEAP32[(tmPtr + 28) >> 2] = yday + HEAP32[(tmPtr + 36) >> 2] = -(date.getTimezoneOffset() * 60) + var summerOffset = new Date(2e3, 6, 1).getTimezoneOffset() + var winterOffset = start.getTimezoneOffset() + var dst = + (summerOffset != winterOffset && + date.getTimezoneOffset() == Math.min(winterOffset, summerOffset)) | 0 + HEAP32[(tmPtr + 32) >> 2] = dst + var zonePtr = HEAP32[(__get_tzname() + (dst ? 4 : 0)) >> 2] + HEAP32[(tmPtr + 40) >> 2] = zonePtr + return tmPtr + } + function _localtime(time) { + return _localtime_r(time, ___tm_current) + } + function _emscripten_memcpy_big(dest, src, num) { + HEAPU8.set(HEAPU8.subarray(src, src + num), dest) + } + function _mktime(tmPtr) { + _tzset() + var date = new Date( + HEAP32[(tmPtr + 20) >> 2] + 1900, + HEAP32[(tmPtr + 16) >> 2], + HEAP32[(tmPtr + 12) >> 2], + HEAP32[(tmPtr + 8) >> 2], + HEAP32[(tmPtr + 4) >> 2], + HEAP32[tmPtr >> 2], + 0 + ) + var dst = HEAP32[(tmPtr + 32) >> 2] + var guessedOffset = date.getTimezoneOffset() + var start = new Date(date.getFullYear(), 0, 1) + var summerOffset = new Date(2e3, 6, 1).getTimezoneOffset() + var winterOffset = start.getTimezoneOffset() + var dstOffset = Math.min(winterOffset, summerOffset) + if (dst < 0) { + HEAP32[(tmPtr + 32) >> 2] = Number( + summerOffset != winterOffset && dstOffset == guessedOffset + ) + } else if (dst > 0 != (dstOffset == guessedOffset)) { + var nonDstOffset = Math.max(winterOffset, summerOffset) + var trueOffset = dst > 0 ? dstOffset : nonDstOffset + date.setTime(date.getTime() + (trueOffset - guessedOffset) * 6e4) + } + HEAP32[(tmPtr + 24) >> 2] = date.getDay() + var yday = ((date.getTime() - start.getTime()) / (1e3 * 60 * 60 * 24)) | 0 + HEAP32[(tmPtr + 28) >> 2] = yday + return (date.getTime() / 1e3) | 0 + } + function _posix_spawn_file_actions_addclose() { + err('missing function: posix_spawn_file_actions_addclose') + abort(-1) + } + function _posix_spawn_file_actions_adddup2() { + err('missing function: posix_spawn_file_actions_adddup2') + abort(-1) + } + function _posix_spawn_file_actions_destroy() { + err('missing function: posix_spawn_file_actions_destroy') + abort(-1) + } + function _posix_spawn_file_actions_init() { + err('missing function: posix_spawn_file_actions_init') + abort(-1) + } + function _fork() { + ___setErrNo(11) + return -1 + } + function _posix_spawnp() { + return _fork.apply(null, arguments) + } + function _timegm(tmPtr) { + _tzset() + var time = Date.UTC( + HEAP32[(tmPtr + 20) >> 2] + 1900, + HEAP32[(tmPtr + 16) >> 2], + HEAP32[(tmPtr + 12) >> 2], + HEAP32[(tmPtr + 8) >> 2], + HEAP32[(tmPtr + 4) >> 2], + HEAP32[tmPtr >> 2], + 0 + ) + var date = new Date(time) + HEAP32[(tmPtr + 24) >> 2] = date.getUTCDay() + var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0) + var yday = ((date.getTime() - start) / (1e3 * 60 * 60 * 24)) | 0 + HEAP32[(tmPtr + 28) >> 2] = yday + return (date.getTime() / 1e3) | 0 + } + function _wait(stat_loc) { + ___setErrNo(10) + return -1 + } + function _waitpid() { + return _wait.apply(null, arguments) + } + FS.staticInit() + if (ENVIRONMENT_IS_NODE) { + var fs = require('fs') + var NODEJS_PATH = require('path') + NODEFS.staticInit() + } + function intArrayFromString(stringy, dontAddNull, length) { + var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1 + var u8array = new Array(len) + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length) + if (dontAddNull) u8array.length = numBytesWritten + return u8array + } + var asmGlobalArg = {} + var asmLibraryArg = { + b: abort, + q: setTempRet0, + G: ___buildEnvironment, + l: ___setErrNo, + s: ___syscall140, + i: ___syscall146, + p: ___syscall168, + o: ___syscall195, + n: ___syscall196, + m: ___syscall197, + c: ___syscall221, + F: ___syscall3, + E: ___syscall4, + D: ___syscall41, + C: ___syscall42, + B: ___syscall5, + h: ___syscall6, + g: _abort, + A: _emscripten_get_heap_size, + z: _emscripten_memcpy_big, + y: _emscripten_resize_heap, + f: _exit, + x: _localtime, + d: _mktime, + e: _posix_spawn_file_actions_addclose, + k: _posix_spawn_file_actions_adddup2, + j: _posix_spawn_file_actions_destroy, + w: _posix_spawn_file_actions_init, + v: _posix_spawnp, + u: _timegm, + t: _waitpid, + r: abortOnCannotGrowMemory, + a: DYNAMICTOP_PTR, + } + var asm = Module['asm'](asmGlobalArg, asmLibraryArg, buffer) + Module['asm'] = asm + var ___emscripten_environ_constructor = (Module[ + '___emscripten_environ_constructor' + ] = function() { + return Module['asm']['H'].apply(null, arguments) + }) + var ___errno_location = (Module['___errno_location'] = function() { + return Module['asm']['I'].apply(null, arguments) + }) + var __get_daylight = (Module['__get_daylight'] = function() { + return Module['asm']['J'].apply(null, arguments) + }) + var __get_timezone = (Module['__get_timezone'] = function() { + return Module['asm']['K'].apply(null, arguments) + }) + var __get_tzname = (Module['__get_tzname'] = function() { + return Module['asm']['L'].apply(null, arguments) + }) + var _archive_close = (Module['_archive_close'] = function() { + return Module['asm']['M'].apply(null, arguments) + }) + var _archive_entry_filetype = (Module['_archive_entry_filetype'] = function() { + return Module['asm']['N'].apply(null, arguments) + }) + var _archive_entry_is_encrypted = (Module[ + '_archive_entry_is_encrypted' + ] = function() { + return Module['asm']['O'].apply(null, arguments) + }) + var _archive_entry_pathname = (Module['_archive_entry_pathname'] = function() { + return Module['asm']['P'].apply(null, arguments) + }) + var _archive_entry_pathname_utf8 = (Module[ + '_archive_entry_pathname_utf8' + ] = function() { + return Module['asm']['Q'].apply(null, arguments) + }) + var _archive_entry_size = (Module['_archive_entry_size'] = function() { + return Module['asm']['R'].apply(null, arguments) + }) + var _archive_error_string = (Module['_archive_error_string'] = function() { + return Module['asm']['S'].apply(null, arguments) + }) + var _archive_open = (Module['_archive_open'] = function() { + return Module['asm']['T'].apply(null, arguments) + }) + var _archive_read_add_passphrase = (Module[ + '_archive_read_add_passphrase' + ] = function() { + return Module['asm']['U'].apply(null, arguments) + }) + var _archive_read_data_skip = (Module['_archive_read_data_skip'] = function() { + return Module['asm']['V'].apply(null, arguments) + }) + var _archive_read_has_encrypted_entries = (Module[ + '_archive_read_has_encrypted_entries' + ] = function() { + return Module['asm']['W'].apply(null, arguments) + }) + var _free = (Module['_free'] = function() { + return Module['asm']['X'].apply(null, arguments) + }) + var _get_filedata = (Module['_get_filedata'] = function() { + return Module['asm']['Y'].apply(null, arguments) + }) + var _get_next_entry = (Module['_get_next_entry'] = function() { + return Module['asm']['Z'].apply(null, arguments) + }) + var _get_version = (Module['_get_version'] = function() { + return Module['asm']['_'].apply(null, arguments) + }) + var _malloc = (Module['_malloc'] = function() { + return Module['asm']['$'].apply(null, arguments) + }) + var stackAlloc = (Module['stackAlloc'] = function() { + return Module['asm']['ca'].apply(null, arguments) + }) + var stackRestore = (Module['stackRestore'] = function() { + return Module['asm']['da'].apply(null, arguments) + }) + var stackSave = (Module['stackSave'] = function() { + return Module['asm']['ea'].apply(null, arguments) + }) + var dynCall_v = (Module['dynCall_v'] = function() { + return Module['asm']['aa'].apply(null, arguments) + }) + var dynCall_vi = (Module['dynCall_vi'] = function() { + return Module['asm']['ba'].apply(null, arguments) + }) + Module['asm'] = asm + Module['intArrayFromString'] = intArrayFromString + Module['cwrap'] = cwrap + Module['allocate'] = allocate + Module['then'] = function(func) { + if (Module['calledRun']) { + func(Module) + } else { + var old = Module['onRuntimeInitialized'] + Module['onRuntimeInitialized'] = function() { + if (old) old() + func(Module) + } + } + return Module + } + function ExitStatus(status) { + this.name = 'ExitStatus' + this.message = 'Program terminated with exit(' + status + ')' + this.status = status + } + ExitStatus.prototype = new Error() + ExitStatus.prototype.constructor = ExitStatus + dependenciesFulfilled = function runCaller() { + if (!Module['calledRun']) run() + if (!Module['calledRun']) dependenciesFulfilled = runCaller + } + function run(args) { + args = args || Module['arguments'] + if (runDependencies > 0) { + return + } + preRun() + if (runDependencies > 0) return + if (Module['calledRun']) return + function doRun() { + if (Module['calledRun']) return + Module['calledRun'] = true + if (ABORT) return + ensureInitRuntime() + preMain() + if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized']() + postRun() + } + if (Module['setStatus']) { + Module['setStatus']('Running...') + setTimeout(function() { + setTimeout(function() { + Module['setStatus']('') + }, 1) + doRun() + }, 1) + } else { + doRun() + } + } + Module['run'] = run + function exit(status, implicit) { + if (implicit && Module['noExitRuntime'] && status === 0) { + return + } + if (Module['noExitRuntime']) { + } else { + ABORT = true + EXITSTATUS = status + exitRuntime() + if (Module['onExit']) Module['onExit'](status) + } + Module['quit'](status, new ExitStatus(status)) + } + function abort(what) { + if (Module['onAbort']) { + Module['onAbort'](what) + } + if (what !== undefined) { + out(what) + err(what) + what = JSON.stringify(what) + } else { + what = '' + } + ABORT = true + EXITSTATUS = 1 + throw 'abort(' + what + '). Build with -s ASSERTIONS=1 for more info.' + } + Module['abort'] = abort + if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']] + while (Module['preInit'].length > 0) { + Module['preInit'].pop()() + } + } + Module['noExitRuntime'] = true + run() + return libarchive + } +})() +export default libarchive diff --git a/static/webworkers/wasm-gen/libarchive.wasm b/static/webworkers/wasm-gen/libarchive.wasm index 8f753fb5f..aa189c5dc 100644 Binary files a/static/webworkers/wasm-gen/libarchive.wasm and b/static/webworkers/wasm-gen/libarchive.wasm differ diff --git a/static/webworkers/worker-bundle.js b/static/webworkers/worker-bundle.js index d8b4ee397..be9885c5a 100644 --- a/static/webworkers/worker-bundle.js +++ b/static/webworkers/worker-bundle.js @@ -1,10 +1,3960 @@ -/* - This webworker bundle is part of the libarchive.js module, - so we need to make sure that it is available in the public (static) directory, - since it will not get bundled if you're using a bundler tool such as webpack - (it's all bundled up already) and specify the correct path in Archive.init() method. - - https://github.com/nika-begiashvili/libarchivejs#how-to-use -*/ - -!function(){"use strict";const e={32768:"FILE",16384:"DIR",40960:"SYMBOLIC_LINK",49152:"SOCKET",8192:"CHARACTER_DEVICE",24576:"BLOCK_DEVICE",4096:"NAMED_PIPE"};class t{constructor(e){this._wasmModule=e,this._runCode=e.runCode,this._file=null}open(e){null!==this._file&&(console.warn("Closing previous file"),this.close());const{promise:t,resolve:r,reject:s}=this._promiseHandles();this._file=e;const i=new FileReader;return i.onload=(()=>this._loadFile(i.result,r,s)),i.readAsArrayBuffer(e),t}close(){this._runCode.closeArchive(this._archive),this._wasmModule._free(this._filePtr),this._file=null,this._filePtr=null,this._archive=null}*entries(t=!1,r=null){let s;for(this._archive=this._runCode.openArchive(this._filePtr,this._fileLength);0!==(s=this._runCode.getNextEntry(this._archive));){const i={size:this._runCode.getEntrySize(s),path:this._runCode.getEntryName(s),type:e[this._runCode.getEntryType(s)],ref:s};if("FILE"===i.type){let e=i.path.split("/");i.fileName=e[e.length-1]}if(t&&r!==i.path)this._runCode.skipEntry(this._archive);else{const e=this._runCode.getFileData(this._archive,i.size);if(e<0)throw new Error(this._runCode.getError(this._archive));i.fileData=this._wasmModule.HEAP8.slice(e,e+i.size),this._wasmModule._free(e)}yield i}}_loadFile(e,t,r){try{const s=new Uint8Array(e);this._fileLength=s.length,this._filePtr=this._runCode.malloc(this._fileLength),this._wasmModule.HEAP8.set(s,this._filePtr),t()}catch(e){r(e)}}_promiseHandles(){let e=null,t=null;return{promise:new Promise((r,s)=>{e=r,t=s}),resolve:e,reject:t}}}self.Module=new class{constructor(){this.preRun=[],this.postRun=[],this.totalDependencies=0}onRuntimeInitialized(){this.runCode={getVersion:Module.cwrap("get_version","string",[]),openArchive:Module.cwrap("archive_open","number",["number","number"]),getNextEntry:Module.cwrap("get_next_entry","number",["number"]),getFileData:Module.cwrap("get_filedata","number",["number","number"]),skipEntry:Module.cwrap("archive_read_data_skip","number",["number"]),closeArchive:Module.cwrap("archive_close",null,["number"]),getEntrySize:Module.cwrap("archive_entry_size","number",["number"]),getEntryName:Module.cwrap("archive_entry_pathname","string",["number"]),getEntryType:Module.cwrap("archive_entry_filetype","number",["number"]),getError:Module.cwrap("archive_error_string","string",["number"]),malloc:Module.cwrap("malloc","number",["number"]),free:Module.cwrap("free",null,["number"])},this.ready&&this.ready()}print(...e){console.log(e)}printErr(...e){console.error(e)}monitorRunDependencies(e){}locateFile(e,t=""){return`wasm-gen/${t}${e}`}},importScripts("wasm-gen/libarchive.js");let r=null,s=!1;self.Module.ready=(()=>{r=new t(self.Module),s=!1,self.postMessage({type:"READY"})}),self.onmessage=(async({data:e})=>{if(s)return void self.postMessage({type:"BUSY"});let t=!1;s=!0;try{switch(e.type){case"HELLO":break;case"OPEN":await r.open(e.file),self.postMessage({type:"OPENED"});break;case"LIST_FILES":t=!0;case"EXTRACT_FILES":for(const e of r.entries(t))self.postMessage({type:"ENTRY",entry:e});self.postMessage({type:"END"});break;case"EXTRACT_SINGLE_FILE":for(const t of r.entries(!0,e.target))t.fileData&&self.postMessage({type:"FILE",entry:t});break;default:throw new Error("Invalid Command")}}catch(e){self.postMessage({type:"ERROR",error:{message:e.message,name:e.name,stack:e.stack}})}finally{s=!1}})}(); +!(function() { + 'use strict' + const e = { + 32768: 'FILE', + 16384: 'DIR', + 40960: 'SYMBOLIC_LINK', + 49152: 'SOCKET', + 8192: 'CHARACTER_DEVICE', + 24576: 'BLOCK_DEVICE', + 4096: 'NAMED_PIPE', + } + class r { + constructor(e) { + ;(this._wasmModule = e), + (this._runCode = e.runCode), + (this._file = null), + (this._passphrase = null) + } + open(e) { + null !== this._file && (console.warn('Closing previous file'), this.close()) + const { promise: r, resolve: t, reject: n } = this._promiseHandles() + this._file = e + const o = new FileReader() + return (o.onload = () => this._loadFile(o.result, t, n)), o.readAsArrayBuffer(e), r + } + close() { + this._runCode.closeArchive(this._archive), + this._wasmModule._free(this._filePtr), + (this._file = null), + (this._filePtr = null), + (this._archive = null) + } + hasEncryptedData() { + ;(this._archive = this._runCode.openArchive( + this._filePtr, + this._fileLength, + this._passphrase + )), + this._runCode.getNextEntry(this._archive) + const e = this._runCode.hasEncryptedEntries(this._archive) + return 0 !== e && (e > 0 || null) + } + setPassphrase(e) { + this._passphrase = e + } + *entries(r = !1, t = null) { + let n + for ( + this._archive = this._runCode.openArchive( + this._filePtr, + this._fileLength, + this._passphrase + ); + 0 !== (n = this._runCode.getNextEntry(this._archive)); + + ) { + const o = { + size: this._runCode.getEntrySize(n), + path: this._runCode.getEntryName(n), + type: e[this._runCode.getEntryType(n)], + ref: n, + } + if ('FILE' === o.type) { + let e = o.path.split('/') + o.fileName = e[e.length - 1] + } + if (r && t !== o.path) this._runCode.skipEntry(this._archive) + else { + const e = this._runCode.getFileData(this._archive, o.size) + if (e < 0) throw new Error(this._runCode.getError(this._archive)) + ;(o.fileData = this._wasmModule.HEAP8.slice(e, e + o.size)), + this._wasmModule._free(e) + } + yield o + } + } + _loadFile(e, r, t) { + try { + const n = new Uint8Array(e) + ;(this._fileLength = n.length), + (this._filePtr = this._runCode.malloc(this._fileLength)), + this._wasmModule.HEAP8.set(n, this._filePtr), + r() + } catch (e) { + t(e) + } + } + _promiseHandles() { + let e = null, + r = null + return { + promise: new Promise((t, n) => { + ;(e = t), (r = n) + }), + resolve: e, + reject: r, + } + } + } + var t, + n = + ((t = + 'undefined' != typeof document && document.currentScript + ? document.currentScript.src + : void 0), + function(e) { + var r, + n = void 0 !== (e = e || {}) ? e : {}, + o = {} + for (r in n) n.hasOwnProperty(r) && (o[r] = n[r]) + ;(n.arguments = []), + (n.thisProgram = './this.program'), + (n.quit = function(e, r) { + throw r + }), + (n.preRun = []), + (n.postRun = []) + var i, + a, + s = !1, + u = !1 + ;(s = 'object' == typeof window), + (u = 'function' == typeof importScripts), + (i = 'object' == typeof process && 'function' == typeof require && !s && !u), + (a = !s && !i && !u) + var c, + f, + l = '' + i + ? ((l = __dirname + '/'), + (n.read = function(e, r) { + var t + return ( + c || (c = require('fs')), + f || (f = require('path')), + (e = f.normalize(e)), + (t = c.readFileSync(e)), + r ? t : t.toString() + ) + }), + (n.readBinary = function(e) { + var r = n.read(e, !0) + return r.buffer || (r = new Uint8Array(r)), E(r.buffer), r + }), + process.argv.length > 1 && + (n.thisProgram = process.argv[1].replace(/\\/g, '/')), + (n.arguments = process.argv.slice(2)), + process.on('uncaughtException', function(e) { + if (!(e instanceof qe)) throw e + }), + process.on('unhandledRejection', Ze), + (n.quit = function(e) { + process.exit(e) + }), + (n.inspect = function() { + return '[Emscripten Module object]' + })) + : a + ? ('undefined' != typeof read && + (n.read = function(e) { + return read(e) + }), + (n.readBinary = function(e) { + var r + return 'function' == typeof readbuffer + ? new Uint8Array(readbuffer(e)) + : (E('object' == typeof (r = read(e, 'binary'))), r) + }), + 'undefined' != typeof scriptArgs + ? (n.arguments = scriptArgs) + : void 0 !== arguments && (n.arguments = arguments), + 'function' == typeof quit && + (n.quit = function(e) { + quit(e) + })) + : (s || u) && + (u + ? (l = self.location.href) + : document.currentScript && (l = document.currentScript.src), + t && (l = t), + (l = 0 !== l.indexOf('blob:') ? l.substr(0, l.lastIndexOf('/') + 1) : ''), + (n.read = function(e) { + var r = new XMLHttpRequest() + return r.open('GET', e, !1), r.send(null), r.responseText + }), + u && + (n.readBinary = function(e) { + var r = new XMLHttpRequest() + return ( + r.open('GET', e, !1), + (r.responseType = 'arraybuffer'), + r.send(null), + new Uint8Array(r.response) + ) + }), + (n.readAsync = function(e, r, t) { + var n = new XMLHttpRequest() + n.open('GET', e, !0), + (n.responseType = 'arraybuffer'), + (n.onload = function() { + 200 == n.status || (0 == n.status && n.response) ? r(n.response) : t() + }), + (n.onerror = t), + n.send(null) + }), + (n.setWindowTitle = function(e) { + document.title = e + })) + var d = + n.print || + ('undefined' != typeof console + ? console.log.bind(console) + : 'undefined' != typeof print + ? print + : null), + p = + n.printErr || + ('undefined' != typeof printErr + ? printErr + : ('undefined' != typeof console && console.warn.bind(console)) || d) + for (r in o) o.hasOwnProperty(r) && (n[r] = o[r]) + function m(e) { + var r = M[q >> 2], + t = (r + e + 15) & -16 + if (t <= Ae()) M[q >> 2] = t + else if (!Re(t)) return 0 + return r + } + function h(e) { + switch (e) { + case 'i1': + case 'i8': + return 1 + case 'i16': + return 2 + case 'i32': + return 4 + case 'i64': + return 8 + case 'float': + return 4 + case 'double': + return 8 + default: + if ('*' === e[e.length - 1]) return 4 + if ('i' === e[0]) { + var r = parseInt(e.substr(1)) + return ( + E(r % 8 == 0, 'getNativeTypeSize invalid bits ' + r + ', type ' + e), + r / 8 + ) + } + return 0 + } + } + o = void 0 + var v, + w = { + 'f64-rem': function(e, r) { + return e % r + }, + debugger: function() {}, + } + 'object' != typeof WebAssembly && p('no native wasm support detected') + var y = !1 + function E(e, r) { + e || Ze('Assertion failed: ' + r) + } + function g(e) { + var r = n['_' + e] + return ( + E(r, 'Cannot call unknown function ' + e + ', make sure it is exported'), r + ) + } + function _(e, r, t, n, o) { + var i = { + string: function(e) { + var r = 0 + if (null != e && 0 !== e) { + var t = 1 + (e.length << 2) + C(e, (r = je(t)), t) + } + return r + }, + array: function(e) { + var r, + t, + n = je(e.length) + return (r = e), (t = n), R.set(r, t), n + }, + }, + a = g(e), + s = [], + u = 0 + if (n) + for (var c = 0; c < n.length; c++) { + var f = i[t[c]] + f ? (0 === u && (u = We()), (s[c] = f(n[c]))) : (s[c] = n[c]) + } + var l = a.apply(null, s) + return ( + (l = (function(e) { + return 'string' === r ? I(e) : 'boolean' === r ? Boolean(e) : e + })(l)), + 0 !== u && He(u), + l + ) + } + function b(e, r, t, n) { + switch (('*' === (t = t || 'i8').charAt(t.length - 1) && (t = 'i32'), t)) { + case 'i1': + case 'i8': + R[e >> 0] = r + break + case 'i16': + P[e >> 1] = r + break + case 'i32': + M[e >> 2] = r + break + case 'i64': + ;(tempI64 = [ + r >>> 0, + ((tempDouble = r), + +J(tempDouble) >= 1 + ? tempDouble > 0 + ? (0 | re(+ee(tempDouble / 4294967296), 4294967295)) >>> 0 + : ~~+Q((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 + : 0), + ]), + (M[e >> 2] = tempI64[0]), + (M[(e + 4) >> 2] = tempI64[1]) + break + case 'float': + B[e >> 2] = r + break + case 'double': + N[e >> 3] = r + break + default: + Ze('invalid type for setValue: ' + t) + } + } + var k = 0, + D = 3 + function S(e, r, t, n) { + var o, i + 'number' == typeof e ? ((o = !0), (i = e)) : ((o = !1), (i = e.length)) + var a, + s = 'string' == typeof r ? r : null + if (((a = t == D ? n : [Ue, je, m][t](Math.max(i, s ? 1 : r.length))), o)) { + var u + for (n = a, E(0 == (3 & a)), u = a + (-4 & i); n < u; n += 4) M[n >> 2] = 0 + for (u = a + i; n < u; ) R[n++ >> 0] = 0 + return a + } + if ('i8' === s) + return e.subarray || e.slice ? T.set(e, a) : T.set(new Uint8Array(e), a), a + for (var c, f, l, d = 0; d < i; ) { + var p = e[d] + 0 !== (c = s || r[d]) + ? ('i64' == c && (c = 'i32'), + b(a + d, p, c), + l !== c && ((f = h(c)), (l = c)), + (d += f)) + : d++ + } + return a + } + function F(e) { + return $ ? Ue(e) : m(e) + } + var A, + R, + T, + P, + M, + B, + N, + O = 'undefined' != typeof TextDecoder ? new TextDecoder('utf8') : void 0 + function x(e, r, t) { + for (var n = r + t, o = r; e[o] && !(o >= n); ) ++o + if (o - r > 16 && e.subarray && O) return O.decode(e.subarray(r, o)) + for (var i = ''; r < o; ) { + var a = e[r++] + if (128 & a) { + var s = 63 & e[r++] + if (192 != (224 & a)) { + var u = 63 & e[r++] + if ( + (a = + 224 == (240 & a) + ? ((15 & a) << 12) | (s << 6) | u + : ((7 & a) << 18) | (s << 12) | (u << 6) | (63 & e[r++])) < 65536 + ) + i += String.fromCharCode(a) + else { + var c = a - 65536 + i += String.fromCharCode(55296 | (c >> 10), 56320 | (1023 & c)) + } + } else i += String.fromCharCode(((31 & a) << 6) | s) + } else i += String.fromCharCode(a) + } + return i + } + function I(e, r) { + return e ? x(T, e, r) : '' + } + function z(e, r, t, n) { + if (!(n > 0)) return 0 + for (var o = t, i = t + n - 1, a = 0; a < e.length; ++a) { + var s = e.charCodeAt(a) + if ( + (s >= 55296 && + s <= 57343 && + (s = (65536 + ((1023 & s) << 10)) | (1023 & e.charCodeAt(++a))), + s <= 127) + ) { + if (t >= i) break + r[t++] = s + } else if (s <= 2047) { + if (t + 1 >= i) break + ;(r[t++] = 192 | (s >> 6)), (r[t++] = 128 | (63 & s)) + } else if (s <= 65535) { + if (t + 2 >= i) break + ;(r[t++] = 224 | (s >> 12)), + (r[t++] = 128 | ((s >> 6) & 63)), + (r[t++] = 128 | (63 & s)) + } else { + if (t + 3 >= i) break + ;(r[t++] = 240 | (s >> 18)), + (r[t++] = 128 | ((s >> 12) & 63)), + (r[t++] = 128 | ((s >> 6) & 63)), + (r[t++] = 128 | (63 & s)) + } + } + return (r[t] = 0), t - o + } + function C(e, r, t) { + return z(e, T, r, t) + } + function L(e) { + for (var r = 0, t = 0; t < e.length; ++t) { + var n = e.charCodeAt(t) + n >= 55296 && + n <= 57343 && + (n = (65536 + ((1023 & n) << 10)) | (1023 & e.charCodeAt(++t))), + n <= 127 ? ++r : (r += n <= 2047 ? 2 : n <= 65535 ? 3 : 4) + } + return r + } + function U(e, r, t) { + for (var n = 0; n < e.length; ++n) R[r++ >> 0] = e.charCodeAt(n) + t || (R[r >> 0] = 0) + } + function j() { + var e = (function() { + var e = new Error() + if (!e.stack) { + try { + throw new Error(0) + } catch (r) { + e = r + } + if (!e.stack) return '(no stack trace available)' + } + return e.stack.toString() + })() + return ( + n.extraStackTrace && (e += '\n' + n.extraStackTrace()), + e.replace(/__Z[\w\d_]+/g, function(e) { + var r = e + return e === r ? e : r + ' [' + e + ']' + }) + ) + } + function H(e, r) { + return e % r > 0 && (e += r - (e % r)), e + } + function W() { + ;(n.HEAP8 = R = new Int8Array(A)), + (n.HEAP16 = P = new Int16Array(A)), + (n.HEAP32 = M = new Int32Array(A)), + (n.HEAPU8 = T = new Uint8Array(A)), + (n.HEAPU16 = new Uint16Array(A)), + (n.HEAPU32 = new Uint32Array(A)), + (n.HEAPF32 = B = new Float32Array(A)), + (n.HEAPF64 = N = new Float64Array(A)) + } + 'undefined' != typeof TextDecoder && new TextDecoder('utf-16le') + var q = 277552, + K = n.TOTAL_MEMORY || 16777216 + function Z(e) { + for (; e.length > 0; ) { + var r = e.shift() + if ('function' != typeof r) { + var t = r.func + 'number' == typeof t + ? void 0 === r.arg + ? n.dynCall_v(t) + : n.dynCall_vi(t, r.arg) + : t(void 0 === r.arg ? null : r.arg) + } else r() + } + } + K < 5242880 && + p( + 'TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + + K + + '! (TOTAL_STACK=5242880)' + ), + n.buffer + ? (A = n.buffer) + : 'object' == typeof WebAssembly && 'function' == typeof WebAssembly.Memory + ? ((v = new WebAssembly.Memory({ initial: K / 65536 })), (A = v.buffer)) + : (A = new ArrayBuffer(K)), + W(), + (M[q >> 2] = 5520464) + var V = [], + X = [], + Y = [], + G = [], + $ = !1, + J = Math.abs, + Q = Math.ceil, + ee = Math.floor, + re = Math.min, + te = 0, + ne = null, + oe = null + function ie(e) { + te++, n.monitorRunDependencies && n.monitorRunDependencies(te) + } + function ae(e) { + if ( + (te--, + n.monitorRunDependencies && n.monitorRunDependencies(te), + 0 == te && (null !== ne && (clearInterval(ne), (ne = null)), oe)) + ) { + var r = oe + ;(oe = null), r() + } + } + ;(n.preloadedImages = {}), (n.preloadedAudios = {}) + var se = 'data:application/octet-stream;base64,' + function ue(e) { + return String.prototype.startsWith ? e.startsWith(se) : 0 === e.indexOf(se) + } + var ce, + fe = 'libarchive.wasm' + function le() { + try { + if (n.wasmBinary) return new Uint8Array(n.wasmBinary) + if (n.readBinary) return n.readBinary(fe) + throw 'both async and sync fetching of the wasm failed' + } catch (e) { + Ze(e) + } + } + function de(e) { + var r = { + env: e, + global: { NaN: NaN, Infinity: 1 / 0 }, + 'global.Math': Math, + asm2wasm: w, + } + function t(e, r) { + var t = e.exports + ;(n.asm = t), ae() + } + if ((ie(), n.instantiateWasm)) + try { + return n.instantiateWasm(r, t) + } catch (e) { + return p('Module.instantiateWasm callback failed with error: ' + e), !1 + } + function o(e) { + t(e.instance) + } + function i(e) { + ;(n.wasmBinary || (!s && !u) || 'function' != typeof fetch + ? new Promise(function(e, r) { + e(le()) + }) + : fetch(fe, { credentials: 'same-origin' }) + .then(function(e) { + if (!e.ok) throw "failed to load wasm binary file at '" + fe + "'" + return e.arrayBuffer() + }) + .catch(function() { + return le() + }) + ) + .then(function(e) { + return WebAssembly.instantiate(e, r) + }) + .then(e, function(e) { + p('failed to asynchronously prepare wasm: ' + e), Ze(e) + }) + } + return ( + n.wasmBinary || + 'function' != typeof WebAssembly.instantiateStreaming || + ue(fe) || + 'function' != typeof fetch + ? i(o) + : WebAssembly.instantiateStreaming( + fetch(fe, { credentials: 'same-origin' }), + r + ).then(o, function(e) { + p('wasm streaming compile failed: ' + e), + p('falling back to ArrayBuffer instantiation'), + i(o) + }), + {} + ) + } + ue(fe) || ((ce = fe), (fe = n.locateFile ? n.locateFile(ce, l) : l + ce)), + (n.asm = function(e, r, t) { + return ( + (r.memory = v), + (r.table = new WebAssembly.Table({ + initial: 507, + maximum: 507, + element: 'anyfunc', + })), + (r.__memory_base = 1024), + (r.__table_base = 0), + de(r) + ) + }), + X.push({ + func: function() { + Ie() + }, + }) + var pe = {}, + me = { + splitPath: function(e) { + return /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/ + .exec(e) + .slice(1) + }, + normalizeArray: function(e, r) { + for (var t = 0, n = e.length - 1; n >= 0; n--) { + var o = e[n] + '.' === o + ? e.splice(n, 1) + : '..' === o + ? (e.splice(n, 1), t++) + : t && (e.splice(n, 1), t--) + } + if (r) for (; t; t--) e.unshift('..') + return e + }, + normalize: function(e) { + var r = '/' === e.charAt(0), + t = '/' === e.substr(-1) + return ( + (e = me + .normalizeArray( + e.split('/').filter(function(e) { + return !!e + }), + !r + ) + .join('/')) || + r || + (e = '.'), + e && t && (e += '/'), + (r ? '/' : '') + e + ) + }, + dirname: function(e) { + var r = me.splitPath(e), + t = r[0], + n = r[1] + return t || n ? (n && (n = n.substr(0, n.length - 1)), t + n) : '.' + }, + basename: function(e) { + if ('/' === e) return '/' + var r = e.lastIndexOf('/') + return -1 === r ? e : e.substr(r + 1) + }, + extname: function(e) { + return me.splitPath(e)[3] + }, + join: function() { + var e = Array.prototype.slice.call(arguments, 0) + return me.normalize(e.join('/')) + }, + join2: function(e, r) { + return me.normalize(e + '/' + r) + }, + } + function he(e) { + return n.___errno_location && (M[n.___errno_location() >> 2] = e), e + } + var ve = { + resolve: function() { + for (var e = '', r = !1, t = arguments.length - 1; t >= -1 && !r; t--) { + var n = t >= 0 ? arguments[t] : be.cwd() + if ('string' != typeof n) + throw new TypeError('Arguments to path.resolve must be strings') + if (!n) return '' + ;(e = n + '/' + e), (r = '/' === n.charAt(0)) + } + return ( + (r ? '/' : '') + + (e = me + .normalizeArray( + e.split('/').filter(function(e) { + return !!e + }), + !r + ) + .join('/')) || '.' + ) + }, + relative: function(e, r) { + function t(e) { + for (var r = 0; r < e.length && '' === e[r]; r++); + for (var t = e.length - 1; t >= 0 && '' === e[t]; t--); + return r > t ? [] : e.slice(r, t - r + 1) + } + ;(e = ve.resolve(e).substr(1)), (r = ve.resolve(r).substr(1)) + for ( + var n = t(e.split('/')), + o = t(r.split('/')), + i = Math.min(n.length, o.length), + a = i, + s = 0; + s < i; + s++ + ) + if (n[s] !== o[s]) { + a = s + break + } + var u = [] + for (s = a; s < n.length; s++) u.push('..') + return (u = u.concat(o.slice(a))).join('/') + }, + }, + we = { + ttys: [], + init: function() {}, + shutdown: function() {}, + register: function(e, r) { + ;(we.ttys[e] = { input: [], output: [], ops: r }), + be.registerDevice(e, we.stream_ops) + }, + stream_ops: { + open: function(e) { + var r = we.ttys[e.node.rdev] + if (!r) throw new be.ErrnoError(19) + ;(e.tty = r), (e.seekable = !1) + }, + close: function(e) { + e.tty.ops.flush(e.tty) + }, + flush: function(e) { + e.tty.ops.flush(e.tty) + }, + read: function(e, r, t, n, o) { + if (!e.tty || !e.tty.ops.get_char) throw new be.ErrnoError(6) + for (var i = 0, a = 0; a < n; a++) { + var s + try { + s = e.tty.ops.get_char(e.tty) + } catch (e) { + throw new be.ErrnoError(5) + } + if (void 0 === s && 0 === i) throw new be.ErrnoError(11) + if (null == s) break + i++, (r[t + a] = s) + } + return i && (e.node.timestamp = Date.now()), i + }, + write: function(e, r, t, n, o) { + if (!e.tty || !e.tty.ops.put_char) throw new be.ErrnoError(6) + try { + for (var i = 0; i < n; i++) e.tty.ops.put_char(e.tty, r[t + i]) + } catch (e) { + throw new be.ErrnoError(5) + } + return n && (e.node.timestamp = Date.now()), i + }, + }, + default_tty_ops: { + get_char: function(e) { + if (!e.input.length) { + var r = null + if (i) { + var t = new Buffer(256), + n = 0, + o = 'win32' != process.platform, + a = process.stdin.fd + if (o) { + var s = !1 + try { + ;(a = Me.openSync('/dev/stdin', 'r')), (s = !0) + } catch (e) {} + } + try { + n = Me.readSync(a, t, 0, 256, null) + } catch (e) { + if (-1 == e.toString().indexOf('EOF')) throw e + n = 0 + } + s && Me.closeSync(a), + (r = n > 0 ? t.slice(0, n).toString('utf-8') : null) + } else + 'undefined' != typeof window && 'function' == typeof window.prompt + ? null !== (r = window.prompt('Input: ')) && (r += '\n') + : 'function' == typeof readline && + null !== (r = readline()) && + (r += '\n') + if (!r) return null + e.input = Ne(r, !0) + } + return e.input.shift() + }, + put_char: function(e, r) { + null === r || 10 === r + ? (d(x(e.output, 0)), (e.output = [])) + : 0 != r && e.output.push(r) + }, + flush: function(e) { + e.output && e.output.length > 0 && (d(x(e.output, 0)), (e.output = [])) + }, + }, + default_tty1_ops: { + put_char: function(e, r) { + null === r || 10 === r + ? (p(x(e.output, 0)), (e.output = [])) + : 0 != r && e.output.push(r) + }, + flush: function(e) { + e.output && e.output.length > 0 && (p(x(e.output, 0)), (e.output = [])) + }, + }, + }, + ye = { + ops_table: null, + mount: function(e) { + return ye.createNode(null, '/', 16895, 0) + }, + createNode: function(e, r, t, n) { + if (be.isBlkdev(t) || be.isFIFO(t)) throw new be.ErrnoError(1) + ye.ops_table || + (ye.ops_table = { + dir: { + node: { + getattr: ye.node_ops.getattr, + setattr: ye.node_ops.setattr, + lookup: ye.node_ops.lookup, + mknod: ye.node_ops.mknod, + rename: ye.node_ops.rename, + unlink: ye.node_ops.unlink, + rmdir: ye.node_ops.rmdir, + readdir: ye.node_ops.readdir, + symlink: ye.node_ops.symlink, + }, + stream: { llseek: ye.stream_ops.llseek }, + }, + file: { + node: { getattr: ye.node_ops.getattr, setattr: ye.node_ops.setattr }, + stream: { + llseek: ye.stream_ops.llseek, + read: ye.stream_ops.read, + write: ye.stream_ops.write, + allocate: ye.stream_ops.allocate, + mmap: ye.stream_ops.mmap, + msync: ye.stream_ops.msync, + }, + }, + link: { + node: { + getattr: ye.node_ops.getattr, + setattr: ye.node_ops.setattr, + readlink: ye.node_ops.readlink, + }, + stream: {}, + }, + chrdev: { + node: { getattr: ye.node_ops.getattr, setattr: ye.node_ops.setattr }, + stream: be.chrdev_stream_ops, + }, + }) + var o = be.createNode(e, r, t, n) + return ( + be.isDir(o.mode) + ? ((o.node_ops = ye.ops_table.dir.node), + (o.stream_ops = ye.ops_table.dir.stream), + (o.contents = {})) + : be.isFile(o.mode) + ? ((o.node_ops = ye.ops_table.file.node), + (o.stream_ops = ye.ops_table.file.stream), + (o.usedBytes = 0), + (o.contents = null)) + : be.isLink(o.mode) + ? ((o.node_ops = ye.ops_table.link.node), + (o.stream_ops = ye.ops_table.link.stream)) + : be.isChrdev(o.mode) && + ((o.node_ops = ye.ops_table.chrdev.node), + (o.stream_ops = ye.ops_table.chrdev.stream)), + (o.timestamp = Date.now()), + e && (e.contents[r] = o), + o + ) + }, + getFileDataAsRegularArray: function(e) { + if (e.contents && e.contents.subarray) { + for (var r = [], t = 0; t < e.usedBytes; ++t) r.push(e.contents[t]) + return r + } + return e.contents + }, + getFileDataAsTypedArray: function(e) { + return e.contents + ? e.contents.subarray + ? e.contents.subarray(0, e.usedBytes) + : new Uint8Array(e.contents) + : new Uint8Array() + }, + expandFileStorage: function(e, r) { + var t = e.contents ? e.contents.length : 0 + if (!(t >= r)) { + ;(r = Math.max(r, (t * (t < 1048576 ? 2 : 1.125)) | 0)), + 0 != t && (r = Math.max(r, 256)) + var n = e.contents + ;(e.contents = new Uint8Array(r)), + e.usedBytes > 0 && e.contents.set(n.subarray(0, e.usedBytes), 0) + } + }, + resizeFileStorage: function(e, r) { + if (e.usedBytes != r) { + if (0 == r) return (e.contents = null), void (e.usedBytes = 0) + if (!e.contents || e.contents.subarray) { + var t = e.contents + return ( + (e.contents = new Uint8Array(new ArrayBuffer(r))), + t && e.contents.set(t.subarray(0, Math.min(r, e.usedBytes))), + void (e.usedBytes = r) + ) + } + if ((e.contents || (e.contents = []), e.contents.length > r)) + e.contents.length = r + else for (; e.contents.length < r; ) e.contents.push(0) + e.usedBytes = r + } + }, + node_ops: { + getattr: function(e) { + var r = {} + return ( + (r.dev = be.isChrdev(e.mode) ? e.id : 1), + (r.ino = e.id), + (r.mode = e.mode), + (r.nlink = 1), + (r.uid = 0), + (r.gid = 0), + (r.rdev = e.rdev), + be.isDir(e.mode) + ? (r.size = 4096) + : be.isFile(e.mode) + ? (r.size = e.usedBytes) + : be.isLink(e.mode) + ? (r.size = e.link.length) + : (r.size = 0), + (r.atime = new Date(e.timestamp)), + (r.mtime = new Date(e.timestamp)), + (r.ctime = new Date(e.timestamp)), + (r.blksize = 4096), + (r.blocks = Math.ceil(r.size / r.blksize)), + r + ) + }, + setattr: function(e, r) { + void 0 !== r.mode && (e.mode = r.mode), + void 0 !== r.timestamp && (e.timestamp = r.timestamp), + void 0 !== r.size && ye.resizeFileStorage(e, r.size) + }, + lookup: function(e, r) { + throw be.genericErrors[2] + }, + mknod: function(e, r, t, n) { + return ye.createNode(e, r, t, n) + }, + rename: function(e, r, t) { + if (be.isDir(e.mode)) { + var n + try { + n = be.lookupNode(r, t) + } catch (e) {} + if (n) for (var o in n.contents) throw new be.ErrnoError(39) + } + delete e.parent.contents[e.name], + (e.name = t), + (r.contents[t] = e), + (e.parent = r) + }, + unlink: function(e, r) { + delete e.contents[r] + }, + rmdir: function(e, r) { + var t = be.lookupNode(e, r) + for (var n in t.contents) throw new be.ErrnoError(39) + delete e.contents[r] + }, + readdir: function(e) { + var r = ['.', '..'] + for (var t in e.contents) e.contents.hasOwnProperty(t) && r.push(t) + return r + }, + symlink: function(e, r, t) { + var n = ye.createNode(e, r, 41471, 0) + return (n.link = t), n + }, + readlink: function(e) { + if (!be.isLink(e.mode)) throw new be.ErrnoError(22) + return e.link + }, + }, + stream_ops: { + read: function(e, r, t, n, o) { + var i = e.node.contents + if (o >= e.node.usedBytes) return 0 + var a = Math.min(e.node.usedBytes - o, n) + if (a > 8 && i.subarray) r.set(i.subarray(o, o + a), t) + else for (var s = 0; s < a; s++) r[t + s] = i[o + s] + return a + }, + write: function(e, r, t, n, o, i) { + if (!n) return 0 + var a = e.node + if ( + ((a.timestamp = Date.now()), + r.subarray && (!a.contents || a.contents.subarray)) + ) { + if (0 === a.usedBytes && 0 === o) + return ( + (a.contents = new Uint8Array(r.subarray(t, t + n))), + (a.usedBytes = n), + n + ) + if (o + n <= a.usedBytes) + return a.contents.set(r.subarray(t, t + n), o), n + } + if ((ye.expandFileStorage(a, o + n), a.contents.subarray && r.subarray)) + a.contents.set(r.subarray(t, t + n), o) + else for (var s = 0; s < n; s++) a.contents[o + s] = r[t + s] + return (a.usedBytes = Math.max(a.usedBytes, o + n)), n + }, + llseek: function(e, r, t) { + var n = r + if ( + (1 === t + ? (n += e.position) + : 2 === t && be.isFile(e.node.mode) && (n += e.node.usedBytes), + n < 0) + ) + throw new be.ErrnoError(22) + return n + }, + allocate: function(e, r, t) { + ye.expandFileStorage(e.node, r + t), + (e.node.usedBytes = Math.max(e.node.usedBytes, r + t)) + }, + mmap: function(e, r, t, n, o, i, a) { + if (!be.isFile(e.node.mode)) throw new be.ErrnoError(19) + var s, + u, + c = e.node.contents + if (2 & a || (c.buffer !== r && c.buffer !== r.buffer)) { + if ( + ((o > 0 || o + n < e.node.usedBytes) && + (c = c.subarray + ? c.subarray(o, o + n) + : Array.prototype.slice.call(c, o, o + n)), + (u = !0), + !(s = Ue(n))) + ) + throw new be.ErrnoError(12) + r.set(c, s) + } else (u = !1), (s = c.byteOffset) + return { ptr: s, allocated: u } + }, + msync: function(e, r, t, n, o) { + if (!be.isFile(e.node.mode)) throw new be.ErrnoError(19) + return 2 & o ? 0 : (ye.stream_ops.write(e, r, 0, n, t, !1), 0) + }, + }, + }, + Ee = { + dbs: {}, + indexedDB: function() { + if ('undefined' != typeof indexedDB) return indexedDB + var e = null + return ( + 'object' == typeof window && + (e = + window.indexedDB || + window.mozIndexedDB || + window.webkitIndexedDB || + window.msIndexedDB), + E(e, 'IDBFS used, but indexedDB not supported'), + e + ) + }, + DB_VERSION: 21, + DB_STORE_NAME: 'FILE_DATA', + mount: function(e) { + return ye.mount.apply(null, arguments) + }, + syncfs: function(e, r, t) { + Ee.getLocalSet(e, function(n, o) { + if (n) return t(n) + Ee.getRemoteSet(e, function(e, n) { + if (e) return t(e) + var i = r ? n : o, + a = r ? o : n + Ee.reconcile(i, a, t) + }) + }) + }, + getDB: function(e, r) { + var t, + n = Ee.dbs[e] + if (n) return r(null, n) + try { + t = Ee.indexedDB().open(e, Ee.DB_VERSION) + } catch (e) { + return r(e) + } + if (!t) return r('Unable to connect to IndexedDB') + ;(t.onupgradeneeded = function(e) { + var r, + t = e.target.result, + n = e.target.transaction + ;(r = t.objectStoreNames.contains(Ee.DB_STORE_NAME) + ? n.objectStore(Ee.DB_STORE_NAME) + : t.createObjectStore(Ee.DB_STORE_NAME)).indexNames.contains( + 'timestamp' + ) || r.createIndex('timestamp', 'timestamp', { unique: !1 }) + }), + (t.onsuccess = function() { + ;(n = t.result), (Ee.dbs[e] = n), r(null, n) + }), + (t.onerror = function(e) { + r(this.error), e.preventDefault() + }) + }, + getLocalSet: function(e, r) { + var t = {} + function n(e) { + return '.' !== e && '..' !== e + } + function o(e) { + return function(r) { + return me.join2(e, r) + } + } + for ( + var i = be + .readdir(e.mountpoint) + .filter(n) + .map(o(e.mountpoint)); + i.length; + + ) { + var a, + s = i.pop() + try { + a = be.stat(s) + } catch (e) { + return r(e) + } + be.isDir(a.mode) && + i.push.apply( + i, + be + .readdir(s) + .filter(n) + .map(o(s)) + ), + (t[s] = { timestamp: a.mtime }) + } + return r(null, { type: 'local', entries: t }) + }, + getRemoteSet: function(e, r) { + var t = {} + Ee.getDB(e.mountpoint, function(e, n) { + if (e) return r(e) + try { + var o = n.transaction([Ee.DB_STORE_NAME], 'readonly') + ;(o.onerror = function(e) { + r(this.error), e.preventDefault() + }), + (o + .objectStore(Ee.DB_STORE_NAME) + .index('timestamp') + .openKeyCursor().onsuccess = function(e) { + var o = e.target.result + if (!o) return r(null, { type: 'remote', db: n, entries: t }) + ;(t[o.primaryKey] = { timestamp: o.key }), o.continue() + }) + } catch (e) { + return r(e) + } + }) + }, + loadLocalEntry: function(e, r) { + var t, n + try { + ;(n = be.lookupPath(e).node), (t = be.stat(e)) + } catch (e) { + return r(e) + } + return be.isDir(t.mode) + ? r(null, { timestamp: t.mtime, mode: t.mode }) + : be.isFile(t.mode) + ? ((n.contents = ye.getFileDataAsTypedArray(n)), + r(null, { timestamp: t.mtime, mode: t.mode, contents: n.contents })) + : r(new Error('node type not supported')) + }, + storeLocalEntry: function(e, r, t) { + try { + if (be.isDir(r.mode)) be.mkdir(e, r.mode) + else { + if (!be.isFile(r.mode)) return t(new Error('node type not supported')) + be.writeFile(e, r.contents, { canOwn: !0 }) + } + be.chmod(e, r.mode), be.utime(e, r.timestamp, r.timestamp) + } catch (e) { + return t(e) + } + t(null) + }, + removeLocalEntry: function(e, r) { + try { + be.lookupPath(e) + var t = be.stat(e) + be.isDir(t.mode) ? be.rmdir(e) : be.isFile(t.mode) && be.unlink(e) + } catch (e) { + return r(e) + } + r(null) + }, + loadRemoteEntry: function(e, r, t) { + var n = e.get(r) + ;(n.onsuccess = function(e) { + t(null, e.target.result) + }), + (n.onerror = function(e) { + t(this.error), e.preventDefault() + }) + }, + storeRemoteEntry: function(e, r, t, n) { + var o = e.put(t, r) + ;(o.onsuccess = function() { + n(null) + }), + (o.onerror = function(e) { + n(this.error), e.preventDefault() + }) + }, + removeRemoteEntry: function(e, r, t) { + var n = e.delete(r) + ;(n.onsuccess = function() { + t(null) + }), + (n.onerror = function(e) { + t(this.error), e.preventDefault() + }) + }, + reconcile: function(e, r, t) { + var n = 0, + o = [] + Object.keys(e.entries).forEach(function(t) { + var i = e.entries[t], + a = r.entries[t] + ;(!a || i.timestamp > a.timestamp) && (o.push(t), n++) + }) + var i = [] + if ( + (Object.keys(r.entries).forEach(function(t) { + r.entries[t], e.entries[t] || (i.push(t), n++) + }), + !n) + ) + return t(null) + var a = 0, + s = ('remote' === e.type ? e.db : r.db).transaction( + [Ee.DB_STORE_NAME], + 'readwrite' + ), + u = s.objectStore(Ee.DB_STORE_NAME) + function c(e) { + return e + ? c.errored + ? void 0 + : ((c.errored = !0), t(e)) + : ++a >= n + ? t(null) + : void 0 + } + ;(s.onerror = function(e) { + c(this.error), e.preventDefault() + }), + o.sort().forEach(function(e) { + 'local' === r.type + ? Ee.loadRemoteEntry(u, e, function(r, t) { + if (r) return c(r) + Ee.storeLocalEntry(e, t, c) + }) + : Ee.loadLocalEntry(e, function(r, t) { + if (r) return c(r) + Ee.storeRemoteEntry(u, e, t, c) + }) + }), + i + .sort() + .reverse() + .forEach(function(e) { + 'local' === r.type + ? Ee.removeLocalEntry(e, c) + : Ee.removeRemoteEntry(u, e, c) + }) + }, + }, + ge = { + isWindows: !1, + staticInit: function() { + ge.isWindows = !!process.platform.match(/^win/) + var e = process.binding('constants') + e.fs && (e = e.fs), + (ge.flagsForNodeMap = { + 1024: e.O_APPEND, + 64: e.O_CREAT, + 128: e.O_EXCL, + 0: e.O_RDONLY, + 2: e.O_RDWR, + 4096: e.O_SYNC, + 512: e.O_TRUNC, + 1: e.O_WRONLY, + }) + }, + bufferFrom: function(e) { + return Buffer.alloc ? Buffer.from(e) : new Buffer(e) + }, + mount: function(e) { + return E(i), ge.createNode(null, '/', ge.getMode(e.opts.root), 0) + }, + createNode: function(e, r, t, n) { + if (!be.isDir(t) && !be.isFile(t) && !be.isLink(t)) + throw new be.ErrnoError(22) + var o = be.createNode(e, r, t) + return (o.node_ops = ge.node_ops), (o.stream_ops = ge.stream_ops), o + }, + getMode: function(e) { + var r + try { + ;(r = Me.lstatSync(e)), + ge.isWindows && (r.mode = r.mode | ((292 & r.mode) >> 2)) + } catch (e) { + if (!e.code) throw e + throw new be.ErrnoError(-e.errno) + } + return r.mode + }, + realPath: function(e) { + for (var r = []; e.parent !== e; ) r.push(e.name), (e = e.parent) + return r.push(e.mount.opts.root), r.reverse(), me.join.apply(null, r) + }, + flagsForNode: function(e) { + ;(e &= -2097153), (e &= -2049), (e &= -32769), (e &= -524289) + var r = 0 + for (var t in ge.flagsForNodeMap) + e & t && ((r |= ge.flagsForNodeMap[t]), (e ^= t)) + if (e) throw new be.ErrnoError(22) + return r + }, + node_ops: { + getattr: function(e) { + var r, + t = ge.realPath(e) + try { + r = Me.lstatSync(t) + } catch (e) { + if (!e.code) throw e + throw new be.ErrnoError(-e.errno) + } + return ( + ge.isWindows && !r.blksize && (r.blksize = 4096), + ge.isWindows && + !r.blocks && + (r.blocks = ((r.size + r.blksize - 1) / r.blksize) | 0), + { + dev: r.dev, + ino: r.ino, + mode: r.mode, + nlink: r.nlink, + uid: r.uid, + gid: r.gid, + rdev: r.rdev, + size: r.size, + atime: r.atime, + mtime: r.mtime, + ctime: r.ctime, + blksize: r.blksize, + blocks: r.blocks, + } + ) + }, + setattr: function(e, r) { + var t = ge.realPath(e) + try { + if ( + (void 0 !== r.mode && (Me.chmodSync(t, r.mode), (e.mode = r.mode)), + void 0 !== r.timestamp) + ) { + var n = new Date(r.timestamp) + Me.utimesSync(t, n, n) + } + void 0 !== r.size && Me.truncateSync(t, r.size) + } catch (e) { + if (!e.code) throw e + throw new be.ErrnoError(-e.errno) + } + }, + lookup: function(e, r) { + var t = me.join2(ge.realPath(e), r), + n = ge.getMode(t) + return ge.createNode(e, r, n) + }, + mknod: function(e, r, t, n) { + var o = ge.createNode(e, r, t, n), + i = ge.realPath(o) + try { + be.isDir(o.mode) + ? Me.mkdirSync(i, o.mode) + : Me.writeFileSync(i, '', { mode: o.mode }) + } catch (e) { + if (!e.code) throw e + throw new be.ErrnoError(-e.errno) + } + return o + }, + rename: function(e, r, t) { + var n = ge.realPath(e), + o = me.join2(ge.realPath(r), t) + try { + Me.renameSync(n, o) + } catch (e) { + if (!e.code) throw e + throw new be.ErrnoError(-e.errno) + } + }, + unlink: function(e, r) { + var t = me.join2(ge.realPath(e), r) + try { + Me.unlinkSync(t) + } catch (e) { + if (!e.code) throw e + throw new be.ErrnoError(-e.errno) + } + }, + rmdir: function(e, r) { + var t = me.join2(ge.realPath(e), r) + try { + Me.rmdirSync(t) + } catch (e) { + if (!e.code) throw e + throw new be.ErrnoError(-e.errno) + } + }, + readdir: function(e) { + var r = ge.realPath(e) + try { + return Me.readdirSync(r) + } catch (e) { + if (!e.code) throw e + throw new be.ErrnoError(-e.errno) + } + }, + symlink: function(e, r, t) { + var n = me.join2(ge.realPath(e), r) + try { + Me.symlinkSync(t, n) + } catch (e) { + if (!e.code) throw e + throw new be.ErrnoError(-e.errno) + } + }, + readlink: function(e) { + var r = ge.realPath(e) + try { + return ( + (r = Me.readlinkSync(r)), + (r = Be.relative(Be.resolve(e.mount.opts.root), r)) + ) + } catch (e) { + if (!e.code) throw e + throw new be.ErrnoError(-e.errno) + } + }, + }, + stream_ops: { + open: function(e) { + var r = ge.realPath(e.node) + try { + be.isFile(e.node.mode) && + (e.nfd = Me.openSync(r, ge.flagsForNode(e.flags))) + } catch (e) { + if (!e.code) throw e + throw new be.ErrnoError(-e.errno) + } + }, + close: function(e) { + try { + be.isFile(e.node.mode) && e.nfd && Me.closeSync(e.nfd) + } catch (e) { + if (!e.code) throw e + throw new be.ErrnoError(-e.errno) + } + }, + read: function(e, r, t, n, o) { + if (0 === n) return 0 + try { + return Me.readSync(e.nfd, ge.bufferFrom(r.buffer), t, n, o) + } catch (e) { + throw new be.ErrnoError(-e.errno) + } + }, + write: function(e, r, t, n, o) { + try { + return Me.writeSync(e.nfd, ge.bufferFrom(r.buffer), t, n, o) + } catch (e) { + throw new be.ErrnoError(-e.errno) + } + }, + llseek: function(e, r, t) { + var n = r + if (1 === t) n += e.position + else if (2 === t && be.isFile(e.node.mode)) + try { + n += Me.fstatSync(e.nfd).size + } catch (e) { + throw new be.ErrnoError(-e.errno) + } + if (n < 0) throw new be.ErrnoError(22) + return n + }, + }, + }, + _e = { + DIR_MODE: 16895, + FILE_MODE: 33279, + reader: null, + mount: function(e) { + E(u), _e.reader || (_e.reader = new FileReaderSync()) + var r = _e.createNode(null, '/', _e.DIR_MODE, 0), + t = {} + function n(e) { + for (var n = e.split('/'), o = r, i = 0; i < n.length - 1; i++) { + var a = n.slice(0, i + 1).join('/') + t[a] || (t[a] = _e.createNode(o, n[i], _e.DIR_MODE, 0)), (o = t[a]) + } + return o + } + function o(e) { + var r = e.split('/') + return r[r.length - 1] + } + return ( + Array.prototype.forEach.call(e.opts.files || [], function(e) { + _e.createNode( + n(e.name), + o(e.name), + _e.FILE_MODE, + 0, + e, + e.lastModifiedDate + ) + }), + (e.opts.blobs || []).forEach(function(e) { + _e.createNode(n(e.name), o(e.name), _e.FILE_MODE, 0, e.data) + }), + (e.opts.packages || []).forEach(function(e) { + e.metadata.files.forEach(function(r) { + var t = r.filename.substr(1) + _e.createNode( + n(t), + o(t), + _e.FILE_MODE, + 0, + e.blob.slice(r.start, r.end) + ) + }) + }), + r + ) + }, + createNode: function(e, r, t, n, o, i) { + var a = be.createNode(e, r, t) + return ( + (a.mode = t), + (a.node_ops = _e.node_ops), + (a.stream_ops = _e.stream_ops), + (a.timestamp = (i || new Date()).getTime()), + E(_e.FILE_MODE !== _e.DIR_MODE), + t === _e.FILE_MODE + ? ((a.size = o.size), (a.contents = o)) + : ((a.size = 4096), (a.contents = {})), + e && (e.contents[r] = a), + a + ) + }, + node_ops: { + getattr: function(e) { + return { + dev: 1, + ino: void 0, + mode: e.mode, + nlink: 1, + uid: 0, + gid: 0, + rdev: void 0, + size: e.size, + atime: new Date(e.timestamp), + mtime: new Date(e.timestamp), + ctime: new Date(e.timestamp), + blksize: 4096, + blocks: Math.ceil(e.size / 4096), + } + }, + setattr: function(e, r) { + void 0 !== r.mode && (e.mode = r.mode), + void 0 !== r.timestamp && (e.timestamp = r.timestamp) + }, + lookup: function(e, r) { + throw new be.ErrnoError(2) + }, + mknod: function(e, r, t, n) { + throw new be.ErrnoError(1) + }, + rename: function(e, r, t) { + throw new be.ErrnoError(1) + }, + unlink: function(e, r) { + throw new be.ErrnoError(1) + }, + rmdir: function(e, r) { + throw new be.ErrnoError(1) + }, + readdir: function(e) { + var r = ['.', '..'] + for (var t in e.contents) e.contents.hasOwnProperty(t) && r.push(t) + return r + }, + symlink: function(e, r, t) { + throw new be.ErrnoError(1) + }, + readlink: function(e) { + throw new be.ErrnoError(1) + }, + }, + stream_ops: { + read: function(e, r, t, n, o) { + if (o >= e.node.size) return 0 + var i = e.node.contents.slice(o, o + n), + a = _e.reader.readAsArrayBuffer(i) + return r.set(new Uint8Array(a), t), i.size + }, + write: function(e, r, t, n, o) { + throw new be.ErrnoError(5) + }, + llseek: function(e, r, t) { + var n = r + if ( + (1 === t + ? (n += e.position) + : 2 === t && be.isFile(e.node.mode) && (n += e.node.size), + n < 0) + ) + throw new be.ErrnoError(22) + return n + }, + }, + }, + be = { + root: null, + mounts: [], + devices: {}, + streams: [], + nextInode: 1, + nameTable: null, + currentPath: '/', + initialized: !1, + ignorePermissions: !0, + trackingDelegate: {}, + tracking: { openFlags: { READ: 1, WRITE: 2 } }, + ErrnoError: null, + genericErrors: {}, + filesystems: null, + syncFSRequests: 0, + handleFSError: function(e) { + if (!(e instanceof be.ErrnoError)) throw e + ' : ' + j() + return he(e.errno) + }, + lookupPath: function(e, r) { + if (((r = r || {}), !(e = ve.resolve(be.cwd(), e)))) + return { path: '', node: null } + var t = { follow_mount: !0, recurse_count: 0 } + for (var n in t) void 0 === r[n] && (r[n] = t[n]) + if (r.recurse_count > 8) throw new be.ErrnoError(40) + for ( + var o = me.normalizeArray( + e.split('/').filter(function(e) { + return !!e + }), + !1 + ), + i = be.root, + a = '/', + s = 0; + s < o.length; + s++ + ) { + var u = s === o.length - 1 + if (u && r.parent) break + if ( + ((i = be.lookupNode(i, o[s])), + (a = me.join2(a, o[s])), + be.isMountpoint(i) && + (!u || (u && r.follow_mount)) && + (i = i.mounted.root), + !u || r.follow) + ) + for (var c = 0; be.isLink(i.mode); ) { + var f = be.readlink(a) + if ( + ((a = ve.resolve(me.dirname(a), f)), + (i = be.lookupPath(a, { recurse_count: r.recurse_count }).node), + c++ > 40) + ) + throw new be.ErrnoError(40) + } + } + return { path: a, node: i } + }, + getPath: function(e) { + for (var r; ; ) { + if (be.isRoot(e)) { + var t = e.mount.mountpoint + return r ? ('/' !== t[t.length - 1] ? t + '/' + r : t + r) : t + } + ;(r = r ? e.name + '/' + r : e.name), (e = e.parent) + } + }, + hashName: function(e, r) { + for (var t = 0, n = 0; n < r.length; n++) + t = ((t << 5) - t + r.charCodeAt(n)) | 0 + return ((e + t) >>> 0) % be.nameTable.length + }, + hashAddNode: function(e) { + var r = be.hashName(e.parent.id, e.name) + ;(e.name_next = be.nameTable[r]), (be.nameTable[r] = e) + }, + hashRemoveNode: function(e) { + var r = be.hashName(e.parent.id, e.name) + if (be.nameTable[r] === e) be.nameTable[r] = e.name_next + else + for (var t = be.nameTable[r]; t; ) { + if (t.name_next === e) { + t.name_next = e.name_next + break + } + t = t.name_next + } + }, + lookupNode: function(e, r) { + var t = be.mayLookup(e) + if (t) throw new be.ErrnoError(t, e) + for ( + var n = be.hashName(e.id, r), o = be.nameTable[n]; + o; + o = o.name_next + ) { + var i = o.name + if (o.parent.id === e.id && i === r) return o + } + return be.lookup(e, r) + }, + createNode: function(e, r, t, n) { + be.FSNode || + ((be.FSNode = function(e, r, t, n) { + e || (e = this), + (this.parent = e), + (this.mount = e.mount), + (this.mounted = null), + (this.id = be.nextInode++), + (this.name = r), + (this.mode = t), + (this.node_ops = {}), + (this.stream_ops = {}), + (this.rdev = n) + }), + (be.FSNode.prototype = {}), + Object.defineProperties(be.FSNode.prototype, { + read: { + get: function() { + return 365 == (365 & this.mode) + }, + set: function(e) { + e ? (this.mode |= 365) : (this.mode &= -366) + }, + }, + write: { + get: function() { + return 146 == (146 & this.mode) + }, + set: function(e) { + e ? (this.mode |= 146) : (this.mode &= -147) + }, + }, + isFolder: { + get: function() { + return be.isDir(this.mode) + }, + }, + isDevice: { + get: function() { + return be.isChrdev(this.mode) + }, + }, + })) + var o = new be.FSNode(e, r, t, n) + return be.hashAddNode(o), o + }, + destroyNode: function(e) { + be.hashRemoveNode(e) + }, + isRoot: function(e) { + return e === e.parent + }, + isMountpoint: function(e) { + return !!e.mounted + }, + isFile: function(e) { + return 32768 == (61440 & e) + }, + isDir: function(e) { + return 16384 == (61440 & e) + }, + isLink: function(e) { + return 40960 == (61440 & e) + }, + isChrdev: function(e) { + return 8192 == (61440 & e) + }, + isBlkdev: function(e) { + return 24576 == (61440 & e) + }, + isFIFO: function(e) { + return 4096 == (61440 & e) + }, + isSocket: function(e) { + return 49152 == (49152 & e) + }, + flagModes: { + r: 0, + rs: 1052672, + 'r+': 2, + w: 577, + wx: 705, + xw: 705, + 'w+': 578, + 'wx+': 706, + 'xw+': 706, + a: 1089, + ax: 1217, + xa: 1217, + 'a+': 1090, + 'ax+': 1218, + 'xa+': 1218, + }, + modeStringToFlags: function(e) { + var r = be.flagModes[e] + if (void 0 === r) throw new Error('Unknown file open mode: ' + e) + return r + }, + flagsToPermissionString: function(e) { + var r = ['r', 'w', 'rw'][3 & e] + return 512 & e && (r += 'w'), r + }, + nodePermissions: function(e, r) { + return be.ignorePermissions + ? 0 + : (-1 === r.indexOf('r') || 292 & e.mode) && + (-1 === r.indexOf('w') || 146 & e.mode) && + (-1 === r.indexOf('x') || 73 & e.mode) + ? 0 + : 13 + }, + mayLookup: function(e) { + var r = be.nodePermissions(e, 'x') + return r || (e.node_ops.lookup ? 0 : 13) + }, + mayCreate: function(e, r) { + try { + return be.lookupNode(e, r), 17 + } catch (e) {} + return be.nodePermissions(e, 'wx') + }, + mayDelete: function(e, r, t) { + var n + try { + n = be.lookupNode(e, r) + } catch (e) { + return e.errno + } + var o = be.nodePermissions(e, 'wx') + if (o) return o + if (t) { + if (!be.isDir(n.mode)) return 20 + if (be.isRoot(n) || be.getPath(n) === be.cwd()) return 16 + } else if (be.isDir(n.mode)) return 21 + return 0 + }, + mayOpen: function(e, r) { + return e + ? be.isLink(e.mode) + ? 40 + : be.isDir(e.mode) && ('r' !== be.flagsToPermissionString(r) || 512 & r) + ? 21 + : be.nodePermissions(e, be.flagsToPermissionString(r)) + : 2 + }, + MAX_OPEN_FDS: 4096, + nextfd: function(e, r) { + ;(e = e || 0), (r = r || be.MAX_OPEN_FDS) + for (var t = e; t <= r; t++) if (!be.streams[t]) return t + throw new be.ErrnoError(24) + }, + getStream: function(e) { + return be.streams[e] + }, + createStream: function(e, r, t) { + be.FSStream || + ((be.FSStream = function() {}), + (be.FSStream.prototype = {}), + Object.defineProperties(be.FSStream.prototype, { + object: { + get: function() { + return this.node + }, + set: function(e) { + this.node = e + }, + }, + isRead: { + get: function() { + return 1 != (2097155 & this.flags) + }, + }, + isWrite: { + get: function() { + return 0 != (2097155 & this.flags) + }, + }, + isAppend: { + get: function() { + return 1024 & this.flags + }, + }, + })) + var n = new be.FSStream() + for (var o in e) n[o] = e[o] + e = n + var i = be.nextfd(r, t) + return (e.fd = i), (be.streams[i] = e), e + }, + closeStream: function(e) { + be.streams[e] = null + }, + chrdev_stream_ops: { + open: function(e) { + var r = be.getDevice(e.node.rdev) + ;(e.stream_ops = r.stream_ops), e.stream_ops.open && e.stream_ops.open(e) + }, + llseek: function() { + throw new be.ErrnoError(29) + }, + }, + major: function(e) { + return e >> 8 + }, + minor: function(e) { + return 255 & e + }, + makedev: function(e, r) { + return (e << 8) | r + }, + registerDevice: function(e, r) { + be.devices[e] = { stream_ops: r } + }, + getDevice: function(e) { + return be.devices[e] + }, + getMounts: function(e) { + for (var r = [], t = [e]; t.length; ) { + var n = t.pop() + r.push(n), t.push.apply(t, n.mounts) + } + return r + }, + syncfs: function(e, r) { + 'function' == typeof e && ((r = e), (e = !1)), + be.syncFSRequests++, + be.syncFSRequests > 1 && + console.log( + 'warning: ' + + be.syncFSRequests + + ' FS.syncfs operations in flight at once, probably just doing extra work' + ) + var t = be.getMounts(be.root.mount), + n = 0 + function o(e) { + return be.syncFSRequests--, r(e) + } + function i(e) { + if (e) return i.errored ? void 0 : ((i.errored = !0), o(e)) + ++n >= t.length && o(null) + } + t.forEach(function(r) { + if (!r.type.syncfs) return i(null) + r.type.syncfs(r, e, i) + }) + }, + mount: function(e, r, t) { + var n, + o = '/' === t, + i = !t + if (o && be.root) throw new be.ErrnoError(16) + if (!o && !i) { + var a = be.lookupPath(t, { follow_mount: !1 }) + if (((t = a.path), (n = a.node), be.isMountpoint(n))) + throw new be.ErrnoError(16) + if (!be.isDir(n.mode)) throw new be.ErrnoError(20) + } + var s = { type: e, opts: r, mountpoint: t, mounts: [] }, + u = e.mount(s) + return ( + (u.mount = s), + (s.root = u), + o + ? (be.root = u) + : n && ((n.mounted = s), n.mount && n.mount.mounts.push(s)), + u + ) + }, + unmount: function(e) { + var r = be.lookupPath(e, { follow_mount: !1 }) + if (!be.isMountpoint(r.node)) throw new be.ErrnoError(22) + var t = r.node, + n = t.mounted, + o = be.getMounts(n) + Object.keys(be.nameTable).forEach(function(e) { + for (var r = be.nameTable[e]; r; ) { + var t = r.name_next + ;-1 !== o.indexOf(r.mount) && be.destroyNode(r), (r = t) + } + }), + (t.mounted = null) + var i = t.mount.mounts.indexOf(n) + t.mount.mounts.splice(i, 1) + }, + lookup: function(e, r) { + return e.node_ops.lookup(e, r) + }, + mknod: function(e, r, t) { + var n = be.lookupPath(e, { parent: !0 }).node, + o = me.basename(e) + if (!o || '.' === o || '..' === o) throw new be.ErrnoError(22) + var i = be.mayCreate(n, o) + if (i) throw new be.ErrnoError(i) + if (!n.node_ops.mknod) throw new be.ErrnoError(1) + return n.node_ops.mknod(n, o, r, t) + }, + create: function(e, r) { + return ( + (r = void 0 !== r ? r : 438), (r &= 4095), (r |= 32768), be.mknod(e, r, 0) + ) + }, + mkdir: function(e, r) { + return ( + (r = void 0 !== r ? r : 511), (r &= 1023), (r |= 16384), be.mknod(e, r, 0) + ) + }, + mkdirTree: function(e, r) { + for (var t = e.split('/'), n = '', o = 0; o < t.length; ++o) + if (t[o]) { + n += '/' + t[o] + try { + be.mkdir(n, r) + } catch (e) { + if (17 != e.errno) throw e + } + } + }, + mkdev: function(e, r, t) { + return void 0 === t && ((t = r), (r = 438)), (r |= 8192), be.mknod(e, r, t) + }, + symlink: function(e, r) { + if (!ve.resolve(e)) throw new be.ErrnoError(2) + var t = be.lookupPath(r, { parent: !0 }).node + if (!t) throw new be.ErrnoError(2) + var n = me.basename(r), + o = be.mayCreate(t, n) + if (o) throw new be.ErrnoError(o) + if (!t.node_ops.symlink) throw new be.ErrnoError(1) + return t.node_ops.symlink(t, n, e) + }, + rename: function(e, r) { + var t, + n, + o = me.dirname(e), + i = me.dirname(r), + a = me.basename(e), + s = me.basename(r) + try { + ;(t = be.lookupPath(e, { parent: !0 }).node), + (n = be.lookupPath(r, { parent: !0 }).node) + } catch (e) { + throw new be.ErrnoError(16) + } + if (!t || !n) throw new be.ErrnoError(2) + if (t.mount !== n.mount) throw new be.ErrnoError(18) + var u, + c = be.lookupNode(t, a), + f = ve.relative(e, i) + if ('.' !== f.charAt(0)) throw new be.ErrnoError(22) + if ('.' !== (f = ve.relative(r, o)).charAt(0)) throw new be.ErrnoError(39) + try { + u = be.lookupNode(n, s) + } catch (e) {} + if (c !== u) { + var l = be.isDir(c.mode), + d = be.mayDelete(t, a, l) + if (d) throw new be.ErrnoError(d) + if ((d = u ? be.mayDelete(n, s, l) : be.mayCreate(n, s))) + throw new be.ErrnoError(d) + if (!t.node_ops.rename) throw new be.ErrnoError(1) + if (be.isMountpoint(c) || (u && be.isMountpoint(u))) + throw new be.ErrnoError(16) + if (n !== t && (d = be.nodePermissions(t, 'w'))) + throw new be.ErrnoError(d) + be.hashRemoveNode(c) + try { + t.node_ops.rename(c, n, s) + } catch (e) { + throw e + } finally { + be.hashAddNode(c) + } + } + }, + rmdir: function(e) { + var r = be.lookupPath(e, { parent: !0 }).node, + t = me.basename(e), + n = be.lookupNode(r, t), + o = be.mayDelete(r, t, !0) + if (o) throw new be.ErrnoError(o) + if (!r.node_ops.rmdir) throw new be.ErrnoError(1) + if (be.isMountpoint(n)) throw new be.ErrnoError(16) + r.node_ops.rmdir(r, t), be.destroyNode(n) + }, + readdir: function(e) { + var r = be.lookupPath(e, { follow: !0 }).node + if (!r.node_ops.readdir) throw new be.ErrnoError(20) + return r.node_ops.readdir(r) + }, + unlink: function(e) { + var r = be.lookupPath(e, { parent: !0 }).node, + t = me.basename(e), + n = be.lookupNode(r, t), + o = be.mayDelete(r, t, !1) + if (o) throw new be.ErrnoError(o) + if (!r.node_ops.unlink) throw new be.ErrnoError(1) + if (be.isMountpoint(n)) throw new be.ErrnoError(16) + r.node_ops.unlink(r, t), be.destroyNode(n) + }, + readlink: function(e) { + var r = be.lookupPath(e).node + if (!r) throw new be.ErrnoError(2) + if (!r.node_ops.readlink) throw new be.ErrnoError(22) + return ve.resolve(be.getPath(r.parent), r.node_ops.readlink(r)) + }, + stat: function(e, r) { + var t = be.lookupPath(e, { follow: !r }).node + if (!t) throw new be.ErrnoError(2) + if (!t.node_ops.getattr) throw new be.ErrnoError(1) + return t.node_ops.getattr(t) + }, + lstat: function(e) { + return be.stat(e, !0) + }, + chmod: function(e, r, t) { + var n + if ( + !(n = 'string' == typeof e ? be.lookupPath(e, { follow: !t }).node : e) + .node_ops.setattr + ) + throw new be.ErrnoError(1) + n.node_ops.setattr(n, { + mode: (4095 & r) | (-4096 & n.mode), + timestamp: Date.now(), + }) + }, + lchmod: function(e, r) { + be.chmod(e, r, !0) + }, + fchmod: function(e, r) { + var t = be.getStream(e) + if (!t) throw new be.ErrnoError(9) + be.chmod(t.node, r) + }, + chown: function(e, r, t, n) { + var o + if ( + !(o = 'string' == typeof e ? be.lookupPath(e, { follow: !n }).node : e) + .node_ops.setattr + ) + throw new be.ErrnoError(1) + o.node_ops.setattr(o, { timestamp: Date.now() }) + }, + lchown: function(e, r, t) { + be.chown(e, r, t, !0) + }, + fchown: function(e, r, t) { + var n = be.getStream(e) + if (!n) throw new be.ErrnoError(9) + be.chown(n.node, r, t) + }, + truncate: function(e, r) { + if (r < 0) throw new be.ErrnoError(22) + var t + if ( + !(t = 'string' == typeof e ? be.lookupPath(e, { follow: !0 }).node : e) + .node_ops.setattr + ) + throw new be.ErrnoError(1) + if (be.isDir(t.mode)) throw new be.ErrnoError(21) + if (!be.isFile(t.mode)) throw new be.ErrnoError(22) + var n = be.nodePermissions(t, 'w') + if (n) throw new be.ErrnoError(n) + t.node_ops.setattr(t, { size: r, timestamp: Date.now() }) + }, + ftruncate: function(e, r) { + var t = be.getStream(e) + if (!t) throw new be.ErrnoError(9) + if (0 == (2097155 & t.flags)) throw new be.ErrnoError(22) + be.truncate(t.node, r) + }, + utime: function(e, r, t) { + var n = be.lookupPath(e, { follow: !0 }).node + n.node_ops.setattr(n, { timestamp: Math.max(r, t) }) + }, + open: function(e, r, t, o, i) { + if ('' === e) throw new be.ErrnoError(2) + var a + if ( + ((t = void 0 === t ? 438 : t), + (t = + 64 & (r = 'string' == typeof r ? be.modeStringToFlags(r) : r) + ? (4095 & t) | 32768 + : 0), + 'object' == typeof e) + ) + a = e + else { + e = me.normalize(e) + try { + a = be.lookupPath(e, { follow: !(131072 & r) }).node + } catch (e) {} + } + var s = !1 + if (64 & r) + if (a) { + if (128 & r) throw new be.ErrnoError(17) + } else (a = be.mknod(e, t, 0)), (s = !0) + if (!a) throw new be.ErrnoError(2) + if ((be.isChrdev(a.mode) && (r &= -513), 65536 & r && !be.isDir(a.mode))) + throw new be.ErrnoError(20) + if (!s) { + var u = be.mayOpen(a, r) + if (u) throw new be.ErrnoError(u) + } + 512 & r && be.truncate(a, 0), (r &= -641) + var c = be.createStream( + { + node: a, + path: be.getPath(a), + flags: r, + seekable: !0, + position: 0, + stream_ops: a.stream_ops, + ungotten: [], + error: !1, + }, + o, + i + ) + return ( + c.stream_ops.open && c.stream_ops.open(c), + !n.logReadFiles || + 1 & r || + (be.readFiles || (be.readFiles = {}), + e in be.readFiles || + ((be.readFiles[e] = 1), + console.log('FS.trackingDelegate error on read file: ' + e))), + c + ) + }, + close: function(e) { + if (be.isClosed(e)) throw new be.ErrnoError(9) + e.getdents && (e.getdents = null) + try { + e.stream_ops.close && e.stream_ops.close(e) + } catch (e) { + throw e + } finally { + be.closeStream(e.fd) + } + e.fd = null + }, + isClosed: function(e) { + return null === e.fd + }, + llseek: function(e, r, t) { + if (be.isClosed(e)) throw new be.ErrnoError(9) + if (!e.seekable || !e.stream_ops.llseek) throw new be.ErrnoError(29) + if (0 != t && 1 != t && 2 != t) throw new be.ErrnoError(22) + return ( + (e.position = e.stream_ops.llseek(e, r, t)), (e.ungotten = []), e.position + ) + }, + read: function(e, r, t, n, o) { + if (n < 0 || o < 0) throw new be.ErrnoError(22) + if (be.isClosed(e)) throw new be.ErrnoError(9) + if (1 == (2097155 & e.flags)) throw new be.ErrnoError(9) + if (be.isDir(e.node.mode)) throw new be.ErrnoError(21) + if (!e.stream_ops.read) throw new be.ErrnoError(22) + var i = void 0 !== o + if (i) { + if (!e.seekable) throw new be.ErrnoError(29) + } else o = e.position + var a = e.stream_ops.read(e, r, t, n, o) + return i || (e.position += a), a + }, + write: function(e, r, t, n, o, i) { + if (n < 0 || o < 0) throw new be.ErrnoError(22) + if (be.isClosed(e)) throw new be.ErrnoError(9) + if (0 == (2097155 & e.flags)) throw new be.ErrnoError(9) + if (be.isDir(e.node.mode)) throw new be.ErrnoError(21) + if (!e.stream_ops.write) throw new be.ErrnoError(22) + 1024 & e.flags && be.llseek(e, 0, 2) + var a = void 0 !== o + if (a) { + if (!e.seekable) throw new be.ErrnoError(29) + } else o = e.position + var s = e.stream_ops.write(e, r, t, n, o, i) + a || (e.position += s) + try { + e.path && + be.trackingDelegate.onWriteToFile && + be.trackingDelegate.onWriteToFile(e.path) + } catch (r) { + console.log( + "FS.trackingDelegate['onWriteToFile']('" + + e.path + + "') threw an exception: " + + r.message + ) + } + return s + }, + allocate: function(e, r, t) { + if (be.isClosed(e)) throw new be.ErrnoError(9) + if (r < 0 || t <= 0) throw new be.ErrnoError(22) + if (0 == (2097155 & e.flags)) throw new be.ErrnoError(9) + if (!be.isFile(e.node.mode) && !be.isDir(e.node.mode)) + throw new be.ErrnoError(19) + if (!e.stream_ops.allocate) throw new be.ErrnoError(95) + e.stream_ops.allocate(e, r, t) + }, + mmap: function(e, r, t, n, o, i, a) { + if (1 == (2097155 & e.flags)) throw new be.ErrnoError(13) + if (!e.stream_ops.mmap) throw new be.ErrnoError(19) + return e.stream_ops.mmap(e, r, t, n, o, i, a) + }, + msync: function(e, r, t, n, o) { + return e && e.stream_ops.msync ? e.stream_ops.msync(e, r, t, n, o) : 0 + }, + munmap: function(e) { + return 0 + }, + ioctl: function(e, r, t) { + if (!e.stream_ops.ioctl) throw new be.ErrnoError(25) + return e.stream_ops.ioctl(e, r, t) + }, + readFile: function(e, r) { + if ( + (((r = r || {}).flags = r.flags || 'r'), + (r.encoding = r.encoding || 'binary'), + 'utf8' !== r.encoding && 'binary' !== r.encoding) + ) + throw new Error('Invalid encoding type "' + r.encoding + '"') + var t, + n = be.open(e, r.flags), + o = be.stat(e).size, + i = new Uint8Array(o) + return ( + be.read(n, i, 0, o, 0), + 'utf8' === r.encoding + ? (t = x(i, 0)) + : 'binary' === r.encoding && (t = i), + be.close(n), + t + ) + }, + writeFile: function(e, r, t) { + ;(t = t || {}).flags = t.flags || 'w' + var n = be.open(e, t.flags, t.mode) + if ('string' == typeof r) { + var o = new Uint8Array(L(r) + 1), + i = z(r, o, 0, o.length) + be.write(n, o, 0, i, void 0, t.canOwn) + } else { + if (!ArrayBuffer.isView(r)) throw new Error('Unsupported data type') + be.write(n, r, 0, r.byteLength, void 0, t.canOwn) + } + be.close(n) + }, + cwd: function() { + return be.currentPath + }, + chdir: function(e) { + var r = be.lookupPath(e, { follow: !0 }) + if (null === r.node) throw new be.ErrnoError(2) + if (!be.isDir(r.node.mode)) throw new be.ErrnoError(20) + var t = be.nodePermissions(r.node, 'x') + if (t) throw new be.ErrnoError(t) + be.currentPath = r.path + }, + createDefaultDirectories: function() { + be.mkdir('/tmp'), be.mkdir('/home'), be.mkdir('/home/web_user') + }, + createDefaultDevices: function() { + var e + if ( + (be.mkdir('/dev'), + be.registerDevice(be.makedev(1, 3), { + read: function() { + return 0 + }, + write: function(e, r, t, n, o) { + return n + }, + }), + be.mkdev('/dev/null', be.makedev(1, 3)), + we.register(be.makedev(5, 0), we.default_tty_ops), + we.register(be.makedev(6, 0), we.default_tty1_ops), + be.mkdev('/dev/tty', be.makedev(5, 0)), + be.mkdev('/dev/tty1', be.makedev(6, 0)), + 'object' == typeof crypto && 'function' == typeof crypto.getRandomValues) + ) { + var r = new Uint8Array(1) + e = function() { + return crypto.getRandomValues(r), r[0] + } + } else if (i) + try { + var t = require('crypto') + e = function() { + return t.randomBytes(1)[0] + } + } catch (e) {} + e || + (e = function() { + Ze('random_device') + }), + be.createDevice('/dev', 'random', e), + be.createDevice('/dev', 'urandom', e), + be.mkdir('/dev/shm'), + be.mkdir('/dev/shm/tmp') + }, + createSpecialDirectories: function() { + be.mkdir('/proc'), + be.mkdir('/proc/self'), + be.mkdir('/proc/self/fd'), + be.mount( + { + mount: function() { + var e = be.createNode('/proc/self', 'fd', 16895, 73) + return ( + (e.node_ops = { + lookup: function(e, r) { + var t = +r, + n = be.getStream(t) + if (!n) throw new be.ErrnoError(9) + var o = { + parent: null, + mount: { mountpoint: 'fake' }, + node_ops: { + readlink: function() { + return n.path + }, + }, + } + return (o.parent = o), o + }, + }), + e + ) + }, + }, + {}, + '/proc/self/fd' + ) + }, + createStandardStreams: function() { + n.stdin + ? be.createDevice('/dev', 'stdin', n.stdin) + : be.symlink('/dev/tty', '/dev/stdin'), + n.stdout + ? be.createDevice('/dev', 'stdout', null, n.stdout) + : be.symlink('/dev/tty', '/dev/stdout'), + n.stderr + ? be.createDevice('/dev', 'stderr', null, n.stderr) + : be.symlink('/dev/tty1', '/dev/stderr'), + be.open('/dev/stdin', 'r'), + be.open('/dev/stdout', 'w'), + be.open('/dev/stderr', 'w') + }, + ensureErrnoError: function() { + be.ErrnoError || + ((be.ErrnoError = function(e, r) { + ;(this.node = r), + (this.setErrno = function(e) { + this.errno = e + }), + this.setErrno(e), + (this.message = 'FS error'), + this.stack && + Object.defineProperty(this, 'stack', { + value: new Error().stack, + writable: !0, + }) + }), + (be.ErrnoError.prototype = new Error()), + (be.ErrnoError.prototype.constructor = be.ErrnoError), + [2].forEach(function(e) { + ;(be.genericErrors[e] = new be.ErrnoError(e)), + (be.genericErrors[e].stack = '') + })) + }, + staticInit: function() { + be.ensureErrnoError(), + (be.nameTable = new Array(4096)), + be.mount(ye, {}, '/'), + be.createDefaultDirectories(), + be.createDefaultDevices(), + be.createSpecialDirectories(), + (be.filesystems = { MEMFS: ye, IDBFS: Ee, NODEFS: ge, WORKERFS: _e }) + }, + init: function(e, r, t) { + ;(be.init.initialized = !0), + be.ensureErrnoError(), + (n.stdin = e || n.stdin), + (n.stdout = r || n.stdout), + (n.stderr = t || n.stderr), + be.createStandardStreams() + }, + quit: function() { + be.init.initialized = !1 + var e = n._fflush + e && e(0) + for (var r = 0; r < be.streams.length; r++) { + var t = be.streams[r] + t && be.close(t) + } + }, + getMode: function(e, r) { + var t = 0 + return e && (t |= 365), r && (t |= 146), t + }, + joinPath: function(e, r) { + var t = me.join.apply(null, e) + return r && '/' == t[0] && (t = t.substr(1)), t + }, + absolutePath: function(e, r) { + return ve.resolve(r, e) + }, + standardizePath: function(e) { + return me.normalize(e) + }, + findObject: function(e, r) { + var t = be.analyzePath(e, r) + return t.exists ? t.object : (he(t.error), null) + }, + analyzePath: function(e, r) { + try { + e = (n = be.lookupPath(e, { follow: !r })).path + } catch (e) {} + var t = { + isRoot: !1, + exists: !1, + error: 0, + name: null, + path: null, + object: null, + parentExists: !1, + parentPath: null, + parentObject: null, + } + try { + var n = be.lookupPath(e, { parent: !0 }) + ;(t.parentExists = !0), + (t.parentPath = n.path), + (t.parentObject = n.node), + (t.name = me.basename(e)), + (n = be.lookupPath(e, { follow: !r })), + (t.exists = !0), + (t.path = n.path), + (t.object = n.node), + (t.name = n.node.name), + (t.isRoot = '/' === n.path) + } catch (e) { + t.error = e.errno + } + return t + }, + createFolder: function(e, r, t, n) { + var o = me.join2('string' == typeof e ? e : be.getPath(e), r), + i = be.getMode(t, n) + return be.mkdir(o, i) + }, + createPath: function(e, r, t, n) { + e = 'string' == typeof e ? e : be.getPath(e) + for (var o = r.split('/').reverse(); o.length; ) { + var i = o.pop() + if (i) { + var a = me.join2(e, i) + try { + be.mkdir(a) + } catch (e) {} + e = a + } + } + return a + }, + createFile: function(e, r, t, n, o) { + var i = me.join2('string' == typeof e ? e : be.getPath(e), r), + a = be.getMode(n, o) + return be.create(i, a) + }, + createDataFile: function(e, r, t, n, o, i) { + var a = r ? me.join2('string' == typeof e ? e : be.getPath(e), r) : e, + s = be.getMode(n, o), + u = be.create(a, s) + if (t) { + if ('string' == typeof t) { + for (var c = new Array(t.length), f = 0, l = t.length; f < l; ++f) + c[f] = t.charCodeAt(f) + t = c + } + be.chmod(u, 146 | s) + var d = be.open(u, 'w') + be.write(d, t, 0, t.length, 0, i), be.close(d), be.chmod(u, s) + } + return u + }, + createDevice: function(e, r, t, n) { + var o = me.join2('string' == typeof e ? e : be.getPath(e), r), + i = be.getMode(!!t, !!n) + be.createDevice.major || (be.createDevice.major = 64) + var a = be.makedev(be.createDevice.major++, 0) + return ( + be.registerDevice(a, { + open: function(e) { + e.seekable = !1 + }, + close: function(e) { + n && n.buffer && n.buffer.length && n(10) + }, + read: function(e, r, n, o, i) { + for (var a = 0, s = 0; s < o; s++) { + var u + try { + u = t() + } catch (e) { + throw new be.ErrnoError(5) + } + if (void 0 === u && 0 === a) throw new be.ErrnoError(11) + if (null == u) break + a++, (r[n + s] = u) + } + return a && (e.node.timestamp = Date.now()), a + }, + write: function(e, r, t, o, i) { + for (var a = 0; a < o; a++) + try { + n(r[t + a]) + } catch (e) { + throw new be.ErrnoError(5) + } + return o && (e.node.timestamp = Date.now()), a + }, + }), + be.mkdev(o, i, a) + ) + }, + createLink: function(e, r, t, n, o) { + var i = me.join2('string' == typeof e ? e : be.getPath(e), r) + return be.symlink(t, i) + }, + forceLoadFile: function(e) { + if (e.isDevice || e.isFolder || e.link || e.contents) return !0 + var r = !0 + if ('undefined' != typeof XMLHttpRequest) + throw new Error( + 'Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.' + ) + if (!n.read) + throw new Error('Cannot load without read() or XMLHttpRequest.') + try { + ;(e.contents = Ne(n.read(e.url), !0)), (e.usedBytes = e.contents.length) + } catch (e) { + r = !1 + } + return r || he(5), r + }, + createLazyFile: function(e, r, t, n, o) { + function i() { + ;(this.lengthKnown = !1), (this.chunks = []) + } + if ( + ((i.prototype.get = function(e) { + if (!(e > this.length - 1 || e < 0)) { + var r = e % this.chunkSize, + t = (e / this.chunkSize) | 0 + return this.getter(t)[r] + } + }), + (i.prototype.setDataGetter = function(e) { + this.getter = e + }), + (i.prototype.cacheLength = function() { + var e = new XMLHttpRequest() + if ( + (e.open('HEAD', t, !1), + e.send(null), + !((e.status >= 200 && e.status < 300) || 304 === e.status)) + ) + throw new Error("Couldn't load " + t + '. Status: ' + e.status) + var r, + n = Number(e.getResponseHeader('Content-length')), + o = (r = e.getResponseHeader('Accept-Ranges')) && 'bytes' === r, + i = (r = e.getResponseHeader('Content-Encoding')) && 'gzip' === r, + a = 1048576 + o || (a = n) + var s = this + s.setDataGetter(function(e) { + var r = e * a, + o = (e + 1) * a - 1 + if ( + ((o = Math.min(o, n - 1)), + void 0 === s.chunks[e] && + (s.chunks[e] = (function(e, r) { + if (e > r) + throw new Error( + 'invalid range (' + + e + + ', ' + + r + + ') or no bytes requested!' + ) + if (r > n - 1) + throw new Error( + 'only ' + n + ' bytes available! programmer error!' + ) + var o = new XMLHttpRequest() + if ( + (o.open('GET', t, !1), + n !== a && + o.setRequestHeader('Range', 'bytes=' + e + '-' + r), + 'undefined' != typeof Uint8Array && + (o.responseType = 'arraybuffer'), + o.overrideMimeType && + o.overrideMimeType('text/plain; charset=x-user-defined'), + o.send(null), + !((o.status >= 200 && o.status < 300) || 304 === o.status)) + ) + throw new Error( + "Couldn't load " + t + '. Status: ' + o.status + ) + return void 0 !== o.response + ? new Uint8Array(o.response || []) + : Ne(o.responseText || '', !0) + })(r, o)), + void 0 === s.chunks[e]) + ) + throw new Error('doXHR failed!') + return s.chunks[e] + }), + (!i && n) || + ((a = n = 1), + (n = this.getter(0).length), + (a = n), + console.log( + 'LazyFiles on gzip forces download of the whole file when length is accessed' + )), + (this._length = n), + (this._chunkSize = a), + (this.lengthKnown = !0) + }), + 'undefined' != typeof XMLHttpRequest) + ) { + if (!u) + throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc' + var a = new i() + Object.defineProperties(a, { + length: { + get: function() { + return this.lengthKnown || this.cacheLength(), this._length + }, + }, + chunkSize: { + get: function() { + return this.lengthKnown || this.cacheLength(), this._chunkSize + }, + }, + }) + var s = { isDevice: !1, contents: a } + } else s = { isDevice: !1, url: t } + var c = be.createFile(e, r, s, n, o) + s.contents + ? (c.contents = s.contents) + : s.url && ((c.contents = null), (c.url = s.url)), + Object.defineProperties(c, { + usedBytes: { + get: function() { + return this.contents.length + }, + }, + }) + var f = {} + return ( + Object.keys(c.stream_ops).forEach(function(e) { + var r = c.stream_ops[e] + f[e] = function() { + if (!be.forceLoadFile(c)) throw new be.ErrnoError(5) + return r.apply(null, arguments) + } + }), + (f.read = function(e, r, t, n, o) { + if (!be.forceLoadFile(c)) throw new be.ErrnoError(5) + var i = e.node.contents + if (o >= i.length) return 0 + var a = Math.min(i.length - o, n) + if (i.slice) for (var s = 0; s < a; s++) r[t + s] = i[o + s] + else for (s = 0; s < a; s++) r[t + s] = i.get(o + s) + return a + }), + (c.stream_ops = f), + c + ) + }, + createPreloadedFile: function(e, r, t, o, i, a, s, u, c, f) { + Browser.init() + var l = r ? ve.resolve(me.join2(e, r)) : e + function d(t) { + function d(t) { + f && f(), u || be.createDataFile(e, r, t, o, i, c), a && a(), ae() + } + var p = !1 + n.preloadPlugins.forEach(function(e) { + p || + (e.canHandle(l) && + (e.handle(t, l, d, function() { + s && s(), ae() + }), + (p = !0))) + }), + p || d(t) + } + ie(), + 'string' == typeof t + ? Browser.asyncLoad( + t, + function(e) { + d(e) + }, + s + ) + : d(t) + }, + indexedDB: function() { + return ( + window.indexedDB || + window.mozIndexedDB || + window.webkitIndexedDB || + window.msIndexedDB + ) + }, + DB_NAME: function() { + return 'EM_FS_' + window.location.pathname + }, + DB_VERSION: 20, + DB_STORE_NAME: 'FILE_DATA', + saveFilesToDB: function(e, r, t) { + ;(r = r || function() {}), (t = t || function() {}) + var n = be.indexedDB() + try { + var o = n.open(be.DB_NAME(), be.DB_VERSION) + } catch (e) { + return t(e) + } + ;(o.onupgradeneeded = function() { + console.log('creating db'), o.result.createObjectStore(be.DB_STORE_NAME) + }), + (o.onsuccess = function() { + var n = o.result.transaction([be.DB_STORE_NAME], 'readwrite'), + i = n.objectStore(be.DB_STORE_NAME), + a = 0, + s = 0, + u = e.length + function c() { + 0 == s ? r() : t() + } + e.forEach(function(e) { + var r = i.put(be.analyzePath(e).object.contents, e) + ;(r.onsuccess = function() { + ++a + s == u && c() + }), + (r.onerror = function() { + a + ++s == u && c() + }) + }), + (n.onerror = t) + }), + (o.onerror = t) + }, + loadFilesFromDB: function(e, r, t) { + ;(r = r || function() {}), (t = t || function() {}) + var n = be.indexedDB() + try { + var o = n.open(be.DB_NAME(), be.DB_VERSION) + } catch (e) { + return t(e) + } + ;(o.onupgradeneeded = t), + (o.onsuccess = function() { + var n = o.result + try { + var i = n.transaction([be.DB_STORE_NAME], 'readonly') + } catch (e) { + return void t(e) + } + var a = i.objectStore(be.DB_STORE_NAME), + s = 0, + u = 0, + c = e.length + function f() { + 0 == u ? r() : t() + } + e.forEach(function(e) { + var r = a.get(e) + ;(r.onsuccess = function() { + be.analyzePath(e).exists && be.unlink(e), + be.createDataFile( + me.dirname(e), + me.basename(e), + r.result, + !0, + !0, + !0 + ), + ++s + u == c && f() + }), + (r.onerror = function() { + s + ++u == c && f() + }) + }), + (i.onerror = t) + }), + (o.onerror = t) + }, + }, + ke = { + DEFAULT_POLLMASK: 5, + mappings: {}, + umask: 511, + calculateAt: function(e, r) { + if ('/' !== r[0]) { + var t + if (-100 === e) t = be.cwd() + else { + var n = be.getStream(e) + if (!n) throw new be.ErrnoError(9) + t = n.path + } + r = me.join2(t, r) + } + return r + }, + doStat: function(e, r, t) { + try { + var n = e(r) + } catch (e) { + if (e && e.node && me.normalize(r) !== me.normalize(be.getPath(e.node))) + return -20 + throw e + } + return ( + (M[t >> 2] = n.dev), + (M[(t + 4) >> 2] = 0), + (M[(t + 8) >> 2] = n.ino), + (M[(t + 12) >> 2] = n.mode), + (M[(t + 16) >> 2] = n.nlink), + (M[(t + 20) >> 2] = n.uid), + (M[(t + 24) >> 2] = n.gid), + (M[(t + 28) >> 2] = n.rdev), + (M[(t + 32) >> 2] = 0), + (tempI64 = [ + n.size >>> 0, + ((tempDouble = n.size), + +J(tempDouble) >= 1 + ? tempDouble > 0 + ? (0 | re(+ee(tempDouble / 4294967296), 4294967295)) >>> 0 + : ~~+Q((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 + : 0), + ]), + (M[(t + 40) >> 2] = tempI64[0]), + (M[(t + 44) >> 2] = tempI64[1]), + (M[(t + 48) >> 2] = 4096), + (M[(t + 52) >> 2] = n.blocks), + (M[(t + 56) >> 2] = (n.atime.getTime() / 1e3) | 0), + (M[(t + 60) >> 2] = 0), + (M[(t + 64) >> 2] = (n.mtime.getTime() / 1e3) | 0), + (M[(t + 68) >> 2] = 0), + (M[(t + 72) >> 2] = (n.ctime.getTime() / 1e3) | 0), + (M[(t + 76) >> 2] = 0), + (tempI64 = [ + n.ino >>> 0, + ((tempDouble = n.ino), + +J(tempDouble) >= 1 + ? tempDouble > 0 + ? (0 | re(+ee(tempDouble / 4294967296), 4294967295)) >>> 0 + : ~~+Q((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 + : 0), + ]), + (M[(t + 80) >> 2] = tempI64[0]), + (M[(t + 84) >> 2] = tempI64[1]), + 0 + ) + }, + doMsync: function(e, r, t, n) { + var o = new Uint8Array(T.subarray(e, e + t)) + be.msync(r, o, 0, t, n) + }, + doMkdir: function(e, r) { + return ( + '/' === (e = me.normalize(e))[e.length - 1] && + (e = e.substr(0, e.length - 1)), + be.mkdir(e, r, 0), + 0 + ) + }, + doMknod: function(e, r, t) { + switch (61440 & r) { + case 32768: + case 8192: + case 24576: + case 4096: + case 49152: + break + default: + return -22 + } + return be.mknod(e, r, t), 0 + }, + doReadlink: function(e, r, t) { + if (t <= 0) return -22 + var n = be.readlink(e), + o = Math.min(t, L(n)), + i = R[r + o] + return C(n, r, t + 1), (R[r + o] = i), o + }, + doAccess: function(e, r) { + if (-8 & r) return -22 + var t + t = be.lookupPath(e, { follow: !0 }).node + var n = '' + return ( + 4 & r && (n += 'r'), + 2 & r && (n += 'w'), + 1 & r && (n += 'x'), + n && be.nodePermissions(t, n) ? -13 : 0 + ) + }, + doDup: function(e, r, t) { + var n = be.getStream(t) + return n && be.close(n), be.open(e, r, 0, t, t).fd + }, + doReadv: function(e, r, t, n) { + for (var o = 0, i = 0; i < t; i++) { + var a = M[(r + 8 * i) >> 2], + s = M[(r + (8 * i + 4)) >> 2], + u = be.read(e, R, a, s, n) + if (u < 0) return -1 + if (((o += u), u < s)) break + } + return o + }, + doWritev: function(e, r, t, n) { + for (var o = 0, i = 0; i < t; i++) { + var a = M[(r + 8 * i) >> 2], + s = M[(r + (8 * i + 4)) >> 2], + u = be.write(e, R, a, s, n) + if (u < 0) return -1 + o += u + } + return o + }, + varargs: 0, + get: function(e) { + return (ke.varargs += 4), M[(ke.varargs - 4) >> 2] + }, + getStr: function() { + return I(ke.get()) + }, + getStreamFromFD: function() { + var e = be.getStream(ke.get()) + if (!e) throw new be.ErrnoError(9) + return e + }, + get64: function() { + var e = ke.get() + return ke.get(), e + }, + getZero: function() { + ke.get() + }, + }, + De = 11, + Se = 22, + Fe = { + BUCKET_BUFFER_SIZE: 8192, + mount: function(e) { + return be.createNode(null, '/', 16895, 0) + }, + createPipe: function() { + var e = { buckets: [] } + e.buckets.push({ + buffer: new Uint8Array(Fe.BUCKET_BUFFER_SIZE), + offset: 0, + roffset: 0, + }) + var r = Fe.nextname(), + t = Fe.nextname(), + n = be.createNode(Fe.root, r, 4096, 0), + o = be.createNode(Fe.root, t, 4096, 0) + ;(n.pipe = e), (o.pipe = e) + var i = be.createStream({ + path: r, + node: n, + flags: be.modeStringToFlags('r'), + seekable: !1, + stream_ops: Fe.stream_ops, + }) + n.stream = i + var a = be.createStream({ + path: t, + node: o, + flags: be.modeStringToFlags('w'), + seekable: !1, + stream_ops: Fe.stream_ops, + }) + return (o.stream = a), { readable_fd: i.fd, writable_fd: a.fd } + }, + stream_ops: { + poll: function(e) { + var r = e.node.pipe + if (1 == (2097155 & e.flags)) return 260 + if (r.buckets.length > 0) + for (var t = 0; t < r.buckets.length; t++) { + var n = r.buckets[t] + if (n.offset - n.roffset > 0) return 65 + } + return 0 + }, + ioctl: function(e, r, t) { + return Se + }, + read: function(e, r, t, n, o) { + for (var i = e.node.pipe, a = 0, s = 0; s < i.buckets.length; s++) { + var u = i.buckets[s] + a += u.offset - u.roffset + } + E(r instanceof ArrayBuffer || ArrayBuffer.isView(r)) + var c = r.subarray(t, t + n) + if (n <= 0) return 0 + if (0 == a) throw new be.ErrnoError(De) + var f = Math.min(a, n), + l = f, + d = 0 + for (s = 0; s < i.buckets.length; s++) { + var p = i.buckets[s], + m = p.offset - p.roffset + if (f <= m) { + var h = p.buffer.subarray(p.roffset, p.offset) + f < m ? ((h = h.subarray(0, f)), (p.roffset += f)) : d++, c.set(h) + break + } + ;(h = p.buffer.subarray(p.roffset, p.offset)), + c.set(h), + (c = c.subarray(h.byteLength)), + (f -= h.byteLength), + d++ + } + return ( + d && + d == i.buckets.length && + (d--, (i.buckets[d].offset = 0), (i.buckets[d].roffset = 0)), + i.buckets.splice(0, d), + l + ) + }, + write: function(e, r, t, n, o) { + var i = e.node.pipe + E(r instanceof ArrayBuffer || ArrayBuffer.isView(r)) + var a = r.subarray(t, t + n), + s = a.byteLength + if (s <= 0) return 0 + var u = null + 0 == i.buckets.length + ? ((u = { + buffer: new Uint8Array(Fe.BUCKET_BUFFER_SIZE), + offset: 0, + roffset: 0, + }), + i.buckets.push(u)) + : (u = i.buckets[i.buckets.length - 1]), + E(u.offset <= Fe.BUCKET_BUFFER_SIZE) + var c = Fe.BUCKET_BUFFER_SIZE - u.offset + if (c >= s) return u.buffer.set(a, u.offset), (u.offset += s), s + c > 0 && + (u.buffer.set(a.subarray(0, c), u.offset), + (u.offset += c), + (a = a.subarray(c, a.byteLength))) + for ( + var f = (a.byteLength / Fe.BUCKET_BUFFER_SIZE) | 0, + l = a.byteLength % Fe.BUCKET_BUFFER_SIZE, + d = 0; + d < f; + d++ + ) { + var p = { + buffer: new Uint8Array(Fe.BUCKET_BUFFER_SIZE), + offset: Fe.BUCKET_BUFFER_SIZE, + roffset: 0, + } + i.buckets.push(p), + p.buffer.set(a.subarray(0, Fe.BUCKET_BUFFER_SIZE)), + (a = a.subarray(Fe.BUCKET_BUFFER_SIZE, a.byteLength)) + } + return ( + l > 0 && + ((p = { + buffer: new Uint8Array(Fe.BUCKET_BUFFER_SIZE), + offset: a.byteLength, + roffset: 0, + }), + i.buckets.push(p), + p.buffer.set(a)), + s + ) + }, + close: function(e) { + e.node.pipe.buckets = null + }, + }, + nextname: function() { + return ( + Fe.nextname.current || (Fe.nextname.current = 0), + 'pipe[' + Fe.nextname.current++ + ']' + ) + }, + } + function Ae() { + return R.length + } + function Re(e) { + var r = Ae() + if (e > 2147418112) return !1 + for (var t = Math.max(r, 16777216); t < e; ) + t = + t <= 536870912 + ? H(2 * t, 65536) + : Math.min(H((3 * t + 2147483648) / 4, 65536), 2147418112) + return ( + !!(function(e) { + e = H(e, 65536) + var r = A.byteLength + try { + return -1 !== v.grow((e - r) / 65536) && ((A = v.buffer), !0) + } catch (e) { + return !1 + } + })(t) && (W(), !0) + ) + } + var Te = 277408 + function Pe() { + if (!Pe.called) { + ;(Pe.called = !0), (M[Ce() >> 2] = 60 * new Date().getTimezoneOffset()) + var e = new Date(2e3, 0, 1), + r = new Date(2e3, 6, 1) + M[ze() >> 2] = Number(e.getTimezoneOffset() != r.getTimezoneOffset()) + var t = a(e), + n = a(r), + o = S(Ne(t), 'i8', k), + i = S(Ne(n), 'i8', k) + r.getTimezoneOffset() < e.getTimezoneOffset() + ? ((M[Le() >> 2] = o), (M[(Le() + 4) >> 2] = i)) + : ((M[Le() >> 2] = i), (M[(Le() + 4) >> 2] = o)) + } + function a(e) { + var r = e.toTimeString().match(/\(([A-Za-z ]+)\)$/) + return r ? r[1] : 'GMT' + } + } + if ((C('GMT', 277456, 4), be.staticInit(), i)) { + var Me = require('fs'), + Be = require('path') + ge.staticInit() + } + function Ne(e, r, t) { + var n = t > 0 ? t : L(e) + 1, + o = new Array(n), + i = z(e, o, 0, o.length) + return r && (o.length = i), o + } + var Oe = { + b: Ze, + q: function(e) {}, + G: function e(r) { + var t, o + e.called + ? ((o = M[r >> 2]), (t = M[o >> 2])) + : ((e.called = !0), + (pe.USER = pe.LOGNAME = 'web_user'), + (pe.PATH = '/'), + (pe.PWD = '/'), + (pe.HOME = '/home/web_user'), + (pe.LANG = 'C.UTF-8'), + (pe._ = n.thisProgram), + (t = F(1024)), + (o = F(256)), + (M[o >> 2] = t), + (M[r >> 2] = o)) + var i = [], + a = 0 + for (var s in pe) + if ('string' == typeof pe[s]) { + var u = s + '=' + pe[s] + i.push(u), (a += u.length) + } + if (a > 1024) throw new Error('Environment size exceeded TOTAL_ENV_SIZE!') + for (var c = 0; c < i.length; c++) + U((u = i[c]), t), (M[(o + 4 * c) >> 2] = t), (t += u.length + 1) + M[(o + 4 * i.length) >> 2] = 0 + }, + l: he, + s: function(e, r) { + ke.varargs = r + try { + var t = ke.getStreamFromFD(), + n = ke.get(), + o = ke.get(), + i = ke.get(), + a = ke.get() + if (!((-1 == n && o < 0) || (0 == n && o >= 0))) return -75 + var s = o + return ( + be.llseek(t, s, a), + (tempI64 = [ + t.position >>> 0, + ((tempDouble = t.position), + +J(tempDouble) >= 1 + ? tempDouble > 0 + ? (0 | re(+ee(tempDouble / 4294967296), 4294967295)) >>> 0 + : ~~+Q((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 + : 0), + ]), + (M[i >> 2] = tempI64[0]), + (M[(i + 4) >> 2] = tempI64[1]), + t.getdents && 0 === s && 0 === a && (t.getdents = null), + 0 + ) + } catch (e) { + return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno + } + }, + i: function(e, r) { + ke.varargs = r + try { + var t = ke.getStreamFromFD(), + n = ke.get(), + o = ke.get() + return ke.doWritev(t, n, o) + } catch (e) { + return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno + } + }, + p: function(e, r) { + ke.varargs = r + try { + for ( + var t = ke.get(), n = ke.get(), o = (ke.get(), 0), i = 0; + i < n; + i++ + ) { + var a = t + 8 * i, + s = M[a >> 2], + u = P[(a + 4) >> 1], + c = 32, + f = be.getStream(s) + f && + ((c = ke.DEFAULT_POLLMASK), + f.stream_ops.poll && (c = f.stream_ops.poll(f))), + (c &= 24 | u) && o++, + (P[(a + 6) >> 1] = c) + } + return o + } catch (e) { + return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno + } + }, + o: function(e, r) { + ke.varargs = r + try { + var t = ke.getStr(), + n = ke.get() + return ke.doStat(be.stat, t, n) + } catch (e) { + return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno + } + }, + n: function(e, r) { + ke.varargs = r + try { + var t = ke.getStr(), + n = ke.get() + return ke.doStat(be.lstat, t, n) + } catch (e) { + return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno + } + }, + m: function(e, r) { + ke.varargs = r + try { + var t = ke.getStreamFromFD(), + n = ke.get() + return ke.doStat(be.stat, t.path, n) + } catch (e) { + return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno + } + }, + c: function(e, r) { + ke.varargs = r + try { + var t = ke.getStreamFromFD() + switch (ke.get()) { + case 0: + return (n = ke.get()) < 0 ? -22 : be.open(t.path, t.flags, 0, n).fd + case 1: + case 2: + return 0 + case 3: + return t.flags + case 4: + var n = ke.get() + return (t.flags |= n), 0 + case 12: + return (n = ke.get()), (P[(n + 0) >> 1] = 2), 0 + case 13: + case 14: + return 0 + case 16: + case 8: + return -22 + case 9: + return he(22), -1 + default: + return -22 + } + } catch (e) { + return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno + } + }, + F: function(e, r) { + ke.varargs = r + try { + var t = ke.getStreamFromFD(), + n = ke.get(), + o = ke.get() + return be.read(t, R, n, o) + } catch (e) { + return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno + } + }, + E: function(e, r) { + ke.varargs = r + try { + var t = ke.getStreamFromFD(), + n = ke.get(), + o = ke.get() + return be.write(t, R, n, o) + } catch (e) { + return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno + } + }, + D: function(e, r) { + ke.varargs = r + try { + var t = ke.getStreamFromFD() + return be.open(t.path, t.flags, 0).fd + } catch (e) { + return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno + } + }, + C: function(e, r) { + ke.varargs = r + try { + var t = ke.get() + if (0 == t) throw new be.ErrnoError(14) + var n = Fe.createPipe() + return (M[t >> 2] = n.readable_fd), (M[(t + 4) >> 2] = n.writable_fd), 0 + } catch (e) { + return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno + } + }, + B: function(e, r) { + ke.varargs = r + try { + var t = ke.getStr(), + n = ke.get(), + o = ke.get() + return be.open(t, n, o).fd + } catch (e) { + return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno + } + }, + h: function(e, r) { + ke.varargs = r + try { + var t = ke.getStreamFromFD() + return be.close(t), 0 + } catch (e) { + return (void 0 !== be && e instanceof be.ErrnoError) || Ze(e), -e.errno + } + }, + g: function() { + n.abort() + }, + A: Ae, + z: function(e, r, t) { + T.set(T.subarray(r, r + t), e) + }, + y: Re, + f: function(e) { + !(function(e, r) { + ;(r && n.noExitRuntime && 0 === e) || + (n.noExitRuntime || ((y = !0), n.onExit && n.onExit(e)), + n.quit(e, new qe(e))) + })(e) + }, + x: function(e) { + return (function(e, r) { + Pe() + var t = new Date(1e3 * M[e >> 2]) + ;(M[r >> 2] = t.getSeconds()), + (M[(r + 4) >> 2] = t.getMinutes()), + (M[(r + 8) >> 2] = t.getHours()), + (M[(r + 12) >> 2] = t.getDate()), + (M[(r + 16) >> 2] = t.getMonth()), + (M[(r + 20) >> 2] = t.getFullYear() - 1900), + (M[(r + 24) >> 2] = t.getDay()) + var n = new Date(t.getFullYear(), 0, 1), + o = ((t.getTime() - n.getTime()) / 864e5) | 0 + ;(M[(r + 28) >> 2] = o), (M[(r + 36) >> 2] = -60 * t.getTimezoneOffset()) + var i = new Date(2e3, 6, 1).getTimezoneOffset(), + a = n.getTimezoneOffset(), + s = 0 | (i != a && t.getTimezoneOffset() == Math.min(a, i)) + M[(r + 32) >> 2] = s + var u = M[(Le() + (s ? 4 : 0)) >> 2] + return (M[(r + 40) >> 2] = u), r + })(e, Te) + }, + d: function(e) { + Pe() + var r = new Date( + M[(e + 20) >> 2] + 1900, + M[(e + 16) >> 2], + M[(e + 12) >> 2], + M[(e + 8) >> 2], + M[(e + 4) >> 2], + M[e >> 2], + 0 + ), + t = M[(e + 32) >> 2], + n = r.getTimezoneOffset(), + o = new Date(r.getFullYear(), 0, 1), + i = new Date(2e3, 6, 1).getTimezoneOffset(), + a = o.getTimezoneOffset(), + s = Math.min(a, i) + if (t < 0) M[(e + 32) >> 2] = Number(i != a && s == n) + else if (t > 0 != (s == n)) { + var u = Math.max(a, i), + c = t > 0 ? s : u + r.setTime(r.getTime() + 6e4 * (c - n)) + } + M[(e + 24) >> 2] = r.getDay() + var f = ((r.getTime() - o.getTime()) / 864e5) | 0 + return (M[(e + 28) >> 2] = f), (r.getTime() / 1e3) | 0 + }, + e: function() { + p('missing function: posix_spawn_file_actions_addclose'), Ze(-1) + }, + k: function() { + p('missing function: posix_spawn_file_actions_adddup2'), Ze(-1) + }, + j: function() { + p('missing function: posix_spawn_file_actions_destroy'), Ze(-1) + }, + w: function() { + p('missing function: posix_spawn_file_actions_init'), Ze(-1) + }, + v: function() { + return function() { + return he(11), -1 + }.apply(null, arguments) + }, + u: function(e) { + Pe() + var r = Date.UTC( + M[(e + 20) >> 2] + 1900, + M[(e + 16) >> 2], + M[(e + 12) >> 2], + M[(e + 8) >> 2], + M[(e + 4) >> 2], + M[e >> 2], + 0 + ), + t = new Date(r) + M[(e + 24) >> 2] = t.getUTCDay() + var n = Date.UTC(t.getUTCFullYear(), 0, 1, 0, 0, 0, 0), + o = ((t.getTime() - n) / 864e5) | 0 + return (M[(e + 28) >> 2] = o), (t.getTime() / 1e3) | 0 + }, + t: function() { + return function(e) { + return he(10), -1 + }.apply(null, arguments) + }, + r: function(e) { + Ze('OOM') + }, + a: q, + }, + xe = n.asm({}, Oe, A) + n.asm = xe + var Ie = (n.___emscripten_environ_constructor = function() { + return n.asm.H.apply(null, arguments) + }), + ze = + ((n.___errno_location = function() { + return n.asm.I.apply(null, arguments) + }), + (n.__get_daylight = function() { + return n.asm.J.apply(null, arguments) + })), + Ce = (n.__get_timezone = function() { + return n.asm.K.apply(null, arguments) + }), + Le = (n.__get_tzname = function() { + return n.asm.L.apply(null, arguments) + }), + Ue = + ((n._archive_close = function() { + return n.asm.M.apply(null, arguments) + }), + (n._archive_entry_filetype = function() { + return n.asm.N.apply(null, arguments) + }), + (n._archive_entry_is_encrypted = function() { + return n.asm.O.apply(null, arguments) + }), + (n._archive_entry_pathname = function() { + return n.asm.P.apply(null, arguments) + }), + (n._archive_entry_pathname_utf8 = function() { + return n.asm.Q.apply(null, arguments) + }), + (n._archive_entry_size = function() { + return n.asm.R.apply(null, arguments) + }), + (n._archive_error_string = function() { + return n.asm.S.apply(null, arguments) + }), + (n._archive_open = function() { + return n.asm.T.apply(null, arguments) + }), + (n._archive_read_add_passphrase = function() { + return n.asm.U.apply(null, arguments) + }), + (n._archive_read_data_skip = function() { + return n.asm.V.apply(null, arguments) + }), + (n._archive_read_has_encrypted_entries = function() { + return n.asm.W.apply(null, arguments) + }), + (n._free = function() { + return n.asm.X.apply(null, arguments) + }), + (n._get_filedata = function() { + return n.asm.Y.apply(null, arguments) + }), + (n._get_next_entry = function() { + return n.asm.Z.apply(null, arguments) + }), + (n._get_version = function() { + return n.asm._.apply(null, arguments) + }), + (n._malloc = function() { + return n.asm.$.apply(null, arguments) + })), + je = (n.stackAlloc = function() { + return n.asm.ca.apply(null, arguments) + }), + He = (n.stackRestore = function() { + return n.asm.da.apply(null, arguments) + }), + We = (n.stackSave = function() { + return n.asm.ea.apply(null, arguments) + }) + function qe(e) { + ;(this.name = 'ExitStatus'), + (this.message = 'Program terminated with exit(' + e + ')'), + (this.status = e) + } + function Ke(e) { + function r() { + n.calledRun || + ((n.calledRun = !0), + y || + ($ || + (($ = !0), + n.noFSInit || be.init.initialized || be.init(), + (Fe.root = be.mount(Fe, {}, null)), + Z(X)), + (be.ignorePermissions = !1), + Z(Y), + n.onRuntimeInitialized && n.onRuntimeInitialized(), + (function() { + if (n.postRun) + for ( + 'function' == typeof n.postRun && (n.postRun = [n.postRun]); + n.postRun.length; + + ) + (e = n.postRun.shift()), G.unshift(e) + var e + Z(G) + })())) + } + ;(e = e || n.arguments), + te > 0 || + ((function() { + if (n.preRun) + for ( + 'function' == typeof n.preRun && (n.preRun = [n.preRun]); + n.preRun.length; + + ) + (e = n.preRun.shift()), V.unshift(e) + var e + Z(V) + })(), + te > 0 || + n.calledRun || + (n.setStatus + ? (n.setStatus('Running...'), + setTimeout(function() { + setTimeout(function() { + n.setStatus('') + }, 1), + r() + }, 1)) + : r())) + } + function Ze(e) { + throw (n.onAbort && n.onAbort(e), + void 0 !== e ? (d(e), p(e), (e = JSON.stringify(e))) : (e = ''), + (y = !0), + 'abort(' + e + '). Build with -s ASSERTIONS=1 for more info.') + } + if ( + ((n.dynCall_v = function() { + return n.asm.aa.apply(null, arguments) + }), + (n.dynCall_vi = function() { + return n.asm.ba.apply(null, arguments) + }), + (n.asm = xe), + (n.intArrayFromString = Ne), + (n.cwrap = function(e, r, t, n) { + var o = (t = t || []).every(function(e) { + return 'number' === e + }) + return 'string' !== r && o && !n + ? g(e) + : function() { + return _(e, r, t, arguments) + } + }), + (n.allocate = S), + (n.then = function(e) { + if (n.calledRun) e(n) + else { + var r = n.onRuntimeInitialized + n.onRuntimeInitialized = function() { + r && r(), e(n) + } + } + return n + }), + (qe.prototype = new Error()), + (qe.prototype.constructor = qe), + (oe = function e() { + n.calledRun || Ke(), n.calledRun || (oe = e) + }), + (n.run = Ke), + (n.abort = Ze), + n.preInit) + ) + for ( + 'function' == typeof n.preInit && (n.preInit = [n.preInit]); + n.preInit.length > 0; + + ) + n.preInit.pop()() + return (n.noExitRuntime = !0), Ke(), e + }) + class o { + constructor() { + ;(this.preRun = []), (this.postRun = []), (this.totalDependencies = 0) + } + print(...e) { + console.log(e) + } + printErr(...e) { + console.error(e) + } + initFunctions() { + this.runCode = { + getVersion: this.cwrap('get_version', 'string', []), + openArchive: this.cwrap('archive_open', 'number', ['number', 'number', 'string']), + getNextEntry: this.cwrap('get_next_entry', 'number', ['number']), + getFileData: this.cwrap('get_filedata', 'number', ['number', 'number']), + skipEntry: this.cwrap('archive_read_data_skip', 'number', ['number']), + closeArchive: this.cwrap('archive_close', null, ['number']), + getEntrySize: this.cwrap('archive_entry_size', 'number', ['number']), + getEntryName: this.cwrap('archive_entry_pathname', 'string', ['number']), + getEntryType: this.cwrap('archive_entry_filetype', 'number', ['number']), + getError: this.cwrap('archive_error_string', 'string', ['number']), + entryIsEncrypted: this.cwrap('archive_entry_is_encrypted', 'number', ['number']), + hasEncryptedEntries: this.cwrap('archive_read_has_encrypted_entries', 'number', [ + 'number', + ]), + addPassphrase: this.cwrap('archive_read_add_passphrase', 'number', [ + 'number', + 'string', + ]), + string: e => this.allocate(this.intArrayFromString(e), 'i8', 0), + malloc: this.cwrap('malloc', 'number', ['number']), + free: this.cwrap('free', null, ['number']), + } + } + monitorRunDependencies() {} + locateFile(e) { + return `wasm-gen/${e}` + } + } + let i = null, + a = !1 + var s + ;(s = e => { + ;(i = new r(e)), (a = !1), self.postMessage({ type: 'READY' }) + }), + n(new o()).then(e => { + e.initFunctions(), s(e) + }), + (self.onmessage = async ({ data: e }) => { + if (a) return void self.postMessage({ type: 'BUSY' }) + let r = !1 + a = !0 + try { + switch (e.type) { + case 'HELLO': + break + case 'OPEN': + await i.open(e.file), self.postMessage({ type: 'OPENED' }) + break + case 'LIST_FILES': + r = !0 + case 'EXTRACT_FILES': + for (const e of i.entries(r)) self.postMessage({ type: 'ENTRY', entry: e }) + self.postMessage({ type: 'END' }) + break + case 'EXTRACT_SINGLE_FILE': + for (const r of i.entries(!0, e.target)) + r.fileData && self.postMessage({ type: 'FILE', entry: r }) + break + case 'CHECK_ENCRYPTION': + self.postMessage({ type: 'ENCRYPTION_STATUS', status: i.hasEncryptedData() }) + break + case 'SET_PASSPHRASE': + i.setPassphrase(e.passphrase), + self.postMessage({ type: 'PASSPHRASE_STATUS', status: !0 }) + break + default: + throw new Error('Invalid Command') + } + } catch (e) { + self.postMessage({ + type: 'ERROR', + error: { message: e.message, name: e.name, stack: e.stack }, + }) + } finally { + a = !1 + } + }) +})() diff --git a/ui/component/app/view.jsx b/ui/component/app/view.jsx index 01f3ee369..e7c286e67 100644 --- a/ui/component/app/view.jsx +++ b/ui/component/app/view.jsx @@ -113,7 +113,7 @@ function App(props: Props) { useEffect(() => { // $FlowFixMe - document.documentElement.setAttribute('data-mode', theme); + document.documentElement.setAttribute('theme', theme); }, [theme]); useEffect(() => { diff --git a/ui/component/blockButton/view.jsx b/ui/component/blockButton/view.jsx index 19569f432..ddae5535e 100644 --- a/ui/component/blockButton/view.jsx +++ b/ui/component/blockButton/view.jsx @@ -26,7 +26,6 @@ export default function BlockButton(props: Props) { return permanentUrl && !claimIsMine ? (