From 1ca4dbf890ef4c519a3e30e0afe3851253abd5d0 Mon Sep 17 00:00:00 2001 From: Alfred Melch Date: Fri, 19 Jul 2019 19:33:27 +0200 Subject: [PATCH] Add psimpl.js --- lib/psimpl-js/Makefile | 14 ++++++ lib/psimpl-js/example.html | 39 ++++++++++++++++ lib/psimpl-js/index.js | 89 +++++++++++++++++++++++++++++++++++++ lib/psimpl-js/psimpl.cpp | 82 ++++++++++++++++++++++++++++++++++ lib/psimpl-js/psimpl.js | 75 +++++++++++++++++++++++++++++++ lib/psimpl-js/psimpl.wasm | Bin 0 -> 41987 bytes lib/simplify-wasm/Makefile | 2 +- 7 files changed, 300 insertions(+), 1 deletion(-) create mode 100644 lib/psimpl-js/Makefile create mode 100644 lib/psimpl-js/example.html create mode 100644 lib/psimpl-js/index.js create mode 100644 lib/psimpl-js/psimpl.cpp create mode 100644 lib/psimpl-js/psimpl.js create mode 100644 lib/psimpl-js/psimpl.wasm diff --git a/lib/psimpl-js/Makefile b/lib/psimpl-js/Makefile new file mode 100644 index 0000000..1ad5f85 --- /dev/null +++ b/lib/psimpl-js/Makefile @@ -0,0 +1,14 @@ +OPTIMIZE="-O3" + +psimpl.wasm psimpl.js: psimpl.cpp + emcc \ + ${OPTIMIZE} \ + --bind \ + --closure 1 \ + -s WASM=1 \ + -s ALLOW_MEMORY_GROWTH=1 \ + -s MODULARIZE=1 \ + -s EXPORT_ES6=1 \ + -o psimpl.js \ + -I ../ \ + psimpl.cpp diff --git a/lib/psimpl-js/example.html b/lib/psimpl-js/example.html new file mode 100644 index 0000000..3e94546 --- /dev/null +++ b/lib/psimpl-js/example.html @@ -0,0 +1,39 @@ + + + + + + Document + + + +
Original array: Loading...
+
Simplified array: Loading...
+ + + + diff --git a/lib/psimpl-js/index.js b/lib/psimpl-js/index.js new file mode 100644 index 0000000..d11a6e1 --- /dev/null +++ b/lib/psimpl-js/index.js @@ -0,0 +1,89 @@ +/* + This file is meant to be processed in the context of an asset bundler. + Specifically the import of 'psimpl.wasm' is meant to be resolved by the + corresponding path to that file. Configure a file loader to resolve .wasm + files (e.g. Webpack: file-loader) accordingly. + + Otherwise you have to use the module factory 'psimple.js' manually and + reproduce the steps from below to fit your build context. See example.html. + + Other than wrapping the memory handling for convenience this method also makes + sure the module is only loaded once. +*/ + +import wasmModuleFactory from './psimpl.js' +import wasmUrl from './psimpl.wasm' + +import { initEmscriptenModule } from '../../lib/initEmscripten.js' +import { storeCoords, unflattenCoords } from '../../lib/heapUtil.js' + +export async function simplify_nth_point(coords, tol) { + const module = await getModule() + const buffer = storeCoords(module, coords) + const result = module.nth_point(buffer, coords.length * 2, tol) + module._free(buffer) + return unflattenCoords(result) +} + +export async function simplify_radial_distance(coords, tol) { + const module = await getModule() + const buffer = storeCoords(module, coords) + const result = module.radial_distance(buffer, coords.length * 2, tol) + module._free(buffer) + return unflattenCoords(result) +} + +export async function simplify_perpendicular_distance(coords, tol) { + const module = await getModule() + const buffer = storeCoords(module, coords) + const result = module.perpendicular_distance(buffer, coords.length * 2, tol) + module._free(buffer) + return unflattenCoords(result) +} + +export async function simplify_reumann_witkam(coords, tol) { + const module = await getModule() + const buffer = storeCoords(module, coords) + const result = module.reumann_witkam(buffer, coords.length * 2, tol) + module._free(buffer) + return unflattenCoords(result) +} + +export async function simplify_opheim(coords, tol) { + const module = await getModule() + const buffer = storeCoords(module, coords) + const result = module.opheim(buffer, coords.length * 2, tol) + module._free(buffer) + return unflattenCoords(result) +} + +export async function simplify_lang(coords, tol) { + const module = await getModule() + const buffer = storeCoords(module, coords) + const result = module.lang(buffer, coords.length * 2, tol) + module._free(buffer) + return unflattenCoords(result) +} + +export async function simplify_douglas_peucker(coords, tol) { + const module = await getModule() + const buffer = storeCoords(module, coords) + const result = module.douglas_peucker(buffer, coords.length * 2, tol) + module._free(buffer) + return unflattenCoords(result) +} + +export async function simplify_douglas_peucker_n(coords, tol) { + const module = await getModule() + const buffer = storeCoords(module, coords) + const result = module.douglas_peucker_n(buffer, coords.length * 2, tol) + module._free(buffer) + return unflattenCoords(result) +} + +let emscriptenModule +export async function getModule() { + if (!emscriptenModule) + emscriptenModule = initEmscriptenModule(wasmModuleFactory, wasmUrl) + return await emscriptenModule +} diff --git a/lib/psimpl-js/psimpl.cpp b/lib/psimpl-js/psimpl.cpp new file mode 100644 index 0000000..b3d91bf --- /dev/null +++ b/lib/psimpl-js/psimpl.cpp @@ -0,0 +1,82 @@ +#include +#include +#include +#include "psimpl/psimpl.h" + +using namespace emscripten; + +val nth_point(uintptr_t ptr, int length, int n) { + double* begin = reinterpret_cast(ptr); + double* end = begin + length; + std::vector resultCoords; + psimpl::simplify_nth_point<2>(begin, end, n, std::back_inserter(resultCoords)); + return val(typed_memory_view(resultCoords.size(), &resultCoords[0])); +} + +val radial_distance(uintptr_t ptr, int length, double tol) { + double* begin = reinterpret_cast(ptr); + double* end = begin + length; + std::vector resultCoords; + psimpl::simplify_radial_distance<2>(begin, end, tol, std::back_inserter(resultCoords)); + return val(typed_memory_view(resultCoords.size(), &resultCoords[0])); +} + +val perpendicular_distance(uintptr_t ptr, int length, unsigned repeat) { + double* begin = reinterpret_cast(ptr); + double* end = begin + length; + std::vector resultCoords; + psimpl::simplify_perpendicular_distance<2>(begin, end, repeat, std::back_inserter(resultCoords)); + return val(typed_memory_view(resultCoords.size(), &resultCoords[0])); +} + +val reumann_witkam(uintptr_t ptr, int length, double tol) { + double* begin = reinterpret_cast(ptr); + double* end = begin + length; + std::vector resultCoords; + psimpl::simplify_reumann_witkam<2>(begin, end, tol, std::back_inserter(resultCoords)); + return val(typed_memory_view(resultCoords.size(), &resultCoords[0])); +} + +val opheim(uintptr_t ptr, int length, double minTol, double maxTol) { + double* begin = reinterpret_cast(ptr); + double* end = begin + length; + std::vector resultCoords; + psimpl::simplify_opheim<2>(begin, end, minTol, maxTol, std::back_inserter(resultCoords)); + return val(typed_memory_view(resultCoords.size(), &resultCoords[0])); +} + +val lang(uintptr_t ptr, int length, double tol, unsigned look_ahead) { + double* begin = reinterpret_cast(ptr); + double* end = begin + length; + std::vector resultCoords; + psimpl::simplify_lang<2>(begin, end, tol, look_ahead, std::back_inserter(resultCoords)); + return val(typed_memory_view(resultCoords.size(), &resultCoords[0])); +} + +val douglas_peucker(uintptr_t ptr, int length, double tol) { + double* begin = reinterpret_cast(ptr); + double* end = begin + length; + std::vector resultCoords; + psimpl::simplify_douglas_peucker<2>(begin, end, tol, std::back_inserter(resultCoords)); + return val(typed_memory_view(resultCoords.size(), &resultCoords[0])); +} + +val douglas_peucker_n(uintptr_t ptr, int length, unsigned count) { + double* begin = reinterpret_cast(ptr); + double* end = begin + length; + std::vector resultCoords; + psimpl::simplify_douglas_peucker_n<2>(begin, end, count, std::back_inserter(resultCoords)); + return val(typed_memory_view(resultCoords.size(), &resultCoords[0])); +} + +EMSCRIPTEN_BINDINGS(my_module) { + function("nth_point", &nth_point); + function("radial_distance", &radial_distance); + function("perpendicular_distance", &perpendicular_distance); + function("reumann_witkam", &reumann_witkam); + function("opheim", &opheim); + function("lang", &lang); + function("douglas_peucker", &douglas_peucker); + function("douglas_peucker_n", &douglas_peucker_n); + register_vector("vector"); +} diff --git a/lib/psimpl-js/psimpl.js b/lib/psimpl-js/psimpl.js new file mode 100644 index 0000000..9df6034 --- /dev/null +++ b/lib/psimpl-js/psimpl.js @@ -0,0 +1,75 @@ + +var Module = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + return ( +function(Module) { + Module = Module || {}; + +var d;d||(d=typeof Module !== 'undefined' ? Module : {});var m={},q;for(q in d)d.hasOwnProperty(q)&&(m[q]=d[q]);d.arguments=[];d.thisProgram="./this.program";d.quit=function(a,b){throw b;};d.preRun=[];d.postRun=[];var r=!1,u=!1,aa=!1,ba=!1;r="object"===typeof window;u="function"===typeof importScripts;aa="object"===typeof process&&"function"===typeof require&&!r&&!u;ba=!r&&!aa&&!u;var v=""; +if(aa){v=__dirname+"/";var ca,da;d.read=function(a,b){ca||(ca=require("fs"));da||(da=require("path"));a=da.normalize(a);a=ca.readFileSync(a);return b?a:a.toString()};d.readBinary=function(a){a=d.read(a,!0);a.buffer||(a=new Uint8Array(a));a.buffer||w("Assertion failed: undefined");return a};1=e);)++c;if(16f?e+=String.fromCharCode(f):(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else e+=String.fromCharCode(f)}return e} +function ka(a,b,c){var e=A;if(0=g){var h=a.charCodeAt(++f);g=65536+((g&1023)<<10)|h&1023}if(127>=g){if(b>=c)break;e[b++]=g}else{if(2047>=g){if(b+1>=c)break;e[b++]=192|g>>6}else{if(65535>=g){if(b+2>=c)break;e[b++]=224|g>>12}else{if(b+3>=c)break;e[b++]=240|g>>18;e[b++]=128|g>>12&63}e[b++]=128|g>>6&63}e[b++]=128|g&63}}e[b]=0}}"undefined"!==typeof TextDecoder&&new TextDecoder("utf-16le"); +function la(a){0ra&&y("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+ra+"! (TOTAL_STACK=5242880)"); +d.buffer?buffer=d.buffer:"object"===typeof WebAssembly&&"function"===typeof WebAssembly.Memory?(z=new WebAssembly.Memory({initial:ra/65536}),buffer=z.buffer):buffer=new ArrayBuffer(ra);qa();C[1812]=5250160;function sa(a){for(;0>2]}var Ja={};function Ka(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+a);}}var La=void 0;function K(a){for(var b="";A[a];)b+=La[A[a++]];return b} +var L={},M={},Ma={};function Na(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}function Oa(a,b){a=Na(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)} +function Pa(a){var b=Error,c=Oa(a,function(b){this.name=a;this.message=b;b=Error(b).stack;void 0!==b&&(this.stack=this.toString()+"\n"+b.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c}var N=void 0;function O(a){throw new N(a);}var Qa=void 0;function Ra(a){throw new Qa(a);} +function P(a,b,c){function e(b){b=c(b);b.length!==a.length&&Ra("Mismatched type converter count");for(var e=0;e>2])}function eb(a,b,c){if(b===c)return a;if(void 0===c.ja)return null;a=eb(a,b,c.ja);return null===a?null:c.Da(a)} +var V={};function fb(a,b){for(void 0===b&&O("ptr should not be undefined");a.ja;)b=a.qa(b),a=a.ja;return V[b]}function gb(a,b){b.fa&&b.ea||Ra("makeClassHandle requires ptr and ptrType");!!b.ia!==!!b.ha&&Ra("Both smartPtrType and smartPtr must be specified");b.count={value:1};return Object.create(a,{ba:{value:b}})} +function W(a,b,c,e){this.name=a;this.da=b;this.va=c;this.sa=e;this.ta=!1;this.ma=this.Ma=this.La=this.Ba=this.Na=this.Ja=void 0;void 0!==b.ja?this.toWireType=ab:(this.toWireType=e?$a:cb,this.ka=null)}function hb(a,b,c){d.hasOwnProperty(a)||Ra("Replacing nonexistant public symbol");void 0!==d[a].ga&&void 0!==c?d[a].ga[c]=b:(d[a]=b,d[a].ra=c)} +function X(a,b){a=K(a);if(void 0!==d["FUNCTION_TABLE_"+a])var c=d["FUNCTION_TABLE_"+a][b];else if("undefined"!==typeof FUNCTION_TABLE)c=FUNCTION_TABLE[b];else{c=d["dynCall_"+a];void 0===c&&(c=d["dynCall_"+a.replace(/f/g,"d")],void 0===c&&O("No dynCall invoker for signature: "+a));for(var e=[],f=1;f>2)+e]);return c}function nb(a){for(;a.length;){var b=a.pop();a.pop()(b)}} +function ob(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Oa(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c} +function pb(a,b,c,e,f){var g=b.length;2>g&&O("argTypes array size mismatch! Must at least get return value and 'this' types!");var h=null!==b[1]&&null!==c,l=!1;for(c=1;c>2])};case 3:return function(a){return this.fromWireType(pa[a>>3])};default:throw new TypeError("Unknown float type: "+a);}} +function tb(a,b,c){switch(b){case 0:return c?function(a){return B[a]}:function(a){return A[a]};case 1:return c?function(a){return ma[a>>1]}:function(a){return na[a>>1]};case 2:return c?function(a){return C[a>>2]}:function(a){return D[a>>2]};default:throw new TypeError("Unknown integer type: "+a);}}function ub(){return B.length}function vb(a){a=la(a);var b=buffer.byteLength;try{return-1!==z.grow((a-b)/65536)?(buffer=z.buffer,!0):!1}catch(c){return!1}}for(var wb=Array(256),xb=0;256>xb;++xb)wb[xb]=String.fromCharCode(xb); +La=wb;N=d.BindingError=Pa("BindingError");Qa=d.InternalError=Pa("InternalError");T.prototype.isAliasOf=function(a){if(!(this instanceof T&&a instanceof T))return!1;var b=this.ba.fa.da,c=this.ba.ea,e=a.ba.fa.da;for(a=a.ba.ea;b.ja;)c=b.qa(c),b=b.ja;for(;e.ja;)a=e.qa(a),e=e.ja;return b===e&&c===a};T.prototype.clone=function(){this.ba.ea||Ta(this);if(this.ba.pa)return this.ba.count.value+=1,this;var a=Object.create(Object.getPrototypeOf(this),{ba:{value:Sa(this.ba)}});a.ba.count.value+=1;a.ba.na=!1;return a}; +T.prototype["delete"]=function(){this.ba.ea||Ta(this);this.ba.na&&!this.ba.pa&&O("Object already scheduled for deletion");--this.ba.count.value;if(0===this.ba.count.value){var a=this.ba;a.ha?a.ia.ma(a.ha):a.fa.da.ma(a.ea)}this.ba.pa||(this.ba.ha=void 0,this.ba.ea=void 0)};T.prototype.isDeleted=function(){return!this.ba.ea};T.prototype.deleteLater=function(){this.ba.ea||Ta(this);this.ba.na&&!this.ba.pa&&O("Object already scheduled for deletion");S.push(this);1===S.length&&R&&R(Ua);this.ba.na=!0;return this}; +W.prototype.Ga=function(a){this.Ba&&(a=this.Ba(a));return a};W.prototype.za=function(a){this.ma&&this.ma(a)};W.prototype.argPackAdvance=8;W.prototype.readValueFromPointer=db;W.prototype.deleteObject=function(a){if(null!==a)a["delete"]()}; +W.prototype.fromWireType=function(a){function b(){return this.ta?gb(this.da.oa,{fa:this.Ja,ea:c,ia:this,ha:a}):gb(this.da.oa,{fa:this,ea:a})}var c=this.Ga(a);if(!c)return this.za(a),null;var e=fb(this.da,c);if(void 0!==e){if(0===e.ba.count.value)return e.ba.ea=c,e.ba.ha=a,e.clone();e=e.clone();this.za(a);return e}e=this.da.Fa(c);e=Va[e];if(!e)return b.call(this);e=this.sa?e.Ca:e.pointerType;var f=eb(c,this.da,e.da);return null===f?b.call(this):this.ta?gb(e.da.oa,{fa:e,ea:f,ia:this,ha:a}):gb(e.da.oa, +{fa:e,ea:f})};d.getInheritedInstanceCount=function(){return Object.keys(V).length};d.getLiveInheritedInstances=function(){var a=[],b;for(b in V)V.hasOwnProperty(b)&&a.push(V[b]);return a};d.flushPendingDeletes=Ua;d.setDelayFunction=function(a){R=a;S.length&&R&&R(Ua)};ib=d.UnboundTypeError=Pa("UnboundTypeError");d.count_emval_handles=function(){for(var a=0,b=5;b>2]=a);return a},u:function(a,b){I=b;try{return Ja.Ha(),J(),J(),J(),J(),0}catch(c){return"undefined"!==typeof FS&&c instanceof FS.xa||w(c),-c.Aa}},m:function(a,b){I=b;try{var c=J(),e=J(),f=J();for(b=a=0;b>2],h=C[e+(8*b+4)>>2],l=0;l>g])},ka:null})},r:function(a,b,c,e,f,g,h,l,p,k,n,t,Da){n=K(n);g=X(f,g);l&&(l=X(h,l));k&&(k=X(p,k));Da=X(t,Da);var F=Na(n);Xa(F,function(){lb("Cannot construct "+n+" due to unbound types",[e])});P([a,b,c],e?[e]:[],function(b){b=b[0];if(e){var c=b.da;var f=c.oa}else f=T.prototype;b=Oa(F,function(){if(Object.getPrototypeOf(this)!==h)throw new N("Use 'new' to construct "+n);if(void 0===p.la)throw new N(n+" has no accessible constructor");var a=p.la[arguments.length];if(void 0=== +a)throw new N("Tried to invoke ctor of "+n+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(p.la).toString()+") parameters instead!");return a.apply(this,arguments)});var h=Object.create(f,{constructor:{value:b}});b.prototype=h;var p=new Ya(n,b,h,Da,c,g,l,k);c=new W(n,p,!0,!1);f=new W(n+"*",p,!1,!1);var t=new W(n+" const*",p,!1,!0);Va[a]={pointerType:f,Ca:t};hb(F,b);return[c,f,t]})},q:function(a,b,c,e,f,g){var h=mb(b,c);f=X(e,f);P([],[a],function(a){a=a[0];var c= +"constructor "+a.name;void 0===a.da.la&&(a.da.la=[]);if(void 0!==a.da.la[b-1])throw new N("Cannot register multiple constructors with identical number of parameters ("+(b-1)+") for class '"+a.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!");a.da.la[b-1]=function(){lb("Cannot construct "+a.name+" due to unbound types",h)};P([],h,function(e){a.da.la[b-1]=function(){arguments.length!==b-1&&O(c+" called with "+arguments.length+" arguments, expected "+ +(b-1));var a=[],k=Array(b);k[0]=g;for(var h=1;h>>l}}var p=-1!=b.indexOf("unsigned");Q(a,{name:b,fromWireType:g,toWireType:function(a,c){if("number"!== +typeof c&&"boolean"!==typeof c)throw new TypeError('Cannot convert "'+U(c)+'" to '+this.name);if(cf)throw new TypeError('Passing a number "'+U(c)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+e+", "+f+"]!");return p?c>>>0:c|0},argPackAdvance:8,readValueFromPointer:tb(b,h,0!==e),ka:null})},c:function(a,b,c){function e(a){a>>=2;var b=D;return new f(b.buffer,b[a+1],b[a])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array, +Float32Array,Float64Array][b];c=K(c);Q(a,{name:c,fromWireType:e,argPackAdvance:8,readValueFromPointer:e},{Ia:!0})},o:function(a,b){b=K(b);var c="std::string"===b;Q(a,{name:b,fromWireType:function(a){var b=D[a>>2];if(c){var e=A[a+4+b],h=0;0!=e&&(h=e,A[a+4+b]=0);var l=a+4;for(e=0;e<=b;++e){var p=a+4+e;if(0==A[p]){l=l?ja(A,l,void 0):"";if(void 0===k)var k=l;else k+=String.fromCharCode(0),k+=l;l=p+1}}0!=h&&(A[a+4+b]=h)}else{k=Array(b);for(e=0;e=e&&(e=65536+((e&1023)<<10)|b.charCodeAt(++c)&1023);127>=e?++a:a=2047>=e?a+2:65535>=e?a+3:a+4}return a}:function(){return b.length})(),l=yb(4+f+1);D[l>>2]=f;if(c&&e)ka(b,l+ +4,f+1);else if(e)for(e=0;e>2],g=Array(c),k=a+4>>f,n=0;n>2]=h;for(var n=k+4>>f,t=0;t=b?b=la(2*b):b=Math.min(la((3*b+2147483648)/4),2147418112);if(!vb(b))return!1;qa();return!0},w:function(){w("OOM")},a:7248},buffer);d.asm=zb;d.___errno_location=function(){return d.asm.D.apply(null,arguments)}; +var kb=d.___getTypeName=function(){return d.asm.E.apply(null,arguments)},Y=d._free=function(){return d.asm.F.apply(null,arguments)},yb=d._malloc=function(){return d.asm.G.apply(null,arguments)},Ga=d.globalCtors=function(){return d.asm.aa.apply(null,arguments)};d.dynCall_i=function(){return d.asm.H.apply(null,arguments)};d.dynCall_ii=function(){return d.asm.I.apply(null,arguments)};d.dynCall_iidiiii=function(){return d.asm.J.apply(null,arguments)}; +d.dynCall_iii=function(){return d.asm.K.apply(null,arguments)};d.dynCall_iiii=function(){return d.asm.L.apply(null,arguments)};d.dynCall_iiiid=function(){return d.asm.M.apply(null,arguments)};d.dynCall_iiiidd=function(){return d.asm.N.apply(null,arguments)};d.dynCall_iiiidi=function(){return d.asm.O.apply(null,arguments)};d.dynCall_iiiii=function(){return d.asm.P.apply(null,arguments)};d.dynCall_jiji=function(){return d.asm.Q.apply(null,arguments)}; +d.dynCall_v=function(){return d.asm.R.apply(null,arguments)};d.dynCall_vi=function(){return d.asm.S.apply(null,arguments)};d.dynCall_vii=function(){return d.asm.T.apply(null,arguments)};d.dynCall_viid=function(){return d.asm.U.apply(null,arguments)};d.dynCall_viii=function(){return d.asm.V.apply(null,arguments)};d.dynCall_viiid=function(){return d.asm.W.apply(null,arguments)};d.dynCall_viiidd=function(){return d.asm.X.apply(null,arguments)};d.dynCall_viiidi=function(){return d.asm.Y.apply(null,arguments)}; +d.dynCall_viiii=function(){return d.asm.Z.apply(null,arguments)};d.dynCall_viiiii=function(){return d.asm._.apply(null,arguments)};d.dynCall_viiiiii=function(){return d.asm.$.apply(null,arguments)};d.asm=zb;d.then=function(a){if(d.calledRun)a(d);else{var b=d.onRuntimeInitialized;d.onRuntimeInitialized=function(){b&&b();a(d)}}return d};function x(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}x.prototype=Error();x.prototype.constructor=x; +G=function Ab(){d.calledRun||Bb();d.calledRun||(G=Ab)}; +function Bb(){function a(){if(!d.calledRun&&(d.calledRun=!0,!ha)){xa||(xa=!0,sa(ua));sa(va);if(d.onRuntimeInitialized)d.onRuntimeInitialized();if(d.postRun)for("function"==typeof d.postRun&&(d.postRun=[d.postRun]);d.postRun.length;){var a=d.postRun.shift();wa.unshift(a)}sa(wa)}}if(!(0b=FS2V#Bk|*35cKoQXoZwix_GSM1TMx(OSGHo4_G3Byb1Y z3jo$k8~7LpNNsd__V`t<3ueCIpgewJ~wCyqqUx#&0Ix7}A-=EvFNjJvPQ z%bDUywu_eUi}gLRQqeN+O7f^IpCO@?bG+D3Xh7wu#1}PwhG%HDNEBc6OqL&Bjvl@* z3SH3iNN6el?e41;?*`);%F)=F;;F9Gxb>DiY>${0f%?pHbmqP)W%I9AOu!hdXZk6X z4j=Pz2mzrGtC6<5KHSBpLZ|7+K{g^9T{_(uMg}l8*x6blU^-ku`Q+fS|@_tX}&yTvA z)%%z$+0*Ck@5tMKPk3+c+qX1(|KYiP_s^b~OO~CLoy`-KBXdWNEq*k1E3xv+Rx&ys zedHs_FGpXB%9GVfbFx;hUS69Vsk*4vbd|{s<;lrvI$52(qB>HkR>#X_S1C8fM{90! zvf-Mk<6o`Rn2aVXBh``1r}ZMI-bK}*W$VHX%zY#UgJ`sN@`lBeSEoW|XT+%PsDb05(J~`Q``l#E9{g3#G_LgQ^jWml@qLxu2 z@$tz{Evsemp6O5|OQ>W?w`aN&mu9klU0-WeI!UWdnQyGy9y^||w0xyiDpM#~YF*i> zx65goRe8zE-A5D`k~dXG5B~tgHsqM6J7BFk2JU+Ahd;mS)D% ztkk+9{ne4E&af=QKe>gGwJGdRt99qkbT!o2pI+#=Zd+hP3#H{ODaZU$*+|VUgysN; z5oe`6*0{@}Zd?67twwhNU6Pf-UMHf0PwpOxHu$e@$(+C}XOVw+L13!WXfXhsbnPpE zQsoq2MSdlwarIp5M0zwkF)jNqY~g=;@ljS<^2;Y^%F$*PZ;zYIM#PxYENMpk+8nQM zSLwzoM^uh!&$l#%rEaIB;YM^(YR8P$-WZ%`pv^c<6P1qqR9>*cCtj&+^(s3@=z*G9 zh2jwt6?+XYEeD7VkY)f2c&b9AzFbb<@sj`cb)g-him?hWk@|jo3;&0~Q7R0M!6Yk^QWPd$)NUF0L;p=wS(A|BCBU9>|V=cOI;&qq6u zjV2U~pI#7K1$K@#7w{wV(~}6ALuHK_tH9!tCV|D__$B{4TaX}uv(-)(Ep<%%IAmH! z0GIhFenMb4sG-({_gt!G0$m{^BmrOsNj-q#4O)nO?NrCXekOXWdrQmysxlBezw(#w z?)ug#Ut8$VS;?=wa+ST8764?FBGDqKbxR$Ju8i5In4*jG`n2T7PC?i{TB3jFtKCzu z%VJvgE=A}C4wpm}G?#-0pqUDfR^V_tv_V#2tr*1+6pd64sFYYh42cF~@BC#5p6Jv( zzpvUgz0@uxd}TVblE3N{eRVq(@DoHC03kdfp1h$El5J-Ks?y^>6A}fwz*5qU=*NMqgc-vAKwCEDq$in+-T~5YYYDanqLkwAalm*-@U%=Gz0-HmDQ%x z5og7hncVc4FQR_61T2WsfW8%padhyDk-UjHX4Ewz<*Vml{Y5oIDq-bP1`#( zQ0v3#KTkA37~utXujX9Pwl3X}!6py@)R)EGHnhwj=_3(gs9RE$jy1fJN@mek=Wcgu z-V`z9(rwd}kLKI4O@89fEWlSYDE0vNdqa2N$uMaI6I8M2KrBS7NK8$-KnSNNw95ZwslLw#PSx)UDg&TSMxO z?eQIqW@aAZi1aWeYoN!whd~FER)~icLYw&#;~pwp;76E>ZgseiYlvC=8+XgvIhr$m~5+oF++mHk>oVQiToCQ3Ad*c_}LLrIOJ z@M`1md|s0bY=w*=3j=_dJ|0J6M-i;7H_<z5YWn0BJqvgoy9b5P0YH7C}bQgbrRX*4I$oH}#T%;_>G%A6u|a?EKlC&Ziza}w;+ zpP)1t$~hev3`Qz8cKcQe-_{PUl*RLD1@vQme_II3iDYITA|YGkkzj!H6x!fYC55

