From c39383333f72c342cd1f15d7966c74280e43517a Mon Sep 17 00:00:00 2001 From: Ingvar Stepanyan Date: Thu, 14 May 2020 16:37:50 +0100 Subject: [PATCH] Localize variables in imagequant --- codecs/imagequant/imagequant.cpp | 25 +++++------ codecs/imagequant/imagequant.d.ts | 2 +- codecs/imagequant/imagequant.js | 64 ++++++++++++++--------------- codecs/imagequant/imagequant.wasm | Bin 58638 -> 58475 bytes src/codecs/imagequant/processor.ts | 2 +- 5 files changed, 45 insertions(+), 48 deletions(-) diff --git a/codecs/imagequant/imagequant.cpp b/codecs/imagequant/imagequant.cpp index 9fa9defe..068b38eb 100644 --- a/codecs/imagequant/imagequant.cpp +++ b/codecs/imagequant/imagequant.cpp @@ -23,10 +23,6 @@ class RawImage { RawImage(val b, int w, int h) : buffer(b), width(w), height(h) {} }; -liq_attr* attr; -liq_image* image; -liq_result* res; -uint8_t* result; RawImage quantize(std::string rawimage, int image_width, int image_height, @@ -34,13 +30,14 @@ RawImage quantize(std::string rawimage, float dithering) { const uint8_t* image_buffer = (uint8_t*)rawimage.c_str(); int size = image_width * image_height; - attr = liq_attr_create(); - image = liq_image_create_rgba(attr, image_buffer, image_width, image_height, 0); + liq_attr* attr = liq_attr_create(); + liq_image* image = liq_image_create_rgba(attr, image_buffer, image_width, image_height, 0); liq_set_max_colors(attr, num_colors); + liq_result* res = nullptr; liq_image_quantize(image, attr, &res); liq_set_dithering_level(res, dithering); uint8_t* image8bit = (uint8_t*)malloc(size); - result = (uint8_t*)malloc(size * 4); + uint8_t* result = (uint8_t*)malloc(size * 4); liq_write_remapped_image(res, image, image8bit, size); const liq_palette* pal = liq_get_palette(res); // Turn palletted image back into an RGBA image @@ -76,8 +73,6 @@ const liq_color zx_colors[] = { {.r = 255, .g = 255, .b = 255, .a = 255} // bright white }; -uint8_t block[8 * 8 * 4]; - /** * The ZX has one bit per pixel, but can assign two colours to an 8x8 block. The * two colours must both be 'regular' or 'bright'. Black exists as both regular @@ -87,7 +82,8 @@ RawImage zx_quantize(std::string rawimage, int image_width, int image_height, fl const uint8_t* image_buffer = (uint8_t*)rawimage.c_str(); int size = image_width * image_height; int bytes_per_pixel = 4; - result = (uint8_t*)malloc(size * bytes_per_pixel); + uint8_t block[8 * 8 * bytes_per_pixel]; + uint8_t* result = (uint8_t*)malloc(size * bytes_per_pixel); uint8_t* image8bit = (uint8_t*)malloc(8 * 8); // For each 8x8 grid @@ -193,11 +189,12 @@ RawImage zx_quantize(std::string rawimage, int image_width, int image_height, fl } // Quantize - attr = liq_attr_create(); - image = liq_image_create_rgba(attr, block, block_width, block_height, 0); + liq_attr* attr = liq_attr_create(); + liq_image* image = liq_image_create_rgba(attr, block, block_width, block_height, 0); liq_set_max_colors(attr, 2); liq_image_add_fixed_color(image, zx_colors[first_color_index]); liq_image_add_fixed_color(image, zx_colors[second_color_index]); + liq_result *res = nullptr; liq_image_quantize(image, attr, &res); liq_set_dithering_level(res, dithering); liq_write_remapped_image(res, image, image8bit, size); @@ -228,7 +225,7 @@ RawImage zx_quantize(std::string rawimage, int image_width, int image_height, fl image_height}; } -void free_result() { +void free_result(uint8_t* result) { free(result); } @@ -241,5 +238,5 @@ EMSCRIPTEN_BINDINGS(my_module) { function("quantize", &quantize); function("zx_quantize", &zx_quantize); function("version", &version); - function("free_result", &free_result); + function("free_result", &free_result, allow_raw_pointers()); } diff --git a/codecs/imagequant/imagequant.d.ts b/codecs/imagequant/imagequant.d.ts index ebba1574..d869e9a4 100644 --- a/codecs/imagequant/imagequant.d.ts +++ b/codecs/imagequant/imagequant.d.ts @@ -7,7 +7,7 @@ interface RawImage { interface QuantizerModule extends EmscriptenWasm.Module { quantize(data: BufferSource, width: number, height: number, numColors: number, dither: number): RawImage; zx_quantize(data: BufferSource, width: number, height: number, dither: number): RawImage; - free_result(): void; + free_result(ptr: number): void; } export default function(opts: EmscriptenWasm.ModuleOpts): QuantizerModule; diff --git a/codecs/imagequant/imagequant.js b/codecs/imagequant/imagequant.js index 5f5d0034..9cac4d86 100644 --- a/codecs/imagequant/imagequant.js +++ b/codecs/imagequant/imagequant.js @@ -16,53 +16,53 @@ function na(a,b,c){var d=H;if(0>1;I[b];)++b;b<<=1;if(32>1];if(0==d)return c;++b;c+=String.fromCharCode(d)}}function qa(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var f=0;f>1]=a.charCodeAt(f),b+=2;I[b>>1]=0;return b-d}function ra(a){return 2*a.length} function sa(a){for(var b=0,c="";;){var d=J[a+4*b>>2];if(0==d)return c;++b;65536<=d?(d-=65536,c+=String.fromCharCode(55296|d>>10,56320|d&1023)):c+=String.fromCharCode(d)}}function ta(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var f=0;f=g){var n=a.charCodeAt(++f);g=65536+((g&1023)<<10)|n&1023}J[b>>2]=g;b+=4;if(b+4>c)break}J[b>>2]=0;return b-d} function ua(a){for(var b=0,c=0;c=d&&++c;b+=4}return b}var K,va,H,I,wa,J,L,xa,ya;function za(a){K=a;e.HEAP8=va=new Int8Array(a);e.HEAP16=I=new Int16Array(a);e.HEAP32=J=new Int32Array(a);e.HEAPU8=H=new Uint8Array(a);e.HEAPU16=wa=new Uint16Array(a);e.HEAPU32=L=new Uint32Array(a);e.HEAPF32=xa=new Float32Array(a);e.HEAPF64=ya=new Float64Array(a)}var Aa=e.INITIAL_MEMORY||16777216;e.wasmMemory?G=e.wasmMemory:G=new WebAssembly.Memory({initial:Aa/65536}); -G&&(K=G.buffer);Aa=K.byteLength;za(K);J[1612]=5249488;function Ba(a){for(;0=b?"_"+a:a} function Sa(a,b){a=Ra(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}function Ta(a){var b=Error,c=Sa(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.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 Ua=void 0;function S(a){throw new Ua(a);}var Va=void 0;function Wa(a){throw new Va(a);}function Xa(a,b,c){function d(h){h=c(h);h.length!==a.length&&Wa("Mismatched type converter count");for(var k=0;k>2])}function rb(a,b,c){if(b===c)return a;if(void 0===c.$)return null;a=rb(a,b,c.$);return null===a?null:c.sa(a)}var sb={}; -function tb(a,b){for(void 0===b&&S("ptr should not be undefined");a.$;)b=a.ia(b),a=a.$;return sb[b]}function ub(a,b){b.X&&b.V||Wa("makeClassHandle requires ptr and ptrType");!!b.Z!==!!b.Y&&Wa("Both smartPtrType and smartPtr must be specified");b.count={value:1};return cb(Object.create(a,{U:{value:b}}))} -function W(a,b,c,d){this.name=a;this.W=b;this.ma=c;this.ja=d;this.ka=!1;this.ea=this.za=this.ya=this.pa=this.Aa=this.xa=void 0;void 0!==b.$?this.toWireType=mb:(this.toWireType=d?lb:ob,this.ba=null)}function vb(a,b,c){e.hasOwnProperty(a)||Wa("Replacing nonexistant public symbol");void 0!==e[a].aa&&void 0!==c?e[a].aa[c]=b:(e[a]=b,e[a].qa=c)} +function T(a,b,c){c=c||{};if(!("argPackAdvance"in b))throw new TypeError("registerType registeredInstance requires argPackAdvance");var d=b.name;a||S('type "'+d+'" must have a positive integer typeid pointer');if(R.hasOwnProperty(a)){if(c.va)return;S("Cannot register type '"+d+"' twice")}R[a]=b;delete Qa[a];Q.hasOwnProperty(a)&&(b=Q[a],delete Q[a],b.forEach(function(f){f()}))}function Ya(a){return{count:a.count,ea:a.ea,ga:a.ga,U:a.U,W:a.W,X:a.X,Y:a.Y}} +function Za(a){S(a.T.W.V.name+" instance already deleted")}var $a=!1;function ab(){}function bb(a){--a.count.value;0===a.count.value&&(a.X?a.Y.da(a.X):a.W.V.da(a.U))}function cb(a){if("undefined"===typeof FinalizationGroup)return cb=function(b){return b},a;$a=new FinalizationGroup(function(b){for(var c=b.next();!c.done;c=b.next())c=c.value,c.U?bb(c):console.warn("object already deleted: "+c.U)});cb=function(b){$a.register(b,b.T,b.T);return b};ab=function(b){$a.unregister(b.T)};return cb(a)} +var db=void 0,eb=[];function fb(){for(;eb.length;){var a=eb.pop();a.T.ea=!1;a["delete"]()}}function U(){}var gb={};function hb(a,b){var c=e;if(void 0===c[a].$){var d=c[a];c[a]=function(){c[a].$.hasOwnProperty(arguments.length)||S("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].$+")!");return c[a].$[arguments.length].apply(this,arguments)};c[a].$=[];c[a].$[d.pa]=d}} +function ib(a,b,c){e.hasOwnProperty(a)?((void 0===c||void 0!==e[a].$&&void 0!==e[a].$[c])&&S("Cannot register public name '"+a+"' twice"),hb(a,a),e.hasOwnProperty(c)&&S("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),e[a].$[c]=b):(e[a]=b,void 0!==c&&(e[a].Ba=c))}function jb(a,b,c,d,f,g,n,h){this.name=a;this.constructor=b;this.ba=c;this.da=d;this.Z=f;this.ta=g;this.ha=n;this.ra=h} +function kb(a,b,c){for(;b!==c;)b.ha||S("Expected null or instance of "+c.name+", got an instance of "+b.name),a=b.ha(a),b=b.Z;return a}function lb(a,b){if(null===b)return this.la&&S("null is not a valid "+this.name),0;b.T||S('Cannot pass "'+V(b)+'" as a '+this.name);b.T.U||S("Cannot pass deleted object as a pointer of type "+this.name);return kb(b.T.U,b.T.W.V,this.V)} +function mb(a,b){if(null===b){this.la&&S("null is not a valid "+this.name);if(this.ja){var c=this.xa();null!==a&&a.push(this.da,c);return c}return 0}b.T||S('Cannot pass "'+V(b)+'" as a '+this.name);b.T.U||S("Cannot pass deleted object as a pointer of type "+this.name);!this.ia&&b.T.W.ia&&S("Cannot convert argument of type "+(b.T.Y?b.T.Y.name:b.T.W.name)+" to parameter type "+this.name);c=kb(b.T.U,b.T.W.V,this.V);if(this.ja)switch(void 0===b.T.X&&S("Passing raw pointer to smart pointer is illegal"), +this.za){case 0:b.T.Y===this?c=b.T.X:S("Cannot convert argument of type "+(b.T.Y?b.T.Y.name:b.T.W.name)+" to parameter type "+this.name);break;case 1:c=b.T.X;break;case 2:if(b.T.Y===this)c=b.T.X;else{var d=b.clone();c=this.ya(c,nb(function(){d["delete"]()}));null!==a&&a.push(this.da,c)}break;default:S("Unsupporting sharing policy")}return c} +function ob(a,b){if(null===b)return this.la&&S("null is not a valid "+this.name),0;b.T||S('Cannot pass "'+V(b)+'" as a '+this.name);b.T.U||S("Cannot pass deleted object as a pointer of type "+this.name);b.T.W.ia&&S("Cannot convert argument of type "+b.T.W.name+" to parameter type "+this.name);return kb(b.T.U,b.T.W.V,this.V)}function pb(a){return this.fromWireType(L[a>>2])}function rb(a,b,c){if(b===c)return a;if(void 0===c.Z)return null;a=rb(a,b,c.Z);return null===a?null:c.ra(a)}var sb={}; +function tb(a,b){for(void 0===b&&S("ptr should not be undefined");a.Z;)b=a.ha(b),a=a.Z;return sb[b]}function ub(a,b){b.W&&b.U||Wa("makeClassHandle requires ptr and ptrType");!!b.Y!==!!b.X&&Wa("Both smartPtrType and smartPtr must be specified");b.count={value:1};return cb(Object.create(a,{T:{value:b}}))} +function W(a,b,c,d){this.name=a;this.V=b;this.la=c;this.ia=d;this.ja=!1;this.da=this.ya=this.xa=this.oa=this.za=this.wa=void 0;void 0!==b.Z?this.toWireType=mb:(this.toWireType=d?lb:ob,this.aa=null)}function vb(a,b,c){e.hasOwnProperty(a)||Wa("Replacing nonexistant public symbol");void 0!==e[a].$&&void 0!==c?e[a].$[c]=b:(e[a]=b,e[a].pa=c)} function X(a,b){a=P(a);var c=e["dynCall_"+a];for(var d=[],f=1;f>2])};case 3:return function(c){return this.fromWireType(ya[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function Fb(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=Sa(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c} function Gb(a,b){for(var c=[],d=0;d>2)+d]);return c}function Hb(a,b,c){switch(b){case 0:return c?function(d){return va[d]}:function(d){return H[d]};case 1:return c?function(d){return I[d>>1]}:function(d){return wa[d>>1]};case 2:return c?function(d){return J[d>>2]}:function(d){return L[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}}for(var Ib=[null,[],[]],Jb=Array(256),Kb=0;256>Kb;++Kb)Jb[Kb]=String.fromCharCode(Kb);Pa=Jb;Ua=e.BindingError=Ta("BindingError"); -Va=e.InternalError=Ta("InternalError");U.prototype.isAliasOf=function(a){if(!(this instanceof U&&a instanceof U))return!1;var b=this.U.X.W,c=this.U.V,d=a.U.X.W;for(a=a.U.V;b.$;)c=b.ia(c),b=b.$;for(;d.$;)a=d.ia(a),d=d.$;return b===d&&c===a};U.prototype.clone=function(){this.U.V||Za(this);if(this.U.ha)return this.U.count.value+=1,this;var a=cb(Object.create(Object.getPrototypeOf(this),{U:{value:Ya(this.U)}}));a.U.count.value+=1;a.U.fa=!1;return a}; -U.prototype["delete"]=function(){this.U.V||Za(this);this.U.fa&&!this.U.ha&&S("Object already scheduled for deletion");ab(this);bb(this.U);this.U.ha||(this.U.Y=void 0,this.U.V=void 0)};U.prototype.isDeleted=function(){return!this.U.V};U.prototype.deleteLater=function(){this.U.V||Za(this);this.U.fa&&!this.U.ha&&S("Object already scheduled for deletion");eb.push(this);1===eb.length&&db&&db(fb);this.U.fa=!0;return this};W.prototype.va=function(a){this.pa&&(a=this.pa(a));return a}; -W.prototype.oa=function(a){this.ea&&this.ea(a)};W.prototype.argPackAdvance=8;W.prototype.readValueFromPointer=pb;W.prototype.deleteObject=function(a){if(null!==a)a["delete"]()}; -W.prototype.fromWireType=function(a){function b(){return this.ka?ub(this.W.da,{X:this.xa,V:c,Z:this,Y:a}):ub(this.W.da,{X:this,V:a})}var c=this.va(a);if(!c)return this.oa(a),null;var d=tb(this.W,c);if(void 0!==d){if(0===d.U.count.value)return d.U.V=c,d.U.Y=a,d.clone();d=d.clone();this.oa(a);return d}d=this.W.ua(c);d=gb[d];if(!d)return b.call(this);d=this.ja?d.ra:d.pointerType;var f=rb(c,this.W,d.W);return null===f?b.call(this):this.ka?ub(d.W.da,{X:d,V:f,Z:this,Y:a}):ub(d.W.da,{X:d,V:f})}; +Va=e.InternalError=Ta("InternalError");U.prototype.isAliasOf=function(a){if(!(this instanceof U&&a instanceof U))return!1;var b=this.T.W.V,c=this.T.U,d=a.T.W.V;for(a=a.T.U;b.Z;)c=b.ha(c),b=b.Z;for(;d.Z;)a=d.ha(a),d=d.Z;return b===d&&c===a};U.prototype.clone=function(){this.T.U||Za(this);if(this.T.ga)return this.T.count.value+=1,this;var a=cb(Object.create(Object.getPrototypeOf(this),{T:{value:Ya(this.T)}}));a.T.count.value+=1;a.T.ea=!1;return a}; +U.prototype["delete"]=function(){this.T.U||Za(this);this.T.ea&&!this.T.ga&&S("Object already scheduled for deletion");ab(this);bb(this.T);this.T.ga||(this.T.X=void 0,this.T.U=void 0)};U.prototype.isDeleted=function(){return!this.T.U};U.prototype.deleteLater=function(){this.T.U||Za(this);this.T.ea&&!this.T.ga&&S("Object already scheduled for deletion");eb.push(this);1===eb.length&&db&&db(fb);this.T.ea=!0;return this};W.prototype.ua=function(a){this.oa&&(a=this.oa(a));return a}; +W.prototype.na=function(a){this.da&&this.da(a)};W.prototype.argPackAdvance=8;W.prototype.readValueFromPointer=pb;W.prototype.deleteObject=function(a){if(null!==a)a["delete"]()}; +W.prototype.fromWireType=function(a){function b(){return this.ja?ub(this.V.ba,{W:this.wa,U:c,Y:this,X:a}):ub(this.V.ba,{W:this,U:a})}var c=this.ua(a);if(!c)return this.na(a),null;var d=tb(this.V,c);if(void 0!==d){if(0===d.T.count.value)return d.T.U=c,d.T.X=a,d.clone();d=d.clone();this.na(a);return d}d=this.V.ta(c);d=gb[d];if(!d)return b.call(this);d=this.ia?d.qa:d.pointerType;var f=rb(c,this.V,d.V);return null===f?b.call(this):this.ja?ub(d.V.ba,{W:d,U:f,Y:this,X:a}):ub(d.V.ba,{W:d,U:f})}; e.getInheritedInstanceCount=function(){return Object.keys(sb).length};e.getLiveInheritedInstances=function(){var a=[],b;for(b in sb)sb.hasOwnProperty(b)&&a.push(sb[b]);return a};e.flushPendingDeletes=fb;e.setDelayFunction=function(a){db=a;eb.length&&db&&db(fb)};wb=e.UnboundTypeError=Ta("UnboundTypeError");e.count_emval_handles=function(){for(var a=0,b=5;b>g])},ba:null})},p:function(a,b,c,d,f,g,n,h,k,l,m,q,v){m=P(m);g=X(f,g);h&&(h=X(n, -h));l&&(l=X(k,l));v=X(q,v);var u=Ra(m);ib(u,function(){zb("Cannot construct "+m+" due to unbound types",[d])});Xa([a,b,c],d?[d]:[],function(p){p=p[0];if(d){var w=p.W;var x=w.da}else x=U.prototype;p=Sa(u,function(){if(Object.getPrototypeOf(this)!==y)throw new Ua("Use 'new' to construct "+m);if(void 0===D.ga)throw new Ua(m+" has no accessible constructor");var qb=D.ga[arguments.length];if(void 0===qb)throw new Ua("Tried to invoke ctor of "+m+" with invalid number of parameters ("+arguments.length+") - expected ("+ -Object.keys(D.ga).toString()+") parameters instead!");return qb.apply(this,arguments)});var y=Object.create(x,{constructor:{value:p}});p.prototype=y;var D=new jb(m,p,y,v,w,g,h,l);w=new W(m,D,!0,!1);x=new W(m+"*",D,!1,!1);var fa=new W(m+" const*",D,!1,!0);gb[a]={pointerType:x,ra:fa};vb(u,p);return[w,x,fa]})},e:function(a,b,c,d,f,g,n,h,k,l){b=P(b);f=X(d,f);Xa([],[a],function(m){m=m[0];var q=m.name+"."+b,v={get:function(){zb("Cannot access "+q+" due to unbound types",[c,n])},enumerable:!0,configurable:!0}; -k?v.set=function(){zb("Cannot access "+q+" due to unbound types",[c,n])}:v.set=function(){S(q+" is a read-only property")};Object.defineProperty(m.W.da,b,v);Xa([],k?[c,n]:[c],function(u){var p=u[0],w={get:function(){var y=Bb(this,m,q+" getter");return p.fromWireType(f(g,y))},enumerable:!0};if(k){k=X(h,k);var x=u[1];w.set=function(y){var D=Bb(this,m,q+" setter"),fa=[];k(l,D,x.toWireType(fa,y));Ab(fa)}}Object.defineProperty(m.W.da,b,w);return[]});return[]})},t:function(a,b){b=P(b);T(a,{name:b,fromWireType:function(c){var d= -Z[c].value;Db(c);return d},toWireType:function(c,d){return nb(d)},argPackAdvance:8,readValueFromPointer:pb,ba:null})},h:function(a,b,c){c=Oa(c);b=P(b);T(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+V(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:Eb(b,c),ba:null})},d:function(a,b,c,d,f,g){var n=Gb(b,c);a=P(a);f=X(d,f);ib(a,function(){zb("Cannot call "+a+" due to unbound types", -n)},b-1);Xa([],n,function(h){var k=[h[0],null].concat(h.slice(1)),l=h=a,m=f,q=k.length;2>q&&S("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var v=null!==k[1]&&!1,u=!1,p=1;p>g])},aa:null})},p:function(a,b,c,d,f,g,n,h,k,l,m,q,v){m=P(m);g=X(f,g);h&&(h=X(n, +h));l&&(l=X(k,l));v=X(q,v);var u=Ra(m);ib(u,function(){zb("Cannot construct "+m+" due to unbound types",[d])});Xa([a,b,c],d?[d]:[],function(p){p=p[0];if(d){var w=p.V;var x=w.ba}else x=U.prototype;p=Sa(u,function(){if(Object.getPrototypeOf(this)!==y)throw new Ua("Use 'new' to construct "+m);if(void 0===D.fa)throw new Ua(m+" has no accessible constructor");var qb=D.fa[arguments.length];if(void 0===qb)throw new Ua("Tried to invoke ctor of "+m+" with invalid number of parameters ("+arguments.length+") - expected ("+ +Object.keys(D.fa).toString()+") parameters instead!");return qb.apply(this,arguments)});var y=Object.create(x,{constructor:{value:p}});p.prototype=y;var D=new jb(m,p,y,v,w,g,h,l);w=new W(m,D,!0,!1);x=new W(m+"*",D,!1,!1);var fa=new W(m+" const*",D,!1,!0);gb[a]={pointerType:x,qa:fa};vb(u,p);return[w,x,fa]})},e:function(a,b,c,d,f,g,n,h,k,l){b=P(b);f=X(d,f);Xa([],[a],function(m){m=m[0];var q=m.name+"."+b,v={get:function(){zb("Cannot access "+q+" due to unbound types",[c,n])},enumerable:!0,configurable:!0}; +k?v.set=function(){zb("Cannot access "+q+" due to unbound types",[c,n])}:v.set=function(){S(q+" is a read-only property")};Object.defineProperty(m.V.ba,b,v);Xa([],k?[c,n]:[c],function(u){var p=u[0],w={get:function(){var y=Bb(this,m,q+" getter");return p.fromWireType(f(g,y))},enumerable:!0};if(k){k=X(h,k);var x=u[1];w.set=function(y){var D=Bb(this,m,q+" setter"),fa=[];k(l,D,x.toWireType(fa,y));Ab(fa)}}Object.defineProperty(m.V.ba,b,w);return[]});return[]})},t:function(a,b){b=P(b);T(a,{name:b,fromWireType:function(c){var d= +Z[c].value;Db(c);return d},toWireType:function(c,d){return nb(d)},argPackAdvance:8,readValueFromPointer:pb,aa:null})},h:function(a,b,c){c=Oa(c);b=P(b);T(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+V(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:Eb(b,c),aa:null})},d:function(a,b,c,d,f,g){var n=Gb(b,c);a=P(a);f=X(d,f);ib(a,function(){zb("Cannot call "+a+" due to unbound types", +n)},b-1);Xa([],n,function(h){var k=[h[0],null].concat(h.slice(1)),l=h=a,m=f,q=k.length;2>q&&S("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var v=null!==k[1]&&!1,u=!1,p=1;p>>h}}var k=-1!=b.indexOf("unsigned");T(a,{name:b, -fromWireType:g,toWireType:function(l,m){if("number"!==typeof m&&"boolean"!==typeof m)throw new TypeError('Cannot convert "'+V(m)+'" to '+this.name);if(mf)throw new TypeError('Passing a number "'+V(m)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+f+"]!");return k?m>>>0:m|0},argPackAdvance:8,readValueFromPointer:Hb(b,n,0!==d),ba:null})},a:function(a,b,c){function d(g){g>>=2;var n=L;return new f(K,n[g+1],n[g])}var f=[Int8Array,Uint8Array, -Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=P(c);T(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{wa:!0})},i:function(a,b){b=P(b);var c="std::string"===b;T(a,{name:b,fromWireType:function(d){var f=L[d>>2];if(c){var g=H[d+4+f],n=0;0!=g&&(n=g,H[d+4+f]=0);var h=d+4;for(g=0;g<=f;++g){var k=d+4+g;if(0==H[k]){h=h?ma(H,h,void 0):"";if(void 0===l)var l=h;else l+=String.fromCharCode(0),l+=h;h=k+1}}0!=n&&(H[d+4+f]=n)}else{l=Array(f);for(g=0;g>>h}}var k=-1!=b.indexOf("unsigned");T(a,{name:b, +fromWireType:g,toWireType:function(l,m){if("number"!==typeof m&&"boolean"!==typeof m)throw new TypeError('Cannot convert "'+V(m)+'" to '+this.name);if(mf)throw new TypeError('Passing a number "'+V(m)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+f+"]!");return k?m>>>0:m|0},argPackAdvance:8,readValueFromPointer:Hb(b,n,0!==d),aa:null})},a:function(a,b,c){function d(g){g>>=2;var n=L;return new f(K,n[g+1],n[g])}var f=[Int8Array,Uint8Array, +Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=P(c);T(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{va:!0})},i:function(a,b){b=P(b);var c="std::string"===b;T(a,{name:b,fromWireType:function(d){var f=L[d>>2];if(c){var g=H[d+4+f],n=0;0!=g&&(n=g,H[d+4+f]=0);var h=d+4;for(g=0;g<=f;++g){var k=d+4+g;if(0==H[k]){h=h?ma(H,h,void 0):"";if(void 0===l)var l=h;else l+=String.fromCharCode(0),l+=h;h=k+1}}0!=n&&(H[d+4+f]=n)}else{l=Array(f);for(g=0;g=q&&(q=65536+((q&1023)<<10)|f.charCodeAt(++m)&1023);127>=q?++l:l=2047>=q?l+2:65535>=q?l+3:l+4}return l}:function(){return f.length})(), -h=Lb(4+n+1);L[h>>2]=n;if(c&&g)na(f,h+4,n+1);else if(g)for(g=0;g>2],m=n(),q=m[k+4+l*b>>h],v=0;0!=q&&(v=q,m[k+4+l*b>>h]=0);var u=k+4;for(q=0;q<=l;++q){var p=k+4+q*b;if(0==m[p>>h]){u=d(u);if(void 0===w)var w=u;else w+=String.fromCharCode(0),w+=u;u=p+b}}0!=v&&(m[k+4+l*b>>h]=v);Y(k);return w},toWireType:function(k,l){"string"!==typeof l&&S("Cannot pass non-string to C++ string type "+c);var m=g(l),q=Lb(4+m+b);L[q>>2]=m>>h;f(l,q+4,m+b);null!==k&&k.push(Y,q);return q},argPackAdvance:8,readValueFromPointer:pb,ba:function(k){Y(k)}})},v:function(a,b){b=P(b);T(a,{Ba:!0, -name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},g:Db,w:function(a){4=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,a,d);0>2]=n;if(c&&g)na(f,h+4,n+1);else if(g)for(g=0;g>2],m=n(),q=m[k+4+l*b>>h],v=0;0!=q&&(v=q,m[k+4+l*b>>h]=0);var u=k+4;for(q=0;q<=l;++q){var p=k+4+q*b;if(0==m[p>>h]){u=d(u);if(void 0===w)var w=u;else w+=String.fromCharCode(0),w+=u;u=p+b}}0!=v&&(m[k+4+l*b>>h]=v);Y(k);return w},toWireType:function(k,l){"string"!==typeof l&&S("Cannot pass non-string to C++ string type "+c);var m=g(l),q=Lb(4+m+b);L[q>>2]=m>>h;f(l,q+4,m+b);null!==k&&k.push(Y,q);return q},argPackAdvance:8,readValueFromPointer:pb,aa:function(k){Y(k)}})},v:function(a,b){b=P(b);T(a,{Aa:!0, +name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},g:Db,w:function(a){4=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,a,d);0>16);za(G.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},l:function(){return 0},q:function(){},j:function(a,b,c,d){for(var f=0,g=0;g>2],h=J[b+(8*g+4)>>2],k=0;k>2]=f;return 0},memory:G,r:function(){},table:ja},Nb=function(){function a(f){e.asm=f.exports;M--;e.monitorRunDependencies&&e.monitorRunDependencies(M);0==M&&(null!==Ha&&(clearInterval(Ha), Ha=null),N&&(f=N,N=null,f()))}function b(f){a(f.instance)}function c(f){return La().then(function(g){return WebAssembly.instantiate(g,d)}).then(f,function(g){E("failed to asynchronously prepare wasm: "+g);C(g)})}var d={a:Mb};M++;e.monitorRunDependencies&&e.monitorRunDependencies(M);if(e.instantiateWasm)try{return e.instantiateWasm(d,a)}catch(f){return E("Module.instantiateWasm callback failed with error: "+f),!1}(function(){if(F||"function"!==typeof WebAssembly.instantiateStreaming||Ia()||"function"!== typeof fetch)return c(b);fetch(O,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,d).then(b,function(g){E("wasm streaming compile failed: "+g);E("falling back to ArrayBuffer instantiation");c(b)})})})();return{}}();e.asm=Nb; var Ma=e.___wasm_call_ctors=function(){return(Ma=e.___wasm_call_ctors=e.asm.x).apply(null,arguments)},Lb=e._malloc=function(){return(Lb=e._malloc=e.asm.y).apply(null,arguments)},Y=e._free=function(){return(Y=e._free=e.asm.z).apply(null,arguments)},yb=e.___getTypeName=function(){return(yb=e.___getTypeName=e.asm.A).apply(null,arguments)};e.___embind_register_native_and_builtin_types=function(){return(e.___embind_register_native_and_builtin_types=e.asm.B).apply(null,arguments)}; e.dynCall_ii=function(){return(e.dynCall_ii=e.asm.C).apply(null,arguments)};e.dynCall_vi=function(){return(e.dynCall_vi=e.asm.D).apply(null,arguments)};e.dynCall_iii=function(){return(e.dynCall_iii=e.asm.E).apply(null,arguments)};e.dynCall_viii=function(){return(e.dynCall_viii=e.asm.F).apply(null,arguments)};e.dynCall_iiiiiif=function(){return(e.dynCall_iiiiiif=e.asm.G).apply(null,arguments)};e.dynCall_viiiiif=function(){return(e.dynCall_viiiiif=e.asm.H).apply(null,arguments)}; -e.dynCall_iiiiif=function(){return(e.dynCall_iiiiif=e.asm.I).apply(null,arguments)};e.dynCall_viiiif=function(){return(e.dynCall_viiiif=e.asm.J).apply(null,arguments)};e.dynCall_i=function(){return(e.dynCall_i=e.asm.K).apply(null,arguments)};e.dynCall_v=function(){return(e.dynCall_v=e.asm.L).apply(null,arguments)};e.dynCall_vif=function(){return(e.dynCall_vif=e.asm.M).apply(null,arguments)};e.dynCall_iidiiii=function(){return(e.dynCall_iidiiii=e.asm.N).apply(null,arguments)}; -e.dynCall_vii=function(){return(e.dynCall_vii=e.asm.O).apply(null,arguments)};e.dynCall_iiii=function(){return(e.dynCall_iiii=e.asm.P).apply(null,arguments)};e.dynCall_jiji=function(){return(e.dynCall_jiji=e.asm.Q).apply(null,arguments)};e.dynCall_viiiiii=function(){return(e.dynCall_viiiiii=e.asm.R).apply(null,arguments)};e.dynCall_viiiii=function(){return(e.dynCall_viiiii=e.asm.S).apply(null,arguments)};e.dynCall_viiii=function(){return(e.dynCall_viiii=e.asm.T).apply(null,arguments)};e.asm=Nb;var Ob; +e.dynCall_iiiiif=function(){return(e.dynCall_iiiiif=e.asm.I).apply(null,arguments)};e.dynCall_viiiif=function(){return(e.dynCall_viiiif=e.asm.J).apply(null,arguments)};e.dynCall_i=function(){return(e.dynCall_i=e.asm.K).apply(null,arguments)};e.dynCall_vii=function(){return(e.dynCall_vii=e.asm.L).apply(null,arguments)};e.dynCall_vif=function(){return(e.dynCall_vif=e.asm.M).apply(null,arguments)};e.dynCall_iidiiii=function(){return(e.dynCall_iidiiii=e.asm.N).apply(null,arguments)}; +e.dynCall_iiii=function(){return(e.dynCall_iiii=e.asm.O).apply(null,arguments)};e.dynCall_jiji=function(){return(e.dynCall_jiji=e.asm.P).apply(null,arguments)};e.dynCall_viiiiii=function(){return(e.dynCall_viiiiii=e.asm.Q).apply(null,arguments)};e.dynCall_viiiii=function(){return(e.dynCall_viiiii=e.asm.R).apply(null,arguments)};e.dynCall_viiii=function(){return(e.dynCall_viiii=e.asm.S).apply(null,arguments)};e.asm=Nb;var Ob; e.then=function(a){if(Ob)a(e);else{var b=e.onRuntimeInitialized;e.onRuntimeInitialized=function(){b&&b();a(e)}}return e};N=function Pb(){Ob||Qb();Ob||(N=Pb)}; function Qb(){function a(){if(!Ob&&(Ob=!0,e.calledRun=!0,!ka)){Ba(Da);Ba(Ea);if(e.onRuntimeInitialized)e.onRuntimeInitialized();if(e.postRun)for("function"==typeof e.postRun&&(e.postRun=[e.postRun]);e.postRun.length;){var b=e.postRun.shift();Fa.unshift(b)}Ba(Fa)}}if(!(0FXk`g1kOEp{ z;fde}MPRT-qy@iQKdGxNRZ+B5kD<*|QWkN)&NLoR{8AL=@LO6nA(fX*2+O|!?rCJfUESp*=R(93^VMQ$( zJSsXcD#n0Ef}&B1+R}mrcFKw-*cLV?BJDb9lWWlkd)V0(vJ6@itt(I%T39ZbfdNWu|fw1`>d5j##f(mQwVk*<@ipygt#q-#V2T`SV0 z#a^OuVmXZ$FAz--mr|#Ao@k=jLv)^aj%bp2mT0orO_ZA=o*|kl=F<7%X`*T3M?@Eh zT}0Ex4~b@oCx~W>9}rzAo+P?R+(PlWBs94rZjm?0kLa&-icZqw^c3x+@6+7J=+Z#% zpxbGS+)U}~INb9Ax#}^kkWfI_&2NL6~lQPFwaX_dQV0RW*#WCrLKw=nB4O~ zu_uI}baniK5il%p&I2nnzQ$EjMLsqUD)mZ5%N9XlQZlb7YNCmZ6ZTM1v&U&PUrJo| z|Ig!S;u^PTBk|a?-BD?b?F*TMA23iLv2v(8phcabcg**La zlCnE+LP_{&Q!+pNa7G_yrp{#pp1%?)p;xv0mes*d7lF{RtZy;dg{00w#?5an873vd zaL^k${6r?pa>Q~%b|`9=vA|Lh%`PhXMA`6%Eck<5_{@wc8_n@qUbbdPuLADJq33>9 z!I!=L0-HTq=-JZe-x}BhR0xkRWe#GbBHclx*9Y7CoY@aCbI=P;3!|P)xttfj@AEZz zVu+d1w@bo`XZvoHAkHY?0Al`Fd4!nxyM7n3ZD&`cS?1!3<)wQ<|B;GL50k;XRZ*UR zUdj5AsUKBj62-jX7!9u++_1N|$5iy#n^EYyAmAKD7UJKmt{gRSV>=uNb`Q5ayKU{` zaw8$KrG4D09jov}7~9ycT%FA7s~73R55D$bbO~#@x4n?Ar`k4G)sK0%jYA-z>qH2} zl$8zQDmG2Um7Kab<+}P*+h8GdWKk-Ld?Er0wdR?ZpMAa}!fhW%)LYG<&LsCksRKG)}Y`s#ZfoRT3ewvUYOim&O6)9h1G+p-K?q(@Ow}75Y;;_xtvZI5lgW>tL$luImLV0&3n~N5Ur?bNcD=! zP|>)WX3!VZq^o=B;Q)#gn>~Pkb5~6RWS*~S=p6=zP{ELb+*pB>>VRFFYs){Q->)4s z@oa215t)QZ~>Iz=Az<`%m*AB=P3Z2k!uoBa2c{cly8liQ<7y83C z#fc8_kl4H4^wA8G0Anz3O(F1Do3j&^fpU5f-^Yh8V`P#JgE^*rf$m49}_egCpTR+-W2o-|iT3!yGl$6_5V)DRSf_th$iZDNJr z$lkfj?{(Kt{1HP}wGWbFr1aqJ(`_LbL(v2l%W{l98^<;6CKFuoFRgkyw1_@sk?0QW z-gnYuD4Zn>JXX=ldlZmO&0ZBlX!xE5n8`ou(T^pd6HYb}mnAL;U)3AI=i%)ci zX>YBgp8T}d;SsvqT;Dd8?lP~my>I#s4b02!Q}V-y`f*B|&yOBJCckoYgOocn`R!vq zjMAUYwsC9ee@x@}N%UU6YkUuZW$e!Ps5*bT^AEDmmX>S_N@7aMX9E|-Y)y+fHR*S9 zeM|o68GpuQ`Kp;; zw`q^r@cDY$k$>d#oaVC+4B(>1+R$h(+a%nQFnq$R;3x|BDMG$h>%XSG zetK7}{vfS! zS#*2;k*mJWX_IeS^Z?Pf@&^{D$ZY%h5%b0pA6faqlB$Tjjq?4L-^twXU$aoscTB^I zM)hs-J(U_KMp`lDsHBc|X9HW6s1(YF^1NB*(iIN`+YnE3xxPkJ)N2U@wsKOAcPD-r z^tR?(uRB2W-Tdj5XT)fkX;2? zlipIPOTCmZOK&_scQ__%aNruPUm{g63y z0hbXl{2DYg$*;v;)Q3-hm5R4CWK*97I;JX>HKjHvSADX69qLgjq@sF<%xa;>c-82u zN+Fh0rRW-@m7G!wuas*s1u9CFm-Xw>t3vhhlj!LchgHcgzeJV#cBswEs)}roP<<8L zmt|Yy*&u~;&S)VNljGQIa83^?RHR5yD5OYGax7#m&V~f68MJ;vaSuPPSe2iG890Ra zG5rx9$9Js`oH&U`bM(dp_f)9`-Z&J;O$96tYzNTI1vJ5E&~V2D5kANCT+FcHK|XV= zT9sS1YPlOY%Eg~EC2(qe4mt9o){kKjM38hTZ{P*zsTjrujn^7)?;Otx9m&E`I0JJU z)lY)3i>v~cRCOT+>*JV346Thf0oVy=CHx$wqg?ou{G_sRVaR=QAPfSPi6F&6iNUm_ z??5V{QofBIaaF>H1AxqD9@An4S{(HFl)$cK5^@#*^KF%Meaw*Ui|NuF&n@(*+o`CN zPk5NNlf{uYHVI<`p0XG#p$5=3S-6G?wP@|y@Lb|Tp#y!kawkHQXDBGa43HT}ChsaZ zu|!MnN)?4d+0F6dIbjb>f`lfwO~Se;&ez^NQ0z|&fx|*Q1({eV!{_cTOyF_0$gHjhylmj}#6Occp}a0XmsB-K!#>$Aghu!Tb{S?@%Gu0E z%y<^A>jz3Q%b6BNA88rk3@H>YW|7e{t8ZujCyZN?qO3+bf1LWU$b0*SAv@&X#p z!JDsQ-gs5wU7^xJsgea&Wza`i1+br&#;mc5RkbSfzNT>e&>Mk;H1Bd$Dbx+`GVDBO zf_6;iyS^DGsxeD9X!GL@DrY3cbEq}mg1|188seBC*TbGyg~<}}u7oclhz5L}M74_n zM1&S98(R#@VOOC%IVee3tZ+(@0*EYNb{zh6;C)8m{1OOoQGsVEhifT>-7JC^QQ`6o zJ(?_fl#nH;7z%jkQO4P$z(bER&K?CGdK5Qmlvv#E!!?(HbHYLAt2n$EgBNX;LOo?a z*<9Rx`!hbW3wx!D;9yFkENb4`&`6c$`3-$d)vad{nHM%bO|P4ko6?Dsjc|ru-=rO* zHa8@G7NSoyX*)!J?KAgi6EAHs*s^P2}aKMCP|W`?OZN#i-YLj0MK_e2Qq1aC;}z7W2*&a5>9W7|Wdr_MZS z2FXqJ=9tOEZU|}X>rDBUfpS&7IcLk@^b;8vz{i4Qjkg>(g7Cbcxb_I|qWroo!z>zZ zp1FM@eyyGn_#NGIHh!1(G*X?}+A|ivM?&}?JstEbGxm-_pv=Ex!Nj^wKZ*}7NFLl# zQ8kpMcVQO~a0gRjut3pS)R{tta`{Ypzobw)G=vXLEY6$0so6TX5}lY5UOxmwLLaIG z?<-sHp}M@h^BWRluKf0)L21_!tRmvZ(0bZSyHTNUt8hnQLi)xE?;@1&R2KX2H@-7V z_GHYf-+6-%n-6clif+r-?RY6=8Xg^Qjz2Ocf9a#C2>oyV>c>aebdPyp*WYo}y6;Da z=>xO!soC^?{?|`+5G~8AXO2WDo&R9ZIHK+Ob6>c}ns$Q|iR5S{U1#%7-o7Aku)3Ua z{0#xm>F07It!6gTfAcq6d(v+g#bRV z;Vka0B~(<0k1owzev!5l8g6)J=C1nJ#um4?cgG^>W7ANgTdk_Qae!t8j&9C+Yh@5) zM>?%mbCBHaC)k8$IVO;rlRsHhAjI5SCC|aDQWHAXKe;^pSicE#YlC=rDr>bAR&-$| zq0up}=a&A6rsAY)^Oaiowy|Dn&Dr?y#_JQ)nvP*v(8nif;bJqj^-TjOqXYK-F8)v< zm!k04`g=d7Pg7xAuK?_^^})5)RBUK`cl}GsoB4_UC_A>^@lAVbAZx=Dcn&qDWCwm^ ztzU|%i13MZ+|7r-B6fQ0-F}&}^1l1=O#Ko}Kw?Kk#$uNg-si9}vwsk)DP8&TmtTJQ z*e%Mvjq%B00JD#8_7uiR-gSp6ox2#bN~*GXI!8-*GfgUQ9%j#;@bM`!3GWrXV&Q`; zP6{}IjzV&9K)_b1d77564(|rs@6oIw9|s)9l8{XSA0ev>y*xCi(7d}xMp;M({cTiR zZy-vapEM8c3z7^VPf*^yHRg?d8HySE<hs^~*8{i3V!nGS@fa7NPyK#1k5|KnGLmHM|=CQ;cP zJTcsi_3G0waDjI`KjYPF2^Ynm{wH4=JAclX#_Z3}FiQ{3D%&W%*ASdnR4u;7#@ugN z=E$LmW0uaJFND~O96p*7qP;|j`TSfiM0Z4p6?mD(?`*s)@XDwV_oCerG4CC3HmhH2 zp%v!g*OsN3ISb4ShPGd}aLL@o^RMo{?8-Bj>qzN7M28m~p+Tdevd@`8=LjihlsG zM4W;dN1=rPvk5b%o^|1zWs?`q`PyaR<)3~1PZn)4j~*F{QI8#2M=SDI{IXK!W?WI| zdKlgLIaq9WVP=iM2jlIJcL3fYc<12lfJ_WVFDb(1fV+#Z0?hWXOa^ea2%iPGs|Zg3 zys!Z0#0((tTG-(d!1Idm6@d9Uk?H&yW;V&8i}O&8u&v6WzU>jM-D<%qno^^m0}h?|7rlnejy5Ff-;H9};EM zGw&WBWOf&^E?^gh^t~Z{(QhWu{pJV1X&Cj>7B|{q?RtAGK4`bNgcW)eO*Iy3i<_vy Zv}^Ic+fV5AtuEoJa%Za><@?h|{|6d<7AXJ# delta 7508 zcmai34V+a~wcl%>d+s@N&%HB;ulXKkpECpV0drwSfkcYge2ILBJTdK;mWYvEh76bx zO}l7Bn4-u=1H>Y-%#WwU)gFl-ScGU}VPYXq3zd?JmsnVoDDS_{xq~CU-|Ngh=j^@K z+Iz3Bz1BK={FFN7CVWih^L6o5l<3L6;BYID;_7BCUy`_7xQR_ zxSVE+$B51oKO&kXwiBH%{)=d~c!cOb#1Dz`7l=oR=7^iAm3~0;9;VA5BK^(tgf)--v;`E{YU`u`W^eeat7v92KBuB>9d$~;4< z!RFrdKwc{lG7r5#DCmt8b%(TQa-=P@KmFJcs45`Y$$wA|QzbwpyF(|U+L?s{9dm0# zxp_XbVbm*G{R$K5d{I9lBlL=nz_KC>iBM=a7eHwl;ek@;!H!q>dorZLrqVN{gneG{ z$Ba6X&GAaa#6or|V&hsW!A1>>%1}xDWhJj(gc;K0L0RUb{l>E4uIaZT+dBb|V|U?k zR;Bi>mAe zFoe%gEF*cjz1g)D!&60X0@RGIXseI>kjGC4<({lUYeC4a3}?m9+|t-$9;ooAtn0wk zAlbxk*3{;X3HdP~Ti-EZ`R3)g65LzYp*)?==`SqO`|p40etQYe^!<+5k&m|a4>JnyN>s$Q1JW9I`i z*uW!mDmim8?~F|y<}X!^Ag!pb&-9YYXrhVL&471R*X4WR(E`!7W98rn73c&ahVbB* z@1Hz*(wUwiFfaQsPe7ew9?lSH>vZNRWU_W{qDvQ0~c^>x02g6m;Rt(`)PP{aJla zhqdusSO|M(?F$DK$ zSN}_Jhik>bJ#F!%Q5-FX@M0L?%~&;fP6Y%&vavW&r9=5av|cedPButFQL?cj6{+N@ zWHYz^yZe$T9E2^{Bo4sEFdauGgqnBN@>pLDLm>(wMTQ(UkT;xSZi2~jx*1tY z$4cBCjBa1i(IUkd=|kry+M}k6NR6JGV@sWG%~c(yExhvI@VYIGc}2qL!>i~Hlf`6V zzTWUgF>(oIBL;BfLhH21HBvs3HBUCy)^MVh&|Q=PAyA)GZQg0zeHuF!LiUI9*N`1m zr}7soLxB~$mz4*H?vCbX+bAv&V7~SRN+9|46T%#8zBQRd*RM4>m~}#gR`!|bLjbvcuqh6O1i*2a{gz`n)B8cs%C#NNn6cr7Y(L0 zg@-O0NVK`|lZ&sm=zHeuOBQ&wo;L(VoKE|r%nvTnCI3mD16lhe%zKwSL-(7XUfN0z z6pmhc6VdzT+E34>i%rj`t4FPop`45i0EI1)4x^1|K7~_6)=X>Ur9$^j4kDl z2U?oC%f^r~7hd)$T5BG;EHHBJpz=*av>k0bA4b%Eu2Faiq1Mi=fS8qYo9Kw?#B-gw za_+4B<3l-k@qDLfA49Rbt4bfL^9SkeHTn;A8eb$@_yhfy$lpi)i{$^3{1?dIOa3p& z|2g^3lix%B&q$we^^1djS8r<3zvcI?W}VQ>>wQ}vZqib(=GHAufNkPdPfF(>sP_l> z&yjw)-e0QUulK*GzpMOiy-WE^^bzGR);9(I7yM_*-$VLX0Gf3nXdVqg^Q#av$3xI; zXaLPKH^ z(G7(gyGB^FzOe18FR~jIS{B_)aLX4KXUJ^t4roK+KzC(AZj^;%%kCn&qp;@Mg_7A9+V0MUNmZ&ch#|`NFEIN0d&9fH19=>J6Uz2mLxEy}l;dy2 zgPZ<_Lh8#sME4eco$qjInMtksDBWkKt{Ow%H_KODT=F0+f~pS=_S&io>yIG5=~Wf% z8Kl=$=rSLrWJ>7$!=M6ev1vEW$Uj&jtMYUmzAO%k1z|}eNc~HLexQLHSzTedM*Ujh z*K?fPDg63i0P-!J7df5m4l1z%O%1A$rOLPh9i*y|><}Hw7HC%uQr5JZu)iwH1=YxV z8BmpImD56x^Q)?{Kqk**tb?#d$!Rq~sp_xAG|Z4urMV!DK}l5>copJS777zbRG(3NpQPRs0)cHaFmVjn0%jg zum)!ILZ3~O0%H!Z6L`uG5K)4(8pyQ-nv7>0!%{IU4S0H5XxA`EVOULsx0T}s)C4)e zUn-U?(x*Ea+mee%2<_yQtKF%gZARQuowsYEip9g4$pGm^xl{Pt=wO>~C@$v@wPDb~ zVc1vw{j1nz54N#-r2lzr9~T;9GqEs8jFQ0WlZMkL-`_| z3%YnvJiWhAAC6E7zbkGPryQWl{RJ_^&p~PZBNv9M*>{WnY^%~PD5et9l;z;rYz$yY zW!R(P*P$2h*PP0`urGqf0ASO(*wxty;CAr%n2OE47}a;=urZSQBH{KQLdw2KIRA%` z7H_23^Hk~7OrG7T=v@6{cZ%fpKNrjEPb})=N>#%NHTJ(jVVSbx<^Uf$$NpCp#Srva z#d`O15!9cLc!!wde+Fsp41f*_&QO!%a}R}ckAJRymuk%4Zq+Fde1TT9uPDTp$2)!1)(*mPF=E zs1J~R%vqw@oPCk`KK3lpY|p;f$eu3mH$)bWBq(_N+MgDF`HCvm1O#!-I49 ze88xlMr|`H^>EZZ)~FLPC2|lptI4em`}GXw_T#mjs?*x_9kciLN@sTj-D)0R8=6j& zqAaxT^)4}*O-@0i#%Cp66=P$ zf34#MU#T%4S=S{0TxaI4YpdIy1uWvA+P@l-MXFF7IE6o_@W8q=EjrU2{KgbKo7RuU z^Hb~3#&hHP2C6ept{;!*`%ydG&`G~B^ER{qvU@s?{VD0E6T2`3!_<;n~ z7V4j#K=jSRyc1Wtyyjz5(jV>Pp^QJ!g*!};6- zTbA0y)B>sixE=aZ*_`ljH~_yJX8FbRD#Yag0OYSSUArqSMK-06Xt?&B@MNqT)nTkBlNmp9aQ6=#A_B$DWb{}e#5VqdDIypU*HS7-p z^;Bjv9+FF}bWs$yb4yTms&{<+78F)iAxNE)E6BhHrNuht03iGek@7iULjU<`U4@DB z=g%L%PNnW(z`2oCa@*GW3JZDP-k?h7Eyl_y60Xp+gcG`_%C3N@EOsDKnm|`Y6<9d2 z=5VCEvtV%6KF})719=Mnt2mOtYXu>+q`Bv{f;bJpXjvH#^YOyLiHld_EDL7Wcb6i* zHQ~s$XU~wd;|E+lIBO z7&k}XZ+!HD6A&dv(0YYcD|1S~as97z{`({xqwv;q89$qUyKzHtBiOa9uu@+&AS+A$GxmMX3;<<7+`n-A9d1VOJref}+|m}J z+kAW9MKr_wW8c+yE_$g3&($xD8`?|TOTQHJ@vLGgerRAOvA5K`^-{ImTUzjb^_E2| z%)2kQV|d$vuhERcqX#NvelDmwGeYdgy`