From c4772a1b00be401fda1831459550bb880a97f4c9 Mon Sep 17 00:00:00 2001 From: yhirose Date: Sun, 3 Jul 2022 19:50:46 -0400 Subject: [PATCH] Fix #231 --- docs/native.js | 2 +- docs/native.wasm | Bin 431778 -> 434573 bytes peglib.h | 85 +++++++++++++++++++++++++++++++++++++++++------ test/test2.cc | 41 +++++++++++++++++++++-- 4 files changed, 115 insertions(+), 13 deletions(-) diff --git a/docs/native.js b/docs/native.js index a8eefad..6c7e9b5 100644 --- a/docs/native.js +++ b/docs/native.js @@ -1 +1 @@ -var Module=typeof Module!="undefined"?Module:{};var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;function logExceptionOnExit(e){if(e instanceof ExitStatus)return;let toLog=e;err("exiting due to exception: "+toLog)}var fs;var nodePath;var requireNodeFS;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}requireNodeFS=(()=>{if(!nodePath){fs=require("fs");nodePath=require("path")}});read_=function shell_read(filename,binary){requireNodeFS();filename=nodePath["normalize"](filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=(filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret});readAsync=((filename,onload,onerror)=>{requireNodeFS();filename=nodePath["normalize"](filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})});if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}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){throw reason});quit_=((status,toThrow)=>{if(keepRuntimeAlive()){process["exitCode"]=status;throw toThrow}logExceptionOnExit(toThrow);process["exit"](status)});Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=(url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText});if(ENVIRONMENT_IS_WORKER){readBinary=(url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)})}readAsync=((url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=(()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()});xhr.onerror=onerror;xhr.send(null)})}setWindowTitle=(title=>document.title=title)}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[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 len+=4}return len}var UTF16Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function keepRuntimeAlive(){return noExitRuntime}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 initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}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 addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;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()}}}function abort(what){{if(Module["onAbort"]){Module["onAbort"](what)}}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="native.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(wasmBinaryFile)){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(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["v"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["y"];addOnInit(Module["asm"]["w"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func=="number"){if(callback.arg===undefined){getWasmTableEntry(func)()}else{getWasmTableEntry(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___cxa_allocate_exception(size){return _malloc(size+24)+24}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>2]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=prev-1;return prev===1};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw ptr}function __embind_register_bigint(primitiveType,name,size,minRange,maxRange){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}return name}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i{if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}});if(0===unregisteredTypes.length){onComplete(typeConverters)}}function registerType(rawType,registeredInstance,options={}){if(!("argPackAdvance"in registeredInstance)){throw new TypeError("registerType registeredInstance requires argPackAdvance")}var name=registeredInstance.name;if(!rawType){throwBindingError('type "'+name+'" must have a positive integer typeid pointer')}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError("Cannot register type '"+name+"' twice")}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function __embind_register_bool(rawType,name,size,trueValue,falseValue){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(wt){return!!wt},"toWireType":function(destructors,o){return o?trueValue:falseValue},"argPackAdvance":8,"readValueFromPointer":function(pointer){var heap;if(size===1){heap=HEAP8}else if(size===2){heap=HEAP16}else if(size===4){heap=HEAP32}else{throw new TypeError("Unknown boolean type size: "+name)}return this["fromWireType"](heap[pointer>>shift])},destructorFunction:null})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i{if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value},toHandle:value=>{switch(value){case undefined:return 1;case null:return 2;case true:return 3;case false:return 4;default:{var handle=emval_free_list.length?emval_free_list.pop():emval_handle_array.length;emval_handle_array[handle]={refcount:1,value:value};return handle}}}};function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(handle){var rv=Emval.toValue(handle);__emval_decref(handle);return rv},"toWireType":function(destructors,value){return Emval.toHandle(value)},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:null})}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",function(){});dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2)+i])}return array}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}function dynCall(sig,ptr,args){if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}return getWasmTableEntry(ptr).apply(null,args)}function getDynCaller(sig,ptr){var argCache=[];return function(){argCache.length=0;Object.assign(argCache,arguments);return dynCall(sig,ptr,argCache)}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(){if(signature.includes("j")){return getDynCaller(signature,rawFunction)}return getWasmTableEntry(rawFunction)}var fp=makeDynCaller();if(typeof fp!="function"){throwBindingError("unknown function pointer with signature "+signature+": "+rawFunction)}return fp}var UnboundTypeError=undefined;function getTypeName(type){var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv}function throwUnboundTypeError(message,types){var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(message+": "+unboundTypes.map(getTypeName).join([", "]))}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)},argCount-1);whenDependentTypesAreResolved([],argTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=value=>value;if(minRange===0){var bitshift=32-8*size;fromWireType=(value=>value<>>bitshift)}var isUnsignedType=name.includes("unsigned");var checkAssertions=(value,toTypeName)=>{};var toWireType;if(isUnsignedType){toWireType=function(destructors,value){checkAssertions(value,this.name);return value>>>0}}else{toWireType=function(destructors,value){checkAssertions(value,this.name);return value}}registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":toWireType,"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;ilengthBytesUTF8(value))}else{getLength=(()=>value.length)}var length=getLength();var ptr=_malloc(4+length+1);HEAPU32[ptr>>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}}else{for(var i=0;iHEAPU16);shift=1}else if(charSize===4){decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32;getHeap=(()=>HEAPU32);shift=2}registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value=="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}var nowIsMonotonic=true;function __emscripten_get_now_is_monotonic(){return nowIsMonotonic}function _abort(){abort("")}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=(()=>{var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6})}else _emscripten_get_now=(()=>performance.now());function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_get_heap_max(){return 2147483648}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=_emscripten_get_heap_max();if(requestedSize>maxHeapSize){return false}let alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}var SYSCALLS={varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret}};function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":function(date){var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&__isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!__isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},"%w":function(date){return date.tm_wday},"%W":function(date){var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":function(date){return(date.tm_year+1900).toString().substring(2)},"%Y":function(date){return date.tm_year+1900},"%z":function(date){var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_emval();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");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 asmLibraryArg={"b":___assert_fail,"e":___cxa_allocate_exception,"d":___cxa_throw,"l":__embind_register_bigint,"j":__embind_register_bool,"t":__embind_register_emval,"i":__embind_register_float,"u":__embind_register_function,"c":__embind_register_integer,"a":__embind_register_memory_view,"h":__embind_register_std_string,"f":__embind_register_std_wstring,"k":__embind_register_void,"p":__emscripten_get_now_is_monotonic,"g":_abort,"r":_emscripten_get_now,"s":_emscripten_memcpy_big,"q":_emscripten_resize_heap,"n":_environ_get,"o":_environ_sizes_get,"m":_strftime_l};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["w"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["x"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["z"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["A"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["B"]).apply(null,arguments)};var ___cxa_is_pointer_type=Module["___cxa_is_pointer_type"]=function(){return(___cxa_is_pointer_type=Module["___cxa_is_pointer_type"]=Module["asm"]["C"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["D"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["E"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["F"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["G"]).apply(null,arguments)};var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();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;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); +var Module=typeof Module!="undefined"?Module:{};var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;function logExceptionOnExit(e){if(e instanceof ExitStatus)return;let toLog=e;err("exiting due to exception: "+toLog)}var fs;var nodePath;var requireNodeFS;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}requireNodeFS=(()=>{if(!nodePath){fs=require("fs");nodePath=require("path")}});read_=function shell_read(filename,binary){requireNodeFS();filename=nodePath["normalize"](filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=(filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret});readAsync=((filename,onload,onerror)=>{requireNodeFS();filename=nodePath["normalize"](filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})});if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}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){throw reason});quit_=((status,toThrow)=>{if(keepRuntimeAlive()){process["exitCode"]=status;throw toThrow}logExceptionOnExit(toThrow);process["exit"](status)});Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=(url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText});if(ENVIRONMENT_IS_WORKER){readBinary=(url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)})}readAsync=((url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=(()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()});xhr.onerror=onerror;xhr.send(null)})}setWindowTitle=(title=>document.title=title)}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[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 len+=4}return len}var UTF16Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function keepRuntimeAlive(){return noExitRuntime}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 initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}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 addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;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()}}}function abort(what){{if(Module["onAbort"]){Module["onAbort"](what)}}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="native.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(wasmBinaryFile)){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(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["v"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["y"];addOnInit(Module["asm"]["w"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func=="number"){if(callback.arg===undefined){getWasmTableEntry(func)()}else{getWasmTableEntry(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___cxa_allocate_exception(size){return _malloc(size+24)+24}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>2]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=prev-1;return prev===1};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw ptr}function __embind_register_bigint(primitiveType,name,size,minRange,maxRange){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}return name}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i{if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}});if(0===unregisteredTypes.length){onComplete(typeConverters)}}function registerType(rawType,registeredInstance,options={}){if(!("argPackAdvance"in registeredInstance)){throw new TypeError("registerType registeredInstance requires argPackAdvance")}var name=registeredInstance.name;if(!rawType){throwBindingError('type "'+name+'" must have a positive integer typeid pointer')}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError("Cannot register type '"+name+"' twice")}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function __embind_register_bool(rawType,name,size,trueValue,falseValue){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(wt){return!!wt},"toWireType":function(destructors,o){return o?trueValue:falseValue},"argPackAdvance":8,"readValueFromPointer":function(pointer){var heap;if(size===1){heap=HEAP8}else if(size===2){heap=HEAP16}else if(size===4){heap=HEAP32}else{throw new TypeError("Unknown boolean type size: "+name)}return this["fromWireType"](heap[pointer>>shift])},destructorFunction:null})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i{if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value},toHandle:value=>{switch(value){case undefined:return 1;case null:return 2;case true:return 3;case false:return 4;default:{var handle=emval_free_list.length?emval_free_list.pop():emval_handle_array.length;emval_handle_array[handle]={refcount:1,value:value};return handle}}}};function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(handle){var rv=Emval.toValue(handle);__emval_decref(handle);return rv},"toWireType":function(destructors,value){return Emval.toHandle(value)},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:null})}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",function(){});dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2)+i])}return array}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}function dynCall(sig,ptr,args){if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}return getWasmTableEntry(ptr).apply(null,args)}function getDynCaller(sig,ptr){var argCache=[];return function(){argCache.length=0;Object.assign(argCache,arguments);return dynCall(sig,ptr,argCache)}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(){if(signature.includes("j")){return getDynCaller(signature,rawFunction)}return getWasmTableEntry(rawFunction)}var fp=makeDynCaller();if(typeof fp!="function"){throwBindingError("unknown function pointer with signature "+signature+": "+rawFunction)}return fp}var UnboundTypeError=undefined;function getTypeName(type){var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv}function throwUnboundTypeError(message,types){var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(message+": "+unboundTypes.map(getTypeName).join([", "]))}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)},argCount-1);whenDependentTypesAreResolved([],argTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=value=>value;if(minRange===0){var bitshift=32-8*size;fromWireType=(value=>value<>>bitshift)}var isUnsignedType=name.includes("unsigned");var checkAssertions=(value,toTypeName)=>{};var toWireType;if(isUnsignedType){toWireType=function(destructors,value){checkAssertions(value,this.name);return value>>>0}}else{toWireType=function(destructors,value){checkAssertions(value,this.name);return value}}registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":toWireType,"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;ilengthBytesUTF8(value))}else{getLength=(()=>value.length)}var length=getLength();var ptr=_malloc(4+length+1);HEAPU32[ptr>>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}}else{for(var i=0;iHEAPU16);shift=1}else if(charSize===4){decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32;getHeap=(()=>HEAPU32);shift=2}registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value=="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}var nowIsMonotonic=true;function __emscripten_get_now_is_monotonic(){return nowIsMonotonic}function _abort(){abort("")}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=(()=>{var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6})}else _emscripten_get_now=(()=>performance.now());function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_get_heap_max(){return 2147483648}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=_emscripten_get_heap_max();if(requestedSize>maxHeapSize){return false}let alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}var SYSCALLS={varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret}};function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":function(date){var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&__isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!__isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},"%w":function(date){return date.tm_wday},"%W":function(date){var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":function(date){return(date.tm_year+1900).toString().substring(2)},"%Y":function(date){return date.tm_year+1900},"%z":function(date){var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_emval();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");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 asmLibraryArg={"a":___assert_fail,"e":___cxa_allocate_exception,"d":___cxa_throw,"l":__embind_register_bigint,"j":__embind_register_bool,"t":__embind_register_emval,"i":__embind_register_float,"u":__embind_register_function,"c":__embind_register_integer,"b":__embind_register_memory_view,"h":__embind_register_std_string,"f":__embind_register_std_wstring,"k":__embind_register_void,"p":__emscripten_get_now_is_monotonic,"g":_abort,"r":_emscripten_get_now,"s":_emscripten_memcpy_big,"q":_emscripten_resize_heap,"n":_environ_get,"o":_environ_sizes_get,"m":_strftime_l};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["w"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["x"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["z"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["A"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["B"]).apply(null,arguments)};var ___cxa_is_pointer_type=Module["___cxa_is_pointer_type"]=function(){return(___cxa_is_pointer_type=Module["___cxa_is_pointer_type"]=Module["asm"]["C"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["D"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["E"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["F"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["G"]).apply(null,arguments)};var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();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;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); diff --git a/docs/native.wasm b/docs/native.wasm index 94ba7a5723503312bfb39326dc4adcc8b395058b..839bfe581955572b312791448bc9fcf445068ce6 100755 GIT binary patch delta 73346 zcmce<3tUx2*FSz{_U*s{+$ai%i)@alcuh_5lBHWK)5`2_J=xu-f-Y8eujinmqN1W( z9ZX6rOEfPS*0Hjpva&M8vNF@cvNW^AG{w~Xf7k4N5YzX4pXYslpMM6k=C)?dnl)?I zteM$7w=8w)d#RNXW@zjdcB{|tyu}_2uJAAO`+O|c$8@gy^aYtFbo*004;)Zc=&pvo%eZMdRw&YSvG{9}4d zjHc;~@g{ncgakFl`GRL@s@axt=LioqRne+1+3yQzpn%7!zBs3oVjEfv^Qo%pJfsXU zv{;~0xwA=W=F}=G{e)4A8)$?x=JWZK_;~!!6vhzv6rZBU=&BCX9uN}~!*!JN8G(S2 zV)#-LSVDp?0l(u7gByn71xheAQAt#kXejfLZ5Y1jFJ>6JrZ~5#sTK%l=$Ni0>4uN_ z0C7ttau`#=0p`q8=c=m4W1U`FF9Ru*;p|X@PKj2mFs?Y6x|IbihOb2yOK5_sj0FOL z*jN^;YhaolM}y+rs0YJ!W$*ET(L0VkjFd-w(>Qz7*PT6vRv-86SDEcQ!Px*`3pUWV z+|SPUE%vhud=-9nq3=aM8{~VzA0vR?W`UBJcl@RLbNXzys@*R_dSy?R{zUF~0|2KTCa)LrU!b&a}O ztx|&ngSku8+}zytY&}D8%74KJ9!Ss4O;2CX(r2sb)713z^hxRjwSRD&TA==^98`W* zYL))Muaz3*L**_1D*sY{|KKA3LjUvr1^#mXe8ishKNI$s`RDnc_RmGM)Gz#V{ImVR z+*$tgbjP1Q(?0{rCI0FDY5uAH$^J=*75OLnC-}$v3;p8|8|xqAFYy0m95;>`{evgi zU+k#yr*Xun_hN^QL&hJ*LBtLizZ?6FI%8mPpYfZK75vrMYy4si3Bca-x=Q`vfbEbd}9Q+8eb!_#rVqj()hyI42+)}pBbBs8Y8&T*nq50 zjrGPS#>d7-$XaK7XnbJ2Z>%-mGu}1cF{+KXjkk<>Ec$Pj@}{xIc*7`S;q=#y*Nj=p zYUD^WnBQEtpP zg3lVyfPyk(p7FF1oNJUKB8=I_EF|^=Zab#EOk6#$+Qn$tW_i!oi8g zc%#q=jx)w0Ym8A~oY4Q$kL&$|$MmE6pZXC!Sg#+}vx0~8KlFoo@PPh1BK!3^eV-ou zP5%{yT_?`YOBHQ(C`Zs!TtNt}2TlBB= zFZJLTVf}N&KGSRTje2l{{wX5s^-uJV_25VPIz&Fy-`Cgb!T0oc5qU>{TYpOrzNxQ4 z{b00eU%=p(qBeoF{{*9=)vXsG8tK_zoZA3=!<2fLSLi@U({ca zk%fBrc|G`?zCgyx_4#`6S^XJA%Jg~q(|T~OE)bcc&(>$@jy@AiArYIQm*~Oi`ZQ!6 zV#WFtJvdpPgh-J-QJFXdAWQ2JKTs)@z?=A8Wynv~`GlsC}TluLaj??;-N8 zR;|6Qy{WAUYj0@5*R<6dX0!WW5sPTAYU!_N>Brcr#>web8cNW#j}}aSnNr@;R%(^n z3T?Soq!cM**)nY`qkmLtEGuH^OErW9zoaeEer3P1#Z(RdAun7(@FML+?FD2l)Fvns zl;>qOGM^)0fmW{d56;(~)t=GHwBS7LY0y7cE7gQHFgQn>jo2*B(PknxLn}dSx;9Ol zideBW1+mH6B&|pbPSD09QmBp7#v*HsR)E+E^)EGiObs4Y|5USrN7TdWA@vXSpn51K)`;+>kx>LR3h9A`L)g9`7UW=cdtd4)Deyje#_V8`$H)@1^ z$F{0l)UVaA)K}R?wMN~bey)C|Zc<-i+t{b-di4|aWAz*MBmYQUr+&>oRNq&_EwbvB zL&|%~JIdS2o5~x?Yf40UMX6F&Dl3#_%1g>(evpZ>X=U>-akUni^4GRbNq8slk`km1?EBLVbt7!S8rmp)OKiR9{dRs?V#>sSDI#d03sVKC3>XmZ|g9r?ILI48F-rRiVyNXQ_@l zQ(dc6D{GWWWvQ}SS%p5l$!Dk~>U4FgTC7e{-&NjHURRbYOO#iYmz59MY(80~-$iP0 zDO<{}yY9MG{Dx7ZPK~_8UZR{TnG-%GHc=g~1`E}(YH*BtLJ9t*99M$R@ncFZejinG z2fpoJ;}2H*-}Da*W@WwM55DeS;eXlxnm<_Sukx?<2Uq%E@kji@SCPNWU&t$zm;4n< zAur^?CH~lt-%4KQ@5xx0_qTkuKQF{`xX-yGA-~z?A_d^!cxL%5mY3zTw-h-)CbSCf zEmHC>OtrX$?6?rSQ0;H8EmH8~WHou&IyhO$3#q7RDaf%@i{%1l@yuR_LhFj015F;{ z>x-N`^Mdd;*@C4J3c!|vqIM06;fFBz@HRpm@bzkAjp@ky8 z={rI2&LZdIq)zF(%Va4ARK8>}XDDHz!SzMhKD;uKgi;In{X zz@@&PybOTtJBKZ#1Yb|zGB;Ezy!ayEpnBzmi}mrX;dYLh98!=bhqk_TE|0?y7q@o$ z2U}mZUiKgtQ0y7ya z6}_6UUCz?9x2k?f=iJFlf6V!@?6UDB$dK7J;}xVUzQCuP zDPeozG^LZz2XQE$<^-}^g^wlMhqE#KzR~sx{Ab*sW`4;-oa%Brd?8Idn_&vr`k;7U zz^+)qv(O~wD1mm0nRWqYRrSeKfYDSRrfYpMH3#ui`U4RkZLcd<@&FyqMl)z+@Turg zoCd{b*8)IM2qy{!2#huhFxmhLMN?~wokQ9EQqViMe)%-aSIL0DQS{r{IJuiMzjZ?Q znog9cVpy^?i|6nPPIG~vrRX*2L>}rTxjMr{th%$aqjff~?kuLHvRvofHfg-5L)G#qP;fOUKlWa z&J}0h!{%32pS_QIlzwy}%anrFrPTKQ}RZ574WaZGe1qQqL1%n!xe{GpJe^~tj{QUkypW5r@bQ4*6x zwE|ux%8>I!C-QW&MZhvh|HdJ}i2Dg&om1H-gOxZN`lS0^?wAvu-~04HpPY8*WTltz zJd2iq9G;Sx?sa1wx7B=5<^1!U_H3dvVaT4L{C` z0evnhlhX+$7D@nvYgZI21HwH~tQLQWc*f<~qwcr2Ecs%I_8{S^#LS~P zWfv4XJqBjRADbcx*MRci6z7(K!Hfbq+ims!c$EZ=TBoilC{bAKh=J$u@?vN6z@C4r znsWY~d||OO_WXPu7zq7=^M~|3I7IOoR2PS)5Wbu+&~76o!dK$UEH`=76Y%cIB`33P!Epann6>V zP&@uc`056wrn!=4=`>3KyZMka5~;dDEu3>M>K8Rjz@xvLCC){jkwvOWA|V!|iN;3O z$iWq^MZ!;7BQtS-8o!T9C5& zVAzKgn|^r;#TH-wj;qnssAADD5|VNZT2!M=xuQEM6e+nh`X67>;mW0jp7pSBf(I0p zd6HdG#%+V_3B|_(pKu0@U0^`L6GsLVEbMM12DIv9g_Wr$QrDdATy$j~Yw3iqY~g%# z<>Ds4@KnnepoI$(Wd2q)=Bi;V^I0r7u4#k3805jU*~_EQKBw;Lj)5w6LBJ0KArWhC z+iN;1?3i=abz`w)es$d)>{+MZ^+TF2m1+n0A=`lMH4~kA*I&k#RsC{(AC59@M%>(b zFNW|z&ww)b$w(|3wAW5k%u53jTtCfuX~bQ83Kx_6upU(x-s5T+qPONAL? z$uN4HP4`RN=duvH{M7QU@kHgxc=}s;XMSah)8v8PFqNDk4?NxE4jRfFu9|mXL|X)^ z`iE~-Sj(#C$7aD8cHSSi3+B(1hx%4^eegm}d7FpCEhBkS)wD;aaAc%DaT~{2gr6AR zaU=cKJc2h_JH|4hqYolEGj`&OA6Cjvlm!uKn}A#c0z%b>+=P!br#&# zT2vSCmd@e{NzRt>Q>)&ba4XqvR#B3ZJUItV_MhB8b~c2O3|-T4CQn}0tiChJHKSD# z;*E4mac+9Kg>&t+eoPN{O z@%x799pm@O@mOZqGmLhn}0Df@8{Mu7H;%%lb57nwA+ArX*)-B@Rb& zp|Huc7Lco4#}Wex;R>giABwL!AiB|hvdz5f!Y$EX=oRJvr+uYPZDHR-fra2|s5H5; zMEL)3UwLC$>;C`ozVdH7$*T9t+Fl$4B1KbQh$&@RUbWn5Q^R1MESH7t zDH&X)Zk{Yd>kgQVDRW`G0%Zva$`8qni)y0Y8Kx5HMGGQCSfkinESRv6UD7ZC3w{?; zIAx&K88AHvx^9>r>|PE71ZF`w=9rv7m?JafL|kjw>P8;M+_a})_NjxUzWD*tt@vR9R+u`Ljqo{+_onn85+Ker#y5;3WmN^?H z#N%-J$sq%u$qbMq3JAj{Mzm))ckPM{*EFJRXjWNJC5UzOwSw@{cw?JL+f2E#JXG~0 zi}6f{ncT^IwHuq}T>Z*8y=DWq_iS*!edR%=goT{Nzh^oRztSb97YrCIv-R_x-LG|V zKAq8?WmMJA=*Qw;Aa@CJ>dpe~&WO)4o$zwa8T|TRG%SPPNaCcjZhA9?EfTk+gRR+b zJ;q*eo_*_nHm%Bh`xeHRF=z36S5@{{ho ze3^6AC(}7B!XH1$?05n31HQx;X@W}2kvi-xb#}c>CQkb7V=p>gKh5NI3!E!H#eACR zO#XB@?V)ylIwI*1&2n!)WEo`O!+gGa!`ZE9Ybf^>v>_n7j>>r(0a*^#-%A_DNox=z zN&8!;_r^ideSm5iv=1Pcs^@GK_k9gkzOgZ#_Of4Ze9CpaO6@}Upkip-VfjxwULUS` zpB-}gZW@f`cEYBodeZ`Ru1g7e<%8=7{sZ!xy{p^r>E>>hrNPx;movD#EG_V?Hz*i_ zzMqX`df7N;FC6DA`aA-BH*LPcb;Z20xk|+_-u3k(EVIFq-5WJ&)ja!9rnv~Kq+K$> zIk9!1M(zy7nek0>)s5f0s#vFy%o~p*3IAHeX%jp<9Cl{_c(vZ(2tiUfu#!9L`|GPOBQTZ@Dbkb^l-{XL#KPr{MP_%(vOUm$7f0ZU=_3jaB0g;F`voVrSmL zHDO4QpXQhfn>V_EsUaWvsz?Q4ycEedr>Cd4P zsn%jHRVP#QkPkNQ=kx3zJ*SQU<4y zpp$;nyfy)YNF?wyR1Co$qlB&@iVs$Rd0p_+`)#JV@SA2f5tlo#FK>c=^<-m?O9s12xy==r>SMReO)V&fxQ2bi6gMoa$^i zJ`$V3?tfi^-(&t7huNx~c$FhZyvf+Pn0rSV8-U@X9b8r&brh-C*b zy(5_3WJ8fJejk*2q@Bqg<^1<-@qANuG1}hOl%>Q>!a4^QzuYonHe-ER{Qed&xNW3q z_P!QkUlMC2o=jr5nLlTPkNxvymd{=kqO2n8k8CqL6g@* zBVu);c`{oZ*xx|^{>Vqkm|mbH5M*nlY7?IX*+0EC+Hlus%%;;H% z+!FOnjG3r)5z{;1R$m>HwQ6NrXIe&T7*uo)-^@(v2Tn>*f`}n|l$tp;y71KKEJm(z zDu*o;=3t0n#l;o~LW@4qIw`k6$e}fy%FV+1DOES^p@h9 zLNVej7G%}pk+WFe#A>8bSy>n3vPP^ui{03EEt09~dS=C&$yhXjSjJ>w$|Xy5ofzDO zT{QG$Vf4-346}t(a~KRNRD+Qw%hPnv=Oo%X+JR!-lvXAUS}j$|<#o(5L`_%LrfVJT zP%Zzd)r#c)7gnk3Z-v?KRx3i1tk$K7EFIea=1{s%W%{Mx!~~pKtgz;;)8kR zvts-B%Ef}NtXXiihc^(#TfrqctHq~XS-aHLQKZ#maKXr}K}e0Pi=IsmT>Psy>(ulGMJ_(D0!lXc?hSGC1@UHYmdRce+k3Nq>{F4^hvl>9B9r>C zdsw)^R^D>bR)#2(sT}wfS3OTP{>oV+Qo$(N2$m~do{ zKrU$G2&Ihv0xPZnc~iK*;6UI zH$mb__`$za@}@VZNcARh9EEaR2QxaKhUMMmnd@XmQe%@_+-K7E??|=0PFrFk|kKQxdB{P zLtra;Z0!T*3g#&^JE%9{bevr@&qGmE2B42G>~`8MY0lzyOB@KANDMA6bL=XMDiJCAmmZEf^LRI$ymN<6<@M;q1)g*B97Y*H!QLpB~Xw5pWCbdtnSCzmL zIT!5uQbkTADPfep&BIYR*K551fY&;K9tr|?%L^&8CPjC8HH!he0tCRV8Mcc6dsPYC z_EiJn6y57podsA{Edk&)N}yM>6yWkLxT}P<1z@$?g|fMd8A_F8Q0hSs*HXX|SH)c1 z;_;9Hjv}j^s|;8UFG96O2l$lXst0@ZNqm%g%)_@nifM5SwP z*dwLpWK{yassvVSZ(s;TOTDVw0LxBn0pK-CpjVT?W8XH^q-eQUb0=U~vlc+ut4gp} zmB5{~4OJ;x;Z@xWSXSK)z^h51SChasyBlg!w8pD>5U{LS2f(XIVA!ilaLvyRRVli~ zt9lHutXdDit4g3(lfbom8fsFs)~i_<)t3b)^(BE`O#;KKe`%;n@!ek4V!*P|A^={a z1bS5oT)MZRCPnMKnzI1Qnk4|dngn_^39R|Gp=Oxk^6UR44Q{?<^H zq6MA^E(9!VmILr=66n<=u(YnBrp$3`hV7-%sud@z66jT}1X$oMHI%yadx?cox4B?F zK+37~I&73wZTUldF?#0rxH*YylhTl!hRH zrA02yF#TYbsPa5UwP8}YrD0N#F+rsfoUyc+Hi*UYbv5GYL2OEepk|Y^GW{J4@BKByqyH-%+ezTE}Q|!Bl-4&1fq4DPZ(no17iHsafo|z?) zCx^hOX3NA!m$0^MvDkkJyOrH2a)z>N5uAG^OJUeao|2e&75p~O4rRmRml4L%9!3F- zXNhi?u^s+sQY38{`zL2BBm%MeN|rA!yAqGAmNz7K9RT z6)toy7W=Md9YM{?+psyiQ6%2Rl0?bXY+(A0FyUby%KaqzoSn$XV1sd~m=*t3B_Nn~ z4cio0!Y$Ln7?|c{k#{Y7q;W!I@3rhog)NHo{|8&mSg|;A1N?8rqJJLC7R4i2PZv%X zwIkSmUd%+zb*$5?H?d^iloYJj9a5N=26i}4F6bj}yM^7vmO3q->naZ30)zB7(c)HC z1EzL+ z4X*hd%Q66x&w-NG^E`7wWJeXxXKbptuM$1_P-H#E3Ub~`Acvmc{EEZ&m-FJxR=qQH zZwv9=W6Vm&IShm;D^A`RptBLky#cMpWZou6c#sM3fhSzEFG3D)wAHIGxxuW5+RSo8KaUUPawb5I|2z6mLA zXKn^#czvo~di(1C?FdAkSZ^*QDNPcT8^tu%VSVv)B4? zXdb81MGvuX3>zIKLOUayfD30HQ8pPW?x#@X#T&mH4gFA5ioXF&?rjAtQMC9XdJjWNEMZH3aic`Cbx-7U5pgc|sE zJR62HfJm1K>{W)t&dBbG%pgGQFJj9jqDkyB3V)x(hNa?4`Jns3dR!uxA?|w1u(nv- zFqySx?})LJSv&p1rch~LiItOCI*%lajgwjPoZ1zb4PSs5a0mw@KH8FRN&b7vYZ)SL z3hT)cUND876Mikj#Cvw%MIZAQw2~eMG1q@?JpUTB@0WH?$UxAmveK8#o6f&RlL0 zBu{7Qjt{CrzWD>#yCW*LPGxtp1CfE#*lP;g5;;DDwP);`NR9)=59UR_oW){U+>Doa z9(rz@gX0y^c@Bmmb`DGBGhPyH=CHO@?y@;dW0Y`>V1p@KAfPZ2HYsJD6J{*qc^!RF z0+?7xySS7Mp*&H_?xc{-WhoS<&1F3jytXbzm!$~JW&dJZ#P+$Ylle981(yIGDfq2s zR+9OnNPQa5idIEFc$#h36OJw6bVoa@33^$#B(ib=8_3z_$RE$Mp$fZAoWF<-Vp~P= zBIxtm#F0g;0|`f)3bugNigguiiMoZEw~2=rL+^hl7A|JJ;0@Wn7;oyn5;relX`L}q z?6su8h>cL1R&y)aN?K%oi$Q9q)UvD=6z(SfAqbBwUc%nyXz;FO>>g@q%QDs#4aY8r zcWkB@vK+F4)N#vM9)&n<+=k@!E3kCT6d9G69Cb^?WtFTA+b$lighy_sSW^joSFuF= zQpx5aH&V0`Glo|$5${%EiJ2Mcv5G-%sTW{#r3O!XJEcUU-=&(>!fI}QC%$=wwRHP= z{1ukmavR+$tixF#a;aRo7Q*|4c1nd7O2#zk_9}RPn^^fOChl$G*sJVv1Vbb2JOooC z>>{>Jd>LUQ!JxjY*(k7a*=lxGN+Ui2IqusN@__kmB={P8L{9aYud|J8d*s$P*!ywp z8IiLNCjs9?eqKjU&c7AEe#BZf{g%nYEgv?l#BO-fM8Rk5+MHvFJR!{gg*Bu<{Gjex zv5yWw<8t`$5UyyG@fDY)i9sK;%rG7Jb32E;f#iXrOaGed?l#Tav;1z^I0}-o;wkWF zB~YMdHGw<7(LYKwL$TC`Vj;MJyk`peapl8?Sj=*I*f5-o2o$h4`$!bS^tK^DZyPi^ zF<0q1Pl0+F^lQLo4*?S${HhnH$@eh|5|7b4862=0Dh_X>r4@jDw3&acyf9#fs{u%TnDDz^LxR;S|R?B}gRFLIxEzI)P@*Jw`@( zRbC4lO1#6#u%z1X6q&pNf;%1fZUN3T$t#cApv}CHcq$XlMhaEDD5RvxJPfOnW?qs? z?po@MJoCVQs*Syto~xjqUp%s&WnC%>(sQ`wmT)^6=ZXfcek2$%IH`v_o}@=dMY{{U z#FpO4Hye*(NRDvGV9|B;N&(?b3F~$xM4LR!c8ob6O`+&26pg`<;%opdxj^=XY3O0d z9AFiN5*I-RMqL(=Con{D& z^lE;Ac=A(tO9AKLN;vT$m*=2*M%TlpIAscRaJuLn5m|NzTD2(RSJUK7mVYj$B zA|6EGk&BB0>bw!^EMzIfEQtxWr#usp4TR8NOENa3$?=BoAD(}R0I30T=WDd%G116i zRO9BIBp@^pp!dgCNU$L!@3%CwLnPP`VXzRwA+ZAT8M(ez7CrQXgsG5EVu|Qd!%~?h zrfy(;+5?*_rx+n}SDG!T1&r?;j4#&Czlp-R|CJ~}SpP>+&_uxqB_)jY`M()_>fgUN zevMchW&D3JcBc&8t^ecLozCG^|9cLL@inaNIdW1e&=_EGNRy^gCtn$p9M+;!6cR3H zrzUrnm{@8Sbd=ax!_LOqnzD&ypAQkjgrI6Uydz|Wck-Q0v(ME!m~ps=8iKGjD6Wvy zEOO#t(?b)-5CxmC(^kb?AWYI+og)$E$oT{T*|dpeToFsUe;7EM%ZJGsk;6yH+c5DY zX^Ms8ULWY=RucfQ6aY#5axUXi0pfBwB5Adl6$i!I|1*}--+RaRmpnMFYi=K~OdPbD z{a^ykYDs5D+YEcINolrQ=18;*-A6Qk5Zgav=jcCRM+Ug%=j^FYI|<&&AEc)Uvdm68 zI9738JJ23ga4V6VECAFz^O?xH&sk^Ib5-<3rP(A4E)twN$p@3Kzv0VIoyuz;x>C-ujcLOZEwdr)MOSeyj@IRvr%F*J$~)2~Vt% zjyr#Jp&iC59#gC>66s&T#MxXVR(#D;#mKMNZH?~z(X%@+ko-3|Y>Pg)7Q4S<^x|6F zw1o{w!}UXO{^XNu8U*jHlSufQrS$PGCH}h)tY!W6^6e7Uzv$$JMcOO<{lX$Ws3y|s zMYZU>l|`Rai%Yh$Q{PmJ&$cq}Q8hht@g7x!;q+LVd+%pNhi}-bEcu2Bdr;o+Le2h;hFd<&q$wp*-WLYdN6c>uMeO8S7TsIoR9Pyib#MwVG!48X0euSxcSe*A0 z+rsKa@-DW8tk?a!;G{SzF5b=F^4C3$11@G}h{T_9!D_d-@n?2b_^{%$_ZBGjug%R^ zyKszRPc(6G$#6Y9#x6m0S^^>kVf%#76i+L?nLz6M6cM%Qgujvjgs9`#}J(! zkasC*fi4ISpcl>ZKc9(1!J@I~LSTSzK$v2)5G%x^Rnu>m1N;%IupjW!cYOA*iKbx} z&*1iJX#jQtQ0>nXP24t`$wB-P0?QmqEousI9l*a#vzc870IyI}O=g$kRMKZ}O#@gB zkl8Z{+zk+$yA*&WvoXo+=LuX5P_;iv2?MSLtl7IMxo8e0pP+h`05$uWbbv164MBh| z;$;N7h)bwt7x8bD>LUJ}QeC_&3ETo?x;>2w6bQWKveyD{pk8NU*)MDc+Y{-xmyKcU zKJm`4tWW%Xc#&lV@^Aw}HSZICyiE>0%jjVX7GD^vG8wCWY#t)e@$g#2oA*Tq{l++B ze~BUc;FJ6-^2k2+q>}trQ@RX?YmRsi*MvY=Jh&8?d&b@ELWh4swVWS022o@ILA zZ}n_QN)dL2SZQE0CQ=nyjV|qp%a1U;J^n*%Kf*#{$q{(DivEZovWF#P!0gK9PX=&p z2)mKU7f0b20X+wfVV9I4@{eO<)iSc_ID3XA-5$ad23!k~yBKNBn1y2O33dm1v*!f$ zW_BVk&&;rzqOxY;%QSvFqW$9O2S5N8cp0c_0tbZ||N z@d4)WN9os-<~UKw_#Ij9+6=9Wy$RX*^36^c(%Y7sCAx9m8td?I&U=A}GdO>qvx%aI z#+T8>$bQRzmKP)2T>o9Xd%?F($q)IlYxC1ByWPN-!||DfFs&ATkg{6=M+%sP3+Oe) z78J49z|i*FTNJzwmzFjv;kH^lRbI-)f-!0{aT7kP){hG3@ZAjCCzz;i6_OljK+v`w zx$AjW47HA4=2CA7DnJbkgc$R-(o9VC^Y*!L^AxkJIE+2AE0Imt!2EP_A&pH&x5nKY zLPYfzJQf3g?i6`3yj7Pwy~`u(8dn=e79^%k<7(I{q1G^2>(*h|a?s6$E;ImJ6zT%B zyzDi8cY#+2n%Qvg2Z6d8mPO5AJ7P8>E=Ss_Ckev`Ezq$X>rB0^OJGnr<;0lwr>z1^bf!L=i^tGJnT|sB5=o;V>x+8A;74G ztw@O8{GwC}z4}8!in#m-wYeycR7e)Vk7e)UD z6meP6l6T6Ipvo-@z%4ucWLeQOz*Ewm3UVz|&ccC<^ee zp&&kw=XWCbB#x)W)^OT_g2@X-T^#@ZWNzOC9_%tky1ff<2L!08JCIA75e-7-jvsPm zXSay)3H&_Vz+Icb+qZO|Mao;KQt}|i;2#MYJ%JH*|5TFPmyt=h4$EUizb5!BpL}?e zB5rQNd!LE`_O6Ej(Eo^l-r%l9mM<$D%!cQd}GF%j@-$es`pfc`Tg zT8TH4cniFk5nm*Mhx=r!am{%=YkV2DRSSNm%diO<*dAi<)yLNw`vu&+%z}xuQ^Y3o z%MDtt*S_NuHz)HxP{i|+`91Chxky})Kf$n^96g(7i>0YN-Rq1TSA#|q9ECePI%Rs^a2{fB+amgxXye7!5Dx@a zAN4j)+m1%+Li`-=-kv)PAKieaP}}ei-Gq&8cs0bPq%Fh-;a@p?09hh-d)|t@CPudB zA6*Nr1kV{A1w^$Hydd<+AH@E}=R-cR97_d@VKOt~%h@ONe#B1b{O z@Qb{az^gA;wnj?7)~g%Lhgzq*KH~XirjJl+;XF+TwBXRWyt(#)Z>D0B+n2V1)^9*F~ z?#$EUvG%}Fz<%3`Gbf3}v-sKZjb4|T&xp&B)TYrTTJsqc4h+MYJ&2O$P0TL-3opY8 z6tUziK0UIr8}HDdta^9hZ?N*nA62z|3;CvCKy&*y|x1JfovW=8^jsV#D>ARtmoqbQ@K6nLcM<62IXl!Z}JP}(B}#ZDy!S&|fl9w{hduSz!C z+Qnf&D+vNdnP~%~jeH^m0TEIs{>GD<*)C5$B4VSIltn2)agP#|JCzb-NlFlUl!Q^n z-tq@=WgDP+3GD_{c8Jmr0$L@Zf;qUqDZFqhF_m|YW|EjbM?5T~o742uqVx#MzrB{*Fg<@Bs5r%^mA ze$L-GjV#G&gdV4X%6`s|kzNX5E&;0ngcl?NS_|lF6F?1sqm;J|!1^Qry8*mODF*=@ ziUCkCOR@LF11JXY83CmLb`Y=-z(E2k0c>dkU=0B+0IUP>d;);Y0H#uzS^!7k!f9*o z1+H&-+ItoGdD@0idfF+bw2B07SpaQ^0M8_%sn+Y`-<8l;?vC&OAha7hfMfnnC zXx$8#p+7R*;RQp(;g~NadCSs*uoXKx+Yoai|7xw@j=7R4<`zfQsC?0H{<#2LV+`r~o9amQXRE zbrM2nTqd9|HYg(|ARwvQ9qme#3DqSo6TV_T+>DNjRbi9~DDR0C3ZBXYWJx9<^q7Dm z_D?j3>jC^qz!m_X5U>-#=LFONc$a`<01gsRg! z26!!H(U8{wc!tDc8-U3q4WQobHmJ8j3w0YoAb=IsE|ZIb`)#0an?d0RzDi(mSkjgL zFm~iWM6kkR@r|=gTB!qBerSJrP-|WmZ@`CkJN!AS`2>C@Gr3Aza3Ij8-k)#L394px z3njWXB>Xw;c$c2M3*Er;g$xSRkPh>b8YE*$4N04czWXL^Lyngb0Jlu#VpS#IB`u@twl^iZs9PBsMo zzz&L$$Lc9S+s!rIl0q@w=K|pmhS?cCB*$xX3pufLuHFR3ux>ROET-1+%rK7YP9C4f zS_$&_JfWeDc=z}mwc%cr&-HJ1L#sb!LF3%?3$s$%LKs`|&3dK<$V`Lw( ze~m$}kOSf#3MGKv7%O40dv^e5v35P&(R6np26qP-HXatyr)3w2?p|@*62AFG&L=kG})d`vCPm9=*rSqei`l+^xfjwmB6SJ3)39xt9|0 z0N5W8mwlmS;4TIn4CVC5Qf_ca5@B}4;jEoRm%P2FiY`oYE=}^2qI)3@;vo~R=t81k zdi!XrK;oJJZb#>fE5JB@rGuwWQ$dih}vJ z>J5S`Xn0YJSBIET_+ll7Cn{*}Ao#3!yUrVghT?SVP#qnLH^a#&9tRjg>z+MJTH-uf zu*<@9iX&Pi^*9m-^}Z}WvARhfyq)A*kuFJiHfg`3Sn+gC0Aobog_Q&3g9t$>pd_Tk zZ3Lad2Rnf&9BSgtT(_wv-Uh|;(=aq(11sgG)I~}ZfDjsdOn#8Ejy2?-}@F-Textk^JV1AH-pJpA(8RdMJVMvhbh0;v*MRQsfa(6JouDFl3T z5{qlh zK2py}A0UwWfI1kK`Ze3_AzY>;p6FqNHXzTdrwwEeE$ZPJv;p)Q_3%H@2H4-*O8DQ< z2L69b8=UO=No{bl>!+!M0I7pOK*hm>U#f(jXHp6H0<`7Fj>SC^m#bq@qt)>Xtd64a zJl?StUA{Nx(6|1;d>Ij5#C9Kqmv$2O&(V5E;`;Hvfk@F1-bBGy#Y!*bL)#vsk8-A& zt5}v!9!Fe1z}#@3HKtk~j4$Jf_@Vs5n0^iDE+4{siYtfm^Bca6$J}~UcJWZ&hRu!C z4CQkf+a&Ua@iA#h3GI+0$a@<@^!$bmWFB_>K6=g?QsiY}PZx zt}FR<4V7XVDn+iiir>X_+1CZ4=4yU3{_F~@hl-9gH^2sQ)-}9{SHCM>y9OJ0gg0Ny z(}jL5Pvw=bx`_ypn3Yu4h;dN_qUc&agQ`6_oOfmKic5#{PE--mF3l=mrK>RThGAs{ zfX^fZ#HQgqomW(feZ%1h zmDll6U90gf13xH3%blF)KKQ0ocT}JCDBY>ynXp_d3~|l%d>HP`VA4nFs6$+#g<8$>P`O)OdYnnb#T2Ncwt84gCPA&jYdD4aSv~Q$Fy@^63SuSPSSe4cO&@`T+kvzz0 zAgV#p_)aPsS;PwY@^M!W>ze;0u`oMua|5qfLpWc?H=0LwGsQbM@Z?*-l#_-9Y)olb z_$}Q-e=6;`l}I<7sD@`)cv_B<$$Kfkl0y?2ix*jJO2w}w&9esftbhexo0$T?_JO-jT&i0 z$w&c8x`}Ohe3bYgACF*O5=S23t;EB3^I>dqUavz@-^H^i@MhSHkpVQ(cd5_9xugu8t`Eq>`%w2m)hNv9HzhPfQitp!lGxl-> z?Mz^7iYOS(Cn?|JTzkPvo+PY?_#!%n`RF13OpBLKMKsYv^yI^Q3;RLC8VLe}ZQuBzc8nU22+4=KZmk z^$HRPDm|DGR5U_RE)iI6Utq=&6ALHv^TjmF@$PqlH$Wu@9TrqSaRL9NY?I(HfxQ1K>27Z zyfl?R4*YGV@tz27oW|3FM>p`Ze0Z0RkGJ42HEfXm^QW1-C4$Olcyp2J;8b+#vl2_zEPh}7 zmnNAAM9qV!_{=P*pylGPS>Qyz=sTNdcKO5W5`AIP-tTpZK0`{Ubae6m0een{^YCo&rcyo~3Ups7@0T1Mi5oy@bRdSKhZoG{ zE7?eKcq;5uzI zaD|3WINi~(#L+S=>2gS{CS|ybf|m#OI)t<|&v+&}K-+>-m_^t+&RV) zN5&$-?yp{l4r9~B6>HAO?#R3~{2#>J!*B5?xw@A3mVCJ?a@*Uu z*r9;QqDcX}+TEvZX&c?A*=u>LX18MV`9Hk{ZQ%4(q8fix<=?9ltC$Rzty74$+Sq5PqEmN1cQ}W)MjkpPqFo)$wpp*??J&BdLnfX3&9A>CyNDl z^0EHHc)1wgw8Zx2(i$k;3Q>%;oJ2Q5#!G!Wv7?4})mCxd-xB{wX6nO}>c zn|MmQA9x;N$={PoDV=J3Vcin7#>$WLsqUCT=L~*T}1z`SUF9I~IsVW!s;R z2XZ67#0tOX33QaMa&2R8N1p{E_q0nn)xt;F@F6nkzyTq6umm;a zkru)q<*-E4ZTxn;o<^C*q)phyOE3K2kOo&U>_nJBk}x>jwu;;FB^dT-q-;CKhdndI z_22QE?HLw6zGxSX_x>p>hhg~-~&=b-TF zJNFKgQ{DSX z*h|APiMs$^JfP#4se}iTC{d+*I}i}n-aU<9m=@U0U|r*jMqKPTU&$14%e3L*!F~MP zrVEiR&o^v(NTuS_MUi*+@n*#DFYDmuATOP0wV$s*!sq+B`vWG=Q+zvDFRWz97Av6I*}h-QXyTKfte`kF?%$fVby|v&GZ{aEWDzy$ATC2u2=+ z!Ilx(dywPP%%Bs5h-(jFJ32$GJ;bL|#j6kVj$Xx(c;PVbi)!B=mbL#;FKd5a&%faY zK4pfh>{G<1qdc`&$rQ;gEWls}`Oz8isbC71LV`clCVBgJrY)Q-S{&nDGvBpv*BqNn zNTxl_4_NLn<#%0G`}cIQ=Q!`c-?c>YU)a`taf}afzxk@#^{3<&iS5UEfEQ=G6;@_b zg~du?5f}Rtlwbz{LrN?n;`nc$Df@iW{#KkB0 zEur<}2}d9iY7T!=1z&iOaaqBA=?UP=PMVnKW48|)^^)D_SB}`IGRS?&0|liyBRm8mN2C= zU9Vr-Mr>zFdbC3)m~u87E6(Oh*W^Fw2DsKvvAh?%_P5!%{C1Ccf-4=^EK#N?z1jC- z2UqYNYtchddYwgog@^Mc{99EUq_^TpfnX24JVM|S!um7H4p9AW`F-kW6zBE#Q(Uj|A4`<`e zFf)Ym456Vk!2`t2<2cyxfGAog`srsMmXq| z8im;L$j|~g+v$BP9!wsmO)iNy1c?5eA1J)n?@~D1uVjmh{0eNvX#$ZA>8nwRYH+(= zy5VF!XnCqf#LLzf#VC10*Z+kZ{8A|0nG?XuAC|&}?)@##omFf8Vt*Id>f;RBXNl$$ zx5O&xVL9UFS@KH@@MpqNi>InKy?^%Eu1sUq!MT-8$7+Yw3NT$`0{`hf7Q;hS&~E18 z0E%*xve0#UYLG+gJ3f0slZf8Oj)k#|Sxawg(}4(I{KvKS^XQ!`ipzxtC+ij?XQtw( zl}}bjj?7j~{P_?cIh2!78STLBY;kdAoO1RM@^U6Y-O*7v?@#|43J|sUgIr1X(58c4 ztA0AS>L>b(V^jjP$SgdV#h=RrrHZJDQ<4(BQgraB*hzPX6!Ax#(i6^a{538dUZ5>F zHnF(lQxX<#$YMD`8vM9aIzOaD-LcXSF3$^zY?5*~hVXpbLW#JZxKsd(OdbScU+=y? zhS5NtUvG0kU)uz3^bH@)?dTIP#Vf5^xMwsdbV?Pm6L|_`NW>;6ExYclCqX%>dEB@+ z{p(K?iSonZx&#G(P4*8_m!PCl7}rGUo<3d)gxw{1-9agNK6IT1F~z(?+|We1x9J(u zw>44nn${d}%STtlngfyHrlND)#=WVj(me1xDKy+q#bxVAxT%t$(&vSzw@?OCxV43H zt{2Y~y^=u~5;rC*7xL=g#f>2)MVytQ_`OIlaz%=Qzw&WhB&I5(vLGZRyA7wxIJ(B{ zYTVp&srU=KxE=hDmP#AON+V-4mG>AS!$(CU29KGfjJhL-M+AfmF&5p?WGGEMG3 z1s^Y^F5u5-AQ@0aWK1h1ne)=R$kVNrr&#<5%8;`e^IK%MRpzOynwx(_-fOEAGB!e7 z)J|!e`WvKJia6bL;PjYU!((c0Z_E^v+9?ap9dQB4Dy%>lj^>?m;e)uDBj|N4qZbpF zy!Nhi^1XnAF-yk}j$f8SazT-}qrGwtKD_jNdx+duEyafRN|%NfAwZ|JSeO|}=>VR@ z6OqjOj_EORaYvKH0Ij(VOfd&OSLp{ zZ7+;esraIoa#zz5`u+}C-=5*M?R_z6}lR zWP7)}7!eZ2)NR{O!?<=E@oj-vH$Z9E@IK?v0ENEl-+iDmFutHUc^7@qTlU!IqHv&c z7hk{CW64&D)>^amG_(u9CbW`>rC)i>_{uF^_SI>n3%_hAUA)<2!e&`I>)7X~mEQRo zmHt2ub={|;_I%|<*rgLMP#$PnvHn!!s%V1uWcPtA;2u^}0{- z;&g-9J4AULCj1>2D@=`_(Y&1xe?l48L+rWD|G(zm1U`zQ`5WKenVy`RY(g$WfXyaI zfB*qG0t93g5d{Gi6%piAxep15iXZ?yjz`uCA``srF6pul2D5%bf$XR0M|yXzx0< zyrpQ1klDdg`c|C+iuN*X-`2Pr9r(`1bC+~qlWVkD_V~@!q1~tYJ9_$BZHh5}kIlPy z4`mG0cl~+FQDj2M zWXh<1rB0~_UglDl+8y=+`)qIN_tbx+HoEz-??UNQ_B~Ee51FRO&Rtcms8v<2s1-k) zHzef13rH3_pvV6*${M9Lzw*!vp`@^$nG}`fb&%TPW2E}vv=lzA(!2ddvwBEILkEhy z_(RXj{QR9Y>M6Q?lr|T>j(!;hO?*E59*l-iJxM1=Ynz(RUx)$J=2eH3)-2GZ!sabp zh;7B{G;nxtSU?rGXc;kQoxEV=s6zMm7RJ!YTeQZGngtYhtCrP*;^n(aez#iQ+ur7T zEFSGg$U0jYdlLfu&X>{eUL+Z$_h+4R{fS~{(}Uyq=ozIsZ- zt&GuE38-%u+ZMi$=wf@G!%q_EgWFVXe!Wd=8dfY_sZ`Jd59=%82};vx$r?S0Ub#xo zUO858LBr>2T^%pRQrpIQ1IIJ5G^bok({bL=0%|i+PrD!pJC|8Ukv8w3bbP5Z}U zvLm#V zAt_q|UpI$yeI|_8GRzMSq zZPIaqcCDFXI5%n>?^mmEq`Mq)izRXleE*yPBcY3P4CezhiU>Tm{S*4|nMqm( zHJ+#?nMaJsEM4q41zAQQOWf_D0h6JgsvIOvfuwtDC5>dupP3YQf0s0WQfR4>Zun&} zlj83DNjnGQ8p+;U%v88Lf2s_6YqHiOR_#J?@ia6JyFGjtOwlymX>u9b7HmPy^R;GI zF`r2 zb^gO4*zz5`lWd9Qe#BJ4RBN(jxfaZp6%5Y>?cy7gEm44CIBfG~hHE`Nm@P#xTLPUj z-unZn#nZJ6^YdhRe2_F~SKtdrw7AKZbh1F_@0;nX>535}W`r{0^)vj87@-(ZaSbyf zbB)6j&a92C=W;8yV#Ek$#Ls40j3^%`m+4)p`yGC6khw{Bv%n}4xk*Nve23yeB$hlV zQ+-z}753jsZs1gshw4pLGBdQSD3gacmE@s%Qe8}!-l^sBmYF$sYWQ;5xA9J`ncZID z+jp0?*5P=^6lSkWVJ78z={=Z~g4RFWqj_T9OO|4c1-18sWNJ7YdOzNEnyp>R;jG!3 z`+{4&ZVX9+M-UeEN)F3D|H5o-XxP1W{z|`sTDE4Px=d?F?n(^~B0A~eG^tQYzYSmq z+EJ*5w^)@dnNtlYN*un$g+p}nz{0#~4JgBV>!}nmM+wu5U(y<<{%$`nDo1 zze4|kF1`^(KRQ=y&sD%Mriyl+4l4Q&ikYWGHV<1#S{K`H#$t^Ek>psHOgGI_2r7L^L+;fca0WxUXe-vT zblFqTK5pu?Kvi2d(yKv@v`aNoBQ;!bzbxY2d`bY6=}G`#i;0$yWOjLwQ}#p*6f*yR zZd0=^KhM^hoUe5yiH{ZeNt{Jj-Ukg6^k#a}()-XE@bJGl;5VgBi?jn5hIyTj=wCh9^p2}YCkk?7#N!yT)|cqbC~Bz|ADlyM?GbC~1O6PO zw2(<3SgKiLhb*_wV0FG!88q|(zsN9?)*7tNpESH!OM*`Yy83E8nZN5JLM*-=Mh1C&!24SirXxs$qwo;3r zni7p2XQ=i?Be|*V3hjd6QQld*eO)X4?JF~3zYIa?@zG~U`Z_KB59t@Kgj|NKx7zF> z`gWyu(oz%9!&y!Enlzlex`2#Tn!BZ`3>5M!X8E~%V@ih8JVt|_Ri^5A^(rOxSFZ9m ziPXESQMgu<_-QAbM5=N>uJSiYM`|)bbDCPa94&@Fq+M>Qz*0GZuJIMC4A3=pJfz`Z z(gpO%Lt4k+wrsdsyTK&59Dc11#my*Hz$L3qf znxKCGf49t^L!e8_q|ZI9^)RW;$LKoOXh#^w6KjCF)ZNA>CE!=TJuh; z`DIua+YcPRs3v+x`2Hm|(ff+;k@#DL%qA7=`~i6Wyj~TaTdKl)N`d!Mh4&Utvn-CD zE>(E%Err^*H(8E{0t-=l)Gg0OBBVPBIdyEdLA!}5Fn@#QY5uk%S|R7OUyaA}O-vS; zm<(5l?B4(jEs`ZYqPZ_DRiML>>Jg<^j8y24LRqN#0C!_Xe#j%*`=(rw?2u-%Ln0W8 z^*K{6__f1CmJ5=lu4WDkJc7fz(i@LzJ%ZUY(bV&>XruJJ^o@$SmOY_5hD`PF#@Z~Y z<_erj>Us61>h)OdR4%Dgaw^>Ip?XuDtdlC(8A~2`fP!@;hyRPZRi9wB zs-@k5EdWDzXdR-8VJ^b3i#_rSY3&ZJ$+blbd8p9xp>SeGz;70F4Br42^HM`P3$yVI zl~*GTd=4r>pw|08>hhK#Tlq~nI_OI@XQ`e*8LzStQPwn#M!c#G4ITt4U)9zHKTmm0 z8|^sIo<4X@s|W*1Slm8MYb&&@urj+GkbV0qv^yL^>d18QWjg#`?bcdz{>8iTG42bE zq#7vOz}JXg-K{m^>^|MC?G5|QoXwySR#MJRtOvQ=db+d>(YDvM4x9-z^ek%dhL+9` z(9lz9z#B^6#k|QwtIRk5tZ3&@=9^k8i};~4s8U90SEcqohY#)5UN9+Ou!__CE3CQC zdP}Le+uy>Nsb*#2Y>7GZmewnBUngZPtLjL7-`1|-OiJI@c3J$liq!z{-;{k=jYln3 z?Zc*s`Lu5zSQel^?$Zu(Sn-a(T;qK0t4dMr7-NLfIzQXq?{xyXBG5HZYHbH?34}7Y%Y=Ci+ zx7EN>gRjeH%CX4z&ZpW2o#`~?ODz-o3Mabs3+S0IwH)id@G^MUbAF}8*J7~T$WytB zhl+A3?su&z6$gMMH*Ee&>*@J5L24b9OqM^C4R#-s2HWh);KZGAi$AKhGZ|Epy5CWM zUE%qzBdt5Cbu|kEjdJO$qgr2!Yb-(8?Q6v~L%+sK0Y1EBbDr;^ueEs&r>QVV-q}y3 zWA!wFkI(AXxCuQ`t;PLQwKJ*NcUr=KQ};~T^quDZZwPSgyHEmTeP4$F&1n7i+N~DD zfpY#9e~RzX;?G)C#SQ?jU7H`Ywth<7_5%b3xAN6LV@FVt?oDF>?KPYGou9R4!L9q( z&k!H6Cj!VzDx0mhoy&o|UWHTOxtyy{_>q^!_a!I%$jiQ7b4qJQdX1lEV2xbz)C8K) ztPIVnQBAm}Mr#uWR%QFJ@4XuBT8GoGAqr@S$`&H^RMcjq)nN5h!q0twhyUnPq4<}c zs)PR$i`!6VDWmTHMX9e({Gzq=qx#V=*yH3h`MruE|Dd*~wPsBA!KbyJ9G0He8e0fg zoz~ja;-gN%!x${)O=#-x8oXmIpv}K)*}?PGcvCNB+k?_eL(S*X`VcUm2OePq?@AN@ z(8dMl7F$a%t!<3QmdapbeBcqeT^*)u(_zc!tVqPS$?N~ra7YVKe*BC!IJgj}ImKq3 zkIg0K8iIeC7|0dV#6}T;$H8Z{s}q%0#p^*{UeLw9iZD14t2nF8hH7>3U)uY!OcwSl zTI=B^jaLlN2V{Je#1hEH=C;F0a;9PPW(8X;F%-ygVS-(66gkfx(l?MpBCV~~BI#|r zo*46bkZSN|Ks9hW^j$GK)jP?~yBpD`4qd7ZXM)~I{=vI_ntbQ`LDOg0LnrLBh5mH_ zd$a5{hTg!+zlb>tdF(J${)Y{{!g|Luc7C@hOugG1roRw8#V!ihufz8D&%*V79lleu zppcpN7jpWA0T(A=HQn{lz3RX~=@W7s=ErQkB{_GPG0}T)5N`QTjC&@4pkJ zH@C9c!lm(&9EZpzI$CAZGFpG#K95dD>q9JL`Iu$71i_(+Y$e|V*@F&=EIYV`9Xi~L zR-NnAw+2@q7KU`XIY!U!GLL7BW;H6zOm_!micbb*raM)p5h~LN&U8;qXzk|3>cbkC zTodJ0V`3D`xL;!R(EjYwJ4PPsqU=y-I#b^DdL!zQ1FP^_m!4vu=X=qm$J@>6Ljq49 z5_$UYVVsVwSQWlc67_-M_7jxT80#C~#;CFlsMqtV^rrTL|4hCzxjD zaPKj7%hPJ8B;Z0ht28nSlB3Ja=woJ>lc6`p>;4(~_+VqIwHy)w`68#u=eKS4 z&jg)9Y@3@hb+&EZ-&Fs>9wRGdu6Tduq^)z65-c^zmkPCLYla}}j2Xgb%@oI;ZRY1U zITS(-Z$fMChYdP>J7x;MW$7+!B#{(>wrd}$H*m@>UB-TXq*^ir#J{4so&d!bX6%(z z^B+thVp{0WF);#-{Y?wq-StV;viSVMyD`wnO1a`8656L+4qU~#t5twco8M|J&pIUY15!9TLT8&e_+$%i~n^gBpcnd zWy)e6slUhOvhsT%;urlw}7>qB4w_&uMe}$HYT&mZZeZfqX7zUvrmGW~h%3cKv z$zdAaLT@Q4W3ExkY_UcO%E&&DcUe8%7c(*C=(Wgpg- zn@J@!m_LiI)GuoBk(&1&;Bt5a1&0TvK-DU_Obnlpeo`c@8LnrTgPQ5V{h#+fb)^0y zbZ77c?%6(iuBmDmUZ@%;`{+GWp`-9Zz4Y0|O%=3Zs()Yo`Xm#}3KL7Y;C(QGUg@jE z)hB)R=3!VckXnL&T=HRa)OGe4ld7^2HYWx#e)s43AO_BWP)BBp!S5xwO1HE*qubs+FAy6zFN1|GgIuxXx!EMvr6`Fp&n!P zY|6P?Gbm@SmP4*?dIO6ZM@(wS;S1Ej@Rh07;qSRtzs;)6U)Kg|cKJZPZP@*ogtIn< zp~c+vplpRjSaFhN)V!=WYs@M(=Wp&!3n>eG)8>?0RxZqH;=|<5KWJbf8f2SV&E7=E zH!T&^YJ$Fz>ybq741HG zTh2M^u~tuU`gI%u9Vck^UvDWF57!&hdaoWC9x{(3i1fxZbhz%M?n89f-;Lv7IZF>~ z>SuT~WW9VsP>`dka0bxyYfA#!(m$d3Kau_YZvgfm4y!wuqRw)C?Ei!C2(kx5cx2L5 zU-=C-u#M(Y*$BOlC2B314Bb@A-C67E8^M8Ryex}cF0WX^C zld_zb;{BUcgGKTG9V$8L`P(o#ueEL?)p|J__p9}%ZmUmzTANFkJ5Q>0O<99q*i0!W zS(tOUEh+Om;vljx&NQGF3!v-A!VHg?H*%yf2(bb7qUPcBiZh z*F>Nup>;lWx1QDd*?3+)1oDRWiFj#(!9u5Zy}D)O)$E+d7_b|i7^@}Ih*^53d$Cka zZG2GDeCyMd5CX{_@yaY+?qK_V7SGVtRziF#=iR1mO&bqnj~v8$-vg*;U49E_SpW)M z4U1E;JYGM3j~=qKt@h?@`thD1?Mm*&uBBbwHe0v$V#{q>Fc*Vj4!IW_cYCN_V@ypU zi~#Wkp-CgmO;h1e?d0Bo;{}1jX@8*}*mNb+@2HcW7k|{IU^b1@KcpX1Si5|+M~=&v zn{od(y|vyS#RfYU8|-rD=(lQ^o~)m*cd)1USy=>F8JlEbRpK3;=hv3{FZegzQQ9z) zzKxahnGikl^H|ndYmW;TfXDuRW<=eKl$8Bn8wi?4Oz8yA401Ct286ehPS%6&cmL0z zE59I##(2xPDm8D|^H@q=y;yI-lA&JhGjhqlw-FUCRkoITGyHSuzt3>Xy--Q-Db`a` z{Gvz%M3I0f3SvH%)pED~L-MmmyPTx*PQdqgfK;E*X_Yjfm7b9%*9By&d7`@5LMDpe zk?SR;u|P_X6BnQEc7Ag;Y`%KQ$BQ3LO)1+?_H*BzRm}g7$5cEKZ)_{6HPuZ zWDGH%p2y+m6tP?(khNSN96VLDwsu746yBY5aFtS5 zPOj2>4tQHFXR&>DkGZm?MpP(qtU_T7fcY1PZU(l1!}!bJfS6q`vz#n#R8GjpuB^zGk;?H)Zy8Q@J zTyEKM_>E~DJ8Uk6eTtCvE>?ylZ(+YCpo*YJ$#2mr@zG1@lpC@ukuH8hZ)q};xkFd= z3hs@vSLBqb-ni}w^)VklkV&D#Pw3W`cQcjhf&Tr1^`yF+S9FdcHLN@0N&S`Jwe+{1 z)Gx2K_Lfe0oAeCJDpud;D|c@4H?`b{vUihy6B`-MxConTc6Y4aQbyT0Ua-he<6n5iP&r_ZG&fm_RO54s^|4i)>v7)!={Z> z8xbIM{aoy zeuMfVr}K+SyJUNBviVVc=#X$alh(hex3-jx5R6b9L`c1+;FaZYNgblDa_!|D*P1T4 z=!tUJQPwLJ6~}AfIC9!ouD42-0^bu}Ys~pPc+64N-haMNTcn}|>d0ls@|P49q=_zs z3U@n0bmclIW;sigF3l?a;{U&~8;ApO7LfL;{-2~Z-EcM^`(&|uYr^0OrjX@4zOJpn zvf(pie@#&~{Y~_SN?+&K^f0^K|MvO{Y=(nKY4e$$mRR&Ac5tpjYB~Am#X`e-gob~n z-;}&xNv&>$MBHZ6^wG9NI@ycIlUM_FT9V-Y>0FDl5Wh=TETS z|Fld0)^Tb-eX?8cS07wi7;UJ6iDT3rz1p$o5MA}Uo*Vkj)UwyrGO}5{%GbH%lF#Yj z8-W~A?JjR}e9f11X{Bm+6TY;P1bWrQoP-zt!_mU4miY-eiy9)aT%)L;u^gn25RR~kA zsFH{-qjevJw9cO&Nu)|h{{)4HZaoMt9Ca=Dgh5MIQPE-4)m*igrD4^+R$WgX#s`30 zN6Ga^9>&M=^>KZ%AEat+U69kVV>n7msqk~u&s^9w>$mmukotZ1IU~32QTpi!K+Sbp z3A&DIf!_25gC2UEMt>R7$Zvef@u!}o{a=NUDEp|a_tVtj>p*;PW2~ZsU!pO#evQW1 zwuK)41{j!&h7yBELNEwUS*TKGe2bKao+oEDQkqMGGUe)!lxTw))r%eE&VNus$DQ=6{JA{t%#4aN*@Nry6MA{sRh!*NGv=kkYhq%EGH@$+7xVma3FT zk0B)-V7&Wd2rfCt85j88=zOC7j$C6`9e(Etq=z$*r)u=v^G}{?abeq&oI8A`bomK_ zDnwhK{ZmMPd*LUBghQ8Ce+Fy&Rbr{i*2=W=DF%h7m`i>EXt0`*M72P7{KBAcLG#A1 zddFG{MlH~b;WiGaeo8%0>+;i>+P!$VqQkD!`q%7z=gHso4$;AbHie2_O8-MY$Ig8` ze*!Rg=&TL6`cDADW6;BA^bWPGhQT-nb3=+LgwJBQn7@!x|I+gv$G-O!|D|7HkJ|Pj z#wK>}QTYKKJqKSrzh$m4gx6lNqPM7M{}@Iy)4n0R)k*BL4yUTZKTs}0*gY=A>oWL# zj$oJl5#BxU<@yli*+s6?baugT@O3fAF8K2c-&(uS?e_b8k2nPB(Jx7d7_igXy<6$B zFi{NOA|Hf_kqA16i?8jIsY!%b6pgQupkQQqSaYQpBE)ffv2SCfXzXy!$$%$LFN(l% z=jabjXhf>Wq`Tt8aNqS#vDxl=@O%Ihe2>J6jds`W5P&BGITR(UVskxg=S+{6zTu); z*@}G^#ES>)u1y|ye4yyp+^Xoq4a8FCqssiqU35(%-H{-gI-X0UbqV4E$1{oaQiAA* z3Wg_&j!nj}mVlXMI6Q*!9S%J=@1T#k#?a72F~f1{M|wX|T!A@JlO)j)c9gD3;v)MP z-{d6G++jaM52c9K_MyJY6mg&31utNU0kpo5^?4)#P1F(7ga~iZ3CQAHH@+FEpyY<4 zJ6w*@4GqO5KxlPC(G*kViiYAbyA#prIU?;FMI{3H4&}M2^VHf9qHO8q8Vy+cN6h` zEz%8ji_7rlQ8yB($*}NZGW@Yyw2fMISn@4qyPr@}y66&Df<5^-@Y)W~r*M6XL5W7B zi-|yYf4XRr_Ke!C!0h;(+N_Wlf^NG0Od`%IYU2^tfY5V2qH}bqJ)O7tcjyGa=j418 zhhY5d5#5nty9^L)0Zq>k{fuRa@MAfN_GXA4#(a4DTD+fPGr=Eav_4Z@z+N#+vS~-) z_LEF;Q!-+=w}R(HgWbG=Ho8~AUDZ@v!%2#oQO<=TjVhXoCXw(<=jQh+GLimjDzZ2- zJP^qzo{zs!oO3u2dfdrqH~8B0f+g>0F6K5`2#0LmoZxM`()AvH!+YRoN@^iy0NEui zL?8Pa`ly9?*Iq(3n*U6KHw+bYWQ%|kubgbrqcu>7&$d0~@XB+=@rhfh zJZl`^ayQpT8lyU2Wf9> z(Z#;dr?(MH?Dmts2Xn+&$Mq+Y*ez`%>F(6~SpzpSNUHb!2JYxAM>Ts3Oobof?T^Dl zYj4~f;G05rO?>2WN0!6piQ!Jp$EU+%UX1Bm+k5nJy80r~EdC3JJLZx?TreJU>gva7 z(M6(R!7-T@pN%2za8N!$S=0o91PU$V;<-E%A>sPT;c4Wp*??$d#-^Zr6-)pS997Rk zApJ?M!ZCQq|7iA9OZ_;_r zmjc1q7a<=m5CccU5_c2|Pp|Z0u4u&Wo_@_muQ*AscNRCH+oyLCKiKahXIC-7^lj`b z=qhy00Y6~(b{G92O5g7;+Bga|pK-D1#*Qm{dPNI%w?iuvxAx5W0`R8Y@gbY z*(C-Jyu(}B_-w+jGvGp1<%%@pFB2Cg98F`GaJWqMIJ`|}q}#n;rqN@UiP7*`4G(tW zI{QKz(M!CSrg+aVUG2h6X*3_?0ZwY<`j+}%4mPdveR{d*ZMScx3$GBD0-JGHh*uFb zzfwG{d`o|PrFa_=kM|K1?BDtt^cBKxuOXzmhQ?ndK6g|-PJR1{l+@Ef40Xo5?+w1M z*+8@ViKfo?8!-2WHB4^+=BF+FL=R_iBXb21ma;~4wx3vRe3J$oVGbG~E}?_{MW%B@ z0Op}aKF&v$hr=kHaq)^J1F)VVZ?3Vcg6L;E8%yAwcd^K zExkrW*_}Z?bfMw16SV9-&)4xcw)r{sH+F^PZ%pkvf?Vw^y^Zm#LOOv&$T_$-ZmE;Q z;%7Mr=@hNxX$6f?LeGD?4)n37{Lq;2$h;9s=%Y{8f!je%oL|F_%Mymb%(mKUd ztmk5`v_TfZkA=-+Lr1_TvKSOhM|aft2GL=loQ4K@wpGt=>Dan*ZJk_;)^e^@nqA;b zSaykuj3I!LGd_d0a`ruT1C&<9`<-tT+1=%IIH(ZytO_~saGgTRR|hCmV^IiBy?ZB~ zs!O5jmDF&s_{dSRntmNDUUZbNre|&vxA3%Gk!Y19QO5jLb;>!mlFP9i@trx!j`%WZ z@et7?zWQjWH@^8_(`Q4(H3rb}qQs6vMN8}cwxOcAb-!|`Xl32+4TAY&sKCaQ5`_^$ zZnVTBC3P^WTu%4iEP6Q(EK{He88owESsl=_;$Y<0%#*&)GidlQ(Ica1UZ}Urjq_?d z$^3?P4-=P#nfd`ahYR*U+Gn^(^~a4Hj-j}*@3G>KK>ftLtEU&-)2J_g@;slEe>|A4f~BGKPKxULI7NnLbD3#s7Mf&UXp(thoivpTWGRl*c1pfQcpV4u;ViqHMJS7@m|rJJ z**sZ{j&HrqM8$JV+~%0L&8d^98glkF(MPK}Yoj@Xvm+Q&A9Y~MerMPVsl`}vqqgNYGr^YMd>h7!r!kSF{^LcmWBxBRX1r)= zhUuN6V$l@dl2iURVQ400* z+)3aV`vl*#$zr!%EBVR93zkc+Nc#Mr>g0Z`#)cmFx%3#ic_;V3Bw9CBbTyzzI=r#; z#XZpX|C}nCHP~Je+9CJsw9!SkV^Y?LKDu3W)=nKaOM^XCk?qGirR_ULH%=2Pk)&pt z@Ypv{gM86L+xERp9#P=f_B~C_7YV6HkJm|A`6J`Goz~}zoG?p%9?BQJ!r7qQU@&ieGhj-hDbk7WNHG0zi8Df$>>s2Sb z&QF5!EPL9&Rt@G^=|uJqEqy~k7T9}@8K#Nzs;tWcZ&MRzo|phqOX~zt7O}6 z|AL;qM@)%d{6(!+hKJ_aBF{K;)aHc^vPVz!y7MATOuRb43QGtwZOEo);A% zj^DU?v4)K^o8a6Nt`RX6we|KG4b@95xEc*zeQ_EH7f6TZimRf^9qBgU0%j@qWzQ35 zu@~RYx`gR()<(@o!7O~(Z>vo!yrCV znIe>#g3UuPI9x@O?-Q+~%+6)!&efw>+)J$%iDqUGgF4!kyu~7wW-by;WmDtiuRKc8ZXMYE{t z_kba*;inHWCNGC%mg;3uOCMeigbDXUNfK?}hc=R@K>x5(#5edc+8)k_Qs&?|betTbx3V1|7m3uA zncT?yTbE87yfltflEGU0P@keCLi9VL%`nCDYKgBE?Je&V{9m!DrDNCKD^yNC3Q%u2`vR;gBro_Wje(@mH z7+sy+5v1GFnxQW0Yh z9u0htZh)o9Vn!Xz===Qw4HzkZwI45g-M-B?SJop!Y7G{^Neou86gxq1;o<11b zVXSAS>$XF6=(^@V^!(%EDvPAX6Qb*dilnRSkkpzkVD{rZc93p+0?M@66sw*PL#&>F z)#!tC?g^1%_7{!&OM01Dp`F@q)*Q>catJuOzYaqC-lel;;&wBwgVWymq$# zN+QI=8!fF|)tGE$DO)^sE1IngbvG21*7+2Vw>HV^un z+k-LJA;H}|9K%h$7hdRBJSTdNh-dc2m*5=e9!D=Ei%)m*V1@vG@?bud=il)0H%|Wv z-nfIg9Y5*+PD<$we9tJYDEJe_vZKC<5*wcu=*gl@{h8`Cn0Rjz4 z;tN3%))0sLxLgfYE`Ynj>0q-ss?ZO2AT{Es#|t7EmKzsMy~qJ4<1dIN7r|%=bF9Ce zVB0f~(!gDyo#ca!V{k?h?S4TtZ^rgNPRoiB_C4}QE@dqW#VZ{|nt=F7YVe|HmWWj` zw+Fs|peo_OACog^cCwb*6sY0*6XYb<7nlol*0N!CW!t%izJjkMY3Yk1>0%rLpVrBd zhN|cwGR}8Ly}UN|Coajzg>VsR9&NlgbD~EcH;+@azdD)AhapAKS3sp82DdRXvOkVC zit%Pna3!a^qOisij(ePX6vDS)3zHtW3(!M81TZ$!!dXEb%)!dQR$Bfg6J^_=%WRW!tej#fyj(QSj+JLCMYt2>dMA=% z#EW46)rt`5%rw~ap9W5frEAJXUV%&j&ImfU5HKpenNX&HYXuN0mdylUR~Vh~A19t; zi(CK zm_M*{Sj`>B--R;S;C|l0Jxoh?@ZpmX2)efb%;=AhG6GE;XM?P9CCYd(CssQpOL37{ zw#!1T5oCj-LKubSqh}S=W@fhY^-kx0=tjqn#v+|A&uz-$9*H9hRlQsUh-45T6Jn2B z6bQOHsIw(mz}V6a=y^a@3LEgAM+4$o570exya&Bb^%I-BfIq~5(88Y-SYWj<*|mEk zG51b1CkhRdTq83^!C1WEBe^tw2Xs>cE1@=SvTR!ev?|gw`^)sMB)8@*UIMMwP5f{ zBrj`&VYn@k254aIKsGRcuK|4!>XjOU3N)!p;jI-15hWW`cO^z)WRvm=epn&D}+h%EA>d`i%e9J_a?-|plg?>yV8tvenBcDmy)*9*YO82QJ0oPJ)# zep|__{2q+vju&nxje1SAYs9-CgYBDXf#U(!bd!hG(Eiti2ybEP+^lM+N7-;DE*76) z_Q|82yG0KNLY{9W$)irsbhYN8e1t2{FqaiUje5L7OmyD|y*wQl*wm@0XF7+1c2=Oh zc8aFh)Zi_MqO_f&g)^7c{`;jJWn%@~(9+}ynDo?6(IfB3#UV#&6G#ht%DCj9MhCd73udC=%(a zT6t>Fu7%WePy1TO=R8g+Z;FcxX1eVdIJH8Uu~?8yQNbV;b011NC zc}#kHu|{CWYGOLlV+f_32T+mql_DlD%aO~56`7dxkb>0)O)wP_4p{(vkcUe}F|7W| z8TzS7VH!W3&a#GZWQcrKWx0+MbA}=E*)IsTk5Xm|4B6>MZK9-~ohn6%`?VzV7Cl0-gJ3`ba^4SG8r>QL2idT^h}joS=I zANf~7n1?fe!2Cg<>=Wq)*sU#}IFh}&Lkoi2Rz8pk+P?&iMl4{kr^zfY%-dutk1&YF z$g0ioo;i2!oP8<=A)6{O0>&7Cv+CpIAlhS$=MV}s2jQN`@$iHTuS@Rm0vrd=0+7!AeP+m8VLeuq(_57QNYoI zj>`0a1AH9x48@=TOT|3>@j~s&hZ(``HVVcADh&Dte!UxdqQ=jd>T!AtrcIUW_HO4? zd9*fOj>pIv$;a+S@=gbL)VQD$F*IQGMLF(?o@hQa+;BZ+Pv<7$_15YHAX}kyS z{r6M#Nm9-T%o-`OeIdp2#6zXx+jhWsyhyn53=^0 z4Lnp|gBc8!eoGHbs!)i2)*x9^BM;0Xjjfa**bU zMFgjRL5~g*&}AmXR2OFf(d|s__JhQvjhfJh&8U9L?P{?6Ly% z#xU-UF=#dZ1QrS>$PjGpP;_uBI%ImBwdjzk=#b?JH|b!Sf0z#8C^pki2RG9pl9^bt zH+GK~7A6-um=F*SU>`{$bW9jzXwo6!E`TtCeqh!XCN-%n08_IFNK&pX5@WBpsx7QJ z48#YGgP{}xxC1k}QCq9BY%%3y)$3LkqN5V*;acMG+M}q~`{KeYYbk98(2eHQ(QauP z!c50f!W4_i8Fd*NKPpyB*8*7Blz@_gt< zo~q$%wyhsvCj`ztp3=gOb1gkK9!B`{Qtm3qcY!7~Ah!*);EZV3hhliEmlJrY_}3`! z4-I&!xUo`YD_S#~uxyiuyW4q|k2KWwL(!)pPYr=+eK2&_hr-)-jg~4)knuEs&QYH#ET=7?@m1K~zJL~1iLMBCSBYHvy>zBZ+=bwd zkHn9TA_wjGNOYx&kHtIDa=v9|Pm4bhFWB$(U2<3~wQHvfHTut|qK(1XANz~KKNFY8 zdlWU`GjUViu|g2T)g6?;G&`F2bzzz(kvVYA;c9bPy3Y0p)E^cgumg;tn1Nf!e)}1A z448;F{9IgGpze`Q5)1T>PUiv3s^8*54X@O?HOqo%*Lp1-**l_CF)CvPW#`6eWrK-z zD&r(=I1*kWq#(EdC5vJUpv0a&{al1egtq@h-+wOFrY>|aaTyOC)q-@x+yY~n<|?HP zN3b2Fl=d7Et=d~);T|>CVGk2{1;Q#$*rF~#JGn6tgZP((QW-3yOTNIqFRn2PoBoBE zm;HREYZpf52%GoKIC&SxxyiK1%f%e3fwR#1g-*))QcS}%d(D?(Jc97A#0UiAz7m&3 zefzEBB7lTP?aKDO{FOLi&zv@9?5+93rrkMlQn3O+u)G!G( zZP>I?lc)FweJ5Vl8=WslclU1Yb`*D9By^G`$YV-GH{A6s_ZP5TDe*X5;ta2s0bdnUmtmERMed&)X2@BIL_~UncH3EaXtP*=WkI z;(|m(a0X?FWB|T$6KKs(Vx%ni7~-sgk0#L7cNn+QjGskzDwpzRf=avv;bHvv%1@;2 zKa1Hi@et&0#UDwezNgIEtU-O0`0YtF4*Dn#zt+x*$U%{=HmMUA%yRUuJH&I(samIw1*=W45GRtX5_x>(!ZOxhefOyXA z5W?D-Wi?c+!13h`>4HDR$T%j*1jJi;oub8mh?cS*hY@YnZ+IH*{ljd}w6p;Dp)~67 zrx+}YUV(TndOkwFg6pvlam)L2kutAki08a!A>=D0FT`1S z4Qxz1&X{<)8VB+!!q)b)CZEkjyj71wO?*SoigtF{or;<$hOPj>z9zKcFVVd*)9^3E zyLQ=ZM-cLr22s4d!WK2xzH*F_L}y1CumheGEt)X!-EM_x9zwqC_-#ajO6>icdro}b zk%4BVE1<>*`I129Jy)~REu&@pW(@g9cCR2K%iyF((pS80JkpM#ZuA78HU_1J4NP8k z{NLep>ii=t^ms?mfBx)^!%YC5r)V-ctu{QOA=9Hm9e<3?&t!@eP5+q{YptQMl1U z;xH5OkcGfuwJd%Op80Cul70_2ev+I#riIK^#+SCFvk}H%DG7$O4CGk^N$@iuPT}_p ze!og+o2_>?&51OWgv-ee^z8C%ii zl2rR7Jd5sPcXtMC(*b>*0gWOAR2v@Xws+>;Cv0w zrOYIgMyue;$?5=iC7XObAy)y~y3n3vJn(G>Mqp&0^{Zj z8P6vW&s8r$$d>~@W(^LHAkLwyUYC?=78>4_!EClQc{DuL#O@H{EbPvuqBC!AXmpfK zSC*%s^SZB0GlBEF1%TJ50eDCw6S#MG1$_8oDs5y!CtMtWzPK@<&onlntMP`fSzhYV z#N>)?Jyh*OxT5FSo@2omT-zeApS8Nu=S>(>7)2GPUYVOM@6wg&7N(b2We=m$bN~V?@JZ%;ht3Lu`ul!fbNk2=(8CnbT!`aHLDl($TXq1fl(F7hS8BsK(B3TLKpQ? z&}qHtNK+Gf;N=16!V3Z2t(gg()muStzk&*znb4;YXXWkA0`#X@CUoT$3VKK%ayK`j zORkjAR+sBauQfNq=ndUWGNF%3V!Mj=v@njxaOcbI%So_Xel=CJG%6%Xa<5Wwv-;7} zY-645UwXf~LOv!gXP9aWyyRA$b~dh;5}Jb=O4i@~Wk^)NZL z_Xr7WJ3Nxs^)R6mMh2j}c>(>W*MzRd8@^_ZrtX)R(A!1@pg+9?&<|f~LKlrz&}p~Q zXP27L18AGGEP?(^9}{rn1O=EoiB9)10jEq10QS4e1nfCU0ai_> zRacpSuE_zwRRN|3V*+MQ zQ-J09H1ir0um*7!;JeqFfP3;4VDA}}GSK);_MF1$0p2_^gTk*f7RdOD83Ao9{|+j> z&QSBOL3ae=^_kTEdQ*El78Ji~ChfW2gr7At0H1v)4Z6XMcikC?-+m_@yTQz7V^Dni zyJ*%R<5r2!QN&wnSN>geYLL-d#t*tHpr)1F?Q4Id5o4F_z8NnR1>7`Yu(48huF|^| z1rFcibKPXzuGE%^_b35eGz&93+z+6uZ!*%zHPrCZsUgPAa(>=xwwkt71AwoMc*eZH zaF{WfJ{fAn%Iqs-BxW3izSBdE8EPVQW1-4^N`cK*QOGIgO5j6?=WD=Rat$}Wkz+yQ zxh5)epc~Jn9wVX2usmSi9)fp#70siWBaByNC2J6;;6}DT zj{35jF&ncG>R_=W>H}l58)KOHn_q$1Y6X3Nt8ryKYg>JaRB?6$8{M?-HqdzFZAJ_E za$}vBD$$ub@r@{XjL}L?*#_MgoTIw$*EZ*tiPJ{iK6Xm}Et4*S?Fu>vsr9nj zd?___F4J{CeP+GPy0$-|B)M^6n?bKHdUVi{l9*S*FO^+1EHrL=Lp zIj>4sYO@X8Ewi$XUP@Kt&B3iV;(PD%MNcpm*c~OysAQsXNx{BlHrovv*b%?e$dG>= zcO#w$a?u*}W{POYJgSajD@#R`hizgYk%5IPaWOG;0 znMp=R$vMN9QSM};o#f#)c*hqr_`qc}YqHVtW@h}OA@Mew1_UgGg9&2c7EF-8Cj_~s z7+q4ij9I`LRgnq~r+45!;XxWb#kjJ7yY)W2FF||{#Pc<<1jIvviTLr1iV4MWlkhwl zzY09_kK?A`c`ANc%VFNbuM)q*_|@R2-rT7iNFAu*STmUYnF&d*lwuV&*N1CnS zFNEW)#^@oF0%0I)af*dZFkv`9zJfWV5(x7zm_zzqOPi+}y+$$-qJb=zWu*;Y0sAB> zHVr>3Eyv~Kc{+X*0KXBxa{LPMv(nXHCJnsZxJHegfMpoIz%1pr8;zCBT;V%>J9>B8 z6aoNVUfTM)fxTMgV$tYXbhr5g>(aB-eY(-d$ax4N^*P@I(+y#d+VUda_E?L3axeSV z&oIu}qbhbGX27F1@1Zw1Mz_<`cN%{>4!ld7?lRsqO7W%EM;bjl%g9XHxY=gAAC*~* z-xB=z(x0ZScN^^-6E@S=cN?u8c~4W~EaO7Q@TYy|H__mGOmj%W zCNRPdm3;Fidhi}YnM9W&UNRs;zL@c{anIpKGvxRlPtk?5%`}alQfbcAlO`AMI4xh> zo}!m$LzCzHixJOPaQ?xtS(~YKfzeNP1|3zd3ri~tj27~J@A}_=TwpYoon36L-ur__*{_N7P&PfzQ(EImXI7hRl3cLDtUUh?!e(4tdYoyr(~N zM15w@+d^;6H6D?;IJPKUjs@kEhB&^sgfcTeIH$}l=ov>GQLozdt+ZvHu}I=_$V|n! z1m{p}#s}wc3^|m2>4;h#r9VeA=7Z-Eb}u#>)1LXppfD!Vj;%IwEijsNl`4YN5vsN- zoMs~Ai@T4-+y@ZHC7j`R;rQXIp?mH%+Q75R)At$+rEU84=Tr`b2>GfnhiZOj=1}rH zjay($YRw2ue_o}{LC9BdeHL?^nI>Ty84HcUvYYJt2iUT0v|ypx4U4v^{3jsfD>(mB z#PKs|1aO>F)KK{%;|^KGyJmtSgtd#P zMuL(WPEb-#H{EX{b$hugA{$}t6pPDk-tv=#>`zdJy_53#pXXFw(w8_gK%p)$`NV^GrNXc#S@N&{P!5 z)cd&QP@_2gVfkLwb4UeUx7_G1rE>cU&evwc#MI`-{TTds*3I|%_>Huw`$F80GVd4T zevEm)3il(-`;EAtX5MeXeZG0W9rtWP;5;kw8>jBCwH?C41odD$g8PZ){W09nH1AL2 z9J;hwL&*XWiKjJTycX-SE3rCjKkiFbLZAYW&wy2R+yn(1*U zD0&TE-wvH{K7RT5O~>zE{P^mCSiaOvPnob%VD?_1OtLX1{CqWAH@^FGoTON`l!za2zP*l z33Pw}K|yYa1YOjCQBk7?42l{ABp^amR8-WcDF1Ku%!VNPe}B*O9`Z3=eN=UI^;KP6 zJv;sNl&9CElt-A?$8KXIJi5J^Js4Q+Tj}$7SgeN`+-Jmb591o+Jk?`g#Cu)Og@|Dt zygnWu@8yQ38$QmN&NSxn`MA%+J91AOLX7q4aoneIUlL0KwnyW<6Bjyfg;JVNV=*zh zZZO7M7%dVKv>0xG$TNj`8nb`np;oApd)oRue%%+xd8`)4>@$SrjbR>5({%e$aZyZc zE1#}uoN;@*NVN9~BkW;buKr`pR8_ zC)u0K5)u+T3HXb4dGTMo`s)>el$N5U5N^l?<*ENX_)GtLnb&LR!XBZe1UZA$7&E+j zB8W3UJg9lV4`Z6p!EC8ESBuqjZlA69WgdHfGTYK>#w!GlZ18`?DARNp@D z;Mv{@-g#oX@rLn=QEn6%zv(~f-|C0-gZh5GN)NxNPt^JtS_ZM%Y_h&cullMpOQST3keeeCwd&K*#cW~ev@7LbUz+vxK-Y>m_!+|fn4Tv7{ z9`t_h4IJ=(hRA+zy?3uS@TqqXBD=l2yq|ajJH2&?eC++m`=NJ-_XALT-@Dyg>wV7~ z*yi1etQzmT-gmrjd#jQ4miJBX8{RG6*S)WKU-edbU-54CZt|A0=)YN_()+UaCGQj# zPJ7Y2(K|~-ko$u7dEjpFR(RKYpYxV`*Ll}^18cmiy{o({y(_%Sk-5zKtaqt*iT4@r z(}*qhmU$O>7kUE=yrtk^zIUE?t~XHPm59vo7JF@PV3xNCkwWiG?+i43y0-waY2K;c zDc-gG{AT=W{9-g3fuD_^jLg7~#!=%3 zBk;ZP9U@1JZ;fw^z}LoMM7}b|&Z6i=^yoJb{#unpsBk-E> zDk4?JW@D2Ps5D+i!tTX~E zjO8k_%y`xaEH##>$TLRxX(O=MC{wXT#zG^oz$iszzA?|3YXnLRiO3vdwqYByj3Nky zhFGC7(+JEkrX%Ypn`TTk0#l61h)gmj8WW6sV?4@@GsYTu#&JFHhyJ^s891i@s{f(~ z8ugzM`AI*j|DXrH*T2&t|0DW0`qz5ku>KXYzSO_a8}z{E`T;~f)A#B1dSI{qDI!PN z9(}hS*rk7>B0KduJ@B#q5h5SzJM<6q!29}kL~8Z-^lf@zt6qc1yZSr&+j^i{e+!W} z^*8h_df;{aHAG(3U(q+~mHNwJ{UtrHQIF`D&CY*Q*bDmedfEm(?N?UOJUMN>juJHO zqXpBRqm)g0xxP+ctFO@~iiu)8Tdj|0^p8r7XH!_(DjgxgEA;*7U~Q1QhmN2n5WML|0TNA=jek2v-M)cY<-qq zgjk_I6R{ckbiDwvY5G*ers$LPNqS&{o{z|QeVjfPS$X<#Ei>?k_PZ87rUib}enqTN z`$_vzJF5MleXj++(Z1FWYk@Ddz!%yQc1X)UsC}*-&~CbEzqU`S*S_U@@&A7I4gXZz zqwQl2e7E+A7GZnXPVHl@PWwoEfo;>?)3$2wYumM2?RoYItI^)o-qGIHcCycSwf2@) z$KKSoXyK&HpT&>jHBluti%Rj5*eG5Q8^n51F4l_GVx?FvN_nIBNzCI7;*j`U91x$0 z3cg?L6ZK*d|5WT2yTm7Ar?{z3d@N@3_e70&SG*&t#hap-ZxbJCJG8gOTjC8dI1o50 zeh}Y_@5Hy_8}YR`3_4$h#h2m>5tz&8@^{!F{M#!IvA{=Shj@qGbkhf74iCI9wyQ`j zB7+03Yp-dqYJ&q++AG>-EwD+e)LznF)ZXN8@{L+VdtTe1RcL|dv~q2owpM$EzrxpO ztF=|yN^OM}Sgt**E!CE2&uC9;i?uQ>uqdo8)D~!^+I(#u_R)@-dv zdtJODUKZ=bDiIMCXv53AP@AdE(57qCw5i&wVv~4LtPv~3^Wr)27PI*jjs8y70;||6 zHf-3i_57xP{`2I>O16@6o>MvDlVTIKd@V3u8>a>GwBsW1hd3qzW&AghjlaK&?7^FS zFZu${ikEzY1DTl{eSwH?m2a)@1s}Ama^D7DV2$rNUxhEQ9{DSL<9GpI<}2Xi@GtPJ zFLvk3wkv&o7z^{9pvUs%hFBK&*trR#S|6Aw0A3i+f}SAD&Gc9e6YYkC_JLy)MeY!& zAwguvh1d`+$J#Mb;D5VAi}k_$DIzzd0Wm0$6V!q%8!(h4s}6c$n{=Xy0p| zpL$r;5Y&kT;GjTJs~*MbC)yb;+x8czl6bfvURb-4?4f)lDWHYl&2{jR?BG*D(9dW& z^aQ8+pE=EIIe;ISXjip-isw(U2ewK!T<&ge^{=>SrHtr&)~a6ywK&tm!_-c&6XF&N zvWG(K{_|Da?Q>dhXix3VWITudQB$d$hI0I&kXMyM(_1HQFph$~qZ93|iQReQJo{K; zGM^hC+3RN=1#7g=N$wF22Dz0C5f1Y75uPBYU?WEw8eisylU3Nya|Glmy}=D@RoKr{ z;>HWz@G+;@a3>gwAZL`4VUQ0Ro0peo_7Pc5UKPI{X`Vj36sQy~L1=mUv(--A^Sl#^ zayPyXtPqRKi6z$0vxQq(X4{Y;TrDW9{0`YX4q-`qyKkW5-inge*WOE;pN3yM^m`MZ#w$V{`3{0~b~psW&nE_VmXqMx=3W?@6Dl zPvQO`w_6q@$7s1h-SU`=h5gjE8TQK=Q`rX zc>HmmAO>xanf=Uv`L}W=!q$cY(cR-ghnE-F?K`wjoYvMF-yR+8dB{4B|Gf97njhFV zbVv67)l}sGmt-I)lC(-fX25sKj1WZ zJQm9hc`W0Cc#oe-lbk))k*SzYQ)!%`jGsWK)|6a=qZOc3l$j$_?Szg4&qO;M0_6oF zNVq|dKLa!0)Pf#!Dn~`D$J0bawKd}f(uI9%$04b^yHc8l4#?DlJd2le8tnvau&X+@ zxogF(+aJ=J{yts44Rh?QGytY@x$Zp$(_Hrw;b4A}C`HZF8n|k(Car^t8TM&($ z8BU~Zv|(w6HKC<-EXG>mH<^7=uY1|TijBR#Wo)6n{H$}>Ec^4bR{ARou}$Bi_^AW0|8u-VP{5wA z97LN9fU9{+e<`DihYSk0*xS!eimT#r%#VW;5-RN<&VHzUdWs(eVuG>gEMRZJ@hj-J zG=NnE#$==1)PC()y}i6&yVLS`ZqPt4W%1;etvo@m8enn4Z)TvyPQ%T~bnNP%VjKMf z;NH&cpP5Ezv=kFsn#*t%x3p2H#lEF~7dF|R(*G`wRrmY;{o2tA6~b7w@+XO0T6!=p zd?AmsHrp4Ta|tcE@|+2$7DTH~6g>Ofn_|>rr_*A;@Z2P#|H8Tb+tTVv3pp*rK^l~C zaTszFZQp>qX#ss;z(cg0HVhcYkvMwbEF`YaF&O3ftZS(9Tda;$WP&w10W^q3ekmps zsyS}8@e^4^AMuPq-Tl!;o>t)N2K5MHQy>)Ig+Kuu^aZ`6LJ9%<2KEkn!DU@;iuGHV zPmu5#xuF=W)~nU*0LBIdpck!;Q^lZgAGD(!KwcSEnmmo7D2gtO%eBVbZ`G~*aHakr zHMR=#h-QdYIMwbxIAd^uq7%|VGT#9q43fLJG(I-Sg8Ier;Gu9T&1XxyKVG8&MLV17 z5nvThwPz0Q&&#LUHG})apG3|!&%2v%m}>v)yio=yP?cYuchNbh$E_=9U=bi@CabE0 z9+CxMHHZDq0FKtBId$EC{%K)n7Y}(X%!DAjG?lh2q$z1Dd08c(VG!YB07|B`M};Y+ z5r88_ij}$I5IGoV;-L^Y!)U{zOhYE5mMURQrlb?gR;(uiv}^xCNI0MYzecbGPGy;2%3 zJfSpPxZKeZ_z4|>S(uIwg*;Im;oHjt_PH08W+**D$FOj91T4l>&e0_>c^WU8%>PnW z+b-^tT{=~C=Ga+HY>DVC1^XIi04_q21a&SmZFRad{# z;tQUF{gk#H@Mj*bc>J0xSjGbEAC6*yycpy`vG|flp|9@K#z?sLOMtt!<*0{R%TfUTMda^QI^*4D^YD&eq6Z&z6&mwv6^R84){X*UUJC0Uz}*G*GdJJEr*N4ukeyXA_?A=y z72kS$`-Hst+^Q&^aqd4V?zyk4_`Bv+Y`(t>t9bXJ0nF7wND0g| zh#Yhf%p`&~*zY|;I*7E|@I*PLJu@k?IE5$Mg|pM`xsRltjO-{dgsc>pzeTQDpKhP` zXe#s>`?g2twY-D6E{kjC9q7R%zrWay&pW50;;A9J*u+Ef%27PA!W<84>1?}n!blFe zvWeHTk@gJ}Q_Xs4qlQ_GT|#L9!HTY<1_vpsgqGrO}z_SVH|_W8#Hmx&{Uid$Ie>RJI!683%P$YV|v&*HRw1sF!MdT&(k-tX>##o*4AG2^bWSN zBJY`e#_MbB`OjuhQ2A^hUNF64_|migoSHwq;>Tw%V9wbmXZf#8+Wl7y;|*Mz9a&OE z<%(`@-r<#@7A-K!X%E2$^8l8PiuhHdHLr782-=x%wYKebi9D}MgvIeMm_6&ccJ8oN z2Q;s{I2znp9C?V*u-2Smt&z58A{JdPF&<-Pt@lQUq`Wbcr`rS9r=CpGSu%+vEt&rr zNxNqK+3x({&gu=t468R3WU?Y{u!9vRrpL?_+?#2{A}1EHh-cfgD^df_yrWeJOK39v zG3k#lR~B_(N%r1~--Rta6$Q^f$$IugXDQWyj!-7nBgARlrj@Cir#*TbxkyRIDz27t zyJh4|F_VStW#44jcSJ@Q^)=l3wZ`5Wc@QT~YvYv_-A8R;k;-mtGK=ZUco^H}ayCuvCpRU_Sshq%#p+E7jE%Ej-h4lsS<(HK z+ZbD2F|+Cuh6=jBa!$pwuXXhC>Z$hDcSiHdiFW^Yd-L*D_Wke94APnwP-|Kyt|_5Q zC`*^$Jxc~P`{Kr+-RbB3G3UdM2TmH6*ex5|BurjP1DqBsk5#bLzO*KT=at#_)nt=q z_H51dIBv|^dUN7YnhoyBA?PK282ab^TYI&qgBB@3l&5N>a?qM+)~Iq&oZi|xUMW)O zFFG9B*KWHYsyb^yFR9LC26PRCa^hY{_~UJ9bQ1h=+f$CQP|ZT3hpmgW@Ssm=a>`gZ z>%BMFQTzJZ3!#rZUHcR}+56c`^37!=Gp1Z`{GFp7e*2k>_p3$Q$ z_K=nLtG)E#tWe=H$gwZdOP5h=LrT9?=B!bO=2~UT>|uv8I`2i&AUczd>BGrN*MxTL zS*3^?<`GyXEOg@HLl3cBJE`Fx*e&mEuwZIf*Kjr4Yl|=Xo=_2MH6jl)CEE+Q) z-On=?h1e)7?p})yZIn=mi90$7CF9Gp+0*s~ zU%nn+mqyl}=e*V@WbJADRp;OVmgy|YAy>tPaGI;T_VBMppl4qHY9y_#6B?}p>!S^D#R*$W&w@(5?=vUc)x z!3H6?UoaGjY!>Wl&OVo|40Z);jEpqcnT$2cIbQZK`&GvISP-e*ee6Ew|DtJq`$9e& z!!r4??z9B`OGi!L?Qatq)`GQk&7`)Gx-fRP#td2~uu|RBl0C-xA0hcsYj$zRcCaJR zf%hC`NyFH|a7Hx8oJ58#k2R^C`8ty`+OQlsF_HZepO*w(%tDrK{n17iv|$s?A4Aw# zaz?3Ck5v(*)b{f0BzB&hlEgBDW80e@QfNSGioEsPN#)12SLGupe*h5y^8 z=6xGEmW+cngft+9RjPR||43nXx_gV)*;_Ehnpr1hIMva;N>Z6?pUjp=Q(1I-GYAQ@ zqX~&NBpwp9V;atm33ZOPBZIc1!D)($yeExa`F}~3d|Td{&PKb$_5UCCVACc&6=zXm zPbc<{r#G>eEpNqCN^ zk;!Jn?mm;&5MkB!lAS{A@_5J2J1$n)dF8@1-hrjdWg#}!<>CMF2~Upfz*0}qnpY5Ib0a8-` zMT<@|MdpvD5`WmgZ5V#mQuqadU>3iEMk~Tf=w$@ah^WGn2=#{NP@OcoL%_DmxEx!g zpFR*^F-*+JDB&j2&Ek0q8Am*<3>-&2`WIv^g(sznNF!538W<7j(ZZoz?h&xvI9Mr zQ{#<(9$ZObFyS@~Ax!{WRe9)$f+L~|3*7W_nbw<~(-JpTs<=YOHo98g)0^FL+6K2& zB@4!zZ8M<=kXnqGDonYg`)rio^kzdZK2aF_TU)SaszVVZMTM#u&mmpM3~|*B#8f?V zHeIFHkVI<<3F&g|S*&xA8B zs*G5yL#G~?2!T0V&NXNB^>Aof&p<9iS<4FxmTOd%^_8;aDvCm$co z`e!+2GKeP?n-Pe4{zeCqy9cwu!3xrpV6phyQZNjj$q#Rn51z-e!Zp#W%jyE^00`6C zQXpU!t%_z;Hf0pdRn`xjZUEFZ63YrKdA|v)+eTn}b(!YrfZLI|blnT%gqn_VR!NjZ z$vn{N=LtKFc1oJFxRs8p3zH7rz_iNnf4W(Oi$|)ecrIol0U!c;jUHvyMmg11N(B(~ zkj0U@E=7?@Hy3iN43$l5Yd(}hG*F0g5R6K(!hp;L7)^gq#X(82cFb{GUkku(J%MiP z3C!QwBnXNYP7~(oW)EvOV8wVH02h-$V5+MWf|r~?Raq|TfhcPI2~+~zN)J;u-S{>% zFLzjVf=b)C);;H`jv~z6u@C4mH}`pCD6rO4sdN9d?B!j z0<3kKuo_JWr6?g#YW{Rbe3gI|t&I}C11>SZQDRk63|fnmUX@PQkCfpo4_5UFdX!q= z(%T)SR|mi)N1)3afm@o5E=0?sqf3TeR_afn66m55xN%pLKq$K0MLi5yHKGB4TPcAq zCV>TenlLF^?qVJVtT2xN2)n2RyQl;n{j>>{q8nY*V}KQEBLEkZKo^t1nuAT46s>nL z^GjUJJOC~xfngVw;QB*Ns1$8*Q40X8N+$zwQ3-T03Ea`pgh|mOE@m-cg;@x|#U#+h zBrsh4MH4E;8(q{=zzVelfQw3?i%MYSmra-y&5MpyzzVYrfQw0>i%DSpS525w#B_DM_B1l=) zF2UV^6~Q_HEHEM2gnB1P%jM1R4Oi1PCMoYW;O6P*Tn3O%zmN zm%_0qg~k&U2y|H>u;$w)Op2Dd9g~m7sJin2xOEfgV&;VbZ#mM0N?FTY)QxZkf-GnW zhA!av1wj|EkWOg`{A%Mx1S%!zILcuLw&Q4Ns1&43P-z5zSz5+k%3^ulHkouOo8NT- zjwNKdC38(kS#5klPW!nzQ(2Uh>lGbZe8S?F_m08n(|DO^V2C*`1uNQB>sc>)HKa zf@&vtlw357U6@7-hkNfz3&ExS3`U1MYVa3Qy8)hd%j9!6ux_aM(;HX-LE{bVIs{kT z$Wm~E|I55Z_pmlH<0e+=ha;XDL^qh`WO?u=_GnzQ1TMGdvN@6CH?vC4mPRUvvyF^R zmk*DC5ox;28OhS-jD%J_JpwQuIg!h5XXo>HT3=m`8>Y#!JJ~|E($0IPryO$^)X>9n z)?KUuZ6?NKw|m%x7}D0^6l1PdX%VEsl)6sdkjqB1b&2ef3iMKyuIu{hOJ|3 zBVUcd(SvQ04?cjNUo7W8z!tMxBzuSrW99P3hgc4R(uY{8JmW#OMMfTC>1?Jv`*C!n z{xExsWy!4%vup&~BWw;^9hv_K^KsnwEP0F-vmz?^6Eb`Ji^@dq`WMUL!P{^bO{!`= z%QY9XOfNv3^;A*~&o#>;_gC^!jLneuz0B`nZ^#AzW_ejMfecPQ6AzNq6!<$m9v06e zd1IIb({KlXA(9!VE;wnnJNkD_2M-P$GR&sK;3zxgv7QtT%VXEJb}_t77%2E^9&4ZQ z8H11w$Q&9u3a=c?$X7#Vj%DZn9a5s4K9;pe_?WuqFELM>Gmf3x$*t08suGI^-AG|9 zWSKi49G*ipb|23IUM)_i+gdq(9LxU?5Yvg(OUJWET9e>U$oe?M|FndxZQW2snlp(hR)dq+ zLs1kR>CRH!TrNPtts05Kl?%L+5cy;hd(*jTd@$nx-4!Uu)FfJmaWq!f1awu97dE%b zUQ<{P$R%>e6!s(|0ev==^`)@gG!~$+?=%*YEvB<8V4aTKHl4k|aJLi*%w%2yWT=p> zrDE?FvdbxKU&O9Rf%EDG_mhO(5MHG!eq^egUc@@GMY5uZb?&gV6^_^#$C$s0MI3Ao z(v290y$7B$a1eSkY0fOxChN!=OotDdV+o=h977K!{W+yNO`bc8_2CE~nZ^2ttJ6%l z#=xOQSTYG9u!0_#S*&6>)Iu!XJAGobd}ABww6{#}(~laRK`WyGI`Rm35HU+3YU%UE~#;y(rj6k;f(L z!uU=uGZ(SM$crURvUnOEX{Z1TsK}8$=d-SI@;tVKFJ2*Una>8rE?&WNA-Rj=J#ye| z7VwEd9`i;FmdLyF@jjA@y>>n@RkAA)yi>^rAc)z-hO$rORh!ryD7kSH8v}uL-psBczQdbY8@4+#doz1f&HIEZ z_8!|6`Lv3?5y$4sC0kh)+ZnlI8=k1L-SVFISo%4;nYw=Q;M7Wzr29etK9jcy^M7MY z$$=5jxyOUIE$m}ie0V6sO z;L9{A&@y8wFhlX?!?XjO_~#_Uka>MbkUjGzx?F@SCJ3RQVb&DNtNMDuDGenEuY+akCA)+g{dJ!3uE(gOVd8a zA2QqG4#girhmbW1xY4??oLmHE^k7`jj}^fWW^{#-n|&d_=>%((p3Scb#?cZLNA_({ zz*QOkfK>_+$91`CD*cHw&&*W$i9t>Ndpk=GYgTxO<1k1l*kHXu+@|+N0Ij+QmQgS6 z)4(FJ7BZ-)(H%T%R`Nqu^1~>vEB}?tNOqQo0&wasYk1J5gmzRxnliXrfv<&-${iomx!q$yKB zs#U|_F*pO`@S%Jg5TGM9$O+8`>t+aCmCK7iU|qu0MtHiCV6u4@kh>8_S-EB*7DJRx zRNm5YXdn-^I)@f0>J>60gSD2+a2HJ@2ubdyLgXAf#f=OG9*Kb(3F34uLt9rc z*WAIu48I)3tuz{)FpM)25(3aynqBscQ${P=#>9jqUXtmk663DYHnZ>424G_#0WKI33J35ohBGm zYKG|Q=m|k-P@%js=VR83ZIBOr%sQNhnOg4jLKg29!hq@S=|#icnfVyva9YDfHRys8 z(F>{Bt;Q;JV;ZZ5-2E|2X1e?l1QXqPk8Z_?Mx(KY>#}72lbjioTjWn58s$h@2WqESP}Bt+b9MXSpwXURAE1&$Y2$ z$S`pcY7T_)-${GfNt1KmW7oxy=bgC^*M#z4J8{m+*vU*|9}Y<7K6%zo_Eh)%1n=h$ zl1H;DyPvKUH8^|vy8sm)S)`r;&~nZBk-a8#Hd^&A78Y_`B-E5sZt#~aY)NW;TP zmH(SRX(0~H3Z+^)3WPjw7t6;M8+m6JG!ou0QU0=<;mI^y%klUT@`h&<`M5$qge&%r ziL%!os0Rlo$`N}QJt~y@_OR#!0eO56d)T)dUR1c2^~mq)aab?Y@;fgV&@{&Z>wo$rQc*W~R%mZ{e78P(J)EyC(dTfWzM(+&Y$M z##+V4xmDi+SA+~Mq%l?*qKD!U$qQS@Jtns{QhxJ<)kyf15J$J+ z0ch59Elu63E#%i~Xinysxo-1p%vV~Pn|g95)GuofV*7KaIL1k5eF zExtE0CnqU0!xZ1bw(<{DuAexK!@<2WPlFgN&+3aivj>0y1!GZ zLw7%=90jepk`PLs6^pxZh5T_Kv=%|9h=P>BG-M-#xi!F-1!6R7k?k=P5xXc zewulo3?60eLJJuAxkC#J#yZJZ4`Xu?!Kx0sK)iWhdl_z{-9W09FZvL{8` z(pKaPr9+3Xo^L@QGzeUkMMA&8%M_=_Rllh-eGvf&t zzGZZvilv>@l|2p(bb(HoS^NkKd6Dl;aR|^DQhEX%e389_XU5165_s3P;3tb0fTz2O zHS(|w;kEQ=`Dy}hoek4VG0Tj@FhI^mZP-YMX& zj%89cP;ty=%mt|y<3tV6bJ3G!B3J(jO=&IM`7l2*;RtT%AY5ghD3?dJL%YU|B?hDX*;2+Q`)=H~VJc z^q7MNL|X#TIN=$E!b3yAK`jmmOdLg`Zxe~QbWEZ!ksYo|f-9#e04gi@3O$+Xij&v1 zyWFOS}m6(@&T+~ewN6)q&x3s zls}>xZy3;b)(W2+h+)1oXFvcrcJIhbHmCt{0?w zHGosPLKdhM5FtCdJ4SV)qma072GlDsyd#J{v*|B`ZFy3=W-kZ~dO<*zZ2ZAsG0b_9 ztK0JX8PD%d4*TrO$lhc~wR!bQK?3hoJyfOtpn7@_FOQ~x->)NWQ+X!)lSkx5t?;71 zgZupbPi~Q~r(xaPFFUv6SL)b?YX{1)?RY<|q?PUXy^fPrq|>ZZK8!R)rZ#x_MS{ z=LH86%eZnX?B>BsMfIu!X@!)grW+y{?Xc8ZjZEfr;-}MgrraU1%u;gwpOUfWQF7Iv zlCgqP@^Y2j14pG2B+wkn;-#{-13x3B1eYqzpK`}$T0z7$hIB% z=?PB#k12u;9>tXzV)V``{Q(~4%Os2%`ytq!bK8;_?^L9pZPvaW% z*L@5L#$lar_((Hh&30=6+L;^a3OGMYs42#VrWcE zcEd4F^cn=%x2|wvL!GiF5$r4q8Ep`%7TP?ppvBO1kHK_TFkH(JsaJoo2CFn|XvT?M z!3eg2QF3S~mKN$5Qih=3W%0h!*NeA57sq9HPl%x{hPF4*XtpV!=$H^Ns1An$0EfhI zB9R$V{flCgnJNd4oN@r1a*t8D(}Gzbl79y77D$j;{K;&d=0JHYgh?Bem-pgrld+(A zNHK*SbQBOEQM4Q4l>hFMYUx*<;50~g zc5JVCoJqYmUyE&LLvP-(6}p`aJk7dYe$^YgTD6Qhi>Jk7AHq(KBQ}hpQ{|aw@m}%G z-rkt=Nef_%!98>pmqjV(X0CLGkD&wa(q92Hiet}L48Zd z>D8}$tetWGmMBI=)jnvpM0$+J+Au@FMZn(?Yrzb%3}C0BG^>6)HwzdgDm#Lo5~=(W zr#!Ay%bUt0&6<%wE{RBUizAJShl`u&mo=3~npNP?N1}^>L_)}KqF>ll9%Z+M_)++cIqc^(6-S!YP^;L_3pXJkl@Ja%2;l$7^k{pLW>qNqNOS2Ujf(GRqF>)s z9BI}ThdvVB@<^oeTbjt%s`6oyClamWKH?vVZh55nQ*lh2BQiY#J!r*^GE+j3>KvgS zDcy?>Q51k*Ih|}8xb{P7w~J8B!81d+k_8^J2#-Ry1{AT5gn#B{C#w?RF$IC9$|jmr z7a3v@5G%{0B%`bpx~zNr2wi3 z07ZupP^4^P1OYLU7bO^Fq~3O9@-{IWR#1L1x>iAjfOadW6wqM>EeDkMBVlX+RIH#XK;;Um0aT};IzWvIIuHg} z`V*lX0aT@+V}NQEGj|g_@Ec_v2C%C&fJOkDC?$WEuzrdGPzd1l zcmSmURuQlqz)J*d0I-#SDge*508j(qP#XYs0FK3*;nS=GfDXnX=?DN-*)afX5|A<( z-0mi{VgPna0A&EiQ`Tw#d42#J0lZCoYyt2Yk%nL#fkH4AnyKbcku!&)a)}BwoLA^b z^m7LDOjM$!QHd@uib@paP9D3+a%K?(;!GkGv5LQ=u~Y!4TtOv(Y812t&|w9YQ@QV{ zTxB7AVmB(V8i_j;v;$D1g6aWHcIE=05(PB^TCSjcRJ>6^g@CFRR0^n0L1>F31hmBh zXCwp!G^!eBx=n!)!fH{go#6=KV+f%nDum*w5K!J7Rw#F}5Rj#WfY22JidY9}eC!7B zH31C(-X-8DfDZ`BL+RHDD42=%A0?;+NqY!b0$>Goa5(|g_mu$hY3Nl0c#k@G2Y_1Y z@_GP2(KtN}U@DCUaPKr5+*{ytcG6(o%{-6X~jhaltbu?bb9vEMX&nh zaoq@Rp=d!3v$TgpI1GSz2zQ65DukB{+QYc$BrONmz);XN+&j~okdPP2wBrT6rh0E= z;+unL8Ra-1(})uC48hGJNshi|25~sgfINtMln&bT1W0{?Lup}T;6we%4jYL<7FPG& zbWwtLy5xg~DjbCgmw@!m5v99vDCNn@syWIMZc{phJVXl4G?YeWJh~QQ_#hNWkrxfe zS7<1W=rLqzQF^EY^g1Z}&DmgEbt0@88~u=qtueRvbU4hGxqH^VGi5?OjPzXi{TrFJXF$4X?6 zTlugiq?jh8$oyM5JUkOfOdGmjZk=f7A{l!d40n&;#wYRGDmiKdbX|m{BY2v;d<0M7 zRU0U=V}PU*MfRUYBM-g;cmlM6%4T}!Il`0MNAMyd@Wx2^9w3}El6NN>6z^EI0Y)1_ zg|h?zJ%|s8pQJtepgl|9?L3WdTq`@>&IeJLdpjRY;kw&-w|E#*Ic`NRMb$|9^>#kS zsD%r0ZGjwf2TyKW>h|GUgPtgBQI8Qh{|K#$n#|Dmj^5wN|(*0G;7+ zpqD-F<|%EWE$HC#N$bUh^2)n;MvJJ~0V*(o@}ax=3>@mjJ^VO(T3$1TpBu@^<#)2= z#k4emOX?%)N7@_AyEC~QxQM6A-J|&6m?s$gdOUc{F8}!ee^6$O=DpZ;WFD(u;GkwWt-Q&~W+uX#O*MIO}C{B_d{2NYo^Jbhp_8>pXmPGD-2y02wi5i-5 zGE#z*Gv%&_`Iwl;o40w4yyy`=ovn~{kMIZC&k^Gx|fKJNj<)f9Xh z*^|%Put0>zVVgovlZD4iwtj3oIQzdK{S)~kNq6Go8*y;WI+26NoVUo)MZ7Qc*sX9I zgoz3B%qn+b6Yz2u#-}E&vaRx`i9Fat5lSRNbV$yoa$SjQvH*YV9viq zZl1)?L$Gib?<4z7=6=BYX7RISSizBLlX-vigS@PmUwB^qR&I4O)1gyf5r!oS%~ZM) z<_M#w=ZZg4f2^`?v{GloBI~tEwmB`NmK1K2*G%O>ho{(6c$zwuXLqW0%acT^T$t!= zY(}Sio05n_$9EDP2GP!#jTT%xjZa~B%DvNg+r;NNT{t%D0L{E55?jEBvR2Ql>Fvv; zVM9L7K^8eQonwnmDB%gMUVuhOu7ohHIk_IWN@5zkID-#l5&6pu{#4&P{Wrnt)80d0 zAu&L}uue3=Xx0RySrZHkO;|e<7OOjD%}oAB;H8tt5Ugp=7SmQ`$xCN(zkFg6Zz;D;;+GZnnD*1hEqns!CIN3OZx0b6VA0g+Xd)P~IWeNWm$aI{``yjY^E>8_i z+se=I;Gtv+~wn7hLFY{HiUJ{c^es62yQFo^cAX- z;3EFd_;scQ#f8{?0CYk5*_CX!)JJ#1H z(U@AMXna+sXmno8dr&3V?EbeaX-1=2CBD1W3@c-D!5TgiuU_EtKSpkQhG$@9{pJ}y zux+&4ZUWQMUb`NxJ#Ptrj*XN*E%~cX!&?^!oB9@=HrMH|)8z4`7#qW7!n3N=dOwTr z9^6xktHhDiWdr4`WgvA*zp49xQX++Z3(8-YK><*mcRENFF6Ze8&_8?RzJ-buI%c4Z zUCGb*Q}4vBhGf?{y)#m-TFo;~kM_YI_Wc9l~_Gr9hk zRWzf}tP0;q)ib#D8SosxlGk;TMbGh3bDrTh2*2-yVRfLRdq#`g_6~2!1!OH3{Tml->iJRLb{=Z|AH7~`lDAWd{EsP&az*~% z;@_i1cEZm!slq3v9pim!j9%S(1)1t^!(cH#XF=F1DauxjRK$@*Qqr(Vfa>xO+ zC|!PgfM3sg$f2L}F?TFcehUU3p&q1bGK)@LI0|Z`LO5gLN}G)idSOSwSD|rM)*r!X z8+X0PfX@#2y&oq?9S)}BBUe_*c=h`Qj-OZbTl-C)-IoVH<5@{Gkj*8`u^e6PexIp>41UEg zYc=1b8^YPK{wtfO50$Td1(gIU;a70PNSD11W3%{7+K2h_)@xc=l}R{;1n&>&sa9bt z>u{31>}x)V{SqnqnxAXH@blge{9Od|kMi63>=JdVFDwo9A3*i zalZlM+6?Ybq(qHwx-lp;tFeF&N%c1{sLuHA2A4P9Dl%l?S3bMd2IRns$>A%7gPDeJ zYecGk<*iA&JAQ*1K^@sMkMVU#*nW&VKj$Eg-}$Q3qVG8TaI`Wpo^T^g9(l>o$>|-3 zA8t4FjziY{4l78d^#8%HqA%dx`UmgA$G4Ybxd_QMfADia`O81}V+ckbhYpt>`SLjY zU<~jHZt%)ljApasYfQ`}?5nxx=3?IhjCw8zahMQ$2A}APuWQR9uPBIdlP8^&JV;&_BZkObKH=vjAqQboh!9lHUA%artcnpSmlscr z^4*!^w+paB5^wnvPvLFJ1nS>;3}aU<3Th?5a~zLF9*Qu8{Kl-B-(=@lk-@%@7siU) zLc7NkZJ6|w9PmL;7011Nff^;ikmZx~6uEAs9wWbv6*;XMe_T?9D;DE<3F2({v+a!+_*$myl_2__aq8zX zA)WO>OThlloHM1snUcP!iPiGYB(hqFz8(I81hGGB$p|Ngs;Xd8C=7h4Q`P(rX)fmd81 zh4f4$(Y8k42@J);Pg%nk9C;2lKI}udYM~b~G}?nez?-KKoc-vj9KCV#rNSgg%O5r| zz_5U3GC`Q?_g(NNue&ET1g}!UxYI$2p#+q^Fyv1S#bGDKy-RKgK46|;d@v>zcTI6- zYA6PGGFBL?9ZFuDni)g(RQwiPp&c=?dSNQ0%PN8F4SJ|40 z50iW7L0KZzNb<&ELuMz5USS&UiCFaMBgNDm%?hYikFpZ)rQ;TK8*A&_ii7kMCPV_f zs4N)d@oQO1(ZhR9tA>hT<2YC|w-8-ll;1^Nbh;{CmP)+)=4Msu3bN!GRDh)l;{v!RAfXHoC|D97ly4Tl#7wMlO44#SJ@hLl~(+!A_ z#rz1m5u?5b95^E*(nNwr-=#bj#D-rK6kRB?DJaf$6E{$}K2r?gwMV4YO(e&nmJCuJ zoOmE|R!HE}=+DTb?Zp_X5h7H(z4|&eIrQ<9YMjskKOhMA!2wyK6TU+mxudgqoe}Xa zT}6b#&$^0!ROv~TRel>mTw@udFrbx7H(5J{Ia;*@zQ4{aFOS^bU9{zV`8ScL&Ja(r z_)(Oh)+oI0lir?UzV>>e`9tK{o+6*&D=b}miPKUJV-V4Zh7{pCY~d-Tj;EB|T9PhD z_Y#ZG9fgZ(3>1tnWQ(b<;*-y(M)=pf{ zQF=bywFin+ydI!1fJZ%%#|Mhxj418O5jXRhLS~+;x0PjG@W$dMO9Vp48crT?(YXI^ zX8=n$9I1&*%&g;KEh z6qKWTq;`qu)w!TOeGi<`9a?^S_r}blzTb{z6++Y;{qxu^hv2bYL@?#>u2Tr^_=IG( zNUpp@bas8eKeK;qb*IqW@G;R; z3UK9zt`I&{g;#%gO5x%iO@&L}cboq{6%G}=e@fw_wN&^`)x&u;jE)nT^5A8dbLn!_ z<>G->8{auuRV=BI-(D{6H&!>`Ub;cvd4<6D+hzKd;wr;ggyr^IM7k`#QY7^_IUbu$fIL@!?SSRK>ISim zS5-S=uc{`oXO`o5{-+a2$y+4$cLhzX-G?IkZWIeytBnUwo=8Uz$)cOZ7^CntoF8A4 z-dn_IZ5D0Y|6Hq|E|=aSM)0yXoSMqsP&F04aY{{%uTxE%R86(7O4JmRPu?oNfYk0B zE+(|xG4SNc`zqDhrqv)1lxQrR49&!%YZeHnUkBZWe$9K$sWtC4HLQ-jdP=QzRaEN? zb^a(m&Ykl|^=;z9HYLYt1wX0IEd%6fBe0LvZ+6HctRF4XBV{AR2Bsar0xPe-U3BkS zBFLdA&SDoSZy^jL<$O-wE6n;K6FVIq5L@V+nHjSDc2U6dHp$_4G}{QBczSk0<;kmJ zG)}8v?dDS&vtbi8=2^Mn4sn)VKESFP5IJ&(cpC@nWiQLwTef=bzMl(-80FnyG`mQQ}kY5e4uNT%%@Up$44 z`i+iEIew+$-`45|T8@+Cm^<|ZdE;o2)4B1`$zt8mfS+JJY1*g-q~QgpB7~4~XK%4G zE|p00UeP)8K*h*?lh;*JeL5{UWR+k@J zs=R8-YgDl3U4kLY_Yjhbx17FRkMhAcL<&s8WoK!LNt0U8R23Vk2=wO?dK;NHVa^h* zJ>T6`7QG?b_~HHT#rBVz$r}0G8&E&+;OYKi?8^vSKB5hdUDB2M#(=|(Joim3gul<$ zV&tKJXvzJbBM$z*=Dq|xiemeBX1c4hOcEw50Rl{h009yRdt}Y9D99oLDuPPblvQ@b zH30*JO(I54M8Ke^Ac#Su!@Z&g78pUn@NUP-EZ|qmI&}%283np# zp4Kw#KIx^T(zj%uhE-7O8qgOddc0#r1FAltrC=xqxchF?QyRq~CfsGe&uQNmAE3l~ zYQF$|KfvHBwlPgvpuySAGAeypPokpNbe;ArfZD<#o3+MCk0(h?OHE843Q zI6K^Ldb`#%BJg^@t|wF3Vyy+;eVdkK`m>iwx_HAUl8iu-csfka+^+ZrDM-EvL``2D z8a0xwo@P`$T{^0D$d1e~l3hBOvG8>1SS{$D+v{csw-07iJpEDBHg{+_4b-9z7Z1l{ z`BaI;cW9a(Z89Bd+3sCWh4*N!nXC5Pqq*B{kCxm~&7YV%zT}6}XxRXGi!E2)UbEiM z-4kHLDuzRYd7tlK!;CzW4Y9TXAxB}1Hra5m7R-hf49^)I;0Kcpk%3|`95c)ewl*)A z4Mi{;0v*gDOE$#ewNvv$8SnXgZIsDw z5sKXuZ!o(tZ#X>R%*wDHFe^tWc8g$k>wT}qZu0f*XLXDLmiTK=rY8MA0;5QzCfVif zC5qD!S#p|;HE3yQET_pX980pxMPvO~FP7pIjwLzeBC-0?qxWjPc)1YHobX@|q*ee; z&0gtiw@lmYa6Dm3uq{%8N$H*1RZpQgcj{r}DTHwgb#rB*=85?tNlGym%-*lzBcxDk z%-=Q?YW?~CNulO$G}-G$Cn-JNuxJlz?FlQj8^e~{<@RJ+m91}}oK@J9xA}EFgP;D6 zBsRRNxhZ9}7T)&BB*~z%>)4@0;33WyLYun~=1;5Zcx9yCn5M2)Qgq9!TC>LgfmU}3 zB>Ioidtr}M{wV!B+A>KGC&yZ?3nPyXOJyCsqG2HGmDF*y7Ek$WwQvUFUMdOa_`J%f z>{KX9YCN4pe_yMp@!?v{^G6tf3|;8Hd-X^fai7*D>TR67481fAw0fP2?o+*I*?n3% zumq95q|&SPEXo=UKFj@Gi=yw^>dDc;kzCaAF}*2cXVscc8;TS)WUajwRBP|5S~GhN zZnA~k hcJ9`R4&!=RA>>IhsKFftQWrOS-(I=w^kxll`tK2MW)%{xYKdAg=sxpQ= z;IE7k7QN}@186n>d;Nb)ig-|KW##W%_nOw$PPrSj&YTH%*0cwkb@&Bcavzy9se3MI zjoVemNRE(wFjM4FrbtDMl$Ov=q#{#mO3TMd%P>WY6i;zxPu2hpRP|&AixyZ8S+ro> zq1K48-m+S68WDJ1@(|1mH<$Q@giNhL-A?S}LrS!8WO}Pale>Lo)YykYqt@%hE*16a z;M08Sbz+x_)st@7s3l?hHkFOj8}j~vWwddlRt+|u@QVH(<&4%lQ~oAZzfwO+1rh&8 z`q8bMO^xYK^dqjv6Px`?izJ|>w6O8W>@7m711cXcwL^9E-=c)|v@Pg6c=u-%nrLx* znw|)y<%2C+n_zvVfmzGZp|y;Kx?IcQ?r6Wh0xdOxHkE1-bk!sN+RCP)N3=%4+DdfY zik@BS*K%cixwRe@olQMUL!;KK=u1caS1BYn`UR`XHqzx=weQ=TiUS%s6o+`p`)ioZ zm9#+fmnuaqbWW-5PI)w-QRH(RZX-+i!IT5pr1rk*0Tf@o8Tw6p@8 zBuDQq(WK7?#FvTzBKD-%ComzRDkT~Ire{8(RWr83p9K0((CjC*q-3c;dAeeZWKotE zi34c!ljx>@RRVuI7x#P;z4fH(nEw5w)&@Q)-&P0|M0oDqk2+|*93M}I=?~*uBPBEIIDb?;{YlgoSXEay z>sWt$JpF0>C-&5huhf4=og4baQJ0PL>Swj2;8yK)C&;Y1RpW^(@?x#}>d-hz{y2EL zRGgml0j>Y%m$dhF$M$Gxx4@2s z&ktxgn3Q#IsdGV{_QaT$8>!pY#?oo1*v#^*T^o~?2LJL1{V8&F*V_>t#OMNFr3(Gi zL1nyvs(dA<`oCed84|3pwX-|6Eu(#}Yh9hCutT9=g(-CzoqJttKB@$E5P>~1P-HRm z;4hmvgdYHlDI^2-8@%BO1`)<;F+dp2s`8KAuwbN0>d-t?^U!~)v{Z)ubLBmY?tNFww5s7EgSKU)zYkj$ zFid@4`+)DY?`zMSR54gxDm;nh44)iP+H{i-(BrBhVK^Ir#(kh&9(lB@GSwaLLOVau zMsgw-KF|(WJje<*tcUc@hpIgP`4Fp3mQlNZf@=Xf^q<u~4Z6q=i~qU0Xe zI)I8r#}yU#99L8<_*#2DNh!PGpdz;!G#9DE5`SFo8`OUxl_(U*1 z-M|0oCzek#Cb{^;8~U+m5@p% z)yf2EZavK8!b%LZO{sj$J*9Or8CR13=~MpVhI4U$Kc)3FGXveaQNPpLP>Y)^A-d_b z;--D4wXR|Ce##nvulBTduOr4(J|s_lmb77k-b7&Y;>8Qyfs7xu*gq+G8ZG}(OZab! zpGFa9HTQo*gCS=_X|UpKJsPy8^Jlf2Ej|SC{Pn(*pHc76ScJtY1uo!yKWQEP#CYu| z$PljUvfs7q;|p~;-vSGDpwd&$hgR~9=OJBg{UuNUNo=zc_iktN}Wm~nc<8Rt1N3>t* z6i_VtG zY~J)>+a)>%*-O0X)SJc^*y}e5B-4`IQF`;3BSE^uhXLJTW|V#)rb>O29QzO`LuW4q)mXuMbbERRgM!;rp2++8VE-R>bQsSTG^;5`bBg zpkQ_;geDK;4JTibsE-UTM@o`@nUz!-W5{!Yd`D6q{~ z=GhRwpOIrst&*Q1=-ze6dSu6%NeCr&&5$(*? zqv??zut}e5tS8$Ge2Go;IJ-H5NZ=7fB99=trRZ1>R_W{E)<=gsDr3~lXGM&f`IIsi z`ez1xpN_SSXlQNP=zZKv)xrxbq4fSHXIO1K42Mnuev`A0E86IC`rvRIy+s(T1Kb!{ z)qD!8pY%!5{`dm%S)w-4WlkO1>FMpC$h3^ReaH6NZhC{Dw++8~5ODd|5l) z(|&D3j)O+Mm!a-&hz{Qq-NVMc1;=@bbbZuwd)jo6-CK?mbyw3&LK&ehNrcnQXNxz?w8<1cJEdP*?C+rJP=e z6g9m21Bqj71q3B(>D?~ETYdcoLaur?5b_-c!mGRMa?%TC>K3%AyZ*?ZYBb0S#!Y1n z%?3kM`oO^J?ADCgQBD{$X3w0kRtU_Qs;9=6TtuAT*+U=Vxx~T=v)r;ovC}vkntP@G zHCg4)+5!=VQ|i0$w3l?iYhR(_n}vpQ#y4~?%eM$CkP6MQ$>HQZodeE$pii; z=|#{J1C_>A7r);J{!h{ir&U)d{4U7`HCO!QglYWsy2~;s%ld*r`M==e&jJnxJXm3l(Flj$ISHM{rwnLLw94c$(F!uj$@GV>x_HOqIbLo*UXmtBxV06n} z-CMxA&P+Pn?4+6RkEXEIB)Sii=veN5krwgK(R%;3HEM}f6;pwt@%{*42 zW|(c2tKN9_7zPz{_7d|1eQDD;J8LdmhlYQE9c-gkG4Sg#IOkV55nD zRc`#qYZF}76q&5@A6?2uBjv#*vvN)T>seuqM_ROBR}#>b{6>UJ=5yb4y*-^DqDRKo zA00yGx2K|;^`?K+|AX0NCBJjC-qO$PsKmN#Lhh-0TC`u;5>U4O9J{~P6$JI)9j9Ns z|3-0Vu+;gVNsSI%(49KCqe=sm=ULC=SA;IM| ze!l)dbUqKj%ppqwU6_vn396GvEOADC4j!~X&xF)kv_RhwV=hdP1z#V}gPml0s#uTV z_|}|?=wvM_G4tWx##^8kb%hKJgXUiTwm!56ir}Tif7AojU1WUIB8epg(VKMLZMvL` z!SF$v(s-G#eLJ1LO;1XeDikQ!uv;5AItcZq&EGvA6O zdY`oSdD%4T7UNJDH04V--fjsqw4q zV@593M{_>gm;PbB|Gr5d-UbKa$bJ5(b{sF_T7K!pkYE$JJnt$_`ty7BbY9!eJvj44 z49;5M^_joCsWqTyDxev+eiXg;g;rRu{pss^x|;h9tVxumR|^>r*Q3*@Cp(ncw2e{NT-O(Pm5cLUE7YyU=`uCguBE(*fLe#A!*o%5&=)IV z+Mc^IG-`yoQY;)%<>G~5tNa?FTvUWuAxruqOp826V2eCmBtlPmeO29T)M|E)C6||6 zG}gS;y0!4Y$!0?rn+<8TezOJ<4yJmFwy)DyC;M4n1Xy2y_5WO(*i!VDn{i@A139M` zqGRr*`-|1^8~sLVlRp?S(dP9^0RNxpBU(nx=?-TcT-mI&zL|LFBDfv+e}kLcBol>t zlAV}r*e}0?d5d2*=xtd*TvGqM9{Vo;NWCmE)yp806@6Z!`p8QrdgViZJ<+O-dRnqy z%7}oJ5s)%|-eSQm_a6z|&3j;?|FE8DKR~lz zRjLZaO=GHlSWinU65i>XludZ%CMCoVZ2B`Heyzo``HT`q z&-e0uFHPO75LmIYv-ABypLv z!n={O9#iVeh{yB+SADFe%GlofzBy~AdfDx2P609==453|HW#p~ zpv5IGTZW3gTwWL|YPKuOwrdAm*I@Q&@DBZr#y{D;$-z^OL5rO;p3>)X+kfOK-CDRK zasK=%-CDRKc>P0%ow{7ObMH>Q3iE4NR+8lO?*TzR3wL3j(KMQ%N0qn?d|Kf$>uH6{ z6Hos!E-QEIvl*9Pcl&XXYcYB}qYp3_5lLJMpHa9Rdq(2&beW!>;b$03%Lf<+dmVV+ zoI2`CZeEhAxP6bFKEkr_@XVWOHp5Bxa)#(r+*vs*QfnA^ff=(_A(Sn-0}l-`vi>** z0<9(GBw>zi`yTW->NGdG{IP-AXn6ivcK++0RXzCcdvt5RP%`y=Ru5S;X{}E7FIv1v ztUH^iMSwgLk5&W^I?_Y0z&y3%JnOPY%Q_$aJk;XGNAcuGiXQ8 z(Q-c*$W<`u&+Eh32*jF#@2=B*6|e#W50)L%0y(Q2C(&wR=_1Y$yxj3GZR6lV4DO zrM8w@`~LoHZ;u>vfKGDa6C_BY%!7J7(?O07K!*-?Wef_@n=gWNdh|)PuN2G3ykGyn z!#Bf@BSn_c#7h1Br0qR%>>2hxfd$Tl!Cg*1cNN%sd`M5Qub|vFR3AIxGt7in`AXh^ zL78_ZtFO-=QuAO}|65N45`p z>otz5_h{EUdUoiJvNP}Ka<7A#VCyPQu=G>PdN+_DO8L;c9Dc5v9(_+$x(R>bJr3V@ zoWhTUz|TD*5j#nDd=Lna4nnNVppGZ?cyfFQ%u3JDi4Q{xHvFG5-Jj^Xqk5XPq_Ubx zge8@C{uF|9#ZiVmR!eVu6p}`}k2(C@Z`9?JknjzkAY9vY!A7OW^kEj&P{{C4WkO3S z_A_K^uDO$$ewIWhe-6p?j?ZM`%jn+E_1vH|&VSC~n^scT7kYM`)n4DfqnbC@5-`zlq5$@OhWGaK|RV|Q>XUHu)fGbe~8D7IF{ej6YTO7i#b z820!!di6v|#kV}k;RV~N{izTltv5%a6Ps==U3dR}aY0f^%Jokj=8QkLX zDeEM!4F4YWaeNQW`~gwTc|{o&^NMxQ{on`A22L72`!NLFoUrkxp?oY@b-ZftQ8BtBEsLXyno%s3UQA^FJ{r`ig@cWTj8-mTcTE+%m zNJ@SQv}h39{ws&W4@%^3diJFUS9O@J=r@i9uQ3mu178L!@-Y+)8eBG<`6)$4=ih-K z{M|G?kEnhXTI#vMQGr{@dCmoXbhcgqXsD_Y3i^DC03_V=w6u$EQNbz(O*kLITwCly z1LmL5V-7LUYWTqnkgKpv)x_8Alqg&mU891#ZVDB-l&^~m?C@xb0AO%;Sr_mZ0YErY z`qdC!qeHEZ!G#INC0XH86ehlL6fdLO!^Hx}xfIggBU-?8~94QtJ6;ZrFacg!#M z$LBH}M9pV%;@?5I@FjZKDYBzYZy*c@XCT#1xP{7J<~!#Uy4}9QXO9-7N3EA0LtxFb zdsor6SWyJWDP7~lMBGZ^#Me0I{hoNSDr$vPHqt#j7Nvv)aSEsPXo;ek!?iXQ{%^g= zB4-BDxUZS7V?&YUaBZm@Jhu@J%yhjI5`4ZXA-ISJrihe=DvN9ndqqu+bL6l=EYnuv zTbv@+*&DpzcE<&>DWY;=px_L;u7 z*$JTiSE}`h_VyXR)-A+JyX*T@cVYmm7n%_YpGL>i#61b9l5QwMgtz1*q;WRu2bec$ zDf+-S8@3Bo=%4ALQ%Xol zO*<`bOv|3`nnBYtL`nl}^$PdE{Tkf;@stUTXal6-68g?IBGVj|*?ENcY#Y%UMf&5!5hRcrlE=texoS-1f2LVT?IHqJ`~5k65_(ht0Co4!^i?^@u}l zsiK{j1$5hIh~_CTseu8r-+r~!p_e-t-BkUh1e{=XUxpY7YJZU-E{oc3Pvu<)UAsHB z+3D#$I4fmjrs#tN@6QCmR?v}5G2AFkfD_YMl-^$C7{zdgw&^XpwLN&GjLx?gjo4*o zXgcCnEe^-Ht zbYqrC=fLnlARjt?C<`(o`ct>NA?gi|R=vf|>BG)qY12YGb}(fHkK(20Lf*4n{XH%0 zA{GJJ6J5j*`!>q%D&Dp)r?75fSo9Qj#DtBT3EnUia6&g>c{;nlo5*Po1mZGm&pFh| z&e)o_U7q%gJ?(9@?CyAT;}Oj;osT*xqYK?cQreWL2p*EM=RWDhQ#$c%;*Go?#T&OSmkUS92$$8Wp& zKwOW2n>x7ol)yN@!~zbl158|sPO22I21>Cvq!d_O8&rx4KER#McNg6*`>XNbp-CcC zP9J28G4>*Af0^iEFZ4~jOsuurPy7DULrin@IG@PwiJMBlW8T7eH?v1$?}a#bRJx;v zohmklW30p5;GB059;*2v-;Sp<+h}8N$kVgi=!M>*b=>C;cZ`(iuqZQR?KV2yTQnJY zZkt0^2TuO=o{-O;7#0h5cZ}(8-JAb-03?vXUd}29vCPbc>x{$G)SF*QH}nxH>C(q$ ziH39a(Ci9u_evkL`TQh(2iG__>|QGEBj!6HT4VUUyKrv>HR~%j!wdXAzSYv$9Ndb0 zwK?LLJr-anHm90tJBNzjMPK(5ozrp$GP9uGlOfSY%IylZdd@}}%-VVI) z7$Vy8`v*hB9!J`nO}){sJJ|1PxEBXTdsjt+Gw*;5k8#JdVbtbAN>2@k%s-w=?+!;& z-=~t}DlrEs&A&=?YyGLmTkCzNoGRi}T_sv2{3v0< z;RDv=@HStRYWIHMgd#@>>6?7c2yqQObiFo0yqBWb#!&9+_{5edKCcDtC7Zgwrt+)7 zVW;Sx>%>SZ9w~mdm(%J|qCYTtXOwsuxBEtmr)TYRk$cKazG zVs?a%x{daX5y_1UgZN{O`8)_L3s(4QjA$8sA&wb0tVwD-_?8l{7dg?7q{!ZZJ9SE- ziPwuYj-Rl_@p>^mx-9T%dkWn$R_w6fN3r9?u-J7Tl%mwZuHINrfxGS5h9_#SrB zmT_cHJtuAZ$~cL^RuZ+@Duu#qmB7K>DuIK$IRSV1?s^GqdYTiEp4u?>khyK!DS?Z3 z)&oAb!w-xBj07&&E`iTJSr7Qw6MkTff>b%SN#G;f>H+V2%nyv=l>|Pxm4Q9wTk8RD zDrMkx(%WCDV4&%()D*LD~p3D31+o z16EXsc+2zOliZU@Va`C<@Yh_IBFN$pRJ1Jt=Mw>!AFDoi?w};>B>HHni$-ocuAdTuh#yQN0 zU(6J6-|A~VOWcfc;~G_*eQRXFcde;coZ{6~b1U@a)f6*Z^kb`!EdQpJGQygb^&*^I z!4X<$HkTRY+%l86%M@{!)r)eZK<452*-i~+3$NqYQj^F_WsJj1>%}NvA~Vskz1)nm z=>mN}S2UJ3FZ)a_zWJI9wz^z(_IDeq#w(qHQqDXaB2YP3v}W^}jC$@j8*$Xc6Tj7q zdgNC+HxFZ<8|I1Y*$yWo9IG`W9ImYwq5MA_A=ph0(F}2S4+$TWPQL&VDR+{ZudO;gMFx3o@i^fj;r!S4pf7pJdtJ``^M&l*V@15iM>wKe&Fy{ zd_Z^Si>uLs-pLoY;%u;JoKrCis+uEJgTf>`TTLyr*1VOU0Kq6o-(w%sl%-;vIkt1~ z*zV9$@s{Nbck{hssP%mMUeVngG&*?Dm{lN_Ti^B-i0)BG|0xr7cxyhi@z)G$w@i$+ zTo|ujCfZxzuPhTolh*R7Md98fw&|=*V!0sHvWgl?T`tma?$PDT#X}bO*UQCiZ0D9N zuT;$0T&ElBac(AJGX-De z=Wu)bIs9Ch2R1xV)iaq6t`v>T`DO>Z4j8`*OscICN%aEz)(;#|59p0m;w_#*P>tnN z)w1cm)uQn*Iex{6HykXXvtpO3Nuvt(rIb1J9Q4bWMoY80W;A9i0{7JH7d^{^f5i^= zF8wfFwnntTAnL|7VnF92gz*>G<*b++{DPn`3_fjxJVq1s5woyH6W369?BxvU$Qm)s zS>{N!0T*yhnJ;6l_}v~;VrPAWLEtafMzOQt_wTxOA|`q{e1Y^+&eSVEp*f`x#<;s5 z5Pe*1g#dz6n^?|9v5Yc{MQgL2 zVLrMCc{f7NFD@3%EkgJfJ zg@f+l={gI?KBH67Gi{aR+A111!kP)xHU|_ry!QD$Y?U}m%gD4nNd2~o^r)k3CB=#? ztO_ilMO%f>zTVgVQPJFPFQ(y-iN(x81~?ZSSMGcFF_!E(|Qu( z>?bUTR?!#RVM!@EApMFr+##m5RASFrV+-E|F|E_rmLJtbwC(-V5(=J??9> zTMWfv6YnX3QT3h@7|{th3c)!L6@??lHQKpeG^OfiL{fq`4;$%i-aHh}Y>a2CRCVLd zEv#b!^BQ2R)@Z#mp(@_1N2u-Z(xEaj%%V}#J)&nTMWfH^(a0JuVCdtmeTVMZ1AW@0 z?K6AC4VfmJYhZK6fn^b7FS|!U&%%3e@I`tG)VO(MKPw*O$y+HY^WQe5{h7Dwp?LH# zB|InQnN7>Vaf_Z4k6BrF*ehDnP32hFZsM|`T+9q#FTH&yc&Ka-&QI*}yy#%I6l`K> zrLo469wNv|usFiS4A&chRHx__TYF{<|4yfypjxqV{5gm~^t zFb?6H?$OxJ8K3H6-oQkD zB&*SwmqfD^Rrdfg`*xfMg=|yf_(tB}w0M_Sq{0M;H25D5IilxZ5-sY*L({AqPp=cN z;mg94$LCt;3vh;(ESyp^cqm=<>8VcK z(x#^-NkYigM>rM6&h|ZCo1KpI+2|->L{4qs7UofDF!6`;IZ}XfQpL+KImPmj9>z1a zIvMoC%c4zx^!E6R9D*~YJkfvz2nG}$t_+CVFdWw8j>eHqG8MoLj&`uETjwL2_|!*^ zOEu3{Qa?lP@+7L5`hPzrtM3jKj=N2TU5N}xGn@IT21 zI_uInFNsaz8f+viRk4suN?04jqy|=CZHJjErMn{qMbbg+Zr}oFWNP2(2=#vPH zy=Zz&7e0;*42oKzRtH40j7Xfs#nl|k6PQc`xDzng6{{i!)`LnX^(o-0NSbp%^vaVl zz$MZjoH_)>AK#3~dv;Q=LKcMLW0`mqi$jd@A4h+oNxEi&-dum+J{%A3L>=qu^fM0{ z&!8sWn9KD%RHK^vK(A~3;&4X&VN6H9hsJh|N>VpN8=lvoO{; zs{Sob^>2_&m@VO!sij8nv7}fLrhD_Q2nygJU=ki{v%!y7q67qULrh2(WK=LWkPgz| zmH`fAlKC6l1CvL^*KZ7LC>+F13AAB#Fa~7h^DWc4+29~^MFZD^fJg+f(jYjw_JN?Q zt2%#_1(Pim2xBCogcR7zqXBUZ`k^;%21^dr&TM&-p_rF~TA9Rf5F)dLLDeHuU2>RA z7#ZVODV#2Zc8+gAH`#-nkTyyUA;2Y!SMzAxRAhWtl3VjQfTo0ZK?groNG31`R2W3f!ZiOe8-neUJ|{4HZH1-ZIB;B>4&g+o}N8lkF(Cx&%21)k@| znX+!wr4%*cj2Blh@9MzGT3p>MXE)p{nzcqyq|6nk z_|eXf;quYJk74pr<3~pm%*8}O&bZlU6H;OMqM>L`P8w2(s}{@z@dB$wwUOcWC31L;)xQsGT16+}vPA}J>*X-C&6NdYdJjubtZ+rW7% zJQoP@?X9-Y_2T3mh$hDjh-$}GbNLI;wVlD2YJ3UvYATQ?`toWKdd7Y^jw;3neQ*NHGkW20_HlT_}bE?k>g?y_!1@cej!xI8U*&${TH_jh4>J7M{R@ zrm`hp(j}+zS&FDPB~Vy&y1VQU!&M;P#;!6u8wsL$)C^h-&_>#bm{! z+%9+g6?z^j8A{v?kIOGKuueh>4gSt`5-;4Y4V9u(Q(lc~bK9*GwVWw@l9W0IcY9B1 zHtpJr$4aeiJm|z4WtKaxh2SpX>Xd539r9>|#AgJwV6U=Zob5q#OT}gMS)~Yb;AQI( z(c6VR3P=P}MV`hB`@sF{MLb>chL{y0ZL&ZM29ZOeEq(KbXxWs*oKAV@ad9^*>PkD~ zSJuZr`w>Ai4~d-CCwhk%JS+OtIk8A)2?q$Ar8}Dov_`XsLC|8Lj`i|fjKBz;Y7U7X zVEO#yO)hZP!aKhBKC?^otD3hupx4WKI1L1$sR8YX@J$7ot4G8 zsx$rjZIMo&zAYjh>ZQHsSSPEj5@++(xk?ti@PZ>%(D?CiFER2RF`(s|`qN@no$3^Q zC%yQN=$n^s#}X`@YgC9ki}}UsmaA?9aKpZw9QB69I}GYVZQI*u`S$J_&#V@qeWF|N zf?Zhb+tCW;a}C=!d5#?ab7sgOR;*q5=mwww=7GoU>G6(ik4-JYNS_YA!J3J5nsXxz zF}>dvF}>0qIdUG3)8;f}*JqOorc46hxgP$AY*Z?|+E*qs!kK=6#WZl`!qz7ypR58jXjo5BPs4*^fZ=k{q9Er#=H6 zO`TAoRa+|P5X5MBk&LFCqxu;QLw07g{;YmEKZ~&%}!Kte#;Gk#+tXJ+C9w+tsKxAW~6Fv`vc!46%1}Y~l`#_}TfqCT{2PQy_LK}5) zy2bWXLxD!IaOLwS(O1d*!o1DrvaCWdcN&Yl=Pq2hV4n+FXHz*w!d|AvD4u8@sziB= z8GN^SV)z#BiJAfD$`~=Yoq0Id)&toubwYG$Fu>YpU~FKYG2iPR+(Zu8(6yT%ykZdm zQgM{5V*!eY3}rU#s4;+sJdi0III?2T^uVq)R$dM0$x_;aC)~yY*oC0B=fS!Mv#u6hwx)K z>V_3VNf!R(iI{=fi-s-$GR^QbKmi*tg+Qz5As8UfSOhXg&=>y{iFr)6xc~uWW-M?w z0DU56EaLxzn@IWrQ>Znd11bf@V$@?oScmIhrYwndC9n&nlO&Sdpp=4y7MY2HS3z|Y zim8tp;&dZv$x+cLFM{!AwSg-$HAa)g4QK3`%rSH2NE!@iEHKjwhnA*r0ECW;=i1|p z&`mIXl39yGhRH~{?+{cj(&rq*(f9JngQ#JsE=)(xBaaEmWdLIMfo@EY=((~SJcyTM zj*{FKzySmcB@$RDh|PFo8S({f6-TivWiF0P3(O=Fhd&=+jr@VOMITkcU|`8qTp)Zw z(}`4zf2`Jy77gC%#?u(G#Y;I*!b^kXmjtZY=P!thW3|&AoBUsryWvHBfeOZ2O@_ha z5vNQa4CdNzM|M(rq@ufIzgIkhKysWn_5WD3cgLZrVj4FZ;HFk9;dv>jf?E5rXq~r^ zv2oqW7GX81=52aFLQ#CNM<*~t1o0dnF}I6 zBq$V;11La#rN*EoBJX5;#4W`mkuYQ{WTC_E|ClF}xrIuQ1W#vfiC)J-?1M+9aCnSM zzbcxW4!%HaF7&{U0RCbjBO#S9u-}7cjysa_&;%iwTn#ZGbb>`)EI~a|-DNQf8;Olu z9osV+z?nU3vEecX5MZ_0rBLBuu6|j`vW^3#Pv+92q%(k@EIok38?t<*Um`mF#K^>4z@EJ#Ye|P(@`B@cV%Tz!za9fKOy!wMWuXZEGO(e5urPq^Uy_Dhj% zzn5BkCGNm&%U9xLR5PUo9?n4Hpt%d7@vlBEBJK3(*P`5hukX5liTmstba$%xMszS3 zm2>B)X^rS7pLhLEQ)G+!lJ_TPzjXLLYrAGFvTkFx|O}Q{ooO zuu$!gT(QC?N0~?j=Ukoo0_Tjk`cA|nl^)+=p_rNQtnb9VS+96p2T-38Ht*xH@=1;c z)!t=4gP5;Q&1R#N6JkCFZbc`=4BXD05EF2_>7*FwJoB}qGgvO%`F301?vvuQ-FNV` zSnbf~ESx`;hW{XT>5C@JTu7aM6u0>f{wSW)+fSM>XTidGQ^wDqGnO#TFPzH2joAte@U-Lr5z3S4tiw>0or-WP->gP7RWl}b zV4|KvIM>)w-1!QwvGhiG*KzuBC+EMM`x?z2LT3H*RjviTwxRoLDvP zd<7@grLjy*h97K9c4176Wr8e5xRsWT76_xA%%TRtR{3T&p*_M-m6_fo0AAgMni|Gf zne|qLbJj(;^A()+QG}r!@|v7Nj~ga!Q&NJ`N}uJGr~EoLfrWZNef|CTDeW> z@h}swl%|2SiknhwxZ#oIC_uPXj_PKSGQGEii5o6Wu7W;+1@zS5i9yp?^NOYQXTtwtYe5oxq-#&9bD#~2U7oi96nWq>`> zmu5y9pLb)JLbrlxi#uNu#w{OZ+#^A8_d?R0*iTEGM!LaqPq^tBr}1ce&SOfdic>d! zN>KP-^pz)GrMxI(Q;dvnew*Ba+C&?NqzuVyp$M?oW3%1Rg523g-`Mds8-vfmC%$&2 z(KRu~sYvFN;|M$2jH<6RZlawHj9xO`y=fB8HnbJ})W8HRXc+(;5^DmEX{7*9w5A7R zjZ+DnVp?lSd2fD|&3UR}ZaPt%$r#D$fy&&JPGRvzTZuyf!XfS?4iCkfNpD9WUpZ~* zt9auFS?de1wx27NuU#+>CKzL7>z~>-kZ>_t?~nL?7QdhH`x!sJMz^CGiG~tsz1js@ z^TBrXTcUB3Y&3TvJkV&SCs~aK!4|X4%%CTetVWX&058p;_=YBP79re%cV*HQ4bAdb z2Eh-?Bws^QsCCH4s+da}aK!QfFezxP$Fw#eospMRyrGd-fc~3?&_?Pdj5G{iCr-@FQ@F#@E!2)S!uRsukB| zX_g}R@KFmok00Nu%bW?*<_(@TYv4e@F-I-vs1n)T#4u=eiqTDCQQQ%qab zn;C{`_n2LiUFYO3==$(HmiA;DZ79xdTq&E{n67?$c_orZ0L0hK?i7=1l4@HwiKJx2 z$sUs~i{VF!uc*stx5qdo8F4_iq6>%Lh42<;4R^ULP-AB=qh@KwO|k=j4&mI$OL6DR zfgf`S-%ngdThfdz5~&2(9QlI5{mPamQq>5vT4-r26RGl^3UE+w`nHt`nBOY^n3HY- zj_$1hYx>ZtbQ93sCjeO8#soZzK)wodsBK%b`YZaXVun=zfN2A!fdRNKigUR773$?V z92>H-AAQ@-!pIxQC@0gxsGkC?=})UNEsXjH0ISef(~VwfVr0k0NtHTz%ExPz{){1y^{%O8x#Pn=xhQWK_FjKucXK>CSd7c2`C%Q zp)i@Qyjb^|Q2DEvxYXnqjoKyRk(!iG*R6gzhI{ zO7PCt!QnI~+xSpQ^OeIDTSwu(Z#YZyj#Qm(=(P4SBUZ+$!WX_=BWTxUCaQz33Y5vw z(?m68gaRzPnuhi?0c#Lu@z$fgOu&6tE5H$>=tM6QuyAAmuwNe&@P<(e@XTmh)5io% zA8i4Sr?2`NJtdCk5Xe{2wUm)#0#;rV0KC_00&coi0cMS%!(J0`>U9CY7X3}YUSkws z)%7&9zu73muV+9No;{Xk4lu5jjkOlxmKZG^OGgG6!)2qqWvptHH{i}!aHA|4%Z+j( zeB+yCtuTQ`-#}*unwYH_7r?COa!9~oR~TJofpc$AN!H#-MOT=eSH_J2^k&{f#e+<( z&wWz>z3n$q_+YbFEJC>I6-_DsaauO8oM{%^O;kJDOfX@(g4;fW`dwotSdB2N8I)XW z0+!EEfP-eym)Dwr`7;B6*<(z=(X$j_&8@U_j0xzzH2`?@dK2(00{JSOL!PlFV8!eJ z;No#6U@`h=zS8H>fpI2a?%V)i@{J~7mw5`Xaz0JG(FEjik5!nxH<^G(5XjeReFx_Scp4Gu*v65Pogo%lGRPW1d}#*Sqgh;2X7JHG-oF1&qlyeB&#C5TzImUEJ;UmkqO6c!%j2^Ptc3IBNwl$^BH6CcgSub90^H$vF zaDHg)ZEmw!zv5S*GvGH(UN#uF##m2 zg!(NqGThr9ayT6WG+5~H5YAHreA&Fk8y(Jd@!4zXzD4G!CvC0GHu-?e(zakN9av=c zV`C6LX20*}MaFVCKPsYo790KYjuqK#*J=2GUo8^kABSC!_p$g5U5CbjpRUrgrQHwy zK==*#@w74jIP6Be--O>?fGxsLkp;REzKutCE`FQ_r_W&%@IFzqb+?^G0RK2}5&|dV zw+jgj!ut*Q&B3n#zat2%z>hEYdRlb5akFdz*+6zsG5zayqnoVQIYs2T!|0UEJh=jMPs8stuFT`+eGK2XAv_1+d`*4;;~_+tgA6$Z}p*+~i`I4^goB_*ro|YysXE;&&I| z%kitkuLwUY-o^8zK6e`c z6RcEweJht37wpce3WVf7YV#gH$RWC&sKEHmQGJ+-ml>}+%HF0MmmBFx0Kl z4%m|&14^|*~-1%Z=?1g8(mz#GEAA!@nSDJC!Kc(VC;m%iZoIwcV zcfJljMcY;y!&@D!z!>{aV6%5p@+xDvY#<3JGGC$TQvNEVZ62pJ=Az#fyjgGEX3m~8 zVdj*sv|L7aoJ3m?vrNEoH=2^l);lA_W66oCBENgey`qX>l~aw*GUU* zpQEBHg4lK;CtSgZm+zn(RvXPEvvtAuAOx~+T{vsb!doXT7|c1~VkE|xF#LXGCzTxG z_dZ8+)|+jzpg0(ZVbaCzS5J@y?c*nYzcuSOq`bbR1UpxuNz~N50et79nQan zr|hMg4aSwSc7HKr9KT46guMakFW5`DWOR~J?goU{O+8_+Zxp6{y;mAnFfL_GY7%d{2KFUGdBCEN{M# zQST+zdm-NMdYLLWn`-4=_5Ivtqmvw}oRHsv60VuAP|g;kkJNDnV7!rnZ;KF~h3Cci z4Y*Z37vOoK8D50vN#^q=JWn;Bx8r$&`CN|Y`Q~#4o)?(Uhw(hkd_Icj>FRlu?Koa$ znjg;Kd6xNn4$q6t=kN-f4Fgt*TmqhNHlN*io@_p6;F+(XFVl!e(EXNG(BemoE9Im` zVFicF&$cLf{}E$|q{s1~;9W0MR;kh0F=jsvEj5~Xn7Ie-S5ZoEXNj;9O64k3v2-7x zHGq@p6yiH7Q(lMn)4o!}BeUI$FpeuPI$dhCxRdK1`!r?ns0AH6&s%uwf@!m+jGr=Z z-t2jR> capture_scope_stack; size_t capture_scope_stack_size = 0; + std::vector>> + symbol_tables_stack; + size_t symbol_tables_stack_size = 0; + std::vector cut_stack; const size_t def_count; @@ -834,8 +838,6 @@ public: std::any trace_data; const bool verbose_trace; - std::map> symbol_tables; - Log log; Context(const char *path, const char *s, size_t l, size_t def_count, @@ -851,11 +853,19 @@ public: trace_data(trace_data), verbose_trace(verbose_trace), log(log) { args_stack.resize(1); - push_capture_scope(); + push_symbol_tables(); } - ~Context() { assert(!value_stack_size); } + ~Context() { + pop_capture_scope(); + pop_symbol_tables(); + + assert(!value_stack_size); + assert(!capture_scope_stack_size); + assert(!symbol_tables_stack_size); + assert(cut_stack.empty()); + } Context(const Context &) = delete; Context(Context &&) = delete; @@ -942,7 +952,7 @@ public: void pop_capture_scope() { capture_scope_stack_size--; } void shift_capture_values() { - assert(capture_scope_stack.size() >= 2); + assert(capture_scope_stack_size >= 2); auto curr = &capture_scope_stack[capture_scope_stack_size - 1]; auto prev = curr - 1; for (const auto &[k, v] : *curr) { @@ -950,6 +960,50 @@ public: } } + void push_symbol_tables() { + assert(symbol_tables_stack_size <= symbol_tables_stack.size()); + if (symbol_tables_stack_size == symbol_tables_stack.size()) { + symbol_tables_stack.emplace_back( + std::map>()); + } else { + auto &tables = symbol_tables_stack[symbol_tables_stack_size]; + if (!tables.empty()) { tables.clear(); } + } + symbol_tables_stack_size++; + } + + void pop_symbol_tables() { symbol_tables_stack_size--; } + + void shift_symbol_tables() { + assert(symbol_tables_stack_size >= 2); + auto curr = &symbol_tables_stack[symbol_tables_stack_size - 1]; + auto prev = curr - 1; + for (const auto &[k, v] : *curr) { + (*prev)[k].insert(v.begin(), v.end()); + } + } + + void declare_symbol(const std::string &table_name, + const std::string &symbol) { + assert(symbol_tables_stack_size >= 1); + auto &table = symbol_tables_stack[symbol_tables_stack_size - 1][table_name]; + table.insert(symbol); + } + + bool check_symbol(const std::string &table_name, const std::string &symbol) { + int i = symbol_tables_stack_size - 1; + while (i >= 0) { + const auto &tables = symbol_tables_stack[i]; + if (auto it = tables.find(table_name); it != tables.end()) { + if (const auto &table = it->second; table.find(symbol) != table.end()) { + return true; + } + } + i--; + } + return false; + } + void set_error_pos(const char *a_s, const char *literal = nullptr); void trace_enter(const Ope &ope, const char *a_s, size_t n, @@ -1036,10 +1090,12 @@ public: auto &chvs = c.push_semantic_values_scope(); c.push_capture_scope(); + c.push_symbol_tables(); c.error_info.keep_previous_token = id > 0; auto se = scope_exit([&]() { c.pop_semantic_values_scope(); c.pop_capture_scope(); + c.pop_symbol_tables(); c.error_info.keep_previous_token = false; }); @@ -1059,6 +1115,7 @@ public: vs.tokens.emplace_back(std::move(tok)); } c.shift_capture_values(); + c.shift_symbol_tables(); break; } else if (!c.cut_stack.empty() && c.cut_stack.back()) { break; @@ -1092,9 +1149,11 @@ public: while (count < min_) { auto &chvs = c.push_semantic_values_scope(); c.push_capture_scope(); + c.push_symbol_tables(); auto se = scope_exit([&]() { c.pop_semantic_values_scope(); c.pop_capture_scope(); + c.pop_symbol_tables(); }); auto len = ope_->parse(s + i, n - i, chvs, c, dt); @@ -1111,6 +1170,7 @@ public: vs.tokens.emplace_back(std::move(tok)); } c.shift_capture_values(); + c.shift_symbol_tables(); } else { return len; } @@ -1121,9 +1181,11 @@ public: while (count < max_) { auto &chvs = c.push_semantic_values_scope(); c.push_capture_scope(); + c.push_symbol_tables(); auto se = scope_exit([&]() { c.pop_semantic_values_scope(); c.pop_capture_scope(); + c.pop_symbol_tables(); }); auto len = ope_->parse(s + i, n - i, chvs, c, dt); @@ -1140,6 +1202,7 @@ public: vs.tokens.emplace_back(std::move(tok)); } c.shift_capture_values(); + c.shift_symbol_tables(); } else { break; } @@ -1182,9 +1245,11 @@ public: Context &c, std::any &dt) const override { auto &chvs = c.push_semantic_values_scope(); c.push_capture_scope(); + c.push_symbol_tables(); auto se = scope_exit([&]() { c.pop_semantic_values_scope(); c.pop_capture_scope(); + c.pop_symbol_tables(); }); auto len = ope_->parse(s, n, chvs, c, dt); @@ -1209,9 +1274,11 @@ public: Context &c, std::any &dt) const override { auto &chvs = c.push_semantic_values_scope(); c.push_capture_scope(); + c.push_symbol_tables(); auto se = scope_exit([&]() { c.pop_semantic_values_scope(); c.pop_capture_scope(); + c.pop_symbol_tables(); }); auto len = ope_->parse(s, n, chvs, c, dt); if (success(len)) { @@ -2732,18 +2799,16 @@ inline size_t Holder::parse_core(const char *s, size_t n, SemanticValues &vs, } else if (outer_->declare_symbol) { assert(outer_->is_token()); auto symbol = chvs.token_to_string(); - auto &table = c.symbol_tables[outer_->symbol_table_name]; - if (table.find(symbol) != table.end()) { + if (c.check_symbol(outer_->symbol_table_name, symbol)) { msg = "'" + symbol + "' already exists."; len = static_cast(-1); } else { - table.insert(symbol); + c.declare_symbol(outer_->symbol_table_name, symbol); } } else if (outer_->check_symbol) { assert(outer_->is_token()); auto symbol = chvs.token_to_string(); - auto &table = c.symbol_tables[outer_->symbol_table_name]; - if (table.find(symbol) == table.end()) { + if (!c.check_symbol(outer_->symbol_table_name, symbol)) { msg = "'" + symbol + "' doesn't exist."; len = static_cast(-1); } diff --git a/test/test2.cc b/test/test2.cc index 3d12eba..7d4a6a7 100644 --- a/test/test2.cc +++ b/test/test2.cc @@ -862,8 +862,7 @@ TEST(PredicateTest, Semantic_predicate_test) { } TEST(SymbolTableTest, symbol_instruction_test) { - parser parser(R"( -S <- (Decl / Ref)* + parser parser(R"(S <- (Decl / Ref)* Decl <- 'decl' symbol Ref <- 'ref' is_symbol Name <- < [a-zA-Z]+ > @@ -900,6 +899,44 @@ decl aaa } } +TEST(SymbolTableTest, symbol_instruction_backtrack_test) { + parser parser(R"(S <- (DeclBT / Decl / Ref)* +DeclBT <- 'decl' symbol 'backtrack' # match fails, so symbol should not be set +Decl <- 'decl' symbol +Ref <- 'ref' is_symbol +Name <- < [a-zA-Z]+ > +%whitespace <- [ \t\r\n]* + +# 'var_table' is a table name. +symbol <- Name { declare_symbol var_table } # Declare symbol instruction +is_symbol <- Name { check_symbol var_table } # Check symbol instruction +)"); + + const auto source = R"(decl foo +ref foo +)"; + EXPECT_TRUE(parser.parse(source)); +} + +TEST(SymbolTableTest, symbol_instruction_backtrack_test2) { + parser parser(R"(S <- DeclBT* Decl Ref +DeclBT <- 'decl' symbol 'backtrack' # match fails, so symbol should not be set +Decl <- 'decl' symbol +Ref <- 'ref' is_symbol +Name <- < [a-zA-Z]+ > +%whitespace <- [ \t\r\n]* + +# 'var_table' is a table name. +symbol <- Name { declare_symbol var_table } # Declare symbol instruction +is_symbol <- Name { check_symbol var_table } # Check symbol instruction +)"); + + const auto source = R"(decl foo +ref foo +)"; + EXPECT_TRUE(parser.parse(source)); +} + TEST(SymbolTableTest, typedef_test) { parser parser(R"( S <- (Decl / TypeDef)*