lGC=P~jd z{o|PpxlkGpsbw!);pu7u-GVA&H4Wp z;V9&$1J)U&mUdC1ddls>80@%H=88bEh{gpUoyagt zB+AG~YVH&xHRXyFH4{oDM0({mdJSykLnYPilpzd;4;JQS&e(_{H4GE62qtT={y=D5 zlThHhofuj>;J_SAfx|2Z3lHKm!@>*$6m8ljCoqFyUA75xP~#y>C6!&N?&vDG!9sZj z_rd(APKv$fvUEO6|0)oh8+yRrL40OVkE}P)(XJ&k@r?Mp)sc%CweeBKXdP#cBW3lP zmu8-8dpgOq1SjzW5;YTzFkZLQ%t|5}+Lkj5-^z`Vk4^g}xuP9#q1q(WMw`UuX1D)=BSb@0K@|L#N(tV`AtIWmtK0v}FNo3;biY{FaMgfjTA7w(xAk$&h*k+@w;V*jm=?W>`Ff6ia%DVv!mM0w}gDiZur6Q7oB8 zvC2jNMyZK!8`dxj1^P9LRd=FT%q!T+qy)9c5ON?X{4HrVWGeielo6kb944Kx}p|q z!(Q;eNVcOmlZ>r_SK*~6DJo*3w*hA=JX$t`9p+VD zw?YI^w#h}4>Z&6t&VzAjKs==7f+BRX!PZ1RN+v~OlOl1DB5^VURFDPlYa$<%TN3sQ zDYI)R@?p3=g_bhz%wzOs1HSuCW87GgGomF;m0TwI|qwpmGZf(`%44Q_u()7HpNi zrb{8#`FCKV`9HZHmP0WAP|q?Czmf@#SBu1J*L#Is{9okHm3M@mU%Ea#|K$3t;g2u) zm%si;UoW3f$(0NNhy7rZv_t$1qIw^lCaM39da)pL#edtfd$hSxiq_{D5AdgS{4pm!VP`2@=7= zRr3mV$PccHx8v4E@S^&mngkG@@!cbpvSOp^I7Q@mr*eK7SIL8^9DIo?kY&S?ZJu;( z*tqKRB(OpkrV*uz(iA-+%-vqNJV!>2-p~N=<5x`>P`55=PmII{t31orMjIIGKpQtOIw>5i z6^75)JyV^}gE$r;-^X30wXuy76`+h*GwnBb_tIj8CQ8#L@NlPuHXIp{3Ry4T4R*3* zj~uNk=wv{KQ*cNxlzUNF6@$EZz0rS~&pY}J8qmax7!oEcOn$|tuT$>s8nGNr zx>MuIZxYCr!XnK1KK0HFKr;ZTWiTcN8=Nu6&__4hS4+sY04Y zYZw;AR*Ar>DCw>znpN`8Zh>I{pK>5kvl&*@pf?g$-)5Kq#^6Y72<~F=Bf*3nL2fjj zhdK;mIZ8SBvA~D5v{J{4Aph2mjj~yF-i$+uvs`*G@1h`vRw_oVF=))TiikD{W0k>4 z+(GeMRgjw%Bpt#>6$*c=S0Qtt+RS;)2)0J4gAol4h}~pP!y@%UIf`RZJMv`;SG!o% z!znLT^_V4z-$a0YhiI&hlb}^xBoS7PY(~RaDPO>o;~ogQq&YKp-OLvS z-h%n^V=u}WHL+@@3B+=>7{Z$~UvNp{K}SXA3j?y;zM~?;Es~=GWnavE8CaDua4yH_ z1ld#JQLM_q=yHW@nOjB-jpjy7!5x|sOvf-R9&f~m!Sw4d-^2-1Ib_6`U#=OZ_X`>^ zNO+M3>~<~$14fJiW@sm7V|){^&m?HL>ycD)H><&jS)*MgI{_oeSz<&;(L%qrOK`OW zG=dI(DWbf%Ecop6hJPhjp)X?;uEnf@$~_Psc5yFw^~-KGRX;f zP^8r*mRIuA5{D(gzBVQXN+15aA=x6&B&UBFMI%67$?cc#UQa1)jDQvVdgOgF1N=0M z2vw%Wl2y!3$o(3$HGxUGl>qLoc>{&EffRgGQC)V0$mYkM9=7?TJRHfuEpE_@8psH- zl}x0&5tc;_koo9gjZ=+6bD}N`3Na08mp9B4iTL2%n|i*mcR#e0Des=IZ#}?%Z_N`U(e}%9h(~~mJu>48Eq_76dwxqWzJWkXp=M;ixP^$bGQM3T zUfM!hIo~M~FK;2OoIflQuWTW$obMKiA8aA5obMNjSGSN>&Yu*C*XZAJepn<{w)!7h z&R=ZF6OV57e_=U~6p6>S`bSu$bN(|$;_bHy`NJad%2v|K`EHT; z!B*1B`F@djbt`G*{7I2`Z7XTz{IE!@Tt`|te*vN_@#uA=mGelEcFrj z%K1W(SiO$4a=uz5p1zK>a-J*_&t6AbIo~J}&tFGcIlomTUbv35a(<^s49edmmz0Ug zU*Z+!U&?5e{DquxK&fovv+rr1W4@-r4lF!JbcuiI?Y>D(`9w5_`8D4$kxK8f6pd>O zD_(pGw}tD}jb)9&jH!$u8&U=jGw-mZ4r>`*RtGz5WPGS~ni;)~(AT1BWKImc(zVoYuN;?tu4~bCZC|A8s(bVR472rTGk5Ly$)81|0yU@Tcwe7znQP5 z?685VLS(fqp(boH{kw6Fu=LJ1s;Wj+yV$5&y-w#qo`CCRtmdO?*EFt{#?>2vfp^Xr z3H%HHS?js1^2OfEwSQnhicp9hB0iJGBnO2EgKiCxcafL zWUj|?(!NTHs7VZic4FZ7ThvFZqL9}|Y;%s_F)y7Cw1IDJ2S^KpZlIr{7kx^h%ic(e zvVg`yyNl94ortH{&cGt?*wqPpKQLFv2s#kc9#hFn$8AWVX_Isc!M1w>?~sWLp>PC)C6+1_WrJRXe_gIG~#iE={5En zwF!WfzAC$2_DMOENVT%0-UJ?$eIK3stM>XRYcBbp|F`Ut3X!WOUW9GQz!2usV!L_H z;6iQIeN?+z)RwGjB9yCP>=t8UCI0Oqy)<41tvO(TjZ15zsT$CC^GeEw6ffZs_=W&2 zvQQ35_u7QLFW^`m_@pb!FJq!Dvycik3teJQzSy=Bk|2@D5MBUHX-EX97?*X+Or^n< z0UPt69EWFjCz?iOH2um8ZV^ev8=>@evz(=^J3B23UZ#p%t=24Fg^y*A&VvFabRrw-K1MJteNq#{HxQJe7YeSp-2^cird)^~MHYN~p)-Pd8r9@3Ot#Y&9_XCjpx#}8J83p-vBXIWL=T-t|(+o6&WZzD=}GQ z6s=Aa8NEiv#Vk>?mHOAjG+282w^!?!WnWulQtK+w@ITxLFGSg7R);~eb*+7!s=3fz zm1E;2OGNjuk{dOd6cy=Qw!?i08CBomvdccvxlB+;){Yi*KiMK~dpEEDZKMD5jWkYP zgeGMVW@}+OZI3o<1Kp~<_GL|wbg8v{2LyR3!Po*W8pb$7e^1gs2RVdF$n!60l^H~| zexx(Lv(0X%{y4_7%6v98o!0~SF7^-a5#z;pQIB`BziLb-?oALL+apmc?S{xOf@~Q| zvyA5RS%%2S%B_snBS3U$+^mkdnJK)dfNnZo51-IIeVA#XYVeA#4W$FzeUp*$>$ zfK`3j;Xbg~8JRZNDN{NHy1E$|qvF)dn2SyAsu)1SwjLsp9IS1j&??Ygl2u!GaO4Hy zH-aICwwd3%h;L161hw_f(r1SauemB4$=S5RWZDollvZXV@AcB?^ulsZ+y{XQ$$a->XM9>j2$d1-Mys9Bf)lXaGYyXU#<2!t za`4Lf#62*$p^(OUP>SEK;@K1QjAz3kP-@6w^A7<2Q@(3$WumfM`ollt5SKQO;HdkOzMv6 z5@|38!FZI!h*V!qOKY-CdsTXJbD$)3gicvG&@84^E&a17ss@u*R-&DDD*N?EiqlRk z`~8ttX@*Wa>3c%pMQ%%`15Z{83zWidCsL;^3Q5S6hR|WBn8QwSe%LAQ9d=^F=i%0s zZ4phCBs_)d5<$W6J}R12?G|~6O0{lDTA=pe5fwCZo{^YEhc#W!&q4)rke=3~+e;u_ zJ_r7e&mI^6)(%))dEpSZHW}e0^d*G_iDCfS z;R=2dHZNzDfcvZ}t2OS8ixwGI_&A)KkHa{pPS0yNC()n;7ZdpAI0wvJoO6Vsb2&$| z^A>Q9#3t06bBf{JV2FhcTESu_~`>`7RU-6EeW?tO;d=4dm$r1UY!h?aBvAOweDOaBbP_lLHyt)N{P+LwA%#*_KKZkcoL&fz6Snvt>L`SWy_}yr zkdCAWnq=zecRu~Q0*CNIbhXx%ko}QwVEzUGEz|;huJtaw2vKOu_GE~5gaieUZ6bk>h{$Ax$Ezprx+FDTV{O=jh>D2|rnheO}r>?AvG zdbCsGjK&x{SZJF)C1a3QGbz)mkTMWCyU+*&vfkdNTjq*$6Vma>20@K} zu?GFmo(4*wwNoF6yq{ZH{?v|@@bl`sANf{Wc4#_l5gv{29z>K*a&$Q?a*qa&5rW;W zZpqKI#-peS#AGr?56O56Zk4{W13^LyrIoo&vKO$R!px3t0rB4woar}{gu4?Sj?U2R z6f2Oz#<~CTu|7ZAF!u-Vr&ibTYmGLz^(JYU9EzD+uXzy$u+3kmlpGs;hu16ijEdn; zSZmd;me^&eAjs5bSYbr+s1%IzI(?#ZV42pEZ=JO6vFP7O4TC|;`4=B|-(9rEiGjR< z3f4B>ffdcihfjju7#v@jGw8+((B|#qWpULm4%QiYz-C3%LQHD}Lmnj?hxripBfu9% zhP`-?EPQ%R8;}JeXuRao+n_-hv~+dOpjus!*kMcJg8u^!pU|k5Qd?{-Q!lQCaVH}# z{aj*a+@)U=$t!)0ZHoG8rfCKmpRn4pvaS4L4d`<|*3{FFC1n3x2@j;4Evtg35CevU7(}2flcr?SK5$uJU*$XJJ za*-%m;zKYW7ccuu{G;InFtq3Y;EP|LfQ)gTqvBng zYjiD2%-A8a>JTU`S{T+lYX9jqbWUxj+V7Gs1es8c3_KG;t#|NIvO@#o7>sdD5Kr0( zlZ&S`{m1ceWkbH!b<`lo;$%AD0-z^xdSbZ4CdUkle(USaYR_8-UA+|}Q|#C#nXT{8 z;#8heiPxl>T1NnHLP7Dkc@Xd^;|?_)drSo8qi4fqAPtC+&^N4A{a12b6 zw{fEYnIT7QnP~auH6~i%4%IoYAfg#bY=jSrk#mSH{iQgrg!N2`vTecPU?UoZa6j5| zKQzxh_uu&CAHMkcU;91xK|aL(H{T|RR^EoryBfao zFWFYl%8pO=%6%ZTw3Xf6P@NH@#Fb|6yNTFe?LMb)Kqlr66ImxFk(LLZ0ZKR)jYj_zZ{n@vSl|PEyf-^zyd%aG) zD{T%U#H3ty>gv(b+NLlV{KepRA_)-*x0wxOb#fh0)G=@K+&We%O@F`VTf-Wx%F{s{ zTvxr@5j3@IoHNCqO(N=|AweN#>bs{KOr`A1V!^;I1c)t0!FGUzu|NTweJE?uD>%It zwxe~9AtX4avMt25LoKpVj`aev*>FK`iI%P@pi^xo3n3V06*jP36vUoepYUO$@<8CZOW2xTbSVmUnFnLR=3Ou*PH12dKH-LPDsxxFUJ9qXGta zl-_)9aZvD-mStaQcIh#{?xHkQ>#Y+ckGy4q*|52q6Y`2^~fmr5(V+cm?YC!FcyxHv;zcDYTcl13hW3mTk5^q3nPth}^ z>2lQ%w325W9v)s_K`8X6e`XF81#YQ4qg ze2VkMW>%rul1aQOUy2URv3yOCRc8teMlm0giAO6Xc_P)}L)--)m~L zLrzn(%DL5=CaA+E1?HS^&Tn)qP?0a=v&#K^KJU`Z;@!wIZ5Hy|b&AxV(J3kSOg8=LGo8zKtbF1B`EIh(-oOg<<>Dv3KKzM0 zVcZQ*5s9f4ji{?SEmf6Kwcr*Kg!PWSvT#^258cr+%7|Wd-A1il(Sdtbdu(Ys;3OO2 z<^th_LEl5GWj1G2Q%^jNX#@>GE_4WJe_7Ypk4Uk#vef^dZdZFL&@r=YzL!u^#<(L!sd+id=Z1PvE`C%{la0woWeI$ioL~H z**(jv?$_V~wae_11(x|$L188|f~e{;o;(K2rqI_q){@zrLi|iK3>gwU%UW!R(Ei-I z&3?YaOPt9_6SRPQgbMo)Z1uJpURcwDRBcLKwXA?)=NEMdG!0GmV0RdwyD6 zkVLw*XBv??2{czAAhU@eF*_~gA~K_l6uioy*bUlg7?VnXM)y-i8*?NgmCKHR&%+at zIn2X+DbHwKltNiWY&%dc`Nq&p3^*CCtGT$?{K=&2&7W}DNp1e9RTbs~VQQC1g$-hK z%wBNv;V;o4(b22{zhUl+JBSwuB%xa1u`fyHV_rrj;7RNiqYn0mXX}{hOLUvlh-72^ z9wzML+~lWbPziOe;mNe&P(~1ZrI&{ZrxKS3o|%^ zCOFSWn$JdvUsK735ln)j)lLg>p$#c@eOIGW8)}Z1LSLqE1SFlz05#e-HKj>0%eQG& zJ~ajvXDY=BqNL4eabAw&B%^0V0jwpuTS zm<^pe2G1zwmq`&$Xk^X3(isx_l2XrPb+)7FkU&E^9>uIjEdX3&4=u6$Y!ou4k!_~o zxQ~&#np^DMQQf%+y`g`Bxjc_{lK|vPQ>Pi(XeySrN#7|(3roeEVBW+^I2)+7M+>FB z$EFABfedxH%%DOV_ByVjT0_UdoXI<;Uxb?H#uW*4I!};65NFta8``ZKRU#UtR9H8V z5C$=x>0(EdL13(4a(lXy3YKN76Ks}=fX8Ng(mS9qV-j@ICuoxpU4}=+HqT(-ZL%E| zOsuS=Ohg)+To6)?lFe?{*v+1c?0ke^Qye14O2#`tW~1*zCkpFHHr@?`7cW7>eXK(v zM#Bt*D)$HlIomT1anCz!q-InWWfN6@`4n^GJN6cg3h zJ)M3cr=;zI@V?rZ))h!{QcRE2i`@AdEi0T|fQAhjGIZNauIiBMH6Uc- z=YcR4gk>O11|dvx2wC-o?73eeTmkAN=+}5sLM%{(wS2gSz&(ORo|+(-z|33wD-q{NA3PvAZalqu$QC1Wa@+T45Lm**mgF?_{W??qp(^Aq&4N z`q%QG0gtW8j^1#yuCW^|Mc84uZ{aZ>z7%X z@SmLarPio_bi)7KG;3g^{^b$>_oiDT{?!rxWj!AqrODr(Zf)?dHT{dzt!ckHN*6Cr zw<7P5Bj^H-31Y1EhfuPODi^1h?gE6V$? zN?CiKy^@r*_m7ma_Wqqx*502fW$k_ODpJkPZ_zMecptE6VBPY8!lapB_ zw=dFia*(H)LO23Rf&??HBn70KU(~i%=In+S`b2VsemP~pg(D}q-360hd{g|j28>R8 z8W@?)qBw0R=i*N_fWQ8qYN!A}zoKoYJ^!vy&j0IAH8gBDHKB50Y>7i;opQeQq5xgX zjaq*)-6_yzwb6^5zk0rNIp6Qs9}?qJ2ec>rRs&+I;E;7W;nzmrEzskm^aD&lE_scP zO|3}HgjLGS?oM)AOtT3EWlXkuh`Kq7S=5?f!NwMh6i?GqjnPa%tW6M@D+2RbGS6zm z32P|A*wVy@InfrZlC7TukgnV|fJE39vVdqf(DEI2@-VNmwqPqe(J!{*u574DYws7S z`>&|WFwS51qWgz_mzohmA@my7x_bME{^LkILIjbHb;IndF09t!oN0GR;;Due1m3i` z4HAtQF^=^TOMNn>w$$73ui$@jdP2CihYoxiqckvGFvsnSRws0GxD>r*)w1+1m;c;G zh_~U*j}?=_LvPPewzfH*a!Ro|o|6btS;SgcZ59Cd%dHzNQvsVOOY`0Ima^USma^US zoRnary!DSgqw6tr-Hwd%j_rF|9}Y|&6!CH>;3&X)c1V#t3|VfWbMB)Q@pQ)b%k9oe zd1scg&dTj5nTcoMO}bL8PB||_llk_3OBq0RBcKcCFBJG!Z(Q3^^hPhV)W+)JLK0RM z6yXX8ffRCtXz9=@WaGl127}`vB!LZ!F-BR9H8vI@8$QQ zAxtRrpgGc9yomh3x!jU$CU0h*DbNJqH1XNTS|`#!Am+3>)%X>r2$DD-=)x%*&5M~D zn4{td2J@H0*2?OfEe9xWGl~|A>FJEn1hH^T=WI-|l!0j*5s{4mgQl+z{FG(x_>(rR zY~0SVmw@!5b4p+{pH0pIGLQNPip4mI4)?JWgBVJ|iW!DVw==5M*Je0C$u8ZENm9m*p%qz?cM?dL7ytS6qnnSGC%x9E1dp_TmvKbv>wVcQ5MpqZ% zvHDsbLovNRkKuCvPw`mj?M?6)O9Gk|@gY+n8Y23nxiD-u0=65u*t-C>aeQ-ZTM9-( z>RkZajUj9|de|mq3`qYujsE`}+d)F-j_JXNOw-g zV5V?d27Vz7XAuU9qrUb)T=9FgnB$3o$S}~+Ihjw>>~|D*%V_Z~7&pOi$Xw5Kz{G)t z#CQlO-990cOwMEl8>!m*m>JGkdze?Wfj+Z#P>@YpH!E7T!^O3F|^Skl`c|e^ebP~Ha1G$HhltzK>>CJlD7Gcr3pw?RX0$T0b%a;hCo|I zRhft&&W`=0zg{W!4D~`C5^rm)5Vr1}1<>;uBNfJIi^egXu|6z6TMrhETkn+ZLwtn& zAqWbNym5G$gG_+ReAn$_RWLyG0&V}yj_lL7s12(lj3GhU{bzwiwLqB77U8{t+)iX3}aanDavy!}G2P+)x zvc^+cgDApNNb7K5m6)Umjhk8a%j41wXFY8oFb#Z0Yc1&)78603UbnSr#cGFf1F5Q@ zG|eDl#1w`y)>xha47umWKlR9Yuq4ok4Z%18)o*R*jqsN~J_Qs^(s}wf@TbtUc1Hws z&tPCX9<{*CHj~H$bBBB!77FB96gbz8ab5QqCV;8xmlb=*Gg(P1n>?YxdHx7QM0jsS zK_kCXN(twfKY*Y zIBq5&b*||zOL29X^<)7D9VKBSa%}-Nuk7I}@1EM3*8 zh^y79vZz58Kz35O#+K$%B3%MR!&=zV9fL?Y{oOb%q+nk;S>pH&cCk_VM29;M&h|Q5 zm2tEsS^q?b#m=*<*@&5CT#2FPiJtLEjZ3abX((!Da+GMjqylSEX7fQ6fuggkW^v=9tdP9 zP=qY1SJ_h7WXqTAvxS)rv|^YPnKS2LJk&HkpmcA()uWZHG09M;7>>pg4vNd)0|>Su z^T!3WY(hKpw%QLRNQbG-9@fJBfK?jqToR~%oJ+W}kwG%%YmJpzkzR+Js6^yk()Ao1 z(Z8u{mJxC+zt`^BRW|Fe$TFD01xD>sFQXm9I;`ud>t;r;>0qDSu?R_b#&o?`i|#J# z)zj@*7{>#JVGFJgI9ui>gUiC*S(nh-+9G4wrGXQ*rUg@~05$EREiq`XgH@JExHXJU znyZw8%(xkhKYO#E{eJeh3UPfUS;dvCrP=EC1xLnJEc80iI6F#)M>g5(c#cMgA<0Lk zYjM_PlNwuZ6o8m!=ZurA*kL*`CGKopkCJ!2LlUfr3BctZ{cGLOVzlbNaE`7R+#n%{AV+u7OM5;lJNqmg;kUz_x%F2?no&I$6 z1qxhRXg7Gfl-oRlnJ)q6Lc7V}8`f?;fnrsGIM;5J92O|FRa8|Q|BD2Qth_?kp%K0A zT)?+LcC;g+J2jYA^8@)AFGwV{M{F~e{v>NN8+ihUBOWApir3_Xh@X={a;t52u8_&iEMuAf>kxd|Dv|p_sP|T*D;|{(r{&v>C-EVff!zG4KfFPQN&-7v_p^0Hu z)M+|=ja3Z}tTH&;+iNa$H`n z4st3Z7N=JFoZ43{7q&WaA#>(JIS=zCi&6!10g|y7{QF}ndV1q>7vTuytJyL|Z!$se z!jZD2=m98~YG`TezOU%DDrORpPXX$rSGET=1}7G7utBjOj4$Cy#?=X&S%EW+4^+8> zF}j8g`NsO1co8Phm7lBa{&k(uq5WMN)5hqACk99#aVuLDUEF-)>?(>y^xm&J%biH5 z6m4eXqR`N^)C*18`!E8JmdS9yV;^m?ATtwgr+pWK4-jPr^?9NJOXr; z&6OqzWPl%KWB({ylLWeR{E!xT6Ru>EG<@w#V^@dOtO!3C#Y1KDlI8`8H#2Ihc%>cw zMi+P>nasp9W&mS<_9dip;Y zj)ScrucZSN^BU4;;X>SIHlZr)eO}9H)NAR|S(TH%fD?MXWE0P2P4Q1ZQjWfer7vW} z>b_RJ6#8P=h{Y~#7~&!1d_Iu$u-U4#AZr?i(?eb&rqD&1c zZWtH~Z${*XsIXC+kUf_QhlDHwcMTQNR6&KN8rD**Mx6fNCC* z(?>l>B{*_*5JZ~wwpRT2@GCoya;Au^YLGdh>YFhTi%$P4b&v%>L`CLvB7K7z@)10a z5-JpsDUtdUm=(3NJ<4B|gs_D~_PRj`;qz)1hsCNOq+VAF*F|JOwp$dfAd!p7USvHA zK-Q`xNzenfH5na{v6LPhIJQPG25ka47Zk+$xe8%e$mh_ol&M|%~DqDe#bJPaRxrSkTY6FvZSZ#!|#zI5OahI^_`lV6Ui!KhVj<#ic&1 zZweYnW^U0=0aD0rmu09GQ5J|pAZa&a9@`Q~c})Wea>^$vl(mwIw((C__6Y`Vqkvws z1Q_g(vg>j{HvO!Q_~%Fbi|o7ipW5IP|7re)RQ~Hy|ET^_bxUO;zdE4;#5Y@GY@5+e zA?$pIWR@AEBEQPt5B5(^_+MZroU&W>^OyUF>uKfHntzPehRR{B54QIlw+;AbC;Z>< zw^y=$wS`3;{{sb@$0xYm&lVo|!!b{#75=VjxGG~ZJjTPL#p4$vuEDxQZP)xSa5S9_cx8W98IRS} z8S6P@{H8KitwhZI8fE`42TR0cynG4!=ANzjFBMh(i!xrS`ClnAzCTzcp~?>j8?Cg; zt-liq)DfWK7LR(%?XX0(xXz$3Yl^>Bqkz0ceu~$hb&2OKd>= zK)W!2ECnWxC7JvNvh{_hl_)#)Yu54H<1+$5B)Dc{?ebe<1k*U>o*g)K$tTZh3< zyj2*SEQV}&unmIgKptbgqdPw3((zEvO4*LTbWAzisK4MhcgH7P%2o>dy0OdE2zJdz zj(*F%vO7NR?81oNq`>^6#P-mBdRQCwl>N2#0uND3>*4T?3X=DcmLDWk2n`^l7$g^Xl*1M{D`3Z= z*^?&2u780C8GWQN&}Mg>Fy3W@0~J;BrP1Xw-vXVzji1GhByYulbO92e{`dnrr0srE zIm7qe#50V9Kfc2f9yd2(`)bd<<=CvY?m-Vx9 zvcFd{1EJSd*l{jHlI~ycb{xCQQUK*d)w+(kkKW5R2m?wx7v#tpGytku#%K>W1lmnC z3W#fN(7sZ&0+HDdm)MX}kjO-fH7ujob_q1O?aXOa-zu10ura^DCR{!;fFm*XM&bCUuIwX#jJ5%kj8<@uW{vZ zs6f5iP-_v#A)NGS*#yLP8Q#z{C^QS(?|^dnSm5#Z6vMd=-dN@3SAJWM-Z{-M@Yb=L8N&rWx}I2t2lMnf(MA$XRXvCs z>+yP*`k0tz*xJaP3|;DjooT~jKpNVcywnGgucM+6j6E!gYzn7As?M;JZq1z+=a-N{ zAf!!Spijr#<>P7Ji59Q5Jv~(=%>K9VmYEee?X59~s;>15QLCG#e|+V7hh3TOI9+k> zwVHFU+brsc6J^#IW8d3Vc*3SJL## zG3DAXOkw@-oBt7 zf&54F{O^+ge4ek_(fc3suDUi`yx*)5@uR%cRZCiXe{Pd^ZvJP_lP@?I$=CBk`SYgy zxh{YHIhfS<|ByeQ&!4}XKR=c~|7QNYBY(a`ea?n_W-N_xoSqy@8-i5-9>0`7fJQb# z?_ZClWo=0Ok>lQ~^to6ay=&6B<2=8@b2H?rAHDD9{nq?lKap zFY^BWf%o6#eX!kM;r;l)_wNsUe}R6Q>zvbbG=Glg&&m9`E`MH{KQGIl)A{p?{CQRW zZ0FCb^XI1gc@0mE^ID$8c*Lp&%Zgnk8eSw%>}`a=`%2Yuk5U?+SqECD($8HY9P3Ao zC>`@J;a@3F7xPe*o5{KNVrlm1{yBGiZt?is z(F2F}pFBLf*w0>^J9%XG=+S)-9a@^7J>rfXKR9>jh&w!c^g(yv*vSVE&z{(KeD37_ z`MJfl@B5CrQ*-;5jxF9n!TS%--RWizA3nB!RyjX;=k2%WZ*!YZ9QxSYzNPHwwb?aC zugT_4@1L7Ha3VW0d-~9klSi@>CyyULwzxERAX7Pa?+x4Lj-1%Pc z=e_sepa$RnMtXh!-ZxT;L7#G`_;u*e0sZ24fe3f%7;pCCpat zA?J=>MfHDYDDY5Tx%NPD@_GgMe#7?HYvJN0XyTnWzFrd-FJa_%VPq5%=t7e! z9A!nJi-?%HwIXI%0zGi?&qpr)`S8U*cQ5|=(8WJ5UHtQji+?_N@z1jt|GZzHb4hvQ zAnWgW2%&nz4PxGXON+CImQL(>Xy?vhK}$xz`i(d2lZ5Tbjy2Nr{GA*;rxS)V+zA=| zPHq^6asN5h8P9NaGN^vtmMqJ*eR$hxxB2MF!-ubR*KPaomTey<>$+{Hw`@C|@#WCb z2i%@}ce$gpN8P>tUU$7)np-?_=;-VcvN1!+9?UkKFdcY&>CmyG*|7(*rH>w;BlC9t zz2U;=E%?B(#W@6hzxBaVi0}QgCm%exIS%Y--&~V zj_eai`xwfxohsdX8!jzHcjC~#{g?>_F yJbGaE$lTE-?7D%LPPw~|y8GRJchJo`XviIMU3b_WaSylyYo-kLI(6jSIr|@+jOhLV literal 0 HcmV?d00001 diff --git a/lib/simplify-wasm/Makefile b/lib/simplify-wasm/Makefile index f1be4dd..5dc0156 100644 --- a/lib/simplify-wasm/Makefile +++ b/lib/simplify-wasm/Makefile @@ -1,6 +1,6 @@ OPTIMIZE="-O3" -simplify.wasm module.js: simplify.c +simplify.wasm simplify.js: simplify.c emcc \ ${OPTIMIZE} \ --closure 1 \