From f8e1f5a7679e42f44a175e5a079d1f953d8d01ed Mon Sep 17 00:00:00 2001 From: Daniel Lehmann Date: Sat, 31 Oct 2026 03:48:39 +0100 Subject: [PATCH 1/2] sqlite3-wasm: rebuild SQLite 3.48.0 with emcc 6.0.13 Rebuild with Emscripten 6.0.13 (was 3.1.73). SQLite stays at 3.48.0 and benchmark.js is unchanged, so the benchmark runs the same SQL as before. - Emscripten 4.0 made the MODULARIZE factory async, which runs SQLite 3.48's --post-js init too late: EmscriptenModule.sqlite3 stays undefined, and the shells fail with "Cannot set properties of undefined (setting 'scriptInfo')". emscripten-4-post-load-init.patch backports Module.runSQLite3PostLoadInit from SQLite 3.49.0. It changes only the JS glue. Drop it when updating to SQLite 3.49.0 or later. - Pass INCOMING_MODULE_JS_API through EMCC_CFLAGS, since Emscripten 6.0.2 removed wasmBinary from the default list. speedtest1.wasm now uses bulk memory (271 memory.copy, 217 memory.fill). Score change, d8 (15.9.60) / jsc (325217) / SpiderMonkey (160.0b3) (each test alone in a fresh shell, 6 rounds): +15.2% / -0.2% / +11.7%. Part of #277. --- workloads/sqlite3-wasm/build.log | 6 +- workloads/sqlite3-wasm/build.sh | 8 +- .../sqlite3-wasm/build/jswasm/speedtest1.js | 2970 +++++++++-------- .../sqlite3-wasm/build/jswasm/speedtest1.wasm | Bin 864699 -> 862092 bytes .../emscripten-4-post-load-init.patch | 41 + 5 files changed, 1640 insertions(+), 1385 deletions(-) create mode 100644 workloads/sqlite3-wasm/emscripten-4-post-load-init.patch diff --git a/workloads/sqlite3-wasm/build.log b/workloads/sqlite3-wasm/build.log index c32b2204..085ca3e3 100644 --- a/workloads/sqlite3-wasm/build.log +++ b/workloads/sqlite3-wasm/build.log @@ -1,8 +1,8 @@ -Built on 2025-01-21T15:10:24Z +Built on 2026-10-28T21:51:11Z Toolchain versions -emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.73 (ac676d5e437525d15df5fd46bc2c208ec6d376a3) -wasm-strip 1.0.34 +emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 6.0.13 (e13ee988ce3d87a738dd8f3661d02223308c412a) +wasm-strip 1.0.36 Getting sources from https://sqlite.org/2025/sqlite-src-3480000.zip diff --git a/workloads/sqlite3-wasm/build.sh b/workloads/sqlite3-wasm/build.sh index 27c61423..2cc8acb0 100755 --- a/workloads/sqlite3-wasm/build.sh +++ b/workloads/sqlite3-wasm/build.sh @@ -25,9 +25,15 @@ unzip "$SQLITE_SRC_FILE" # Paths and information in make output could be sensitive, so don't save in log. echo "Building..." | tee -a "$BUILD_LOG" pushd sqlite-src-*/ +# SQLite 3.48.0's JS glue predates Emscripten 4.0's async MODULARIZE factory, +# see the patch description. Drop the patch when updating to SQLite >= 3.49.0. +patch -p1 -i ../emscripten-4-post-load-init.patch ./configure cd ext/wasm -make dist +# Emscripten 6.0.2 removed `wasmBinary` from the default INCOMING_MODULE_JS_API +# list, and setting the list replaces the default, so name every Module property +# that benchmark.js and the speedtest1 glue code pass in. +EMCC_CFLAGS="-sINCOMING_MODULE_JS_API=wasmBinary,print,printErr,preRun,postRun,noInitialRun" make dist popd echo "Copying files from sqlite-src-*/ext/wasm/ into build/" | tee -a "$BUILD_LOG" diff --git a/workloads/sqlite3-wasm/build/jswasm/speedtest1.js b/workloads/sqlite3-wasm/build/jswasm/speedtest1.js index 3d592baf..d505be51 100644 --- a/workloads/sqlite3-wasm/build/jswasm/speedtest1.js +++ b/workloads/sqlite3-wasm/build/jswasm/speedtest1.js @@ -28,19 +28,25 @@ ** ** SQLITE_VERSION "3.48.0" ** SQLITE_VERSION_NUMBER 3048000 -** SQLITE_SOURCE_ID "2025-01-14 11:05:00 d2fe6b05f38d9d7cd78c5d252e99ac59f1aea071d669830c1ffe4e8966e84010" +** SQLITE_SOURCE_ID "2025-01-14 11:05:00 d2fe6b05f38d9d7cd78c5d252e99ac59f1aea071d669830c1ffe4e8966e8alt1" ** -** Using the Emscripten SDK version 3.1.73. +** Using the Emscripten SDK version 6.0.13. */ +// This code implements the `-sMODULARIZE` settings by taking the generated +// JS program code (INNER_JS_CODE) and wrapping it in a factory function. +// Single threaded MINIMAL_RUNTIME programs do not need access to +// document.currentScript, so a simple export declaration is enough. var sqlite3InitModule = (() => { - var _scriptName = typeof document != 'undefined' ? document.currentScript?.src : undefined; - - return ( -function(moduleArg = {}) { - var moduleRtn; - + // When MODULARIZE this JS may be executed later, + // after document.currentScript is gone, so we save it. + // In EXPORT_ES6 mode we can just use 'import.meta.url'. + var _scriptName = globalThis.document?.currentScript?.src; + return async function(moduleArg = {}) { + var Module = moduleArg; // include: shell.js +// include: minimum_runtime_check.js +// end include: minimum_runtime_check.js // The Module object: Our interface to the outside world. We import // and export values on it. There are various ways Module can be used: // 1. Not defined. We create it here @@ -54,26 +60,18 @@ function(moduleArg = {}) { // after the generated code, you will need to define var Module = {}; // before the code. Then that object will be used in the code, and you // can continue to use Module afterwards as well. -var Module = moduleArg; - -// Set up the promise that indicates the Module is initialized -var readyPromiseResolve, readyPromiseReject; -var readyPromise = new Promise((resolve, reject) => { - readyPromiseResolve = resolve; - readyPromiseReject = reject; -}); // Determine the runtime environment we are in. You can customize this by // setting the ENVIRONMENT setting at compile time (see settings.js). -var ENVIRONMENT_IS_WEB = true; -var ENVIRONMENT_IS_WORKER = false; -var ENVIRONMENT_IS_NODE = false; -var ENVIRONMENT_IS_SHELL = false; +const ENVIRONMENT_IS_WEB = true; +const ENVIRONMENT_IS_WORKER = false; +const ENVIRONMENT_IS_NODE = false; +const ENVIRONMENT_IS_SHELL = false; // --pre-jses are emitted after the Module integration code, so that they can // refer to Module (if they choose; they can also define Module) -// include: /usr/local/google/home/dlehmann/JetStream/sqlite3/sqlite-src-3480000/ext/wasm/bld/pre-js.speedtest1-vanilla.js +// include: ./bld/pre-js.speedtest1-vanilla.js /** BEGIN FILE: api/pre-js.js @@ -132,17 +130,10 @@ Module['locateFile'] = function(path, prefix) { /* END FILE: api/pre-js.js, noting that the build process may add a line after this one to change the above .uri to a build-specific one. */ -// end include: /usr/local/google/home/dlehmann/JetStream/sqlite3/sqlite-src-3480000/ext/wasm/bld/pre-js.speedtest1-vanilla.js +// end include: ./bld/pre-js.speedtest1-vanilla.js -// Sometimes an existing Module object exists with properties -// meant to overwrite the default module functionality. Here -// we collect those properties and reapply _after_ we configure -// the current environment's defaults to avoid having to be so -// defensive during initialization. -var moduleOverrides = Object.assign({}, Module); - -var arguments_ = []; +var programArgs = []; var thisProgram = './this.program'; var quit_ = (status, toThrow) => { throw toThrow; @@ -151,9 +142,6 @@ var quit_ = (status, toThrow) => { // `/` should be present at the end if `scriptDirectory` is not empty var scriptDirectory = ''; function locateFile(path) { - if (Module['locateFile']) { - return Module['locateFile'](path, scriptDirectory); - } return scriptDirectory + path; } @@ -164,38 +152,21 @@ var readAsync, readBinary; // Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and // ENVIRONMENT_IS_NODE. if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { - if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled - scriptDirectory = self.location.href; - } else if (typeof document != 'undefined' && document.currentScript) { // web - scriptDirectory = document.currentScript.src; - } - // When MODULARIZE, this JS may be executed later, after document.currentScript - // is gone, so we saved it, and we use it here instead of any other info. - if (_scriptName) { - scriptDirectory = _scriptName; - } - // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. - // otherwise, slice off the final part of the url to find the script directory. - // if scriptDirectory does not contain a slash, lastIndexOf will return -1, - // and scriptDirectory will correctly be replaced with an empty string. - // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), - // they are removed because they could contain a slash. - if (scriptDirectory.startsWith('blob:')) { - scriptDirectory = ''; - } else { - scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1); + try { + scriptDirectory = new URL('.', _scriptName).href; // includes trailing slash + } catch { + // Must be a `blob:` or `data:` URL (e.g. `blob:http://site.com/etc/etc`), we cannot + // infer anything from them. } { // include: web_or_worker_shell_read.js -readAsync = (url) => { - return fetch(url, { credentials: 'same-origin' }) - .then((response) => { - if (response.ok) { - return response.arrayBuffer(); - } - return Promise.reject(new Error(response.status + ' : ' + response.url)); - }) +readAsync = async (url) => { + var response = await fetch(url, { credentials: 'same-origin' }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + ' : ' + response.url); }; // end include: web_or_worker_shell_read.js } @@ -203,25 +174,9 @@ readAsync = (url) => { { } -var out = Module['print'] || console.log.bind(console); -var err = Module['printErr'] || console.error.bind(console); - -// Merge back in the overrides -Object.assign(Module, moduleOverrides); -// Free the object hierarchy contained in the overrides, this lets the GC -// reclaim data used. -moduleOverrides = null; - -// Emit code to handle expected values on the Module object. This applies Module.x -// to the proper local x. This has two benefits: first, we only emit it if it is -// expected to arrive, and second, by using a local everywhere else that can be -// minified. +var out = console.log.bind(console); +var err = console.error.bind(console); -if (Module['arguments']) arguments_ = Module['arguments']; - -if (Module['thisProgram']) thisProgram = Module['thisProgram']; - -// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message // end include: shell.js // include: preamble.js @@ -235,12 +190,10 @@ if (Module['thisProgram']) thisProgram = Module['thisProgram']; // An online HTML version (which may be of a different version of Emscripten) // is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html -var wasmBinary = Module['wasmBinary']; +var wasmBinary; // Wasm globals -var wasmMemory; - //======================================== // Runtime essentials //======================================== @@ -250,7 +203,7 @@ var wasmMemory; var ABORT = false; // set by exit() and abort(). Passed to 'onExit' handler. -// NOTE: This is also used as the process return code code in shell environments +// NOTE: This is also used as the process return code in shell environments // but only when noExitRuntime is false. var EXITSTATUS; @@ -268,161 +221,100 @@ function assert(condition, text) { } } -// Memory management - -var HEAP, -/** @type {!Int8Array} */ - HEAP8, -/** @type {!Uint8Array} */ - HEAPU8, -/** @type {!Int16Array} */ - HEAP16, -/** @type {!Uint16Array} */ - HEAPU16, -/** @type {!Int32Array} */ - HEAP32, -/** @type {!Uint32Array} */ - HEAPU32, -/** @type {!Float32Array} */ - HEAPF32, -/* BigInt64Array type is not correctly defined in closure -/** not-@type {!BigInt64Array} */ - HEAP64, -/* BigUint64Array type is not correctly defined in closure -/** not-t@type {!BigUint64Array} */ - HEAPU64, -/** @type {!Float64Array} */ - HEAPF64; - -// include: runtime_shared.js -function updateMemoryViews() { - var b = wasmMemory.buffer; - Module['HEAP8'] = HEAP8 = new Int8Array(b); - Module['HEAP16'] = HEAP16 = new Int16Array(b); - Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); - Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); - Module['HEAP32'] = HEAP32 = new Int32Array(b); - Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); - Module['HEAPF32'] = HEAPF32 = new Float32Array(b); - Module['HEAPF64'] = HEAPF64 = new Float64Array(b); - Module['HEAP64'] = HEAP64 = new BigInt64Array(b); - Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b); -} - -// end include: runtime_shared.js -// include: runtime_stack_check.js -// end include: runtime_stack_check.js -var __ATPRERUN__ = []; // functions called before the runtime is initialized -var __ATINIT__ = []; // functions called during startup -var __ATEXIT__ = []; // functions called during shutdown -var __ATPOSTRUN__ = []; // functions called after the main() is called - -var runtimeInitialized = false; - -function preRun() { - if (Module['preRun']) { - if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; - while (Module['preRun'].length) { - addOnPreRun(Module['preRun'].shift()); - } - } - callRuntimeCallbacks(__ATPRERUN__); -} - -function initRuntime() { - runtimeInitialized = true; +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); - -if (!Module['noFSInit'] && !FS.initialized) - FS.init(); -FS.ignorePermissions = false; +// include: runtime_common.js +// include: runtime_exceptions.js +// Base Emscripten EH error class +class EmscriptenEH {} -TTY.init(); - callRuntimeCallbacks(__ATINIT__); -} +class EmscriptenSjLj extends EmscriptenEH {} -function postRun() { +// end include: runtime_exceptions.js +// include: runtime_debug.js +// end include: runtime_debug.js +// Memory management - if (Module['postRun']) { - if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; - while (Module['postRun'].length) { - addOnPostRun(Module['postRun'].shift()); - } - } +var runtimeInitialized = false; - callRuntimeCallbacks(__ATPOSTRUN__); -} -function addOnPreRun(cb) { - __ATPRERUN__.unshift(cb); -} -function addOnInit(cb) { - __ATINIT__.unshift(cb); +// When ALLOW_MEMORY_GROWTH is enabled, the conversion from Wasm +// memory to ArrayBuffer requires some additional logic. +function getMemoryBuffer() { + return wasmMemory.buffer; } -function addOnExit(cb) { +function updateMemoryViews() { + // If we already have a heap that is resizeable/growable buffer we don't + // need to do anything in updateMemoryViews. + if (HEAP8?.buffer?.resizable) return; + var b = getMemoryBuffer(); + HEAP8 = new Int8Array(b); + HEAP16 = new Int16Array(b); + HEAPU8 = new Uint8Array(b); + + HEAP32 = new Int32Array(b); + HEAPU32 = new Uint32Array(b); + HEAPF32 = new Float32Array(b); + HEAPF64 = new Float64Array(b); + HEAP64 = new BigInt64Array(b); + HEAPU64 = new BigUint64Array(b); } -function addOnPostRun(cb) { - __ATPOSTRUN__.unshift(cb); +// include: memoryprofiler.js +// end include: memoryprofiler.js +// end include: runtime_common.js +function preRun() { + var preRun = Module['preRun']; + if (preRun) { + if (typeof preRun === 'function') preRun = [preRun]; + onPreRuns.push(...preRun); + } + // Begin ATPRERUNS hooks + callRuntimeCallbacks(onPreRuns); + // End ATPRERUNS hooks } -// include: runtime_math.js -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32 - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc - -// end include: runtime_math.js -// A counter of dependencies for calling run(). If we need to -// do asynchronous work before running, increment this and -// decrement it. Incrementing must happen in a place like -// Module.preRun (used by emcc to add file preloading). -// Note that you can add dependencies in preRun, even though -// it happens right before run - run will be postponed until -// the dependencies are met. -var runDependencies = 0; -var runDependencyWatcher = null; -var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +function initRuntime() { + runtimeInitialized = true; -function getUniqueRunDependency(id) { - return id; -} + // Begin ATINITS hooks + if (!Module['noFSInit'] && !FS.initialized) FS.init(); +TTY.init(); + // End ATINITS hooks -function addRunDependency(id) { - runDependencies++; + wasmExports['__wasm_call_ctors'](); - Module['monitorRunDependencies']?.(runDependencies); + // Begin ATPOSTCTORS hooks + FS.ignorePermissions = false; + // End ATPOSTCTORS hooks } -function removeRunDependency(id) { - runDependencies--; - - Module['monitorRunDependencies']?.(runDependencies); +function postRun() { - if (runDependencies == 0) { - if (runDependencyWatcher !== null) { - clearInterval(runDependencyWatcher); - runDependencyWatcher = null; - } - if (dependenciesFulfilled) { - var callback = dependenciesFulfilled; - dependenciesFulfilled = null; - callback(); // can add another dependenciesFulfilled - } + var postRun = Module['postRun']; + if (postRun) { + if (typeof postRun === 'function') postRun = [postRun]; + onPostRuns.push(...postRun); } + + // Begin ATPOSTRUNS hooks + callRuntimeCallbacks(onPostRuns); + // End ATPOSTRUNS hooks } -/** @param {string|number=} what */ +/** + * @param {string|number=} what + */ function abort(what) { - Module['onAbort']?.(what); - what = 'Aborted(' + what + ')'; + what = `Aborted(${what})`; // TODO(sbc): Should we remove printing and leave it up to whoever // catches the exception? err(what); @@ -439,51 +331,15 @@ function abort(what) { // a trap or not based on a hidden field within the object. So at the moment // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that // allows this in the wasm spec. - - // Suppress closure compiler warning here. Closure compiler's builtin extern - // definition for WebAssembly.RuntimeError claims it takes no arguments even - // though it can. - // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. - /** @suppress {checkTypes} */ - var e = new WebAssembly.RuntimeError(what); - - readyPromiseReject(e); - // Throw the error whether or not MODULARIZE is set because abort is used - // in code paths apart from instantiation where an exception is expected - // to be thrown when abort is called. - throw e; + throw new WebAssembly.RuntimeError(what); } -// include: memoryprofiler.js -// end include: memoryprofiler.js -// include: URIUtils.js -// Prefix of data URIs emitted by SINGLE_FILE and related options. -var dataURIPrefix = 'data:application/octet-stream;base64,'; - -/** - * Indicates whether filename is a base64 data URI. - * @noinline - */ -var isDataURI = (filename) => filename.startsWith(dataURIPrefix); +var wasmBinaryFile; -/** - * Indicates whether filename is delivered via file protocol (as opposed to http/https) - * @noinline - */ -var isFileURI = (filename) => filename.startsWith('file://'); -// end include: URIUtils.js -// include: runtime_exceptions.js -// end include: runtime_exceptions.js function findWasmBinary() { - var f = 'speedtest1.wasm'; - if (!isDataURI(f)) { - return locateFile(f); - } - return f; + return locateFile('speedtest1.wasm'); } -var wasmBinaryFile; - function getBinarySync(file) { if (file == wasmBinaryFile && wasmBinary) { return new Uint8Array(wasmBinary); @@ -491,93 +347,81 @@ function getBinarySync(file) { if (readBinary) { return readBinary(file); } + // Throwing a plain string here, even though it not normally advisable since + // this gets turning into an `abort` in instantiateArrayBuffer. throw 'both async and sync fetching of the wasm failed'; } -function getBinaryPromise(binaryFile) { +async function getWasmBinary(binaryFile) { // If we don't have the binary yet, load it asynchronously using readAsync. - if (!wasmBinary - ) { + if (!wasmBinary) { // Fetch the binary using readAsync - return readAsync(binaryFile).then( - (response) => new Uint8Array(/** @type{!ArrayBuffer} */(response)), - // Fall back to getBinarySync if readAsync fails - () => getBinarySync(binaryFile) - ); + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + // Fall back to getBinarySync below; + } } // Otherwise, getBinarySync should be able to get it synchronously - return Promise.resolve().then(() => getBinarySync(binaryFile)); + return getBinarySync(binaryFile); } -function instantiateArrayBuffer(binaryFile, imports, receiver) { - return getBinaryPromise(binaryFile).then((binary) => { - return WebAssembly.instantiate(binary, imports); - }).then(receiver, (reason) => { +async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary = await getWasmBinary(binaryFile); + var instance = await WebAssembly.instantiate(binary, imports); + return instance; + } catch (reason) { err(`failed to asynchronously prepare wasm: ${reason}`); abort(reason); - }); + } } -function instantiateAsync(binary, binaryFile, imports, callback) { - if (!binary && - typeof WebAssembly.instantiateStreaming == 'function' && - !isDataURI(binaryFile) && - typeof fetch == 'function') { - return fetch(binaryFile, { credentials: 'same-origin' }).then((response) => { - // Suppress closure warning here since the upstream definition for - // instantiateStreaming only allows Promise rather than - // an actual Response. - // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure is fixed. - /** @suppress {checkTypes} */ - var result = WebAssembly.instantiateStreaming(response, imports); - - return result.then( - callback, - function(reason) { - // We expect the most common failure cause to be a bad MIME type for the binary, - // in which case falling back to ArrayBuffer instantiation should work. - err(`wasm streaming compile failed: ${reason}`); - err('falling back to ArrayBuffer instantiation'); - return instantiateArrayBuffer(binaryFile, imports, callback); - }); - }); +async function instantiateAsync(binary, binaryFile, imports) { + if (!binary + ) { + try { + var response = fetch(binaryFile, { credentials: 'same-origin' }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + // fall back of instantiateArrayBuffer below + }; } - return instantiateArrayBuffer(binaryFile, imports, callback); + return instantiateArrayBuffer(binaryFile, imports); } function getWasmImports() { // prepare imports - return { + var imports = { 'env': wasmImports, 'wasi_snapshot_preview1': wasmImports, - } + }; + return imports; } // Create the wasm instance. // Receives the wasm imports, returns the exports. -function createWasm() { +async function createWasm() { // Load the wasm module and create an instance of using native support in the JS engine. // handle a generated wasm instance, receiving its exports and // performing other necessary setup - /** @param {WebAssembly.Module=} module*/ - function receiveInstance(instance, module) { + function receiveInstance(instance) { wasmExports = instance.exports; - + assignWasmExports(wasmExports); - wasmMemory = wasmExports['memory']; - Module['wasmMemory'] = wasmMemory; updateMemoryViews(); - addOnInit(wasmExports['__wasm_call_ctors']); - - removeRunDependency('wasm-instantiate'); return wasmExports; } - // wait for the pthread pool (if any) - addRunDependency('wasm-instantiate'); // Prefer streaming instantiation if available. function receiveInstantiationResult(result) { @@ -585,39 +429,21 @@ function createWasm() { // receiveInstance() will swap in the exports (to Module.asm) so they can be called // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. // When the regression is fixed, can restore the above PTHREADS-enabled path. - receiveInstance(result['instance']); + return receiveInstance(result['instance']); } var info = getWasmImports(); - // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback - // to manually instantiate the Wasm module themselves. This allows pages to - // run the instantiation parallel to any other async startup actions they are - // performing. - // Also pthreads and wasm workers initialize the wasm instance through this - // path. - if (Module['instantiateWasm']) { - try { - return Module['instantiateWasm'](info, receiveInstance); - } catch(e) { - err(`Module.instantiateWasm callback failed with error: ${e}`); - // If instantiation fails, reject the module ready promise. - readyPromiseReject(e); - } - } - wasmBinaryFile ??= findWasmBinary(); - - // If instantiation fails, reject the module ready promise. - instantiateAsync(wasmBinary, wasmBinaryFile, info, receiveInstantiationResult).catch(readyPromiseReject); - return {}; // no exports yet; we'll fill them in later + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); + var exports = receiveInstantiationResult(result); + return exports; } -// include: runtime_debug.js -// end include: runtime_debug.js -// === Body === // end include: preamble.js +// Begin JS library code + class ExitStatus { name = 'ExitStatus'; @@ -627,130 +453,69 @@ function createWasm() { } } + /** @type {!Int8Array} */ + var HEAP8; + var callRuntimeCallbacks = (callbacks) => { while (callbacks.length > 0) { // Pass the module as the first argument. callbacks.shift()(Module); } }; + var onPostRuns = []; + var addOnPostRun = (cb) => onPostRuns.push(cb); - - /** - * @param {number} ptr - * @param {string} type - */ - function getValue(ptr, type = 'i8') { - if (type.endsWith('*')) type = '*'; - switch (type) { - case 'i1': return HEAP8[ptr]; - case 'i8': return HEAP8[ptr]; - case 'i16': return HEAP16[((ptr)>>1)]; - case 'i32': return HEAP32[((ptr)>>2)]; - case 'i64': return HEAP64[((ptr)>>3)]; - case 'float': return HEAPF32[((ptr)>>2)]; - case 'double': return HEAPF64[((ptr)>>3)]; - case '*': return HEAPU32[((ptr)>>2)]; - default: abort(`invalid type for getValue: ${type}`); - } - } - - var noExitRuntime = Module['noExitRuntime'] || true; + var onPreRuns = []; + var addOnPreRun = (cb) => onPreRuns.push(cb); - - /** - * @param {number} ptr - * @param {number} value - * @param {string} type - */ - function setValue(ptr, value, type = 'i8') { - if (type.endsWith('*')) type = '*'; - switch (type) { - case 'i1': HEAP8[ptr] = value; break; - case 'i8': HEAP8[ptr] = value; break; - case 'i16': HEAP16[((ptr)>>1)] = value; break; - case 'i32': HEAP32[((ptr)>>2)] = value; break; - case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; - case 'float': HEAPF32[((ptr)>>2)] = value; break; - case 'double': HEAPF64[((ptr)>>3)] = value; break; - case '*': HEAPU32[((ptr)>>2)] = value; break; - default: abort(`invalid type for setValue: ${type}`); - } - } var stackRestore = (val) => __emscripten_stack_restore(val); var stackSave = () => _emscripten_stack_get_current(); - var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder() : undefined; + + + var UTF8Decoder = new TextDecoder(); + /** - * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given - * array that contains uint8 values, returns a copy of that string as a - * Javascript String object. - * heapOrArray is either a regular array, or a JavaScript typed array view. - * @param {number=} idx - * @param {number=} maxBytesToRead - * @return {string} - */ - var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => { - var endIdx = idx + maxBytesToRead; - var endPtr = idx; + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number} idx + * @param {number=} maxBytesToRead + * @param {boolean=} ignoreNul + * @return {number} + */ + var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => { + var maxIdx = idx + maxBytesToRead; + if (ignoreNul) return maxIdx; // TextDecoder needs to know the byte length in advance, it doesn't stop on - // null terminator by itself. Also, use the length info to avoid running tiny - // strings through TextDecoder, since .subarray() allocates garbage. - // (As a tiny code save trick, compare endPtr against endIdx using a negation, - // so that undefined/NaN means Infinity) - while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; - - if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { - return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); - } - var str = ''; - // If building with TextDecoder, we have already computed the string length - // above, so test loop end condition against that - while (idx < endPtr) { - // For UTF8 byte structure, see: - // http://en.wikipedia.org/wiki/UTF-8#Description - // https://www.ietf.org/rfc/rfc2279.txt - // https://tools.ietf.org/html/rfc3629 - var u0 = heapOrArray[idx++]; - if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } - var u1 = heapOrArray[idx++] & 63; - if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } - var u2 = heapOrArray[idx++] & 63; - if ((u0 & 0xF0) == 0xE0) { - u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; - } else { - u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); - } - - if (u0 < 0x10000) { - str += String.fromCharCode(u0); - } else { - var ch = u0 - 0x10000; - str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); - } - } - return str; + // null terminator by itself. + // As a tiny code save trick, compare idx against maxIdx using a negation, + // so that maxBytesToRead=undefined/NaN means Infinity. + while (heapOrArray[idx] && !(idx >= maxIdx)) ++idx; + return idx; }; + /** @type {!Uint8Array} */ + var HEAPU8; + /** - * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the - * emscripten HEAP, returns a copy of that string as a Javascript String object. - * - * @param {number} ptr - * @param {number=} maxBytesToRead - An optional length that specifies the - * maximum number of bytes to read. You can omit this parameter to scan the - * string until the first 0 byte. If maxBytesToRead is passed, and the string - * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the - * string will cut short at that byte index (i.e. maxBytesToRead will not - * produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing - * frequent uses of UTF8ToString() with and without maxBytesToRead may throw - * JS JIT optimizations off, so it is worth to consider consistently using one - * @return {string} - */ - var UTF8ToString = (ptr, maxBytesToRead) => { - return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; + * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the + * emscripten HEAP, returns a copy of that string as a Javascript String object. + * + * @param {number} ptr + * @param {number=} maxBytesToRead - An optional length that specifies the + * maximum number of bytes to read. You can omit this parameter to scan the + * string until the first 0 byte. If maxBytesToRead is passed, and the string + * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the + * string will cut short at that byte index. + * @param {boolean=} ignoreNul - If true, the function will not stop on a NUL character. + * @return {string} + */ + var UTF8ToString = (ptr, maxBytesToRead, ignoreNul) => { + if (!ptr) return ''; + var end = findStringEnd(HEAPU8, ptr, maxBytesToRead, ignoreNul); + return UTF8Decoder.decode(HEAPU8.subarray(ptr, end)); }; var ___assert_fail = (condition, filename, line, func) => abort(`Assertion failed: ${UTF8ToString(condition)}, at: ` + [filename ? UTF8ToString(filename) : 'unknown filename', line, func ? UTF8ToString(func) : 'unknown function']); @@ -786,7 +551,7 @@ function createWasm() { }, normalize:(path) => { var isAbsolute = PATH.isAbs(path), - trailingSlash = path.substr(-1) === '/'; + trailingSlash = path.slice(-1) === '/'; // Normalize the path path = PATH.normalizeArray(path.split('/').filter((p) => !!p), !isAbsolute).join('/'); if (!path && !isAbsolute) { @@ -807,93 +572,96 @@ function createWasm() { } if (dir) { // It has a dirname, strip trailing slash - dir = dir.substr(0, dir.length - 1); + dir = dir.slice(0, -1); } return root + dir; }, - basename:(path) => { - // EMSCRIPTEN return '/'' for '/', not an empty string - if (path === '/') return '/'; - path = PATH.normalize(path); - path = path.replace(/\/$/, ""); - var lastSlash = path.lastIndexOf('/'); - if (lastSlash === -1) return path; - return path.substr(lastSlash+1); - }, - join:(...paths) => PATH.normalize(paths.join('/')), - join2:(l, r) => PATH.normalize(l + '/' + r), + basename:(path) => path && path.match(/([^\/]+|\/)\/*$/)[1], +join:(...paths) => PATH.normalize(paths.join('/')), +join2:(l, r) => PATH.normalize(l + '/' + r), +}; + +var initRandomFill = () => { + + return (view) => (crypto.getRandomValues(view), 0); }; - - var initRandomFill = () => { - if (typeof crypto == 'object' && typeof crypto['getRandomValues'] == 'function') { - // for modern web browsers - return (view) => crypto.getRandomValues(view); - } else - // we couldn't find a proper implementation, as Math.random() is not suitable for /dev/random, see emscripten-core/emscripten/pull/7096 - abort('initRandomDevice'); - }; - var randomFill = (view) => { - // Lazily init on the first invocation. - return (randomFill = initRandomFill())(view); - }; - - - - var PATH_FS = { - resolve:(...args) => { - var resolvedPath = '', - resolvedAbsolute = false; - for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) { - var path = (i >= 0) ? args[i] : FS.cwd(); - // Skip empty and invalid entries - if (typeof path != 'string') { - throw new TypeError('Arguments to path.resolve must be strings'); - } else if (!path) { - return ''; // an invalid portion invalidates the whole thing - } - resolvedPath = path + '/' + resolvedPath; - resolvedAbsolute = PATH.isAbs(path); - } - // At this point the path should be resolved to a full absolute path, but - // handle relative paths to be safe (might happen when process.cwd() fails) - resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter((p) => !!p), !resolvedAbsolute).join('/'); - return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; - }, - relative:(from, to) => { - from = PATH_FS.resolve(from).substr(1); - to = PATH_FS.resolve(to).substr(1); - function trim(arr) { - var start = 0; - for (; start < arr.length; start++) { - if (arr[start] !== '') break; - } - var end = arr.length - 1; - for (; end >= 0; end--) { - if (arr[end] !== '') break; - } - if (start > end) return []; - return arr.slice(start, end - start + 1); - } - var fromParts = trim(from.split('/')); - var toParts = trim(to.split('/')); - var length = Math.min(fromParts.length, toParts.length); - var samePartsLength = length; - for (var i = 0; i < length; i++) { - if (fromParts[i] !== toParts[i]) { - samePartsLength = i; - break; - } +var randomFill = (view) => (randomFill = initRandomFill())(view); + + + +var PATH_FS = { +resolve:(...args) => { + var resolvedPath = '', + resolvedAbsolute = false; + for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? args[i] : FS.cwd(); + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + return ''; // an invalid portion invalidates the whole thing } - var outputParts = []; - for (var i = samePartsLength; i < fromParts.length; i++) { - outputParts.push('..'); + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = PATH.isAbs(path); + } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter((p) => !!p), !resolvedAbsolute).join('/'); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; + }, +relative:(from, to) => { + from = PATH_FS.resolve(from).slice(1); + to = PATH_FS.resolve(to).slice(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; } - outputParts = outputParts.concat(toParts.slice(samePartsLength)); - return outputParts.join('/'); - }, - }; + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); + }, +}; + + + + + /** + * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given + * array that contains uint8 values, returns a copy of that string as a + * Javascript String object. + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number=} idx + * @param {number=} maxBytesToRead + * @param {boolean=} ignoreNul - If true, the function will not stop on a NUL character. + * @return {string} + */ + var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead, ignoreNul) => { + var endPtr = findStringEnd(heapOrArray, idx, maxBytesToRead, ignoreNul); + return UTF8Decoder.decode(heapOrArray.buffer ? heapOrArray.subarray(idx, endPtr) : new Uint8Array(heapOrArray.slice(idx, endPtr))); + }; var FS_stdin_getChar_buffer = []; @@ -927,18 +695,10 @@ function createWasm() { var startIdx = outIdx; var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. for (var i = 0; i < str.length; ++i) { - // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code - // unit, not a Unicode code point of the character! So decode - // UTF16->UTF32->UTF8. - // See http://unicode.org/faq/utf_bom.html#utf16-3 // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description // and https://www.ietf.org/rfc/rfc2279.txt // and https://tools.ietf.org/html/rfc3629 - var u = str.charCodeAt(i); // possibly a lead surrogate - if (u >= 0xD800 && u <= 0xDFFF) { - var u1 = str.charCodeAt(++i); - u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); - } + var u = str.codePointAt(i); if (u <= 0x7F) { if (outIdx >= endIdx) break; heap[outIdx++] = u; @@ -957,6 +717,9 @@ function createWasm() { heap[outIdx++] = 0x80 | ((u >> 12) & 63); heap[outIdx++] = 0x80 | ((u >> 6) & 63); heap[outIdx++] = 0x80 | (u & 63); + // Gotcha: if codePoint is over 0xFFFF, it is represented as a surrogate pair in UTF-16. + // We need to manually skip over the second code unit for correct iteration. + i++; } } // Null-terminate the pointer to the buffer. @@ -964,18 +727,17 @@ function createWasm() { return outIdx - startIdx; }; /** @type {function(string, boolean=, number=)} */ - 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 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 FS_stdin_getChar = () => { if (!FS_stdin_getChar_buffer.length) { var result = null; - if (typeof window != 'undefined' && - typeof window.prompt == 'function') { + if (globalThis.window?.prompt) { // Browser. result = window.prompt('Input: '); // returns null on cancel if (result !== null) { @@ -1045,15 +807,18 @@ function createWasm() { } catch (e) { throw new FS.ErrnoError(29); } - if (result === undefined && bytesRead === 0) { + if (result === undefined && !bytesRead) { throw new FS.ErrnoError(6); } if (result === null || result === undefined) break; bytesRead++; buffer[offset+i] = result; + // We currently only support canonical mode (ICANON), where + // read(2) returns as soon as a line delimiter is read. + if (result === 10) break; } if (bytesRead) { - stream.node.timestamp = Date.now(); + stream.node.atime = Date.now(); } return bytesRead; }, @@ -1069,7 +834,7 @@ function createWasm() { throw new FS.ErrnoError(29); } if (length) { - stream.node.timestamp = Date.now(); + stream.node.mtime = stream.node.ctime = Date.now(); } return i; }, @@ -1087,7 +852,7 @@ function createWasm() { } }, fsync(tty) { - if (tty.output && tty.output.length > 0) { + if (tty.output?.length > 0) { out(UTF8ArrayToString(tty.output)); tty.output = []; } @@ -1124,7 +889,7 @@ function createWasm() { } }, fsync(tty) { - if (tty.output && tty.output.length > 0) { + if (tty.output?.length > 0) { err(UTF8ArrayToString(tty.output)); tty.output = []; } @@ -1133,9 +898,7 @@ function createWasm() { }; - var zeroMemory = (address, size) => { - HEAPU8.fill(0, address, address + size); - }; + var zeroMemory = (ptr, size) => HEAPU8.fill(0, ptr, ptr + size); var alignMemory = (size, alignment) => { return Math.ceil(size / alignment) * alignment; @@ -1146,14 +909,15 @@ function createWasm() { if (ptr) zeroMemory(ptr, size); return ptr; }; + var MEMFS = { ops_table:null, mount(mount) { return MEMFS.createNode(null, '/', 16895, 0); }, - createNode(parent, name, mode, dev) { + createNode(parent, name, mode, dev = undefined) { if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { - // no supported + // not supported throw new FS.ErrnoError(63); } MEMFS.ops_table ||= { @@ -1182,7 +946,6 @@ function createWasm() { llseek: MEMFS.stream_ops.llseek, read: MEMFS.stream_ops.read, write: MEMFS.stream_ops.write, - allocate: MEMFS.stream_ops.allocate, mmap: MEMFS.stream_ops.mmap, msync: MEMFS.stream_ops.msync } @@ -1211,11 +974,14 @@ function createWasm() { } else if (FS.isFile(node.mode)) { node.node_ops = MEMFS.ops_table.file.node; node.stream_ops = MEMFS.ops_table.file.stream; - node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity. - // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred - // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size - // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme. - node.contents = null; + // The actual number of bytes used in the typed array, as opposed to + // contents.length which gives the whole capacity. + node.usedBytes = 0; + // The byte data of the file is stored in a typed array. + // Note: typed arrays are not resizable like normal JS arrays are, so + // there is a small penalty involved for appending file writes that + // continuously grow a file similar to std::vector capacity vs used. + node.contents = MEMFS.emptyFileContents ??= new Uint8Array(0); } else if (FS.isLink(node.mode)) { node.node_ops = MEMFS.ops_table.link.node; node.stream_ops = MEMFS.ops_table.link.stream; @@ -1223,45 +989,38 @@ function createWasm() { node.node_ops = MEMFS.ops_table.chrdev.node; node.stream_ops = MEMFS.ops_table.chrdev.stream; } - node.timestamp = Date.now(); + node.atime = node.mtime = node.ctime = Date.now(); // add the new node to the parent if (parent) { parent.contents[name] = node; - parent.timestamp = node.timestamp; + parent.atime = parent.mtime = parent.ctime = node.atime; } return node; }, getFileDataAsTypedArray(node) { - if (!node.contents) return new Uint8Array(0); - if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. - return new Uint8Array(node.contents); + return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. }, expandFileStorage(node, newCapacity) { - var prevCapacity = node.contents ? node.contents.length : 0; + var prevCapacity = node.contents.length; if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough. - // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity. - // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to - // avoid overshooting the allocation cap by a very large margin. - var CAPACITY_DOUBLING_MAX = 1024 * 1024; + // Don't expand strictly to the given requested limit if it's only a very + // small increase, but instead geometrically grow capacity. + // For small filesizes (<1MB), perform size*2 geometric increase, but for + // large sizes, do a much more conservative size*1.125 increase to avoid + // overshooting the allocation cap by a very large margin. + const CAPACITY_DOUBLING_MAX = 1024 * 1024; newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0); - if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. - var oldContents = node.contents; + if (prevCapacity) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. + var oldContents = MEMFS.getFileDataAsTypedArray(node); node.contents = new Uint8Array(newCapacity); // Allocate new storage. - if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage. + node.contents.set(oldContents); }, resizeFileStorage(node, newSize) { if (node.usedBytes == newSize) return; - if (newSize == 0) { - node.contents = null; // Fully decommit when requesting a resize to zero. - node.usedBytes = 0; - } else { - var oldContents = node.contents; - node.contents = new Uint8Array(newSize); // Allocate new storage. - if (oldContents) { - node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage. - } - node.usedBytes = newSize; - } + var oldContents = node.contents; + node.contents = new Uint8Array(newSize); // Allocate new storage. + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage. + node.usedBytes = newSize; }, node_ops:{ getattr(node) { @@ -1283,9 +1042,9 @@ function createWasm() { } else { attr.size = 0; } - attr.atime = new Date(node.timestamp); - attr.mtime = new Date(node.timestamp); - attr.ctime = new Date(node.timestamp); + attr.atime = new Date(node.atime); + attr.mtime = new Date(node.mtime); + attr.ctime = new Date(node.ctime); // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), // but this is not required by the standard. attr.blksize = 4096; @@ -1293,46 +1052,48 @@ function createWasm() { return attr; }, setattr(node, attr) { - if (attr.mode !== undefined) { - node.mode = attr.mode; - } - if (attr.timestamp !== undefined) { - node.timestamp = attr.timestamp; + for (const key of ['mode', 'atime', 'mtime', 'ctime']) { + if (attr[key] != null) { + node[key] = attr[key]; + } } if (attr.size !== undefined) { MEMFS.resizeFileStorage(node, attr.size); } }, lookup(parent, name) { + // This error may happen quite a bit. To avoid overhead we reuse it (and + // suffer a lack of stack info). + if (!MEMFS.doesNotExistError) { + MEMFS.doesNotExistError = new FS.ErrnoError(44); + /** @suppress {checkTypes} */ + MEMFS.doesNotExistError.stack = ''; + } throw MEMFS.doesNotExistError; }, - mknod(parent, name, mode, dev) { + mknod(parent, name, mode, dev = undefined) { return MEMFS.createNode(parent, name, mode, dev); }, rename(old_node, new_dir, new_name) { - // if we're overwriting a directory at new_name, make sure it's empty. - if (FS.isDir(old_node.mode)) { - var new_node; - try { - new_node = FS.lookupNode(new_dir, new_name); - } catch (e) { - } - if (new_node) { - for (var i in new_node.contents) { - throw new FS.ErrnoError(55); - } + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) {} + if (new_node && FS.isDir(old_node.mode)) { + // if we're overwriting a directory at new_name, make sure it's empty. + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); } } // do the internal rewiring delete old_node.parent.contents[old_node.name]; - old_node.parent.timestamp = Date.now() - old_node.name = new_name; new_dir.contents[new_name] = old_node; - new_dir.timestamp = old_node.parent.timestamp; + old_node.name = new_name; + new_dir.ctime = new_dir.mtime = old_node.parent.ctime = old_node.parent.mtime = Date.now(); }, unlink(parent, name) { delete parent.contents[name]; - parent.timestamp = Date.now(); + parent.ctime = parent.mtime = Date.now(); }, rmdir(parent, name) { var node = FS.lookupNode(parent, name); @@ -1340,14 +1101,10 @@ function createWasm() { throw new FS.ErrnoError(55); } delete parent.contents[name]; - parent.timestamp = Date.now(); + parent.ctime = parent.mtime = Date.now(); }, readdir(node) { - var entries = ['.', '..']; - for (var key of Object.keys(node.contents)) { - entries.push(key); - } - return entries; + return ['.', '..', ...Object.keys(node.contents)]; }, symlink(parent, newname, oldpath) { var node = MEMFS.createNode(parent, newname, 0o777 | 40960, 0); @@ -1366,52 +1123,34 @@ function createWasm() { var contents = stream.node.contents; if (position >= stream.node.usedBytes) return 0; var size = Math.min(stream.node.usedBytes - position, length); - if (size > 8 && contents.subarray) { // non-trivial, and typed array - buffer.set(contents.subarray(position, position + size), offset); - } else { - for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; - } + buffer.set(contents.subarray(position, position + size), offset); return size; }, write(stream, buffer, offset, length, position, canOwn) { // If the buffer is located in main memory (HEAP), and if // memory can grow, we can't hold on to references of the // memory buffer, as they may get invalidated. That means we - // need to do copy its contents. + // need to copy its contents. if (buffer.buffer === HEAP8.buffer) { canOwn = false; } if (!length) return 0; var node = stream.node; - node.timestamp = Date.now(); - - if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array? - if (canOwn) { - node.contents = buffer.subarray(offset, offset + length); - node.usedBytes = length; - return length; - } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. - node.contents = buffer.slice(offset, offset + length); - node.usedBytes = length; - return length; - } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file? - node.contents.set(buffer.subarray(offset, offset + length), position); - return length; - } - } + node.mtime = node.ctime = Date.now(); - // Appending to an existing file and we need to reallocate, or source data did not come as a typed array. - MEMFS.expandFileStorage(node, position+length); - if (node.contents.subarray && buffer.subarray) { + if (canOwn) { + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + } else if (!node.usedBytes && !position) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + node.contents = buffer.slice(offset, offset + length); + node.usedBytes = length; + } else { + MEMFS.expandFileStorage(node, position+length); // Use typed array write which is available. node.contents.set(buffer.subarray(offset, offset + length), position); - } else { - for (var i = 0; i < length; i++) { - node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not. - } + node.usedBytes = Math.max(node.usedBytes, position + length); } - node.usedBytes = Math.max(node.usedBytes, position + length); return length; }, llseek(stream, offset, whence) { @@ -1428,10 +1167,6 @@ function createWasm() { } return position; }, - allocate(stream, offset, length) { - MEMFS.expandFileStorage(stream.node, offset + length); - stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length); - }, mmap(stream, length, position, prot, flags) { if (!FS.isFile(stream.node.mode)) { throw new FS.ErrnoError(43); @@ -1440,7 +1175,7 @@ function createWasm() { var allocated; var contents = stream.node.contents; // Only make a new copy when MAP_PRIVATE is specified. - if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) { + if (!(flags & 2) && contents.buffer === HEAP8.buffer) { // We can't emulate MAP_SHARED when the file is not backed by the // buffer we're mapping to (e.g. the HEAP buffer). allocated = false; @@ -1473,76 +1208,8 @@ function createWasm() { }, }; - /** @param {boolean=} noRunDep */ - var asyncLoad = (url, onload, onerror, noRunDep) => { - var dep = !noRunDep ? getUniqueRunDependency(`al ${url}`) : ''; - readAsync(url).then( - (arrayBuffer) => { - onload(new Uint8Array(arrayBuffer)); - if (dep) removeRunDependency(dep); - }, - (err) => { - if (onerror) { - onerror(); - } else { - throw `Loading data file "${url}" failed.`; - } - } - ); - if (dep) addRunDependency(dep); - }; - - - var FS_createDataFile = (parent, name, fileData, canRead, canWrite, canOwn) => { - FS.createDataFile(parent, name, fileData, canRead, canWrite, canOwn); - }; - - var preloadPlugins = Module['preloadPlugins'] || []; - var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => { - // Ensure plugins are ready. - if (typeof Browser != 'undefined') Browser.init(); - - var handled = false; - preloadPlugins.forEach((plugin) => { - if (handled) return; - if (plugin['canHandle'](fullname)) { - plugin['handle'](byteArray, fullname, finish, onerror); - handled = true; - } - }); - return handled; - }; - var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { - // TODO we should allow people to just pass in a complete filename instead - // of parent and name being that we just join them anyways - var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; - var dep = getUniqueRunDependency(`cp ${fullname}`); // might have several active requests for the same fullname - function processData(byteArray) { - function finish(byteArray) { - preFinish?.(); - if (!dontCreateFile) { - FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); - } - onload?.(); - removeRunDependency(dep); - } - if (FS_handledByPreloadPlugin(byteArray, fullname, finish, () => { - onerror?.(); - removeRunDependency(dep); - })) { - return; - } - finish(byteArray); - } - addRunDependency(dep); - if (typeof url == 'string') { - asyncLoad(url, processData, onerror); - } else { - processData(url); - } - }; - var FS_modeStringToFlags = (str) => { + if (typeof str !== 'string') return str; var flagModes = { 'r': 0, 'r+': 2, @@ -1552,12 +1219,22 @@ function createWasm() { 'a+': 1024 | 64 | 2, }; var flags = flagModes[str]; - if (typeof flags == 'undefined') { + if (typeof flags === 'undefined') { throw new Error(`Unknown file open mode: ${str}`); } return flags; }; + var FS_fileDataToTypedArray = (data) => { + if (typeof data === 'string') { + data = intArrayFromString(data, true); + } + if (!data.subarray) { + data = new Uint8Array(data); + } + return data; + }; + var FS_getMode = (canRead, canWrite) => { var mode = 0; if (canRead) mode |= 292 | 73; @@ -1566,6 +1243,81 @@ function createWasm() { }; + var asyncLoad = async (url) => { + var arrayBuffer = await readAsync(url); + return new Uint8Array(arrayBuffer); + }; + + + var FS_createDataFile = (...args) => FS.createDataFile(...args); + + var getUniqueRunDependency = (id) => { + return id; + }; + + var dependenciesPromise = null; + var resolveRunDependencies = async () => dependenciesPromise; + var runDependencies = 0; + + + var dependenciesPromiseResolve = null; + var removeRunDependency = (id) => { + runDependencies--; + + if (!runDependencies) { + dependenciesPromiseResolve(); + } + }; + + + var addRunDependency = (id) => { + if (!runDependencies) { + dependenciesPromise = new Promise((resolve) => dependenciesPromiseResolve = resolve); + } + runDependencies++; + + }; + + + var preloadPlugins = []; + var FS_handledByPreloadPlugin = async (byteArray, fullname) => { + // Ensure plugins are ready. + if (typeof Browser !== 'undefined') Browser.init(); + + for (var plugin of preloadPlugins) { + if (plugin['canHandle'](fullname)) { + return plugin['handle'](byteArray, fullname); + } + } + // If no plugin handled this file then return the original/unmodified + // byteArray. + return byteArray; + }; + var FS_preloadFile = async (parent, name, url, canRead, canWrite, dontCreateFile, canOwn, preFinish) => { + // TODO we should allow people to just pass in a complete filename instead + // of parent and name being that we just join them anyways + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; + var dep = getUniqueRunDependency(`cp ${fullname}`); // might have several active requests for the same fullname + addRunDependency(dep); + + try { + var byteArray = url; + if (typeof url === 'string') { + byteArray = await asyncLoad(url); + } + + byteArray = await FS_handledByPreloadPlugin(byteArray, fullname); + preFinish?.(); + if (!dontCreateFile) { + FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + } + } finally { + removeRunDependency(dep); + } + }; + var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { + FS_preloadFile(parent, name, url, canRead, canWrite, dontCreateFile, canOwn, preFinish).then(onload).catch(onerror); + }; var FS = { root:null, @@ -1574,10 +1326,11 @@ function createWasm() { }, streams:[], nextInode:1, - nameTable:null, + nameTable:[], currentPath:"/", initialized:false, ignorePermissions:true, + syncFSRequests:0, ErrnoError:class { name = 'ErrnoError'; // We set the `name` property to be able to identify `FS.ErrnoError` @@ -1590,10 +1343,6 @@ function createWasm() { this.errno = errno; } }, - filesystems:null, - syncFSRequests:0, - readFiles:{ - }, FSStream:class { shared = {}; get object() { @@ -1640,6 +1389,7 @@ function createWasm() { this.name = name; this.mode = mode; this.rdev = rdev; + this.atime = this.mtime = this.ctime = Date.now(); } get read() { return (this.mode & this.readMode) === this.readMode; @@ -1659,65 +1409,128 @@ function createWasm() { get isDevice() { return FS.isChrdev(this.mode); } + // The per-inode readiness wait-queue. The node carries a Set of listener + // entries {cb}; producers (SOCKFS, PIPEFS) call notifyListeners on a + // readiness transition, and poll()/epoll consume it. It lives on the node + // (not the fd) so dup'd fds share one queue. Only nodes that derive real + // readiness (sockets, pipes, and an epoll's own node) ever use this - + // always-ready types (regular files, ttys) never register or notify. + addListener(cb, exclusive = false) { + var entry = {cb, exclusive}; + var listeners = (this.listeners ??= new Set()); + listeners.add(entry); + return {listeners, entry}; + } + notifyListeners(flags) { + // Iterates the set without copying, which is safe ONLY under a + // load-bearing contract that every internal listener must honour: + // 1. A listener must not run user code synchronously (a poll waiter only + // resolves a Promise; an epoll registration only re-lists + + // re-notifies; the epoll callback only schedules a tick). User code + // runs on a later tick, never inside this loop. + // 2. A listener may delete entries only from ITS OWN waiter, never from + // a sibling node's set that may be mid-iteration. (Deleting an entry + // of the set being iterated here is fine - a Set tolerates removal of + // a not-yet-visited entry mid-iteration; mutating a *different* node's + // set is fine because that set is not being iterated.) + // Violating either gives silently skipped wakeups that are near-impossible + // to reproduce. Any new producer/listener must preserve it. + if (!this.listeners) return; + // Fire every non-exclusive listener. Among EPOLLEXCLUSIVE registrations + // (one fd watched by several epolls) wake only one, rotating round-robin + // per node, to avoid a thundering herd. (Only epoll registrations are ever + // exclusive; poll waiters and a node's own consumers are not.) + var excl; + for (var entry of this.listeners) { + if (entry.exclusive) (excl ||= []).push(entry); + else entry.cb(flags); + } + if (excl) { + var i = (this.exclTurn || 0) % excl.length; + this.exclTurn = i + 1; + excl[i].cb(flags); + } + } }, lookupPath(path, opts = {}) { - path = PATH_FS.resolve(path); - - if (!path) return { path: '', node: null }; - - var defaults = { - follow_mount: true, - recurse_count: 0 - }; - opts = Object.assign(defaults, opts) + if (!path) { + throw new FS.ErrnoError(44); + } + opts.follow_mount ??= true - if (opts.recurse_count > 8) { // max recursive lookup of 8 - throw new FS.ErrnoError(32); + if (!PATH.isAbs(path)) { + path = FS.cwd() + '/' + path; } - // split the absolute path - var parts = path.split('/').filter((p) => !!p); + // limit max consecutive symlinks to SYMLOOP_MAX. + linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) { + // split the absolute path + var parts = path.split('/').filter((p) => !!p); - // start at the root - var current = FS.root; - var current_path = '/'; + // start at the root + var current = FS.root; + var current_path = '/'; - for (var i = 0; i < parts.length; i++) { - var islast = (i === parts.length-1); - if (islast && opts.parent) { - // stop resolving - break; - } + for (var i = 0; i < parts.length; i++) { + var islast = (i === parts.length-1); + if (islast && opts.parent) { + // stop resolving + break; + } - current = FS.lookupNode(current, parts[i]); - current_path = PATH.join2(current_path, parts[i]); + if (parts[i] === '.') { + continue; + } - // jump to the mount's root node if this is a mountpoint - if (FS.isMountpoint(current)) { - if (!islast || (islast && opts.follow_mount)) { - current = current.mounted.root; + if (parts[i] === '..') { + current_path = PATH.dirname(current_path); + if (FS.isRoot(current)) { + path = current_path + '/' + parts.slice(i + 1).join('/'); + // We're making progress here, don't let many consecutive ..'s + // lead to ELOOP + nlinks--; + continue linkloop; + } else { + current = current.parent; + } + continue; } - } - // by default, lookupPath will not follow a symlink if it is the final path component. - // setting opts.follow = true will override this behavior. - if (!islast || opts.follow) { - var count = 0; - while (FS.isLink(current.mode)) { - var link = FS.readlink(current_path); - current_path = PATH_FS.resolve(PATH.dirname(current_path), link); + current_path = PATH.join2(current_path, parts[i]); + try { + current = FS.lookupNode(current, parts[i]); + } catch (e) { + // if noent_okay is true, suppress a ENOENT in the last component + // and return an object with an undefined node. This is needed for + // resolving symlinks in the path when creating a file. + if ((e?.errno === 44) && islast && opts.noent_okay) { + return { path: current_path }; + } + throw e; + } - var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count + 1 }); - current = lookup.node; + // jump to the mount's root node if this is a mountpoint + if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) { + current = current.mounted.root; + } - if (count++ > 40) { // limit max consecutive symlinks to 40 (SYMLOOP_MAX). - throw new FS.ErrnoError(32); + // by default, lookupPath will not follow a symlink if it is the final path component. + // setting opts.follow = true will override this behavior. + if (FS.isLink(current.mode) && (!islast || opts.follow)) { + if (!current.node_ops.readlink) { + throw new FS.ErrnoError(52); + } + var link = current.node_ops.readlink(current); + if (!PATH.isAbs(link)) { + link = PATH.dirname(current_path) + '/' + link; } + path = link + '/' + parts.slice(i + 1).join('/'); + continue linkloop; } } + return { path: current_path, node: current }; } - - return { path: current_path, node: current }; + throw new FS.ErrnoError(32); }, getPath(node) { var path; @@ -1774,7 +1587,7 @@ function createWasm() { // if we failed to find it in the cache, call into the VFS return FS.lookup(parent, name); }, - createNode(parent, name, mode, rdev) { + createNode(parent, name, mode, rdev = undefined) { var node = new FS.FSNode(parent, name, mode, rdev); FS.hashAddNode(node); @@ -1825,9 +1638,11 @@ function createWasm() { // return 0 if any user, group or owner bits are set. if (perms.includes('r') && !(node.mode & 292)) { return 2; - } else if (perms.includes('w') && !(node.mode & 146)) { + } + if (perms.includes('w') && !(node.mode & 146)) { return 2; - } else if (perms.includes('x') && !(node.mode & 73)) { + } + if (perms.includes('x') && !(node.mode & 73)) { return 2; } return 0; @@ -1840,6 +1655,9 @@ function createWasm() { return 0; }, mayCreate(dir, name) { + if (!FS.isDir(dir.mode)) { + return 54; + } try { var node = FS.lookupNode(dir, name); return 20; @@ -1865,10 +1683,8 @@ function createWasm() { if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { return 10; } - } else { - if (FS.isDir(node.mode)) { - return 31; - } + } else if (FS.isDir(node.mode)) { + return 31; } return 0; }, @@ -1878,13 +1694,22 @@ function createWasm() { } if (FS.isLink(node.mode)) { return 32; - } else if (FS.isDir(node.mode)) { - if (FS.flagsToPermissionString(flags) !== 'r' || // opening for write - (flags & 512)) { // TODO: check for O_SEARCH? (== search for dir only) + } + var mode = FS.flagsToPermissionString(flags); + if (FS.isDir(node.mode)) { + // opening for write + // TODO: check for O_SEARCH? (== search for dir only) + if (mode !== 'r' || (flags & (512 | 64))) { return 31; } } - return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + return FS.nodePermissions(node, mode); + }, + checkOpExists(op, err) { + if (!op) { + throw new FS.ErrnoError(err); + } + return op; }, MAX_OPEN_FDS:4096, nextfd() { @@ -1922,6 +1747,20 @@ function createWasm() { stream.stream_ops?.dup?.(stream); return stream; }, + doSetAttr(stream, node, attr) { + var setattr = stream?.stream_ops.setattr; + var arg = setattr ? stream : node; + setattr ??= node.node_ops.setattr; + FS.checkOpExists(setattr, 63) + try { + setattr(arg, attr); + } catch (e) { + if (e instanceof RangeError) { + throw new FS.ErrnoError(22); + } + throw e; + } + }, chrdev_stream_ops:{ open(stream) { var device = FS.getDevice(stream.node.rdev); @@ -1956,7 +1795,7 @@ function createWasm() { return mounts; }, syncfs(populate, callback) { - if (typeof populate == 'function') { + if (typeof populate === 'function') { callback = populate; populate = false; } @@ -1989,12 +1828,13 @@ function createWasm() { }; // sync all mounts - mounts.forEach((mount) => { - if (!mount.type.syncfs) { - return done(null); + for (var mount of mounts) { + if (mount.type.syncfs) { + mount.type.syncfs(mount, populate, done); + } else { + done(null); } - mount.type.syncfs(mount, populate, done); - }); + } }, mount(type, opts, mountpoint) { var root = mountpoint === '/'; @@ -2056,9 +1896,7 @@ function createWasm() { var mount = node.mounted; var mounts = FS.getMounts(mount); - Object.keys(FS.nameTable).forEach((hash) => { - var current = FS.nameTable[hash]; - + for (var [hash, current] of Object.entries(FS.nameTable)) { while (current) { var next = current.name_next; @@ -2068,7 +1906,7 @@ function createWasm() { current = next; } - }); + } // no longer a mountpoint node.mounted = null; @@ -2084,9 +1922,12 @@ function createWasm() { var lookup = FS.lookupPath(path, { parent: true }); var parent = lookup.node; var name = PATH.basename(path); - if (!name || name === '.' || name === '..') { + if (!name) { throw new FS.ErrnoError(28); } + if (name === '.' || name === '..') { + throw new FS.ErrnoError(20); + } var errCode = FS.mayCreate(parent, name); if (errCode) { throw new FS.ErrnoError(errCode); @@ -2097,15 +1938,24 @@ function createWasm() { return parent.node_ops.mknod(parent, name, mode, dev); }, statfs(path) { - + return FS.statfsNode(FS.lookupPath(path, {follow: true}).node); + }, + statfsStream(stream) { + // We keep a separate statfsStream function because noderawfs overrides + // it. In noderawfs, stream.node is sometimes null. Instead, we need to + // look at stream.path. + return FS.statfsNode(stream.node); + }, + statfsNode(node) { // NOTE: None of the defaults here are true. We're just returning safe and - // sane values. + // sane values. Currently nodefs and rawfs replace these defaults, + // other file systems leave them alone. var rtn = { bsize: 4096, frsize: 4096, - blocks: 1e6, - bfree: 5e5, - bavail: 5e5, + blocks: 1_000_000, + bfree: 500_000, + bavail: 500_000, files: FS.nextInode, ffree: FS.nextInode - 1, fsid: 42, @@ -2113,9 +1963,8 @@ function createWasm() { namelen: 255, }; - var parent = FS.lookupPath(path, {follow: true}).node; - if (parent?.node_ops.statfs) { - Object.assign(rtn, parent.node_ops.statfs(parent.mount.opts.root)); + if (node.node_ops.statfs) { + Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root)); } return rtn; }, @@ -2129,12 +1978,13 @@ function createWasm() { mode |= 16384; return FS.mknod(path, mode, 0); }, - mkdirTree(path, mode) { + mkdirTree(path, mode = 0o777) { var dirs = path.split('/'); var d = ''; - for (var i = 0; i < dirs.length; ++i) { - if (!dirs[i]) continue; - d += '/' + dirs[i]; + for (var dir of dirs) { + if (!dir) continue; + if (d || PATH.isAbs(path)) d += '/'; + d += dir; try { FS.mkdir(d, mode); } catch(e) { @@ -2142,8 +1992,8 @@ function createWasm() { } } }, - mkdev(path, mode, dev) { - if (typeof dev == 'undefined') { + mkdev(path, mode, dev = undefined) { + if (typeof dev === 'undefined') { dev = mode; mode = 0o666; } @@ -2169,6 +2019,25 @@ function createWasm() { } return parent.node_ops.symlink(parent, newname, oldpath); }, + link(oldpath, newpath, flags) { + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + // Hardlinks are only supported by filesystem backends that provide a + // `link` node op (e.g. NODERAWFS backed by the host). NODEFS omits it: + // a host hardlink cannot be confined to the mount root. + if (!parent.node_ops.link) { + throw new FS.ErrnoError(34); + } + return parent.node_ops.link(parent, newname, oldpath, flags); + }, rename(old_path, new_path) { var old_dirname = PATH.dirname(old_path); var new_dirname = PATH.dirname(new_path); @@ -2243,6 +2112,11 @@ function createWasm() { // do the underlying fs rename try { old_dir.node_ops.rename(old_node, new_dir, new_name); + // The replaced node is stale now. Evict it only after the rename + // succeeded: backends like NODEFS report node.id as st_ino. + if (new_node) { + FS.hashRemoveNode(new_node); + } // update old node (we do this here to avoid each backend // needing to) old_node.parent = new_dir; @@ -2275,10 +2149,8 @@ function createWasm() { readdir(path) { var lookup = FS.lookupPath(path, { follow: true }); var node = lookup.node; - if (!node.node_ops.readdir) { - throw new FS.ErrnoError(54); - } - return node.node_ops.readdir(node); + var readdir = FS.checkOpExists(node.node_ops.readdir, 54); + return readdir(node); }, unlink(path) { var lookup = FS.lookupPath(path, { parent: true }); @@ -2315,80 +2187,73 @@ function createWasm() { } return link.node_ops.readlink(link); }, - stat(path, dontFollow) { + stat(path, dontFollow = false) { var lookup = FS.lookupPath(path, { follow: !dontFollow }); var node = lookup.node; - if (!node) { - throw new FS.ErrnoError(44); - } - if (!node.node_ops.getattr) { - throw new FS.ErrnoError(63); - } - return node.node_ops.getattr(node); + var getattr = FS.checkOpExists(node.node_ops.getattr, 63); + return getattr(node); + }, + fstat(fd) { + var stream = FS.getStreamChecked(fd); + var node = stream.node; + var getattr = stream.stream_ops.getattr; + var arg = getattr ? stream : node; + getattr ??= node.node_ops.getattr; + FS.checkOpExists(getattr, 63) + return getattr(arg); }, lstat(path) { return FS.stat(path, true); }, - chmod(path, mode, dontFollow) { + doChmod(stream, node, mode, dontFollow = false) { + FS.doSetAttr(stream, node, { + mode: (mode & 4095) | (node.mode & ~4095), + ctime: Date.now(), + dontFollow + }); + }, + chmod(path, mode, dontFollow = false) { var node; - if (typeof path == 'string') { + if (typeof path === 'string') { var lookup = FS.lookupPath(path, { follow: !dontFollow }); node = lookup.node; } else { node = path; } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(63); - } - node.node_ops.setattr(node, { - mode: (mode & 4095) | (node.mode & ~4095), - timestamp: Date.now() - }); + FS.doChmod(null, node, mode, dontFollow); }, lchmod(path, mode) { FS.chmod(path, mode, true); }, fchmod(fd, mode) { var stream = FS.getStreamChecked(fd); - FS.chmod(stream.node, mode); + FS.doChmod(stream, stream.node, mode, false); + }, + doChown(stream, node, dontFollow = false) { + FS.doSetAttr(stream, node, { + timestamp: Date.now(), + dontFollow + // we ignore the uid / gid for now + }); }, - chown(path, uid, gid, dontFollow) { + chown(path, uid, gid, dontFollow = false) { var node; - if (typeof path == 'string') { + if (typeof path === 'string') { var lookup = FS.lookupPath(path, { follow: !dontFollow }); node = lookup.node; } else { node = path; } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(63); - } - node.node_ops.setattr(node, { - timestamp: Date.now() - // we ignore the uid / gid for now - }); + FS.doChown(null, node, dontFollow); }, lchown(path, uid, gid) { FS.chown(path, uid, gid, true); }, fchown(fd, uid, gid) { var stream = FS.getStreamChecked(fd); - FS.chown(stream.node, uid, gid); + FS.doChown(stream, stream.node, false); }, - truncate(path, len) { - if (len < 0) { - throw new FS.ErrnoError(28); - } - var node; - if (typeof path == 'string') { - var lookup = FS.lookupPath(path, { follow: true }); - node = lookup.node; - } else { - node = path; - } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(63); - } + doTruncate(stream, node, len) { if (FS.isDir(node.mode)) { throw new FS.ErrnoError(31); } @@ -2399,48 +2264,64 @@ function createWasm() { if (errCode) { throw new FS.ErrnoError(errCode); } - node.node_ops.setattr(node, { + FS.doSetAttr(stream, node, { size: len, timestamp: Date.now() }); }, + truncate(path, len) { + if (len < 0) { + throw new FS.ErrnoError(28); + } + var node; + if (typeof path === 'string') { + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + } else { + node = path; + } + FS.doTruncate(null, node, len); + }, ftruncate(fd, len) { var stream = FS.getStreamChecked(fd); - if ((stream.flags & 2097155) === 0) { + if (len < 0 || (stream.flags & 2097155) === 0) { throw new FS.ErrnoError(28); } - FS.truncate(stream.node, len); + FS.doTruncate(stream, stream.node, len); }, - utime(path, atime, mtime) { - var lookup = FS.lookupPath(path, { follow: true }); - var node = lookup.node; - node.node_ops.setattr(node, { - timestamp: Math.max(atime, mtime) + utime(path, atime, mtime, dontFollow = false) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + FS.doSetAttr(null, lookup.node, { + atime: atime, + mtime: mtime, + dontFollow }); }, open(path, flags, mode = 0o666) { - if (path === "") { + if (path === '') { throw new FS.ErrnoError(44); } - flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags; + flags = FS_modeStringToFlags(flags); if ((flags & 64)) { mode = (mode & 4095) | 32768; } else { mode = 0; } var node; - if (typeof path == 'object') { + var isDirPath; + if (typeof path === 'object') { node = path; } else { - path = PATH.normalize(path); - try { - var lookup = FS.lookupPath(path, { - follow: !(flags & 131072) - }); - node = lookup.node; - } catch (e) { - // ignore - } + isDirPath = path.endsWith('/'); + // noent_okay makes it so that if the final component of the path + // doesn't exist, lookupPath returns `node: undefined`. `path` will be + // updated to point to the target of all symlinks. + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072), + noent_okay: true + }); + node = lookup.node; + path = lookup.path; } // perhaps we need to create the node var created = false; @@ -2450,9 +2331,14 @@ function createWasm() { if ((flags & 128)) { throw new FS.ErrnoError(20); } + } else if (isDirPath) { + throw new FS.ErrnoError(31); } else { // node doesn't exist, try to create it - node = FS.mknod(path, mode, 0); + // Ignore the permission bits here to ensure we can `open` this new + // file below. We use chmod below to apply the permissions once the + // file is open. + node = FS.mknod(path, mode | 0o777, 0); created = true; } } @@ -2499,10 +2385,8 @@ function createWasm() { if (stream.stream_ops.open) { stream.stream_ops.open(stream); } - if (Module['logReadFiles'] && !(flags & 1)) { - if (!(path in FS.readFiles)) { - FS.readFiles[path] = 1; - } + if (created) { + FS.chmod(node, mode & 0o777); } return stream; }, @@ -2511,6 +2395,11 @@ function createWasm() { throw new FS.ErrnoError(8); } if (stream.getdents) stream.getdents = null; // free readdir state + // The fd is going away: wake anything waiting on it (poll/epoll) with + // POLLNVAL so a blocking wait unblocks and an epoll registration is evicted + // on its next derive. Only sockets/pipes/epoll ever carry a wait-queue, so + // for every other stream (incl. nodeless noderawfs stdio) this is a no-op. + stream.node?.notifyListeners(32); try { if (stream.stream_ops.close) { stream.stream_ops.close(stream); @@ -2539,7 +2428,7 @@ function createWasm() { stream.ungotten = []; return stream.position; }, - read(stream, buffer, offset, length, position) { + read(stream, buffer, offset, length, position = undefined) { if (length < 0 || position < 0) { throw new FS.ErrnoError(28); } @@ -2555,7 +2444,7 @@ function createWasm() { if (!stream.stream_ops.read) { throw new FS.ErrnoError(28); } - var seeking = typeof position != 'undefined'; + var seeking = typeof position !== 'undefined'; if (!seeking) { position = stream.position; } else if (!stream.seekable) { @@ -2565,7 +2454,7 @@ function createWasm() { if (!seeking) stream.position += bytesRead; return bytesRead; }, - write(stream, buffer, offset, length, position, canOwn) { + write(stream, buffer, offset, length, position = undefined, canOwn = undefined) { if (length < 0 || position < 0) { throw new FS.ErrnoError(28); } @@ -2585,7 +2474,7 @@ function createWasm() { // seek to the end before writing in append mode FS.llseek(stream, 0, 2); } - var seeking = typeof position != 'undefined'; + var seeking = typeof position !== 'undefined'; if (!seeking) { position = stream.position; } else if (!stream.seekable) { @@ -2595,24 +2484,6 @@ function createWasm() { if (!seeking) stream.position += bytesWritten; return bytesWritten; }, - allocate(stream, offset, length) { - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8); - } - if (offset < 0 || length <= 0) { - throw new FS.ErrnoError(28); - } - if ((stream.flags & 2097155) === 0) { - throw new FS.ErrnoError(8); - } - if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) { - throw new FS.ErrnoError(43); - } - if (!stream.stream_ops.allocate) { - throw new FS.ErrnoError(138); - } - stream.stream_ops.allocate(stream, offset, length); - }, mmap(stream, length, position, prot, flags) { // User requests writing to file (prot & PROT_WRITE != 0). // Checking if we have permissions to write to the file unless @@ -2620,8 +2491,8 @@ function createWasm() { // to write to file opened in read-only mode with MAP_PRIVATE flag, // as all modifications will be visible only in the memory of // the current process. - if ((prot & 2) !== 0 - && (flags & 2) === 0 + if ((prot & 2) + && !(flags & 2) && (stream.flags & 2097155) !== 2) { throw new FS.ErrnoError(2); } @@ -2649,37 +2520,27 @@ function createWasm() { return stream.stream_ops.ioctl(stream, cmd, arg); }, readFile(path, opts = {}) { - opts.flags = opts.flags || 0; - opts.encoding = opts.encoding || 'binary'; + opts.flags ??= 0; + opts.encoding ??= 'binary'; if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { - throw new Error(`Invalid encoding type "${opts.encoding}"`); + abort(`Invalid encoding type "${opts.encoding}"`); } - var ret; var stream = FS.open(path, opts.flags); var stat = FS.stat(path); var length = stat.size; var buf = new Uint8Array(length); FS.read(stream, buf, 0, length, 0); if (opts.encoding === 'utf8') { - ret = UTF8ArrayToString(buf); - } else if (opts.encoding === 'binary') { - ret = buf; + buf = UTF8ArrayToString(buf); } FS.close(stream); - return ret; + return buf; }, writeFile(path, data, opts = {}) { - opts.flags = opts.flags || 577; + opts.flags ??= 577; var stream = FS.open(path, opts.flags, opts.mode); - if (typeof data == 'string') { - var buf = new Uint8Array(lengthBytesUTF8(data)+1); - var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); - FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn); - } else if (ArrayBuffer.isView(data)) { - FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); - } else { - throw new Error('Unsupported data type'); - } + data = FS_fileDataToTypedArray(data); + FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); FS.close(stream); }, cwd:() => FS.currentPath, @@ -2723,8 +2584,9 @@ function createWasm() { // use a buffer to avoid overhead of individual crypto calls per byte var randomBuffer = new Uint8Array(1024), randomLeft = 0; var randomByte = () => { - if (randomLeft === 0) { - randomLeft = randomFill(randomBuffer).byteLength; + if (!randomLeft) { + randomFill(randomBuffer); + randomLeft = randomBuffer.byteLength; } return randomBuffer[--randomLeft]; }; @@ -2744,6 +2606,9 @@ function createWasm() { FS.mount({ mount() { var node = FS.createNode(proc_self, 'fd', 16895, 73); + node.stream_ops = { + llseek: MEMFS.stream_ops.llseek, + }; node.node_ops = { lookup(parent, name) { var fd = +name; @@ -2752,9 +2617,15 @@ function createWasm() { parent: null, mount: { mountpoint: 'fake' }, node_ops: { readlink: () => stream.path }, + id: fd + 1, }; ret.parent = ret; // make it look like a simple root node return ret; + }, + readdir() { + return Array.from(FS.streams.entries()) + .filter(([k, v]) => v) + .map(([k, v]) => k.toString()); } }; return node; @@ -2792,25 +2663,18 @@ function createWasm() { var stderr = FS.open('/dev/stderr', 1); }, staticInit() { - FS.nameTable = new Array(4096); + FS.nameTable.length = 4096; FS.mount(MEMFS, {}, '/'); FS.createDefaultDirectories(); FS.createDefaultDevices(); FS.createSpecialDirectories(); - - FS.filesystems = { - 'MEMFS': MEMFS, - }; }, - init(input, output, error) { + init(input = undefined, output = undefined, error = undefined) { FS.initialized = true; // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here - input ??= Module['stdin']; - output ??= Module['stdout']; - error ??= Module['stderr']; FS.createStandardStreams(input, output, error); }, @@ -2818,22 +2682,13 @@ function createWasm() { FS.initialized = false; // force-flush all streams, so we get musl std streams printed out // close all of our streams - for (var i = 0; i < FS.streams.length; i++) { - var stream = FS.streams[i]; - if (!stream) { - continue; + for (var stream of FS.streams) { + if (stream) { + FS.close(stream); } - FS.close(stream); - } - }, - findObject(path, dontResolveLastLink) { - var ret = FS.analyzePath(path, dontResolveLastLink); - if (!ret.exists) { - return null; } - return ret.object; }, - analyzePath(path, dontResolveLastLink) { + analyzePath(path, dontResolveLastLink = false) { // operate from within the context of the symlink's target try { var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); @@ -2861,8 +2716,8 @@ function createWasm() { }; return ret; }, - createPath(parent, path, canRead, canWrite) { - parent = typeof parent == 'string' ? parent : FS.getPath(parent); + createPath(parent, path, canRead = undefined, canWrite = undefined) { + parent = typeof parent === 'string' ? parent : FS.getPath(parent); var parts = path.split('/').reverse(); while (parts.length) { var part = parts.pop(); @@ -2871,31 +2726,27 @@ function createWasm() { try { FS.mkdir(current); } catch (e) { - // ignore EEXIST + if (e.errno != 20) throw e; } parent = current; } return current; }, - createFile(parent, name, properties, canRead, canWrite) { - var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + createFile(parent, name, properties, canRead = undefined, canWrite = undefined) { + var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); var mode = FS_getMode(canRead, canWrite); return FS.create(path, mode); }, - createDataFile(parent, name, data, canRead, canWrite, canOwn) { + createDataFile(parent, name, data = undefined, canRead = undefined, canWrite = undefined, canOwn = undefined) { var path = name; if (parent) { - parent = typeof parent == 'string' ? parent : FS.getPath(parent); + parent = typeof parent === 'string' ? parent : FS.getPath(parent); path = name ? PATH.join2(parent, name) : parent; } var mode = FS_getMode(canRead, canWrite); var node = FS.create(path, mode); if (data) { - if (typeof data == 'string') { - var arr = new Array(data.length); - for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); - data = arr; - } + data = FS_fileDataToTypedArray(data); // make sure we can write to the file FS.chmod(node, mode | 146); var stream = FS.open(node, 577); @@ -2904,8 +2755,8 @@ function createWasm() { FS.chmod(node, mode); } }, - createDevice(parent, name, input, output) { - var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + createDevice(parent, name, input = undefined, output = undefined) { + var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); var mode = FS_getMode(!!input, !!output); FS.createDevice.major ??= 64; var dev = FS.makedev(FS.createDevice.major++, 0); @@ -2930,7 +2781,7 @@ function createWasm() { } catch (e) { throw new FS.ErrnoError(29); } - if (result === undefined && bytesRead === 0) { + if (result === undefined && !bytesRead) { throw new FS.ErrnoError(6); } if (result === null || result === undefined) break; @@ -2938,7 +2789,7 @@ function createWasm() { buffer[offset+i] = result; } if (bytesRead) { - stream.node.timestamp = Date.now(); + stream.node.atime = Date.now(); } return bytesRead; }, @@ -2951,7 +2802,7 @@ function createWasm() { } } if (length) { - stream.node.timestamp = Date.now(); + stream.node.mtime = stream.node.ctime = Date.now(); } return i; } @@ -2960,18 +2811,17 @@ function createWasm() { }, forceLoadFile(obj) { if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; - if (typeof XMLHttpRequest != 'undefined') { - throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); + if (globalThis.XMLHttpRequest) { + abort('Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.'); } else { // Command-line. try { obj.contents = readBinary(obj.url); - obj.usedBytes = obj.contents.length; } catch (e) { throw new FS.ErrnoError(29); } } }, - createLazyFile(parent, name, url, canRead, canWrite) { + createLazyFile(parent, name, url, canRead = undefined, canWrite = undefined) { // Lazy chunked Uint8Array (implements get and length from Uint8Array). // Actual getting is abstracted away for eventual reuse. class LazyUint8Array { @@ -2993,11 +2843,11 @@ function createWasm() { var xhr = new XMLHttpRequest(); xhr.open('HEAD', url, false); xhr.send(null); - if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); - var datalength = Number(xhr.getResponseHeader("Content-length")); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) abort(`Couldn't load ${url}. Status: ${xhr.status}`); + var datalength = Number(xhr.getResponseHeader('Content-length')); var header; - var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; - var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + var hasByteServing = (header = xhr.getResponseHeader('Accept-Ranges')) && header === 'bytes'; + var usesGzip = (header = xhr.getResponseHeader('Content-Encoding')) && header === 'gzip'; var chunkSize = 1024*1024; // Chunk size in bytes @@ -3005,13 +2855,13 @@ function createWasm() { // Function to get a range from the remote URL. var doXHR = (from, to) => { - if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); - if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); + if (from > to) abort(`invalid range (${from}, ${to}) or no bytes requested!`); + if (to > datalength-1) abort(`only ${datalength} bytes available! programmer error!`); // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. var xhr = new XMLHttpRequest(); xhr.open('GET', url, false); - if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + if (datalength !== chunkSize) xhr.setRequestHeader('Range', `bytes=${from}-${to}`); // Some hints to the browser that we want binary data. xhr.responseType = 'arraybuffer'; @@ -3020,21 +2870,21 @@ function createWasm() { } xhr.send(null); - if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) abort(`Couldn't load ${url}. Status: ${xhr.status}`); if (xhr.response !== undefined) { return new Uint8Array(/** @type{Array} */(xhr.response || [])); } - return intArrayFromString(xhr.responseText || '', true); + return intArrayFromString(xhr.responseText ?? '', true); }; var lazyArray = this; lazyArray.setDataGetter((chunkNum) => { var start = chunkNum * chunkSize; var end = (chunkNum+1) * chunkSize - 1; // including this byte end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block - if (typeof lazyArray.chunks[chunkNum] == 'undefined') { + if (typeof lazyArray.chunks[chunkNum] === 'undefined') { lazyArray.chunks[chunkNum] = doXHR(start, end); } - if (typeof lazyArray.chunks[chunkNum] == 'undefined') throw new Error('doXHR failed!'); + if (typeof lazyArray.chunks[chunkNum] === 'undefined') abort('doXHR failed!'); return lazyArray.chunks[chunkNum]; }); @@ -3043,7 +2893,7 @@ function createWasm() { chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file datalength = this.getter(0).length; chunkSize = datalength; - out("LazyFiles on gzip forces download of the whole file when length is accessed"); + out('LazyFiles on gzip forces download of the whole file when length is accessed'); } this._length = datalength; @@ -3064,8 +2914,8 @@ function createWasm() { } } - if (typeof XMLHttpRequest != 'undefined') { - if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; + if (globalThis.XMLHttpRequest) { + if (!ENVIRONMENT_IS_WORKER) abort('Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'); var lazyArray = new LazyUint8Array(); var properties = { isDevice: false, contents: lazyArray }; } else { @@ -3090,14 +2940,12 @@ function createWasm() { }); // override each stream op with one that tries to force load the lazy file first var stream_ops = {}; - var keys = Object.keys(node.stream_ops); - keys.forEach((key) => { - var fn = node.stream_ops[key]; + for (const [key, fn] of Object.entries(node.stream_ops)) { stream_ops[key] = (...args) => { FS.forceLoadFile(node); return fn(...args); }; - }); + } function writeChunks(stream, buffer, offset, length, position) { var contents = stream.node.contents; if (position >= contents.length) @@ -3134,9 +2982,19 @@ function createWasm() { }, }; + + + /** @type {!Int32Array} */ + var HEAP32; + + /** @type {!Uint32Array} */ + var HEAPU32; + + /** not-@type {!BigInt64Array} */ + var HEAP64; var SYSCALLS = { - DEFAULT_POLLMASK:5, - calculateAt(dirfd, path, allowEmpty) { + currentUmask:18, + calculateAt(dirfd, path, allowEmpty = false) { if (PATH.isAbs(path)) { return path; } @@ -3154,16 +3012,15 @@ function createWasm() { } return dir; } - return PATH.join2(dir, path); + return dir + '/' + path; }, - doStat(func, path, buf) { - var stat = func(path); - HEAP32[((buf)>>2)] = stat.dev; - HEAP32[(((buf)+(4))>>2)] = stat.mode; + writeStat(buf, stat) { + HEAPU32[((buf)>>2)] = stat.dev; + HEAPU32[(((buf)+(4))>>2)] = stat.mode; HEAPU32[(((buf)+(8))>>2)] = stat.nlink; - HEAP32[(((buf)+(12))>>2)] = stat.uid; - HEAP32[(((buf)+(16))>>2)] = stat.gid; - HEAP32[(((buf)+(20))>>2)] = stat.rdev; + HEAPU32[(((buf)+(12))>>2)] = stat.uid; + HEAPU32[(((buf)+(16))>>2)] = stat.gid; + HEAPU32[(((buf)+(20))>>2)] = stat.rdev; HEAP64[(((buf)+(24))>>3)] = BigInt(stat.size); HEAP32[(((buf)+(32))>>2)] = 4096; HEAP32[(((buf)+(36))>>2)] = stat.blocks; @@ -3179,6 +3036,18 @@ function createWasm() { HEAP64[(((buf)+(88))>>3)] = BigInt(stat.ino); return 0; }, + writeStatFs(buf, stats) { + HEAPU32[(((buf)+(4))>>2)] = stats.bsize; + HEAPU32[(((buf)+(60))>>2)] = stats.bsize; + HEAP64[(((buf)+(8))>>3)] = BigInt(stats.blocks); + HEAP64[(((buf)+(16))>>3)] = BigInt(stats.bfree); + HEAP64[(((buf)+(24))>>3)] = BigInt(stats.bavail); + HEAP64[(((buf)+(32))>>3)] = BigInt(stats.files); + HEAP64[(((buf)+(40))>>3)] = BigInt(stats.ffree); + HEAPU32[(((buf)+(48))>>2)] = stats.fsid; + HEAPU32[(((buf)+(64))>>2)] = stats.flags; // ST_NOSUID + HEAPU32[(((buf)+(56))>>2)] = stats.namelen; + }, doMsync(addr, stream, len, flags, offset) { if (!FS.isFile(stream.node.mode)) { throw new FS.ErrnoError(43); @@ -3187,7 +3056,7 @@ function createWasm() { // MAP_PRIVATE calls need not to be synced back to underlying fs return 0; } - var buffer = HEAPU8.slice(addr, addr + len); + var buffer = HEAPU8.subarray(addr, addr + len); FS.msync(stream, buffer, offset, len, flags); }, getStreamFromFD(fd) { @@ -3207,10 +3076,11 @@ function createWasm() { FS.chmod(path, mode); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_faccessat(dirfd, path, amode, flags) { try { @@ -3235,10 +3105,11 @@ function createWasm() { } return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_fchmod(fd, mode) { try { @@ -3246,10 +3117,11 @@ function createWasm() { FS.fchmod(fd, mode); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_fchown32(fd, owner, group) { try { @@ -3257,12 +3129,12 @@ function createWasm() { FS.fchown(fd, owner, group); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + - /** @suppress {duplicate } */ var syscallGetVarargI = () => { // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number. var ret = HEAP32[((+SYSCALLS.varargs)>>2)]; @@ -3272,6 +3144,9 @@ function createWasm() { var syscallGetVarargP = syscallGetVarargI; + + /** @type {!Int16Array} */ + var HEAP16; function ___syscall_fcntl64(fd, cmd, varargs) { SYSCALLS.varargs = varargs; try { @@ -3297,7 +3172,8 @@ function createWasm() { return stream.flags; case 4: { var arg = syscallGetVarargI(); - stream.flags |= arg; + var mask = 289792; + stream.flags = (stream.flags & ~mask) | (arg & mask); return 0; } case 12: { @@ -3309,25 +3185,30 @@ function createWasm() { } case 13: case 14: - return 0; // Pretend that the locking is successful. + // Pretend that the locking is successful. These are process-level locks, + // and Emscripten programs are a single process. If we supported linking a + // filesystem between programs, we'd need to do more here. + // See https://github.com/emscripten-core/emscripten/issues/23697 + return 0; } return -28; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_fstat64(fd, buf) { try { - var stream = SYSCALLS.getStreamFromFD(fd); - return SYSCALLS.doStat(FS.stat, stream.path, buf); + return SYSCALLS.writeStat(buf, FS.fstat(fd)); } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + var INT53_MAX = 9007199254740992; @@ -3336,39 +3217,46 @@ function createWasm() { function ___syscall_ftruncate64(fd, length) { length = bigintToI53Checked(length); - + try { - if (isNaN(length)) return 61; + if (isNaN(length)) return -22; FS.ftruncate(fd, length); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } ; } + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); }; function ___syscall_getcwd(buf, size) { try { - if (size === 0) return -28; + if (!size) return -28; var cwd = FS.cwd(); var cwdLengthInBytes = lengthBytesUTF8(cwd) + 1; if (size < cwdLengthInBytes) return -68; stringToUTF8(cwd, buf, size); return cwdLengthInBytes; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + + + var ___syscall_geteuid32 = () => 0; + + + function ___syscall_ioctl(fd, op, varargs) { SYSCALLS.varargs = varargs; try { @@ -3429,6 +3317,7 @@ function createWasm() { if (!stream.tty) return -59; return -28; // not supported } + case 21537: case 21531: { var argp = syscallGetVarargP(); return FS.ioctl(stream, op, argp); @@ -3459,38 +3348,38 @@ function createWasm() { default: return -28; // not supported } } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_lstat64(path, buf) { try { path = SYSCALLS.getStr(path); - return SYSCALLS.doStat(FS.lstat, path, buf); + return SYSCALLS.writeStat(buf, FS.lstat(path)); } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_mkdirat(dirfd, path, mode) { try { path = SYSCALLS.getStr(path); path = SYSCALLS.calculateAt(dirfd, path); - // remove a trailing slash, if one - /a/b/ has basename of '', but - // we want to create b in the context of this function - path = PATH.normalize(path); - if (path[path.length-1] === '/') path = path.substr(0, path.length-1); - FS.mkdir(path, mode, 0); + mode &= ~SYSCALLS.currentUmask; + FS.mkdir(path, mode); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_newfstatat(dirfd, path, buf, flags) { try { @@ -3500,12 +3389,13 @@ function createWasm() { var allowEmpty = flags & 4096; flags = flags & (~6400); path = SYSCALLS.calculateAt(dirfd, path, allowEmpty); - return SYSCALLS.doStat(nofollow ? FS.lstat : FS.stat, path, buf); + return SYSCALLS.writeStat(buf, nofollow ? FS.lstat(path) : FS.stat(path)); } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_openat(dirfd, path, flags, varargs) { @@ -3515,15 +3405,20 @@ function createWasm() { path = SYSCALLS.getStr(path); path = SYSCALLS.calculateAt(dirfd, path); var mode = varargs ? syscallGetVarargI() : 0; + if (flags & 64) { + mode &= ~SYSCALLS.currentUmask; + } return FS.open(path, flags, mode).fd; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + + function ___syscall_readlinkat(dirfd, path, buf, bufsize) { try { @@ -3540,10 +3435,11 @@ function createWasm() { HEAP8[buf+len] = endChar; return len; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_rmdir(path) { try { @@ -3552,48 +3448,54 @@ function createWasm() { FS.rmdir(path); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_stat64(path, buf) { try { path = SYSCALLS.getStr(path); - return SYSCALLS.doStat(FS.stat, path, buf); + return SYSCALLS.writeStat(buf, FS.stat(path)); } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + function ___syscall_unlinkat(dirfd, path, flags) { try { path = SYSCALLS.getStr(path); path = SYSCALLS.calculateAt(dirfd, path); - if (flags === 0) { + if (!flags) { FS.unlink(path); } else if (flags === 512) { FS.rmdir(path); } else { - abort('Invalid flags passed to unlinkat'); + return -28; } return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } + + var readI53FromI64 = (ptr) => { return HEAPU32[((ptr)>>2)] + HEAP32[(((ptr)+(4))>>2)] * 4294967296; }; + function ___syscall_utimensat(dirfd, path, times, flags) { try { + var nofollow = flags & 256; path = SYSCALLS.getStr(path); path = SYSCALLS.calculateAt(dirfd, path, true); var now = Date.now(), atime, mtime; @@ -3601,41 +3503,32 @@ function createWasm() { atime = now; mtime = now; } else { - var seconds = readI53FromI64(times); - var nanoseconds = HEAP32[(((times)+(8))>>2)]; - if (nanoseconds == 1073741823) { - atime = now; - } else if (nanoseconds == 1073741822) { - atime = -1; - } else { - atime = (seconds*1000) + (nanoseconds/(1000*1000)); - } - times += 16; - seconds = readI53FromI64(times); - nanoseconds = HEAP32[(((times)+(8))>>2)]; - if (nanoseconds == 1073741823) { - mtime = now; - } else if (nanoseconds == 1073741822) { - mtime = -1; - } else { - mtime = (seconds*1000) + (nanoseconds/(1000*1000)); + function readTimespec(ptr) { + var tv_nsec = HEAP32[(((ptr)+(8))>>2)]; + if (tv_nsec == 1073741823) { + return now; + } + if (tv_nsec == 1073741822) { + return null; + } + var tv_sec = readI53FromI64(ptr); + return (tv_sec*1000) + Math.floor(tv_nsec/(1000*1000)); } + atime = readTimespec(times); + mtime = readTimespec(times + 16); } - // -1 here means UTIME_OMIT was passed. FS.utime tables the max of these - // two values and sets the timestamp to that single value. If both were - // set to UTIME_OMIT then we can skip the call completely. - if (mtime != -1 || atime != -1) { - FS.utime(path, atime, mtime); + // null here means UTIME_OMIT was passed. If both were set to UTIME_OMIT then + // we can skip the call completely. + if ((mtime ?? atime) !== null) { + FS.utime(path, atime, mtime, nofollow); } return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } } - - var nowIsMonotonic = 1; - var __emscripten_get_now_is_monotonic = () => nowIsMonotonic; + var isLeapYear = (year) => year%4 === 0 && (year%100 !== 0 || year%400 === 0); @@ -3650,11 +3543,15 @@ function createWasm() { return yday; }; + function __localtime_js(time, tmPtr) { time = bigintToI53Checked(time); - + var date = new Date(time*1000); + if (isNaN(date.getTime())) { + return 1; + } HEAP32[((tmPtr)>>2)] = date.getSeconds(); HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); @@ -3673,6 +3570,7 @@ function createWasm() { var winterOffset = start.getTimezoneOffset(); var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset))|0; HEAP32[(((tmPtr)+(32))>>2)] = dst; + return 0; ; } @@ -3681,13 +3579,14 @@ function createWasm() { + + function __mmap_js(len, prot, flags, fd, offset, allocated, addr) { offset = bigintToI53Checked(offset); - + try { - if (isNaN(offset)) return 61; var stream = SYSCALLS.getStreamFromFD(fd); var res = FS.mmap(stream, len, offset, prot, flags); var ptr = res.ptr; @@ -3695,7 +3594,7 @@ function createWasm() { HEAPU32[((addr)>>2)] = ptr; return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } ; @@ -3705,7 +3604,7 @@ function createWasm() { function __munmap_js(addr, len, prot, flags, fd, offset) { offset = bigintToI53Checked(offset); - + try { var stream = SYSCALLS.getStreamFromFD(fd); @@ -3713,12 +3612,14 @@ function createWasm() { SYSCALLS.doMsync(addr, stream, len, flags, offset); } } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return -e.errno; } ; } + + var __tzset_js = (timezone, daylight, std_name, dst_name) => { // TODO: Use (malleable) environment variables instead of system settings. var currentYear = new Date().getFullYear(); @@ -3747,11 +3648,11 @@ function createWasm() { var extractZone = (timezoneOffset) => { // Why inverse sign? // Read here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset - var sign = timezoneOffset >= 0 ? "-" : "+"; + var sign = timezoneOffset >= 0 ? '-' : '+'; var absOffset = Math.abs(timezoneOffset) - var hours = String(Math.floor(absOffset / 60)).padStart(2, "0"); - var minutes = String(absOffset % 60).padStart(2, "0"); + var hours = String(Math.floor(absOffset / 60)).padStart(2, '0'); + var minutes = String(absOffset % 60).padStart(2, '0'); return `UTC${sign}${hours}${minutes}`; } @@ -3768,10 +3669,44 @@ function createWasm() { } }; + var _emscripten_get_now = () => performance.now(); + var _emscripten_date_now = () => Date.now(); + + var nowIsMonotonic = 1; + + var checkWasiClock = (clock_id) => clock_id >= 0 && clock_id <= 3; + + + function _clock_time_get(clk_id, ignored_precision, ptime) { + ignored_precision = bigintToI53Checked(ignored_precision); + + + if (!checkWasiClock(clk_id)) { + return 28; + } + var now; + // all wasi clocks but realtime are monotonic + if (clk_id === 0) { + now = _emscripten_date_now(); + } else if (nowIsMonotonic) { + now = _emscripten_get_now(); + } else { + return 52; + } + // "now" is in ms, and wasi times are in ns. + var nsec = Math.round(now * 1_000_000); + HEAP64[((ptime)>>3)] = BigInt(nsec); + return 0; + ; + } + - var _emscripten_get_now = () => performance.now(); + var abortOnCannotGrowMemory = (requestedSize) => { + abort('OOM'); + }; + var getHeapMax = () => // Stay one Wasm page short of 4GB: while e.g. Chrome is able to allocate // full 4GB Wasm memories, the size will wrap back to 0 bytes in Wasm side @@ -3780,13 +3715,9 @@ function createWasm() { 2147483648; - var abortOnCannotGrowMemory = (requestedSize) => { - abort('OOM'); - }; - var growMemory = (size) => { - var b = wasmMemory.buffer; - var pages = ((size - b.byteLength + 65535) / 65536) | 0; + var oldHeapSize = wasmMemory.buffer.byteLength; + var pages = ((size - oldHeapSize + 65535) / 65536) | 0; try { // round size grow request up to wasm page size (fixed 64KB per spec) wasmMemory.grow(pages); // .grow() takes a delta compared to the previous size @@ -3794,9 +3725,10 @@ function createWasm() { return 1 /*success*/; } catch(e) { } - // implicit 0 return to save code size (caller will cast "undefined" into 0 + // implicit 0 return to save code size (caller will cast 'undefined' into 0 // anyhow) }; + var _emscripten_resize_heap = (requestedSize) => { var oldSize = HEAPU8.length; // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. @@ -3850,12 +3782,11 @@ function createWasm() { var ENV = { }; - var getExecutableName = () => thisProgram || './this.program'; + var getExecutableName = () => thisProgram; var getEnvStrings = () => { if (!getEnvStrings.strings) { // Default values. - // Browser language detection #8751 - var lang = ((typeof navigator == 'object' && navigator.languages && navigator.languages[0]) || 'C').replace('-', '_') + '.UTF-8'; + var lang = (globalThis.navigator?.language ?? 'C').replace('-', '_') + '.UTF-8'; var env = { 'USER': 'web_user', 'LOGNAME': 'web_user', @@ -3882,45 +3813,41 @@ function createWasm() { return getEnvStrings.strings; }; - var stringToAscii = (str, buffer) => { - for (var i = 0; i < str.length; ++i) { - HEAP8[buffer++] = str.charCodeAt(i); - } - // Null-terminate the string - HEAP8[buffer] = 0; - }; + var _environ_get = (__environ, environ_buf) => { var bufSize = 0; - getEnvStrings().forEach((string, i) => { + var envp = 0; + for (var string of getEnvStrings()) { var ptr = environ_buf + bufSize; - HEAPU32[(((__environ)+(i*4))>>2)] = ptr; - stringToAscii(string, ptr); - bufSize += string.length + 1; - }); + HEAPU32[(((__environ)+(envp))>>2)] = ptr; + bufSize += stringToUTF8(string, ptr, Infinity) + 1; + envp += 4; + } return 0; }; + + var _environ_sizes_get = (penviron_count, penviron_buf_size) => { var strings = getEnvStrings(); HEAPU32[((penviron_count)>>2)] = strings.length; var bufSize = 0; - strings.forEach((string) => bufSize += string.length + 1); + for (var string of strings) { + bufSize += lengthBytesUTF8(string) + 1; + } HEAPU32[((penviron_buf_size)>>2)] = bufSize; return 0; }; - var runtimeKeepaliveCounter = 0; - var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var keepRuntimeAlive = () => true; var _proc_exit = (code) => { EXITSTATUS = code; if (!keepRuntimeAlive()) { - Module['onExit']?.(code); ABORT = true; } quit_(code, new ExitStatus(code)); }; - /** @suppress {duplicate } */ /** @param {boolean|number=} implicit */ var exitJS = (status, implicit) => { EXITSTATUS = status; @@ -3936,11 +3863,15 @@ function createWasm() { FS.close(stream); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } } + + + + function _fd_fdstat_get(fd, pbuf) { try { @@ -3962,11 +3893,13 @@ function createWasm() { HEAP64[(((pbuf)+(16))>>3)] = BigInt(rightsInheriting); return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } } + + /** @param {number=} offset */ var doReadv = (stream, iov, iovcnt, offset) => { var ret = 0; @@ -3974,17 +3907,29 @@ function createWasm() { var ptr = HEAPU32[((iov)>>2)]; var len = HEAPU32[(((iov)+(4))>>2)]; iov += 8; - var curr = FS.read(stream, HEAP8, ptr, len, offset); + try { + var curr = FS.read(stream, HEAP8, ptr, len, offset); + } catch (e) { + // On a non-blocking stream a subsequent read may would-block after we + // already gathered data. POSIX readv is a single gather-read: return + // what we have rather than failing the whole call. + if (ret > 0 && e instanceof FS.ErrnoError && + (e.errno == 6 || e.errno == 6)) { + break; + } + throw e; + } if (curr < 0) return -1; ret += curr; if (curr < len) break; // nothing more to read - if (typeof offset != 'undefined') { + if (typeof offset !== 'undefined') { offset += curr; } } return ret; }; + function _fd_read(fd, iov, iovcnt, pnum) { try { @@ -3993,26 +3938,28 @@ function createWasm() { HEAPU32[((pnum)>>2)] = num; return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } } + + function _fd_seek(fd, offset, whence, newOffset) { offset = bigintToI53Checked(offset); - + try { - if (isNaN(offset)) return 61; + if (isNaN(offset)) return 22; var stream = SYSCALLS.getStreamFromFD(fd); FS.llseek(stream, offset, whence); HEAP64[((newOffset)>>3)] = BigInt(stream.position); - if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state + if (stream.getdents && !offset && whence === 0) stream.getdents = null; // reset readdir state return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } ; @@ -4022,37 +3969,43 @@ function createWasm() { try { var stream = SYSCALLS.getStreamFromFD(fd); - if (stream.stream_ops?.fsync) { - return stream.stream_ops.fsync(stream); - } - return 0; // we can't do anything synchronously; the in-memory FS is already synced to + var rtn = stream.stream_ops?.fsync?.(stream); + return rtn; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } } + + + /** @param {number=} offset */ var doWritev = (stream, iov, iovcnt, offset) => { - var ret = 0; - for (var i = 0; i < iovcnt; i++) { + // Gather all iovecs into one contiguous buffer and issue a single + // FS.write, matching POSIX writev's single gather-write semantics (as + // __syscall_sendmsg already does). Per-iovec writes fragment a stream + // socket send into multiple segments, breaking stream byte semantics. + if (iovcnt == 1) { + // Single iovec: write directly from HEAP8, no gather buffer needed. + return FS.write(stream, HEAP8, HEAPU32[((iov)>>2)], HEAPU32[(((iov)+(4))>>2)], offset); + } + var total = 0; + for (var i = 0, p = iov; i < iovcnt; i++, p += 8) { + total += HEAPU32[(((p)+(4))>>2)]; + } + var view = new Uint8Array(total); + var voff = 0; + for (var i = 0; i < iovcnt; i++, iov += 8) { var ptr = HEAPU32[((iov)>>2)]; var len = HEAPU32[(((iov)+(4))>>2)]; - iov += 8; - var curr = FS.write(stream, HEAP8, ptr, len, offset); - if (curr < 0) return -1; - ret += curr; - if (curr < len) { - // No more space to write. - break; - } - if (typeof offset != 'undefined') { - offset += curr; - } + view.set(HEAPU8.subarray(ptr, ptr + len), voff); + voff += len; } - return ret; + return FS.write(stream, view, 0, total, offset); }; + function _fd_write(fd, iov, iovcnt, pnum) { try { @@ -4061,22 +4014,513 @@ function createWasm() { HEAPU32[((pnum)>>2)] = num; return 0; } catch (e) { - if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + if (typeof FS === 'undefined' || !(e.name === 'ErrnoError')) throw e; return e.errno; } } + + + + + + + /** @type {!Float32Array} */ + var HEAPF32; + + /** @type {!Float64Array} */ + var HEAPF64; + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + + + + + + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + + + + + /** not-@type {!BigUint64Array} */ + var HEAPU64; + FS.createPreloadedFile = FS_createPreloadedFile; - FS.staticInit(); - // Set module methods based on EXPORTED_RUNTIME_METHODS - ; + FS.preloadFile = FS_preloadFile; + FS.staticInit();; +// End JS library code + +// include: postlibrary.js +// This file is included after the automatically-generated JS library code +// but before the wasm module is created. + +{ + + // Begin ATMODULES hooks + +if (Module['print']) out = Module['print']; +if (Module['printErr']) err = Module['printErr']; +if (Module['wasmBinary']) wasmBinary = Module['wasmBinary']; + // End ATMODULES hooks + + + + +} + +// Begin runtime exports + // End runtime exports + // Begin JS library exports + // End JS library exports + +// end include: postlibrary.js + + +// Imports from the Wasm binary. +var _sqlite3_vfs_find, + _sqlite3_free, + _sqlite3_finalize, + _sqlite3_exec, + _sqlite3_errmsg, + _sqlite3_strglob, + _sqlite3_prepare_v2, + _sqlite3_expanded_sql, + _sqlite3_step, + _sqlite3_column_text, + _sqlite3_column_count, + _sqlite3_column_type, + _sqlite3_column_bytes, + _sqlite3_column_blob, + _sqlite3_sql, + _sqlite3_reset, + _sqlite3_bind_int64, + _sqlite3_bind_int, + _sqlite3_bind_text, + _sqlite3_libversion_number, + _sqlite3_bind_double, + _sqlite3_malloc, + _sqlite3_libversion, + _sqlite3_sourceid, + _malloc, + _sqlite3_initialize, + _sqlite3_open_v2, + _sqlite3_file_control, + _sqlite3_create_function, + _sqlite3_db_status, + _sqlite3_status, + _free, + _sqlite3_stricmp, + _sqlite3_result_int64, + _wasm_main, + _sqlite3_status64, + _sqlite3_msize, + _sqlite3_vfs_register, + _sqlite3_vfs_unregister, + _sqlite3_malloc64, + _sqlite3_realloc, + _sqlite3_realloc64, + _sqlite3_value_text, + _sqlite3_randomness, + _sqlite3_strnicmp, + _sqlite3_uri_parameter, + _sqlite3_uri_boolean, + _sqlite3_serialize, + _sqlite3_column_int64, + _sqlite3_column_int, + _sqlite3_column_name, + _sqlite3_deserialize, + _sqlite3_clear_bindings, + _sqlite3_value_blob, + _sqlite3_value_bytes, + _sqlite3_value_double, + _sqlite3_value_int, + _sqlite3_value_int64, + _sqlite3_value_subtype, + _sqlite3_value_pointer, + _sqlite3_value_type, + _sqlite3_value_nochange, + _sqlite3_value_frombind, + _sqlite3_value_dup, + _sqlite3_value_free, + _sqlite3_result_blob, + _sqlite3_result_error_toobig, + _sqlite3_result_error_nomem, + _sqlite3_result_double, + _sqlite3_result_error, + _sqlite3_result_int, + _sqlite3_result_null, + _sqlite3_result_pointer, + _sqlite3_result_subtype, + _sqlite3_result_text, + _sqlite3_result_zeroblob, + _sqlite3_result_zeroblob64, + _sqlite3_result_error_code, + _sqlite3_user_data, + _sqlite3_context_db_handle, + _sqlite3_vtab_nochange, + _sqlite3_vtab_in_first, + _sqlite3_vtab_in_next, + _sqlite3_aggregate_context, + _sqlite3_get_auxdata, + _sqlite3_set_auxdata, + _sqlite3_data_count, + _sqlite3_column_double, + _sqlite3_column_value, + _sqlite3_column_decltype, + _sqlite3_bind_blob, + _sqlite3_bind_null, + _sqlite3_bind_pointer, + _sqlite3_bind_parameter_count, + _sqlite3_bind_parameter_name, + _sqlite3_bind_parameter_index, + _sqlite3_db_handle, + _sqlite3_stmt_readonly, + _sqlite3_stmt_isexplain, + _sqlite3_stmt_explain, + _sqlite3_stmt_busy, + _sqlite3_stmt_status, + _sqlite3_value_numeric_type, + _sqlite3_strlike, + _sqlite3_auto_extension, + _sqlite3_cancel_auto_extension, + _sqlite3_reset_auto_extension, + _sqlite3_prepare_v3, + _sqlite3_vtab_on_conflict, + _sqlite3_vtab_collation, + _sqlite3_vtab_in, + _sqlite3_vtab_rhs_value, + _sqlite3_vtab_distinct, + _sqlite3_keyword_name, + _sqlite3_keyword_count, + _sqlite3_keyword_check, + _sqlite3_complete, + _sqlite3_shutdown, + _sqlite3_last_insert_rowid, + _sqlite3_set_last_insert_rowid, + _sqlite3_changes64, + _sqlite3_changes, + _sqlite3_total_changes64, + _sqlite3_total_changes, + _sqlite3_txn_state, + _sqlite3_close_v2, + _sqlite3_busy_handler, + _sqlite3_busy_timeout, + _sqlite3_interrupt, + _sqlite3_is_interrupted, + _sqlite3_create_function_v2, + _sqlite3_overload_function, + _sqlite3_trace_v2, + _sqlite3_commit_hook, + _sqlite3_update_hook, + _sqlite3_rollback_hook, + _sqlite3_error_offset, + _sqlite3_errcode, + _sqlite3_extended_errcode, + _sqlite3_errstr, + _sqlite3_limit, + _sqlite3_open, + _sqlite3_create_collation, + _sqlite3_create_collation_v2, + _sqlite3_collation_needed, + _sqlite3_get_autocommit, + _sqlite3_table_column_metadata, + _sqlite3_extended_result_codes, + _sqlite3_uri_key, + _sqlite3_uri_int64, + _sqlite3_db_name, + _sqlite3_db_filename, + _sqlite3_db_readonly, + _sqlite3_compileoption_used, + _sqlite3_compileoption_get, + _sqlite3__wasm_pstack_ptr, + _sqlite3__wasm_pstack_restore, + _sqlite3__wasm_pstack_alloc, + _sqlite3__wasm_pstack_remaining, + _sqlite3__wasm_pstack_quota, + _sqlite3__wasm_db_error, + _sqlite3__wasm_test_struct, + _sqlite3__wasm_enum_json, + _sqlite3__wasm_vfs_unlink, + _sqlite3__wasm_db_vfs, + _sqlite3__wasm_db_reset, + _sqlite3__wasm_db_export_chunked, + _sqlite3__wasm_db_serialize, + _sqlite3__wasm_vfs_create_file, + _sqlite3__wasm_posix_create_file, + _sqlite3__wasm_kvvfsMakeKeyOnPstack, + _sqlite3__wasm_kvvfs_methods, + _sqlite3__wasm_vtab_config, + _sqlite3__wasm_db_config_ip, + _sqlite3__wasm_db_config_pii, + _sqlite3__wasm_db_config_s, + _sqlite3__wasm_config_i, + _sqlite3__wasm_config_ii, + _sqlite3__wasm_config_j, + _sqlite3__wasm_qfmt_token, + _sqlite3__wasm_init_wasmfs, + _sqlite3__wasm_test_intptr, + _sqlite3__wasm_test_voidptr, + _sqlite3__wasm_test_int64_max, + _sqlite3__wasm_test_int64_min, + _sqlite3__wasm_test_int64_times2, + _sqlite3__wasm_test_int64_minmax, + _sqlite3__wasm_test_int64ptr, + _sqlite3__wasm_test_stack_overflow, + _sqlite3__wasm_test_str_hello, + _sqlite3__wasm_SQLTester_strglob, + _realloc, + _emscripten_builtin_memalign, + _setThrew, + __emscripten_stack_restore, + __emscripten_stack_alloc, + _emscripten_stack_get_current, + memory, + __indirect_function_table, + wasmMemory; + + +function assignWasmExports(wasmExports) { + _sqlite3_vfs_find = Module['_sqlite3_vfs_find'] = wasmExports['sqlite3_vfs_find']; + _sqlite3_free = Module['_sqlite3_free'] = wasmExports['sqlite3_free']; + _sqlite3_finalize = Module['_sqlite3_finalize'] = wasmExports['sqlite3_finalize']; + _sqlite3_exec = Module['_sqlite3_exec'] = wasmExports['sqlite3_exec']; + _sqlite3_errmsg = Module['_sqlite3_errmsg'] = wasmExports['sqlite3_errmsg']; + _sqlite3_strglob = Module['_sqlite3_strglob'] = wasmExports['sqlite3_strglob']; + _sqlite3_prepare_v2 = Module['_sqlite3_prepare_v2'] = wasmExports['sqlite3_prepare_v2']; + _sqlite3_expanded_sql = Module['_sqlite3_expanded_sql'] = wasmExports['sqlite3_expanded_sql']; + _sqlite3_step = Module['_sqlite3_step'] = wasmExports['sqlite3_step']; + _sqlite3_column_text = Module['_sqlite3_column_text'] = wasmExports['sqlite3_column_text']; + _sqlite3_column_count = Module['_sqlite3_column_count'] = wasmExports['sqlite3_column_count']; + _sqlite3_column_type = Module['_sqlite3_column_type'] = wasmExports['sqlite3_column_type']; + _sqlite3_column_bytes = Module['_sqlite3_column_bytes'] = wasmExports['sqlite3_column_bytes']; + _sqlite3_column_blob = Module['_sqlite3_column_blob'] = wasmExports['sqlite3_column_blob']; + _sqlite3_sql = Module['_sqlite3_sql'] = wasmExports['sqlite3_sql']; + _sqlite3_reset = Module['_sqlite3_reset'] = wasmExports['sqlite3_reset']; + _sqlite3_bind_int64 = Module['_sqlite3_bind_int64'] = wasmExports['sqlite3_bind_int64']; + _sqlite3_bind_int = Module['_sqlite3_bind_int'] = wasmExports['sqlite3_bind_int']; + _sqlite3_bind_text = Module['_sqlite3_bind_text'] = wasmExports['sqlite3_bind_text']; + _sqlite3_libversion_number = Module['_sqlite3_libversion_number'] = wasmExports['sqlite3_libversion_number']; + _sqlite3_bind_double = Module['_sqlite3_bind_double'] = wasmExports['sqlite3_bind_double']; + _sqlite3_malloc = Module['_sqlite3_malloc'] = wasmExports['sqlite3_malloc']; + _sqlite3_libversion = Module['_sqlite3_libversion'] = wasmExports['sqlite3_libversion']; + _sqlite3_sourceid = Module['_sqlite3_sourceid'] = wasmExports['sqlite3_sourceid']; + _malloc = Module['_malloc'] = wasmExports['malloc']; + _sqlite3_initialize = Module['_sqlite3_initialize'] = wasmExports['sqlite3_initialize']; + _sqlite3_open_v2 = Module['_sqlite3_open_v2'] = wasmExports['sqlite3_open_v2']; + _sqlite3_file_control = Module['_sqlite3_file_control'] = wasmExports['sqlite3_file_control']; + _sqlite3_create_function = Module['_sqlite3_create_function'] = wasmExports['sqlite3_create_function']; + _sqlite3_db_status = Module['_sqlite3_db_status'] = wasmExports['sqlite3_db_status']; + _sqlite3_status = Module['_sqlite3_status'] = wasmExports['sqlite3_status']; + _free = Module['_free'] = wasmExports['free']; + _sqlite3_stricmp = Module['_sqlite3_stricmp'] = wasmExports['sqlite3_stricmp']; + _sqlite3_result_int64 = Module['_sqlite3_result_int64'] = wasmExports['sqlite3_result_int64']; + _wasm_main = Module['_wasm_main'] = wasmExports['wasm_main']; + _sqlite3_status64 = Module['_sqlite3_status64'] = wasmExports['sqlite3_status64']; + _sqlite3_msize = Module['_sqlite3_msize'] = wasmExports['sqlite3_msize']; + _sqlite3_vfs_register = Module['_sqlite3_vfs_register'] = wasmExports['sqlite3_vfs_register']; + _sqlite3_vfs_unregister = Module['_sqlite3_vfs_unregister'] = wasmExports['sqlite3_vfs_unregister']; + _sqlite3_malloc64 = Module['_sqlite3_malloc64'] = wasmExports['sqlite3_malloc64']; + _sqlite3_realloc = Module['_sqlite3_realloc'] = wasmExports['sqlite3_realloc']; + _sqlite3_realloc64 = Module['_sqlite3_realloc64'] = wasmExports['sqlite3_realloc64']; + _sqlite3_value_text = Module['_sqlite3_value_text'] = wasmExports['sqlite3_value_text']; + _sqlite3_randomness = Module['_sqlite3_randomness'] = wasmExports['sqlite3_randomness']; + _sqlite3_strnicmp = Module['_sqlite3_strnicmp'] = wasmExports['sqlite3_strnicmp']; + _sqlite3_uri_parameter = Module['_sqlite3_uri_parameter'] = wasmExports['sqlite3_uri_parameter']; + _sqlite3_uri_boolean = Module['_sqlite3_uri_boolean'] = wasmExports['sqlite3_uri_boolean']; + _sqlite3_serialize = Module['_sqlite3_serialize'] = wasmExports['sqlite3_serialize']; + _sqlite3_column_int64 = Module['_sqlite3_column_int64'] = wasmExports['sqlite3_column_int64']; + _sqlite3_column_int = Module['_sqlite3_column_int'] = wasmExports['sqlite3_column_int']; + _sqlite3_column_name = Module['_sqlite3_column_name'] = wasmExports['sqlite3_column_name']; + _sqlite3_deserialize = Module['_sqlite3_deserialize'] = wasmExports['sqlite3_deserialize']; + _sqlite3_clear_bindings = Module['_sqlite3_clear_bindings'] = wasmExports['sqlite3_clear_bindings']; + _sqlite3_value_blob = Module['_sqlite3_value_blob'] = wasmExports['sqlite3_value_blob']; + _sqlite3_value_bytes = Module['_sqlite3_value_bytes'] = wasmExports['sqlite3_value_bytes']; + _sqlite3_value_double = Module['_sqlite3_value_double'] = wasmExports['sqlite3_value_double']; + _sqlite3_value_int = Module['_sqlite3_value_int'] = wasmExports['sqlite3_value_int']; + _sqlite3_value_int64 = Module['_sqlite3_value_int64'] = wasmExports['sqlite3_value_int64']; + _sqlite3_value_subtype = Module['_sqlite3_value_subtype'] = wasmExports['sqlite3_value_subtype']; + _sqlite3_value_pointer = Module['_sqlite3_value_pointer'] = wasmExports['sqlite3_value_pointer']; + _sqlite3_value_type = Module['_sqlite3_value_type'] = wasmExports['sqlite3_value_type']; + _sqlite3_value_nochange = Module['_sqlite3_value_nochange'] = wasmExports['sqlite3_value_nochange']; + _sqlite3_value_frombind = Module['_sqlite3_value_frombind'] = wasmExports['sqlite3_value_frombind']; + _sqlite3_value_dup = Module['_sqlite3_value_dup'] = wasmExports['sqlite3_value_dup']; + _sqlite3_value_free = Module['_sqlite3_value_free'] = wasmExports['sqlite3_value_free']; + _sqlite3_result_blob = Module['_sqlite3_result_blob'] = wasmExports['sqlite3_result_blob']; + _sqlite3_result_error_toobig = Module['_sqlite3_result_error_toobig'] = wasmExports['sqlite3_result_error_toobig']; + _sqlite3_result_error_nomem = Module['_sqlite3_result_error_nomem'] = wasmExports['sqlite3_result_error_nomem']; + _sqlite3_result_double = Module['_sqlite3_result_double'] = wasmExports['sqlite3_result_double']; + _sqlite3_result_error = Module['_sqlite3_result_error'] = wasmExports['sqlite3_result_error']; + _sqlite3_result_int = Module['_sqlite3_result_int'] = wasmExports['sqlite3_result_int']; + _sqlite3_result_null = Module['_sqlite3_result_null'] = wasmExports['sqlite3_result_null']; + _sqlite3_result_pointer = Module['_sqlite3_result_pointer'] = wasmExports['sqlite3_result_pointer']; + _sqlite3_result_subtype = Module['_sqlite3_result_subtype'] = wasmExports['sqlite3_result_subtype']; + _sqlite3_result_text = Module['_sqlite3_result_text'] = wasmExports['sqlite3_result_text']; + _sqlite3_result_zeroblob = Module['_sqlite3_result_zeroblob'] = wasmExports['sqlite3_result_zeroblob']; + _sqlite3_result_zeroblob64 = Module['_sqlite3_result_zeroblob64'] = wasmExports['sqlite3_result_zeroblob64']; + _sqlite3_result_error_code = Module['_sqlite3_result_error_code'] = wasmExports['sqlite3_result_error_code']; + _sqlite3_user_data = Module['_sqlite3_user_data'] = wasmExports['sqlite3_user_data']; + _sqlite3_context_db_handle = Module['_sqlite3_context_db_handle'] = wasmExports['sqlite3_context_db_handle']; + _sqlite3_vtab_nochange = Module['_sqlite3_vtab_nochange'] = wasmExports['sqlite3_vtab_nochange']; + _sqlite3_vtab_in_first = Module['_sqlite3_vtab_in_first'] = wasmExports['sqlite3_vtab_in_first']; + _sqlite3_vtab_in_next = Module['_sqlite3_vtab_in_next'] = wasmExports['sqlite3_vtab_in_next']; + _sqlite3_aggregate_context = Module['_sqlite3_aggregate_context'] = wasmExports['sqlite3_aggregate_context']; + _sqlite3_get_auxdata = Module['_sqlite3_get_auxdata'] = wasmExports['sqlite3_get_auxdata']; + _sqlite3_set_auxdata = Module['_sqlite3_set_auxdata'] = wasmExports['sqlite3_set_auxdata']; + _sqlite3_data_count = Module['_sqlite3_data_count'] = wasmExports['sqlite3_data_count']; + _sqlite3_column_double = Module['_sqlite3_column_double'] = wasmExports['sqlite3_column_double']; + _sqlite3_column_value = Module['_sqlite3_column_value'] = wasmExports['sqlite3_column_value']; + _sqlite3_column_decltype = Module['_sqlite3_column_decltype'] = wasmExports['sqlite3_column_decltype']; + _sqlite3_bind_blob = Module['_sqlite3_bind_blob'] = wasmExports['sqlite3_bind_blob']; + _sqlite3_bind_null = Module['_sqlite3_bind_null'] = wasmExports['sqlite3_bind_null']; + _sqlite3_bind_pointer = Module['_sqlite3_bind_pointer'] = wasmExports['sqlite3_bind_pointer']; + _sqlite3_bind_parameter_count = Module['_sqlite3_bind_parameter_count'] = wasmExports['sqlite3_bind_parameter_count']; + _sqlite3_bind_parameter_name = Module['_sqlite3_bind_parameter_name'] = wasmExports['sqlite3_bind_parameter_name']; + _sqlite3_bind_parameter_index = Module['_sqlite3_bind_parameter_index'] = wasmExports['sqlite3_bind_parameter_index']; + _sqlite3_db_handle = Module['_sqlite3_db_handle'] = wasmExports['sqlite3_db_handle']; + _sqlite3_stmt_readonly = Module['_sqlite3_stmt_readonly'] = wasmExports['sqlite3_stmt_readonly']; + _sqlite3_stmt_isexplain = Module['_sqlite3_stmt_isexplain'] = wasmExports['sqlite3_stmt_isexplain']; + _sqlite3_stmt_explain = Module['_sqlite3_stmt_explain'] = wasmExports['sqlite3_stmt_explain']; + _sqlite3_stmt_busy = Module['_sqlite3_stmt_busy'] = wasmExports['sqlite3_stmt_busy']; + _sqlite3_stmt_status = Module['_sqlite3_stmt_status'] = wasmExports['sqlite3_stmt_status']; + _sqlite3_value_numeric_type = Module['_sqlite3_value_numeric_type'] = wasmExports['sqlite3_value_numeric_type']; + _sqlite3_strlike = Module['_sqlite3_strlike'] = wasmExports['sqlite3_strlike']; + _sqlite3_auto_extension = Module['_sqlite3_auto_extension'] = wasmExports['sqlite3_auto_extension']; + _sqlite3_cancel_auto_extension = Module['_sqlite3_cancel_auto_extension'] = wasmExports['sqlite3_cancel_auto_extension']; + _sqlite3_reset_auto_extension = Module['_sqlite3_reset_auto_extension'] = wasmExports['sqlite3_reset_auto_extension']; + _sqlite3_prepare_v3 = Module['_sqlite3_prepare_v3'] = wasmExports['sqlite3_prepare_v3']; + _sqlite3_vtab_on_conflict = Module['_sqlite3_vtab_on_conflict'] = wasmExports['sqlite3_vtab_on_conflict']; + _sqlite3_vtab_collation = Module['_sqlite3_vtab_collation'] = wasmExports['sqlite3_vtab_collation']; + _sqlite3_vtab_in = Module['_sqlite3_vtab_in'] = wasmExports['sqlite3_vtab_in']; + _sqlite3_vtab_rhs_value = Module['_sqlite3_vtab_rhs_value'] = wasmExports['sqlite3_vtab_rhs_value']; + _sqlite3_vtab_distinct = Module['_sqlite3_vtab_distinct'] = wasmExports['sqlite3_vtab_distinct']; + _sqlite3_keyword_name = Module['_sqlite3_keyword_name'] = wasmExports['sqlite3_keyword_name']; + _sqlite3_keyword_count = Module['_sqlite3_keyword_count'] = wasmExports['sqlite3_keyword_count']; + _sqlite3_keyword_check = Module['_sqlite3_keyword_check'] = wasmExports['sqlite3_keyword_check']; + _sqlite3_complete = Module['_sqlite3_complete'] = wasmExports['sqlite3_complete']; + _sqlite3_shutdown = Module['_sqlite3_shutdown'] = wasmExports['sqlite3_shutdown']; + _sqlite3_last_insert_rowid = Module['_sqlite3_last_insert_rowid'] = wasmExports['sqlite3_last_insert_rowid']; + _sqlite3_set_last_insert_rowid = Module['_sqlite3_set_last_insert_rowid'] = wasmExports['sqlite3_set_last_insert_rowid']; + _sqlite3_changes64 = Module['_sqlite3_changes64'] = wasmExports['sqlite3_changes64']; + _sqlite3_changes = Module['_sqlite3_changes'] = wasmExports['sqlite3_changes']; + _sqlite3_total_changes64 = Module['_sqlite3_total_changes64'] = wasmExports['sqlite3_total_changes64']; + _sqlite3_total_changes = Module['_sqlite3_total_changes'] = wasmExports['sqlite3_total_changes']; + _sqlite3_txn_state = Module['_sqlite3_txn_state'] = wasmExports['sqlite3_txn_state']; + _sqlite3_close_v2 = Module['_sqlite3_close_v2'] = wasmExports['sqlite3_close_v2']; + _sqlite3_busy_handler = Module['_sqlite3_busy_handler'] = wasmExports['sqlite3_busy_handler']; + _sqlite3_busy_timeout = Module['_sqlite3_busy_timeout'] = wasmExports['sqlite3_busy_timeout']; + _sqlite3_interrupt = Module['_sqlite3_interrupt'] = wasmExports['sqlite3_interrupt']; + _sqlite3_is_interrupted = Module['_sqlite3_is_interrupted'] = wasmExports['sqlite3_is_interrupted']; + _sqlite3_create_function_v2 = Module['_sqlite3_create_function_v2'] = wasmExports['sqlite3_create_function_v2']; + _sqlite3_overload_function = Module['_sqlite3_overload_function'] = wasmExports['sqlite3_overload_function']; + _sqlite3_trace_v2 = Module['_sqlite3_trace_v2'] = wasmExports['sqlite3_trace_v2']; + _sqlite3_commit_hook = Module['_sqlite3_commit_hook'] = wasmExports['sqlite3_commit_hook']; + _sqlite3_update_hook = Module['_sqlite3_update_hook'] = wasmExports['sqlite3_update_hook']; + _sqlite3_rollback_hook = Module['_sqlite3_rollback_hook'] = wasmExports['sqlite3_rollback_hook']; + _sqlite3_error_offset = Module['_sqlite3_error_offset'] = wasmExports['sqlite3_error_offset']; + _sqlite3_errcode = Module['_sqlite3_errcode'] = wasmExports['sqlite3_errcode']; + _sqlite3_extended_errcode = Module['_sqlite3_extended_errcode'] = wasmExports['sqlite3_extended_errcode']; + _sqlite3_errstr = Module['_sqlite3_errstr'] = wasmExports['sqlite3_errstr']; + _sqlite3_limit = Module['_sqlite3_limit'] = wasmExports['sqlite3_limit']; + _sqlite3_open = Module['_sqlite3_open'] = wasmExports['sqlite3_open']; + _sqlite3_create_collation = Module['_sqlite3_create_collation'] = wasmExports['sqlite3_create_collation']; + _sqlite3_create_collation_v2 = Module['_sqlite3_create_collation_v2'] = wasmExports['sqlite3_create_collation_v2']; + _sqlite3_collation_needed = Module['_sqlite3_collation_needed'] = wasmExports['sqlite3_collation_needed']; + _sqlite3_get_autocommit = Module['_sqlite3_get_autocommit'] = wasmExports['sqlite3_get_autocommit']; + _sqlite3_table_column_metadata = Module['_sqlite3_table_column_metadata'] = wasmExports['sqlite3_table_column_metadata']; + _sqlite3_extended_result_codes = Module['_sqlite3_extended_result_codes'] = wasmExports['sqlite3_extended_result_codes']; + _sqlite3_uri_key = Module['_sqlite3_uri_key'] = wasmExports['sqlite3_uri_key']; + _sqlite3_uri_int64 = Module['_sqlite3_uri_int64'] = wasmExports['sqlite3_uri_int64']; + _sqlite3_db_name = Module['_sqlite3_db_name'] = wasmExports['sqlite3_db_name']; + _sqlite3_db_filename = Module['_sqlite3_db_filename'] = wasmExports['sqlite3_db_filename']; + _sqlite3_db_readonly = Module['_sqlite3_db_readonly'] = wasmExports['sqlite3_db_readonly']; + _sqlite3_compileoption_used = Module['_sqlite3_compileoption_used'] = wasmExports['sqlite3_compileoption_used']; + _sqlite3_compileoption_get = Module['_sqlite3_compileoption_get'] = wasmExports['sqlite3_compileoption_get']; + _sqlite3__wasm_pstack_ptr = Module['_sqlite3__wasm_pstack_ptr'] = wasmExports['sqlite3__wasm_pstack_ptr']; + _sqlite3__wasm_pstack_restore = Module['_sqlite3__wasm_pstack_restore'] = wasmExports['sqlite3__wasm_pstack_restore']; + _sqlite3__wasm_pstack_alloc = Module['_sqlite3__wasm_pstack_alloc'] = wasmExports['sqlite3__wasm_pstack_alloc']; + _sqlite3__wasm_pstack_remaining = Module['_sqlite3__wasm_pstack_remaining'] = wasmExports['sqlite3__wasm_pstack_remaining']; + _sqlite3__wasm_pstack_quota = Module['_sqlite3__wasm_pstack_quota'] = wasmExports['sqlite3__wasm_pstack_quota']; + _sqlite3__wasm_db_error = Module['_sqlite3__wasm_db_error'] = wasmExports['sqlite3__wasm_db_error']; + _sqlite3__wasm_test_struct = Module['_sqlite3__wasm_test_struct'] = wasmExports['sqlite3__wasm_test_struct']; + _sqlite3__wasm_enum_json = Module['_sqlite3__wasm_enum_json'] = wasmExports['sqlite3__wasm_enum_json']; + _sqlite3__wasm_vfs_unlink = Module['_sqlite3__wasm_vfs_unlink'] = wasmExports['sqlite3__wasm_vfs_unlink']; + _sqlite3__wasm_db_vfs = Module['_sqlite3__wasm_db_vfs'] = wasmExports['sqlite3__wasm_db_vfs']; + _sqlite3__wasm_db_reset = Module['_sqlite3__wasm_db_reset'] = wasmExports['sqlite3__wasm_db_reset']; + _sqlite3__wasm_db_export_chunked = Module['_sqlite3__wasm_db_export_chunked'] = wasmExports['sqlite3__wasm_db_export_chunked']; + _sqlite3__wasm_db_serialize = Module['_sqlite3__wasm_db_serialize'] = wasmExports['sqlite3__wasm_db_serialize']; + _sqlite3__wasm_vfs_create_file = Module['_sqlite3__wasm_vfs_create_file'] = wasmExports['sqlite3__wasm_vfs_create_file']; + _sqlite3__wasm_posix_create_file = Module['_sqlite3__wasm_posix_create_file'] = wasmExports['sqlite3__wasm_posix_create_file']; + _sqlite3__wasm_kvvfsMakeKeyOnPstack = Module['_sqlite3__wasm_kvvfsMakeKeyOnPstack'] = wasmExports['sqlite3__wasm_kvvfsMakeKeyOnPstack']; + _sqlite3__wasm_kvvfs_methods = Module['_sqlite3__wasm_kvvfs_methods'] = wasmExports['sqlite3__wasm_kvvfs_methods']; + _sqlite3__wasm_vtab_config = Module['_sqlite3__wasm_vtab_config'] = wasmExports['sqlite3__wasm_vtab_config']; + _sqlite3__wasm_db_config_ip = Module['_sqlite3__wasm_db_config_ip'] = wasmExports['sqlite3__wasm_db_config_ip']; + _sqlite3__wasm_db_config_pii = Module['_sqlite3__wasm_db_config_pii'] = wasmExports['sqlite3__wasm_db_config_pii']; + _sqlite3__wasm_db_config_s = Module['_sqlite3__wasm_db_config_s'] = wasmExports['sqlite3__wasm_db_config_s']; + _sqlite3__wasm_config_i = Module['_sqlite3__wasm_config_i'] = wasmExports['sqlite3__wasm_config_i']; + _sqlite3__wasm_config_ii = Module['_sqlite3__wasm_config_ii'] = wasmExports['sqlite3__wasm_config_ii']; + _sqlite3__wasm_config_j = Module['_sqlite3__wasm_config_j'] = wasmExports['sqlite3__wasm_config_j']; + _sqlite3__wasm_qfmt_token = Module['_sqlite3__wasm_qfmt_token'] = wasmExports['sqlite3__wasm_qfmt_token']; + _sqlite3__wasm_init_wasmfs = Module['_sqlite3__wasm_init_wasmfs'] = wasmExports['sqlite3__wasm_init_wasmfs']; + _sqlite3__wasm_test_intptr = Module['_sqlite3__wasm_test_intptr'] = wasmExports['sqlite3__wasm_test_intptr']; + _sqlite3__wasm_test_voidptr = Module['_sqlite3__wasm_test_voidptr'] = wasmExports['sqlite3__wasm_test_voidptr']; + _sqlite3__wasm_test_int64_max = Module['_sqlite3__wasm_test_int64_max'] = wasmExports['sqlite3__wasm_test_int64_max']; + _sqlite3__wasm_test_int64_min = Module['_sqlite3__wasm_test_int64_min'] = wasmExports['sqlite3__wasm_test_int64_min']; + _sqlite3__wasm_test_int64_times2 = Module['_sqlite3__wasm_test_int64_times2'] = wasmExports['sqlite3__wasm_test_int64_times2']; + _sqlite3__wasm_test_int64_minmax = Module['_sqlite3__wasm_test_int64_minmax'] = wasmExports['sqlite3__wasm_test_int64_minmax']; + _sqlite3__wasm_test_int64ptr = Module['_sqlite3__wasm_test_int64ptr'] = wasmExports['sqlite3__wasm_test_int64ptr']; + _sqlite3__wasm_test_stack_overflow = Module['_sqlite3__wasm_test_stack_overflow'] = wasmExports['sqlite3__wasm_test_stack_overflow']; + _sqlite3__wasm_test_str_hello = Module['_sqlite3__wasm_test_str_hello'] = wasmExports['sqlite3__wasm_test_str_hello']; + _sqlite3__wasm_SQLTester_strglob = Module['_sqlite3__wasm_SQLTester_strglob'] = wasmExports['sqlite3__wasm_SQLTester_strglob']; + _realloc = Module['_realloc'] = wasmExports['realloc']; + _emscripten_builtin_memalign = wasmExports['emscripten_builtin_memalign']; + _setThrew = wasmExports['setThrew']; + __emscripten_stack_restore = wasmExports['_emscripten_stack_restore']; + __emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc']; + _emscripten_stack_get_current = wasmExports['emscripten_stack_get_current']; + memory = wasmMemory = Module['wasmMemory'] = wasmExports['memory']; + __indirect_function_table = wasmExports['__indirect_function_table']; +} - // This error may happen quite a bit. To avoid overhead we reuse it (and - // suffer a lack of stack info). - MEMFS.doesNotExistError = new FS.ErrnoError(44); - /** @suppress {checkTypes} */ - MEMFS.doesNotExistError.stack = ''; - ; var wasmImports = { /** @export */ __assert_fail: ___assert_fail, @@ -4097,6 +4541,8 @@ var wasmImports = { /** @export */ __syscall_getcwd: ___syscall_getcwd, /** @export */ + __syscall_geteuid32: ___syscall_geteuid32, + /** @export */ __syscall_ioctl: ___syscall_ioctl, /** @export */ __syscall_lstat64: ___syscall_lstat64, @@ -4117,8 +4563,6 @@ var wasmImports = { /** @export */ __syscall_utimensat: ___syscall_utimensat, /** @export */ - _emscripten_get_now_is_monotonic: __emscripten_get_now_is_monotonic, - /** @export */ _localtime_js: __localtime_js, /** @export */ _mmap_js: __mmap_js, @@ -4127,6 +4571,8 @@ var wasmImports = { /** @export */ _tzset_js: __tzset_js, /** @export */ + clock_time_get: _clock_time_get, + /** @export */ emscripten_date_now: _emscripten_date_now, /** @export */ emscripten_get_now: _emscripten_get_now, @@ -4151,274 +4597,36 @@ var wasmImports = { /** @export */ fd_write: _fd_write }; -var wasmExports = createWasm(); -var ___wasm_call_ctors = () => (___wasm_call_ctors = wasmExports['__wasm_call_ctors'])(); -var _sqlite3_vfs_find = Module['_sqlite3_vfs_find'] = (a0) => (_sqlite3_vfs_find = Module['_sqlite3_vfs_find'] = wasmExports['sqlite3_vfs_find'])(a0); -var _sqlite3_free = Module['_sqlite3_free'] = (a0) => (_sqlite3_free = Module['_sqlite3_free'] = wasmExports['sqlite3_free'])(a0); -var _sqlite3_finalize = Module['_sqlite3_finalize'] = (a0) => (_sqlite3_finalize = Module['_sqlite3_finalize'] = wasmExports['sqlite3_finalize'])(a0); -var _sqlite3_exec = Module['_sqlite3_exec'] = (a0, a1, a2, a3, a4) => (_sqlite3_exec = Module['_sqlite3_exec'] = wasmExports['sqlite3_exec'])(a0, a1, a2, a3, a4); -var _sqlite3_errmsg = Module['_sqlite3_errmsg'] = (a0) => (_sqlite3_errmsg = Module['_sqlite3_errmsg'] = wasmExports['sqlite3_errmsg'])(a0); -var _sqlite3_strglob = Module['_sqlite3_strglob'] = (a0, a1) => (_sqlite3_strglob = Module['_sqlite3_strglob'] = wasmExports['sqlite3_strglob'])(a0, a1); -var _sqlite3_prepare_v2 = Module['_sqlite3_prepare_v2'] = (a0, a1, a2, a3, a4) => (_sqlite3_prepare_v2 = Module['_sqlite3_prepare_v2'] = wasmExports['sqlite3_prepare_v2'])(a0, a1, a2, a3, a4); -var _sqlite3_expanded_sql = Module['_sqlite3_expanded_sql'] = (a0) => (_sqlite3_expanded_sql = Module['_sqlite3_expanded_sql'] = wasmExports['sqlite3_expanded_sql'])(a0); -var _sqlite3_step = Module['_sqlite3_step'] = (a0) => (_sqlite3_step = Module['_sqlite3_step'] = wasmExports['sqlite3_step'])(a0); -var _sqlite3_column_text = Module['_sqlite3_column_text'] = (a0, a1) => (_sqlite3_column_text = Module['_sqlite3_column_text'] = wasmExports['sqlite3_column_text'])(a0, a1); -var _sqlite3_column_count = Module['_sqlite3_column_count'] = (a0) => (_sqlite3_column_count = Module['_sqlite3_column_count'] = wasmExports['sqlite3_column_count'])(a0); -var _sqlite3_column_type = Module['_sqlite3_column_type'] = (a0, a1) => (_sqlite3_column_type = Module['_sqlite3_column_type'] = wasmExports['sqlite3_column_type'])(a0, a1); -var _sqlite3_column_bytes = Module['_sqlite3_column_bytes'] = (a0, a1) => (_sqlite3_column_bytes = Module['_sqlite3_column_bytes'] = wasmExports['sqlite3_column_bytes'])(a0, a1); -var _sqlite3_column_blob = Module['_sqlite3_column_blob'] = (a0, a1) => (_sqlite3_column_blob = Module['_sqlite3_column_blob'] = wasmExports['sqlite3_column_blob'])(a0, a1); -var _sqlite3_sql = Module['_sqlite3_sql'] = (a0) => (_sqlite3_sql = Module['_sqlite3_sql'] = wasmExports['sqlite3_sql'])(a0); -var _sqlite3_reset = Module['_sqlite3_reset'] = (a0) => (_sqlite3_reset = Module['_sqlite3_reset'] = wasmExports['sqlite3_reset'])(a0); -var _sqlite3_bind_int64 = Module['_sqlite3_bind_int64'] = (a0, a1, a2) => (_sqlite3_bind_int64 = Module['_sqlite3_bind_int64'] = wasmExports['sqlite3_bind_int64'])(a0, a1, a2); -var _sqlite3_bind_int = Module['_sqlite3_bind_int'] = (a0, a1, a2) => (_sqlite3_bind_int = Module['_sqlite3_bind_int'] = wasmExports['sqlite3_bind_int'])(a0, a1, a2); -var _sqlite3_bind_text = Module['_sqlite3_bind_text'] = (a0, a1, a2, a3, a4) => (_sqlite3_bind_text = Module['_sqlite3_bind_text'] = wasmExports['sqlite3_bind_text'])(a0, a1, a2, a3, a4); -var _sqlite3_libversion_number = Module['_sqlite3_libversion_number'] = () => (_sqlite3_libversion_number = Module['_sqlite3_libversion_number'] = wasmExports['sqlite3_libversion_number'])(); -var _sqlite3_bind_double = Module['_sqlite3_bind_double'] = (a0, a1, a2) => (_sqlite3_bind_double = Module['_sqlite3_bind_double'] = wasmExports['sqlite3_bind_double'])(a0, a1, a2); -var _sqlite3_malloc = Module['_sqlite3_malloc'] = (a0) => (_sqlite3_malloc = Module['_sqlite3_malloc'] = wasmExports['sqlite3_malloc'])(a0); -var _sqlite3_libversion = Module['_sqlite3_libversion'] = () => (_sqlite3_libversion = Module['_sqlite3_libversion'] = wasmExports['sqlite3_libversion'])(); -var _sqlite3_sourceid = Module['_sqlite3_sourceid'] = () => (_sqlite3_sourceid = Module['_sqlite3_sourceid'] = wasmExports['sqlite3_sourceid'])(); -var _malloc = Module['_malloc'] = (a0) => (_malloc = Module['_malloc'] = wasmExports['malloc'])(a0); -var _sqlite3_initialize = Module['_sqlite3_initialize'] = () => (_sqlite3_initialize = Module['_sqlite3_initialize'] = wasmExports['sqlite3_initialize'])(); -var _sqlite3_open_v2 = Module['_sqlite3_open_v2'] = (a0, a1, a2, a3) => (_sqlite3_open_v2 = Module['_sqlite3_open_v2'] = wasmExports['sqlite3_open_v2'])(a0, a1, a2, a3); -var _sqlite3_file_control = Module['_sqlite3_file_control'] = (a0, a1, a2, a3) => (_sqlite3_file_control = Module['_sqlite3_file_control'] = wasmExports['sqlite3_file_control'])(a0, a1, a2, a3); -var _sqlite3_create_function = Module['_sqlite3_create_function'] = (a0, a1, a2, a3, a4, a5, a6, a7) => (_sqlite3_create_function = Module['_sqlite3_create_function'] = wasmExports['sqlite3_create_function'])(a0, a1, a2, a3, a4, a5, a6, a7); -var _sqlite3_db_status = Module['_sqlite3_db_status'] = (a0, a1, a2, a3, a4) => (_sqlite3_db_status = Module['_sqlite3_db_status'] = wasmExports['sqlite3_db_status'])(a0, a1, a2, a3, a4); -var _sqlite3_status = Module['_sqlite3_status'] = (a0, a1, a2, a3) => (_sqlite3_status = Module['_sqlite3_status'] = wasmExports['sqlite3_status'])(a0, a1, a2, a3); -var _free = Module['_free'] = (a0) => (_free = Module['_free'] = wasmExports['free'])(a0); -var _sqlite3_stricmp = Module['_sqlite3_stricmp'] = (a0, a1) => (_sqlite3_stricmp = Module['_sqlite3_stricmp'] = wasmExports['sqlite3_stricmp'])(a0, a1); -var _sqlite3_result_int64 = Module['_sqlite3_result_int64'] = (a0, a1) => (_sqlite3_result_int64 = Module['_sqlite3_result_int64'] = wasmExports['sqlite3_result_int64'])(a0, a1); -var _wasm_main = Module['_wasm_main'] = (a0, a1) => (_wasm_main = Module['_wasm_main'] = wasmExports['wasm_main'])(a0, a1); -var _sqlite3_status64 = Module['_sqlite3_status64'] = (a0, a1, a2, a3) => (_sqlite3_status64 = Module['_sqlite3_status64'] = wasmExports['sqlite3_status64'])(a0, a1, a2, a3); -var _sqlite3_msize = Module['_sqlite3_msize'] = (a0) => (_sqlite3_msize = Module['_sqlite3_msize'] = wasmExports['sqlite3_msize'])(a0); -var _sqlite3_vfs_register = Module['_sqlite3_vfs_register'] = (a0, a1) => (_sqlite3_vfs_register = Module['_sqlite3_vfs_register'] = wasmExports['sqlite3_vfs_register'])(a0, a1); -var _sqlite3_vfs_unregister = Module['_sqlite3_vfs_unregister'] = (a0) => (_sqlite3_vfs_unregister = Module['_sqlite3_vfs_unregister'] = wasmExports['sqlite3_vfs_unregister'])(a0); -var _sqlite3_malloc64 = Module['_sqlite3_malloc64'] = (a0) => (_sqlite3_malloc64 = Module['_sqlite3_malloc64'] = wasmExports['sqlite3_malloc64'])(a0); -var _sqlite3_realloc = Module['_sqlite3_realloc'] = (a0, a1) => (_sqlite3_realloc = Module['_sqlite3_realloc'] = wasmExports['sqlite3_realloc'])(a0, a1); -var _sqlite3_realloc64 = Module['_sqlite3_realloc64'] = (a0, a1) => (_sqlite3_realloc64 = Module['_sqlite3_realloc64'] = wasmExports['sqlite3_realloc64'])(a0, a1); -var _sqlite3_value_text = Module['_sqlite3_value_text'] = (a0) => (_sqlite3_value_text = Module['_sqlite3_value_text'] = wasmExports['sqlite3_value_text'])(a0); -var _sqlite3_randomness = Module['_sqlite3_randomness'] = (a0, a1) => (_sqlite3_randomness = Module['_sqlite3_randomness'] = wasmExports['sqlite3_randomness'])(a0, a1); -var _sqlite3_strnicmp = Module['_sqlite3_strnicmp'] = (a0, a1, a2) => (_sqlite3_strnicmp = Module['_sqlite3_strnicmp'] = wasmExports['sqlite3_strnicmp'])(a0, a1, a2); -var _sqlite3_uri_parameter = Module['_sqlite3_uri_parameter'] = (a0, a1) => (_sqlite3_uri_parameter = Module['_sqlite3_uri_parameter'] = wasmExports['sqlite3_uri_parameter'])(a0, a1); -var _sqlite3_uri_boolean = Module['_sqlite3_uri_boolean'] = (a0, a1, a2) => (_sqlite3_uri_boolean = Module['_sqlite3_uri_boolean'] = wasmExports['sqlite3_uri_boolean'])(a0, a1, a2); -var _sqlite3_serialize = Module['_sqlite3_serialize'] = (a0, a1, a2, a3) => (_sqlite3_serialize = Module['_sqlite3_serialize'] = wasmExports['sqlite3_serialize'])(a0, a1, a2, a3); -var _sqlite3_column_int64 = Module['_sqlite3_column_int64'] = (a0, a1) => (_sqlite3_column_int64 = Module['_sqlite3_column_int64'] = wasmExports['sqlite3_column_int64'])(a0, a1); -var _sqlite3_column_int = Module['_sqlite3_column_int'] = (a0, a1) => (_sqlite3_column_int = Module['_sqlite3_column_int'] = wasmExports['sqlite3_column_int'])(a0, a1); -var _sqlite3_column_name = Module['_sqlite3_column_name'] = (a0, a1) => (_sqlite3_column_name = Module['_sqlite3_column_name'] = wasmExports['sqlite3_column_name'])(a0, a1); -var _sqlite3_deserialize = Module['_sqlite3_deserialize'] = (a0, a1, a2, a3, a4, a5) => (_sqlite3_deserialize = Module['_sqlite3_deserialize'] = wasmExports['sqlite3_deserialize'])(a0, a1, a2, a3, a4, a5); -var _sqlite3_clear_bindings = Module['_sqlite3_clear_bindings'] = (a0) => (_sqlite3_clear_bindings = Module['_sqlite3_clear_bindings'] = wasmExports['sqlite3_clear_bindings'])(a0); -var _sqlite3_value_blob = Module['_sqlite3_value_blob'] = (a0) => (_sqlite3_value_blob = Module['_sqlite3_value_blob'] = wasmExports['sqlite3_value_blob'])(a0); -var _sqlite3_value_bytes = Module['_sqlite3_value_bytes'] = (a0) => (_sqlite3_value_bytes = Module['_sqlite3_value_bytes'] = wasmExports['sqlite3_value_bytes'])(a0); -var _sqlite3_value_double = Module['_sqlite3_value_double'] = (a0) => (_sqlite3_value_double = Module['_sqlite3_value_double'] = wasmExports['sqlite3_value_double'])(a0); -var _sqlite3_value_int = Module['_sqlite3_value_int'] = (a0) => (_sqlite3_value_int = Module['_sqlite3_value_int'] = wasmExports['sqlite3_value_int'])(a0); -var _sqlite3_value_int64 = Module['_sqlite3_value_int64'] = (a0) => (_sqlite3_value_int64 = Module['_sqlite3_value_int64'] = wasmExports['sqlite3_value_int64'])(a0); -var _sqlite3_value_subtype = Module['_sqlite3_value_subtype'] = (a0) => (_sqlite3_value_subtype = Module['_sqlite3_value_subtype'] = wasmExports['sqlite3_value_subtype'])(a0); -var _sqlite3_value_pointer = Module['_sqlite3_value_pointer'] = (a0, a1) => (_sqlite3_value_pointer = Module['_sqlite3_value_pointer'] = wasmExports['sqlite3_value_pointer'])(a0, a1); -var _sqlite3_value_type = Module['_sqlite3_value_type'] = (a0) => (_sqlite3_value_type = Module['_sqlite3_value_type'] = wasmExports['sqlite3_value_type'])(a0); -var _sqlite3_value_nochange = Module['_sqlite3_value_nochange'] = (a0) => (_sqlite3_value_nochange = Module['_sqlite3_value_nochange'] = wasmExports['sqlite3_value_nochange'])(a0); -var _sqlite3_value_frombind = Module['_sqlite3_value_frombind'] = (a0) => (_sqlite3_value_frombind = Module['_sqlite3_value_frombind'] = wasmExports['sqlite3_value_frombind'])(a0); -var _sqlite3_value_dup = Module['_sqlite3_value_dup'] = (a0) => (_sqlite3_value_dup = Module['_sqlite3_value_dup'] = wasmExports['sqlite3_value_dup'])(a0); -var _sqlite3_value_free = Module['_sqlite3_value_free'] = (a0) => (_sqlite3_value_free = Module['_sqlite3_value_free'] = wasmExports['sqlite3_value_free'])(a0); -var _sqlite3_result_blob = Module['_sqlite3_result_blob'] = (a0, a1, a2, a3) => (_sqlite3_result_blob = Module['_sqlite3_result_blob'] = wasmExports['sqlite3_result_blob'])(a0, a1, a2, a3); -var _sqlite3_result_error_toobig = Module['_sqlite3_result_error_toobig'] = (a0) => (_sqlite3_result_error_toobig = Module['_sqlite3_result_error_toobig'] = wasmExports['sqlite3_result_error_toobig'])(a0); -var _sqlite3_result_error_nomem = Module['_sqlite3_result_error_nomem'] = (a0) => (_sqlite3_result_error_nomem = Module['_sqlite3_result_error_nomem'] = wasmExports['sqlite3_result_error_nomem'])(a0); -var _sqlite3_result_double = Module['_sqlite3_result_double'] = (a0, a1) => (_sqlite3_result_double = Module['_sqlite3_result_double'] = wasmExports['sqlite3_result_double'])(a0, a1); -var _sqlite3_result_error = Module['_sqlite3_result_error'] = (a0, a1, a2) => (_sqlite3_result_error = Module['_sqlite3_result_error'] = wasmExports['sqlite3_result_error'])(a0, a1, a2); -var _sqlite3_result_int = Module['_sqlite3_result_int'] = (a0, a1) => (_sqlite3_result_int = Module['_sqlite3_result_int'] = wasmExports['sqlite3_result_int'])(a0, a1); -var _sqlite3_result_null = Module['_sqlite3_result_null'] = (a0) => (_sqlite3_result_null = Module['_sqlite3_result_null'] = wasmExports['sqlite3_result_null'])(a0); -var _sqlite3_result_pointer = Module['_sqlite3_result_pointer'] = (a0, a1, a2, a3) => (_sqlite3_result_pointer = Module['_sqlite3_result_pointer'] = wasmExports['sqlite3_result_pointer'])(a0, a1, a2, a3); -var _sqlite3_result_subtype = Module['_sqlite3_result_subtype'] = (a0, a1) => (_sqlite3_result_subtype = Module['_sqlite3_result_subtype'] = wasmExports['sqlite3_result_subtype'])(a0, a1); -var _sqlite3_result_text = Module['_sqlite3_result_text'] = (a0, a1, a2, a3) => (_sqlite3_result_text = Module['_sqlite3_result_text'] = wasmExports['sqlite3_result_text'])(a0, a1, a2, a3); -var _sqlite3_result_zeroblob = Module['_sqlite3_result_zeroblob'] = (a0, a1) => (_sqlite3_result_zeroblob = Module['_sqlite3_result_zeroblob'] = wasmExports['sqlite3_result_zeroblob'])(a0, a1); -var _sqlite3_result_zeroblob64 = Module['_sqlite3_result_zeroblob64'] = (a0, a1) => (_sqlite3_result_zeroblob64 = Module['_sqlite3_result_zeroblob64'] = wasmExports['sqlite3_result_zeroblob64'])(a0, a1); -var _sqlite3_result_error_code = Module['_sqlite3_result_error_code'] = (a0, a1) => (_sqlite3_result_error_code = Module['_sqlite3_result_error_code'] = wasmExports['sqlite3_result_error_code'])(a0, a1); -var _sqlite3_user_data = Module['_sqlite3_user_data'] = (a0) => (_sqlite3_user_data = Module['_sqlite3_user_data'] = wasmExports['sqlite3_user_data'])(a0); -var _sqlite3_context_db_handle = Module['_sqlite3_context_db_handle'] = (a0) => (_sqlite3_context_db_handle = Module['_sqlite3_context_db_handle'] = wasmExports['sqlite3_context_db_handle'])(a0); -var _sqlite3_vtab_nochange = Module['_sqlite3_vtab_nochange'] = (a0) => (_sqlite3_vtab_nochange = Module['_sqlite3_vtab_nochange'] = wasmExports['sqlite3_vtab_nochange'])(a0); -var _sqlite3_vtab_in_first = Module['_sqlite3_vtab_in_first'] = (a0, a1) => (_sqlite3_vtab_in_first = Module['_sqlite3_vtab_in_first'] = wasmExports['sqlite3_vtab_in_first'])(a0, a1); -var _sqlite3_vtab_in_next = Module['_sqlite3_vtab_in_next'] = (a0, a1) => (_sqlite3_vtab_in_next = Module['_sqlite3_vtab_in_next'] = wasmExports['sqlite3_vtab_in_next'])(a0, a1); -var _sqlite3_aggregate_context = Module['_sqlite3_aggregate_context'] = (a0, a1) => (_sqlite3_aggregate_context = Module['_sqlite3_aggregate_context'] = wasmExports['sqlite3_aggregate_context'])(a0, a1); -var _sqlite3_get_auxdata = Module['_sqlite3_get_auxdata'] = (a0, a1) => (_sqlite3_get_auxdata = Module['_sqlite3_get_auxdata'] = wasmExports['sqlite3_get_auxdata'])(a0, a1); -var _sqlite3_set_auxdata = Module['_sqlite3_set_auxdata'] = (a0, a1, a2, a3) => (_sqlite3_set_auxdata = Module['_sqlite3_set_auxdata'] = wasmExports['sqlite3_set_auxdata'])(a0, a1, a2, a3); -var _sqlite3_data_count = Module['_sqlite3_data_count'] = (a0) => (_sqlite3_data_count = Module['_sqlite3_data_count'] = wasmExports['sqlite3_data_count'])(a0); -var _sqlite3_column_double = Module['_sqlite3_column_double'] = (a0, a1) => (_sqlite3_column_double = Module['_sqlite3_column_double'] = wasmExports['sqlite3_column_double'])(a0, a1); -var _sqlite3_column_value = Module['_sqlite3_column_value'] = (a0, a1) => (_sqlite3_column_value = Module['_sqlite3_column_value'] = wasmExports['sqlite3_column_value'])(a0, a1); -var _sqlite3_column_decltype = Module['_sqlite3_column_decltype'] = (a0, a1) => (_sqlite3_column_decltype = Module['_sqlite3_column_decltype'] = wasmExports['sqlite3_column_decltype'])(a0, a1); -var _sqlite3_bind_blob = Module['_sqlite3_bind_blob'] = (a0, a1, a2, a3, a4) => (_sqlite3_bind_blob = Module['_sqlite3_bind_blob'] = wasmExports['sqlite3_bind_blob'])(a0, a1, a2, a3, a4); -var _sqlite3_bind_null = Module['_sqlite3_bind_null'] = (a0, a1) => (_sqlite3_bind_null = Module['_sqlite3_bind_null'] = wasmExports['sqlite3_bind_null'])(a0, a1); -var _sqlite3_bind_pointer = Module['_sqlite3_bind_pointer'] = (a0, a1, a2, a3, a4) => (_sqlite3_bind_pointer = Module['_sqlite3_bind_pointer'] = wasmExports['sqlite3_bind_pointer'])(a0, a1, a2, a3, a4); -var _sqlite3_bind_parameter_count = Module['_sqlite3_bind_parameter_count'] = (a0) => (_sqlite3_bind_parameter_count = Module['_sqlite3_bind_parameter_count'] = wasmExports['sqlite3_bind_parameter_count'])(a0); -var _sqlite3_bind_parameter_name = Module['_sqlite3_bind_parameter_name'] = (a0, a1) => (_sqlite3_bind_parameter_name = Module['_sqlite3_bind_parameter_name'] = wasmExports['sqlite3_bind_parameter_name'])(a0, a1); -var _sqlite3_bind_parameter_index = Module['_sqlite3_bind_parameter_index'] = (a0, a1) => (_sqlite3_bind_parameter_index = Module['_sqlite3_bind_parameter_index'] = wasmExports['sqlite3_bind_parameter_index'])(a0, a1); -var _sqlite3_db_handle = Module['_sqlite3_db_handle'] = (a0) => (_sqlite3_db_handle = Module['_sqlite3_db_handle'] = wasmExports['sqlite3_db_handle'])(a0); -var _sqlite3_stmt_readonly = Module['_sqlite3_stmt_readonly'] = (a0) => (_sqlite3_stmt_readonly = Module['_sqlite3_stmt_readonly'] = wasmExports['sqlite3_stmt_readonly'])(a0); -var _sqlite3_stmt_isexplain = Module['_sqlite3_stmt_isexplain'] = (a0) => (_sqlite3_stmt_isexplain = Module['_sqlite3_stmt_isexplain'] = wasmExports['sqlite3_stmt_isexplain'])(a0); -var _sqlite3_stmt_explain = Module['_sqlite3_stmt_explain'] = (a0, a1) => (_sqlite3_stmt_explain = Module['_sqlite3_stmt_explain'] = wasmExports['sqlite3_stmt_explain'])(a0, a1); -var _sqlite3_stmt_busy = Module['_sqlite3_stmt_busy'] = (a0) => (_sqlite3_stmt_busy = Module['_sqlite3_stmt_busy'] = wasmExports['sqlite3_stmt_busy'])(a0); -var _sqlite3_stmt_status = Module['_sqlite3_stmt_status'] = (a0, a1, a2) => (_sqlite3_stmt_status = Module['_sqlite3_stmt_status'] = wasmExports['sqlite3_stmt_status'])(a0, a1, a2); -var _sqlite3_value_numeric_type = Module['_sqlite3_value_numeric_type'] = (a0) => (_sqlite3_value_numeric_type = Module['_sqlite3_value_numeric_type'] = wasmExports['sqlite3_value_numeric_type'])(a0); -var _sqlite3_strlike = Module['_sqlite3_strlike'] = (a0, a1, a2) => (_sqlite3_strlike = Module['_sqlite3_strlike'] = wasmExports['sqlite3_strlike'])(a0, a1, a2); -var _sqlite3_auto_extension = Module['_sqlite3_auto_extension'] = (a0) => (_sqlite3_auto_extension = Module['_sqlite3_auto_extension'] = wasmExports['sqlite3_auto_extension'])(a0); -var _sqlite3_cancel_auto_extension = Module['_sqlite3_cancel_auto_extension'] = (a0) => (_sqlite3_cancel_auto_extension = Module['_sqlite3_cancel_auto_extension'] = wasmExports['sqlite3_cancel_auto_extension'])(a0); -var _sqlite3_reset_auto_extension = Module['_sqlite3_reset_auto_extension'] = () => (_sqlite3_reset_auto_extension = Module['_sqlite3_reset_auto_extension'] = wasmExports['sqlite3_reset_auto_extension'])(); -var _sqlite3_prepare_v3 = Module['_sqlite3_prepare_v3'] = (a0, a1, a2, a3, a4, a5) => (_sqlite3_prepare_v3 = Module['_sqlite3_prepare_v3'] = wasmExports['sqlite3_prepare_v3'])(a0, a1, a2, a3, a4, a5); -var _sqlite3_vtab_on_conflict = Module['_sqlite3_vtab_on_conflict'] = (a0) => (_sqlite3_vtab_on_conflict = Module['_sqlite3_vtab_on_conflict'] = wasmExports['sqlite3_vtab_on_conflict'])(a0); -var _sqlite3_vtab_collation = Module['_sqlite3_vtab_collation'] = (a0, a1) => (_sqlite3_vtab_collation = Module['_sqlite3_vtab_collation'] = wasmExports['sqlite3_vtab_collation'])(a0, a1); -var _sqlite3_vtab_in = Module['_sqlite3_vtab_in'] = (a0, a1, a2) => (_sqlite3_vtab_in = Module['_sqlite3_vtab_in'] = wasmExports['sqlite3_vtab_in'])(a0, a1, a2); -var _sqlite3_vtab_rhs_value = Module['_sqlite3_vtab_rhs_value'] = (a0, a1, a2) => (_sqlite3_vtab_rhs_value = Module['_sqlite3_vtab_rhs_value'] = wasmExports['sqlite3_vtab_rhs_value'])(a0, a1, a2); -var _sqlite3_vtab_distinct = Module['_sqlite3_vtab_distinct'] = (a0) => (_sqlite3_vtab_distinct = Module['_sqlite3_vtab_distinct'] = wasmExports['sqlite3_vtab_distinct'])(a0); -var _sqlite3_keyword_name = Module['_sqlite3_keyword_name'] = (a0, a1, a2) => (_sqlite3_keyword_name = Module['_sqlite3_keyword_name'] = wasmExports['sqlite3_keyword_name'])(a0, a1, a2); -var _sqlite3_keyword_count = Module['_sqlite3_keyword_count'] = () => (_sqlite3_keyword_count = Module['_sqlite3_keyword_count'] = wasmExports['sqlite3_keyword_count'])(); -var _sqlite3_keyword_check = Module['_sqlite3_keyword_check'] = (a0, a1) => (_sqlite3_keyword_check = Module['_sqlite3_keyword_check'] = wasmExports['sqlite3_keyword_check'])(a0, a1); -var _sqlite3_complete = Module['_sqlite3_complete'] = (a0) => (_sqlite3_complete = Module['_sqlite3_complete'] = wasmExports['sqlite3_complete'])(a0); -var _sqlite3_shutdown = Module['_sqlite3_shutdown'] = () => (_sqlite3_shutdown = Module['_sqlite3_shutdown'] = wasmExports['sqlite3_shutdown'])(); -var _sqlite3_last_insert_rowid = Module['_sqlite3_last_insert_rowid'] = (a0) => (_sqlite3_last_insert_rowid = Module['_sqlite3_last_insert_rowid'] = wasmExports['sqlite3_last_insert_rowid'])(a0); -var _sqlite3_set_last_insert_rowid = Module['_sqlite3_set_last_insert_rowid'] = (a0, a1) => (_sqlite3_set_last_insert_rowid = Module['_sqlite3_set_last_insert_rowid'] = wasmExports['sqlite3_set_last_insert_rowid'])(a0, a1); -var _sqlite3_changes64 = Module['_sqlite3_changes64'] = (a0) => (_sqlite3_changes64 = Module['_sqlite3_changes64'] = wasmExports['sqlite3_changes64'])(a0); -var _sqlite3_changes = Module['_sqlite3_changes'] = (a0) => (_sqlite3_changes = Module['_sqlite3_changes'] = wasmExports['sqlite3_changes'])(a0); -var _sqlite3_total_changes64 = Module['_sqlite3_total_changes64'] = (a0) => (_sqlite3_total_changes64 = Module['_sqlite3_total_changes64'] = wasmExports['sqlite3_total_changes64'])(a0); -var _sqlite3_total_changes = Module['_sqlite3_total_changes'] = (a0) => (_sqlite3_total_changes = Module['_sqlite3_total_changes'] = wasmExports['sqlite3_total_changes'])(a0); -var _sqlite3_txn_state = Module['_sqlite3_txn_state'] = (a0, a1) => (_sqlite3_txn_state = Module['_sqlite3_txn_state'] = wasmExports['sqlite3_txn_state'])(a0, a1); -var _sqlite3_close_v2 = Module['_sqlite3_close_v2'] = (a0) => (_sqlite3_close_v2 = Module['_sqlite3_close_v2'] = wasmExports['sqlite3_close_v2'])(a0); -var _sqlite3_busy_handler = Module['_sqlite3_busy_handler'] = (a0, a1, a2) => (_sqlite3_busy_handler = Module['_sqlite3_busy_handler'] = wasmExports['sqlite3_busy_handler'])(a0, a1, a2); -var _sqlite3_busy_timeout = Module['_sqlite3_busy_timeout'] = (a0, a1) => (_sqlite3_busy_timeout = Module['_sqlite3_busy_timeout'] = wasmExports['sqlite3_busy_timeout'])(a0, a1); -var _sqlite3_interrupt = Module['_sqlite3_interrupt'] = (a0) => (_sqlite3_interrupt = Module['_sqlite3_interrupt'] = wasmExports['sqlite3_interrupt'])(a0); -var _sqlite3_is_interrupted = Module['_sqlite3_is_interrupted'] = (a0) => (_sqlite3_is_interrupted = Module['_sqlite3_is_interrupted'] = wasmExports['sqlite3_is_interrupted'])(a0); -var _sqlite3_create_function_v2 = Module['_sqlite3_create_function_v2'] = (a0, a1, a2, a3, a4, a5, a6, a7, a8) => (_sqlite3_create_function_v2 = Module['_sqlite3_create_function_v2'] = wasmExports['sqlite3_create_function_v2'])(a0, a1, a2, a3, a4, a5, a6, a7, a8); -var _sqlite3_overload_function = Module['_sqlite3_overload_function'] = (a0, a1, a2) => (_sqlite3_overload_function = Module['_sqlite3_overload_function'] = wasmExports['sqlite3_overload_function'])(a0, a1, a2); -var _sqlite3_trace_v2 = Module['_sqlite3_trace_v2'] = (a0, a1, a2, a3) => (_sqlite3_trace_v2 = Module['_sqlite3_trace_v2'] = wasmExports['sqlite3_trace_v2'])(a0, a1, a2, a3); -var _sqlite3_commit_hook = Module['_sqlite3_commit_hook'] = (a0, a1, a2) => (_sqlite3_commit_hook = Module['_sqlite3_commit_hook'] = wasmExports['sqlite3_commit_hook'])(a0, a1, a2); -var _sqlite3_update_hook = Module['_sqlite3_update_hook'] = (a0, a1, a2) => (_sqlite3_update_hook = Module['_sqlite3_update_hook'] = wasmExports['sqlite3_update_hook'])(a0, a1, a2); -var _sqlite3_rollback_hook = Module['_sqlite3_rollback_hook'] = (a0, a1, a2) => (_sqlite3_rollback_hook = Module['_sqlite3_rollback_hook'] = wasmExports['sqlite3_rollback_hook'])(a0, a1, a2); -var _sqlite3_error_offset = Module['_sqlite3_error_offset'] = (a0) => (_sqlite3_error_offset = Module['_sqlite3_error_offset'] = wasmExports['sqlite3_error_offset'])(a0); -var _sqlite3_errcode = Module['_sqlite3_errcode'] = (a0) => (_sqlite3_errcode = Module['_sqlite3_errcode'] = wasmExports['sqlite3_errcode'])(a0); -var _sqlite3_extended_errcode = Module['_sqlite3_extended_errcode'] = (a0) => (_sqlite3_extended_errcode = Module['_sqlite3_extended_errcode'] = wasmExports['sqlite3_extended_errcode'])(a0); -var _sqlite3_errstr = Module['_sqlite3_errstr'] = (a0) => (_sqlite3_errstr = Module['_sqlite3_errstr'] = wasmExports['sqlite3_errstr'])(a0); -var _sqlite3_limit = Module['_sqlite3_limit'] = (a0, a1, a2) => (_sqlite3_limit = Module['_sqlite3_limit'] = wasmExports['sqlite3_limit'])(a0, a1, a2); -var _sqlite3_open = Module['_sqlite3_open'] = (a0, a1) => (_sqlite3_open = Module['_sqlite3_open'] = wasmExports['sqlite3_open'])(a0, a1); -var _sqlite3_create_collation = Module['_sqlite3_create_collation'] = (a0, a1, a2, a3, a4) => (_sqlite3_create_collation = Module['_sqlite3_create_collation'] = wasmExports['sqlite3_create_collation'])(a0, a1, a2, a3, a4); -var _sqlite3_create_collation_v2 = Module['_sqlite3_create_collation_v2'] = (a0, a1, a2, a3, a4, a5) => (_sqlite3_create_collation_v2 = Module['_sqlite3_create_collation_v2'] = wasmExports['sqlite3_create_collation_v2'])(a0, a1, a2, a3, a4, a5); -var _sqlite3_collation_needed = Module['_sqlite3_collation_needed'] = (a0, a1, a2) => (_sqlite3_collation_needed = Module['_sqlite3_collation_needed'] = wasmExports['sqlite3_collation_needed'])(a0, a1, a2); -var _sqlite3_get_autocommit = Module['_sqlite3_get_autocommit'] = (a0) => (_sqlite3_get_autocommit = Module['_sqlite3_get_autocommit'] = wasmExports['sqlite3_get_autocommit'])(a0); -var _sqlite3_table_column_metadata = Module['_sqlite3_table_column_metadata'] = (a0, a1, a2, a3, a4, a5, a6, a7, a8) => (_sqlite3_table_column_metadata = Module['_sqlite3_table_column_metadata'] = wasmExports['sqlite3_table_column_metadata'])(a0, a1, a2, a3, a4, a5, a6, a7, a8); -var _sqlite3_extended_result_codes = Module['_sqlite3_extended_result_codes'] = (a0, a1) => (_sqlite3_extended_result_codes = Module['_sqlite3_extended_result_codes'] = wasmExports['sqlite3_extended_result_codes'])(a0, a1); -var _sqlite3_uri_key = Module['_sqlite3_uri_key'] = (a0, a1) => (_sqlite3_uri_key = Module['_sqlite3_uri_key'] = wasmExports['sqlite3_uri_key'])(a0, a1); -var _sqlite3_uri_int64 = Module['_sqlite3_uri_int64'] = (a0, a1, a2) => (_sqlite3_uri_int64 = Module['_sqlite3_uri_int64'] = wasmExports['sqlite3_uri_int64'])(a0, a1, a2); -var _sqlite3_db_name = Module['_sqlite3_db_name'] = (a0, a1) => (_sqlite3_db_name = Module['_sqlite3_db_name'] = wasmExports['sqlite3_db_name'])(a0, a1); -var _sqlite3_db_filename = Module['_sqlite3_db_filename'] = (a0, a1) => (_sqlite3_db_filename = Module['_sqlite3_db_filename'] = wasmExports['sqlite3_db_filename'])(a0, a1); -var _sqlite3_db_readonly = Module['_sqlite3_db_readonly'] = (a0, a1) => (_sqlite3_db_readonly = Module['_sqlite3_db_readonly'] = wasmExports['sqlite3_db_readonly'])(a0, a1); -var _sqlite3_compileoption_used = Module['_sqlite3_compileoption_used'] = (a0) => (_sqlite3_compileoption_used = Module['_sqlite3_compileoption_used'] = wasmExports['sqlite3_compileoption_used'])(a0); -var _sqlite3_compileoption_get = Module['_sqlite3_compileoption_get'] = (a0) => (_sqlite3_compileoption_get = Module['_sqlite3_compileoption_get'] = wasmExports['sqlite3_compileoption_get'])(a0); -var _sqlite3__wasm_pstack_ptr = Module['_sqlite3__wasm_pstack_ptr'] = () => (_sqlite3__wasm_pstack_ptr = Module['_sqlite3__wasm_pstack_ptr'] = wasmExports['sqlite3__wasm_pstack_ptr'])(); -var _sqlite3__wasm_pstack_restore = Module['_sqlite3__wasm_pstack_restore'] = (a0) => (_sqlite3__wasm_pstack_restore = Module['_sqlite3__wasm_pstack_restore'] = wasmExports['sqlite3__wasm_pstack_restore'])(a0); -var _sqlite3__wasm_pstack_alloc = Module['_sqlite3__wasm_pstack_alloc'] = (a0) => (_sqlite3__wasm_pstack_alloc = Module['_sqlite3__wasm_pstack_alloc'] = wasmExports['sqlite3__wasm_pstack_alloc'])(a0); -var _sqlite3__wasm_pstack_remaining = Module['_sqlite3__wasm_pstack_remaining'] = () => (_sqlite3__wasm_pstack_remaining = Module['_sqlite3__wasm_pstack_remaining'] = wasmExports['sqlite3__wasm_pstack_remaining'])(); -var _sqlite3__wasm_pstack_quota = Module['_sqlite3__wasm_pstack_quota'] = () => (_sqlite3__wasm_pstack_quota = Module['_sqlite3__wasm_pstack_quota'] = wasmExports['sqlite3__wasm_pstack_quota'])(); -var _sqlite3__wasm_db_error = Module['_sqlite3__wasm_db_error'] = (a0, a1, a2) => (_sqlite3__wasm_db_error = Module['_sqlite3__wasm_db_error'] = wasmExports['sqlite3__wasm_db_error'])(a0, a1, a2); -var _sqlite3__wasm_test_struct = Module['_sqlite3__wasm_test_struct'] = (a0) => (_sqlite3__wasm_test_struct = Module['_sqlite3__wasm_test_struct'] = wasmExports['sqlite3__wasm_test_struct'])(a0); -var _sqlite3__wasm_enum_json = Module['_sqlite3__wasm_enum_json'] = () => (_sqlite3__wasm_enum_json = Module['_sqlite3__wasm_enum_json'] = wasmExports['sqlite3__wasm_enum_json'])(); -var _sqlite3__wasm_vfs_unlink = Module['_sqlite3__wasm_vfs_unlink'] = (a0, a1) => (_sqlite3__wasm_vfs_unlink = Module['_sqlite3__wasm_vfs_unlink'] = wasmExports['sqlite3__wasm_vfs_unlink'])(a0, a1); -var _sqlite3__wasm_db_vfs = Module['_sqlite3__wasm_db_vfs'] = (a0, a1) => (_sqlite3__wasm_db_vfs = Module['_sqlite3__wasm_db_vfs'] = wasmExports['sqlite3__wasm_db_vfs'])(a0, a1); -var _sqlite3__wasm_db_reset = Module['_sqlite3__wasm_db_reset'] = (a0) => (_sqlite3__wasm_db_reset = Module['_sqlite3__wasm_db_reset'] = wasmExports['sqlite3__wasm_db_reset'])(a0); -var _sqlite3__wasm_db_export_chunked = Module['_sqlite3__wasm_db_export_chunked'] = (a0, a1) => (_sqlite3__wasm_db_export_chunked = Module['_sqlite3__wasm_db_export_chunked'] = wasmExports['sqlite3__wasm_db_export_chunked'])(a0, a1); -var _sqlite3__wasm_db_serialize = Module['_sqlite3__wasm_db_serialize'] = (a0, a1, a2, a3, a4) => (_sqlite3__wasm_db_serialize = Module['_sqlite3__wasm_db_serialize'] = wasmExports['sqlite3__wasm_db_serialize'])(a0, a1, a2, a3, a4); -var _sqlite3__wasm_vfs_create_file = Module['_sqlite3__wasm_vfs_create_file'] = (a0, a1, a2, a3) => (_sqlite3__wasm_vfs_create_file = Module['_sqlite3__wasm_vfs_create_file'] = wasmExports['sqlite3__wasm_vfs_create_file'])(a0, a1, a2, a3); -var _sqlite3__wasm_posix_create_file = Module['_sqlite3__wasm_posix_create_file'] = (a0, a1, a2) => (_sqlite3__wasm_posix_create_file = Module['_sqlite3__wasm_posix_create_file'] = wasmExports['sqlite3__wasm_posix_create_file'])(a0, a1, a2); -var _sqlite3__wasm_kvvfsMakeKeyOnPstack = Module['_sqlite3__wasm_kvvfsMakeKeyOnPstack'] = (a0, a1) => (_sqlite3__wasm_kvvfsMakeKeyOnPstack = Module['_sqlite3__wasm_kvvfsMakeKeyOnPstack'] = wasmExports['sqlite3__wasm_kvvfsMakeKeyOnPstack'])(a0, a1); -var _sqlite3__wasm_kvvfs_methods = Module['_sqlite3__wasm_kvvfs_methods'] = () => (_sqlite3__wasm_kvvfs_methods = Module['_sqlite3__wasm_kvvfs_methods'] = wasmExports['sqlite3__wasm_kvvfs_methods'])(); -var _sqlite3__wasm_vtab_config = Module['_sqlite3__wasm_vtab_config'] = (a0, a1, a2) => (_sqlite3__wasm_vtab_config = Module['_sqlite3__wasm_vtab_config'] = wasmExports['sqlite3__wasm_vtab_config'])(a0, a1, a2); -var _sqlite3__wasm_db_config_ip = Module['_sqlite3__wasm_db_config_ip'] = (a0, a1, a2, a3) => (_sqlite3__wasm_db_config_ip = Module['_sqlite3__wasm_db_config_ip'] = wasmExports['sqlite3__wasm_db_config_ip'])(a0, a1, a2, a3); -var _sqlite3__wasm_db_config_pii = Module['_sqlite3__wasm_db_config_pii'] = (a0, a1, a2, a3, a4) => (_sqlite3__wasm_db_config_pii = Module['_sqlite3__wasm_db_config_pii'] = wasmExports['sqlite3__wasm_db_config_pii'])(a0, a1, a2, a3, a4); -var _sqlite3__wasm_db_config_s = Module['_sqlite3__wasm_db_config_s'] = (a0, a1, a2) => (_sqlite3__wasm_db_config_s = Module['_sqlite3__wasm_db_config_s'] = wasmExports['sqlite3__wasm_db_config_s'])(a0, a1, a2); -var _sqlite3__wasm_config_i = Module['_sqlite3__wasm_config_i'] = (a0, a1) => (_sqlite3__wasm_config_i = Module['_sqlite3__wasm_config_i'] = wasmExports['sqlite3__wasm_config_i'])(a0, a1); -var _sqlite3__wasm_config_ii = Module['_sqlite3__wasm_config_ii'] = (a0, a1, a2) => (_sqlite3__wasm_config_ii = Module['_sqlite3__wasm_config_ii'] = wasmExports['sqlite3__wasm_config_ii'])(a0, a1, a2); -var _sqlite3__wasm_config_j = Module['_sqlite3__wasm_config_j'] = (a0, a1) => (_sqlite3__wasm_config_j = Module['_sqlite3__wasm_config_j'] = wasmExports['sqlite3__wasm_config_j'])(a0, a1); -var _sqlite3__wasm_qfmt_token = Module['_sqlite3__wasm_qfmt_token'] = (a0, a1) => (_sqlite3__wasm_qfmt_token = Module['_sqlite3__wasm_qfmt_token'] = wasmExports['sqlite3__wasm_qfmt_token'])(a0, a1); -var _sqlite3__wasm_init_wasmfs = Module['_sqlite3__wasm_init_wasmfs'] = (a0) => (_sqlite3__wasm_init_wasmfs = Module['_sqlite3__wasm_init_wasmfs'] = wasmExports['sqlite3__wasm_init_wasmfs'])(a0); -var _sqlite3__wasm_test_intptr = Module['_sqlite3__wasm_test_intptr'] = (a0) => (_sqlite3__wasm_test_intptr = Module['_sqlite3__wasm_test_intptr'] = wasmExports['sqlite3__wasm_test_intptr'])(a0); -var _sqlite3__wasm_test_voidptr = Module['_sqlite3__wasm_test_voidptr'] = (a0) => (_sqlite3__wasm_test_voidptr = Module['_sqlite3__wasm_test_voidptr'] = wasmExports['sqlite3__wasm_test_voidptr'])(a0); -var _sqlite3__wasm_test_int64_max = Module['_sqlite3__wasm_test_int64_max'] = () => (_sqlite3__wasm_test_int64_max = Module['_sqlite3__wasm_test_int64_max'] = wasmExports['sqlite3__wasm_test_int64_max'])(); -var _sqlite3__wasm_test_int64_min = Module['_sqlite3__wasm_test_int64_min'] = () => (_sqlite3__wasm_test_int64_min = Module['_sqlite3__wasm_test_int64_min'] = wasmExports['sqlite3__wasm_test_int64_min'])(); -var _sqlite3__wasm_test_int64_times2 = Module['_sqlite3__wasm_test_int64_times2'] = (a0) => (_sqlite3__wasm_test_int64_times2 = Module['_sqlite3__wasm_test_int64_times2'] = wasmExports['sqlite3__wasm_test_int64_times2'])(a0); -var _sqlite3__wasm_test_int64_minmax = Module['_sqlite3__wasm_test_int64_minmax'] = (a0, a1) => (_sqlite3__wasm_test_int64_minmax = Module['_sqlite3__wasm_test_int64_minmax'] = wasmExports['sqlite3__wasm_test_int64_minmax'])(a0, a1); -var _sqlite3__wasm_test_int64ptr = Module['_sqlite3__wasm_test_int64ptr'] = (a0) => (_sqlite3__wasm_test_int64ptr = Module['_sqlite3__wasm_test_int64ptr'] = wasmExports['sqlite3__wasm_test_int64ptr'])(a0); -var _sqlite3__wasm_test_stack_overflow = Module['_sqlite3__wasm_test_stack_overflow'] = (a0) => (_sqlite3__wasm_test_stack_overflow = Module['_sqlite3__wasm_test_stack_overflow'] = wasmExports['sqlite3__wasm_test_stack_overflow'])(a0); -var _sqlite3__wasm_test_str_hello = Module['_sqlite3__wasm_test_str_hello'] = (a0) => (_sqlite3__wasm_test_str_hello = Module['_sqlite3__wasm_test_str_hello'] = wasmExports['sqlite3__wasm_test_str_hello'])(a0); -var _sqlite3__wasm_SQLTester_strglob = Module['_sqlite3__wasm_SQLTester_strglob'] = (a0, a1) => (_sqlite3__wasm_SQLTester_strglob = Module['_sqlite3__wasm_SQLTester_strglob'] = wasmExports['sqlite3__wasm_SQLTester_strglob'])(a0, a1); -var _realloc = Module['_realloc'] = (a0, a1) => (_realloc = Module['_realloc'] = wasmExports['realloc'])(a0, a1); -var _emscripten_builtin_memalign = (a0, a1) => (_emscripten_builtin_memalign = wasmExports['emscripten_builtin_memalign'])(a0, a1); -var __emscripten_stack_restore = (a0) => (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0); -var __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0); -var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])(); // include: postamble.js // === Auto-generated postamble setup entry stuff === -Module['wasmMemory'] = wasmMemory; - - -var calledRun; - -dependenciesFulfilled = function runCaller() { - // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false) - if (!calledRun) run(); - if (!calledRun) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled -}; - -function run() { - - if (runDependencies > 0) { - return; - } +async function run() { preRun(); - // a preRun added a dependency, run will be called later - if (runDependencies > 0) { - return; + if (runDependencies) { + await resolveRunDependencies(); } - function doRun() { - // run may have just been called through dependencies being fulfilled just in this very frame, - // or while the async setStatus time below was happening - if (calledRun) return; - calledRun = true; - Module['calledRun'] = true; - - if (ABORT) return; + if (ABORT) return; - initRuntime(); + initRuntime(); - readyPromiseResolve(Module); - Module['onRuntimeInitialized']?.(); - - postRun(); - } - - if (Module['setStatus']) { - Module['setStatus']('Running...'); - setTimeout(() => { - setTimeout(() => Module['setStatus'](''), 1); - doRun(); - }, 1); - } else - { - doRun(); - } + postRun(); } -if (Module['preInit']) { - if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; - while (Module['preInit'].length > 0) { - Module['preInit'].pop()(); - } -} +var wasmExports; -run(); +// In modularize mode the generated code is within a factory function so we +// can use await here (since it's not top-level-await). +wasmExports = await createWasm(); +await run(); // end include: postamble.js -// include: /usr/local/google/home/dlehmann/JetStream/sqlite3/sqlite-src-3480000/ext/wasm/bld/post-js.speedtest1-vanilla.js +// include: ./bld/post-js.speedtest1-vanilla.js /* BEGIN FILE: api/post-js-header.js */ /** post-js-header.js is to be prepended to other code to create @@ -4429,8 +4637,7 @@ run(); installs will be run after the WASM module is loaded, at which point the sqlite3 JS API bits will get set up. */ -if(!Module.postRun) Module.postRun = []; -Module.postRun.push(function(Module/*the Emscripten-style module object*/){ +Module.runSQLite3PostLoadInit = function(Module/*the Emscripten-style module object*/){ 'use strict'; /* This function will contain at least the following: @@ -4481,9 +4688,9 @@ Module.postRun.push(function(Module/*the Emscripten-style module object*/){ ** ** SQLITE_VERSION "3.48.0" ** SQLITE_VERSION_NUMBER 3048000 -** SQLITE_SOURCE_ID "2025-01-14 11:05:00 d2fe6b05f38d9d7cd78c5d252e99ac59f1aea071d669830c1ffe4e8966e84010" +** SQLITE_SOURCE_ID "2025-01-14 11:05:00 d2fe6b05f38d9d7cd78c5d252e99ac59f1aea071d669830c1ffe4e8966e8alt1" ** -** Using the Emscripten SDK version 3.1.73. +** Using the Emscripten SDK version 6.0.13. */ /* END FILE: ./bld/sqlite3-license-version.js */ /* BEGIN FILE: api/sqlite3-api-prologue.js */ @@ -11579,7 +11786,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /* END FILE: api/sqlite3-api-glue.c-pp.js */ /* BEGIN FILE: ./bld/sqlite3-api-build-version.js */ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - sqlite3.version = {"libVersion": "3.48.0", "libVersionNumber": 3048000, "sourceId": "2025-01-14 11:05:00 d2fe6b05f38d9d7cd78c5d252e99ac59f1aea071d669830c1ffe4e8966e84010","downloadVersion": 3480000}; + sqlite3.version = {"libVersion": "3.48.0", "libVersionNumber": 3048000, "sourceId": "2025-01-14 11:05:00 d2fe6b05f38d9d7cd78c5d252e99ac59f1aea071d669830c1ffe4e8966e8alt1","downloadVersion": 3480000}; }); /* END FILE: ./bld/sqlite3-api-build-version.js */ /* BEGIN FILE: api/sqlite3-api-oo1.c-pp.js */ @@ -17622,32 +17829,32 @@ if('undefined' !== typeof Module){ // presumably an Emscripten build /* The current function scope was opened via post-js-header.js, which gets prepended to this at build-time. This file closes that scope. */ -})/*postRun.push(...)*/; +}/*Module.runSQLite3PostLoadInit()*/; /* END FILE: api/post-js-footer.js */ -// end include: /usr/local/google/home/dlehmann/JetStream/sqlite3/sqlite-src-3480000/ext/wasm/bld/post-js.speedtest1-vanilla.js +// end include: ./bld/post-js.speedtest1-vanilla.js // include: postamble_modularize.js // In MODULARIZE mode we wrap the generated code in a factory function // and return either the Module itself, or a promise of the module. -// -// We assign to the `moduleRtn` global here and configure closure to see -// this as and extern so it won't get minified. - -moduleRtn = readyPromise; // end include: postamble_modularize.js - return moduleRtn; -} -); + return Module; + }; })(); -if (typeof exports === 'object' && typeof module === 'object') + +// Export using a UMD style export, or ES6 exports if selected +if (typeof exports === 'object' && typeof module === 'object') { module.exports = sqlite3InitModule; -else if (typeof define === 'function' && define['amd']) + // This default export looks redundant, but it allows TS to import this + // commonjs style module. + module.exports.default = sqlite3InitModule; +} else if (typeof define === 'function' && define['amd']) define([], () => sqlite3InitModule); + /* ^^^^ ACHTUNG: blank line at the start is necessary because Emscripten will not add a newline in some cases and we need a blank line for a sed-based kludge for the ES6 build. */ @@ -17709,6 +17916,7 @@ else if (typeof define === 'function' && define['amd']) //console.warn("Using replaced sqlite3InitModule()",globalThis.location); return originalInit(...args).then((EmscriptenModule)=>{ //console.warn("sqlite3InitModule() returning sqlite3 object."); + EmscriptenModule.runSQLite3PostLoadInit(EmscriptenModule); const s = EmscriptenModule.sqlite3; s.scriptInfo = initModuleState; //console.warn("sqlite3.scriptInfo =",s.scriptInfo); diff --git a/workloads/sqlite3-wasm/build/jswasm/speedtest1.wasm b/workloads/sqlite3-wasm/build/jswasm/speedtest1.wasm index 94c755beb5d965e35bd21cce14b8339513b65141..4e7c05953cb804a9684feab2c8c12dcf8bdaf674 100644 GIT binary patch delta 339004 zcmc$H349dA)^At$Y{~S@^i1{*dWJ0!0zohc=#`3s$l|_T^@@O?ggt=UhfG*R1(#rP z9Yn#fD4?KGKtvV;qN1QgMMXpmii%v6fT-xj%ln_|o|y!>_q+GK@4W}V%yd^*ojP^4 zI(6z)&-$;rJh-!qt_&JKiYbc17CNt;tv{t}(aBL3y;+S$+2q-4?{=zmD@xeIes^?I zl>XtVBRW}p%vy+3>=o@DcPsI#de^G)S{=*PhK{~HZQ#K1ca0x1XynL&w+@{!bmH(^ zI-jNZ#Z!)aG0+*#2n`)Ien`deu@i=lrso4kkGVr>D<(Nxuy&%_*_@q)npr{rkdb4C zj2Jj!_^6>&OUV+o&gHHz)9TZ_MPiJLr?+pPlcVUm!(r(8%%Lkzr{hmztE;3{HghW) za|Ibwv{Z+ZR;)3nf)Q#=bJ92&F3uM@?n0I&%G~Go?9j5MLs6V*X`1HoXiiU04fUM5 z)5#o81|X`&6s9VuqbMF71xiOnRoo>CS2Gp2yF_euo6TL?SuRCosj4#zb(!1YcBL|> z$H`nSx63FK%+o8qbLUp7+o39|OI20H1sLuN#r2-nDP4>l^r5J|!~>poT2WDZ@vJhQS1g8hNoP?vc-m!vkH2caMpyFuON8I5ZuR0ZR*xN2tqNK9y=6Z9d zQ_~F16Vf|~Lfy>Hc4n#$&6%B@&0HX3woAqE6z9caklu=QU3DKmTl8h z?|K1H^td`X4b{;)&v|KTFjXO*93UZ4Ss*ve)IwDyUP2ha z6s9xPrFfYi|5zYUi1IdV6u+jm@p>Un5pRU>@O!C$zZbH}P!)G7>k$ZC>h!a#&pYoLr?}L}@iZ)K z>vb=0y-kcY3esB{@U;MUW=y+IuzF96owNX&2?Vniy=nRQXW^L+R`n(K^&Q?U6Jjtf(K-KCx$d?JaOg91hH=)79BsZ zV(6{ILEQ>vXlA@e;_SrHi3hhPU|NF#%n=FfDu!AE92tzawo6cJbb@xb4;ndfsKu=* zNs3ks5_)>d^$)Q`2N>&UIoK+e5r;RiV)($ZgDM7%!jw><{52^9^kDFqF(Zc#8m&Ce z68(=KS~1*`zolYKdRDI$$qsGt027rLl5p(O(da?hmMp#n0uYB(C$^{O-0--1+JFX+ z95YyXQcXyuHB3vss?{W&<>+r2GjZ_9p~@09fvHuUuz5zDpOKlnOic{hdNh9G;0bq) z9jYuBV=}U{o;|&L`D}$)kdYHzsV2E6dmC0UW)#V$^8D%j-7;~k^1|t$q|m*T9EmMq za)7JUyf`oH;-M84V=4wt7&B(@@LQFa)!gxUwoPdAeDs)6Lq{oV#pRjVyJ-Ll9hed zCym%SVbEZxE9_;(_zBAHBr$HcAB-kLwqI<|%Fq5XISTS}22H$Ec6dOX%F4|8I!P}o z9cWp)gQ9(QcFy0DU~Q3>QluOff630h;D_WWq|K77J#t#1B=b*6II`y0G2jVQ?`QF9 zc60W3u_wD3J1Kt6Zl3v%Wb@?Ur-%+Y*?Cj7gg}m;FbcM6{LnkcjwBN`O$^G(%ABqx z)IdHTJaPP8%Dv*@oXqC;X}NJuS!ytP;wWh1kbzR(A6xZ$&SfbV|D2ZB$Q>L!arnpy zpf3ats(`6ACEnwAbAzQ>2vnA|l_6+;k zvCz55xzYJbXq`CGvQ69fLa&9Uq^(c;E%bZnU}#m^v9trBPtsz}htt-ieI1&fHa~4a z+Fa-AvR)4*EtNy0`j=n>GSKq1E>F?_w=)3ff^pEx3`ltFH{WE>9{<*$S|3a_V z_v>HkU+D+*uk~;AZ}so=L;BzJ!}|C75Bd?kK|iV=(|^>D>p$r~>%WPT)&=K%oc4fk zZ)m1(V`!G|Z=u@I>!CM8+d?0P)~4-B`zZ8E+DB%KR9Z~5N#z2n>N+u_^g+vEGfx8L`T?|WZ^@0jnn?`PjH zz7xJ*eZTqs?)%;M58o+YrGKh_p?{Hov44sGY5z0+rT%69<^E^=EB!C{Yy7MHYy2Wue|4~!3ukBpCvPmE8EJ;rCoUgHa+-q>$^X&f-V zHoh^wH4Ylz8M}<%jH$tC!Fz-E1s@2`3_cvJ3eFC03_KbX!8yUd2A>Kp3@!>T4lW5k z9egIZEck42MX=+_;Pb&(gByYygPVf2!7ahpgKq?P1m6qp489-yAoxjeckt8Tp5SM} zy}{3eKL>vi-?V8Fof(=HstU~xJsJ|BIibIX9t*`nkB8=k=7$!9szVDyi$aS-OF~bF zo(U}rEe|~#dM>mgv@-O3=!H;C=*7^g(CW~d(95BkIe`vwKfAaB%9V7X=dZj$VN>NaSXY?uhwjIYF z6dT%JlhZDujWC(1l}FtC#a|TwpT%-bxABH3YB##Do#`k~RB-TRi3*D8u`6?zt3)um9a^pvWmshY`J-@e357dOjgw}8bDC?iMk zQ>V0XfJ_ay7xnI3s5Z=Yl&VIPmNULl(9%e@Or?e_-tMCIJu+)e23G-@lU{(QqAn_X7@;V30qBa=rXqla0Xgr6=Dl8B1+>^`l~7ac=s%k5EO7 z>6x@#9Vp2M4;AP3*g6#tsFWYyM(cQs+deC7) zB<&$sn3F(mTkR&A+!JBA6r(z{JnvZyRv}cqe1j#q8V%8Sk>yf>L{|1FuK?79{06-I z*Ecl2UA)(!FnT{D^3eYziI~xW2m*Xd)xtQ23IKy^L}Z0;1MSoVkzbKrgQMUliVMq) z=NTjli^jqTxNRyv)oU_ih|v*GOC$yssC08M=KX7J}A;!?s;g&&&jK!0cPZ+5tg z6(y|kuXl(MoeHAG%D3;iX*e&WSwaQ^vGOoh|6Z@!lh<34%Rm-9uvDctT^rw$=A{}d z(sG@UW>y|?kgbR~O(#I^a7SFyc*(L9S<;<~%@osRU8trDRR>aGIn|2SdCyHmEC&&R zffoZHS@JGHpu;lc_Gf$`4h+N|k&Ua9q=GZB$!S!IF=yrVk0elXl*jQz8}uCZnC>`2 zPSay!Cc8H^`qBss>dSO=R}>=J?z37X^yzeMvPBw{ieeCj<&eT>nUC4pC3TDR#dtuA zNO`pE0{<mgn>%9RN0Bh`J5!Gd4pQ*ue|Pym>hz0ELrp$G~_mP(pn)p&r> z^d%d?G&EI4QU2<1~eq z(50rsCO!Q+$7j=Q12ZEGsk#p zcf}8xQuxP5SvgdwyAnWsOWQ8Ps8GdU&Q;?qvZ`*fRg>$ zm9(JJ1GBk%zXlCs++%5&oCawQw`W9?6{_%yXtZ&0Sjlq3UZW$)4taN&9bXIc?OPas z#lhb^rWiox^XB6H<+-9w*I*afDcEpa8wt^98-^VQt;Ir&t^e^?5 z?Ewrc2}2l=)KTHoIH#gK*AiBELA*hBJqE_gXk$9YLUvQjjW#@WYr3l?on5}9M&3(9Ms|8+B7fJg&s!bHRj4Yn(J6R>*Y*nPJ$; zaEdfQ)|3kg`j4bKny|oeu?B?laLO4hFHmXF_(H}P|0=~=Ya-T!X}!iDI1iZC;}MC= zzkyiv-`BT)g;<@&pJn`INy556B37&MqqStkYHiGD)?%jGyBAIPn9v&23=c4kp)x7u zPG}fn1xcF~S1)UtveqGIAQtA&8jY_8PF(@1rYTC8iKUIkqOw~x&3thqy#zP3vYkVP zaT`6?E_{*-lQvpBbbeN}nE&#TCPnaL`}^KC*8OR7W~IhAG5+`Y#JNg|&F^b1*?i~~ zTPFE7#veIGGi{OmU2L@HA22>AAj@8S-h%wO^-V$?C9XH9{2SPi7ouq6tO8!5YNfRDLgoLTV%$^WGyR>%tF9e*+;mbyPUM z%nQ3k`2`)KaHs+JtdZ1%aW)NzWBpd=vfJNf0Yx0bVCNS&2dr%XEw43(aUDMVwK3 z2Cx1!sk7?Do%jTuh)j(&6Q>1IAFDpw)(sFmcO zgR~(jda&h2VN>2vp9z?D=iW1uRZEf;A&<+jq~bqWzO}?G8W$pK#e|@$McuH&IG}~G zoHVhPyf8^;uu+n@CyMH!Ss*_a+f#O|Wqq-x=)<=!C%X3>As1Tcu!MglM_6LfTx-0{ zf-Hu`c^4Yd_=MDCRfRP~V?mAc=)a{uIyLz}G(JntYugEHP`v6rIF#@n3^EJvZ6&sWYel9) zE(L`L@TKrK=fj*DU8t#O*C*F0=U{PhpKk7T>xiSX!~=c8Y_)iE+l zUA&mo1@+>^fCv|r{n6_JZN=jk=cg3$DK8OgyNFE}w~YQz^a5sM!To(xum6QFRCH3z zciG7-W9(Mpxsw*(G{bOjQk!58k6b1|RxnML#G z`n8T?@oiGg>1sJX$*YK$oMcpT0`p6cID1LznoPG^q55ExBF#k6{Y{E6B^RpGn-l?Q z?EO*E&52bFBK(Ew$tG6PO+_bUk*Sg-{UOZ6zXqA+Tc&2OJ-U6CUk&R*lo2)k^P@%l zQTX^|Ip+R^Ibbxb3WB>D#l!wMJ;`}JK4RJ>qHv?h?CBoSMwP1*$|>|{Y!87?CO}c} z3z8S#II%erR{0TZzih)M5LvG;U$Dr2-GE3>i-j;JraCg>YD!euBObwvpa;g;@jfYF z>ajW&uMQ~5Sh$HeNA44Lx{US|8pVK54WI$nz4-rUz}SMWdD|XvwS|ND9~p4UrSSoi zAJlljmt0B%wl*X9L(jnGfZT66a`{0^&f`o67s5>K3AST{7>vh$fgR!d-{(Upl7bB^ zulVlLmgyEd$orAlS=HVvP0=NQluGnzbBcQ&)<$>mzYd>5nr`V3I)k@ z1$4j)VL_>zx@b~Wn<$*EOA_{35_Ad0R`xC@`GYf5#NYoHkS|S=S>=CcBhA#rk`0I? zw7PL8@SrgTn*0gIfBAvXmy>Sg3QK`*xFW}nOswIsy(*kcPCxFmH^M&p6;#*bqAmF=)U+VH4D z{C;JD#U;#gm|R@6sh}qUG*+RTd?RdHfs9+QEt%M1v7S;dh$mnZ$T*>53zBw&tX(HC z6PKFpSR{jWEY4#Zr&ihrvnVzoo(Gp181Si_X1l-)C>SD`VlUL=>pKorz#3ih)#}UY z0MqXNt6B#n1;f~Du{>Upd39m*jnA-0N-B_q$}FfdK7waGN1VRDa@tBvR*5eJ8h1e2lTvU15)rliLmK5gIlUC|huh$>^cu+%s*|!(gjghkm|>93 z3hQt=?_s!7&FYuYJO`F0N1>vUyX1OR9|W2T4n=z4<$~&k8Od0Y*v`0$dr7y6_c0x3O{2*Rg9FmeV-Rx0|RCIgCHM6c^wM;q@LI%ptg1{W`- zr3~3ivIUKZhK1P?8HX$4vGo@I%+^lU_cRG)6B{iiJ<63>=WM`vz1?OC+E^30urF`NEH)2EjGvrfH-TC^0KZ@3^< z5=!x8*11PS)RxHHqI5W3mwVESFx^hk{KkS#YaXDavs$;zl%l{tf9igCS~84BYizp2 z9zpyP?)a!13o@-tr*KQY{G@^j#1#&K9gf(-fzDh}bE7Ht+<1P+s(&a(Z5oL@3+L(0 z$(jG9vt5En45yHQRs78?X4Hy4f60%Qh10B}?;b&s-8kPW+P^tjRA3ctF0d;h!>|#& z=TF9aMy6QVl*-CVgHlN(3e`vKXNar@FY!6e+(Ol1l!cM{U^+TLml1=-YKYP$%EHa8 zHup9f2@cZHNH$C*l!G_rd(*9g4-DL&b5s6p8P@%WPutj9{dnU2q*6bpb>p*|Oxv0q zV765>`;~YRS;ud*T&wuG*63`*O$E*^KVURs-%a_KmxZ&eXI};_nwTM8S*ccpLss$5 zM$|K{qGv1Pz!6mBvExaGyq^uI{RW=Z6Nz0diA|=LQr$4_4_{}-@erkF!Q1dP$9(Gn zsVJtp1__(k0c)Y@)J&_xj}|qdi5{nk9}*Hi16=}Ev&TT%v|hdf0R0{V zC#e8Y-Iw@$w23a;QBqBUZ3(%0KSupUNd%E7(?~$3tcZ^s`jaH<`~y@$CrALhY=D9|rba!0LnY%Nim2oZl`+s$`?$ zWe+9^2|5JGNo<0E6knSTIp9Tm8w?9aESk=cf-`2&Iq7KWL1JZsXz#QD@7E7%5uEdk z?8Mg$=)Lg{$=Q)X#LN~Jge7ria$JQCt8l&51_Z}dyzmjpKa?q9jUoziAe5KLl^%+s z^#uG%wYSfN)z+*OLyZitCbOLI@TIOv`bRJEQM#&~QE4e^ILGSzKvSw@V2}KdRFM%5 ztNy`4n<^)p5Vv}HTsW+~(TK)(zR!$z(tOSM^glyW7JrHjjJZhK4lFygS7&@fT`@<{}i#i0YO2phDk+j$4eLdYH9gNz& zDBc~C>-{k;;_L-VsAe;9Y)GquFjT_NmHsC7OZ!)lf&^BY{*{v>t(Ia5)8&@_r8ni8 zDJae{{t}Ubixdv5bqm$}psHXcl45*93DkQQYe+%O&ZC*a44FCN^5_y#THxB@ac z3(r)u1*K#0=Vf6fKo^@C)Ula?xT2HCzN6KSOtBIhhGs{LkyK~qIimdNapp9eQwHX$ zpP3gTAiK(xO*4_a;^f~+kdy+2e$wQFG*HROcgY8}@&TZkfVO3t>NE=o+Omcuw0sO= z@qHK+K}aVEQ8OJocuv?_@^WR~lh;neM%`C`Rg9OwC9S85|5yOEH#VhN+@$?F7-Ui# z9sUZ<)?uA;<&o=Lrd(^CHlXcaC$Eu~hZ3kLHCn>KByP#=*+wZ^1M>E@npI+)Zx!r| zPl3jHR>9}9Z7ngn3iquoqTQ_G`G;&!#-FT$WryPhJ*|Q*OQ@kQkGr^FMt85N7b}nj z{;iw8O3MPHNbAXupCF2NmV=Yo@kp!M{VVZ`@~R$Sh#G=w$c7q13Bdq73{>IIpWX_& zP*y8SggQej+LY5HE+7C3d5uoCL{qA(8398y{_$BHn4mNGgLo>r@=wYeji8@k0Cv-#tWaC>P3tE89R3|7jZ}Fuf@Isd1d!q!B5{nL47uR6F>Q`>CVqL`S0e@ZM)PZPK-F#u{)>EORgWGIiQ(Ew8ZMVkhVef)t!jZ5p}rS*+V8{(x6Rw;k_8L}e@Se4knu#mK7 zR12LbvR-T~8y8o{ODRt#0RmwPt1ji-Sfxm(h6h}Wc|=Gp#RHNEg^sVF2d~UiidpV) zq7j_JYB#@^^g7C`vHY@Nwd$%hxcG-wWlUFADJoaG`4VXaDid`vDI-VYU3p9a8{x^i zH7-O}36+{eDdqM!`9EacDwt5fm5aTd+gWKQC6<#%g*0_aEMKEKv2#6HyfEs#YfS~l zF~U}EflZujYGoz&m<-+`ok-y+1L%x}R`!WPh5Hq&)G13D-yFa1=YwBY*7Y7beSvu# zD{4~{y+&W&-HBGXMRs?gTDy!E=npe&JrGkk?#sKVj>%yPrIuj@SLyjPCW)Udeu}!$ znT|Fqjm_fF=-lYb7?p!ajzLiNI!A82Vk#yxIJn@wjjM3l4D)jQpEO&X|h+>}$w1*oTZ0}9VTS>C;v$NJ>* z4DUJU3H$vxN2#@>*;u?R7LLhqfAj`CE#pD4aZKl|1=O89HUk75$k4}1Ml*T~_t-Y< zSJ827X6&+yU9K#xm#OxufQP0S{UXjh;JK3;ios($7xgC{SFlg&=;cEONTFJ%M%=*8 zZ3RN*+9M(f=@GSK)6-z{c7TegxLb{QsEtQ_JGNaujsWaZbvI=Z(dUuV z>k(Ku0HUH$FQ=(Q>xq}Z;6XaYW>pZl5NH29+(GMaJsP2NGZGw*UGm-W-l=mOX@u)a zAMNQwFE1}2X#zVP$4b#18sQuo;6}*jO-W*oVyYF!sS6jaA+73EwM&E!RXQ3~MYejf zu9ND*x)NxtTP*M`{~351H^4isCItS%KY+) z)G@XAVLdWsF?kdVwQez$4$LsFrxukg!oYi~euJdW4iv~ETULn#dmGgpY1~L(+Zs1e z(XtS-3@YJ~10hI!c_LY~yfY;jXg`u*$gU~C?cUp4JC{DkjLSvM?akfyeMcjCP<(tl zwDEi4zazq~5uNVHXV;2L?#Opb8epK~?nr0Xi5YjC7rGj%3Mr5q^pXlUh>z|V#fFFr z?mUbtC3p49yc%6KsZ*$y7*~tgcNOH?G}YrYHH;ln<v6Y%tU!rwNqv z?mi1IRJi2s@#tpD-MynXc)dMf>eQabO;FIiJ1xtj^pbo7=_=4zGSLd$Fo>E?yDBuf zn9REgFW^cXR#c(){DibLfK_<}DduEErXPXSDrBIyNxjFFG0@BFj(WH!iVCt>y=+EC z;()wDo_ZhL9JFqfzO?;@I%RY)*~qxs2R-!h({G{xNmfLh`fjM3W^T78i6k@HO>*h}5X5R3)n+Nb+x4_L)@m;^r%_I1( z{mF%V3gc!_;QmDKb0koC`ra7Ct-COAsgmU;>~T~9>KGaeBT5@bKh+ov$^#R(j95dc zh8VYy6Y>{JmZ4G()IWLLW#wWWJ`N)cE-73eKmiPX5Cw`c6rjoGVyZhvK`a2=d(4v{ zDUq`Yf~R$sUnAxjUOAuAY1js}m1T?x1enBQ{OW8FmxsVFyr@l?G&%bN zK!6g@O0{ls_p#tE=cUWQvLG%t1=S8!lHHTbs9<4p( z;tS@=#k4WB@ty<7A~})^+Pe7Gub43n0R|#D*5`>k%fB&hil|_|DK+MeI?KsXjA29} zQc$20QQ<~_;oz2zBJoMIi_dz%=xiuTvMc{|_DxcVV5o-C$Oo%zGMii$4Xd`UgOZ3S zki{-jt_0F5cl`Y&yF$IAPVohc9&SVxqeX7dhRdH|1Hw0KPkg%d$YpP|+72_lv z;hxeynk4X2}Sap)lb9+3dDW0-Qq0`-{;N zt}Wb}2!T}*gV-&r4nPbLSF$4I3Mfmh{zRv#X{~RPe2mLp0c6jxiqM=S9_Li(Y^({#QH#z}ME(S1W#hc!kECv$VG39w@cW5T(6|rtwe(X8Q`p257#R{Pg z@`jya+94*aojkbH3#&c!p{9=kbCFIU4pQF-sR!vesZ z-X5Uw4mhK2W`zGYAht z`p}Fn>2(2^XeLDR_-{|0VB?@)SjrN)To45ej(i>;S4kgS9MQKs#{pkYIUcI8VDway z(QmrCs0fxsJZ0zK7x9{&drj{>;WUnjvWXez$~>xRb0M5Yz&SNWU;iF(SSv5U;UkDZ za4xWMn*lQ@m)goj*uVwT+Zwx z2^U#;5sy(3@%8d$nH~s;>GMWl1LXlR+d_cai&hbC*oZS z!NKL!GIm8CvNlX_nRZetw2w1IKHE7Y<(iEJRH+^E)XljDWa&sQ?y-1WyAF z9@ASHF--5|dzM>?=&H2t#|tm;au6sC#z_l8T3eFgDWTXlP?cVC z%Q3q3JSi!5X1=0?bu&b32S#5CZE=N2gRmxaP>HoxlY7$R5#LWIfrOm4grL$Pe+Vio z!cs^rJO9J2eBLx37}YRIw{zH!huH9n24risI8WWaEvvzm0_cd zS?`)4Fa`xzNG`yU5i3cbOz)L>_%-+r|42W=1_rBPk=w5da+v z8Duj^Y)tRc`1@pR)tdmJ#_k8AJIDtG{*nk}1);v=1v%wYr~TA)_JY`G7ghLDXxU@< z&@)!nz05!bMyFg-K?TJMX|=x)8HmoX4}VP8X>14wAZSGmaBbXCiqX);8{)x-@~}9H zBP63EmO%#LZG#-)ZP2l+H_R@?9IIx&?o))xxU+X8BhLhS(18_UZNChG>Q%J~ruMDT*p=~Ds;x*PUPaZDyl(9)+yw@08Bh(Cc5wvZu;1~p!Ne~Xh zOq&#jPL{EI!d}#)C?Ls)Bpmo*Oe)hRMZ9HiDTuvcY+e`<*i~B91_?F#GhqFofEVG_ zHmJjR8%R9Z95ukuGVrcUxjHYL1`J>mE+?gCrm+#HKskKcxWMX8E+QzgbL zJ>x(n2ymflBCiz?Kc7Vg9^rdgL!Le`;2z=0HfoDvxIYTt@~iCFl1m`>s#%@nwy>7q!1ELhTmt!a}S)lmla+=@tHy4mW^i8vsM0YTI#XgXpoThTW(_)-f)|QnH}| zKpZ|NNv~zu1Ar3+02m!xjLX9TE2?1kW#UjA+$ieWiw(xgEuVD6Eb5jQm*kO3_krfC z&`$bK$k3~2R7Q>n27&=`hE8C62jIjNk%`Q(mn^55U8;659YaaH+FAq)7XS)rx}LD) zLx^|0xVutl>ht7YEN+YBZKBR#5FE$N-b7Rg0PXxFwLPc)2-wDmM?C*%VVOt9z2UH( zIHg>k7lAgkHM7GqMB|_p?lR;-n0hy@n&b*AG@wD8Id$rb3vO}r1le?vEn4OL7lwHN zS`8s8LS2aznFL*2BU)wC)6_FP6r#0kO4DwlC2>hM{U8At_BZhuCPY3p=GcJG^l-qO z)=}yea+7Q+CrAAx-Z%w+33x7Jk)}lTfSxDa_Yg}^&Gf(~co5z<%z`|);92s(zem1k z2>A<0vL=_M61EF2%u-%bL6#(ix=b^`I#(kp@3lVms$hK88LA>pw zXp1l~{=56(B};^d>;_s2`IbE?as`1#=v?X}_2Z_|xNCX$KJYXwOkjhd7EW@b(0v#9 zKD-mvIx}+7)3KuwP$=3V5uiRmi7p!Hh_&#OANH41$5p z3T*0_8Qqo3XvIW?^^(vOD}~_{I4VfdzX%`dMdZ{|zAu(JAjmy^pu=!UB6)eR>0t)P zjaZ;@-w3W=9L_U?-f(lOi~*T>c@YiQ_`|~5WGl=-bmgQ;WdTe`7(F>C=%CzkrL)Le zKzs=PG$zF>Ee{-MOQ(vuAZMi_BE1AyQ?D6>{ZRT=0B0wplvWBUytp@XnMM~e$w*qW z9HNJ`Py?BBDxz{7>6YVDE|Hz2Xs8JZK<|*gTwVf8PCPSH=p}zP$3aCDL(1_I4T6L> z$;mMSFh-Iktt!{XMuIe=iz`UHdHe1Pi4dajv?3)1(e$WPMwjJxqYS$MFfe#C9WIId zk~I+*O&2QffKIqVF_cY}j8FZ6nYnqi0CdptbNMDIdhHs}*GP+0f`$*drUO!-PJdF3 zOQic~i}Dc6Hnj5q(~I|3f~;sw6^X|sSYn)U;P4%&6$WlK!}z6ZVf9ENitd_Ap)y^) zD#WzPmN+Nho6W&uIB1%;o5gtvbB5b}B zFx^lB;tjYFwX@??uU!7XD>WuzVJOv)aDW#q-~T9Gbyx}FHQaKNP}m-0tR<}SGWpC0 zT%|YbGp@s`o#<%=?Jtn8dZlLud>zV>71ulw2;V~?Cu~$gl3);|vjT6()DYJ+ReFP& znD#`8XR;MV?IYGd(b*S`sBnYaUcAt>l8N7*xR5<9&VRCmO%Y?CY{PCBbD!+a=7CCd0wwh*fV%(lZ>&V^MYZiW58wFNA?~Rix+fu*ULFo5uYsBIK*~- zv~k{2YNf6)ZjV!%;@J`lqEdnaL~tqq(Lf)s_b%EKo5UuYN=Ig3_12P{Jq2L~xhYMq zUu?mol&q+N1zkivi4>pYoQ|kX{O0u`d6M>whhQXS7ueawx3N@}@0aza;f6qCT(jxr zhRi7UwndqV_u!=yN;*9?row0eh>QioVFjf(;$V_Dl7gymW1mvJXXA?eXotj<);csw z>?iH0Zs#JzwHXOXLwC4;)i$OH=UMnR@?MZhM zk^w1OX<)C{A|KsGtgQj6Z;6pt>|B^pP$}&zb`}uI^!7sluq>P2SWH%-_Q<1)t_pnr z55&C@c7tqVC*vkDWKj>#7|6Y++_+afv#5Dc#!)p2yXulK_lu7gb{39F4&3YIWV~p6bI9uGjIFhmApS5fjZ%G?}X9UnDFh}nAVAN13 zAS6F@{?$!gythY>FYsry#Yd1|67cHC`zX&;97h zK<)6wNvHx0+sk_-o}NRAr@X3; zdJj9i{K-1FQoxGvkX*nsal_Mj7m^qgO^{Dgja;YryAi3Hg)*MNW|K1^)1;_6)igEB z957T9E1%9PKm)5g$QZ4kR5_?x`L0D%)Ia@uADBC z!g$Fqm}nVbCg9K%`XVY~;`ZJlE?s_ZP}YLECGSXHi$%*@;3y(Mh!X2ZIRM=lvx=gM0yu3dZJ-hnGS7olX1p8 z1Ad^$#LHPpQ9bbWu>2Hgg@`jtamGa;1YDcID-o{3ntMV;1p?ryh=iJc z<1qkCAP&MCn?mF#(SH*^r(`Yf;ad6>iuUU!Hi-C15nPcUbtj%S$5Cm!vpdJpyHngm z+EffHRg%_BmC30Xo{v{fNgXGM;j0RMiUYQ&ITa}v&@yqU|)R8vQsS4ItZ zWtBM&$-Ioh>Hc0=wyju^HlY3}MKpqb?AC%LJ`8i0RU)&wWhx83!UjeGafEz3{Tv~jRYUNZnhas2+M&{yUnlcUYb61)niRvA|j(R#2DVCGD~8>LO8dVQ6K$>4Fa z(eU{?vJf{aP(#{uytjIaoeCU($mB!5V!eYhX(dJB@GAX)D?=SfR5~F~!3AFbs)M8w zSn6PBGYA8(ZjfVBNbyy$1$FU~YUHlC#qpJ`*in)De8IpCA@V3WrG}`b-2uY)D!j`<@sCfMO2zuJ^ zeDf$Ul-iGnC)PV??Sogfr*W*vv=!(xMTUFjULM9qZs@zy5dXy+-%HhOYC-cc9!TYc zQmABmk-2Zoqn$@n#Y&!TAr31)Qw^LCC;Ul)QL=lFYFzmQXeQfOyreh$B0tUp2gP)I zH!lcyoaj{8Iaoii3+Vh)XPi zW^_D(@dm3Y?m%OZ7G~6XxpO|>PH&AcaE^9eCBTAM2abrRUJ9$#4Pwhnta3EZYKW|U(c9@wS*6_inLB1G2@x|p5mXsA4MW1ch$qGHVI{Ada;=jHf^jynGbba2&;(Yg)BjDH{MoUg@wpsxtGuVM4Q7(v^7^ ziNMPRU0fQ*PeBfHK_Y4|u%M&mNm>hIfFP@`nXXGPCcIe%yFTLPm-7P%LVz?xW`h>l zV%EzSGN-6}xvlB6s4oNh@W-L`@znuUM%DDSh3%FdOPHEQl!owq339+FuW1cT=z6Xg zwzg~9L0Kv(jv-W<{K;dYW^H=td#mr@5 zK^UtH*zg7-hId|Lnb070(%yn@3>M6roa3S1Kg%;Q3Qb}lEM{NO4{{5(Y_%9hokBAxTI(LNkbi_rcJ23B1A=yYuhI5cc!>ffy zPcLgg+9(vkbck=(6&3<*GAO`ZdS9otM+<8`Ge(rY+7iB^>_FV|YKJTs6LQjE<6szN zXSnn36w6<2)r*b<^9Pq`aO`QMv`COLf*SFd{4z3Zpslf-!P8MuK`o0?q8Lrgh>2ra z6I|c62TU|A&!DBSYp`U1Ku50_(8YDOB~{dilqziRQ0}S&F+(2{W7g+%dw^L>8?Yt{ znm{}0rT2)YAVJGafzu)t)P9RSQ^7_kEb6Qfo7bmbkN0vz7zLe;r~h;cr3_m_O&Woz zb`$swlPM=x4#uPzPR?lKfUQT)j<~Svz92eo$bqI@yrE5$JTxarK`R`H2)wAhEa*~* zW~l9fx=POr9HJGObku0TE+QG~yGT0injp1N1Iom`Su0urCkRSFJ<}`5B|~Je(ULFm z`G(fPml*V#oB)}5%Ih|X^o@fu9+r$#v3R7Y0gfpF{3BxK#!k*v%=>dnENnRP9~YbRtnE+{R7t%i&}EIHQ_MUiXpFcW3Pz$ zueB;zhLZ=1u?~SF#5)L6FxSb`N5X$FUKL-wRuElJD=|d*Ox8v981n9fb*JNwS4(|@ zYr4XECTl{wkztF3*IGvzG7!+i25=Kjgw@btRjsDwT>|Jf>yCh;=3MMkv(8L4^5tzU z4i9X^e1i;IRMRC;hp|D-tL?@%iCwkb*=r)OxwTW{5OUFd^OM3dV%>i&VRw30tgSJ z2J%X1zQeG2idzM&oxkGdf^K85Jc-G z!y*o-i-KQt0Zk*)8F$I`7AVc###`c{H(C}X$qC9WmBA^%Rg8Dh=au69Em>C>?~$ah z-3m#ks7hPyeuhm}R00^I3HdKY5m7%3e2krV?A@#;a(BQW}j``;Q;0x+X`^T_S9v5(K;i%z=4g>T=+K3ui(?KzAsSXH(?g+;EWDa8uxpaWozk$)s5*AC{b z5uwh9X23pL^HL!8w;&%zrKIHb-_+ zYufr1-@e->^=}_y2=wZmyG8bU?fO}_ICyn8${)JOmcherL zRijkB*?#=mW_nytkHtgpWqE&mfbQX~;{JvA&h}c(t8h~4ZgJ$j{B-MiCEZg(8s#K3 zh~_&Z-pxk{O&BUv?7#EU+%pVv!JFVa2DxTuJ9f9I-&v4%ClD%D@ahk@j2jwj$q*5x z5R1#MGt+CyszWJzF!GCV3|R3#CHmLpvW?=_y7nz7!HqmSttX%AfZ$;V>}tw(Go4Gz zBQQ@eR^sKlHc=cQ#11ngi`HZ-5eui>WfTOm*$lJQlC<%zo^FpXtq87re#-?QF%WuOS9e2E+1_myo@eK?Zr zT1tm&Bn+4h(?i}Sb)XpYU>(T>W7@Vlmv<%#sXrichgkBy$+5qSpUyDd7Db#(?QM3* zG#oc%oq6-npjZjwwYe5aU$;oe(7-$EAnO>L@~Bo2Yj(ZU9W&jjZc*|2{WuaBgK75%u=i|2spAet!Dlb~h7O{n_n$2T#*Ix=wIezYz}KB zm|&@ove~SPJt9VbG#Fss|ELI`zkhU-H#CB$k6HodnISRk^J&EKit3v$8a~Z!BdrrTC)oTTHy&z4 z?lM9N@`{q0skJEG(=E6QK#50)qL4*4YDDFpn^}$6zh@>}FGhZL8wmH&XC=iNh5y~A z^okt35UvKoDn=v~XTGe48=3wzr2{~CQ^nZ58PQbA3?TtifwXTKFs2s#o^c2z5w!U3 zkDImx(6<-!oLms9o&=Z5&q-<}nbGqRz;3^V5iFGRB?9^jpg<%oQY`mT%{7R0H8VkQ7;p zRy|c@e}3H%_6LgCH1bFqNvfre!(N2%31p+0l3c#|M3e8ZD8z^TOn(w%hQo=Jx?a9T z1eFnhGR0UgKKr}}bX{LW6ol&nOJhu4)q3Aetm`A1z5u0-m?C*8cRol|A}-%zJckoq ztRSn>IPCIGVfq}g{)=WTDE55Ox>K>Tc7+4D>2pvo#SCDJnB?I(S%{EohU@?(FQNni zphrdb`c}TN3^BPro5e(|zAZjC%j-S$H>1ZM`^RMi zG?~8)#C77WpaN@Gh^_m_X33FA(jgTmIV^Ghm-*eX3rviY+D7XrTBl;03S>fdO@ty+ z{_;qgsV6EJ-(v?FO@iXdF9(%MO?Qxj^YjroI64ml&LB~+O+exSg5Oq|j>@9*S7jky z|0Yhfzlm8D&J{u%dFA51uWo^Q9R8|H>UyTfh{nc7(e41v2E7iLZ1SpM2SN<7?_+N| zMCI45)XJ4&>DQNKfQ?nCoE)ZPu>MV7w7d43cBz#RSM=e-rr!hKguS>Woo{eK3RZtJ zgZ-E2@ol%f|B{QO5n(7cEC{?h0o9$MJg=W+3EiuH-gRL;@D67=(dNUgH413I1 z9Gc~#eoQ9n4-H740_#BF{`v;tTs_}@Nj4zb3z545dIMDK<15nO3|BZyYRVstxv ztrvEItR{3=U$x+HTgLtpTj;~a#J=x`gFbzJxCx(2f4Ek5Qj_e24mPh7p(Cg8vw@+8 zuIvrbw}BWjv>}>`6^ssgVePu=hlU#%yF~Oo*1CuStT;f3-#9`DMs}Fwi1Dr}(+_01 zF-1IitcJ}K1AZ)JW5o0yH~Vo|O_2t}_{61O6}vo(Ws9ogPBHfQn-pW$xLAMFh}*I0dK&C=5AH$(|O|E-_L;;;rd5!)(Zg{2c;r=Mp>J-kUdp~1K`JiL=n7B z_%`sDs+FoE@k%ObD-glPyU6e^M_P327pG9=K`INx!gcF;nD^=yi#WNM+^D7fwKb zV|!9rgw2Zmp2{ZTYrL18i?13lD>|o2o*+Wbwc2vDOit2z;zcbQIg&c8nu`|tep5H5 zs-})>@^6p|Y3z?>>1@Z9(9S}+OvM>_cx^q{UNVG~9wuj;b{8Y5XCI2Ji9_0ToRP;= zi0%;b`J6O~ez*^BEwKosUmq)J4YtwzVHvW0u^WBtR@R9uYIcOgE*Jpp2FF3uLI@?@34W&ei7^KXDth0%gQmHh)z{Bs|sy_?UGgg>Sy83#Y)v% zj);z|Wbnl5ceb0~zu9TozCUBwv{Q(jcp4w1*{F{l_Onr;zK!QZa&|7Z@Qeo7{h2Es za`996O}{?5`n6Cv$|TL!`#hG%GGb>LEUUfrbFRS?Py>?+IcX6W(h=iGQuNx!=8M=g zgKc0(V?BfTDf3aWZ-Q*xpAhry<-3YJ3&{rTGs?K08+t$y=O$hs7Q8UUw2GGN{zAP& z?BNjW!{*0639;K*v4wVJ8gs;krLktN&!o+_N*AQD{cKmPGM#n8*GuWF@Vu5#c|>o+ z*;-H4{%`FjWt+Lh$_1dKS!iZs$qawnpmDJk;Xs)oPr;|gnrE&0y&nyGcw4(tJST3<>qf zc#D0P!QOTS5q1E$S2CecyJFvGvbIj*_}*Av7RyCRX%_3o_Qu9$u{OSQ;X*pPsK(X4 zbM-75bXsg}7JfJWSnP&u_BQJgYn8)F(;==nU<0qcpRY6I6LdHB#m3~Y=By_6NDk}C zHpS|4SV52s5m-VSpfWkj8~ZhfUCTu5@?6%H&51pb%VxKRtjg&Yih|#4Vi!q|g~A!s z!~JCOP(h3J%!A?4Vz=b6w(T@4wgndQEKaZVag0NzHQ~`#JBJidN33Tp0&i+;Z60fX zp(;14@Vh?JVj%OMYzCk=z)m5*5(!=BQHn%9$F4mt@#HXm)r25oMzMgZu{QbaCRP=j zk-II@dKuqH(Gj?7Of6a!@V4RJGA4I~y?OO9;t&|hw53i4_*G{9q8~Qo}h@6O9dA2V++ku2?vH(pxdE3pIzM%A_r)%X!;-#L^k3#CE2pYgOi0x*=&O9^0X98C}L%md_LD44#H zTPgQ!0i4V;f>E{~V=N(?#mtnh&^fv4FQv63B(>0sNe$~64RHb%+uw$zL2-X-!%AbX z1Xx=1Y~*<&QAXwLcEVUXM#ai+xS%;l+CWGk&!P+;V0Q^R)Oa@3t0Ir$aX`ZO43x%c z76jJ6R&YF3KO1BKwbS(6+kS#>VP9Itwj4`;kkmmYu-2vk5I@oE;USLz=W^Xcv6 z7eZ(00O-!6mlU;+{Zz>Qbbb-sNXa+L$lwLV*pBSwYY)aD$r1aDFm})!yh8mL)+Q~j zVu}SJ0+p|~vu2SQZCNn4wcfTdECj3w7HH5e_F`MsraQb}I8}hq%U47O393gyNd}N} zk>`*Kco=9OFvpg+XJJgP54OkDSs2^Yp3P*ft@-7~VpakTdZ?H+ zllw^SSWPkO7u0A?3fJh6TszSWpm$*Zi?KI>kGeSj_;+SE=O(b>3?#s2xo=bs>w)>A zfQsUYw^i#|@I-5^rEX9ZRMe=*AcDq93o2;r4-G2TsHk{UgQDUcD^)yDR8(p`{_oFx zHw$#P|NmcKWWW2}dFFiPndhECgNue6#g}QO6VjlQ5!+9jtmb|Rh$8k5=Er!c>>G>G{ffx-&+Y z3z?C(MwnqNi7Vd4)C`-F>;~t0Uz72cDovqQ$Rh@59p(~ZS96rX=300BE@q;+!QHis z8ItaSvt5dgPHEE_+BO9(ahFnUO1sExL$)bYRxO^mo}q#0n%F*7;Age=87VAp-~zK7 zSmP>xJBO_b=L7kscQ`*aQP9~Y`_&jwfC?ZGOx|CygBsid~uLOV@?t)!Sw_WYC*N6&sGE(fC2O3md=RGQND6lGmTLtcY^>v><-$ENyyaO$6d6W*{!yR z#_|6-QuzNVWj)vn3@-Gy^D@DdvVQL4-OQ0C*Z8e&$_BXoMw){<_Qx<$s?ANQ#A>(@ zNem;+I5Wk4G|~)%Xm=iE_DeAX5#`&YbwKl4*3B&+ZRWKrfsPHBmcpflA~j8u z$Cz0r#wpXwy}rA-D~67~+WqNQ=4O;gFx9Sd57X399FZra%y!5U6uGzdFujN7`9b@R zBsOSEC0L8BBum-CaoSJqiT=FOt=W?UrqX?}r}@;rxYfP2ml-jBXrvC)AyWCGwHbAG zok@}mJ7cUFf|PpmSaV>vT{OxXLKCP=JG6}SSN&mhQvyE_9#nWA-Xh%%!A@_HKAB%ac_~r+uPx1*+H^lIcI;-#PW`1bdh_<{9Tw# zH6EU2crD^lh@U}t)Ml&{p<<#u9?bhDBVAR*e?z^DPJS~eZcBx#K4XLMS6&uKwP=rt z>);{PehgADvshp+v$bviC&gg|pGBs%i$#o$a@6~2#D@F>M7p4?(Csr0c0cC+FwT6) zafb9RVLCJ@Y*)0$q-a-IqfJ~$^ini&p}S;Xvwu8fHt0a&GWWv1X6V5tS@o+Z__2eM zzSzUUH2IZ6wHXNrH0#4)NIsFHtmOpG>TliY`1=LDfF9hVG>qCu(n^;@@lR6)b`1*@9_MN-ob^KD zP8J{27Jb2)q9(l~D~Cx`5g78M3ez0YZblU0!~*MlV#8!4R%>h3flE^EnEg5Po@Hk? zKj+f8yqjis3$KiGP5UFJJm}ur-}CH0?Qbrgy1{z{c=LW7>P53G)@B>;9CiVZhnbo` zJV-!Xp^G~9l+Zu>HrVHa07@$V@wigrgxG=*C07%C72>|+A@1D+Ol7H}K!X<+;n?7Q zIlxp?JLwRqe}Juxry_}0+~5PvF=notb)f0j{(7sKphGvX;)#0q@PQD~8yzNuVP&7I zH;K*a+7~W4$)r*@G2ajm$iMnXE;gTN(H~NgpaFsZW_Q{obL8oviwK#Z^h&5U7slPM zsFyFGeZYfXgh9DU{_E{AYDyitBNZ8CrO% z`gp24^dQq`n)j#qP;PG-BRDo{=Hg%5-w-&gHy>r+1aj;6FaJ2}yN6?33Z6lHd@+(C zUYFo8qx=Mau*B8w{ew(Z@jV8qqJ-w{!DfKD*9|_HC0ynXI@t6cTNE^WStuHbgrxwG zK77b)7nipqs>VbUpex9Q|E2c|gED#>SQyVmjVlf|ebTQQ`VwZgV!rX;3CYfq%&SNO z*AjXq#|5Hv7%tcV{rvjFO>O*r6kc8cOEkJ(N1!zZlklf6?7IdWIJQDw8w%TP_aOhZI6CbLK;*``Y{8_=m(qs|V1_{SW%L7z2qb;U8;;R|g zximIGS`!4=YP`7ks6`1!2O+BP%*oFs7o&Szc4(+bl^Yj&1V+)2ZUk z!|A280781d%lH86dQ35$8EJ`#1H&n+D4~a5ekhh-B^KowH6`xwDJB^Bk>3nNa3)L7 zNfw?h5mcRu&?)lOhw~ca>&I^O6w|G2lRQafO3<4RrkI1wCvMnLrW)JGq@z%teCB?8 zl(|2>-o`Vz8Hp$`;XhKqnag_nytV}#BdR5w=I}i7vW&0^+XC*PBv>d-#+IkxIJkeH zOgWMW*Jn62&<$pTIgc?TV(7~JjOc~Bu8mv9*wd-~n(0z3{Vab#X#v#QC;!M`VkD1W+7;Y+q_kY1(BdHmb_Yy2&C1_92z=n6-X~&tN ziFd=z2xAeNN!^{tnUe>6siT`&9|C2h37!@i{at3HAdMupgwB3nxq-)t0mlj%<5iKbV@kG?jjfcgok{m8YRXnv0UWD-BSfBxF^>G+Fi zd!o*UU5v(WjFl30*~tw($@Dfe-C-x0PGy&)hLYwXCVaktH=XOAleU^^4X1kd(0aM> zBy&@G7Mf2flW)rup<>}?OsZyDVX>~XHK=IG7cs$S?d7*ak`Yf7wg!jjoI^*s=+4LGE-Q!L;&#C8e9(3ez9YIgDE(~2~ zWl3VT?m%-Tr}$yiXkPTCHHPD}$ttAjpZRDVtDd^WO@I zP{c(K4C1$V;ySHOOb#8zLFcK#L$hN+G_kq^MT&<<@V^RXT9TG)Z_NBTdH}DBg5rzt zps4%#7XnR7FW^ln>bmZcPN{a}ze$$UagIusLv=IbrEb)z=8)P=PkIYPO!9J3(CVv# zri?}n$aHE0%2%qAFU7$~hR9JgagPWdIDE&!^HcZ2sb+M)YQ7f*g@h{>DwX=VL02+* z>?xn|BvNsbb@>IV=lY+<7QD{wf0}7Ft6j+yHj zbdP{kGoL$pIdJM+a^d_l%qf#T6<^0T7u&4q0J`sd}>T6%y*P8TZ^wX)-v%Y_C4koRNOVgfVdB6b>xMysfcO zXq9&Nj)}#Y0&Z5k$cLo(fE4hEn&IN3p7a3KgEX<&Wkkrpxu znWyku)O~-J`G;Mz**)`HvyZ`rW2$+sAjTqDw|=TQ0mJJq(~y(?;ZB)mj^ktXG}F&4 zcOOnOGkS={w85gs5mk8@_v7rky7R|at!_Yte>&TIYrb?Bo@17FzS{1PkC}764y&|v z!_PI{bahoC8Lf%<$+wW8I%)MlGf zL)e|^3a^vVQ0}KW-zp0fw&&|%5IUw!{Q2?lN)=Uxz>E|o<9!_-fFk?Jm&N| z*XMk5Uw_p4JM9`WLqiOu?$>USNAG&PQm=E-3(SDg|D*5#$P?7AEXCg3xi;dLG0Oe! z0&`ixwTmDjZrcTBaU4Dd`n}?^al6lO3#X%?Upw7gQ~;||Q{aLN5w?Hhj=s=LfsBl{ z2Z5OcIN+%V6E;2`&-465e3=;}M`-8QUcOZv=p*4UE?K~XsIOWc`*i7hmAb=su z7-g!(a_41b-nrQHHGg)s2S>ZR>fa+1_-ym&bqeqyCI(B%wP?CF1yPH%bzVy0K#nfR zjw31z?}Iu#LPG|3zm&%lNLF;*oAedQ_^$wuLtn$2wdF z`3N{jV8KJ?C+gn+y{R-?+_vAFeGAb0BxA1j64M29+R>Mo9z9~zKu?M}mbk7UA{9j` znwaPW@^(yjBQ7!3?%qpG0&U;wOUzj&+SKNIyiB z!ow8dhFFCbT~4Zgk`d+nE@NL;lxfeyVwKF0=RKqhuO>siMN9pDwhXWUQozpA@>Jv5 zu49T-!uF-i4&i&vQh~eWkLD7)=yBJ6hIz%-H8*`Y!?ZW;;1ZGSR8B15{L9Rh=EtV1 zE;Cmfd3jaTnd(vX-^fiRh{sPC9zvX%AtR?B7;3y;)K*Y%E;;{_(Q~Ilv_MEee^bXc zzTC~NGiOKdix#?uKNNR%Xn{%w3R1*)N0BiU7DJjXr@)XO8#mMJUhvwp+LLJ>yTG{= z5UWG;N|meFXQsHyy*SexSa7wR5na{gW}kuEB~hv+sZtbD1*F(9ElC)lgrIx5n|(Rw z_D}Bf%T0eiI$ePa#?S7cE6hxDwR`Cb)2HfLKj#r2x5Ko01%+b2qluSY`7ARujk9BB z1~oH@Yy5@MI3@>Phw6_u@n%uBN+#~`TF=D$Wh%p%H&+UT>)_ZZqNFgosdUO^G5 zi?^SwVU&;3)Y$P}fO8MeGJAAXC}aSK0Oo)Iq+(;a3$HZ83k#VmCaCsG^ckPJ`BxHH z@U8HqD<*X-Q|HFsXuc?ZU8_U@oEv$Q*$v~;SvQ$I3qDbR zn_G61=`rXw6#rowq8)=@Jn7&fKrOV-Xq2RLU*2Sf;yu>mX4C)VnFyyrB>u;&qK~Ok z;WCac{1Z3`O${v%jo{9u$ci}T0#9Mk>|na0yZQ={*R~0rLTFI|kv@0(&B(Jh{-}HM zW^-J{If@QRGQGYLuBLNC=b6DNGHLl21o|vT%kInA@o~`uPy$SQ%w0Oq^cYP3SPA8{ zt5%9bW=6f`^aO z3dYE)gxNZP5d$q_l3V4_9~k$V!_};jsW9yK`QR0lh++HeSCGG8^9#`ne4q)36tm*` zEP%6E><(N2^aJk91!h-syIZ)x95QjfjrZ4-=@^JiRz{>GM4eu)^z+6S-a`x@v`YHG z#vpR+V67CpL6Ksis`4Q>;#Qo+R-@wKH!HKFM%v^~L?vdJOt|2(3;=_yrDg! zdW+<^Y)tU>65tvdV@e`Ah9yC5>U{QAb8t)nY_4*l=`mz`N0+wsG+vQuL^y5|kJ4-p z-hf=EEX31rwVS^X_U?A~)z&S-KNx29WL zA*7Lkg3dG}(1d6L|M2+kYV9`n)NP!-pSjJqnM2Cn{t$d6fe7w@tKI&K%&2e(GZ&dI zotfPDuOqhBA1gY5{OFc1GJ|S%934CsXHg6mO6%c!ka*sGzsMZOZ8>h=#b#EYQ{(%? z9Qc}qLgAizGP4C>-I$GkxX%`ws-v_h>ZR7?{H&I2=ZHFOR>?IU_w<~J^zu)fL%_4x zznpYIN``7$weIxWO|QX?JEUC`9_ybjYIvDbd9-JuwFNh<6-~SUcGI=%L!gWfQ?6x5 zv{=a05Or;#d-ry8$S$v7u?VO^I2b>MY103o#YQa2He%4zuf0>m?LGaq>EKOw;vHrf zJaXOJ1@7iMuwcFBn(r{Z@x$172g^Ujb!#wv%ECZIwpeK-;tpsqC&b>g@rT^q4KUNs zzo4$Y)L?e$h?A|PZ9m)0K6;gRT!%YN%8Qgj0z9O>-dxY@9AD%;cle!Vm+tRd30mIo zI;M>X&m%o%1kdC-!%Wv81KsG z#tOD;qup1(E9~N)xywAznMv76KJ!|Lruj?Q^`{Is^=q|CZAM3vV7N7YF+^ZxTJ^az zSW=VtFr$(yj-R{(`@r(}lL92a^ih z_^y6DwD6QmEi-+3@zTWqvYl@WF-ORE)nvz)$W+P&4ex)u9ie7%~BmpQ7N*v@@~^-KcB(jffnk`;Gg#yk`J;+#o$5xr2GI7 zYuVgojqDtJ@iZ@d_8nObr%L!RC<@h1-mGw7Y2~6b*C|7;2sf;~sgNWPxUigVE?znql>9)A^ zy{1|x-r{>Fpo zzRllh)8Y6Uim94`AeK}&rGp=TZ`E7@f!b3RZ>;L?!=5Emn zGrQXplJdw-xxfU!{0XZ&BV(|3LY4c~edf^K-o(64#mTftM?y9M4FsNV3?{ymv-&j{F>!_!@UkBdq-SZf+wd&b98LM$_B;;@)aBwM7bDk5Nm_ z11O~x=5C~Az0@82fTGqW2}4PK~p(4oI%A*molQACMf$8jo9G*$i(t;8fa3j zUY17ecRe0Ldm47Vz!z)lU4TcFgn+hwEfyHFh3UtSfU)^?XzSK@hC2!3K8Jqb%LeQS zKfl`-OjBd2BJ9{RKJ*-9Ny}H-PtAadBG3L}_;97Al0ZAF`O|>}pB4=CdfPU{5&No1 z9XJsi2rmDONuKI9*khu%oT;NE%^k~0sGF_&$Ed!;|W5xWU2e9Kw`X+JC zOSOKj{~Npe=U}(RAcNe5#=ZY4v(M50-L>s~p=WKl#7H3^Cip^F#v=<8WgXH{zZPxl z_br@zE%T;)-|o>>W*5Ix!>JDmML^V`6$XfPMOP!-h>^*HP0#9uecxfVwpTofk%M;Z zdSAWAMA#L;B2uW>AUR#l%K9gQ3tpv|)lN*&_B!aCFvnf+FtGqCOnhH_^g2 zyw0ezvS_zcB|CIM6ndx4;JdSZ4YHHT8c{Udjl!oAX4LmQ>Tvoy1?mO{xT%kre!Zd^ zR%T+0LvuIhWKWgqaH#x%DD&x0Az4Qc+bzxJV)yTVcRgnvxF6iN|e#}&Mxw!>}AFNr1N$!Nh zgIvd&9y7fP{;c2J+mD&wqxL%D?`E%LHq|tPB_yeUXmIf_W&Sdg0Gs*!e>c7QpOYf# zsOWcGeh?~2iY!J=I0R_HQ>borU;Q1gAmn5uqbj%i&<3F!DH*x@AwmDut~cyPY`Om(z?US zi@Uh77sZO)j3?kI-gir%fbV(VeewkIU#si;BiNxJCOi$Ptys#l~*9% z;M|j_G(U6Qo-(P(r4UNPni>Y;m?Iiu>hQeU|=56 z;anhp7*b?imUz_JH3&D4y5Vc^6o12=yoR%XfxBi6vwe%RPn(&Ch81v5$aPm(AQv&J zgo-h_h<4~lz3C!>0!{qsd?lx~=d55(3zVTti%RwzAD;oRd-Z8EwukqEm8q~mx(70J z%A%~KeWc*r+YNih3_8n&x(_@RaWeFN-|<^)5xKr~)u|k5_&-#!knT|kKvX4EE2Ct= z*Z@$6RB>WKl#{?m0dWlm@hhIRvpv|u+NqEE{NTs`zorIH6+Had;h?xKd*i>@pW2=- zIdXc^?ib1Y_Zxo{gIIE-XVisE5Ux6I;Irn?_CFKZmF+hg$~(?0>FVx)`8LI_`B`+A z#cs>9gvFJIyUz1wh=Spf1NjCK7)G)@7>w{0j12hX$(>qLmVx%vByQz> zp%TMH217rzXss`j`XBvpKdm+0kEAYz8~;}qNH^q(ln2E^pQw~2u?Q#7Jx!kbQa9)bG&kHAFQ2&zrI!e!0*zkyHJn~|4 zRfgrOiD+7>RWslIY%Z+vBg{^6+aihNMw0HQ=S<&HzbNt_D|5r2H+vn~j;TI8jGqTu|EXgFJ|8n2cbPs&Vk3}ggm&f=G+wM<~Xo&6HKc6=P zPa0p&9VZ#UKDF5z5`SbAOtHUp9&4U{NS@SS$L(CAG<0QQ(pBb9PtEJQ;()&$x!=}Z z_Wa|9ts~bZ{^-trfmoix{TAM;{~q2a^Kk6yumPcD2Kdp(-gxu<8E@~s-;nFxKmEwk z>5uplTz?}zDN|-d!Sx%5{W5s)erqQ5xa6!sE0_8*x}l2f?cLsP}UVM_9$skS#kB=vGOx zZ(qpw=tQ}=2m;y-jzD!nx(d~KAyyR9l*}%5ufAyhm^m_!`iJ={^LWThW=ugu_~ovB z$#gFm61ncls9W)pIlI^8CaRkVLfx4{U8A_vhzId^4;W8pb~RiDOJQp8^Nu5Bc#C9Z(_eLeLIT#;NR}Vb!K(J{rZrwt0nn_Z9O75uy*iYJ$>CHowxul=i&&(3<;L^2zLh1K-N^OkvZBYH z=3tfs`FfMIjW4*j*Aw|f;2>uYWQ=XbsTWh?KbpjEN!{f%ImY4FeXM!X-S(R4#>a!N znO)nxikTIi#uNb&|N8A~rk~mDs$Vz5aScA`byLO1S+AQj$GirQ2$}V+IX0fo3XD2l z;C;qz(&Z1CpomQfqZ$7VSNw)~n&b1OH_SBfWXp3g7i_>JeYd-3gE`ogx@{ZGkRx&0 z0TIilChm(S%Mc2a*iEdk7tdDtTXi~H-pt%VSTc>j+!AP$gtqfbvRv^|70YqFs6CnXOG0aP z;u*uJJack)H0EA^+tiGH)MQW)F@gxCpg_T{sGVibAv<&%pO;A7E7=V#EC?3--3@%l z^y(+(0X-UCAStC1=I1y$tb@&$BYu7c=_lW46=lzT#|#`x@>6LFv1)+EUY>%8BxA$O zNYw#!7*!Gt>dYa;HbjH6X@uosR}Fcrx8E^Cx=Fm!@+R=_@Yecm;Fx-_Eg z@X7jbk9v9q=8Jr%jBvW`(c$-6}QCwKUAFEZm5qgv5zse5HD7ivV$V zw3rbrk8H>2WCOlWGV*{ z_aANN!2|Gr^-7GvwiK{itsG%pBI9g9r{gLGmm_Mn?7ZXXdQ<2J|Iwld3x! zuXo8rtcOcXC@FGRe{RkgBf3^rW1_XTHp%_UnDIi(hg2(|Gbmdox*|W3#N*K#rrwu# zRhtohjXQm_xp-1>Xx1sy^&V6MD-n?$-P1~;y}$o1bS#rehid2~$fZ=z5Do+!(sHm< zF|*U}tbmSb+&kDkLS&i0+NZNkgxA`$RHU5E+&B|#3?Hmlrm^@k;Ci`R z#E<3DspDx(Qu-4%3s@q0Ni=T^@_^fsa0g`WtvbbMh{S}oa!|^FUz#DkLBaCESFqe+ ziz?)P_zFjb7B}E)(=Vlai8B4-B6rFQn+Q+LJSgh%{I5-A1t%Ef2X=>pJd7H;?Q3%w z%)sWaF~)CpqrNdGv;F3OW400HbHi4A)0*60x0>q*XJp}^L$F{DYnBirL!#4W15!d= zy?3JaTrBZ|JLy}~w^PXJuzEh*F-vE0&sgv+=B{Hx@rQ&4>h=7t@L8~!6Q^G!+`<)pupjmXxOBc*)m~r*LOK-uHKl$u9SoQ? z>L*ky1mpcg0<>4$#-Gf7-8THhAeCs9(L*@4Fbe~qefYZsKV#~e>`wUE^z3jjKa&EB z)0riL$${q0{n<=Oe{HtQE&lvfEp%KrOZuH2M9&W8-&pw7UUXs7T!`!Yc|q&zx?()w zB+^DbNZw|#;C(|5Q@@8{lfvBmR>R;J7#eAA@)x#1`u(KUKUm4E!SUX&*8zHHD&Pw# zgIzqRu0 zU~LH(yT|;{uz6!t7ZXaC5_glvDrD?n(7^>JM|G4XYkd%}mK$YZrdZpmm1){x4!My~ zebN`TGBsFT!V7QX4vhQi_>#eHS7R&Ng-iD(lp1| za|+BiF8DOo$(0t_6we=g9qZ;M6xnY`=($I+?as%PVmsV6Kh<*DilU}s}NsuA3v9dalnUx<1pHML- zx)!Yft5`g3pv6C<8E%>UcAi7}g}ow{93^NSO#d*G!sm;^#F{`~N3gPwtm8P6E$~%$ zdl~xodiWFfMVakZ0be9(rwuJpF?RtohS>mNXU+rUqe`eOC{V&pBvDR7l5k4JNSN9V zFlUzAGb)EhmOX=w3Q>`b?=J+{Dz>oReO7LJO8k1dz*V%fllo%6i3B6WB=Tg0XTgTZ z1YP@7j5gk1OG&`y%y#zIqc}3X!V6lZq8SsGRA64|DO7|Rko5|rqlEwN676lL`1KH= z!l0o*gC5@A?yJmu?Frxg$UPB$v`^T+<|sERVMm#xnx-Y}lh%CHG_0fD#UP-b+{yla zM6HGD2>F8Dr)h>uMHZicM5{gNUY{&xa(I9!KgFXf?`(UFK$S*eUj0qcIp8Eo7sxF9 z82-q@S_Cexb50hpPAN{?WZa$D*`^N6NcP2|bc9W6dJ2>6M%xy4Xz-RFObbVm@FNrS z%tUi-{RAq3eWkfIN_kdBeb3R063(S$3D=^>+?Sng)p*qH3xq*PkM;T#yTR0vdn`pG z^Yn@=0CV-(ezcvVPx95x%6!&=Zo#XsyTiNKk)^zERj1}{a`jzom)&VHaJRxs&;#@m zw28e);sgDZ3Q--_-YiYL2Zw<3<`n*-U2yMou@gF7|2G}fulnB=hYNcLb*X|Ill(^jWx zbFWp}KD}Ok!31~A5g+T5+T&Ck4c`4lDV-E=^Qx=tW>b677sv-mxBLOA9uKg4B^F0h zWs>uR2cG>!V->D2L{s|M390hnGk0+}+ixf{v_!7Ls6ZOj#MX6cqJbu!@oR)7{aHPr zLLf8JbKPuzY!+X218Y(GV02F02L`xAcRP4wJeWat`f! zlsZg^Pkj&RM~yf@!$oJn5*1qIWRTcGanB=P&&%;WQT++?hc-+LhgK0 z2RrbCT1+%VGo}S-kzRLESzrfP7A^1!f1b}`R+Kuq!?XYzDYaqHpWuIuVhFf2o+fxg#CR=)>H26n8bGAj zwFOAJS>R`DeC2UWFha!kZT$$VZgd~?uw6#PHT9m*;D#0zq2lPrQzscem@Y#YMXmM} z-&h(F#X&vokfWdin?OaSDIh@0Z~0akFh2Q2oopo~0|-hlbuVr-agV2TZ;1SVD6$?+ zyi|R|24;7xOG29Kj!Pe+@ z>unn#tLuB)KXVTLzK`w23b{V^(jH|>W~Qs1w3HCM#CyelQv;Pa+70V#`%vZh;BUNr*6gYaA!WvH=T!`twH@l*Ip-MVB*!LL;Kmz zrW!3xB-N2Y#e!OqTArf8I~*=L6=wFgM~uKWsogY^Q9-~yz^nl7bM`-ASceQ0eOICe z(q58x4cYumH|;Rnv5fTd6ZVLF&Y2c0cGt73O_6(ifUSWA`(S`g^$jPDi@$YNYxva6 z1O$se<=zKP!#eQQ^&4pS8BS5jTTsW3y(&OIr#c61dOyFJgNGMqj(+#^y#`A&O8bR4}o$d2Y4TtXtO3xXibgRdnZBy8{Ep693ZoGM5}`4+fdf z9ct_2-y`uAa_^MLPsuR*tI1{TEhg=Ac9poHP5Pu0EFt+8;DXp6!2_QOs1+bcC+S-m zaWq+;_yTjg%C;CC2oQ+ZzI64&>|iW6UR5fwy98b3bHi+H(ZK-P#E~vB+@3_yD!*%PX__lt2(?-{Ir8VgIY9M`KA{2IjuS4O&Faa{6 zemctju?mh;EZ%{j@jT4}o)*kPz53WxH`;b794MVwOl}jAptqP=p0W)5w+7n*%Pu-u z;8yPiJ(=x3*vt0q&LtY_rDyQ+A17BN*au*H8M?IO-jNM$JHNZt^g_j@g zPjkOeb?V9$kEknke!9G1#MJ(wY%c9pEPVq1gXl1tI4GoTYE5M}88WK1v12`44 zG0%}ynZ&b_nld$5wtSqq3d?&uRWTz~G0t8k?QxklLRbL1dkJ5_Sa1K}jAhFPX$zOa zR;d{4H#BxA&`NB$Vv)hYC$!OFF15YOBt*o*6Npd0>di zaC)g~aybkrRQj2Sr{I1@35Q}zXS=0i?V!Q4nOQ>qgGT58Mczcqt_G3NuOfZ$Qs#^w zNqBH=w0l!>ANxZQ`7D@*V8q!?sfo5W$`u^?DicaEv5kzhd|cA~@j$z*R~g49UF2tO z5Z1h21l~&pi~4|s;BMR``xiFvrb%{r2~%{o)+g>3A7r~9R~9hkP{O$9NT@<5a-mfI zEg6~SMV$lXdqgBy>-`43XH7@I=SNWvtk-wCQ>`^)D*0XFRe4jFgY7$Zz_!&I1w=sA zY*}64#d6gVY|4C5LqV(SeyIHmCf)G#jRiwU76HNIQr0rJ{!q@KvZjK=5J3kpR-87b z5zJc3B7*v%gcjb%Ms}Fdc8z*e(scge_AP6UX__>}-f2%Jjf|H@hekG_ERtslj4|y7EUUlKtvHtR<5kystbNjbew=OR8jrJknWNq2 z<81ZrN6JjX+G_D*iKBP=c2wNokQ-hqcWVo}Q2jhKazgO_{Vq73iwC^p_;UT?*)%!M z48TU^?*m#?9QjOpF zk)(9?*d7Mh6Wq-w+L4Li9c-~tga~wa{_VOGEeX8cmnYh;l{Y;Ys^p~f6EUEfp^+z= zVy@=b_SfeArn+C-Q*_Y`Iso^{NwzxkSbnlSKK;#&MpiCU&Mlu96$yxphy{|>-;@^w zg}j5cAo<}J>{`9^`9Qe6s=Zeip`(Kt@YFCGM5nbYh{R$sBfVhoz*2*V00ib@YC%m9 z3GVwbQ!~;7?`+(Cd@`~eU0a1NJ5(TCc@;_Sy2DivGZW0YI~FgB1kJM^G4V$Y_Of8x z7cxn6&GJ*+I{Aecwj%Lhj=z(JV{3u`IYoh>-ajTIQp~G>H$cRLS#3pI{e27+J+3y` z7~ahgmfiGKF_;^T1g&ik8`>UP+8(II*B5MQvuu3cX4wep+FGdl(*5TY)@hsT_8T~( z#%qjvgEeD&vaEnj1zdCbnrerWuCytVg&hu-a{+{yR?fCu%fMiPh z+x~VOP_Q~PNg13*>{4URo88{0*`X&b_|kVvT?yv#49$%A6s9}PN^oDM63#uJZFJ{f z@8989GRC)jq0>Rj@r8TtG&>}@b^F-8tN6~)gmnhH>lc%GwdC(a19Sb4`s@O-tmlu&mD569V(@IG6E|FmMZxR zsY*uK*esn(g*siyn!flPLM&Z=0b(9d{#1_e+c9sQ(G z6l(*eStU;Z=w2)4k~UJnWhv}*VOCIdP!*T={PIiD1sPT9@}wo_Tp=AaX&~|SrdvdA zi;4A?m6(s6FU0XC))u(!4OjlPvfMB~o=%de#P0|4Wh^J*KaJHzWx7S@p?^{wtVl0S z6`j2tZ&8z8isYi%4C-vAlu||boW*&H@e6Og`c>`mPlQlM+KXC9@UB&#Br|#_^SRQ> zXWw^El4RSt>Ur#FEt65A^e!A=-mI!B+#bKR74W$S{nl2y&cC(&-1Wb;yH%m)>;xJ;4`z1_i)nYb29E+%8nwMV7Bi%AKF(Rh>1 zM0#t)8Y)XYF(o&~$ixdlr^v)){DSGp;_)QZy}?f5`#UrBcKb2kgV55f9#0 zHx$e-9i%@&`I+KSh{Q~8$WhG_1;}uNqjWF6A;Jzb-UP~S!{dzJG0CqF_LJQ6JUa%> zyPCMkop7Fov6+sGe4Qb)PfU%tN6)kSlub%S<+!+Ifo8byeAHW4yJ6?sf$1-8o8d0B zVA4}q#7NM9a8pX9e~rpVB3VeQaLVYyu86_Ck_0GOd_bz0^dWxN@xa!T%<8k8hXZ4t zVsyVi9afSv?%IIr(I@%U8CG{_q&0mHes^7onM=&#QZh9pjnx0omSlL)#l+lGcAz)M zBM=1x@n;BK6=lQnVhW}~^v`@NK;5Rxij$O+m=~)RC1~?}QtR|euX&4h7?%!?4;C2K zHO$^Fkpw<08OryCl6k2YuO0Bk^E%9e&g2465(5%s7tc09B((INloZ6rc|7Wk<#Srf zy?cR8k&PpTz?WDp+vcgRY`UF}J4JfB?cPalY7v&B&(s=uW3$ll8{CTNc6ayrbUP+S z&1J67g|=_ysdNPNfcwSJ>SZ&XJERpmG*&SRvVgXB!ZPC>cAs+ z?nU;9aQ82{Rk-=WMRsWT{R98q{?7IdzyILB?~?s~^FozBIs5%5|NVyFVcYxKJ@GqR znF@y+rkl|r0&h8tL4|bkmfHmWpWoT>Vf7FC?+0FN`=+1LV|YA)(0-5lWf0E#$o_w&UjLFWpicXcQGyZrrJsE8&%UT-9YsJ=*#J&SxB)f=9PqmYM0$gCFM-p;4 zHPr>}{QZTgc$g2jU5yeZd*_WfaYBVe11A7C6VWsYu8W)d2iqf^AX+e~F5nwMv-_pG zNxthA)JzS^E>2Z>+fp@DYDG|&m3mkrgx8Skjs!fM`_Z8NH=XpDKMpsmIas zB!yuuW9Sgj>{qk3QL=QQJ1I3#GpHjYL?xT7BEhcT=-eO*dz6^TKzP9k$!{V7-Q2;K z+Ei^PJ~Wsi|JNDaBu=!X22rxd@Xm-6>7#_80ykdv~RY(qvc9AGCM(UuvsO z2lwKow&$U6=opUx;?e(u*;7(w7cy(I0Kfba4~^ zXh-y=9C{-W4mG4sl?G+3DE2@PAYvOrq`M>yDWGpOElB^%7 zE@VAM*6XOsJ9?@lOI11kUYcx=+AMt#%`AG`Dt1hEPNI#jGakzb#JpHp+`OGVGQjOU z!*)$nuBh=wh_Ynmid6SxPj}i3yHCF!$ubz#RPtDAN+x?GBctqo$?liU7)LzN3@*hE zzPnBVU(e03!%nUYDyOfg=|NApqzcR|t--q*IKMPqeb&pGF7P<*nUJom0UfWFNpf1M zs~@!vF_d^7jY}D7J8}SP6?l?AO&53cpKOnA9hAlt%jdyZZ77Ped@9z~4mIuFb$_yz z#pRlzNV2_K@h3Z=Zz9?009~(j$aFw@PMXe~gU$+>DnhB&iMCfHd$=E{w}89dfU3UC zj;+k@LaLX?1t2ljq`RAbnH_Bs?(WNM_2e2(gbLXuGjr_siPEkX_z0S0MPRWMcVEXWgXr4v>oRiM6XTTK@gjV(%{sg?oE>QhkW3| z#iE|^Iy)r%ewY6akJByvijAL|Njs6@NN=Ysd?idz+UMFZ@+;Rym%1Z`#}Z?^gyX{E z@a*5CG;Vw(mV)&Odct(@_h6zms(`TjLnFA4JsQtc01-~OSbRfCTi!>vvCgIjF1oXg zgiG{dF>srN8G&v|0I^{ZVI)|-*$tm*JKGhT-GrH##kaV#XQF|A#a%Vi9zTpe1S2HU z0`Ln|^*BEHz}%rKmk{;-g-;4!%!`(-uKne9U`e!*aY&eS!R5B|0gcU^$mmSv@^EVm zZ-YQ@qB(DUc z#apiT6?Op5k_TO3dsePvt+|Sm-w?48vp}YxaZKWRcli}|Z}Y5czQXQbfs#ktn|{d( z6btTl-DZL6&l$xKX{i8^jZ6{X`M3U>&%*urMdmijMv>PR zXUif{%G&7J~3PhQkU2H$?Xqoa%PD(pFdK7}Us-`01TQ{9j*br;=aexhw7N z1+RLXD!hv1ChOd&tL(Dl@Pp*e1eSw?1%e^Yd;p~~v5uizRag@o1Uzrn*QzMs z;4X4|Ty2LC<#OiL_JqC5g1skDQNNIPFrgPvN2=5L*iM0ZAOVpwbSx!*3&u*1)DdKu z`PbOWw4h-b0$YP$9!#~D2MUuNyn(_4>y)Y~6~>||r}#b-d5BD$?jd=!6Q^H56c)`e zcU+<-1wcE31pU+`3&pT!tMGLQZ^QbNrMvseIT4t~aOSZzig*`l?yz2IZM0ql(-J$u zI_en(wtM^o}HvIfkok$IAf7Gv}bCuE6zw3tGj68F|)7k;3bG1(5K8@axL8a)o$^% zcIYV{GZ;N~%4FgKu!-S{g(+wsnb{}~9#0b!B}x)W zoahG6wW&RPGq8uc!3zEo1B1@Cc%mW3aJ;uDhq{=0ETPC_CFCbz&lJY%+q;@O3RCGV z5$qj(h%Ob1dZmK+XxJbVyyeN6kf(HfSbM1?M2NJk{YPQSm)K-6S9*3@Dw_-7U;muw(_@o67St5lXv1Lo-hVTA;y*)Y|D$Rt!n9KY@i!`9Xqym`h_Vg#j zeF8vugn3GY7R^F}^F$yBSDPA_Jii(Q->HgJ;kXs+AG>$yOK&%R9vQ<_B9{jxUiSBf z{;)ZcQ>ndR#TQq8SO^&oJLg`w!S+j|NacUR}eO zPQFV@I)u96ffyIjQ5{BA_7eaby-XYIuGkFLKz_y0ji54F0n;^vedworkH|oNt#Eta zXlrniI_X9`Itqv37Vy2Q-5wF#Ud7ZZKl2_Ds__HaBht>TyV3T?h8;^*aA66{hnt5h zyvYtPW>%3de~i0*ZnB;G74tlf4uF@+S6moeqx8wrUt{MCjg3XgPVUm1Y;Ug*EDUHd zXvPH1+=uyk<b`-~svTx7Oy{ecvP}CTxz_usDhg=VhjM1Ob`ZG#@MoynTor7zS zNV-DgoI9KKXPo{7`cvEXJGZzMBw=dW7Q|=R?t?pfm~+2W-M~Qu-fbj12*OuamrlIp zGitzdFjOHE%NGfK=L_JO715%oJ3k$}h|s89C~KjqOuWtH6rtHEF=@t_EM|j1f^X%Yw7&7zh z5(x=k&9jv;^rx#``7O4qNW1*q&;j`nnt(7mp!aN{7=i4rm zCZ$SzWY6<|4cTYWeQJ!$kzpDB_@eBP8OsFF36uB>Znq)=a5jSj3r@1dP4Lo3@B!|U z`F1>+YX43c9I`N^u{}pbQQWo8M}BJW;?5p57|tKht&rv6=a3)Zkm5+mkkT@l5!fK@ z-L=l{RT@sd2&Q|(*?xm6FpSIJSSLe;?xhpKs^TaXmoEoeF4EFZ$OZiu*oV{qcsh)8 zrF^hyf%P%3dj2AOu3@ zS}3Qz5O`un&>L<_ait`4`HpoAsWEW(ywj|P=T)X^p}T=}GlN*J)Qh=p>8*CRu1`IW z?($@gqaXgx!wEcimpAv-t+uOK;z}0Ur9^{0u+UD7u{&$sFAMG2onODjBwm2e4MT&Z zV2pCk*WG3xC3Iu2MYeyp`;1~yq?-L4(E;TaSg2A{+>AwdXZ+KxSY*#eWa`d+@gX8T zyi}+=VX+--?rxgC*dFK;dH?-(dqM|JGQ%*La?kIW_?)I8ci0Z5mx63T4?IhQt=?aq zWmPCZL|@5|NIHl^OW1G7!A0>K-KqxrhlARRZZF0xQ!$6U<_3-$+V&FxgiIw*(y)1Z z8Dt5X6y|X8)OMN|KQui`>h9wl@%fa?)M)iULBe z?kRMi-eo7TVMi~qN0Jof+9k-pGu#79?11zYCS&T*@<+CZWXSV`i(87lg@`B5jEt`_ z^fDTd%g9(^Z**wntLJ=_2v46pR}i#3N8(J*S|l}k9SsT(m>xP>4~_i$ITGWEK1J2- zOwJ^C{9kM(NpLRu3xe$HZt-92VHw|r@BU)P_rR}=kk@3GS}fw7Gqf7P0xp7k&K>ht z+b>+hk5_07=ls=<3cvs0zd!p|+bei$EnW|F7JLUCK>4AO_AH&yKiIUD$SME4iv2C* z+%+O*fbn{oa?O3Jw*OL_OkcJ`mICNvaL@hx6y_3S6@wx=^>ii-y-I!@Gioe25%Cgg zBp8DrBu1N6Mc;8xAqzzsY2%mL#{`Dbn9_!cp;T8wOBd&tXYqS?_mRZGXleAa)r5T} zC@IaQGrw`)EVUyo8KVX+V;-;#WC*%DYneT6Kp`9_V@}*}VJlI}qZcOez9>u)2#9>* z9kaNj^ZRACXXhr_f1Z!26Rg)SvrW)5vBnL$8&`)@-TrrDSBCs~ycOM~6o%o#Nbt*p zQSvkg^SqGnU2B4dZ;B6~#|<}^c-^Xg3%67Juna}} zCR;}{{R!}P>6YmSC7Ltvcp?ej?eezmoNlY;y62$NjTs=pT+fULjXQ&6nxxyy)X<|! zce+GRehM0PfM(>pZpaHxKNkq7={h?)ZRcgXT%QA9pBJ7+=LqPVfABOb3tpE4UY8e~ z=C>UI_%k>0l-{aGKkHkL2xn~jgl&1%uRcfUjuXy2Z4%I1YJOuDyfp{BH7_{pyTJpg z`Ss~6d`k{|OI~=m`LzOi_Fpu=CJWx21Kyk$oTGD+*ub zf^Rz<@CUSZTX{-n*8cFEwSOhw+M^lSB=}icyp4MDlh>L9-kKL2r`-(#dP>c&*Hb#& z@Hy};dEs&8Tq~&gYJN?&`Q{w(=Dgte7OxV}eOkMf9y~32)0hL_m=_*f$TC6Qufh%^L07kb$P)td2Krk@FlMT zzEw}meHxm7SkBt7%eVF&S$jd<@)xar1|BD(9Prk>;GI}|0lg?Xy}k`RZCi5STk^tp zX6*&_&YN_9O&h#z&H-=E3*Lpb7tqaL0=_Z}o^H&6Z_Eqdm9-ZX3QN{L3*V3f-jEl( zlC>AmcQXN>mj$m+=fKzJh404N3u@Noz|YFU*X4lM?g4LQv> zc`Q;PnDOey7Q=&kJ9}+6(H5*;@N7d|giSbvuLSVQ{u^GiBR|zw`{= z%lVdj>uL`9)*Z?sqSJxae1*rw#zb3oD7t2uIG>ibqA=$FgV}1{0q9!wrMV4eCw7A| zuR4TZXNzpD)RSkn8h3yWnXSgW-~cTX&__&u+Ah(fNBxEz_=ddjG`~PVpT45S%YxVE zfY;{*hrG`b(CwcCo}QJ3ugih2%L@ zFC9-C(^>e|9Qf9}@Swp40j(0zU7rPS$pLT43(n}*3h0j40ADjX%WO60z&GcGhu2#r z_&(HvnHUIm>J{7aX8D z0(wTMGmEGG;o{Zhz}M{zpKs$HynVs{CCOyVKk}_N4Q)D@U%%ENyHQV}aJB<6Kad#vJ&@ zyzrpQG6Ag@{E{qqLk@UDUT{Q%1p>O)pV8?oe0>gleO`D(gE_wWc{D#O3tpE4UY8df z(O}y_G{15)tGM-`>}J_=(DtRz?DZG(tv#Z_Cc(G73;aes`L%1!0dLI+{0H+s_eHtLM+M&DZ6C*X0F=wcj=g z@I^ms?e(<6OD0<;<*fY+`PLrZev_d7?|!!6Mh`E+rZoq=H7_`<{RRO&C-C(lxFnO7 z9Qc;J@bLC)1@*yKTKjDC%{k!BdBI`rR|)8AP2S23IFd)YB!WLS@_l*_}0Ae9FiLZ^q;S3etj0aB?r7^XYf4p-Mj;a03J?wV_x`Aq;nJ0L-W&Auq4~(hMWo-@>cLE z6)X_c>gToMS@`-K`1-u?p8-EdP}|Z{-OS2XP?u9dUET^dQ^B_Vso+ORkX!W>uKE5s zYrZz$ntuWOCPAea&1D8QW-DmTsh~A)1z%FZ20`5<61zSN-;x90k{5mp@N0oe2XB4G z2-ajPXwIpiId27DQNb!fEkNmQS7zZGbKo2E!ha3?vi-%Bydo)hNw$K9oC+H9R`3lK zED+QKQeVx>!q?}(*XM=b3jCb?#gx4y9m=e11$8+U)a9+?a@wVzI#DR%9 zIPh#f9QY3SO=*E`@Ps~FL2FJ0t$8c>o(eVyYK!!T>$C7JIq)rc;kN;wUMsM#p?r2t zwu0uI3Yzm)@NX(uC8%{;f|XhL#vJ&@yzoC1L2s7{tWhlPl57PHITbYIt>8a&V1b}s z_mn>iU!MbC|3BczfCK`&^<_FRD_cQbP6c&4SCEHzZke!s-AQS{vOJS-*=25XDqkv$FHCM6};c7C%;#>?3c6Lx<5Qe$<8!w5>V64+N&G&7_N5?d~05K8r>kE zR;jDjXTe)?z+3Wyv)9%NsO26inz|+n-<$*AoEIK!T_vD7i?rTZ@WveQ#+||Q%y+{M zFfWL)Y}grO`+P4@JKx9{I!{j_BfkT5hLO(;4$vF{y;raKo|Wx!T@HL*UU;Ty+rGd* z4!qr}r|>}EH)pw@%D3EN%TeeD2AN#e>Hs6>7-k290W!W+T;h)ahdvLGqYRG|a$P16QYk{B^3w7sZo3GCS zug?pPwrh@newM0nRtPR_S6vQ#U0!&!UE2cS8-%)B^%SmskhAtruDD}?FmP|mQSI8*0{lv9{!X@R*|)f4pYf7Cs$G2qrOEtW2cE;vH5-!QBK%o|tQt#dpxTJR0&>*Co*-=LO#ff+y(e9Ok~w zfoENVXT8w-Lhi)e!!z`52b~!}$9Y#1Ju+VKMu?rDT}+!dIq>uVJdaL$p(jG>#B?!C z>U7YlLFi*Rc*+Yt2|_36Jw(O&S_hsS1SdK<2<;J7CW;{28C50*A@V^b67F3GGt3m7d+zyhYQ?7_~opyZE^-ryU^)DXb(=OiXbT!zYjtbh3_2Y(-g*A%a$F! z7lHHPyB8Xm4q~qPKPQpYp^*aO;S=hxoP5@JSau=?TX|I|#a-cMRGK@VK6E z;S-*Ch;G+h;J1H;;dioS3x2Lk@N+!`pMdE42>PNQ@LmTV&$;k9PdtRTov3%|1GhQ& ztP7s?gj0AuL|sI4*zMp?%eV++JPA;ITL^oA=SQ0y0%;dMJqYi$%Znf{vx1o#gvjsm zz2D)d^B{7L^qdOV*|K+f5rOrjM9=;tBAq*Ma9;@SGPsKY{JUttW+T4u!0XLe`4{Fg?V?U!c}? zJMfGPp7DZbnXeJ_5aF8~c-jR|d%?lHE@F1_$N0FtE82rIL`f~@KbHQ_7 z@Wg*^_zLQ~owzS~a<#a2M}(;29S@;{{h|uLS)=-K}uoX%{^0 z1&8Rmh}p)PUgzvMnu>cV7d+(!N0ntA;Tgi$I)f)&=%g1Kmb!zOZ@FpP*|Mt?2^T!! z1<$Uc=nn$yO||RUvPFN8OY{eMh@SVUhN_zvl1{gcR$kr(&v?O=;EB43_)X5}X%{^01xJ0WiCuR*F4cO+Ovo3Vj3#~jlLHJ925OlLsip;q1885tY=)`B9 z27Z$>eA)$1d&23Ex`_Im7xy{`#!tBjq`V1W{p(0z6`$%^>r5c&!Y94)+~-7nr0z{N zJ4PnqB9QPVfS7F8ED*pG`;b0c_CBBGlKw0Y>Eky>8PpNh!HQtK*P)PeQOJD{1*~B^ zVSPMp+U5|*x(H-F31HYBf-XW`C$4up_>2pm@x)^RTL@aopmvi3PrKl0PdFslMbIa= za{ZkSKIOuvJn<$pfS`}Qqy{+fqzj((gi`?sdWFNc#~pmag->|mxrKJk1c94WOwX3B z05e?*Fw;{3FzY^|UgG@Yy$*q#i$Kns02r{HsM|>t74I)@a?oiPIz0&OVQf=HkSA$uQ-cr##&#V?`IHAwYuU1+`66&Wn)gCu zjvd6j&DpjOEH>eSC%oWL)m;Yy{uL{rJK3^DeV|L!2NsLkW3jm+$hTZoov}+p5YSnjAAk8g@&-TkC-R8@?HlW&$-|^FF1`kK^aC9+Z=e-h0c1R5jXY_ z^O`EQI_S&{cahx-j<|0NL4W->2H)hs)2_kOUTDT`#5~KvI~{aNq2t95`lYU z&}tS});jQ{Yw)BO8mE#S#B5X7WgK*(fQ~yg?t~W{r;@u40Q@@MBHziDE%O6hGC#mW z=E!mThqUW4N#vxk_cuEol`9dyQp&J@t`;-68#LFN{M z?w}*vDM&lf_i5&~fKSGjNQ#j-bn_aBCfS(gjZz!5wrj zoMHz-52$O94m{z4CkDaedGq`q#%uclf2TTQVat~KelDr+=OK0KX&*rs_fhN)Jm-Sv z2E*g_FNRzQ&$gYYYnU-@bMRRgK06qnhqEL@P$!?~?RMZ97d%q}k5}@Xib>`cqVD8F zdYc@4+J#S-;B7dAb%OS)nv4Tax!|c%cw7yS>8~T|uRO$E>)?|ve6kd;;0)FY+QaJ$ z?G8NQf+t*X+P^jMZ@Ze%xQeGfJK3^j-{g`#{sj2_LrS*n8s3~C=ziLpUI(6Y!EIuVqnk8OA02^T!!36Jw< z2&M!77B95!WXqQQbeHU>d&wSFtB;_odG(~%f#+QCoF{w?4ym>ibtjp>&B13~_^c-$ zNnQ^@pHua^9eBnC&v?RP$n3WewUTMxCI_E(;nSY@@sK@1e`R>o>A+Jic*+yL4>H?z zL_MP(b93-X7e48UZ-nd#`Y)N+?!Xf+c)}At38Ifr13sl5Z)MAt{WO>Cr+LYK3S>{v zIu76Kz;iBm&J#WjqMt_lv-)3@y@SuX@L5lM6J$@&6`Xyy1JAhN8Bh5B*!I&{+54L1 zwoMK`?ZT%$@iQQMf}SP3(}Aa4@RTQfCbm65aqEAKRn|KAqzj+)#5Y6s1l`9ttKESo zT=0Y^d^Ti174Z1QJagR1rY-xaF4<4@lKouBo}g`X8NCiX=Yr=v;Ri$Z1pOt>;kP;X ztP7v@#H$J|QJ;1K-|gTtE_}ul|2V>(EkwmXc?bO4geM%s@0tSmmH11vkUpEX^ryI_ zKgC1(D-o~s5%el=ef2u44n0^mI|4=0y2cB`k zGoEnFehWcYBWjK7n;d-Fg-?6p5pH!6lv6w3fu~&XlqZ}CJwXYY&G=depLF4qUU+)C z4ubAymeTIP6E1kd6HeJr27Eiyl$~)lZP`zD$$qkj>@TJ430lvigQ`h0lt>kly;&@hwOR3rH`l{745O5R43Sd?qrLyi|hRpU9z9(C3~bveMCJ^ zv(sC^>p2%Z=Ltuew4I=*S;pMvz~fmLKI@4`n$$zor|PLk2cL1lGoEl>ktgUOI-gAr zJRNu8(_VNE+C|iAo+foV_>>Et@`OXn))90kH{MzYo}7sK*Wh0mNP6L!8g>wM8-MJr z-N7eZ!zaApeE4ivBjEp1SLE5UO@5>K(~{x)8$D!CKi5apKl$sby$(LtSUUUMAh^c~ zPqqkhaRo?b2O$QIvwAqnZ5*$gEp@_^DFWM--^}-*w-B>KC3SIUx@i|Y?FEOdx`^rI zQA4MLPPx!2FEm)Sj+pD!-DtG-v3Z?z!IOjF9=u8vK{kd#GcgD;z^h&R;>$Z3lkQ~8 zzGty-scic9^$;zV*hkD>UIXl%$fj-5UGUr>xW{y}MUY3zKqxy1k)JLC?;eiwH63WT zGu=!PI4@c+G^V?Sm>xd7yeaNXH|>I_z2E?K5%V33q@4~rt&^SL^N6f1Xzt^Hw zaNaI>(hCmn)j@cU&a>SaJmEqoywEs5+qDnS4{-3EY;C;c=TO!DeOz+h$3xD%Ii=t% zkoMYepmQ#CZV=i_%tes(O3Z^016tX`QJ&-_y>7Pb9b5#?i`ff}C2k=m$#c$4ac8<| z7d-6+=P4^Om(W^vI_Q)Oo$^A{Rul6dPJJy}1u?teNiR50SqcA^zpByh44!bI6JBU2 z$*u`NuVRd{ldX-HFh=R0;1cr$4>9wUm7q>m^LlMK#q2`oywC`cwiA5!ce16FEL8-yl`Q3j zhL)@&CdZ@EwZC?zn{>gGUU0-y9mHhmCfXfz!i7!@LVGN>fBb-KJLwbq$9sqtqx6l( zm$xx>=w(YSHdh3;7n}1!gH_v!`HoNgY>Tt0?0nV*&w9b3Lp{ViNyFLgpffIX#tY5B zo0x}{Lq;p_6VonudJx=$SE(Y%TJkD22r=Mf)^Whk8SSlQOYtgM1h#pV^g?5a9mG7u z!=UzGv#EHMaKRH^aDaA=1Ll6_x;xpjgROA`Qnm;0A6G19kHzMSAop??dx!(TRG$hvk@VXT}*9fs8i+b>ES&zPG@;O%8#yi$L0& z0Lyt@gvB>fVx10!l#4>jn?eFQwvI5VMD7qsx(FoQ1bp}_D6@S&$Vaxkp$7*40fIyk zg@;rW<|cqU1nm!C>APZ>!L=WtwUaF+hW?mK?y+LI=cU;3H|()Kq8>f#QxNE7(+4GP{;7esOL^e|T1U_wObgaJ@T6<> zq!$|6+Cj|MbW-gOI-$^m?%^f8;IOW{#sa>JHHn>U*@7SI68u;X!PB@C^Byl%^*ZQW z0X=XJFXsgZXgfjAuzs}7foBVF=N4bq3yrDw5c3>=S*6=SXNu6r*_Jxv1xH4+g`hiG zN804T(?#&SogaiA>{n8}#Fr|9*uP(&8U)EZ7CTrg>U#j;FD>L{V3pY@*P2 z(EYCMP~ZMB1M<4}F%5M4$9TwVC5pYdqOLaCoLATEm{x1&O03RjYV+~rLL!5|(A_fz zlyCmp$AF4WwWLfD!Iwk$G~-1tT}-b%Pp^waKDhy-bh4#XFI7q|xuk9flu@7}OlA-!uODenLEb$~44w0MH(BD~Q>FNn7d{F6zh9JEy{Mb> z+HNeR-64=DC6MqU&_AlxdS|OV1_WlmausIKJIY!1r~&=5S3RnD)%g`-4!ou80NY}rg2Ilv^FM1ai+gGRzd1L@J+gcXvDVGNtq~Ui8wS_f3IG z-32C*$R(6vr$a7PM9!9B%8Oo-^DEHn$O#-34;b z<;nFOG6MAe??UcFwruu|C}rOWFZO}nQ!mP68(;|@CxLELGnsc%UVY|FRh`jB{D3@2%HShAg`aTDl^$#E5MBd{KFR+4t z>!YI0YPT!)g+2LL;Z#Z}lmj@=YWqZ6LdiKs7OztQ4{oOR^$!va8I4+M= zzFAA2vZXkbDy5eiOwT5l1i2Tt%40`Es&{Syfp&*LqLe_wi$H(9B9H=s__s+A=&diz zAXh)YO?z9`7noVhAP{(_u*;K$T}dLZUk!5I4!KMzxl9Q;`+{;B^c<_Pwy-Tp<;%y& zActP6lwPWYUL`}GB*;0ta$R9ps_9)ub~)q{_3@JBCcNnN4=bA9`ogvxhLK*mnA~H_ z-j%~j$mNE4aj%G6e10lVuZL9bA-!&gUZ#{@#*1DW^ql27ev?GLCb>?BT&k2@YFON3 zeo4@CjHKf?N#!Dz!rC2riBftAuj%y{y7cSFq&##wFn|(t|**DZC7TkN-pI^E(vlU#S432OF_v<<$ZF!-JzE# zrI+xc*I(CaU0s--<2dU;?yLV|dcADfOsX4TQa-w<^WqZdIa?}I&@ockLPy-~(90Cj zvu&6cxirXKSeTyUI1eF}4_8si9D1ozdMPh@Nzi-gMQO$0SpH1{?GAxNDS^Zw0v?W~ zA9wZ(*9??n=^x_3k$Zb!fpbM&^B%yfFY?)JQBT{iWCwcU$K#6qN~Wli)0bT_O2xuWg2f*-nFP} z-n)ABMH#Tac7U^a=UVHqwuA|}qP}_74)h&hLbkRQ7c2A5u)u_#S}a}pvTn9)=UPP1 zR?HG|dEWtg7d}_&TuDW_wobMbgHomRQYG|k-vM$R1#(V0Ng^r}YIn#bYKv~CsQD$l z==IkimXOCz5JRUuN$1mBQD5^^Ui zne<1B;;};f)E5Dj&(@HoY}vLkQp(auF-r^CDabu7wS6Iy&o2SK+rei_@tHw*50Rvc z5K1KJL5Tc_Z*$kBin`{R=hYXcCt1|f7D;lTXNgD>MSX3miGjWYBI&R85J_J(7`K`w zhF-RmNOIMsEUX^PLJ!lEEyCD(S%Ohgyiw_8QP;d)diCY=e(9pFdBt?PmIn5zqP}_F zI(>`c)+D&#s%3R>?JBTuces!!qGv1SU~>8A`ueL{tvd?&nxmLip!ba`o3LdoW>qOy zs|IsbaVT3%u3&q5NF*}>YU)tSRF#IU8832akaOa~%L?v>RQ`wCj-3vBSMioFx<@`JPHFK^3;T*;2E} zl#YWdZ|)+DKC0S(0i>Q|5TpC9VD`eL0h{+E>T3zv=z#W zUVnw+(vHavmnurRRN=)X1%TGk z>}AW|b>UL(g}t~3a*kpb0{NaesocmqVYfpsQ%W!6MK4`UuMo+1k%*nlI^^&>rB2wY zbRtzm?q^PbnJlK4DJU7KToD8J9CC?La)}~x4z>PrrDCT|L;SdsW&K{>ys+6-UNWCt zxfi=Y;HCoid-BuiA(2mal3NbBOewic2|3%jr$O(ELcmq1d3BM>eX8o~&`XulOO?>8 zRJlLMy)TzcFC>SFQdGhV)n8VWEp5v$s*lGqlC{%bwrn1imGY>}i$^5q?4a!hCXvdm zpOZ-ry-X>+j2FE$=zUz^(VKa4T_kd|Ix}&|rHaT6v2|(?J&y<`Sp>23hCzsY1oP}u zFfWOsuK8HQt1p7e{?GuM@_9qZ;ZsQjlPl_LQ_T(Z9f)AEArIf(!(*nGX_UIzvh#)_ zdWr>^5_0*x0rXzt89z@O=({7cL>GyC^fAbFvZW-RDkYaHA!n;yF}0O8wGPs_^A?&o zhgt&E#uai^+Yxw?+bQ?kUyL1Zt6Xq^mkN;!I;{MjJfR3-$76#Kd6E8&BFz+a&BtS2 zeQ}{AUDPuljt%sjIUpz2SyM%Q^WoS)-+`_>4NUY@79xTW&Q3SR*kkab zt`BYNS(XcX*|J#|C}mxsn01N~KKbPw5gD9IXNzz)1Kl`0Dxw0~qON%cdi5m(i+bi6 zIMB0{fkl1u3>@fN%)sksh_Pqcxl|FvW}6qnW}Cl=ZD?Do;YfPfu({?h<(j{kYaTWv zTZFLrH3*ScxbK(+Ws17y`Q_D@H$l=xUGofcy1Ej8qP}^CIem)~02TZvxqNKV1W&R% zxa>#pR}R|QusK;o%jTq;l)$4ta^6fac8bk1qm*SvG0XA{*eN@J$RCN8A~IeGl|`p< zDb6{H?&1x(+wki@oouMVQ>CO*-%Bb9klbgMsER**8|{)q0~hZG$07+Y8j5}W0@GQW zXI~%QSX=i%TD@%9%n&8Ca>B(7#lQPz2{X@)Qb@)P!Lcpll{ANULU#_j`F$E}XZTbp ztS%L`-e@l$(}(dA1m5t81dPd&1ov27>1bXJh0-W#Bg$?lL}8etJO+ zrwuSs4V&|MFi}bL7|_8kT7%VK>K5|Cdt~2Sae($WIclDm9=`H(%>n_-7x{-gah^E2 z3Z1PWdbaZ~v)m&eo+tKJ*aS>r8j(9>&%t7>zE!`b>FlAh`XIv}w;-;N>F0}K4UNJg zE;L#|@Mlq9SO6Q!$NNkp ze4M7m^%hX{&Crd=OY)c&FmS1C$IC%GYh!A?<<((RH{w<~W~hOGAQVXqv9!Y)z?pCq zmND`{Er^Qn7*Ml1KbHM1;^4@o+DPz*_kZG+P7oB2;HR;ew zU)aQQ{p5`GhVL+guZJ93sR?j3s>@Rrh*4n6pB9My%4yPp)=VMqTOh{A^a_E58I-_A z5v2^(x4LN@TIsJaAZPi_0x{h`)tB37$o&?g5Tlw_Xc>l8V1*$K&6?e2?bVi9UuuUp z#1v7?%vbbjr9X@nX!Z)g$U&H+K@e<=`Y^1iO~K*<3oCUB7z)F#F=4&!J1kCJi82Y% zTPrlspX$@2!qU`7qBR_4;LJtn5G_Q&3B5(80OcnjfVYQ6{bn%gvwZl#(!x<4)6${c zpb97gZgPY~bs~&t8GD-|!?{3T_&=L;Ot+?z;rhbL0F(oiD}|aB=da$IWtMLVH;7)z zu}nWEfH~RlLmMzBof^q6bTe>NgBdW(7U5%iDwtx_AVI$wI!s9_%juUH_44)1*V#)!R4w>&e*=W&$0p1KkFx~wD z*eMu}m|^-41vS4d5Ug&I(Sk`O7mFE~)RT+F;-T0#Z80A@X{OO?fyJaP#~dO4Gw+dF zkeR91S!*h+?A72QjHLC-vwCEmHWHtOCt=pmLe6!AJ!AznC_hNc60y%dyKA|a$N;5K zR9I_5)`ySf$#s#OyljbRh^0SM)ArGZnK~8|*St6RNQ}$RsPMR!^ z94R){4aY8+sSk(J!GhMQH+6FRk>Ur#lOG3W=#UcjpD7?EY%70M2kwBQ#BV6kzZ?Z~ z^@w~BFAYv-o$F$EnC<155c+>{lsI}cI)Evr-nwCc;=)QTPx92G#nmMF#nED%zNKFd zKSs>s>yM5RryRARpp)Z#R#RI{ACH|I6|@vk(U>t6YNH*AHK8?H?S1GHcbYyQ5ugcG zp{J(yqnZ5px?{z-1zQS|F5&Vhg`2KLEd4O-7FvBsiOPgz%$SCWA+1^jn>L(Grsp*I{Sez5Oq zZYP*k%narq?rVk~inPVFg_SV)c#FkB<*$*(@nTNBX$tO`X1w@ki6*>!i?@yP#N)+2 zWYh)6i(B-y{WAJPakl6WmCI$f1c$^g0LS`$ZLu=2Ecv<8k}6-cT-h`XF`nMoYg6~3@1N^HQ;s&A~TKEI7F;opgW|@hnW_@O*6=*d>)@^%z zW*NLK%)ejlZF@3c>`c9p+(ln&!^Z&_bVV|R{cn)H0W%2IsMPG~o7Q!Ev6{&B8YTf) z$a);5sWNK+Ua>54ofZS33T23~fuaGr5pGS@HQ~`U|Go9~Ry`u|!&wN`Lh4O?on|u< zHh;EnSeS#Da5;Dx6%AQAd*4>6eH$=Ch>Et^AF0p6EFAVM?nyS7+JzJH?Fmug)7BhjFR9X8GcV4bdty+#RJu51UoTR>FbN zWQONgteU@fY&#VC+#ex72wD2Mku&U2YR&LykduUOqjiD1J0n&}I{xWe9rl#IL6M_x z-wUoUsnj7HQjH<_f+2@KR9c!POoSuD8Y~S{_idbyt{0o(3#^Z9HpP7C9X||KWX+^# z5ZX4$di)b`1S)EEzO2kG1B@ytT)C}qLB6kK2*wz%($=^}nmc zuV50v2H#PYH1s(Pq`fV7|5$Vn*TI9B0d}y$2zG#d2HCgyrJsl&XoFaaF0QMKo`GHoO%G&#k+B9EQVxeqf%fJc< z3xynIZ2i8-O8NXLVt;Mvb*GAHkse$0ny=t44?b1QuX%mQNXu7^5SCPg_0VVXs#C=f zIH%iB6;^!rrv(QYg-RkSqM=a1`i2J$Mn1dna)+kVs$1zV0#U}-Dm_NzJxi?m2) z2(<>k@AQ?=Zd<$A5uS()xv!|lUkh!kiur`;pUCBc#k6QT36P+Q#H}xUhvLVDk=D%L zdL@j%yy7%5bsw9UfgsJYX+gn(@)H)ubZ$@J;pmU$yQiUmoF5nx#h2+NqlT`AkrRW5cf25evxAe=g=~ugdAa z5Hl+f=E3kqmI8gRT=omGY9!nRT>vGDuM8M4!^&P60*hqLQnBE8P682}Deh>svem8m z$@w5se_Nnc~Yn zWN=5(fgs62z7jPsA0hD8dKbPqWQ{n2X2vi>XK+Kq`GXcrbFdW@pk0PF@(dM+svU3o z;Tu8BibJ^=`NPO?DnfCHX_Og4Mqx}q+FEIF9qa&OFD&ESm_TiTaT0Pa&dZReo-WSN zE|t%nE=KC>5u~4vwE7J>;+Nt`dFC(0%o&gy#)i=pGnJUs9Dw{I zTjeRg7U!YL@yf5o_{q21IvaV|k4)IV2u_G<6f+o31eA3LLlo89<@n!-lS9x2Gl*~H z%HN17L-CF&Lj-;Jio75YSt_6UjTjp(Qh~hqA)pWflkh_-^1MLq{f#gyAFYK37#J0m zp$FxZ--_m@H=ocVs(66e=x|d0`PzyYJiizRq>( z_TG#6CJHDjeE$lrOR*i~oK1wfEIPnKh#yh9rug$62o%u-@93kkMNL0#1$G=QD`*sb zQ&@9U$NdF8+zTdSX#1aHLJUO4Bm6d&k=p^~E!1QnEPLP+KoPAF;&gPWM5N}o^kv*q zfSOn}TB>g(W}IMuI@}D**H*Q+d?DBAtiK>z*>tAZp`9ul&Jr=X;4HBwchrf>LU^M}6^Cu#ew|0FL;e27@7VZ ze8!`3TsM&m<%Q>phG7tG%e&4M)265;F=xZXYv>GoF{P7T8Y_MJ zNY2B6NLd|_dq6Fyb6-R?+31iwi3EuqNt@yyp*F zeV@xeoF`7L++qt0`-hBq?>yA$Uc27_AL{=g68;ZVbNwGgvn{yAn4v8hNZoF;8c-r0 zgc6F`N<8?z1+|tXlvmakh3{~%8*L@m@F4Nqf`t^fsIEuCv7u%9P5_({hi?N5Oi(F( zkes~<7fU~{F%K2Z;Gq{~*ZHDR`(pFf^F^BmX3hJfnATvk9tHv%hOAeclvXXWbn~h| ziWS=Myl^lJB^!Kmi9V7n9l1h`)xMLnSBPcW`*Onyac{-XVTj;$GD=Xt`!h2B^^eLs z{wyZesNMgYqo73`;dGSZ-u<%}Q7e|SoTk$)vT_IyDJw2OD7-_Seu214q|3r82bV3! zY5_SlE)IfS3CZ8a#d`*Am^>yS{BXgqJ1JGSPyRq;f^9N>*P83m%fzg`$35RkR$l@hN`5Q$;J-+vH}%0gDQS zRE^O$=sN@`>RWm3g<`h$kj!2v%p=06@1q(D_yQy}2%+$g;R{0-Vfj^V1aARHSBCdU z2{1@ZKLX|@c*OEps38h}h&O2X<(!MelF|8Y^jA=0vM%xwoF)1N(WUbuarFLSPL!$a z=@3?X0GpH4Rl1^RiaaDITr8R*AbAW(;-qB>7>FJ6%ZtUn*iM&U zEM_9S>AqMrAA|uT=bvLG_FR1aGAnc*-iFRU2ayby(8|=w2iJ}Bg5o|n$~ga=&4;&( z+qFt7kzoyqb(v^|+_O>~iHN679rbrXUi`x<(V@L|-6bM#2``rw?i!V_pIWCPg^aH8bWPU+=e&RttO?MkF6H7^>2mz zZZ&quF8RAPqLpVvz7Psem=!h~vK~`!K!AYyIeaRM?pPXx61kky;VNgq6l#O{sga*E zeF*#5!TjD15xc{BZJ@`Jg52^n>g+BswBI+%a40O&4QmvNYS0{E;i+htX*yT=)TQG0 z`ygSqv-t4)nkwn3XaO+;Lwdv?j8tM}^3==3sZ;4SnLqg3VmMkegNqteNX9q?@i$Jw zLS&rEK+T~1;4(3Nc-ef!N)0GMavl(C_)dQ{-Iz?CUN-zXt;{bEzg#qjaETbY7p;-2 zFBjvF#giJ1dUF()u)#ok_clcl5f*F{wnT-AZ_S9cch4=MWmplm#PFJ+FIEOiScTX> z95t{-aZCgzPFgH7@_n|-s%cItbD2(Qg-y1a= z57JOEu?zM{>tIvtY!>4&d-a*Pl!0=J8JsAFqbg~)aH-6+TcKGE0>O`otJib!fX zn#c}6U}PYT6pGf|c3szqtwTNSi(I!>G~u9h@K#Z#=P-^9dtoBTnfpEFiGA?(cq{RG z$I}`&;&Yc6C`7_7DF?L<_Zyfbg={~gJ`Gxt^UT2VXe}z0!&_rROg&ClAts7N^UXhF z&)~zljj^HeJD?QNR;%JX`nh3HWF7zfqD60kT^@$>NHCXn9lsi|IsmR>BBNqeWLX&t zM$j8<^H$25pH!S13tDfFU5<#m5*DQL@P>`idStuNHcRfgR*VVNndS4fKbu44`0F5& zA#&k$Vs4~%jy9ikmhhwu%#c@ICx)LGZl&`1SRDh4J2bPbAr@?lg~9fqS=EaFRJ595 zTLF+3b9gMFOu6b1!UVmNZkwy2awF}c1M$mU*NLYaXi=e=W(^z^t0%0~Gio!;YWcbp zjsAPC0*7UAowyYK{+e}S_JkcsxAU?xEIhSmzlUq%%31QjrJ^13^L0W_<(zDTtK*~` z%xi)t&22057pWxoD+f0vq#=iH{2jjfusB54Pv&xOGl_I zH{T#8G@WTDmBFa6)L9624y;7X-$tph>JPI;4ToL_ltB#KD9n*BmFEzq{eol;egvBlHdZl6*&+Kw*>RKDPyDMaa?N8u87j{{E)bCY?Lq(MH*XTP znpPn{y;+PtpyD`i8@mk#$E^4>_ji{zKePh+3WnFw48uyY4|*Zljrk+HZaXF3c(rqIgi;R;5AM`aoob?73CULLv%9C<9C+X`h7`oT<36vto#sKw)J6Hs)<(a03^;>?hLEx;ZN z!fLT?LMXPD+281b#Ce>oTXB|NO#cyh!=8wXc-KR>Vu<=-Eszmm4loALR;pQ}-p+Gd zh`SKWq3_ZWfQj3;9y@x(NeY=>tpNdZV zG;|9fZAXBN3JFqdq|Go&IP5s4AzCgtWl(1ApgAt*xxkHQ!mtlJBf&!Dg`wnqj`T9o<0PuGg9+j0{Vp7dgPD=Sm z>=FI+u#}6s#K|+eiZXeSr36*d&cu!i#%&A>0xsjL8MIoh)}~K3Z|xF7*LH1wQAhA(mk?pXm8Fy${vjHw)IP?<^ZWRfe~4qNpSS6r7WqPhQlB6X zyh}_QfhrXXVuJ!%gCU+=b(c69>Gh&Z7ye)!OT`Khz;!ObBa@`CDcG zeWGDZ_;BbtPO44Z2MUuTut?LjD$GW7H1VO$KYUa?r};0}!{KY>gvZ3bG1_dU zFQUzAIzwg8m@}HR(yB@(fAg65XM9HykFfE}Y`55q3o9*3^f58jH{7aVoq}5sN2B>D zMun<*Qgi^^tGIQ+t75QqV55m+N_?+SNRfC)$$m52hq_n(<0h*D$`xAHpa|d^5YF#l zbMd_v=?tig2VfyPkEdDS)s@G^(;vs=(kS$9zp7@I<>5Fysp?+ z5koxPY>lT2kEv2@Q>^-EL{>e@oz+Mf9;DYgYGs1BV$J(Aj+)Uqi zTEWAjwNTb-d2^2#H5{}E1WdKtqqA2RG4-XQ&#dqi}43v4M4iPgQiW<+3&9kdt^ zqOlobLs-$Gfm{?(GYHA(Gvbi)&BU|16_Tybh-rcRcQ-vFn(TI&-1dx!9#&0gGwIY_gUN!` z9uy&&s^G%*fe0ARb6J~#0jzG2Aqm*IqN#jlVfacIUa~viyLup>%w2hCcH0^TDvIuvEwN;SDwn**lc)e(QRszOkD2oZU6jP(;J_TIfP<~WE}yfOs@ zjI##J)3*p+eT&b*7GMK+xL_L?7ONrTjsFzkc*!ULw#DkqI$}Y9SesG~e(CpBvsR$UbZiLD|#vpL(QOyIi#n zT~2+$`~oT;ux||vXiw0Djil;U9RWrR#Xw=@m3;=%eFQ3MiGu{AG82gh*XA}OXM>xA zC$W`-A(ok4uTCFBz1~lThR)$MD^4RBb z5OtBf=y{ZJdgYzZBTmGp&pj{3e@_lo{esxHh6L?7&2^lMU@|G4@N$f|9(L%3O$csVEu|k=KWt3ztEnS*S?5K`t$OW z7f~GBAtz?V#M(=B;NkKa`GNyjzC1lE%qcrGGt3mMi$meEDp`&rJZ~rYKvv9>yRu?* zFoq%*)LIVRDh{oCuz*D|5Eo@}eFvGt@3xBO#ppAG2Avy}8@IdA6CqL%Izj!$q5{+$ z-n+r4-#7N2t-_pIKv>xVA^61ao9^ZlUJ_MW{4ITBOxQP(YF41gt7`H*R=`%HAe&)j zFBf+HtAdQ?yqiJhttwjf3;OatA?{@X%A0+9xLn~EMG$HnslKN3iGb6rkgEE13^$(s z{j#X{Kk^_Yx#wjuRh~(G3C3du!3pZ#*sFCWcaCn63Jly^OVIN53QS-KoBSY7MO_=pb zo3Gw3rfEThj~L}7`SfezOcQ)nXMH-X;Z$D)hhO=qAO!6-B3H>DzAkRoPLexc7sm$w zxe5L=a=%>ihL~EfCd)~NBD^QR!fq~=$v4ClZRzHR-w-3UQUB!q6vok*5QBY;t7f(> z5Pn8}@urw~qM%hlvV}k<>pKIg!0DU-RY7BT=3!g)DhrTWT1V%jmHlmM}@~gMSft5Lx4zpK9XVcf@Y6;{j`E!xve=6ee^a+9XUJ59 zKhlHhsLMXN#D6hP6OIVRGrRIxCNAYneOIh)v4*kG#4}+sHiB|Np#W(O#WyO8QrR@J zLqP#C(}rzD(bU3KrSbBccg3XOg=?Vokw41G{}xw|gk03oGs1omvd=8hVlE|L{Wq9> zfgJgsSg1*P+I!+fl)##L#c#D|H{Z}JPSmt>>?n(DD|{)R0;&q^gR8}v zo*CE>iOXQ07^jXyPK(k=%BDV~86nx;C*GX`raCrB8K8t+%TtPK8zI#9l+=9ks{e{Z zu+g{jC`rFOXte~8Okmu{Z)q3~<< zANOmKSA%?v0jAoA`k!dP7J5rA{75Vs`nHCTE3qKBL7p68>5;ePtsjZwN3YC49?0?| z+iWnd>ES*zQW>As`H`&sSWMS;%lRLRrX%jjp=Z7uoSIKSU92(&EkOp%yLxbq1Ek)> zqaIhNPrmL!7L7hSuBa(vjwGj1|7mOFUHQbv;w*IraNs9mM)*xUw}4|{JipT+&;3NK z#Z|AePsQOA-^S<29%uVbFv~Fv;w=~oTppwzRoE{macGf$Z~oJ#;sb5?4KM=p&B#>< zjOl#sBW5k~2l>a(#3|9IHQsi}{}1Y%La?E>4cL`pFZ^;w^+LOs=_ z+5_K?I)smI+>Zr9RcGp_q04u2_b#zO`%+q8i|CP^UqGA|p4?g)gh*MFVphvMC5m-g z+iZG>-&!Ke3{-j0g3DAWFQZHlxg-cuDy~$_Uxdpf zw(qN<5{*X1X;>>}6tVnm(J^?zIYR}8t}|<+Awi{qycfam`sAu_L}YA@S&o}n{Ev@w zkCh#cvQov74Cuk93VH80VqRSYpBdA&KdN}o2UUjg%c-!Cf%xAXX4cC8w_8lD zt0e<#?eiey8#K{X@`2sr*l-2)9*PQ|BkR8tsd$azFOruq&Jtq!(MYT+5P8PWp)-o& zc5t*t?am4l?g>)B$!lW8a`hY!j#%i5P{&pt$9f#IxAl#d%2$cS6QqcRp$EuKruu?0 z9S__91S}4&9!^s!I3U;Bo!68(Oz z8N=$I(<0BS-ICpjd!C!%4Y;B1mRD%TMW#bU-A4C2gt&)ENH*!liQ0wo65SYGZ$Bsz z4T9IGGR4#-w?O0~`Jit6bo5FcwJo(*GYHf191^;~K=NQSa;cmlj3)p4Uou?%tuPkU zVb8G-?gjBw#!mUD8@$=pYjg+Ue?o;^F45JZY&}ze23QhVL z@5C$NYWefy0wdxVXe+c8u;eXBL>d3UKSYBtipnsmS6;wTg~cg8L^$?+WQfCu?W5Zj zXqsIJ7)ItDotp>wkNTcZBSZj6;1Uj|W>vIV+Ie6;!XJ&#S%KKkc|BYMLOt+BbAj83 z)?8A;hrrJb$10W2p6W|JZSc9hpw);+y#V6Db7gBd28&G(s$2D~(JIkGi>{s_Lpq4N zU2;^w7&{D`yMos`tRS`!tOz2lg_ULU*nsidIQ6yoo`5QPZlF;%xTOtDm0Nn_d~+47 zun%(ZL~Ly5JdKH1Sa^Q(D%_|~>=75wZ(P;RW@2~n;`zhXr-{U_>Wk-xR<-ksP{({e z(Th*;W_X9)kzX{T4Ln-S9qsMyWDQJZ+s1G#d;$t5VKee0TnR-|kLk)W0b_LBUZcG@ zD@YH7HI{>+JeRWNlf#`io}LCL3t!~+Al8V>DkxX8ixS{7LC_9N7Lizu>J+P8iVtec z+S4mTyg7=}7jhX2&@4lOpO+%9sEau3S)3-+nDzH}aA67ptO!HxE12Mt>nM&_l(UZO zR|8{1Acw(-Agr__R&F0;z@3`qt*F$&dN3r2;ZA=DT7(AxtS=u%V2XRHKCT|ImK_+> z#bedzj$H&_GTRrU^{K$xP!E`+(S6|-(0IIXt-QX+GCh|Jn^}#g3eseT%?Ru*46ZhP z44%fUUepkIs21fj7;k{^K^rA)bAXDjJnS+&;An~rEHPe7Sb+0^yjau&gcXM`2Q44u znO`%egr!n(!G}Z$9JXgt9(k6BK4ce1RCDsRRUorc5-XmlVa5$U-l1knvqt_><#CRp z0*oqa?IQ)g!5xAm_q7#lt1^6LWrl|)EQH7lJjpA^NK&;BobUjKY62x{3#*Hr6#-03 zRQl!Qa$`cs-mNje{7Jbn+W$01mVYic#*X6EJ8ae4^D?ZbW9A(`PDpMkHx@R--=a$Z z0R-%kKU@tL3!?^>_#!u=zCKL79}m8hGwSwXSY8;2=B-OM_X57kmw=(;1;9-wGSeVQeRKVoYa9v%(nKzBHkf^#Yyuq6~+}~ZhsZlT4xD_mH2u%gh&@M0xQBor6G4$7}I|VuG95m z)jUdMxt);=Zh70Eb3O}9xGX${jN}@hWl4`Ww= zVX+9V?OHlFxH_+|i-Av#XOUY?xF;C4cB?gm3>;=;e(ef8*0XnS^~I0q2LNJi5x5Fj75>f+wLs1fL;dyA^lnc&R%qlT}7N5(*snxA7i# z5PJpu#|!T8L*b_SLcDB}rw=w4yq|KP(-z!%8xBSs5U0!`R*YR;{tzfCn;VRG0ydWpqkY+#^vzYf2n~k z_sZvMjIP?p|EDIc(+=bK6B;Nl!IPz0@8+Ib;}C7(s|4z*TwwL)+u)}vYoQ`H-hL!T zvokB47D0zFx%t74819ba92EO9yh9#cXN;_c^s(vAXYh*GA7cN>%j%5vsLo6rietPr zbuxN$U?k7;{ql^V#)0Nactu_TV(x4wXj6O()cKxu?`N3S=EsH_b2Sta_6##l@TWiL zYEP;+u0cHVQN3|+6MPV&Iy@(V!$7Jqp6!5ThK;w>QM3JaL*zDmuPuYimp>kEOwv#a z9&SvI!zRHq0fBfuz|%oI_Dzj7%wTJ*%n}r75bnf&AO%l_LlXF?oZ7BV{_ri%1Jtc0 z*mv|(k3-Ry!GX<)L8gtU;e&L9HGOK-TsUByGgA-S;_yjE+u6uw5Z+huE*Vb8PyxY( z9NrX(mSMB2xP-m=k5`*aH7hkF=bW<5j0NSz4aPzK|0$Ju ztih<;cUNH)xCvI6AbGP)$q|gU$40yplwUO<5D&_uMj5lQg;tL;TBe0iz_i}Hj~4<% zm2kBQ0|KRtAz{A5HpSenckCYWt5HT{RS0&D-WTC6>T+`GXk%I(#aP)&Pam*gr?|MF z{M~3{QUI(1@8!*-jnO~mNs#@WGW57*UzeXSZ!_iR%pSH|;SU%<$8ennaWWq70reoq zgmM5c zw>do4_);73e!fasT-HgT9_g2(qDF&ujl@~>s0t<~^l1zv!hzZe@J= z;!mEKvaDPMAF<&M;o9&HW_9NTER}HuY?@6HZk&U_dPQLK!{IPy=a;9)j4yHVN&a-4 zF&f9xe;j8V!nY5OGsfd>Zk%zlcvghvg;$HA^4RglyK`Fjd>vjoG26U$RG_cdeIaPc?q;e}x~(9a9l#d?#exG-D#- zdSrld;WT40?)fLD8Nbv1dEImf?s7R{x^X&gy04jTjK#~H(~WUjPQEbRIHLApPSKd7 zp|BN>V8qB1a&nWgzxEe-N|P}Hzt3`hlX1rA%XF4CSK!|T8XvRgMScXIxM>oJX>xCq zF=pyIf#X^58Vbd*5BU;W74+@3k?Zjtp3>lr%aGDadDDur`nV5CR!rZGQ;`J>iuUe( z=Le_L@;h&zSjyiE(HHpg|MzpKwf!p<7VdkS`opIG{)dmlgJ}E#Ec~DG=R)iJAL0pe zb&=QL1tbGclB(HSnbVgoSGR^tt=#(fE3u4A7joNv#_iQN>oJH6`vsRNjL6NhV}GL; z>^k!RW54m2U(MVAp)1rJn<(-Kv`cw^6Z4=#ha#8D#}6jbztI3y0C&PU%`dM!y6os6!V3-Ih5YE~vek0;3}dA~^A$zA>OkWM{-;&*g#(S_ zp{%i)km3$`$xP!^*y|5w8mslax?DcXIA<|9KFIYz0Oy~x0lbC_P%)M$PSORFbQDTF zFdOCEX5(=<8Ruq_Ep9)=t*XZ;NukccU!*7m^INY*Z=p|_|1NEjRWz`ujd*I@oeVC zxyD6KhYocoL2c^;a_UL({Yld8)@b?$(8L}aa+E#ud^ z7)#mk`N)=4cz*3&fYKsjvmru=Toc6ON>tsmsl5WbT^wTE>i*U|&8?z8FEGBW@yMhtXncm?iJm(u@4~0Spt%Ht0Hz^r@pJQ|-`Y&pCPk0F=mFE0#; zo4>vUQ9}I9C^2I$C>^0ffTKc&uZD~+FhMZoaAr3MF1?MbK^#Y;%qX@XZgh(5k3y;&FT8YoWBCD$a_48}k6Ln>e3#Bxb zNb?WL2N^uGd^C-2xvI@TIVd&!$CjGTyoe_$SP1@r7ID1si1a)ZKNkTA zs)c+MYB_X;ii)~DZzv;80jJRb7s3pl@Rp}55I0%@MnwoP8ugqOMH+w+c$YuFJ}AR- zC!gNRpQe_X)hA#)$h=fYWaKjiZs2G7p_L4qdGi(z0MxK%0q?N{ zJPEdfck1%fi-rEWDVGf`8xr?(Byz62aN7)Hacyct;t&Sg0h&nlWf+bm2+kXFKMaGv zRUn3Lb9`7awj|3aMZ7{?1OreK7PbYi6M)ziGbR@fIj?!27CLnYrJdQBK z{EuemAnHpT@Y`RG=a=|T{!1u^y1QP1v0*lwsk&cj%OdyUV2QCKzUBVm=m=O!9w$39 z|122F`K;BhzzZHvIv*?5z;546RX##+xxiE_2f;-s8K~Nn)%j_jfAAptn&UF8sllDA zNHbaq)=i)zv7c(hT}EdJ2y_j>Ov_ z{s*EQjXDu|7Ij&h`>ZOW)q+vJTx^VqLsht+@d4F{;ZLkwrH{ZOe}a)_RHalGvN;^4 zryR2It5R0TQdNdVKAxrs2*T}E!nLS_0p34WrAmB|Cj%RT!Xpd$VN+gn1WJ2Uz;J6D zb|0o@M0$b@U%~cf6G!m2wq$Yc1Pbm5kk2p%BTuT|w+d2w0i_k-MWMI+IJSka5ty>h zy|f-T8~EC;-p}@R@U(9#~a4zC`FuMj#0nYf~)F$>abSLhCWQ`0F(n0tB8r# zSiOo(bXb4&Gejd{JMkwC^)|fLLuK$DdKiw@TDm#BEsA=uhBAt1GwZ=*8c+k2;#gz8 z&WN{^5Z2CpM|+BLC2c>C(^&TnM@@b^BRb5irwtr|*$LBRCRT3ZDFD39myt<<3ZvsR z7)}tXkD?TQiU>g$vPK_^m3$}~k$s#24}f+rl&cWVBhFQQu`b@}Kv)KPNW@UsbZi-* zk;f5TDJm>ZDH^E74q*Ay77XcB=^2bcDGbpWW(7^d_B3l@#qqO@Hak^)3vmXvpW0)b zGF78bL!5|3kLQG;>-J(XJy<(DTZn^0e#`BoLLcx0<+j69Lgvj3i%#Re+onK2hDuo$*_UD`NOy|Rfpy_oEn8%c{d=0#a5eR zFw^`KrP!Kd3cYX&0#M{5LM^%+xP~vYHrUJSz>Y z)^2L*GMKo)8LfOcA3d7w>({yk4PLKP8n%CcDM;$Ep{%g+H^Y<}j16H0lYgd7i>pv= zD2f!ZeZceRNE2-xH!YxA_{XwNo!a4b<_Ne{+)~fp5_>GbDudBExfXq zZaw#3+DA@B6$23-VjrTqHIfB4Mu~`quxdPs3{S&@yCJsDL+7gLg|S!stWUF3teSx- zP@`fErhzaBlY-d+BOADl0`Ndl+|u{7!|6Q?aq3v`V8eA`#q&*p}dpjigUeTq1EeMoid#d{o_P z<~2J!dxjsEgCrDts&Lqf>8jf*qxgd9+DO`tDy{*~<)SuP_;74~(t={O=Z`-8U4gu3 z)652@?-jghg0m-l0WcpouS4}MBwBFnV}|gXxd1mIS&Mwkk}LQNDuD7wV)9VIrSO5W z8fELCL}nd>x?&t_kQICa0=XZmz4>RctIY_ffI|XivUzg4^~?_LkfYTW!HI-H-{dpL znss~`6~#~5@EJTzN=+IJLpeV`Jy>r}13#07MnKJDq}?|l-#gA|idR7yaPUb*P->u= z5hxo(w@BIN9cpMbG72cwBt5ZkbprELrwWSslRy=gwly}2990r%i;XRaMSU}w-_Uen zrnZc=*0^2w)yx`b5avA6x&ZsS%A9yuLo@;%Qk|6-Aj6|UY<|QEcC=Oj7ONkT#koGR zNbZW^xGIEmex+6w&^R92w=J&3KFb%50d9l*5e(pwSR4~#C!it+x)qo+1Arh>TzCYi zu)uO*Vz5S>>%vjj;#yb1az(N9sHV3lE$3-3rt<$8I}i+NU}l)c4+(uTxcL*u&auUTd!%Bz>~GOq2*oUY0yE?kC%eEdv-a zS}@2%A7)PN-q2niWCQ{hl3c<-JRxW)z0#U8rhz3%2{#_Ct$lGkvy{-zbjfqkC3#?2 z{J&qxs3?_mN4wgqWU3>JBGu6bsAX8g02>~OyiI`UvJqxOKxUyest*Q3@h!$NJMo#U5_%h(y_$7aA5ehMn&FlKXhZ^0x>>zMQZ$2MLv!1!Eizp7e02c zYwri#P9n0_)(mcu=pz69?vfncI|hUNjFYyH&})1zAhY+9qQ6nmC7L>fwvz1Ol3hz! zNty8oS%n;`Ns>!50ADtmS{wHvn5AO;O_+I%4bsDn zuZ6o07{VA7trI0K;*2njgRyu*mblO(zJ9U?{+Jxm4Gf?AK+v{&Xu z`{TA$0Tk1j7G|($)GAzR##~#4Z0)FFl-__vFsU)2BHW@K<24C@h1`?FwI`1h>JAwT`h~ zC4RUZye&|51!yS~DpO}`ZK5EpwMg4E4#`qhw(i%&@*j9Jsp)q;*pGMHpvHYXPg&LY z!x&R($0es2ajP(8o`==?pq3O2^UOJi-$c$hq*prignIB%9GM0s5`HaBHwV9I^~p^d zkDPT9!s0f<5RWhgec#in0$uvnrAYjEvLCE z{2UkqG_YqFD8nP$R{$}-lq7?PaORvq!cDX)?Nk|}xok4*7~fLkPf5LDF3h~Sgd5XNf@p?EIc zqqvqqIH|`d)ly??-Cpx0jYNV+iq3mfJEJRUTh9CVX#UuO>LsUW`iyW{J< zJgR2v{R!1=g|A7kcgMg2EL{qHK$l4#4uk~MJ>ZI)@opURli+!ikl^0$w=Cfco=nuC zeq%d9(knVezed4Sgo^nu+XAS@Yn}Vr_E>f8d#h0vLCuNRfC%2% zE+F1JjyiY5 z*)s@CwQst>HwN3UlN|<4=q8ign#02Won_N>YOLsY=^NRSF*U9Tgwl;!6y+`|#KC~Y z(}XZaGcB&=J*-a`qbQoAN2M&#apg8CqJe|6NY|-)R;dH1mIyA>h@d6uv)EQ`+SJ)j z-YZRGPfMegLJcEfLAe!+SIMg)vtBBG_8wA9LIWeQQL(E{V+~CdYej!jkPHJs=BP%E z%|WlaZz*}0Gn!?vX6+?gFv$A?d2XgQ^-QxTF5678p***Agt*?p4&9uLJiOrzOhb}S zk#vT@A>e}vct1FR1Xes1jOK!WG03pon5_H)90nt0QRWzvG0O-Y(HsUnN#A}+r(scM zVH#T#WMd=O1~mfYG(-9+D@8#ZOWhKO!EfN7YPz1ACSoXxvdJ(kRyUc1qN{e~%2xig z5Jq8tZ~)}>l0L`qm|bXnqy_els9QOpwBo)YO~@MZ>*%30ZlYBTa27bLPL0WHLLwy{ zO#AS%D8fWj)jZ2(C_B4rGCe7*%kY?lgAo!7?vp!yg0(&41BmE6=L!v0}P z4+FYQT2+|q-<3;pA2@9g*0M}%AV;Br&cLcSuB8H)ls#puF)2jY7aCqxydb^WKVwEe`d6hOm; zT6QsNn;M~toMftr@ti~h*&H!!e+qoQ!3v2DNao* ze;}MbneHja!6-I&s^SDY>7zHgIUfi=wdGv_v7tcY%=x{pkZyI*!v5GHF9a6$rvX*M zee46_k@?&2b2}dyZe9D$6D635bQ_drm=FB%%U@@;sf`^2jvqhlE;=$yC;Z+XtBQQ# zE!obbW8H6$3bu1LSrS?D1sV13-l!HoS+(`YxXCK5=eJMbWyx3#8gd!BL>ldnTv%E>& zYbDeEt`CM62A_2Yd?>u5am}VI0<;ohpIcigz-T`!rKgy4!CtF}vx6Bp>wYCU!LWXf z>wgCSi(dvQS+~~n(0~|79+b#}D|wC^z7H6hNP}Xn^vTvJdLmntFDbzFy!-4?Vc(!( zl6HeqCB^bwP9sJvHHpP@cODf^34Z1_9!1jAA@0qi!i($I1$EH|t)fh|#@F*Reb#C+ z>Nksezx(Eg!;iMH73Kj_^z5Nq)^4*bjDpI$s}^9^M(4%L!$mWdH^c+kh8@0*#Mz~} zeh&|q7RCp;uP+amlG5;}RiEz8$+dxvRv&4Z&AmhLSoT`h#=&l%W5St?`h;WHX>*AC<}qPfIIy~x``a<$Xo92CGBHSS*)9h) z3FN!N065SL=i5Jn%eD`D+@T){yHxMsn2#{;Q{AUO5`KuIafk`z2egr{XznDExq&;9 zf*oI_W5dJpcNZ^PQtoq~JeKtND}IS4@2)yFd}jl{0t92>z&vXworRacvjRRk3@dU% zL5lyxc7}KdrqQ469JiPffB+@6!I{xWZ3b^^sBBV3jDRiVs7|>y31Aza#T_rLiysS8 zRv$pPbB_zRr<@I)1BJQb(D!NFa%0n!sE$1zz8fPpI%<^zWdQ)Qk?TF}tJD%L*ZUjB zy-(;XEiES@MP(ZNkRVvSZYqyKAUs@asnG>E{fXRDJM}2=)X?DGvJ?LHOb6IJ~IK* zS(lCGa(qK#C6r^;)Hoq2zXM94s^}yIYUA(uv_qB0Ed-)htHO2|Gek#%IBB@ay=M=$7C#;Iv}Y(3T_{JB#GA#DK(% z!6_j3nX*5pGC|E1Y5qer1nUv2)@+AxB4_x6uz=hiZxli|+$SlBUH4!eqZq;Z)&*Ajz&-RaBD@PcafBeE#%Bi(>DvNgl9>vVX?LM%cO-?B zZETeD!ek&^;f*@w7@4YMMpaIaAhVbhKB*-G3bN(=gPx?AWe`6Z)!T(yfr6F#(&COd zDeNo!mJ(jK#Kl?z*|eZebvZ>fNJ~O(H~ivLn`USn>~0RaUfPEvpOo5!^NI;<48RHQ zE~?N*QaMc3J48UOTHrMy@u#=Z7%P@*cJm+s~ z_W(Zeq*EqJEq1$nJe=0RvM3u{z*n;eH#_z-vxfW|RqX!xuQN<9C-FYqjrYS3ls?(K zN^%bf#{f|4=?{KDrvTcN>T&rnpf1{HooB>>f7N`QndvnciGkR?`0;S7tuU9BRfAzM znwuy)nNM<SaI#Bcbi9ti3si#m?xzD02c*IZMHM60JZy{xc>Ff2xd- z`&1;KfNLLJr_>1iMQO_k$|<*fh`h6$W=d(xUfd|{x1uedvTYT1$YXm^8`W-6Z3@=| ztK3kBw29MXz>aE4Xm9!%GaClfMl__;@4X`M&uR5RWSA z-4xeiPc6`7;yh|~(8NcH73dxIg=p)jHa9AMnTIYzr4 zsmlPDW^cq_8{r3gFF_z%saIIP`ejF1^#?WyH)Vaf&0Vl6j7OEJY?Z#?k9>u8k@L(@ z-w}bv)P_4Nz!k;a{bW_xzlW9>)zfy4VZ@pein_{T73AJzj=%!yg;K~kMH?5!@;t*} z+?Z5Z3TfWWJtdr=+~3_#2~TN-Eh7l>HxMpc=6-ex^7by5o*GWu%H$P%lC@B_oWhQH z?=2&dYpf(vh4~>uvaCIK!KvY~!Ks&>79OkOlj0wN%rsxV=9JUI>3wg7O&Y`(v{cDj zJ}o@T4WAyK+eSoRrJo_PS%tao&eOy5HPUyS5xQX6+TWcKE)Ie_+~}F%J9jCaQZMh% zD$JUQVJNmX3hoYNjhVOU>9;+LS1D5NY zyz*&K3*P@uNpl_@1Y?hBR>3vc=d`~=)l#FKbPkMZO1^he1+$#n_nj5)HmT?b$4L+d zB+#lgtM}+`KPx;v{&T4&$Bf=>MNFLU_CK4A0b99cXNLm_`i<9x?!2?Zs~c~_^o0*t zPAVwE;V>$aLdq;ZuFY%?y2wNo`i*z%WIEYw!=)IUG;5T1;`1$!EI>C2;It(4raIQw zu2+AZZ<@KEDlDSc+^D-I;|qoHyzW!rxW`u2JIZ-3$LvoAdEph{BGe6mKABqz zea>0RPFeA}^fiBQjLF4R9>NyRi9x@H6XX{e7u5cGULj(E!@{#a{3^>xb3k)LkkZMz zZmlZHG-d)%DEk84rv;8xN_V8XHTDat>ZGjYtWR2mtZoDgiZXwr`2DiHbh9}qSw131 zvU(+8E$FE>>?lEn!+p6ZzF^D@rK?|3by>oP(&{N|M#|(ozFT2*+YBceLUf@iLy$>w zG@>1VcOcB-1vXHYPBn7g(mKC=`;UUc6$KO8}ue)|0I z*8CL(JH7e33)oZOQSP}5!q4HH)*`jSGVaRl!>-l9U2!3LfbD-uBhVJG1+^S-7c<77 zHwAy}FkkbZ&<0HSoWi8^O|*M(JPnUAFU6a|z5`kxPOY>st#^3HE2}osyA5%J1WAtb z3%f_Iyu!Nb*?}9nDC`a{T)W_+un+{dxP=#o{qC@f!--h6I|k>9K^6&S%+J3eM0kw| z_9NZ#N$%{6!x=a=_H73^TRghc$i|9BCA#K-wx94mLkC1HQh`>aSZ``#+DIa`F>vAgJ!aDLZ=te)IY zpMDMuVKyA%{KO^UAa!f+Y>&EK<Z6^4}LmihVY;sE9edFsD6zQGhKZTO18m8>p(SeSXc}>@jRhIs8r;j=QTZ^KjpV9 zv}Q;(AYF*hz8J~exHvYG&dheViL%!wQToD8}WVaCp<$@x9Sz)B-|%6t_VLgE%Wx2 z#wxqCHvK;RO?S`QHCIpzmZD8Zd_LS48Mx;2*msAxM?N3UpFf&g|35M!kn4(cfJD+Z z;;Tbto3t`R=1X~td}%wxuzeG6bBnHI1RLDDuMCGI#7?;q_I~u*&tDl{5w!f7ndRaQ zZpSa;C_2Es=ZoR=iNpEJ@5V#O^>26|A(IwgKE!?Ti{ZY#x4)1}fAWIqb8DpcV0y%N zx!|gB=a%zs^Q|qtD%_>->Mt=wofiH`No+XnO6^VerK`fX<*&ZmZM-Txv|kV5?a;Y_ zG0)sK3tgF&+u+{58YO>2-ed8)T>RYHPp%F-g5VW*-j~A9=D&8goBU;V0UqK${$-rx zYu(LX4!_m%BDJ72o8?~#cbu;{dfnpS5ex#xb|(n~d4x%Rkycu zTfKx!77!3{<*(?$V6Fl8?yrU?phVk!xBjc)p}v=?ZjWojSraNr%j}@;&A(J)4po)C z|7TqrUd4v};je|CLvOJm+6`;Cc&APk0=S67uwHS${2Duesc0o*HL(~IHxhm$o6*nMSIZg^!4ztNZnW5RbLNJ zY`OGx1PhBlcwP82Y8wCfy71&uykk)3wb-3_J!G`6yXyLIVzDf)c&oeZ`f!W3I9>Hh ziPS#*UvL*3-qKezoh){h8^WF9j`;e5%F40UZ3&5D?vNY8)eY6uhZnSR*tjH+81Wk~ zig$0lyQ<#yr03mVNPlo9^f^F0x~%widc&uMn&$-dYJBqi{M7-imD8)G?~9XtSM_XQ zW>-T{%hF*y3aM~;oo}PtbAIGHkR`c`ITuVT!sc3r@1;x58P!D8qA4(p1&n*8+d7O- z#^%_pN2x37(fWg(kmN3lJU#dB$O3{fT2Ke`Q|oHTYjiR=$c%)|?!f3(VBSJMELb7w zt##X?m6djNxZW}LSxz@n$M2kA5;xN`9|_Wn-SAD}doe=Kyb0Og=5D4u%z^IjH-$R|e{lV^=Ix+-(Wx+T<14oVF$XU-wcnLU`nx= zx1>-m{mWD8WrO?iH^W)g)9meV@lgDnd-I#@?LTDgfwzVnNqU3(%(wXYkbCA^;oG`@ z^a2J^{KWzzeMugR2>5MvTX;OYqkM_!rti{*M{4+ zJn#*@y21T+Em;CjyVh@qbNhbtW-h()GhAnlG^E>6Qwluu&Tof%=5N6*|Lt%_e&gxx z-fxGaL#O{$H(9pq#2EKC4dWh^7H{@df5J%^sAr}HImp*7`m0kOt zu-1AAYZ2-K_uNmv6Ydvm=Z3yZ&3vyK?(^MnUih&aDEE5CcZsT&-M79QE?!7<(`S6k z%)}5Qrxh8Mur|!-$&xa}ArW6eh3^WvaTA3wM0#!Wy>LOXEM`=8E4~*VMn%wvzZZVK zcGDH$O7M~zXJXkfeV))4p0R@V3(LmkTw_OZ{KIbDqWz>rwl&tpA@0j}hBI4kxzWqw^>>DcPyA7^XPO-C^><=Lq?TD5N7pde8{+ zmj>-C(GAaTqWC6poGcdvv5V2la%%2Rz$LJ;M{|#n^dKFdwpepu@LGv2;hbZP*l>$} zg#L8l+Vg*eG-xZ}jws_8k{G$ft++RwbC4uQ9>ImW?(;1}S!{XXfWp4oS4g60n#hYT z>^#2{1+e~gF5lY;XX*eyMG+6h25O|K)4s@(BAhz_(4AA zJQ!|S_390lBCO)b2g4r+ySTXzg#!v}t=;dTkl6WsYajjz+Du{9yS8+UHU~Tcfjr@Ed?egH_@;aQ5m@Fo+}@9d+YQ_4?yS!`s%W!T<~$M`F*^kG z*V?T^3155tqs*fE6x?WO+bpPVt)m1(e{lZVS2u+DVCHYn57MVj4aWSDW#Ldc8rX^cjPlCaL$z*q?33Xv?X4MMohiUP z%m?SA4e>#i9XTTjx)d2>?z>NhcLyJKjbDb7+dmA=MvEKqhvR!HtrOhFC&PhCd{lPv zDEE_JhR0P1dq~iZ)MK~DQ^@=tchXZRbe-;sr^1mj5%%Cy;fE%6L&0^D;pCzQBrwE3 zAboP^fO|h3PAp*~4(E?fdfYKjhcn*R{IyJao+zz@baSaxtN_PZSnxsid<7vtKabnc z(3b<&TGFq*?$$qzQqtu*HimNtJ19l6`$`fmyRa0GPC7mUk9an>7kkoHfgj&*>2@F4 z7+yW}7M!|du!(TFRHnuw7YT*uKNIfUCP3v4Z`WK`bmu-3?w!B=e)q&P;r{u%?{_1= z3Xj3#^|@ck<8|TMyMB$VAXVtaXAy|6xb%17)G8Q)6`1DJn@@4O{RWcnaTorE8gLxj z;O_WM_;GaP?Vbxi%f~&>g;RSwfK^Y@hCvXoF4W+2={7w0`g7r)l~)kwpqpm0@AKh; z7NULp>v88jAMQE}Sf7TuTLfBWij2)oq&MVSYH@Z_^K(*;`x4jVFK@mr|#F|2lBzle(T=m;< z<`#^X5f{@N3fdVR#*b9s@lgsJCTWpX%ry7OVA~_V4g2$7J=IGRiO08RS1bT<%&-9P?zHv$z->lnYF$c@zTS}9%M`pNJeuqK5W}Tb( zV)))>^SuxLr{{az_g)M?)7?c&RW)OHSSzTtJO3I^bszhEI9R)6)7$4tpisuEEB$xk6>-9Yd^Qsir}6dj^s@y9q+YwN3;Q zdj%ByQE*qtTLx{fL?unl|K6#*lTyM*j%vdRt{0S{(cG5$z)`H9#+9(zl}_}9LcMMO z%$W`(Nn4Jem$g*F22`B}*yUX1;39_@q!dnNHkZ=pa`8>_4jJ9%gxiQE8FX_Abi4Qc zC0x8^Rf;H_ljke`c~Nr2SFTlI!}KMRL3yF5c(_9=DtE44;U(hnuJ=_SS#jIHs_o_4 zW(o7`sk05}-;JuGopo&~s+cJJ)`BH)!ua;q5a1LHTK-45vz4cgACf#edV~Ma9=Ta! zaocEEhVKS^c6lm|4P(hY`fAuyBdS3&#OdNM5a;Gre51%OoeY_1yIRGy{571iMXP56 zo;o$%2Xg6|hN*+t|0~#hl=N696}R7C!+|-y=?@>2gO|Me_yN4==}(n}9eTPmx|P0) zU$3HYSiybauZCd|`>_!ax^zID6({szH)*4^;8a22G# z`oYl6do4UKSiknJ*TU679|zFgk4k(c-7B`nCVHerdWSpt_3(M(QXlx=@a^b>xBYMU zAsU(T2JGy}#63pq(JbepH{Mp+e}RMH>XMeN-N+~xlW z_YQvRe)ErTxaAOfE~8-fycu3g{@d+uhNo99`HoCIJbvf6J^vZb4X$;c_-D9V%Q-*t zTI{|53=astcIjYr(2jrjUleI?db8XtbbKL33$G4=mDTSDc%ID`w=@(VsA6^@QHl#M zy*ZkC=_66?NSQ0Sv_a;78dS+goO^VV!`-qR;f1y+3KJ&llTopDcVrpPumbx&Vr6Ii zFKCW2O4Z?6vy9CZzINipk9>X7+T(-h_@MgNHwnCZ|Dk&&AMM^~0+7yD(o5TD?iK-) zNWHa?e(ok=a%L0e7cr_l900-7o)2=knsOj>E`8dYcG{wrU3sl}1@lnoPK>Qa4NGgG z8!)sb-AthFzFQy_pQ`bNXo_@xTyAYV-{rc)s1|H++lJBJ80M#j(Sq)#n-^#El6qO# z-{l?(qxUv&U#({5%)c$A3S@dE0ghaJcA0>s`9jKaO2!zuhy%Il>pdEdk#Z?*EFHkP zB{ac;Nq^H7Uu?KYuuW5UM{qm%RSmrj8C}V(1 zrOKs$w){=pS|yxb?WW1Kqtr=6`drr5_+<9t1T-%HR)?IQ#HE!P(zEPNvL!n84pYJ} z7ypn68T?oz(MfD=B<1DefL8~8d#_YRiQszsvO1>*;}~lf(g9O*Y?#M*hunNPJxsWj zkMf+{cIjWp%}T}EqJgBcl6p1Uafce4W6@E>NAn~D5)VdReH_9oJv z^S19Em_0GUMN_rYT$OoQdC;`57fwjq|E1mjTl>SXBy!`s%3POMB%dZGgju?8mSN>Y zqua?on{hIb{fJ&mm)b?lL=&4H%F0`!O(Fs7vP)kb2&#TE!_oxCI` zbGiSCxFB;IWVH-SW--9q0JbxFG8wQ0?&-~nI0ieFzJ!AMM zq;4rla{9!2P9EU40KmFohr~BaTd?2r-~&4b^F%ylx4sk&;QIPKAB|?$9U4N56fbD3 z*{5MS7LcODnFmCk-{z8$CumFdR@Xdz#E*g~!}-5hmTWox7J6tIuROyuR>=tGC3&=s zy>^F%`6a7&q>0wdkWBZ8tOy9A;*y^w&K6og2F(rk{+ZqOcAcNoJB{M;JiE$1{V14%q7?=H_khoi0qiGEyE`*ur7yc^R;_Fd* zcqHvPn#42N698A9V+mwWf=YmcmqP5?e}Wf<2jmiMGDLqCGFM+iZxL8+dl2gi&GJ|q zU_V>M7P#jQZi|lUJxJVN;aKt*+~%0oXH3w}!n5XbG0t5Bn7#Qo^xg}wQX`rvvyqC@vUpD{6} z%qgD~BeKj>Rh0`6tF$T1Cs_4ar?1MZh`FUvp>7}ugdeyC`+;-8t?h{3h10Psj{cir zpBG0bl5+)QQE*(fGkQOs|6@C&b;0#+ZdcTgpKgz?Xt3oBM^h+$M|VZjTfY2+A+5W- zD>|uVEq+5q9s0VX6VTMo>yG{_f95^zkKNH>XbF4uMAzcQf3+vt9)H)I-l*Rafy5rM z$h=SZ;NIwf-XfRu$D|lcGwJAiz0qJ6T6wxR8kmr)o(?rPQ}Hbzu5d~`A$owxJUJnn z*m{~0zy-M=KG+3)(Q%Vb`yG9GZBY3NpBGOlEWRKhGICB|w6x{Mmv|hd^6|cC*-mT0 z8Y!6^ZubFG6Bo~o%?qs|)25xXlFxd!AEEt-;%i`C?v(y$>%w*OhRD@SRq?yUz1bhN zjFeD3xov8=eO?}jAak{ejD;`5w4V2SoJ(%2iP2d>Y3+9>MvDTrzypuLdYN4PKv7?E zrDf$&Dzc74lFD0k@gIIB`jIS6VHYaS%pQ9C7(jOfgF6a~lJ+~34q15}lC$kw@f{h7u+iR9korV!+J!s_CWWBsw)<+%VVyTY1@jhEpp^%8u(ny4&OUiG^ z4$}157Ac&sO5J16GHy!JuX}1zT9iX9E~U_9ik@XGTPKTl+mTati}opRLGRzPlUU30 zij>tND?9e$vkD#ok59$YCVnF{q>f zxP*RzQF?T(9am5ZIPjy%68U-*g(JidNwMOT4)=4Key19l;2U8Jvq@5)Nm`M?Iw2WQ z^Bl68ZFFJ1@W-iJ?zj>iGbAjUwPp?bj@|lOiakBPE35(zN;1~Vvbq&hqQL{$TYv$O zwG2dQaa>nq?kSZ96}G=#1~k^=+3bRjZ@|*lWtQ-A9tMq%4|GoJnR1fA8@yp0kL5!|!m$5;KwdQ2$uH~v`ky9%(Y0`)9E9vXG3|^DC z!4JOzld7Q9f^O}L%kuxIn`Zb`SOi!NCoEEhjSfcHLV^$~vPK7P%~Tuxp9B}-RnnI^ zMLOauJ!Jpw0Mj5F;Mf{+O08chfWkK5d8WIUh3-j@QH@j^O6!YE%BGYOz3@8Cf}F(@ zsqF$C!A8tefv8K%DJqb3XeW+AI$Z8!2Nae;<(y;|^E~#80TK2NCB*M6ubCkx|8utR0vB!Z=Hn+Lsa9LV{AFrpH&9MOf z!>abUH*3-4xXUzJ(*LD;b>WHGvK~#E*)7EoUQOLOxYS^}uC!t|^0C1Z{X;esYerW!lPW)qb-TEzQ%^JJ`^QzZ+`wbWa#e+ zI+t)xD-CMSv}h6}lB31)k^vMZ4p{DH5%Io z_)wbn{QTjxz5ZtsT1v}6=|!R3A=hb%O@>tTP>06zVU+=)`GpJ2t67q3lLI7qPvq^eIvU9H32k$U(RIHApb zWGEVLRJD+DE0&a>b2@EgSyrXAZHL^+{_?rHOxY*jE_&@*x}cV=L|hKDuav$)*Q?7M z_AM#Q2gc%AL2W8lIZ;Ipr4vfCo^V^ro;JDdwj}h3-Byj=8V|(mrq&XonrCXg)uhJY zO&v#;9BnC4xB{m~y*ueZCsqYu?L8n#=9fLFiNV0PK?PO@pOe&4->t+|ruUZJmD8iy zT|JoPP<5$}pA#SDlD5!2IX#;CK1@w6#|c$|MB`e3s!xY9IN^e{&%3kF+p|v&ZDanb zxk=Z(An6qFaf(d@2(7`*F(v+P1uRJ$?ywoS4@>TgGor64M5+e@e>ntk?96D{P${AK-tG(sY}}O(kBy7K zmB+uuD0NUGar2o`|3rIa9*^*X@_=sJmfNHOZE&-Pqr-P8$=Ae{%R!VcR_g52IUY#g zDDAVTnTUy*OH8ML=k$l!iMgQV&{E)jbdL;2@5XK(ofS>n6T|@^-kP}tQR_l}JC}Blm7)C`tNy7@C+0_vO&3OYC%^kI$& zjRXx5l&N48OW_gzgO=1ul2tBVJY+k)G_E=|m7xmIyafSxYem&g^q{Za)5HAQk{-NB zbj*8+l}}tod-L<(4%CHkhl&oq08xuPNMf8^9_F%HMWr$4o}eR>&xX$|O}FDx%Z|b6 zf~sa#*3|5tJAKQj*02JBa7~RZ)d2=$1tcWJQN6T@g5=QndlkHjsE@ewcF6T=*(;I@ zR+>)$A8gARz^4HLe#U&T-aF)0n@_2fOoK8NrWXTR%?dnvDtkFmt1SUeyx1;#H}9*H zv6sC^O|R9aS&KM_jL9a_G!sUuSW#W7QY#8yKe`mEqL`Pse(a^TDhu(89b&@ERe^s9 zLe<8i)^z<$sFeyTxPL9c-C3;-CR4Q3J$n8mPM@>jY@d5zB-+1dMOFJ;Z8VyMKD&4{ znm-jC3(dm_$y1QlQt@v@1ZJpnqtOmQpL=vPTG&lV_ohD>UGSHCek+H#B)P38SyPSitKaKfDE(_44h zT=ce0lP?*N$d&77y4}sTSR-z#y@%&SGxjyYCGKU4rl)K9#n-3+StgA%xz=e z0TU?1f90GI02GY1bkVlaZ>AkAdW+)6RlJpll~Rte9#ofO{cEjZYR=7%CNEV}k^zjt z+9_yzf#gNAptlTqh08$s!f1}NnW_P^F1LalZGLF$QuU8p&cQRVi(9vMG|%!XTsTGit36EQSddjZS7nh19#~G)m4P zs}{XvphobAt0VxK5{wwg%$tZe5PBoEA$<(+u*m!Ab~j(-!SAsckP0xz6&;&y?_?# zN1hF=SF&|cVjsKvj|J$K_$24?0jA951L-o7^tz7iquSoKzDX=2VpNsr*vTTH6W>>o z??5ByO-GhV;&8koGS-hnBd>!#a4YdXX%D1ByH9N&O=z@B2%6SC(c~8aPzeK6a#9It zPfgXPK+Sc6Mq5k0Zre@C@)a6H7uKF-ZqC(>77;k%1jam3KGIxz>pw`R2498ea09Jb zHgkVXyE)^pW) zXnJ&o@U)mE90ujK>h9kmn%)=|N2+gyf(T0Ky{+QQE0k0X_F7q+2)~M!5R3`a>eAY5 zUc>8?&;BKogv%|AZ6f@tZHevuW*LT*PAWb)HUx1usLy=pB#mNHBbl|w4u~`e0}YM8 zFN~SVpux`iEDx}Fw`78~K8BlP>A4n&xtuzeD|ZYoHNyk3Vb_ zv-&(yvy;#Yh2@4D`MD^rEULEi_9t_#A21`C3cJJofl{j-5fx8bRp2&D=%gu0aMm^V z{=|T|l3we5wijAtsEOziitT}yN#6hk*E85Pl3JQawlSs-@kBwE&1y8(?LN6Mn%o#n z6eY%WY0h+(g<6O4=a^cRH8J`qKpZ^MQkyNwX^cv^HV6*aW(!YQRjfI+f)T^8#r|+W zmf}~7xbjSKMMN=Bn3OHgNL_qDl-lz4^i_FLpm?%wkwB=peg*5KY1y8Gxk|sH@PHKW_E&E1)hc1!vQprtQ+Pd8DwM{~1bGeG@h?cHbdj9?_4 z@|hg+D#Ar%1M{B9e(P0U8DKRDDak#A6RY8|uoC~N>{&Sx8S+Goi_;eF*Z78A0JJS< z)dyfwG)K^ne{2<1Ck9&Y=z~ecs|i%4k_HrE#s_kO5{TUTLt6&iwp&HrjZLHN?Cta35>N|X7uwTH$K?azRA^q#8U8blW)?12Sa(D_^2+onJe|*4yLf#Xl9HbjiBH$ z5U?(k-(?yZS@}gt;(oU%n%%jDm_|9h7Z#svA&6dl;px43WbjUDG)X3qdv^+Zr~;JQ zmcF5Gt&(uq6{{lkgK*UMkmn^qpkp9Rrm> z=t)nCe}jt{gN+9$w~Nx15z+*fPeVZO!IveeG3UX)0un6ycbWU9M;F)l7P?v(4(6=vX_Wcp|h z5w(K;rq3cnZriU90Mx2K3S&&%*i87oD`#AsTRcu6vE zaqgWK86v%0`42OeFB{F}*pG%C3B*dH?t{BTai>yw_#3CyoViQ1O`~E2)#H^D^`>Rk zaw5y;CYfZ!JEQ;uh#@k;_RI@(3=0;&rFc>~*%FkMi0Cmb$1W2O@|R%@k30&qT8OX{?1msnNt(FKmGg+O@Vk!|cpJurftag5BGAJWyx+tET zT3`%6cFBRHLXAnuHl9CsCff)oR+j(^x_Qwcg&|GS1ReMmyGXwI{;pBIF#}Nc;uqq- zL3y3v4Z=3Fa8BoBSVsf777^K@Eld1 z2YkM+rr8Z@TYSV;V7IZSd68EWm3@7}II+MxBNWIM<$B)IvIewT(1rA*iq0ZvL zv6h#LLD$W(#7VRu*c8~C7eDOX5T$O-1!LpolmleM@U)&%lF)R3I;&rVlrC8k)r#!0 zUV`WNdrP8eB)8%?RN68E#oP*AtWYtXssc}BRh|fuA@zb4)C1DgtFC=%G^wq=QuvCw z#sc)YZI?#%9i_?TQ!?IYFpR%m;Q$@Z^cWVAc8OKQhFrC}4P=tJ%dog)DpcKBOQSiB zc4@`*+MZ52o-)!TN4E6Ip^agS*71nYZ1!HB&EJl@f1kDIb*v|w4*42|^pW-8XIANI@?ol#tZ9blkj zyvEIpUlr3b4e5n>B}gC0tE)C zf|~WOZEt}qyu4;F#F~Fz+gSuz7i9UwKx3TBkKlYA>+BwHtei{OgH3Wd0vkzjTC-c&zPX#Ed6=sbiOsbV!{w;5f}g^dGp4<)ypCWkc}&I`-*8YC1UB-7 z8g|-*JO`#<(e5hz0U)ggV*vmZ9AN3gSLQfC6YY}GM9r@`n6gcamUm#M*s)`6q4bh$ zFKduu%?1*E3`@7C=^-mJGFyp<^30&F>w`#JqTDDxct&ZdA$~RaS8@!Z-FTr$lhHP6~5!4IdnrGlwp+$T?XbH$NG|T--=ImG0TBYRVuE4C6RDtpu{zcd1JAjy?iY1&1f40meQFkcioSBDdDZ2> zq=G{g4V$CZ1S-2R!rnHoEr-&GDe29dNGF-Cq#YDcHlPVkN|Pf(`%42P8dRJj5tCT@ zr=2C$fyRjovSV-QnUIQfNw8)!%L|h78mfW$e6Z6*va#Y&+>6uQJT&@Eb)9taGqZYJ z$5AB;yHzu71honepOno?L7b;z1{W!ba7W8cYH}X#QTL4P9GmzFF%C3zvIKz&uqA3{ zkYRT9ibowZ4YqG+40;yPt}KcCvKt!~5)^iK$N(YL$iu6HEMFq4~uFf<+ zNXa;#&XZ^z(-Hd@=MJTnA{OSRi^?w!(WIWo$gm-q^3$cQF3=wl?$!q3<9`|KGm;7D zSek@Z3)Q#NRNqjVuTIb4wrRdODtMp+U{Y&YI<=J2TgbRlx{ww%O8=BgGr=$KWs983 zQcksN;i^hQc1lRJR8rP2kpN+0+p`G1c6sF;CrtJK-X{5%jD{7Z$)PMX!g`Rt=qb}~ zpunN7XBuR~x<`d%R_dP7+Y4bj8{X}ovaAqIPGSkJ*=$Q_tJx!^#2sxlFk`HfK^CV= zfD)MW9#HWw0(Gr^ByUqs;wHb7v$CloL;#oIGPg(|^OZYQ{=a>2QIoMWV8V=JuAbLk|jca_XGQs`*fat)X(cG8rBPJ?S zU5N^Cl-2j)hr`#FOJBa1ihC8dQJ-*NbZC0lnPE!xIxBA8$_U7H)~<}^Wz~#eZ(4e( z--wQGt+Zdci%KOGVsMHz;79m)=x3*Bc9jkcV`)YzP+ z07XHf5J67rZ}qg*!4~e3L!;DPa7#H5)SO7jd5s?x~sNtEu zEBe?zMbbM-^91ZTvappDh$1^#I{?6dR$p9$eVE()N3rDat0*o$#1Yv@*7&xZ7si{C7o~i4G8}^^YfSM#^t0j1o3Zit*LPq zf($BJwT@Tof$jVo?jP@t21>(8O-&~*IgD&|+_#9d_z_FE2grQ$E+3kjtMW&n5&)^A zlOMu6I z5Grrc>3#7A*-!p5&yKqaFCY^?VoDl{h>wKw`T4!20I5wSLBhtzCZTWY5TLhtEss~x zI(A2s(GE7#Kt^-y^=CVk9_56qfsS&S9u8JA`~AhPU?sTenome~ z+~0--wb^L=7^mF4mytqb-uecLe2F(a<-_~ zW{U3R_e8z3m9LYYc~2o;RR+;%nSsJ{RI^GmmyDDifIbgb?{V9_H=5Q-=s|H?_Go#j zAG!~{H+n~dJ>4sm{%$AZ!T5C-Xhe{`Hu>-s^$s0wRlrk&NlmFHCc7QLoB!v22Do++TrEp#aU+SvU_Jw$x{(PvR>_4%SNUOaDbk3_%WL_HD~^sY22Ls=orc z#H4$yNO+r1sf87f2)P&wUr80t!=5=q2x_`dQN*138qz%q-AM0@AG3UAlC|HSCaBWQ z=P@qqaduCN*T5qpol;$=lC{+y*YA6S6~<1RErJe@6a3OCPH=E(A%eY{fp2Q~I(e6` zV4&DG=MyO-u3%i8^ww7JCbmvtYU-427wJpZN9$G!dFc1}KA{)nH+{0uioRw-Iif*W z+slVX+wR;U$4ev?Nl|Y2IvXjx&4KBG%^@iY@uh#igInT@gzK3Ap*{_u%<(GGD3y>e zIwG18w7c&d5lx<=pnD*)BSqQ#O{gEVE%O5cbbmR5)xxO=(o@Nk8+9maSE>_$*{kxP z0GIn&Larv#X|Vk$6$T_&n1wv1N%0{>!3bneM_WZ3gG3j+)uK>!Kihf1MvhC%$J-Uo z%D$GiE3C@CHo)W8VEGao7$tSwVBT2d;NzZRtJ=vttF z^-czh#{rFu$P|gQ%HT#k3)Y&HSyi0sO}kdpnZ>lyYz>JW_y_@`7OP=&^{-fIAcUyD z70xQDf>w3QgAzz2Vvz(|Sj1&;Lf!~Sp8AM9!CjTcMA*l_p!!)G%OwxKogYb(uo>=* zmVtUSV{8TCm%Hr!(H4`lED(`_Nw@_4fvH%gW}Exv`|*abMQ9=Fz&bQH0^dl)Qv9Sn zyATbLf!b}PsuzkSiAV_@>@F>A$O!qvaDnGQkpd2sT*H^H>4^B*$p#YuA?aIauPIV% zO?879b)V8+u`p;Yt_mnx<`L?iUig8iAHCMUk4nqsrpxu>JQyM@l7Ai+@>W3>G3GOM&6TmlIss784Amd4nSJ2;3?n0f+U34^Ab z(**p5-kQ^?4Nx!(kO5`0$C$uETw{GGP)}(Dw7d!J5TzxdolLoM`ZmOmhG4$5P)d72 zlR&~TiGTinY!bqFKM65^xQj~GwMjvzrUNagQio{SFhxG5K=trILcxEo>=lN9btAw^ zl#)7`E%8FUK&XcHG%YAGSq%Xbt)@_X6dkw%e8>w<5sn2Y19?PBXsEW{EyUlGnlYj? z>^%K}x;U1Fy3jNL+R0{ zP&AkD4F0Qxx@}~x3)h)ywy_#*Q`_*zh`=Zp#5bhsAc=)O_?{h@BHcS3QHLg${01mg z1Ft9Atka+8P{6LtGe^@8C9Pu-gei(V31PIjy^bPil_{3A9zRW>lu`+KrfAgjBo9d+ zeN3Mm_WV;m)y;bS=JQ$ow)f}fU(mJnQc=~??|k_Ca%E+y%{BS>K$sr8zRjFqI_##} zKRqQ};r?+{^mghc?Dyg5+(p_*_>Ab#6zD{@R$%j?1i^Dy2?>i+w3R4IHb`ExUKz)m zR}0<1GJ-VJm1hPhkF3R$-~qt(IHg1csWy^m=de=Tf4qdA5XEnxt%>|4XecWuM^Bl1 zS=ta&8nk_qj7Ce6evImw?CKKsn9hRgq6AX#q%CQAM|~(=ooOdFSY|5;Xh}hQCr7|U zI(3Bbjl6?7Ao8%zG@D%7!?4+Kil-|a&Ee&goNaeK%cG^!lszPG4o@TMAd&c2P^FHL zV68U>G)*q(@@Q^s;&BKrSB!s+lGX0MzdYKK+C{%x9*yn^+=SrF6qf=R$S7*lc^Ach zu5Hfp1fU@STfrA9(1r}Qg~6`Db=zt=hxU#-I+`3#KfN~Hoqcpvk0$fbWVhz%sCSFW zpH3z(-uYbv$@J6w6enK`^0Q_fjisgpXY^&D>RviJ+Vx$NDTQ8}>^;pucm&glk6|2E zd}PMfpnz-euNQzzy+aaNIK?TXWhPKa%cReUEZ`_+vhcOtoq0?&?U;71a2}PFh#Tfv zUm0feIZAB9k~BvF@txNoB+kp&2*xuwaU%Ih)Zc5G z)MM~1X%qmQ&bamVk3_w1L#uvP%atF6kl`b^vh)zdg8zZ%Oyz)GHI>XZ<3M%`;rEq~ zL^F11H>AM}VPAC8Rh!*6yC0oRDxWQ6F$M8#4Z%gmQFMi4E!}vhW22${`;g~)u7}YO z@Y$WA0B}?|OSho%2BXQ+E%39Y?67D8NAxm`?_^B02f?TR6f3{>w!;)W2RVG%wN;2d+VKAgAO2 z%9hB&3^rD6*F;On_E3~$rPllR=mH`2+ZkA0E86J~4Ha2tZQs-YcR*t3FR_ z5$|`oH7la6`fT7-D)s|J5Gdn<)p?Bu%j@rnmU8Kdd)(xe(fr9aDa0*9(c@A=!t|ND z?V0D?aVycf-|~oAqeIA_oIJE8cl}CWWy3s-AuuPrg1|?i2)nwlIe1@t$7W)1JZv)n zE*u+!3{RPzrVZ*`1PFF^ke73uSSj^%X9p<0c5Qc{091Bt1bN9Z+v!Saj5%3B@dUTj z-z7=Ou|V#a6F@6KpnW7ax`_wL;Qgs^ig)MAnrjfCA6$ms!G)1@V-8}>T)$fBu$MnF@B(_a@$$F-{XXVo}%m--ZkXFTR52b~e7=`8aNzyi5{@LJ<7GW zw+HQ59bAgjCvr>L+8Gw;)E~cqAZVAC!mmRx(6CCyCOidTDkm(!b9YBekOLsxl9had zocj3$A1ha~)J#>FCJU7IyVA!gCNZunJVR=HFt)zhQtDIDUtW}P@CniOCGHuexyw(8 zcIh+;tV`_Z6U$ucUY=6vnIp!Pg*_yFI6w)RUdF?Sfs2tXel6p{4+5dG@Wg1SLCJ-M z)TSJf15Pu_p`{k&b`Zz29oh#22#}PuQh?HQo?8K}6s7S#Igz(54nezdi&FvxHB>}o zmG!|v?~}uhgUXeCrmtmv?PMG!VYm9&nDu4))lQr1SJLmt>r^AAQ!!Me zA$V&ocDmg@Mgf7MYkZ8H>f&e)r;oyYC?@Z)Z)g!kakOH3{u|9AQ$Y=`12=^(h*6d; zFQ}Ma-mMgDyu#cim_c44EXE{elyPHm9c;55a&#{bjkNebqWDS)YG+O@;@K0~>p$hB zXy<+tOY+vCfWgC&EuaC9xf4!`W>*;$oKk|X=x#bGnpEUMjA(oKq-d80-xcm{lFkS^ zyXREg=t1bhcqr3GX9T)7CGZ!mYP;|X7$u`QLdyb$HdUIcFE+s8FIG7P&1yS12)D^; zMd?Y3vx8w3{pO*e2A^6XtPyVFgMry%^#cy##9_uz{mPHnXiDVI8484m@#o}6>p&L_ z6kjn#lVFXN))=?UPH2px-_=M*^;MA`>MGx-FRxKm{yD2 zpeOMG2^`M{Z0a}&DVJVk&I#?XeL__bJr{rup>%-E>L9OJ^pbn>zsY`7zZrUBW}@ee z=0f~wVzi;`AmYSJN#WnbW91R05e!!eRaVC2kg*z?Rfn1BWCAXSmCeCc@-Op0K9Pj| z&{8k?FTqGfRQT9kWUS6m&xS~YiB5i?O~h0hSkzD-9%VIbkdBJYBmqwM6#QVJ=G4paD^g+MeufZ9 z-4s-5vM?CiecKxUMfM`=Z4gn}5n0>3L?SbI?uBCZb<{r7*CHi2aH}!Ga##vuVG)4S zd0#XQ1UU@KOHR7ke>6Ajop!7T)~MkNQ3@|YWuk*WfRS+*;#V0=CPn$(N#Ig>oP1>= zWLU8P-NZS6p*%)-!mB5faV>lhn#a$UiJMo^AoUX%%n9<`>W4;dEY)Vv2tZ%Reg@2W zJYo{PCK137DPz3^7wR0HJrhMtkj^lKpe*9h(4^{J=)EZcw+Z$xM{UOq5)pW~Vs#OK z9nETOl-(m+a24_B0dg~O$s%;gOj?-?W~((tMAWWL8UXUx_HpwEK$I08W{766C9?4aFFBI6t~&^^Oy2~$u5+(MR&=ePQ9 zP|$;8c-LeghI$}&oJ;|$YSWB@40cH}r6F~S#TNqXIZz*7Qg79~P%$_O>edH?^uot6 zZ$+3?YK(M+m7kwK+z3S^|2p{!Euf2SO4mYa6F@ds;K)SlWu{QJJOvI9G=WXo*=({i zv)S%l?_lc&m-!e!Vc!oNBW)0Q_8d|B1jfOt4x=VNLCJq~EZiYDtOWeGI#djPJ}IG^ zKEr~-O>^e?SFZ#%)ajJ49|fy^^y(JBLE&Pfg%HP zAjZBmk}Kdi0uy(FO6q|T2tk2t&j7%iT5&4Bo-~?zp5#D4R(|^=NUG=j|BzUq!O4}3|VLq#mp=-7_u1zuV^eSEjP4^UpJn~qL1Rl zE2h^4OL$;Su!Ll7ak6B>viN_;{AmqXmoL`QpY$93K`PimRdiqF)q;DT*@z$D;FE1C zkDRBDY(*5E~!`j3_#&Z(`DbZ(2B7nU7Lf~0ZF1{WGe#&rG zPKQLOP^}k)ng-ja5i=Wm)glncfHvJDRHCcm#8bq1tH}&oKF^D+`{p3YdbTtN4Wl7$ z?^|s$#2;dKn*LB_Qg~-Ii(Wr-Z5hgDGxijm85Ykdsj@1-5JVkg??TdXauyP{=tDa8 za$Z%ASqcZm~oTOkRDpJ^dsLO1nv4=!) z&4<`l3c})^rO^U^AcHKAhwM13UUWecZM_v>XtFoa;$>_S2V+Wgm5dP%CWBnkEQG6d z3Rx_xCsyg81>EY-uFRO9zZ*s|?h54)~GPNy+^9L|%U8s$CL%cO@*r+$NWHD=G^R;@-0BoCQ zE%Ie|DR@>Ol2x+Qnk3rO9E!Ak2<(NZc!D3md@>y}dzV_?MXOg#X~fF-UWWTIMSKR!{QwnzR#j|eS>*bbxJ4dVu&i**~ygx!)}+a%0g zuxb$U5s7A4ZXe`$6r*R|7KQ(?(~weebkeq5?_c>{!+_F zOD5Pd_S%Rh#;dfuz$VBsCjv5eJ!lI?X{V5lsHO0;)>ng(wE_8Aj1H!V^Ufffy}JX_ zwi^*uh)-3ni&hH!VYSqp{~e4q?`IP2=NE`~;JBtU=rxiLH+yZY83`mC*y9>Ab12~T z(dacqS&i<$&LN`t|L9x^nb~xk9W^g(8sJ;nP|w*rV{;e-QEohlxX74xK#Oyat zG5%rilM|OvvRHZ+he1HY*q^W1A~W!#>JsJXi@KqGB9=j0g)i&3Fkv%DY?}CcnsXW> z_kZo)6ja9LL2bt&>&H>PN6A0mjjys5A&OzUvcih)l=GsV#h$qvmqpIVQ6@3zb6mX2 z*$l53(s9#52-%p8`(JZUv5tydl*TCGpZQ~}2C7L$VpUXQFxgBOT=(Wy;MaJ)b1Ip_ z%6e()votovhE?T;(g=D|tAo@cyH+`Sn@m{tt2A(1f!$-#28G?QZn*G5U|zi@f5qlo zC=re6J52nc9xew3WuRcY@{Dq46t}}bQZ!E$;{lmerC{lRnb+xM99yUo!l7wO8pZPu z1VR<6a^X7@L({?{-?{ba2W13O&MO<9X$m}(3AJfO?%Du+|w)V40 z)%4k}w2a?B$mR2LA23`yLoZ7$WW22gW{do3_(n3ak83@|r!GGq?S+jA7HrGHdn@W* zw`gj8KvX_1esV0ADJdg3r*wpr66`Z~sO8!a!bSR3kS1RDwCRX!CKxJqnhBW6Osv79 z03WE|u=3%_1k(}9Y26f5GF&Fm1NJIWcalX=576qY{CGK?HtrFdF=`1}E1G+1^$%^g z7(Z1}$~3T6xpmD!j31+huEx6YXZcDEG$QKJ%MdOU7SUTM4pgZH`hf#YOKYh$IH9?q zjAz-aq=jHa2FsZ-=eClVn(5o5InoeoO-4C@s1^J=ZTg>J6)V<~52G9=NC6WnYn{sJ zrUsRz2=`{kXV@NMYF^sb?n#2+(e#g7&*IESF`#k5Rf$>KGR#6#>W7j>b;8UfpeNyS z@5b;>5gNb;%A>2OG>FUEckJK(jEWC(g`5LzUj?ViI;%sd<8^bPaXBTu99l4v*0y08 zE^Rng{LN?hL8sK5mhY=#X;rpknOW(MIm~%0&|63H`!y(({9_uRZB`S8P)?_(V8as0aMrsOhKYFRDNI^Ydp%j#7ZMRPeIY5he}&n$Dk zDgsb1pmQlbn%tu_zXTIN^q&TMqIu>q&|TZbC^uv(f;hNGZdT51Igb_6Y0Ke8g>B8&)lc22+< zua@%8oKhyiT$(}fkvhob4;NIs{Jb1_|<7ZDf9TjyR&)_0hJp)$;j<6fyf+KC#c$vXU|36PPCX z(Z3SYr0}5S$w}#LC_1&8+!vZ*D=QA>9fKJPYZ}jCYbI+p-aTX42);nD94N+hszNBq zxD1fGQB!S4DNb)~fIVwjVuU3MxdSd$QZk^^lnJuXjAS`%!R7_}W}}Kl9KLCgy~$pY z2Xg_Q$^U99;|B{~AT%qTJLEDdJ=eFZn4}7P5-=VQrG^h$G6dX}fXNw{sEafPrhf}1 zzd*RbwLWwOiCs&MYDnyH{C^V+owJ4G&=VQBBX9B*wLP@ zw%jaWCYrSK$lx9{bJwfQHsQw>98w0Q$?$o#R(G=_GGV(p83)Di~yh3SUjX#TdgI7^ibkWqlBx5eGWI~B1v08CbaTYq`f%b}8m_)HvO z7r;cB`^HO!85dXvG1#T~`z6=>^`hl52n>_2h(;R+HPd%7!qupT2uGr-%)xvZb}j@O zgk|iu8kDfZsZLgKdpd;b=>6#i4S9^nfJUi7ce0>d<|?H6u6TJnoE#U3@eRVo@x2uO zZg&q}5hantyMZHF_%Fc7fIz6*fMUSNW<`a2fUk@oim~Ffbo+cR8rTgTAcK)+W%2s} zPHJ#k6^w(EjvzPE*c?vaCjh$fbI}X|NaT$|2tH)+V7DX?&_zubB3({2ZwwyU^i&Ii zBt%6ZbjlW)Z0&4u1s?FnoC!YowhuvU4l?m+v|NKvxt_tyQjfV-_FyD7i~{4~=#Kw< zH2;0t>vML+l>1a!sEWZsE*6kYrQkqz3TGD!i}H&YSXG!vVt{xNYAy4K;?GpXuVFhP zPCLF44hFsAm*+*-dSx{6-D2NSffiE4q>3Tx5Ns+xOCmC)-Pw*IcFFkPLJ?MmT7h4T zRPjZ44o|RX>QU91L$`_!-WA3V7bP?C!OdfMViQY!(L-uDT+ z+!fDcwlwQEiZN0$czqs;d*w>@Ps5T3)i1ZCV%){3e`jr~GGgvcOGLElt$qh_mKwzw zHs-BYmZ`zo0=5OZX}E_)t)*F}d2*HQX-#sU?0SJb7rd_A zQUms$aa|sSbLkRyL>}{aj*kUEA0Z?lD*MB0`Nmo2rhk4eh|j@?G+9f;if+21`Lu%c z%(l;c>5EaaGyZ8iE=aCn+-lOosi^{I<_x9*R3FIG_G|mweQ0;4jac6A!uX)eu2O}o zF+Qj_RZo1JpldQi`&2Xy4Vo^Ii^@`#G*p(dTG*(YV-&wSFpB@}!*V20WL6YkM8Yy( zGpp%IP8zai8>;&&2^OTker!yJuwUf=Q1%{ha+PJ@|D2gQ_nDoU-96i~o9rezGub4Y zkOqVhNPwJ$5IO-N1Ox#KV1h~l`cNVpB+{g}8wC`xfILB(uqucFK~TCVf&~$kj&wm3 z_bC!qM8;n;;pha0~hIGZ1Y< zM!=K~p6Ek1<;*hHU@7ynhw{+Qqvc%xkRg@)>MLMqrHe;TD)iLN*c2n7ykxlII+A-R zZz*sf8rUL7zcpp?jNpqZFDL*+dFN$=tk$wO>Iim zZBaJNc?|Ax*`!BYGPAGPy^&pAub?uFD8ioYs;PGkROAmA&{Q-?W10A6%m7dl~X21M(9X0!SS4wH%^-rG$;#L^;iV0gmzTaFBw zyBipuS`?gcDfQ-pICXdxTwzBZIX*tEoD6a72gtw(xyTF2;uFZhp-iIje)jV;e#RIm zMf}uy)tu>cxaTfxj>wK;vb+k{L4hSUAV15?N|Dv=zyXs0mL*2%n^~q(;JsP8K^g}` za{7ZU)+fBv4^?SPR};R(Ng?|XGLMAM>{j-sB7Ey@S$N!26m02YcNl(;U=#Bgy=heO z^eh7g0wDG>1=3{=s%yx}ZuRCN?JBWtoy-h5OiO?_TPex;P9#Ou&bWzrLQ7zRI)CmUd7W08X)PXVbge1km`}H4 zSL0otTS2Pza|RSF*T6Ug5$pE(>(fKy(s9q(wr$w3%qgeRwfow?_wUuKXHB zVnuH{cnyEbrey=$V&1;I3C@IhsRK>HW+iJ9&+!(#9LIWkCF`nMr%UCi)k2XW%0Kc= zGNtC|Cm-t{F()3%tCr@^XGj_SwRo)eaw4G-D z2PjuS@!DZ+J`o@S8sqDZVtRER9>v+=A}BDhMo!-kNXTJhq4xw?_-y1&4M+^Tt_?=L zfT)T~ZWbs@5KShGrFXCjM#Us%gbIz7!WH&$b_POrLUl{wT^tkrJsUPgOQFSP72s!v_E?^X5?GXd0f)23rygCZ&v_WCC(nAsR^$^E99B7oINyybiqLxMHG} z#)i_t`m^7veUp_F7V>;TlG!*dT)&+=LcFv+ib8@_1KfC@?Qdu;$Y7hrTql@k1bT9R zFxiH71%m3Rui;zX5noUy3A9|AO}vc(m<#F8ii;Y0!9_Qp1&8z5d<(+29_MERov&>& zMjt;-1}R2gxg}T+Spfb!{4;ljo^62tpD;XzS=34C85vIF7;IQH1~D5BpS756)xRpq z6h2VAnO&ih8{*Q)lkhKbY2t83Tg-WZ>k|>~w>7x9eSi;PVe?lu>7SsjECQ!#XLfo+ zlsQKri*R8NOPR=l1Bwhx~nO!}Hfy zx)p9Js8%q(_milOd~TpLkzsny%#xR{0i(w95=~z z4I{&yH_67XiXq0oL83NMY-*ygztD{A2y?vRpSm_|8{{QxO2+rR_&aMyGkgTT-ZdIg z1cc5D_9ukF`~NFX{zJy)sz-YImihV15u2hv!F0ums*THY6Q9DQ2?^ezk?Euaigrr zTui!X&q&lkv;X4_R3)So%Z=g8o!Na=AS5krrXYKn1S?fGOH*RXHYA)?G%fU- z$db|o=hD-^CRw1d=Zpu9=c*gS-U0L=LsS(DB1}9RctPVgo_(s8a+rd`D`8(k6||@d+~n7zi<1Flmr`FM-sOO=bGE1<2 zJn)5ENV~AaZ+c6(gpv=Z-4gzQB3OgN;SZuS?=$H1`R|8E@#yI9huh3M^~OK|kxL!e z0^j^~IaDg?`zJN-Mut#y$Tc_cv!MJUa_Fmk<%{1BZ=t6ve-JJnI=Y|~JeV$ZG_ZKA z0^_i8MIk;4vhCK2jZp3?vs@i4zERdx++#3N?v3m)sZNkzF|Kau#2>) zDu}C#WQQ+TDreKNz1&S|777Cc2CWwXm^iISv{fmooJ>BK%lJ67W%xg*IIDSbsl zG8as3{I(pt*mGK2R$E{n%+_Dx$E|JjWgE3E#*P=W_ck<1sxN!V&-+n$e(-bu;E%#B z3UEI@x;^}Dg_TexHYHW`FW(-%MWN6?{W#n=*u!tNE}R%Xoex>^L)V4%q6{AX$CtaY z{+sK<4|PEH83wXFY3K!q3dVAZk8UiAmx5%!ga1D2{7 z-|bJnBm8u5vVZ-Ka0VQjfO_E0aJ&CW);LG;Ei1wD`Y`+pK{Gcb^2i{CjX z0L5s@&7!7q@%9T#V|vC#de-Zw-4%|H9{+iE4)(r_Zi@bnyTYl#Gs7?46<(-BR44s3 z{3(~6?g_seyfOUtJ>j7No4xQMU8nrn=E5<{7y{`2Gl8!y zY3jWA&|-tuMWp$$XcDOc8uF1kQ#&>^#EtYw{oU)1^N~5E|yoG z$9XnKtvY#6D|>{FM8mQX5>b?)JYchwY!9CdI!`}%<%17aDY#un7al;#i)=JVfY|U= zAF*T+U>h;ehy(EwF+)c@6kb;qpO%1%X?DO*csP8v*2>0dya?k+8gZp^)BMiOc@%wVL7G=2anb!W z;097|4%dQ;xpPz&A{zxqFZ7rE5`QFFdu#dp0w5pgP#_JqJW+TAZ}LLgK#VDoY{4e> znShN&O2oi`BOa_ePC-Bf$go~c31 zI7)V;LUGdFL%>tSuXe#6tsrb9?Gk&)m#0mpyV62lA#2S_R3o|FEZH`10d)u$bZQKt zHeR>lmrM(RW2iQ)I6VjEPW%sk6|Oyytz1^GQh|y)F?^{hpjt>+%k)d>*aYVhRIxG_ z9*KUQp=LIYlCm_4B_a??Mh_`Dvh*t^=?deKGyIOn!bjM!3w|9g4Q}%<{W?5g3NU~| z3a%Ru6||BJrz+&xsS$8xdsqs_U-X}OJRHk;KkM=Epgvo{s!3-h6-z)lmMx-k7c@T+ zj{SJ1sVk*_%vQKzT-7LH(zNJinh~&RD(j8El7bs@7(W{xD<(78LhJ0bX2u+v@Mk|k zwvc%E_9w#q3uM3R`F*%k{u1mPHfM-YAY zli>rr_LnEa1G|>UBO}meDvb=tm^X_4pg)A~7Jj~@A3QhMMwA#%wMC!Jg8rX|(EA*IC4CH}NOh70ztZ<0>OkpQ$mL2`W6V%!GURyr}t zH;{q`ctqoaq7e@ty=DGQpj66m-jFPg3R5YI6+1l*cx!z+{8+`3(5LS}MJea1QLTq%+CuF{+iq3YREj&L#>?1Ord^(VxRDgU9@Ke+~zTZIzU&X}!uwruZ}e9B#Y4hNj&q zEY2=FWfyL0=azCo9lQ^hyZMuc=|fz1;JRQrqM$Od#J>42uxjz}o`1p4%+!u}COoV_ z#IJwknQ*7g6ij40p)IJ+3*3mC@?;@{rOJ%+s~E1b|en5!j? z$&-+`4)w*ObQ4pm6<8H&fIRd(C5#j4W#;3*V`*NQ>_C1&{0KoiYifz%<(TBMbU7~m zg&=@d$FT^y6+c=b;iXL%S30C!{cN66C~0_;B!{m5^p`9XBE-luhW;1xmoGH?!(Iqm zqf1YP9L8t*RWF32S+$E_2#;$_y^YKD|!l4izHf7pxRj{f== z!!bJm37pZrq}2u{;wLIB2YyV`>NqTEjXL>^|DaRF!J(QV@XRkCQfi;>otAv@rEnr; z_NKlReq$UN!GzY}J{B5=sE=K^633`Eg zjVZWKiTYqqPHNIApsCA}OeZwMgY~h?QcU0-22KQ#Fi?u?e)O;5#LcvtSWQGI^CA)= za6&tr;~w(=+N4-U9!HQ=T(5Hen!kqIj5VT%zZLobtpq(uKMF-?jel41$tzY#af?^N zC1rpm({OeSU-SyjWaEn0)+PyTGWbX)?adJESQnE4;N`_v!;ivx?(tfYe_j*TTW}4r)B8s7VXcH*T)O&wV|d;g5Vh>aA60duPLXm2>YHjZ9@`9H!H9rDD+sU(Zwl69FBR<(bI(}F&~$3MfFA8G@{ z@_;1STTf|{eH$-!i50AmU`#lq4b-BB4Vu!mtBatAHYw}d)E`V4M*FY*NpSreNpD^L z;eUqRK*e+a43iy4nWSPJ)BtDB7=#b>Zed=4gqR|NvZSHU(`BZg4AS@3iFS@S@b&mT z-UA2p_+{^fllH4m?yc3N-Cm#8zpU~!omgD5V?C2P9r)WPHF(+#nM*fFdi-{@5%p%3 zlWi@4V=(avYf=bCc)R?~Ne$QTGK{^NQ0l}h3Ycq*Y$ub!kLC1_cAw4^vSlUc z$J1B#>X@V^EG~e=2gH2o_6aeZCN>khg87%Mvh4-<3_=xH1V*_{5>ZAv)QD3)z0+XROQS~`ax_2Lgtc*q;)8+ zoSwVzp0M7Wb}teaQKs6x5vmzME~S=1`BQk2*C?@)r6NlvTYa+(eql0q5oR>7v*L4U zR?iQC!|Je1G!VrxyMBHBK}A>Zv^Ki`wGDr9(H()g z8Y#!Ba$xSAMLfn?C?x<5mB}NdzuxZ0hi<_vbh~hY=!e?m@Pw=gMo%gzdC_?=(cN(? zTwW7dFBF6|+x^9%n>HPf0?}(*3K6U#t4aQRdKm(vtt1JMmXJ=^>Q4U(9R+9lS5}ns~3|_8enUSTibekxkexvsvs0aK!$wCihKfRi*6C z$y)35S4<3@zq#zLqt8!N+}&H_9I^EFRr@n+Hc>WibqSa04d!+TXlQw`|j;Zd!8BM(E#9QWTP4MXO)je2*u*2Lu+U=0P@iG68(eC>Ed5`&P$GCd%kKu>MxHAeBmP|R5 z5(Azlcy(9*E?Z8sE|7Fch-WxzIqBWsx!Sq}{ov~v*?1kT8Gf35;OB}yK(rtP1qA-RL zqb_)p5^FQ8_@qkR!P#&0M6LN<$ee_;5O4X>=eTkHg1Q@x8;<X!P8xT{0&TvB-E)6uh>-^XWuKNI);b;~` zb>n^c?pp)(AbyakFpB`|0nCr}FEG>%DFO@eGufcPbPWRxL(Rv}+FgIj1UHEk8ak+S zTf{ne5{jfeStxapjx*$CToJ8dBX0@?(o0w`^b&6KXzxI5>asB`Ee5n+NJc|p{MAfH zsMIr1x6DmoPwH#{*1_e8E33(QOsH=%Y#Qqnv?nL!I`2Zja{FIKMPzdQgym*Tbl?g6)Bd*+9pPq&ml{Xh_IlOH>UliTD6r?_po zoHWICRMxU(%H)7#<-az?Z4cDhd3bw@8y8&bM@@B8HUfUXGk^CrX%<+6b;$<6qAH0F z;-Ei!s+$;t#mMcEB~U0RspU_mx;c^Va_{0z+);JQWm!m{A*H24pjh?!C@8t?M5vh1 zR>?m+)peH{`z)(YSn@Y*;P)vamqjz(6TwMlvs~z2 zal>Eh*UfTYVzqYL)a}P^eRET{1N-v)rmlp6$iKds`*{BPpZcYnySciazqz|FIMIJ( zwi^>%?2nu6KH{db@9CBP_uOKVXRdYrgW0Z+7W=kvoA!O)43K%9KtLD-nTAK!<-w1T z7B8RnVCG43Qjg{_w#jT&@ju?eeK|Vw0(oaVI(+aPA*nZpkKWQ9 z6rf{&WUjln`H=vF-^joIx~<%Vr4c=b(kb zP{M$l1!<(Dl<-OdJ!?n?EsR!v>elY;p*<>B=11_@i5VUX`*U>3zLTm?^EAv<+*PJ5 z?z{BfK)hGTRiYr#vUku+LlMnLSe?OpS%I}laqVDm%BngJ72MdL`rd=HP8=+)k@Xo1 zxERtP5}(6_{I>Jl#7~&s1-z##9hp=K+!+2-!+9pi|9RXn!WQ%<>s&NlGwLNQunZbw zwv=PW5-7VpOO(Bd|5ZHv^Lg%9!6=!)#V0e|`1%4DstKhzfAco(l;B1`e_MB8&rMb1 z$IXGx)vk@jpD+3kRtH^v-ga)$Cs=U?nu&_PdY^G*t}Md$ zn`H7H&*da^lJf4^&MChh8dj+kz!k}$VX%`2gS|9vVjy9EbatHliEPnA|H5`|VDc@u zSVo?a9%)PSW*^c(PEtkl#7RQG)dIK6=sVdf4j%h1cwlYK8zvXu=`UO0`u#l%THd~Mw|xXp+ zD?O_^!xg&G#oB+F9c|dx72jR3CIDzymd}Q zfDP#JO*^}5OGV{M9luMjzkO$S%!a?V-o>5Jdy9Oi(;?uK-6^XE0$|z>Z5up#oI$AbhwSD$$_YOM8kO z%mT`wJ6EIOKaEPQmhP}pfsP}Orc3A%D^eDio(&S$40N1CotB}j;FX1(??h2bfSSxm ztMhXGpgRl;JzUH?1Xr2NmH}#(f5->#6;{|=I22hULPuzR{bswne&`#+36#cEs0juF zfwG=eghS+Dpz8;m2(mfml0*P8J3+v6`rtp!{{g|Lfh| zqTm)keh)V~_`ct24>y(|zWw%a%P9EaxaQh#NfG|6J>21A5a){&AVeun;$ZqS zn}sk^>|6G9d%`S!WKTD1PHQ^fB8%aGRn#7bYiWr@nqkxl1I9nB3eHE2;8s+fA%dM2zhbddSmGIr-4ayV zTNb`gETFE}H?Hfr%C8HYTZZzIdDvI>a{KVfA$z&4N43VcVV%Zn9LtorCS}-4TK)BV zxv8V*Ue0483xA6C|Q!rz0@6SEI(CR*0zU%I#3-l~Sk`(4x^ zj|hn}nPx$2%-?{DHIj}}5eVq9l3+%V?8q;KEx`;xPE>cjOKt(0psGODI$$Abi#ifo zTNB>2zBpMR5fX~c!~B92kws$Bhg|1j#3I?(G-+Oz*ov)ga`&>VwmDke71Wg2_%^yC ziqRH|g(5)OlFr`fVO_bCFo@{|S+>#jH7IZtE z>>2AOTW~u@w7!)KH7lxD1gQV}gddB-Eq$6av!H$ImQl{QTJ+U@&|`IBc2LP5QR*p4 zmx$Y_^cN51D2V&j0yg#*_AI@i%(OGHxCIgUcx5QpIO?q#0_OJ-+;8L>$bwR2`bSTY zL+Uj%4!aX)rN&Tm)-dR>t~tyg`+#>kvs1vJv(SWQ&<8mU7?vdzB*B5fxs)GPsY$*9 z#BRgGe2eg0*0Pb96MqHDGB?-}OY>uT=}{8vj=)CkpWN4dxSz^^Y5B-&=HL;s1x^2FgA+-OvnKT7Y)5ykF$_&vn8YNQMc`A zQdm9HF$+OV!(PCQEdE1#S8ruTtQT}qUT7ONg+02+))Dfsp(&fm40KMgjWq%{s5^~< zu7gO6iVnai7=ZfB!PV=6lNT2kfQtq9{=@sZF+10^)Bq?8l#4IX$}J+rNtfQf+S^ohTJKeudPyt*slEW+Z3rhrp!u7%VmXI1daAzgrGpZJd~ zb;m?wjS;H*bbmK0sQH(cy3x^CY}o+6kN0+TV@m)Qo1R*=*2P zR)8!>{vz~oH7+Y^vrv#T^i8?TWiyDz(9xVn18{kNMwF$mZBA#M$%NXZ^@vRSm?zIB zymEb%)}k4Ecot_hUW0CpZ!Om`#70`J#+XL?3l4Cj_qH78>yJT&W01iu@X=4JEt%3) zjW)IgPYWsw>Flcx=}$I*bx}HDN@Dx>4{!@nCGGHGcN~cK_7A&-1yXK!cOXH#lN;s) zA~=ZhLxS(+$%hYg3p*xrvdD8NOq|(}uteW!bXh2f0B~i!jtAu`oR$m<=oMe|V5bBZ#m)RtL=qfF<}{#mVC^qRpe8X);m!HcUQ*-#@!swuFJil^)v;R}kRzrxfSB(E z@o-8lB=-bNH=LYFGOn%P$jy`4%zo9ukmL*~{dW#_@x)Q-*`{r1CdUOiCtFxoav2qq zNxGDT_+I^4(f{#a_uQS@c$}Q^gBnoy`;s` z+E;x3Qz)&zKRo|at`d+7b41FQW(#Rod9l(wzk(#csMmk|)9!tL$Y(&W$c~6H1h9#H zqn3x5rb51uS8O}Xxjj^w0{HnXnY{6S(zumYpoHl8oN~w$wfaNOJDP~74Ekbs6An&yEE{^+aB$<$QK@*)Xu*3 z4}aye?vwdxFWrfYyVXapPB1NDpQ0tqHJo5r^fUHb{3nHKW*+Oh+T~+#O*ttnM;c*g zr5sywteZ3-K|@hA>}0VzN&1F@B%nG8Yj|6t4NH%x>c4rc+a)OZSB`Z9TzZak6VTet zKh8~=sXapoAU9s#e#kV+3U8cQ&VteO5}Anog~z$=qH8`7HGkCq<~a8Sm64yH2_vYF z8){(-tVB=9Td+{9UFHcwO&@$Oi0~7x0~XTx%i=$mNxsZaeDJ`Gvn50j8lRQKnX`3n zCmz9Qs>Td&WVI9!f2zPECX{kvK^??eHkPm9ORK=LTrFTa<_{I1|9k&=Ri zu~YI~&&4N^9L88v#z!D7>ZL1Bq$FeHpFGiZ_t6L#gF&YO8;zQGH)V>Do|_rA4I$|O zEkkazC|knFf0ANme0;``8~j+~;~$|AufmxYGIq=E^1mLy@q1+&msHS~J!XeCe*DtN z<6d@CE=B>2Bd1KVnObA8GgrIGec!kwsDX(YE3#XixQfif3HBuYr(e0+Z9xc=jTzWz zSij6?fbA-z<9B7&z$-r+ik>gXAkBme$0#-wG+UIEhJGR`887xPFJFb0c4OrOZOW!h zN3uPVI}ycL;wPO1wrJ)Vt6WUi$u~sggL9RuV^+_l@39$ITRH+Prd#JE#&h`b5=`^) zm7p;6Khh*d=t>zX>i~;}TcG7WrQ8ULJ81_^xsw1Kw>@kAtri-_1k_J$H{AlP8_>Nf z^Uf+{ODfYF_BN_4Xon}!`;%Q(18?!_G^`NH)v0^VzDZiiCr7 z{-rIKBI*3Nld+GzG0d@B6iklH#w^qv!$L59%OxD&nAv>z+XRNH|HB$LZgk^7X0do_ zSzelW;s{7beG%2m%CVm)@0= zniq5wzgZ^eSaKm!B)1kU=YRjq?h|P&w5nhnmU0LEPxfm0B9XX=b*TFHzUXE&SEMW` zrt`$dmHgaO+_=pNxr1pjTMt%a)D(bjn9k8r!+gm@OM8*du}w%hNVIkODQ@Brb0L5P z;P}tE7{)@~B6Ex7dMKn@C`)rO?V!Qz1&((p{Kf)a2&rp)qS=D%nLE&tNQ>Vz)@1jfv34+qu)G}#pwL@ zG8?M@s7}%U=5#k}-~fgJ6da>kk&Js@ zaBh%Y$tTSz0%1O!L)bpgZ+3>;38w6XGr;Me@?Sf{?FnhS;+MtYznuZNjsNFcz^tjG zQJv)D^9apl4RlzkS{pw-eE69_Bg6oeai@Rya#!^ao#js4&n-Er7pqeP1Tt7X+`dDmN3;k=3Ztxa$pokITf z^)J>{Upd!}?&dB%@L7^4n+fPFGo|`1&vl#sr_pr1JrubAuSV1LmQ_v>Wl*j0|0kpA zOZhA^arlLE-JN3Ku07wa+W87hGURUyEQlg~p$!6go9r3+1ptzzhJ}x0p7BZ8V+=Wp zb1cMKh4GIe8nU|( zU-+G(Pwx)LmdpKcym<8!-@4U>j?@V1gf)jzmCBNX4nuX0Kk7nsMCbW0T?oyo`n4Cj z*&VzIOHzvp(5b|VQ&;^P7rHrzATPpYq}Q*bjb8D?S#?Q-W_U>6hPPDy$sz(7sI8#^ z2VFrj)NiXk$$=MbPg)>=3<6CNOo61|sOrzV$n{KwSzvL*&*P9IMN%&P;k)o@oGbQU z;|>v)9=r(4aMizjk=uQC*=C-El_@f2e)|=15xF#4ZU__Q8ab)>JAVwDvewmv%_{f# z6&Je?1vmM-FLrw(`Jel9@LQF)g7i0J`*VLFEHAvoeLlFypL~g%J#eow)f)K4KdV;y zWGvSn1o4lEQ;WZ2o*w+Qum8g(Zu>d+WO;4bB9x(wIQ`p6L3|Gc+`yNcOk);v)^%EZ zFa5IpKl4k!?55O+GR!urzZO`Z>~ppXS3IuQ9`#p#*=|HG)N!w zqkby;Z(Q$=T8Ohf92s63I$)yf$ZvE(sX5tg6yHFCERim`#73E&A!3RU)a;NzE?fQ5 z8{D{MoF0{{tG82>E-&`L7(MA{A()vRp<+pq=}6pDJ0jIHx%j&!bTy5W$4=zZUp$Qg zMA^t-zmBZsjH}7&b~iWyYN_6Um>$$5qdARBmI%;$*|*&2M#I63*j6QW!t3q?ej-U8 z&THaNn*5?0UE0;8S-C;nd9OW%Fqk|kX{2M$889&Xy zX!8x-U_13&-Q?mS`~m~3WUIRgBQXa8D_%%f{0)jylznB8aa?;!y(@`NZd6e=0K=xM zQ~-dLyr;X?)RawuZ{&9;B{VsCl8!G94(-hZ8vBA#L!EJU<7BM1;wEi{%;(w-Hj7>3 z`80g|p1;X$KBuw87U&Rfbd`WA*BF$eRA-Tilkx-Tu~FT)iN!=c!xVydiP=aJ8&j zp7}=U2jf>{`E)p2i4*6~MAO;iBCV!BB zQ=cKN$8|q&^TBK{{lFbuJ1IaBpQkzKBy8Esj^bi@IlG7P#bR48_MiHpd$E_?>KVrf zbsktAKY-^Y0jcnBl~4PlZ*_;_c|se7-r?Wf>V8m+8sdS!Y#lh%JmpS>etz~2_o0Yw zKymVhf9MYP(O{k5>`wQI;K%-wJKY>!r1Z$21F`xO_vC^Ryx6oJFRon|ps->8 z<;R;u3S}t?LsHepf``Bk6)B9-`ru;dr{3i*C&j?MceyR(AO$<213Vnv&22g*Dm1zWitI zm;k6~zt631zxYkS6@n~O4&AJr??^H;#@~J)%E4!R@qV{gaDiWPKYm{O5}oe8K#=+iTzlnv%Z2SmVM!UO5(2i(q(vmZU+<}`xw{hJTC1B0{tUJtrmdT^=$ z=&BY{lpU)aFmgR`92fiiLl3%b6nr@xKLk}Dt?j-@7!!#}zA#1P>>3GqykGsW+hi`P z>AOR5T6wjUg=XcAKX~{}*T`B!K39{5>HrT3CzQ)$m4E(W*FRdApzicFZV>!t9tQrL zut(fZh3{`V4&tzdAG>KK8UtClf-J4L7m1SeWNEB80K^-7J;+bF;MFOiZ#|;aa=}CQ zyP;e?pH5#+uDr0T%a!tZXa95+yZ-f`z|5O@3dt{TDVDmr3LKSu+PPyhO2+hZXp6jw z)oLVz_LiGxlhe~NVuj4w8cw=dh<4xd-N zDIPY{Cg)->vDPEBH0+W~Gbp>k!>rut`7kbr`x)sgj zywlP`MgdK$mc^pg@`VLb?Xk*EQaVDH2F06l6qdV%VS<8~XWSh$84?eW*F^wKv0AA_ zxuoAAmcU*jo`r7}GOEyZO$S3R*)|)%u4AJ$q2ylAuRseue(+bWUL_Hm<^tttZt+L` z%8gUi>JlmvROOORP*`bLs6h!&6W?Wzc5GHwjS(FtGPa;0h>xohZ(y^Y!Dgb(;Dnzu zlLZXoD=Jm2BS0hq7tf5q#R~Nuc|Y5r^c~;v7~U-HWp%f`ZBWd;zJns63n&Ovv1J5S*IDMQ`hlf)mGZfI#WCEi~ z=8ZfRTejg16wWmkm0S_LLH;SrjM>A*7KRghbFaKr7y;bXY8aE1itES*fes?Q zp)-B{JRT>_D~%o()A#?9d1DR9x4a-eFgqkSAjoQZzeZT&W?nLe%_U(jUqKEDG5`HL zuxN1R{E6e;$b3e=BU@j3CfZ9*g}zg@SIu)F$Q*nV58YlS`DNAx)dSN%7#z*|KX$=; z*>Pc>Fi$5Qy@E3%(bLu|Yqu^QE+^#BsYPVv_;;j+izNtSo&(I0rA$DIs__k}-xcY; zKtvwre7vNZd zjI~;s`V^e2<6lFX6Kbaylp>H732~y#;y4g#nDVQ5ol76Wl<6IsWk34(0d)|M#{^Pd zT2@!ID#a)?JGpfpB0|s5bF9|GQJ$DjGZ&(q|h{7z%? z`1LA_#+iI2S?Dy=K8tJv%?4@)*7cm=-q12^Q3iq=p9p)x7t>f)C6WO0(cO^qiq8a4 zP>Ix_R|hi_S1$4ZxqFTz{h=?JlGpeW?XTYpkTTZ;9uDb)eUmLi^moCriOV_&L`DsW)sD^#qTQCp~$*LzLI z7NX_9PQ7F2vsX*j*~sQhRH@zM#I!(A%?I07nw{vwGgwU^!&}N;j<+CKQ@7+##^#)s z9eRv0#+?*c1bmz_K#0F7F^-|JU#AHx@{_UPG|dm|vDD~rfIa*cGzX=;ybO8&DU#Ds z{iwl8X*zsRt&cN4p^%JI`XKgr{ksLtbK}>A!UbxeI1~}_w-LJoG!012jqKcvB+CJv zVB}8NvBJz8vHxN#=H+lUNQ0qe@W0RoC09;d4TiG8HHo*hzkwmA1j&I=G=G>{*D_P% z$~RwG2EwEbghHTSE}g2s_=VY@&$U~^D41x(%wZlH;VwBmK*X5%xuL9Nk%e9Ij!-Ji z!feRFfY?ZI_*JYhBt944OU7ZA054M%Er<>|#wrC83F&pdg?oTWa1Tol6hqa(Hipjl zSejVw|NGu37dGSkKX1-|?hVD)jjO<``2Trt#3XAAH2h@8UTsJjJj+&PfC6aB8$+qg zuC55(<|X}!6Xl&ooP7m=U1Ov9_7)Bh+JjT99!`V21gy z#w@1oY?;+r#BVJhvFyba^}Om;kZ=zZ;L)U;GG!C~n?z}d{}Bs_=dJi@t)xtmIR+E) z$5_AR({73?CFyL?Po_q)KOi64LMD`%?oSF9q53v3YLd7knsk!Ymrfs*v#oXtIMyq` zTjK=+y~qTfK6n+}jo#oHe2XTZN1$T_>e~O|Y1cjUAZa4ARx}XsVGM+j36q!gq7i!o zCgBVKM!*DI$z}~OQJP!RgqRvk>B5=`ff#tXOpk_;0Dwt)(OeC@GQKFS`p^E!bq&!f zdyEv_j2chC`yI=2>;M7i@mRcb=}K$gjK&a}!A|u7(iZd9I3>#5X>(M#4{GcLJeWn& zfCgbx`oY^y4$)AfJ`#Iqz2G>c)F=|qBOLHBNVVR+U&UVNo$6*|#=-W}M^+ zvJs1~rl=SvAY;q2o>?{oH#yw|*mJkesjqYh#?l?bgYmm6z|mMj(_mps^k@9pjamF4 z43o8_j`a!n3mu;L?hcwH-5YMtAj_3T%NSM<8!;eEl&u#ctzaCvN(+V~$UA>_Q60=^i}|Tf@j;_aj4wiFvKY}Do|An3?}^_8$^Rl>@Lky-^%pk^t}7SgvxH#D zw$>pK#d<+Uo>m(a7blWA`G{V0-D}gc z57+6#iwKMi@uk@KLrIt9L|w$3Hb|Evtx}~7niNnQ;yX~t5gdwOP8R`Ed9~!Xc?LTV z!q_uza?ALuBw8XUtblVJ?=O7DO*)LcFMa8=Sd~JycUgR9KmZp!6rh#=r%7j(CFssJ*@u2r!Cg3M{f6_2%}Gga^4?|9^IlJNfrUFOZ-e+$uCUR7&poo&n3ZbYIM zV|@~HVbcG-b$|VHZuAzaRbccUR)W_#PgBV69mLmE){y91OUJ*25*kNFT``?uT#cV| zTW$_Fj^8B~6fmDm7KQXd6;`){0ujss>$)j4nB!c_eBqCHo*)}X6cJN|oC?IbPtkzU z{<7zBe0=T_)82pv8$nUDgT90V^~dL3&vaWwVN}z4aw<67tgEzFq9fY!{IY(ibmg2D z*_aZ)_yt!T5={~D0woqLj)7J|%^b)cd>rzrXeE=!gp0EBJ}eQ!MaEwm*(lUoL_4c$ zV>SjRO%6X80K5S7@S*X*L~@EQCRUq+Od&cD`1Nw>#eKp4RP{Ir#{d_Y`w|B-^35;0 zEuxS{kOlnCFJd`}{Yfu^JVK5eCn7dM(FC5=dCXWOEh(8D0B=q!!N3i~8xXAUKT8m= z)epqJ)g~+sz$oFD$#F{JnYpg?6|%XRXRF#y%DeQ!yP@66v8Xkv^Mv;F{%CdHm#Ovv zc0B$>@fdmNr@w?{u;iD%FT1Xa>JD975vgvy z_^+;ecB9l%3F?3v<(DsJPqP3i-~=dPFNq*cAvp#%u=ak}zq-CAmp*U-$AfN;`m5Ut z-@07PbSS499a@1XJ=SuC z1qpp;nJ1aEw1@2N%v@Xg50-5n=UD4Blr0o5H`VB;-XxK2u0cl~Y|p3#)D+sNRrF2@ z*=a}_*4g?F87j}!A$z3Wz?f>k9@4C|$G=3CO+9vhcK-R47S*_CX*o0u!ur zN)7?vM38S5gvk$o+pDg3lDG{(P>WIr`p|Go3V5Atc{)(^f$&=qVpA^CM|ooiRs^MsNbLD&D#F%RZXQFyXN@)RWc>s*_gGNK)L zYOtZlNP^k<-2UQ5lHyfn?1ZLWrD$Z(kg-`x%z^4hmwW@CRelzff@nxXVK851WV_%w z*MMgLs{y+#8GD6pQ9NX%vARJvW-zxed?CYWVoAX{dr1?0m4pEGQSd!)xUo}Vuo;Bm zK~R9%DsY7W`WTk->#{&ej?Al4&c5M36`boIc*E_=W%QePmY?Hye$ySo<(fC$F$djz zcaSPAIZ%NE$uff=&Y^y%KY1>P)3zjz04Tz4ewU?$W@anrnD*wCsIajFYU!{6Mt<7C`qJqnG~B4Si9Hd&q#7Rn#@H}_U> zy8q1EZrZ5R1B-obxpa{?pW;(y@P{GuPa+I9Og{^5pHq6xe^2k0= z-lHk=x*K469O3v$qd@FRdVkI)Mc2w!T1>wugt%H2F%5tV@!w^B;iht$2AH=p#sH3} zPg~6GSxMfX|4%nlwhdevg|qDbe9#9-+8OvKg~~Vk>(I`v~r%A2~R=gFWy?D z*Vz3aX&&q+s^KT^xvjVCj(^#dbhB&qv2u>mmmB|^5Y_^{5EP&ZDuGO-*rIgg?DyT| z1+20NtkkBO7rYYS!E+YKAs+E+u`Y&RZc&*rmG5;13+a_lBPIDu-*@A8a%mlp1blnq z%hU==(M`CJ4pl;sk{ZklCV~B+D#*KQBo%XTU>i_zR5LoNnUa?%|ACvD5S7p7aKMm{ zH|C8fZf4wt-|Yj}H;BBhe7AB#AydDESF>fIOVz=!g5yVVI?*YmubLS|a)J~V93d`f zr~EY^xG|$y0jQvTi#k_JO#bGiEFv+U0QL_Fj_!!NINOFh2HHdl_Xd-N@_%MqR9nr3|reAoPQ-^9#V8B9# zN|$_Yp0V>um?qMy;N{{+<)hlvCQ9ElvzLvRSe3kHtLe?I=Z#esxo2biq4{XiWKDuz zt$xr>8DQ+dg;UK?)9-A-YReqtznhN+Msc6l#WaWMYu9Ke%*p$ue6(~^&g=w9J}d_> z&6f`kQ|W`|syX{C;j`a?7s*b5{Nq1ch$e1n_6kUQyFN(L2qn*o-8cGX7T+kHMFi~y zR|0Da<)_F?A=-QhHA3ACGMpB8A0Y?WK5BU6I3Yss9Q)X)mQFRiXHtPF3 zR6D~N688vBE!A6$d*m*BNEI>1N@eg{#j7}tyo1$(-Z98DMxcyi3W(twbOjLeEN6m} zyct*)89bn)p%IqJY;l?Ufw}HLalz+jg3r~U`Dz==!VttM z$KXbg5eB6Jj3V&YT%W^}H~yjWKFDaVR4&q5GN3XG$sSs5KQ=>jfG;&|mhu16J&O_3 zf7U~WCN|U@V>R#*%CzSIrj7Dkjq;Ue1+STqk48vr38x;llIkg>@7xWy6|ZT+jg7BH zZiAaNnUQH!vuS|D1Llm(aK;m2{IXN2nW6eh=hzw z*tXNrkILI}qBR1{Gwu*Gm#I6#^vh@~q7iimaA8t?hq+%;4UQUR8yXTUG};3E8sK6A zzSVU{Nhn4mLZBEQG5_!uhBnr<595;Lmpo`hIHU=Om&^zu z#Si$7E?d%{{!A$@U>eN(l!JusWQ<{5@LqAq&Kg++dADFX@_H>{OdQ$ixou@9AgEJS zEa`PA#0dN+#dC)LNY9Hws6hYC>3qO8zv1YvZp!lUahUKg7qTxVqYcDRp26^rEcuo+ zfe>P6;$g{xj0q{&*1tJ@;UU{~bX;GRs~q;VdbSgFKe-&$hUA}U=D(+Ooc{3#y^Tpp z@+#`-Fn#Y9F|GV%Yk^-A5xaFsl+wsDGjzFBMquN#d0=?FPm_4%Le@c1`fXf^%SV}_ zX-{YXRx6Z>6#!G@hZbZFDo6lKR!$2t9fNvtU0?mva3efz4}_d0a4`iasXUX|m7;K+ zX>Ap4#*?giwLMBKPfz9=RAQAyAMkTi#9Y0&Y-X;zjiptmxOC`IF`2N8xitCDSAgs$ z3CmFKgeyy^i%%0%HR+XnfBJ+Xxz_=P0no7J_E9?5p!b zGKNY>9XD9qi&pF?eXlWKm?+}QEMZGzs&k#A^}`e@YkaJt>?NlBpHFQl(rEyjSxW0# zg)>pnRtr&o2#KK?V<;KQIKRjwTJ#>WbdZ?bN~-r7AJyPe*_9S$tiVeOxEC5)ZGkso zdRc#VRGC>ZQ3Lcp^-9qsFQ6aC&_J8M!uc&Kyrmj#XRHrQ%(3gs}0#ITnq<{ zm-ve<(YPrsLdTQ=6|`Emkj(ASoE^>;Ek@Xss;0$n)*AghdK|YV3Q3XvD_WyUPp7p- zlZf%Xt}XfsmtESUg(iku;%%+JB1pd09u1VAq*h|lxYglD+HqnE_82BOYJ4z0FVqoA z1;Na7APF{viPwu3#vJ;+x}vc?oELUf$#)7X!NS^CkYHN!r*uVg3abl||4COgcZe49 zw15XiUP7$?6stv!J+)X!`P{G=2$|OaKT}uhP$IU#o1kZhXoxe-8wxT$&Kw9}L*T+| zd74D+H669BK+Jdy)Afeh)9Lh8wR4qeK1DE0N(^ZcI^3rXbwUIB!+&p7v`z4!e|=PR z5a|#XcSobp;U12VHe|L$@!XI+@!O`Bq_ZsGPfj-?0W^a7$_{*1+>vt%%L)%8r%wA! zG*`IP*o8c6E51Gx6x4c==@eKAJ3i(Rq3?@3vP@bL?StClI#3Jw9CRg4TYv_Zkt2(a zl{7gPN};v4xn)iHv?n^KaC*K`lk*+dBsC~QSRj{Vcw!CF-tQC*1XR_qFA|CQ0v+5295DoU96C?N(E?9z0{$J+1oTR$x@wWG2JA$O(!B^=N!CV&jDW~vV~ zWUs%1oDm}Sf=d#2El59rT0y}&l7MhH$>Mi=^ zOrx;8j>g(JEB3YIgZ^j<3e2Vb(PmgVztkViIM`sxYUCpHHr_QhTpCqiQps^<20;5v zOHH;O(j|H+*@A*sGOnGCsgO z{6xVNHN*${uTJE2p5t$x7|m`06PSw~@^ix2-<}x#Eck}MV^Z|VR&rtq3_Ene#Ok-2 z9Gwze=+{k-w(LR%5K7XC5nGt~B>1L*=+d#M4rEhQT_1_3ib`}AmFRj&vv|iq)ZN?+ zR^qhc#6Sc7cLUL+EorEbI*E4`OWlf+0D1w3iFvN1Gm$=JNl8>8l{JggA7qB1!70)9 z&8V5O`UU`Rt3Q8AbU-h@CcCk8r1am3o?7`2ff#hxi3%&48hxSIy0YHt&zc$?Q*2p@ zA~D<~+G`90qEE4glpqo!5Kmp;KVWNGyIhOp7w8awah`}@LQ+oaA+}WKomV|z&?jqUhJ=% z7IhONbkDTt44T+`dbDNhzrS+H^r*hczul|~>#QHA_)Zxj(8Qk7((VuaderZmW<>vE z$6?Kk=t7;b(X+tjmkjSWEBbH%DBrYcbYSphA8!`@Jot+L?Pk%|`Kw>?-J3_paSQB;bZZf!6<64Gk6xq@_` zYS}&@1!^woUW15@G*ODzl*z--uQI>l%lxV>qf41|&)jIYDNDfzC~s#$^kKVZ8z{t= zW7o|DVJ`E6X_Z&oYX0kUqgj4+kSDqeCAhErI4V0MAftx=I5%1vY^uy$u(CMzaP&#e znk!@p#Srdf6$#SGp6ugvAy8T64NAo(3 zP@-QU97eWmxFlrar?!p;_RDGM$1}|GF0~{L^hvEn>wzT83DTOdLaksanl?bKAu8pM z!QrvfK)hDxc`xrfzM_Sop_`K+fpzcfaqoorPv6JQngZ*!L`sdt{N%d1};~!v$ zUzXmPTMmf&FV2@gxW8w9G>3{S@6V4;AQ{u~+eF)y`V?MRNc#L8+eF(=?wc2&$4Q!G z;TXeWKw@yO)&IuGh5_=l-@dkO)Ik(U%gmtN?3k*vQAk>ht13{M-hvGCGbnRHLYO;5 ze)(fIz)^sg4YR5S86E>E2%Q;iRGBPb;10YdM_x>TD4}d}No50H9W4DX`6by|@Uw%Eu(U*eL zK%$#MCZIzLCBF4RyXllG#>)?>V;k2+G4d(Y}SE;%I(-eHZ9$sZDQ3n?;R+gLC z7()rWevj>=$rB1ED`eD0b3`_%1NBCYBivAdRQ+Y!M-!{?Q23XaMz_^JuzfUow(byJ zFDO9z$aJQx{glE^_2$9gw4|BX(j+|PWPWT}*ok9;@Z=}$5Dkcn#FAmt*o)mDqB2;K zL|4^=Q#tmExSbX{O-F%^Tp78X_rW; z1RvQYn%PXcf(o2&J17>)+`MblPau{u41pDhf9vqu?i%f&kJjuOZK3O}yGApEj^P(~ zjXt6n%3XGk&Wn`kMWLNf?;agMK>Rj)MBgl}zV_+j;JFXx{PTN6Nh?2=_SR7j4C?*? z!##V#z47^0i=#WZ{9|$SYVe)mm-dQA=Lv&!`#=Wo^q1}v9l^umzR|8FWsQQ8@9g*6 zH+na?#_zo(n#HpXxkA3NB-(fA8rUs(fMR-w{M5wK7&2gADqjs)R<^)o9N<_FPg9X$cb>AMbDbXta6jeGdlg z)oLN(U`+awfB&P=r0Eac7gTDncqD5TeYTLNORb1#DG@&3M# zMbpFUzmt!z_V0a+A>F8-c*bO{y!Rq79Uoz{fe>h#M#5&hZZ&Aksp{d2uP?y%^8xV&~)v}YGkEZsvrw^I#`EaL`g?&kM6 zJnC!7o^W3Z`I0~O@TeBtF#MInqtk=2Un>492IlZc?QJYx=ofr4>YT4UhFA-=Yua68 zB=v*MCE-5=ki4M;y3=lQ()zIHy%gn$G2nW$@%h|J`L#Prqpy0;;A#N*d|-GFNLlkwZPGqv&5)7R_tZn^GIlC}I;N z#m`wDtqNZAH!Y8T+panjGM6-@`sGP5{Ou#7n}Why)5iE4=0?5Lun5|ly8Kz6hNM*d zRiBPF=_LwGO4d`VSmRHW&IwnKbTffO#lQUNXlxyMAU@R+v*_0cls~P?F{YZtYXl3> z9Y5_e(Tolnichom^r!+FY9qHm)W4ne&`)_)w3X7Z(R3%Dcdn^dA;3%YCp-W(yWpiN z>DzTl2_| zKcHJQWNIckCJ5Wbv`%;a?G@3)F3wUey+L_T^aV~Uzo9~>-*jcP>pT)C@~JXp$>2;& zXmYnK3~-5)UVL~Heo5KFMZ=4~M946ygGj<(^|!7>*>T22{`V`R?fkf-qvoMX#X-1glr!AtQBOuZ#ZJH%J$x#f88=PJSfQ3lMo2Yhs%&lU5jA<>iuLSyH z98vP;aUbFmkj0vdxDobh4=wh9zvk$uNIDSR)QCzLAtw9o1`mK?9pth4QHauz*n+PvX%lRFdRI8l< zI3#&LvcekQGd~5n^Q6h|bxbsB=*%h@Cg9&f1HR&am^P=Uj-d3f@CEnqe}gahj&Ou0 zNB>3K4KryZ;w6K+{>;_Q<3WN&y<_lda&}G5*HQaXd`{}==7i+I=nAatLJ8r9a}T{T zRQbj+(PjsCrJKa}!k@sd{TwxrFh(&MV>PN#gK6Q=!b=lLUYQyNyKAv<8ju<e zGhdt;RB0ILN@|^s!7B=qaXD9cfBI)pwSy)`I=%I?(PG>O=%=_~5OWXzDWJmleGYW2 z8(Qk5Nz$iJKNpRKAvl=Jkho%y#mT%ag(j1tQK+s0JpqNz3}>)O!Wr4fb>F0e>@irR zM(7{dh_{NU|QY&|6}b$XktuaVxrOS_diuVGivgF@AEyM z2;E(E>(;&Jo_qFl?hW6K26og+pJxNim86bDo?{B6`dXblR-FLk-vXc8YYaiWnagIr7v5x@gH_{9hb@1|`%lQ&NbV+?p%Yt~bm zY1A7~u}wQ`EM%SL!~^;H3y~3O{iO?|dBG}QeOk1A$Ev)hpW;|SqlWeN=E0XD*dA{% z(#Lq}(-bK(r37*4uE_7pfnqK@Pf02Zzz|Pl#W?MTz!L=FdQggYTQaN`jghiE5JH{7 z`UFwM9r4|@15>Hq$Ua+LSV-ST>7V&_rbJ)t98$5&^#_DFVT=F~6%7*I71OeL?aO<#&e7Ut1EO< zpcf}nTZYW4bO~1f8{w!dtgS135Ln-axKh`IKCG@v_;r*Pl_HGq=!njqgolM`@FWH1 zYe9eetcgSafZ*oxT%xU@Sh zD^fy^jUcS6Ql*ys-qh;B;-8$}sU?Oz$z_!S%CJS1D0Rj#SkNUAYzwTkSf8S&=5Wg9Bhu?vbEM38vdUWel7z^7gEjpA>CeLdKa~x%pJg6-$gM2a`c4HepUrZj*RgpCW zQ~#IKqtP6SnnNMLD8td#e1WxoUYj(Tz`kiL0U$OoAZL6G-_KeSjq5-T1Tth&F)q#B zbOe?;L!rD-NQQ#iX*t>NH(_xXDv`>Rp%Q-2xn-->MO`a&#Z-nu3OAUsOS)xresoFW z^no9s&A+%L`XK+O`jP(KrC2bwJ0TzOcs>uh-Zl6-PHv?y5;BT)=z&X_}6M{$9+t)ux(2wdwJ6gH$u z4tkcf**Zd>M8l0$GXk1(Gh3T6E)H8)?sEnYa5Ur$ECYp;Hufu8!e+mazRuYEA9ink4ocJ8A}z` z>tLp?4Q4Q;zIK!b9k77X`q1SO>R65sN|O)J=mwh&SB*3Is=2iZ4qwAoz~^=V0|BK} z#joa!a=#2Es8F}Yd@+ili~m(q)+xa>tJem!;{bAj3i%LTGN{xvv%Vu&8iSXn9&F%j zkl`TG<3)?Ml`jB zkDrjkFE}bJZ)v#*hG4HyvW%4>#M^bu znNhRiN{8zWAkBf~^YRUjfxsDcEvz)`Z^V+EGt$Qg6x9jJxhzE zzfzg@hKB4Ng@ zZTxLzxoS&8v3Lv3j0|97pAe7}y&vPX@8f6jZMfb(8T+BadMg-XoNyhU~-{9prlzGZk^EOxNKcid#m@EpbQzi|{`V(k%q%n&l>nbi;42A?7 zK?87q$*InEce+wnX7$N)zZcgSKL?d+p?Epoi61N0zK}Hr3Z=lCfr#>Qpm7zHmH{G- zOh&ZffbLm3nos&LSMhKw-lMU*-J+R-UW(FyhbbX3miio4c6JUI&|>*(&RWAQ0F>c& zxi2TU3p@>RM;C(AlJdmTT_M8!=z;Hr95PS^-!YCDI;tEY4Df`?Y|4 zwV<7ffwnHN#n0K|Lj@;621hO}j})~Um#yP}BTWEgl$Ox%c@9F(IHOk}i?(+wLPn3h z&G5C|6U@6LvS`n9*cLTVK1K&&{~7v$=6$Az2iD_R;|mU}K4+AQORXp=0{Z)}ap9=40owHQNwEb(>h7fy;FH%En)zEs2P2wl6%X{-BGa@AQrnqG=oxhL)9_yeodo#nI%?vGGMDb-JGv1jue&E~e*E zpgcf5$%SROO6X%9%sv1$?Uh5I!-%k-k47H2LCi*X9113HP}1*H2&N?>70&oA%u*PU zmNp>pRJnqc>uLH<2u%dN$Vg7v8U))v;<4RePNaack$gjcI2T7mW{p@2Y^1U!!v1LZ z$F7F9_cfe&4jV?IC@?`BOY3kXePrh-0C#ShHmU=O4Kzf|O;%s#d#af}LoPG6u{qFy zFA5x-p+O8UFEZYToj|WB3BWeXt3#wf+s}AnycZiU@2^=Ejc=DWAOX=57sQ764k)X|aVAOZ=~2VQhXU{jw~x34?kJ z52la~&ms^2m|t{hbjw6v$I63;gN(Zof5sM$=V;`*_ECVAJcwx$kpK$U7BBZlTo#=l z{LsI9S+o-$<1UYmZoC}W6Q8FvGEjfDzy5Ok5*PSiT+ZHG?ccc^^ZONk`W4YO6IhBQ zEtH@QD_SJgb*xrQxh<@+l`|&g)aaC7aYeM6*rjcM5X}yQr~PTGqi;+!X}pxzhcr7d zvyBhHGd#VBca)eEg;S#Auq?j+kD^`kul824*pUj-sq;e)tBU+DZ?3A^ers-CxzBJd zi8i4&4_l^ZF9w=H;ty+tOaW@``W=Q-|u{VFoI)ru`4tx|nh@q6xmgr3kLG(t^iD>K6k@bE>OAS_Z0_Y2nkmimr9N5k` zH2qw;SE?#YgkW1MtcDlU={^L>%(KLl>SVlS8X)S5&Sr1Wvm#!ys+d6C%YSqgag4ou z)78uEC!c`-iT9o7VY{uEDa>JCz*4_ui5qrT^Q2Vu@Jt zS`fVu|BGrrlpksp(NTRRrM8iZ1F2vU>&mUl+4=Iui5=kf$r~pi0;YKPm*c*S0 zDjJ{#0EAK_9h4-fnf%Kk5$mtT=T`3@~*A1L}vf*YZ1=t{J1rk zEkvKIq%as6uvN6>Rfmb2$15P1G?27c2q^)T8pi7&cSOzgBk=L+I{vp9YN{gD*?|{D zV&jbNVN2*c4;EQx7jR^fi=%MJx)w-JZsxp_e|b%GMnBBsW*4D(EhTHKb_ytzJIJ4M zU37R`Jv52XJmf@u;{YMSs8AXbUs6{B$70A25i_MG|G{-c2h`t-S(qadgtvX;RnRqf zDV)4IzN~Jb5Vpzs?h|jubY>zKTCA=&?}V`NUv@-)QQmB0Ag-l*M;)=~NT-mzQsYeF z*w$iQfByPtaFy*F|Ih2AySjUDnH$;QAH6#iAu#{b52tq#Ju=uj^}LHZf&$OA1wC|-4yLx{4*gRX*ks)Us?~Vl$Jyq zsYFYyRc)qWU`Eu|>Gmu$NSPC4BIQGRUP#S?&x>%*RJQXn2AyjJmq=yqoNSmPrvCWQQt}3 z-6dCE&zzB3Q!9kA>Q8r7EM8me3vX)kUwgW$+JFC+XunytT0tPI^Ai{@tR5BuZ6zOq zZOHn|3T>frxU)rA&2~Q-+S{#3*Udn4@}qwmJ(oKJ-6-bi&TX}kKyY?-AH zpOI;FfIv1Ts>w)RRP9#f++djM%U95&+VsWoux~J4}A!ue_JA``i51dl|&je)N6O6TvLG%l?(z3L1S!AUzx+^i4##;M^>8%5-+q$d1o!5-@kU%@_GOFz z!^0%xZ1960iH>ahM%R&a#&s=`sGMg__$#3$L#`^n{*kC}l?EMec;u1j2Z7G<;0)88 z0tSzNG&(-yD3RA6kLFZCqwuiIegeGN4DIS`ThbjBFb z)d)O&{M2WnzI~Ta$LPyxDOFgqycv)E!XNQWv@4p_kDdW87x<0Oz|r3FzkMc}KHyRE z_;n5$39Nz;9ZN&cC+mIkY&3pGY6Id;(y8Kd)u^ypg{#5VQDLlO`AW+QPQ%{hH)m zASp!+othA&)f~vcQ0HTA$EZO_uRQT~gl5uvp6a~jNSS*nY96fG&9Iz2RXeE{z<5?n=&cF2% zo4m&N+JckqD_f!k;hq2VPi={I9|Q3qKOWr%6_WGHOMF?fAwMby(n)`9z^)+ZG$dzj z*pR#&T^EEeJnG+i1;ToP-~Lz8>uj=jUnTl;+^e?X_J1`xq!DvwE-|K=gh}UPe#5KL z)U@49ZF@+Qw!NRel?|3Xe(~0*+;rVzuoE45TAjRxML$tdfLr|quSMJVzizcKak}s8 zcYKZ19=m=>XjZg4|nJcnWN_8_HqMDnXyF1}o)kVm>wmjA(7ymk|Ge_2F zEc9dz>9Q0+*~0izI(jsHiV)-s%`XXYwkz7uZr*` z60LPV(tR_&7q}`u$%7`D;y(jHBud)6@#G@2ayPAd$t{B7!2}dsZh`s}-j0S%&?I$H z(RS?^+OncTBAnU*=-PG+YqjFUbhuo{+Zgl~``g}*zSexInD3z0fL5}SlPORNNR@cl zkN+cSC5!#Of5bMu(I5Lq%&GJI1%HI3FY@>OG5Xiej~LD49mO+)kVRkk|AK>6xiAa^ zc1j4Le*aI=&^_;>hv~fcw2Z!`XeXQ!HKpAN<-(dS&pjg($@tp2e2juiCBi&J4Uu$^6CgzL^hn2eV}#I>jfXU)rmZC=KKgm#=0f?lbx z=a@XDkkeIQ?6fIKHd*$G3`WCG#5H4vMz|qKX-p$SU5hD);&7jPHyTHIS4mSu<@vY% z91WcWrzw87Tb}1wlBdECQVmXuhGkxGL@|n09+C+^ ztV1K&<*(5;1Scp?GR@ej_9y-|8rhy&R!UTzGuTG)91RU27;YC~Pl^#!Kn6=^?Ik_| z;1C{|e*9)#acStc{1vPHYG401tl(4$WhnV|7PCWvQ?#vJ{}v5Ah-JWnhs(_*O_3Qh zA~E#6rG$LZLYx$lj10PFuFyBNr;zBdP)Hec-694ry+s9+tN#{_?C9R!6GIX7%DOXi zTQ%OL=q|>Md5obKsLH^mVC==+^nebYjpvo~!*dA{ql()(Hz?(_Lsdk#Fddqk{+C;F zn)dkg+<`3+0Gb*|rtB!1f_r~Da1q9_z1h^k7Zo4MT1!OEuPL)S)~{_oVCt8>7ftFd z7H^{0$G2uelYip9sQ(C)8&hOjjLwZ7w8mVtdDYp^UcAEB{yjQ&T!mE|^UUQ{^-R;l zL_1Y(G(_y=pUcvRaQ9#P_h=geh;@!seoX$5BM2W<6GT9s;t6K0Ctkjm-$Vmsoh_1s zHNA12x>DqT*h4`gs({u$kMEVOR<4;|SQwv7J{c^#9$XQ%NOJm%E>~Ofv;Pr|q}aag zLI}O|8s(=Yo1XS(|0CLIUrl*p`o6Vq>3#U0E!oV5aO2-ljFcjmj#Z2R&al6D0gJ*b z)8&RZ(}Ey+-{<{k*v|Kc#eqWJ93|B=fr8CjjQ^NtE&ubackI?v`CcjoFth`C;nPoB z!P^RwDc-FM_mD7CnvfQr(F~0O%XlKe&%~CLRscZS+EM0>Sr<-hw}#PTK%cv|Tq`{4 zu$)vZ?DKS#NQwAflBtMzUQ5gY>2&kfrN<5BEtU|V_Co#$+xf!T;e?D)3&Y?nJrXj4 zPMit3Aj{lJEIAeGSXCre(Gz7srA^By9!mgp3D9kt24ZxJ{r{OP8ew-;I9>ThJ`n zl~4LZ|3z^9BLBd@qG8Pd-qudqm+BUoV1nFq@dwe@f<?FT(V3l z7?YPE#|L>JcZ)q{H160#3@QMAH3Cc~-DF<^#;(m$Tw`LCBAU=cdd_~%$EaqD{IZWx z5*GQjA4koz|5>L_D&2qlagGU;a+wtK=Uo|R_L37W)tHNiWrHr|!i8C@TrM5|MU8IQ z1cr(%t^bbuLW>xcMs){=j7i=ygW)v{_j0VvrMh)!UovJY4|abWBlB}jl-O_ zDsbBdC;49lu5~z)mc3uZ)qJ_4B3)8;Ndoh6zA!9(I_bsE%z{@7HVXQKr}#*Uz&H@ zMiS}X<0$H50ynC^AyNVl8~)w)Det<2$sa=r_xzrjV29I?dCXbR<;jk_KYwfvdiugW#` zLAmJh5R>7?|5UkcI+pb@S{vV~oG-QSO|q*EW^^__y35Z?7MW)>1>Ok;6edy`_ii~Y zRQ7H)Rzxtr3mQx1ch_|7M%G6}Cj*(hA6D%q?8Y|QnZoy<=qmNdW)fM?xgS~Th6AdS z>`L#~#J=^EaDYE%K}~JAIrQhh9rc@zJy%0x9}xH_(;44bP!>_&Fz#X)z{=L3FU`7S z2Z0RY5~Xmowu^k<$Q@**_BVz8#K>)jZE;QHZYF5(Q0FEQdULLGBl)=1xvjxP{^A;U z@YsuqzRn}&@Xzfb>`@N#A}NBOy4cLci+yvgo77kL+Cs!3iA=)9LcGdOsM^qKB^nb2( zqbcdsQgmaI$Ba)gg5g4YGnO-bgOr#J0^6nanOGk`DF&@em(?RV@XYNYcEmG_Zt%nx zk)=doB9K0xTum_o9p%7}FM)f+*ZXIR?x3odb<>Zpb2kMmH~gy3 zbp-f&zS00xuC8aNXm_Xe?kM*bU%la)26u8W_UJBUQ21wpk3t<%=4%QO%swqY82Kc2 zLp$skExLo~0WdAECB8#G$OA~({o(()Q^ON<5nF;PRnk=&m4TO_3wF+VI{8FH#p2P` zH&m);-~Q3qZONZm)l2#FCBOdsnyL2KI-HdeT0HMXMleB3YPmU=U!J#{i?7B@PlHu_loQ zKd;<-?V^R!ywhd_X~zmH!b-tHq%-R1sfIPkMo3OfQ=Xwrf~xUn^>!z5wwtuV2X$Ov zuGEKZm8Y;0edx4Q+zdK}CYO{6J0P(XzHZ<&99}R8aEP)Na+6>? znV<1QVJfUoFq707#*YR>J=vAN1@XTA-o9?kcKf6k3OsIiRz-dTAWctqm4KQGumjBvu_vWY=#n^)8wZ2k;f0^N=}Ns+2eStcJy1D z+zyb%=6>#q-k|&pqWC*I7Zan1m{mH!Kh%#nRsCJ-5K*>L#D=p61C|E|xSc1kSf=iEn~P%eC=tO~O8v*SWVU!(vTX;ty;zxr1Km1!)94o0QoNpI zMi2zk-A2EEi`%aDQe#$a%*!utaWnfaf(nWFYweAk;)n9TYjHc$QE8AHTebQ}qSpru zazhx_af93lJ}w^QjvE2iV+usRG;rWN0#f8!3O<#n2-Kx9gWc3(1?zZ=KX$MiH~IpW zRzx%}cULL>XajyA80aRflQn{0&Hll`?&EC@6@(X(&Dz4BhVd%qAw+=f5(ovWxTId( zltmCDzuf6UGkh1dmH4An)aljZl@Zd8ryZhynpPDXz(uCYANs}CpD7DZzNuw z<7L(214=X#=GjA4Y{>ys=>X+iq5Yx{UGrf3@o7Q7NzIzkrpR#`fVkdPa^p=anuMwu zf&_N+nIlzK5j3$Vf68G$xRq0J)~dOIb)D=;GpVCNa<=n zzSRvb_w3f)kt#r`8dG`PAKmH(Zc96aV1|St3wxIGHZzmhqO$oSF=ZXZ#a#0HKjh?* z_P4hp3H{n{ZFS%2xc9TeAq#Krbh6)^Bf%od)@WS{kpBLO2MKsTORaf;GN+!W_{ zvADg_MFUm}WAPm*o7q1Z5Lj6A7~ryg{cB~{w2da+)ylr{g#1~>?HNs_D?ex$f&xPU zeHcQq_Fk}L ziugod#bTc9$?Yn0Wgb2m?wWS#eiaYO$I-KQo9+MByI(onl}6vAoPT)QMoDX$*Bz#B z9Cyje#PEteIZ>4H?*9H)!`%*FBqGW{mkLes<5<3!CmlRdZ*oI|7@k6wSg_Cd_!Kpr zdh4+F#3#hRG{IDK7H|dM2bc3=E<(EjL>7Y$s<{8%dI6a2;l0td_`N;}AhuELdV& zcp_0?qL8lknjTOjW-w)A@~3FF(5>3!n)`J08KbOCR8`oJDPsAlQ3kC zO%M~DB>q{ZBQ@LiWgR66v26aTHaD)LFi$H(3Mh#)(zA$HFQkBHX7iG|W4H}dApuK2 z<`wlMyuZkN>|1i;e5?ev__pM12KXSih(XMe>}~s^RK0e3=k1q_S_B!yI6E%KOMo@_ zPApXlMt|5SH1k687#8#@O$aw=nv!8c^fbu{LQKiG!V<iw* z@SX5uR{YOTS4l{5315^33|8H$>N89pF23M^P)|v zgX?KEN~y&RG)@NZsc#y{sJf~PFId{gpHFvfkH4dob3j1w=IjM_=CnE&r89kuA8q0| z{?)NmL$>Ef(+wxjwW+ssU^*9f&WGYf%#EFG`CVg`O&cW}mKl8!)naL_gE3uC8hWcT zR+RkUP0M}9B#^Z;#LwQ4LMrd?8s~;|^cXI{VSIZ~8l%Uc`O!TF)Y&L`c$JMI5{ZMt zvCaZ(I!#W)W>a8Oi=VE~u9_8vE`A59#Ug?zXreI5J!jI-08gZJ7XtFu9ZZoET9sK66IGF?aa$eE=TFUMBOsxSMu zjs438#o)i1Jx@~PUK3oej;HGx&?mNSDL$>-U{xHjJWb!%i@Yl5-a0y45CPtD%>GGAY4jH+PX-sI>NO*>9PEPReGhx#H^!gm*nD zXSSyQX_?uL>!<{f_j^xtlRKU}y^z$H1&B9xv8<@VvLI|dITf6ZMG`&;UqSu!V>CNJ zJMKOqACm%myLAL=%Gh!-(=JRC)D3|@HfF3--3agkRXMS^Ow+~l2^DAOC1;-7q5Lu~#jFM& zb;VYG3cpxYC1=5cGdj%|&VU>%n{c{5uunESrQ^kzDI`o8=_jA-JzxLKRrg2F1w_?4 zd|;h#+|IQlM3zIpU^_RwwUir^FLjfi^jnIOrEnpq%=#C$b3+=dlHalmoOVG8(a={- za&7LOdchVAaQjJa49PG@Oma;U*@2>oYD+>S#bHF*p!K9#kPJ|YH(WP;R^Mzz#!bty z6%#%(>ST+G%0+Zv?Xh$>EeGik38NZo9j~73CU%6= zJ3max?O_m(|Fkq6$q6M|z5H0;g~qTu%i)?*c&CAQ;_O%3SKGIcT3Lko|wXh*f-pF+?zMry#8?plm60qdOM8D948hGH9o=lNQ+`9+I z!L<;%^}r5pPRF?gt+f6uH2mF68t*3&7%?$JV7{3&2$*yR} z1IOgsiGa2B*}KR35OD5SOm+P_0BqOj`_paD<>+U>dn^Y9ag#TrqX|w@S*Y={0U0Hd z1l(8rhTfQFwoK8q93;4VnNTcPmu$*?m>`=qX-@%byOlY8a<__)&Fk8*=xyxSI+}{S zbcOv*)7*fT#X*{1lH*N5B|InT%(Ke=^=WR`4ij1Q zTWj4GuFRtg)DhN>Bv`js3rmO(l2hV#AAH!6JH7hxK8$oses!KifSRsLN0JXD)L)CS zNk_=RzdQ5gsvcS{>QvSAH#t0H(^Ka@a6$EHSo5oe`?z=rb+Q)h|WYWNCD7n??rHJpo(`nmD~d?kHfg6eCg zijK?7zeooocJtk_+3s~4W~9h6pl?pcl3te*&8NS-cV{#P3iRI_uDPv zj!vypewQ)@_s?$eRPr{r3!LjSL*=w&2spKlg90hRIwkztXPQ0Ik+$1v?KsAm&20$u zFsdmkz;W3VkJvl^Y^{2!Rqv_!PQgH9{i}sYby9%j)H({zAa!xFQsrhk5uFKos-hLp z8|}=^^vU1d-l2A@?JnhdKue3Bv2NG=B}jh#5v+hZ<1Fl=JO^WH-&G)&ff&5LMEY6=Rjh{$?XpN;tX_n}I94^FQq$ZdI+{aZg*@GO(Fq!#D#hdf1L~#E#4K=hbP{y1$T}6PN9QZ7^He;|aG}&M z9meWUwp?v3C7)_@tgqZm5p=!XL^miTBgh=c=1Z_#8W_jk%JJF}*`zYGeZ$a^xk)9p zF$Kwp_#{t#xPIFns_+(!k%(p!5eo4g1_&@|!Hl3wh85M7@Glep%)}iq(l{OxCuCaY za-^aP6BIrh7v$1|eq(|oXQTf|;->R4ZMypwA6HIyQ}}psx?LQ!n_XPG8~%U?{oT8{ zBR==h*(@)$dNdi_2v2}vhS1P)<)?FmFmr!(Vv+q6A zji}vfzmcpq`(&n@Qk{0?Pnqe4OwPKM0#S*u9*zy5aC;{A<@VgP8q!^z$wl1b^y&v^ zx~0VPVKVcd-_so%J);-U`@?&>9kT1uEO*X`^YRsEv{qa7NJ5r7By|~pj+M@sV|nkK zV8%>pS<*#qM^wMussHA0iPzRHX9>D8swc}s*?Jt`?&HL447TXBuiSE zY$yms(|1gh($H%2Alr^YHh=a$Zph#c6;Hu*DI>G2&qy_3Ocqk@H|^tEI$o@Yx~Zr1 zPpP=SCeDVw+`KyaMx?JDt(rRgq_Tx;6^h#J$^b^A%wUCJPB@L=_ z$PeI;kcQ%1&~ns}tCfV9zrqgiN!~&;WCcv&0D*^*O(FU)Ogyy|bKP ziv>B@*Sbo`08+iiRPgbBuKzZ8hhzYhXUy~u-aov=gyZiuBv!#ei{|`3`{9v$5rMdS zFTo$G7?W)uXaT+(kP0lUM-PNjpaGKBQocMmz>VX;gxXRyC&O%i zfE(JhgoqNeC$)tOIW;D)T~z14eE?Qk7AzDf!IOn$hz?frG88E+)$PYsc{@~rvvDqw z%{5Gze`;qeh|g@06B;voiUvrwiaY@WWTu1GRVLA(9dAfTfq&A^qN(<)ITznQa*<{%n zrda3+SSE&r?Ods%2oRK!7sksPFhVaB%5s@r2%D~z=a}z%&IOl*HUcF)(XN%yOwOQJ z`s7Y^2eahmw7`5X5|f3Qpmm9E*Y>y#=u#S>t}TkO@?fn!yL*q2MGUNZZ4jT0_-Lbz ze}k1?8|pVg>hzt#+;RT%2f6_hmjL|)TNmr7^5*Yr<;dCxA$LeK@c-3_=vw#RgZ18jQr1|aOyVe2^=R`rr=%>~vYs8iXvJQ3Wj$B3MO^ zF}oDussj#oFn(EP1r{LVBk?OlQ;31U zA0&k*uMpfr6X8;iQN4DsD@Q+UkcqM6zk0Rn=SyF7G*zC;j17&4H^#lYHNM(Hl0EsK%7zher{ zT*4V>18DOHfA}G8XUfN|I>ZesK9c3|=i=Y{jfc1cg75iWhq_5$=DOCK9w3ieTPi%H zk&bY|Y%g_PQLU=%brpGqXX8KA7w^h4s}a2cDx#Gj{;dDep>AO7;z0CG`X+^)uQ36W ztOSv*;WMc~8b9Y>KGcm$UPvXLF6zw!TC`U_qi{*lJbMuHt@Z149#2)eWvdk%0wiDb zGY%smvJR?KFF54;wCcBJifn92w7`0)xt2C0#+> zzb0tLrf4bEi%QCUg0f|+1wJzS-NeD+=GY(7H4E_{yk5UftERTV1Qy2;J?8bcM|c8) zIvupIC*n8!p@+M#ltqO|h|+MfbzuA2l%=GgKwRlxJlsvFxt#ayL7UaS*Oy%DP@xce zQBp0ase%dMu8>ECOJQxF|B@RMzE`|(;&FrgWnXf2J88>kQ{oRug$S!)iODG4O<-Y^ z3KTdUF~C~!)9mhrE0*@Z_{(mmjzS%>YK@3rc88w`_qKp`(hoF~V;dk;^omA^ti_+I zS$58ozRlnq8a>b|9xQ$dXAguaU8I$|%Eda=Cxp6vy5GYE9_uhVTu2WUs!6P(L-#<^ z*D`YY(~?@X*<_;p=2;{4qG(R}m^A1hDJ{T3Y%L%ubw#5+;eM1DA-mcxlMiP=%m4E@#tXR(E^<=>2nLuzu50eI1WpYQ8i$NrYtoEb z&+MAa0^Ef3@@26?*bDeSTSxn(JzyM}@9dWB=y2YT z$dEn70&IPTv`BSqOXA0Wl^CF^ed?Q{8f@Js^)>c zq!+GgU`aq%mt1noHUcH@m;c@PLa8cUeW75gh-Ax;=#zbexMbgCwh*$atWCi33rHF~ zldkL&6VYvYtU7(98-=k~%|)!4WuvuC6iHR0U)8(LV5^)wVg$ZBTbJ}6>p{0+{Ll+x zIjQom8|WF9ek=^2rmtWd96#@P9sreXi1~cU#&NM<_5EJITXE&&rYG~?d~KsHnVIR=4| zp|K&}=+Vk_6Y<8H`aI7NRif49tOF4vZGQR=diKnqvj zodo(tD-7}CId1sals9)>ld%B#G@%SZSe%s;xGX(^cgK(V{pYw*y{V`u^^u9D zI$!Z;{^pyj`d_&D?mGYDIf(Vo`bXwqU)tiEk95mCFv5s=d7jOgW)2mc9ra#4&=S&?r_Ao~F=!%URQ zCuc1N{CciOi)CEXV}d$uMUXxt&#~E$=Xxq^hIQMq`|`;(4}SW6T#bK^bgDVX$RU|S z7@tQ*dj1=3_aPEp^KgC>61i%U2uNeA_qLzS`sEjKQB)L-x|H!Ocq zo%8!2QBBp}Z@ES!t5?3|jvQB!f^BoilpiMVpPvfG=_L&@Ir}2jj`*EF<|sEfc+)RG zij=!8{+^?V7l55$+56K`#D%Z8I-fk#L}f2RmoD`!-*!jQXz90Ic_LzaXabmoxEkV> zC45v1dBUWOP%o~fYXo`N1^?W)-A?NInJPbEt{Wcw&hIkUHAl~P8fy73&vm7Kmo>1{ zh10EUJh~VCAnf_Vx$awybO}iblOJ50PpTPs%{*5geZ$W&B?&Rb{6fT@3{4ZsC6_59YbH(iS$Yk-0pJsfvG+^FdD-?ARPy zi{EX&8&NT(etSNys4f1C`EE?_w@ms>#&Tv7cz%2fO@BV$&8}noHl8hdc;L})Ol_ql zzxO-Z?c78Q8;!DfEAV{RuRhw1CEEY-quq{u5Spt*tHW;mHQDau>S{maDChj=j&bE- z_YndD8AdX;T5FiliRZ{JFbj6kMt}M-?#tA}+j@*!(DraBwn$)@j6IB*@@N>zWLy## zGy@~LU2D#tdMuF^t2SJFteX%75Bukib7KbF5^7oWXsa}c)#81oAo-T#-JT8FxvFcI zZeD-<@oxMsX{b&sCNC7HL$rtO5aCjRTwHSZ39BP5a_xe|kcS)Z=)th$6 z?n=ObQobdAhm#=P(0L7kZ&Dhi%{R7s&kjzrjBd4iiV zM+Q2gySgSLcu{E=0fcZXv8iGl1HrSvprRnR42>QyVAz=PKZ5E(j3rgCN|=fzi26GVZtyi zcwk&^jJTZ{>FlP=FM!H+C7i(Qfs>Mzf5m6US+fK+G5}+p*pG@jiG+wZVKvr5#Vqm< z=d2P<=4(%K+t)o;U$k&Agu~zX*(VW_{e0FvgVSqZ4jtli-9SwBp_=#wf6+-;2kw$q z?Em}?SMqP3M6TEt|M!#JxcTdz%*+_ZHu4B=sZjz8i-Lw_WKps&dOr9t&8!i+R!B`1 zCUb;Jqv!6w|C6yoTqENLfA{B~%+9#XZ#>x@l99Th|Ks{+Uw7f_SR;TYHi!T%NJWXR zi`AIfFkzvp7@a)(f835ul`LKgV2GQfNxc54|8Z^oyKcd4$ouNLS$7JX`!YZG6xUf4 zNi{(dI{MxzZunQ(1ooVC+5(8gZx~jX{b4dWBN2bCZz$x#FpvZT%y4(;TSdd|!elmO z$`kc(@!4n~)qW@Y^KY%Kt}P7Dfhda3^uPFyYaNYA4lzy@j6_HS`&&o`$slf*G5N8> zWlZ#gPIVJ>8P=i)jCh>k4?oq79AG36Y1}%J5mczEPW)x3xAq!zZS*7h9>vtOTK0Ysa# zL~7MW=(;CWPR$~szs2wkT&yvB6`0~Ju5`&1|9h8^T$x(^Zx^~&itoA8Tsb(~k2%eK z9x-syX>R}B*q;oTYU7H@%O`i9DKkZq8VBMB`V@6n#{^*Y&BgDT+*Hb_FBq;(_oDB$ zh;;cSe)b}_Z-u zmj6nJ8*tFIq)?hv3N~mgs7N}grN>xI17L`HrXC{`DEz+-O&i=l*5PLL#!ksb0D|47 z(vh8R$jDo+4dNcGCyd_#>n{zmBuB#lZ7Dy$(=~sNrNXYpfJ{i2a>aIF0Ai5{xUkyO zW|^l5Mufl`%6rm9-u%6tuK&=saO;bNh|wM<&4Tl|`5UpO@#6LVU!9=$BHy~$4ewjA zi59X0?qIIJ_J=NZqs`NrTEx0Imv9xbmzuy*wxW^6ulx0j-C%J_BMKV(Frh2P->r+? zuqn`c4Ffu$!I)^F-^mp>qBvSbPeP?+^*T9&3AB-6Og-IwVJ7xl77+XdcMMd}*scb9WvlH*IRaTA%0Yq3QXzbj+WY1(69fV z+qs_-`{WsGPB$hZ1LJ+zpSr}g%)Ua(j=@+{kzt%9q8iYjYmDm;L8XRcS}xCO9i^j_ zX%XjFEZzkJa%QOD#(dFi!Pbm%5fiKMPB+jSJr zZS&S0TqZaU0>w1=qElz|9x&dDzv4IjQkq|<6D?%Z0B8xsNKZSRo+TIq5b&GLnB+Qi zOBd;GZhTHd)}$aBU~RQu4HZ*E#?QJ@h(59q1?4&>k$U}P`hPi`-Yj3dS<<0G+Wz(s z)bMSLBYJgrAL434+A?ku1(ETc!!`YJXSscXYyCZEx$UQ()4&8YDVq;QD5O`Bcs#Oc zRVB^NFi0*)xm2_2N`AyLH>sd`_%AJU!v;|PsiH(MK}qu$H^@%&Z@+38e0Qb)*)n&_ z_F+2(A%vIq4jJkp>IN;Y$Yq*BhNNkJLvhkjgUil#JB90C^e>$4#%_Z#!vM^nWqTba zuWKnR9%73`WDH6C1jhJn&mjtUiQh*b7y56XL$J~kzxEu0U@q)mi(J(=Jw@S<=eS2R zk#f^=H(*dEJ<3)X8iq@Nl)YD~_6N(|y&U;<_qk*`ukbIQ>sAJ5`Qy)XtyPLvBE!mz8jRqKc%up zYV~J((xc|Nu5j@RH)dqdQKCq(JCHpUZAh~oMoPc`3b$jUER*KLW%7LY=dEyGtf=$9 zUE$8Gd_U#_B*(M-l^3{!c1z7D5B4!9h}<<4>H^m3d#jJ9;CG0qZ4F7oqtt(f~7Vti*S!fFp`M^otX3XLNoJZgHAAa8rX-~&Z%?ldIv}tJ` zYHbEv-T^jc4>YhZ1yQ&f7JVjDs)^6?hh2zyGV&)~=yolcy_AiS$Ff|?<5FQTW+&BX zFs1sJE(EQY`@dgEwAFGyXr% z7x=~2Ez^@BH z_H5h*zl#Ub7i>7vyIsQBD9}QwY$iYz3P!?;utFF4=1bjnP3K!U2s}`XBxse?RlLf7^-_1uSK%WTkW(NIMlY00*xYjB zWGLk)fZ*m`6{-LMxM&)MrP;uV)Iz08EKW%XA|gFcpH}|TA9$HtUp_};2Qi`lC?r@a ziaXfY4RL52pW{bd?iK~!Uwt`t(^dYd%PB?S{je+S*8x|!0|tUTJP&yGCYYYj!oF#} z{msv8xa$hn9AJHW_6L|pFWC_N&^;dT^s}qoEhyN_e&hysoQ-LNr-Y{}#8#$wCwkag zix$WDnw1Ux2P{+4V`?sjCkAK0=gTmYh0|*l_)|C-Cu^9NE(FxgtVqCU_&T7Tgyt~5 zB?1yQS6w4T$f5|^I^cB*V+&G|94obzE&|}O>G^b_p;c;sDY&v(@Pd&U)^IaX39(W* zy=Gx-Rnx?)B-N-;0bfJvFOURU*1;f@J4_LbK9s>0m;5nTx>85+=K;%K3QkNuzM#XX zj=fc*m^c-QeVfu+^T+|~~8n6XnkQIGr^;H}nx7@#c zm22+6Nn;mNB}}^q#}E1|{7JQ8gH-34L|3fTWrmZP?9?^qPx%4DbvBCPSS!y6+en|H z2O$yoq1);7!ZrSwtKBH9^sBCB=l#{+&Bwsy2ph##t&};qa>ZJnWhvwL{0CPfzWm(} zxrS0-%l!e@5N@$2yCUiQ3kyj=40BF?%6E_;mn`Rt0xy%>`Lgv-3ZDhhbm1;*{-#|* z&eWw`u_4#9o8s#gQBaTbXfk=eBFWaqPZ2-?4yRWOy*te(<VJG4Y;KPK#dYqGrkl+h)J0rN5UKbl zeuwMb8RRS8bG;kN^nZ1|n=s){@m}$OiIU>;Q1YMRXpC=e&?z2$%h)3g6?B*nm+$a9 z-{1z0N#~7hYP(_(3AOqbE=t}=@0e~1+*n7y_y*Trf|-ziQURE(Q27+Bd@Cf+{L#O5 zgX`ar*956bC?-bj;_yZ{$xpq}?Kmv$)r8;Bo}*nHze3;vtC6>rShMm*7X&}`7p-+G z4!#3od`cw%9PgD9(4cqvGPzuJoI=7{LoJQYI?>5*R?3vP0HR?P1)iS7<_4T}ApqIy$LI$?_N#vEzA(YYDa_bp-}JsZo73DqxwzFX zQpWAgcZCGSt9{E&Zoq)A8*xQ{u^k?y9t*{J`F(GKf1VroAKc{n`;|Ajc*O3>$B&)& z!go%X67J5Z7-oBN!@o~|BjN&RnY?mCK3V^=f9WPSlEb%Gzm5%1YRq-7SNW#(0Cp=^ zEZxEHy58+QW7Qj+TLUS@B%Z9uzH3*%@}{O<;9&uxSAt)dQc@gp3E zY!_egPp+pH&+GoJ^?0IId3UoL6rTQXzs=3A_1mj@)CY(E$n_wbcqhlhh@k|qEAYPT z)=h6l??f4qk4apFJ;{-2Ys%HM(k!ZhhmfqQ?g&cPnN*2rQSKsW$;d+XSdoWTu zzR|yOv)d&&#Si+48#+Prfzk0eGU%E{xf@s-DTY#H^P@t}>?x(+a-8VnkN*iw_eOu! zPu#T6r!MlmxyVals<#HkuRzsO{izCL^QZfl#;yJtBi)147SN>^(S4nta*I2doqFyq zZc_c6Qdkj<*w&BVf10*;86l1Vmaa;jAi+9VEB07)j_g;Egqi~ zNz;qVZee3^F~!_gq`aWG${%&B8xn3R_|9A1z$P-@WUPKaFSeY4a*@CNRyVaT@pEJq zzrcKiFDXEM)opGvcKvC$xv_0G^(qNbLo2Pv!Gtn4lIPegJ{l%Zt&ucN63nUoyxUy4 z<*c(sN>62jLGmREK}eGC;qa%N?4!52!HrKceQ1kKkvjYSAGf&)yRL>qP=$rHN}hiM zT)^VVYS@Y^zE2AzlPP%40w`7jlT>oKC%bX#PlnQDc zca*BwWa)L)Fe4dX(Eqeu1+3Pb*i7qtRb)e1_;G-CE(ze+8Lpa~$8Kasx_zKQUiJJ0 z4@|WxX`lT5svudpjund^$`@l@xp$l7{mO+QW~xZ8v+NqpGx-~<(<{iOtGKiO^6jpL z!vs5TFuJ|;hH8KI?QU>*^?HB(?XEO%!!<#2*3D_}7{vvrw6jOD?vLnAt3D<_n)d3qqE?X$J9lBg2cO}O2KqPzN z9f(Qq`5)ck+WM{|V^ZgBuSJ)YlEs>>^RL|D##F6*r7Awp*WZbRzszrQr`s*K&Yyax z8&vplV|ZaFgGBCx+J_`@h}k4xFlTjZsT$G1<}!wOGGuTgsgA0R1GX0Hw_i zo+_2CmJ~H!5|Zbpe~1^xcmB)`{F=|uam6!4rjbHRJU4U;$38vQ zZb~NZ$#b%KOr5=eT!`OAdl?-lTJ{);c)FL3F2FTzV-;Xk+x$(cneb=vEf|gYJ z=Bz9x03T0}np1^Z|HHfRy+(fBU2dC+r(X{3lf9kuxORm1zPl-JtHr#zGB$O_^KH1I zP7z6c{%*GOhknPq2{T{)CrzXih4fW_+}#9(-+6<$);fR5-EQc3Y_{TVx0~0$(g^`{Xe4vuJ^ya+kLV4J-eU;(e-}MdtBSF`>4X?l1;kMs7=!I>FcSn zpQGW0_qf@^ZnTD5|JR1WM)#%qH>mDSkyiSuiEs9EH)0=o&wp>D+u^Hg?$^7Nzxpcq z74S}6yrB)6%@`1%8ekoopy~tfH+bv`pui%h-R{n=9Q>vIyd=+foKKuI|qTn*WXLE zk)rC%(!3e3C|Iv;Z^x6ZhHP~`c#A!_I(x8BddigE(F*cqcxZmSn&h=1rN#_ERY_E2 ztdu1!MFws#jP7fa4>?-y+TRArvMUvXfVG?m_6qp4EXl@YL2_SHH%x&+;{PfBRfsPD z@CMOBd}|}g+z^|-qS6A3p_-u>+dBF9tvrBvwLvfeopqQO{8Ymx9gbP@t*@O)ZKq#P z3D45%ughw_M(9#YxuBKkR6w_F_Y`Yazp0j;h9`FJknJ8FCG8R@)|Bv+6ox0Jj~~a& z(+6LELHk9?upn5iVC`?b&kg7gofqXq6y?+v1z?1Vq%zd` z!|!(k4!o(+TxGVu8254iG(tIjh@Zj>9_3pIX|ZD*uM zy(i1p_H6pC|I&1j*SZ!YlTm4`6< z*jiqvQ=b~O{*7s%c>}Kd_+d9f^2n_Kw`Wj5L>Q zxva8e;Hv2mO6-i87iwEh2P6gy;;;Kl9>y#X`CA`$JN2$fHd)RBDH1cwNROPX96sXq zCVy|gN8Et=jrRsnUUrxf(vu!>)22uJl9m~2|Iqi>l6!NNBK0I+hd0p(i%?jx>$Q0q7T!VN0pL*QBs1X7K1tzn|%RlYz4TlL9N&%bb^zlacv z4-mN+$8_}xdJVgie{sS>zzcITZ$)@i66)N#TrR+R0k;uBk<*orWM_Kj1TNhCxyua>oH@w%YKje4(Je~>DJ;2ge9(Q9p&cZhhS*=(tSQNMzBZz;D zC0@4LiuoC%d|C!p0q|x5sI$2HT>K(wSXxc30i1zqi#Va>k4*b50Gx`=v)RxCI4~nH z2CIz86T%N3la!6d1g(*Dffgi+!t|-?j4iWVrHaUCvnXT!&L`Yn4G%QRT>iDs(-{Yg z_};(7z`4cm{7W}6nga?J&kp?oN7VMMJxZoFm=>VA@Rx4e8K_DnF}EOIr_(TGzbgsF zg7{`t6sPHqsXbgO6_>aH7`WWbZsR$PkN~2_&2G?_WEo(WA_MhO>%CSb88ft@76J}1<;r!&%P!|ib@G<~)>Cfw zz+TB{crpWI1Cu%e24SVp-l_GEJ>>@VCAL++EHRoOZEeK9{==u-;3_huAoN3?cFi^K z+!!#kke|Cg?fQ2hDD95n2@6hpsX2MYK-^3Q&ToQi z)^axb#Ccqk7gn>Ah+EEQx>Qn2Xjl58285k;<=)dnJArRrxzUe##tq%Bnjj#JxTTf& z#@0T0;FX<+9<43MrQQcwmJVMIU=o91a}9psGj7;04k=SLJ;YJqsEk|89wka*3=p8{ zC12|0?|a6zbu^ax%uUK7VwA$wU)m0!$Rgw~ueX&3q)EEUTvrboK6MuvlA3U0LQH)WIA|novu* zyvAM~m&ymQ0#XK14&ya2OBL3(Q@v~)1V+sSe3|@j?}1rSA961Vk@};ZvwJyD)Lc$W z&n84&NI!OvZR;*onbPKU_!p0HUBKC2ptMm%qKk# zBHwCxz4_J_!-XQ74nXwxOP_PYb{SZzZ|Ql=)2|ySh`^q1OG?-cR34y3EvV9%{?`$w zEwG!!1m6ATIX9`JH|-&v%_UAo5y@mVjHFJ66S0u-8=$d(*2Fe9fw~eh&<}w2!&XE! z0nTm;O8r!Iq-V{M{fUVaioolU{uGM#HW~j_$(u+>zhSEY${?cj1W;N|FLVcjO$qnp zgG(!5H5`{9$(OyrAfZ=#C#!B$<*uAQY5D&!b{=qcRn`8#=k|T?lrzb+WG2a(%K(!w zAprt}5Fj@sBtnGHqze+?Q!{`DV|xZBfq*DQKw#T|@bqs`5(QCFiF6xM)%QRJq<2W6 zOUeKHTl?He(D(kIKlw2C-cxp2d-b*U+Lm^%cc#{_`ByG?=)Bn$4q7a6`u5+X_gZoCH=z*JNb zE%p0X7GO_Rv(!st;0A~KrgK`!`G}t-#1xjl-Piw8-s$+~#Nr~sm%vdL?U47NUTl@O zvH?-~ArTzEN(@<#)sfK?a|8NK|MBxeCsaQMWUF#y{6Y&{e%x+|C*;i=bh3w?C92)> z^)>=1fPr@M_34Z2u@2A+A^)XY#d*jv)y6>fK78b_<&`}sDbg@9%2a_P2A^Y+uf9Bb z6gf@(zW;B;bB1m>?r&wT8huGExP`|IT0qz-K|#DH)$TC z8m;4ezM?ozbPIL*=qQ?;S@m#%FBsuwcj?8iye(q@e7w6=tp&H3!%+(L(#c>Z;(KO( z=T`4m)pTGrKKpQar;c;~tdyp8qbOoV3639sJ*!`S{=?XyG3%(mg%qXpYkrnzp=cZMJSjWqD5j1G<}QDl0k=ITB3xY0S!;_8^$ zpfwqeXw|HPL`K%PKSGf1gO8N^#+lh64^UGt3JpdJte;r^kdW{mf9@kBEZ~LZQhsrK zFIHc^X^fsD0{{WB7FZU^j7p7+6L!KR^w2P*Be=8<`(Vzc! zO1GFdI^S1eZSZ_pv?~4$_xS@Jn9rby*iq|s+oxKr_ahDEl0=!}Y9A>aYE=}ex9C&5 z+OUYU;iVXwh#L=ZyihT*<9R|m!)ZfS*+@@YV+kXn8VOaAFkjRhr&+2^Ia1l>@@aix zIg|p|D3J2LUSq}~8HPWE?kZ5keXVM`&CV9mjz6si>QMc-0Ca7<1CLI@+?6Z%R`wuSK?M&D?&Kk4}YDE!beL!f32Rknx zO>rQTso(RJvo2O*lmrkQw4DzyjrrH_F$#sh-t9m47-xZSbSCJ?|I%<+t748Ok~S3} z5V&hyEb;FjEBCdR>euO2afK%KtBInE{=LVjOJw-GW&Bk3Yasd-bc+Az_k6s({S;G? zXg5qzm>U1d&{RoFTgW5e6UQiD^mw^4=7UU4k5Iau31y5r8QO0jFK^rK>J!Ld zVsf@%UR ziSq8F{tQkq_91gzz)`TWTAn0={F>k4$#UPo{oKZ&m;*Os6CWWL>&eoP%Hrp9bax?D z_m)0cKB)4W@HA$Tzx&DZ_%VyZ%jT+;Q}a>PMa4e;iO)Yp1-|?INl%rxn|x9lZVq-P zAsQK?7D^);7Jk{zAoJn*pFdSTrm#q+n(uzPyj`!3EkRX8+?*alQN4sJ`Sqn%>f;>! zG&z7T`m>&9f9H>~1^@EixgLM})8z?s@g5fN6>@B;O^q5{=qqGFfjw*Fk1Wnb^E1yp z=1?Pfim^4xq^Ki=>EcJe@0s%GUNyyP)F%?cND6%!@RWP4cqDmZ;WOpkCedCvND@@x zkw$a4S+LKoP4hV`V}@~RigQ+n6ho)(l5txYDjG1>?Vc-CHg zp}bo&JQ4+=UCIu_o$?}y$LIS4UnCOplK;eu<#k=R%At^*MVFkKFpIuXNH|s1&wQ!8 z%55O;g&kkwfe4at9vojt%8)vR{AP&)7h@$2a_i z8_Mm`CjWmnly~WQ1Eq2hm=BW0h@(d%VV72z=_|YzUGKX#mXD2&@JlzAx9?lmidrWw zq>iNA3ffAMBUu-JxQe{a)VqyH2e`6DgHqZL*SIQGcX>AobKl^DKmFD}b|G+C0$$HVB z`U+c;ANE(iQtsIH5v3sm`*Ls`P*OoKWti9^VoLJ~iK7=|2B>i9BERX9y6M;Q5(Lty3>Ex$n=NpGb z|7ZLJ0*LW!@?+mBA2+6z|0Fuu?jFM)6s|NKWgY5yjGaYE`ss zB21P<02E*r^61(4Gm$zpfjhI6dk7Am7Q(|CTcsQ*FK94kjYnsN)X(_NmN7?2 z$AEB*9LdLEwK`uiFf23%1D-Ool@e|232zmiC#BW0ifkK>bxB?d)cj>-Ze=wQ_EKr` zN=(v(1u1Y2WdcNnA+eYo8YO-lzz-9S&rh*#q1p&HH3=TJSuhIC!n`v!i-%TjHH-Np z(_m=v1zH>?dgs~U5kSvb7)*%_A*yI

V4R`|Ug0I%|=yQ{MMNfBxI$-j<8P>e`CN z@A(_vhW9<;AAGy~vAv&FRd4uLzpzupZarHrFElGJd;BgOT`@e})=9yA&4B^TqJZYg zcW~5Yu^-B~SZz`9k*pInS;Ot=n6CPPaC@k}FP8lp-ZAi`}D z`tWRy%@z>CK>?PO}@6d?`dCB{)j=(8>b~rq&M=2K?UkbGv{4B3cJ^yRF zK`*(a@uWSJj#}Nn4?w1D_F7bc0cqzC==kcR8LKNG3FX(nS1z?(b1sx0OGn^!gxY1k zw7LAHecxS=$kK0u=L!n|YGhZPgPRfAtlJMn82NZny5IxCZ^d4WOj!qM3iod=ckPXk zqa`i?TQn4fjmR#5cc@XZIa=%o1zX29Wg(3C^wpG&Qg#o(j<36PJ2$Cx`38y4%Pu{_ z{W7t#37DGTmR1X9Zq5{O;RsH%!tWHh9cL|X|K0yM|d3o18;ax)cR(ZDxJ7@G67P@Cu7#v8-$ZpT$ zz+g6uhD+g_>!Ub3(~-#) zzwDnaxOx2sK(f17w;Dvm%mqM~0uUbNNIW{U=stz^b4Sr7#|06mI)V76ic0Oo4u_{X zoplAWp_1aj(>F@~ESBnnJ8I;obah#S^11XPmxvwlr(J(Q!AE?(UHJ6Ef$A#iDA^ngFjx$UN%wMwW=;L>uU zgl^<7r8%Nol5S+VW%16Lb$F|Pz`32+)e0BO1w&AVeDLh%XGf&2jIFo{(Rx3l;$=>nWL`UD&TL3Fqlryx6EV=YAL5kfh^6AWT&@wF|NG#icEcfMC|_R_Ev~;v$`sX_ zLynLsLeRDjfRkB8M`jPH+@3@2f8^?p53xb=|jD} zquz$o%p$y{C`{^3ii!>2lCz3rZ}({$jQrz#RCmvv5Z*ViH=y?@9u8uR_$pwfK}8rq zZlg#j`#X1`=JoK^Sxc@gFy*gD^-XudH0#GGv+T=)J3@%5ZS_|6yL#(u?}XEj_13DW z{`1vB1!a}lOTzE8kNAB9g519Bmo&R+`^b;>8+JU1DQ0RJeVk-&J`UTHemGZZMG%to zpPIgK_p_fyP|(Pe&92rXH(Kxm6-^T5mGK8!7piCaz7{t=I?>N+aR+R_RhAxt6H{3d ztBDn4WrTN``tpQOhQGeW?H!%%H?_E*Mz8v-TS55O{JpI-^s0Zk)lG@6^W$UprAbh{ zVx6#?ttnnJG4lho;0v3oVfFXMu4{}mMy?DZtE_9(?7B>cSN-PLb$6~$rANvxv;Yw% z`Q$dYLqF;@3Du@&Y9E2d&4-Tvf_DX5ev@C;h9KDF*S5JGYX}eP3N6f(Q}bi+v}H?V ztCzO)`hzF9K7ZlGxh}u!C=RVbFC{1hA+Tc>O*DZVsgcc+0IMJP%SO2!#$CgP7$h^8 zq_%?rYk?P5@k;;5C^vU_6~-$XDDK@>BoAM^32O2YLnfh~f z6U#P6#G&7@({0bDP)&hJAQ#W{pXvmsH+kRb#_d{Aq45;hYEka-2C(g|v|M-qwp1~7 z@nomld*2moyrfH_cI00Iw)Ui;L(Q`F^I!ohz*i=hR2NuKIchYE)NM|>(*2}We?phr z7C+3{UCj1+|I04-HF>VO-BB~KyCgmgnhYqZjL4gq0v<4r}5=f!J&yz}!G4qhp;wEjDuCSR!$Y`nfBXm-k~&Yl<-e42C~|eg!#d z^>ed*k(qkTs$6T~qzy%`_>r%**6%wu{1S1uV3eY_uEjYTu(ZiG;S~X8=w}`WMv+CJ zxF^eDtKZ$~(|*(EXt8f#WdE!m zGXZQ!8lVc*g#m_N=mT4tlHs`3lV}EwsrdVQ+?S(Pe@w3%82(CYU@k~S+Flh9Cz@$qVPl|OiK)b5WT=hke8Bic$?;44rOu3T8BTzwxS$9)d$sb#@& zzw>xEsf}kblm>!tK)Vq9$>ZIO?g4-_{UjXn;0wsdR|;NKG8upKcsI7QAIRboV9}8; z%0D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 delta 341792 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

L+#Hek?nUfzGA*RaS4!%t!mUOlszH+Yb`* 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 sHMvV-BWHbkT?w> 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 literal 862092 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𪿙wge~E95?;|%+#_KY1A|X!_I~)2-j8+`+g>ms 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�M7&xsr#N@EY;<(!w{uDM{fe|U! zachA_KuB9?4U#!li6@(q4D@4~r=YX~KR!;`2&12(vgEMH|g3nA(DB#{?T->X-?gTD037WIMW$7Mh$)tF7NKiwHSk zBhze~Z;uxMTZZok7ZpB&Xo;%#Ui(=n5$OWU26<0}U)}7F&=W~F1&KssS=m^a@dx8r zEZ`t@n+9^1gb-g`F!+e=njh=U9~KN!O_~{Uku|&t8+Ax2112L1l;v#eu;(xdCrl!~ zw8c}?g;+C}QHYMo76H1N+XWDdeszPfFlAXww?r8Qv{o-)1;1ZQdL=SrUGZV9*{nOx zhcWhvA1OmfLiLS^$-#}u$%Th%3sueU{=9<4qTyJC>v}8@B84jqoY8ukfK3rjZ9>!Q zuttdTaru-x%AX-W-sLe!*YNDeP>(l5wgJIZF10E^U*=gBO_kxzJiWtOKIADxrM>1u z{}DOjusA{MqYJ}3<&rC|xWS`?rPL^|q*C`P+w*+Q`>QsH&Wh1;kO9z(>;gnYgy&Gi z$_0xhg(cV;KlF=Q(4Z!}(+3nFjg$NXN44P5QKnuLQ(+!1%KHy?ST#N$;?x@RFFyv-D7zL{6 zGqi*a!*nb6^82xuMi|p^J{bCr-I?G|%O?0^)s(EjzxzWIg~;y593j$xZ@B2bOL#%w z&FU~osul&3pn-L%It=9p{zBys%WCj^_En(a4Xcd?`et2rPtC{aj6@WsRdWqkp`B!{> zOchJ(^PcY=Urq7F8KtIQR-BtZuI z$E4H8)q@@|1P_Y7x+YeD3pd)FG?w5X`K-NL08vbP){ncJaiQ^r<1-QS)($|$(;MwU*g(ugg+nB}eNc6w+#aiYsmFVMfs+gFK8N1}BfnvQM2TBZ$*91GrL!-^vd#R+M?a$5O-{(N}0(^=V z-8EA~&!QF+1GcR~McxiU8qR${kDe}D^H%xX*`-mZT`E>l3zIc=U)ZY&+(H|!P8d_^ znMHkx!{(uva5E*NXj5uNWwTgR!6rtAFW?gdU?C+_E?9wK2b@- zh@+x$k@eh`a>G|#0I6P_;v&i}leua5QP%*vj~KyVUml#8fDL$678${7Fb)uFfoSOx zPb*pl9fO?Ktrt?lx{y>`7_2jV2MoO+@bDuGl;oJYQ+hlf=ZmhGu4c!I3&Lvaz3_-H zS3Z7{?%>(2->MsGAVS@oy~p!#E8AWi{z|Ev1`qkE02>;pdoFR)$wCYUJP1$j4Bx&q zc+V3{O+gj3%w$g}y*l6~{>Uyq2N4tO2ed@o#bB_f;11tUl#F#8W)xCuehMD}WOO`s zHvFFNCuwcaeB^^2)6zlaV^uYL72Hd=7z@Lgn(zEUFc=vLwz!dDe&S3zihG?|R=3dY z9NTVu_9s444fRSR3tO~AZ)<|i}IK+0~R!(Vf;_6;5 zbykXPBOR%oh1|mjbXtb`3m?V7pP|AyBqydJKo(nC>O)JcSoEm&mgoCHq^-NFKe#Sn zz5&#BM$EXP9*|l}K^m;yGK3L>uX~aWUtmQrb6^2&3)vxs+V9~kJ!_^&r7#BGlJZHSp!<315S0*y< z(Z}6o>fz=$Gj-2#=4DEZHE+_9MQeXSf&?(zC6tdr1h4H(DxMe!kU9*CMA@`)&Ufar z_HuCokcmj`e-7exAaNBWM~)|VCS3tGruECI2;6I4qtus#TFE-$en4=A2k8(rruLAF z!^kAR`>7r{!}>~rS~+!*2eNZ}2UbE=44TxbPBGM1TZ|{`AThAy2#e-K*{4z5(rvxO zO54SHiHw)^rOil+;3&AJJc{_LB=Eb)WZ_>35B;kz@-ldu)mx!C6y!hviQhsjRA$s~m7G#D2)YU7lWYO6^&pIKPbh&+FB0IT z;u_B5qH=(yJV}BgD1&p3-WSuZ+b2Ola=(WDH8(>o&n3u83Kb*1*AnnpCJ`1uf8bL@OpC;kUom* z`z?RT%nV(?)9e9{V)KI>g@;M6*o1o(2k}TK)A03tbP-3+)7+#V*r{+IHt>bm2l{-$J~$?!2jFjQ5CM|DsmD&RNEm;ft# zxx~0+5;$9UxwB1KPU40zp6Vt~t(hPEOtVg#4TrxBN0zB`Ysz(sS@P^wX zkKJBLlem*kIj>{Yl}0Zro>C`{@vV=mgwVNtMY)O*)U}E>@6|altVqm(wfL+z=Z)?1 zalCvSEgvV#hd{)eg=*72d}NHd48@3Ye8a0$p^--Tah=EuRE2I=VhK6s6CWow2><9% z!_pw9j$5?AO6C_G1h9 zz@FE8r|PwL*6Svqt?S%dvt7<=#E-JvJY1b&#|FLQKg7k_Ub+d73h8K$7-u$HYp^vv z#_^8fTbIpsz#l>gmw$Ya4FdyKZm{IC=Kd$G5NDvKQm^5_!Ys2(`SpUX_aY>lz%zam7%r zq28NFfj$5ab|Jfq&VMcip_VjQvk3>3(f-ysv?FAvOTv%lzP}`=t-Rd4fiY50K3N~} z7EN9UuETP04EFlLf=9HXEpf;2{Y$JYeXLSmVtna!XDJf#eDU3{XU`7rq+$fnqX`lt zQ%G+11~@_NuFxI(SreDV;;xS*Dk2Nm8Sf`uQ>&w52X%M&^UH)nmb2fH$Jup#IFapy za<_Pfjng<@eUy_X%U<#6pc!SM89l_8un6Mh8X%c(dZ(N3NK|CG*~a_oPCPP2m&-1b z4ZQ)kjn4<0V!Sd7h^%n03z&=pM z{Yodqrtd`1=bL}RQD~*>)?d6N4BbnqL) zanETF*sW~kGMX%hV=kliw@^OJ4StjbJv@MA?B$e=gu)r?W=m2%nQ!PIr8h}KgouI` z&`>#S)f`zm;GrFmvt&QalNd|;eav7Q@GHDY&&XT(!f*f*Iqke$a#op8$% zgXNUSa1PzPIEdvHONj;~i?{f9J&2(i7|5TZ-DI2J_CeQ8JSJGlcAqC= zO?I&;Jd)c89*cG4DpX{%@Ug+N!i(ltj3W+z!m0lnj5yc~oWE4d8=;VC%jYbLanI#u zicZT-K@X`~q*}tS-YgD6^ygsIl&TeuC6S*co6b2B3T6yu4S!L$WAoiXvv7-G)BFrJ z<@|85X=w(VtN=589Kb(0)C%=yZu%|D+zO4Ki+%8V&}p+|3Qd`rJPS5=9Pu5-We|d* z8mfeQ6axrH1V2j$G8m*&c)rhDPsZ4oCL<$-lnq}Xm zQw6QYXhgiLmrNN-RAZmq@cskAX@!z8qC z+R|;~ME?7?^4kam9i(h6%CsVRl^GgjLrQDY;%w%*as>USIK5_Z5+R511xrhVWgv!K zaQQLrB~mRcWCk&Wuk%w88t?O%>bcmt%!MbQ9k#V_2PN0IIsQv#Yv`QXvPAC}8Au`= zu?#lE$U0x^f22lTcU0Q>A&NsxJb&=7Sk4>IM`pZyyCW+_AV&?zKBqv$};r5(wD^?9A#?$AmbI zs|)ECsj|RFQw>IArpC$0xFd^Z4_7HBf+;O$@aGxVhb>VFhahn|n3{)KiK6lYaS~9P z?rE0IH_*3FL-ODPXCxPPE3%GOX?Ku%U$nCdKJy0?G;B1_3L^FNsuAgxMWs!76!pPq z&=qY-KZK9St{12}Yiwt+-lyX{%;kDM3UfIH<$n0*SVF^hZ30sXY3?g*xP2FnbfPpt ztg-p|ujYm0NhM-k85mT?(-sYB0%-k%&3&MgKcKfb{wURIMia|n%If&2Suzw*h7vFH z5{ky<^&Iy1sk*K&mtN|cXO8kgDc)^9aEjCnp{7d~0`OeS`}F<}N<~P#Y$VO+o7+$J zvVsZO%Nip7VO%+rt!0!~qnUBi!&ryzt&kIh%zn}Q;AVgL27lv(Jvcg$r$Uo4L#^LoWO^ znHZ!Y9&wpT`|x9-*K#*3XCPp#R8+KQI3U$0%vw(ut zr{&?>m&qfe2{O2@t@ep#i4Z5hLJ%C$Rl{5^1~mK}@&USBTiu(?pT+v(u;pQ+=wzEn z^Zr-#`IgjYNEY$w)eukf*$ar#mmDeI0`Y8+6rM055OO%K8L0ae$0}MY*q8@pG@(aa)O-bb2+%sgX^+0_%+w6*H zExMsQv6!u#8ZMeaJP3c)K%{>m;a%62t)L_elJc_5%EDWDmM!{JXk-}@=p~BcShPDAiS>ev=wrY?F90R{T*R5SK*YR>=yaH?0FRFumN~OAGDCGXlrc&T zbOk0CBMa^*;yX)m&cHcMLP0(m+FCm_uDW$#1&{ZFm~`NrW{NWRRO0?Xl(}7TztWg5 zk<-G0VyesmyXw)ED7`ZgZVi75s}0%Zsu_e>9lp(AZ#}~5fs=K(v=Akf za$klF2E#Y&Icl!~hsT!mM@0Iuh!GtHGv5pQ#(5!<^FTp=zRWHtp0x>FAYE>5@?5)Y z7@lolvFV@{v@K@^(Uc-z*tDy^=5P@|<{AS|S}D(FMu2v&pf#`e{MQPAIlu!m9bFAv znbnq;0$}s76t5}ou)@AoihrUaV;UCf73_9^-X8qM0-AKMf5xly98iSbMS&-d#2E_o zE!uipH1FLt%0iZ9+J&wzchvC(-sukSU8YHJvMdu~ZVwCpZ?Z|&v1(H4y^WT*;H)gx zKw3xLClRfbQb4bH8HB>RmU9FgX5=nHO43X<2Lw8KOiFQxNoU!bCEzalR@%W}fvvaV zkI2VcmQ|-lEoY$xQ2}(qRS3G-B3dfrM2!Z%w0XY;${FFqof{H$J21ST2QLU^{a#gH zfPX98aumF6krPz`CLn8MKBrsc1im0C`*B-Dy9~y0#Fw*ht#QO&-Gh2rWb^cQP=^yy@c!0(+1YW1_|=CRK@6qYn@oAqEW|LV%DZW9l&UGGtFc zrsc)LD%iMX;O_`M8`5QD(MEg2FQT469ssUnpmYW=Ab!WpORB`|FlYi2059{;SECrd zB7spR`h1L3bdIwBciW4+mwmPAMGj5 zl1|%mcJ9=Kl^8v5lAcrdOwSn%o;{mxGabGIaLn2$x6oVCaJba`4&u;b(2&%b_uwzi z58N(+Aig?UEGmO-at@tPB?E~Y9MAHLpYEg}IWr-%;?6F6kBXl3!0+-@iwn-tQ1;&f zEar6XghjU*n8k9pXabi_gj9Jzk*G6a6kD3f(SxR=a2u{b9Mv66eQBsgC$>DpLw<}P z447hA5_cS5DTr*9?)e5 z-M$IN)Gn&7Corf)c|B4o*d!azR_z1aT5Mh+YV0GNZV>liA%(7)kj`1ZDlyJ0MxHRV<$;)#g+{zPzKm{siaHQ%L~tBOZlK-|onXb(N7&G(eKe1mbEM5_@l~a?D2pDg z>4aq;yPqIQ8pA1CCe@C4pT;oN)BU))d^{6h5`6FkACT&CK0xRlmf$Q{etqlSbFsv+ z(J{PPPwSnM0Tiw`R7W_*E*=>37$dOn>Fp?J4t!s;L%t-?jlEokf8L-qQ*iB|bkQJ~ z(7JXsqA5+T=^6%bC}t3nZ_}d-o6cy=rirI%l&n$^zZfrgWK5Rl=J8^! zpuD=BY+rrI1RlcV|Dab3n-1d*Evj`NDL9-(Tsy1url;E3w|zbO`tIluFyQgFS12E6 zTw!vb{Ah*OE?Mswo*S}=aZQ2yqcwY*onWg))1WGz>&g5VMzAXHvYz$4@NAcFOemTM zJv49zG-yc6s^YL4ILRSxETW#n{{)ldB#`FE{+)wicy0}~2YaeH5Day9I?WiTo$Kzn z4saITd&{!{j;fK3zY339%?+CUs^ROG$M~)ht8CbE+!^~} zX=s6=Q$!exDf<*yx$V~Jx;sMEIH)wvD6qBlI=MY#pIe*E*O=ZG9WP@_lE>u*#={%x z{b_tk6w#B!wrqddP2pgG%QSYdzUX%6V;TpS4)CYaja@M+yu{FsI={Wff_N z#ev)%^{CN^VmP9MU_H`Qw6)hxW1%3ayL85a(4C$kpQ+s@Sy99Zz`0aCGTeWN`3_j8 zkX;X&+mvoK>rOwv^`FA(lyd)li5EZTyp5bmeYG#W}0 z^ND;^^@Tu)?f^*p%)HOcbnh~@i->eB!_cSVpwg7j!+wudSHap?xR;GZJ&yVY&U$7Z z(e#-kWSkk4tcZgdh{0CieHcxEdq`jwv|#u0@UNDN$?{|* zrXUrzv?N<1whtAOjdNug>s}Fw_nzxjGc>|f=Hc3=yX1PlI^p+FEY$14F5)wdWdOY@gY<4wPl zvH7fyTS7LQZ=-sUo`r^>3h&59x5 z8D0gIY|E=IfmhjTeaW#3seXn5U2-{j>?f|P?|u{N!ihJHp6Ef)b}8r;KOJ$3(vhYkL+JG~)?i*z5^*kYoU^`)%MK4N?PbHrFB zOjG>EAu#+g+*8aSs6PG1ENL{VrRE4fE@qCI;lMc<#)%Fla)h<8S^A`4dOFW7*Q;Bl zXt5C33o#{!Eo(Ds zVkjM9yb4_0ossYD*q_FQmi?^qRj)p%pel<#%Bp}k^RCxarK z=#)}6euWGGPG}M;ga`%JYCXPPsxiiedMwNegv0HV+c43xN?1*`zT4m$Ye!8|`94f= zxz8Rr0bIvbAB{8N!>wiPEXIRY@8d^ZjK~S=POsqCIa4ID0ZWVNtTl&U3MIfeiobqF zZ$vj!Z;Zv;E(D4o06@er#TFq{%_cz#u9kH}WeSk?+#uMVcl+(MGYcHXFQ*1FvydoJ zu?hFmVht}W1FcYk7LCqi<@OX>BteMy49k8n{*}OOxu$G^QJD}(r;CuX_fY4?ggQ&- zGq_z;sacRt09rUK;Y023fd&_otxYrAn@K3#A^{S3}L&FPq(q7$0Vv1M~y zAe7AO+hi6mx1y{>7i3P`ZrZL0E-**XWV^M|Z0XCI@`PjvB9p?1OjujWQH@EJKi2AsVBJC)H_Je@wQcs#N$B z9QWI!Dzp^LU=Fmy2>{CUFKaM{Z2Lw;A+x@JIXB6y&$B<%njdBG2N?eOj}PiAG8e)p zS4_euCZ|r3$GH6jd4gq`3+MWF$^4MGHw>dFh=M)k=Tc(^@Z}Pjk6g?nyyn~h!JKR# zCoEr0U1bCXZLerv^D}Lf!(y6;>Z>$=R~CbWy;EWfc?(}>F$@|*QQnpD6KjrL{jI%7 zz_nz!^W0I0Cl=nsb)u5gY6Bu0<9LFLqP_|S+JUTbO|eTIt&DmklVlw1JSxnPK|njL z$D;Tv+Nv4E&#>hR^J-a#-j1qJY1JHvanB5E5(Wsl7xR-XF2rBgx;>k1Uo+2G8rgYKjhV zD=F}CRKVapaqZ4==eCaax#s1De>rP-8Kn+a`;{Z|bVuj`qHydlZoVEux@i1Mf#L$vJ5Yble6=y`jG z;K){@n6w3g6FJmBLsU1g^y8>(j;6PB5~rnB^vYuA`axo5jXTy*6pvWDrH_|iKWfDo z*yHkL=bR5_DJuX$GR|pLb{QQ#OcTM=9;$`iI`}3?OM)9OaTOY@mkemo=~CEcr3XwciX`}YWon%q zysrA+a*^oy^rCf}`sm@GOu`B48yjGc^$;L9Qh=xVwOROfsE?>4prAVimkyI_BPLg0 zlWQ+GxE+(LDhC1J+j5aMTvxSGHkEm%O%Eu{Y5KJ4iXn~#!&RC-#=?Ir*-m{DI8{c< zdI<(`xaA0Z-BWBvJgU|Q_!3PLNJc|uIT^rqo0P(0P%@(sY;It=U?#TK2UdSy>w`Jj zJ7drD{pKnJOL-{!Hk_K06m~mlN(@#ZN3hCPvlQ6e>Ej41vqvxqB;NxjT!B__@HuQ4BDk@P{!*N4M0ImQrs>3d ze=(q+B%+`k72-v5WVrrwH0v0ZsZj+#Jp6Igi3CtZ8T681B;zd*y$mRcmIBHSZljok zc|GJKfF`X6E*+P=9_9?>+q@o+l{B&AD|s&xq-Z@r=xoQ?N975TL*akl=5@>qU-m_4 zlM=By%c|f@R>G53jc8Yzt$}W2bu5sQjF5j`1&mF91?VEVO2im;#F|qR_NJ{dUepTS zbVr;pb#-;sNqMb~9IIUGP!x)X27~|9T{u@^Kpm)0r)X@_CCr*&7dDk)l~SACQ$4BL zY*rR=(=!5ECp{r|XdOnAZ|(AyI#drHcqURNm+Yvayi8Zz|YrF|H4uoP!i4e@pqsY%?&=#IVX>XDHZrL zjWHD$Zw_t~HKoSyr~`<|8AhQ)+o!Aw)YWUY&59pW?P3KDp=ZGxmf(4y-~0$CAbF!L zZLn-ZQx=T4vBj8&ZjNKAWX90uh=rh4!Y`%Ga)>d2;?dL7zU`Lmr(@L$5|fptCIPY` zz0w3|K#zmLEo34vSgHX)8IFT79;+UH3n?gQ3Z^>sN|RP8VLCjaXKwZp_<7xZGubeM zoBI<)qAx%}BW*2h<_eq)ZgxS{vM-;~P&LcKG`KZ<#S+~WPSYE_q1)!mFf{tAoK%;P z5`X9XM>hsBJ7iCvUh8!hqGWUNXVj$U=NNyd**3YfLl)Cbo@s?zLrO4%%icK{-^hZd zUf-ei09E`j;Q&L0r8p_q-^|-#k+6HoE1?FJ8}kULq2<1Ak)P)0kLn>{mOxx|(b5H7$jXD5W$QbF&(y&~Jz6jnu)cyUgo;Mhyw@&atX9;@!>z zgKs$}mk7AlBb+2YEQeTjM;6=_xSqa_Th4r)Z{!c3laq9+viM*hL7Q+L0CibVb7=JeE@p=DW9Gzw@M0Xyyu?!32i#RLz( zqR+M>!t|Zp-xDk8)7@ewIWFRKiso#TmeVJ*iyO&%Y1s7Oe{JCcP`H`@8ewL9BF0Jc zbQn6-UJ7_PIhNUhUZmK6@jFu2Cgq1%cpn(P7r~WEMPNqh!iQllq$g(^FhB7Zf?$CB zLG>;K)k-;CfNyN$0;^%Fa_|R$b@S1WY3x0KG$bVg^dz~VWEu}L*}pqY?d9qS>c#>j-U!HG!MC&dj8t0$7ipi zFi`<<4gfe3XGrp(_4NUmO_n)S(>eIf{#c>aVpsDjR@}|-F>9Fnow7t?05?jXoJqPn zj7f*(ELkIQ$gQ5?-EW3!nfvqQg=kpB>KsyHb4!lXU*3F-1Ou!V%e|f} z=68Sj-U;LjD2GkP0)6djmp9CA#{p!vADNPySf0l!j{6WZQ8RZ$c!tW?#nF0~YbZtV zgZGrZz%)teJl#)%_ssA^Ngc)Q^7W0C=O)ij5=kj?mUaR1=g>W<3~eQF{G6OHtr*OV zOM@))hsji;H#JFd#f2%lT}D5e>z?XCO5!Xx)sHOmqw2=qh82)Gnjnb0XrC0iZ2mHR z(4z#5t7oQ5xDaL+U3!;hp(t&sIdw%!pKhO44Lzm~+Wd;IiH)d&AXDjvCP_x&A5aF6 z@$|Z3lpGIX-sH$Fnd$?sUmR7MM{tkk^S{I`B?(fR>5|3Of__`K*(xDz+AJ)X)7(z^ ztFT4BiwUl$tJ$DN%M_Zk55Q&>Ej(#GoDM01z<_V8%Quv|Clw-eE+~hK5yt2$ES6{S z_zGn(1GCn4aUjAJO^zL(S!IgS_83?^Up05xFX(Xdi1=q7 zRC{0}-|!<#J^2pEtJhwPA`IPl_c6#FrC|6`%1^F(4i!ldIjiuQbX4IGVz7*}&;vv3 zNeBXyWtoHW7#aNUMB&h7V%KwxGdn%$U1Vdu0d1>p)Zj6*6)f2kCrcVR6rQD4K3M9* zaUYQ|ei8}$K-U3*Tevws7M0~BE)6D`+o(@PbMgG&j>-T&L$RjM?D)gWhUo&=5w4&x zd7T(i+=KsN@xlioyU-SP72tsa$GA|KarO^mw}LDK;pw<`OqfV*(;f6=u-)_LivDHh z9m1a2&0IZbGeUYePbk%}HK2niLUMA~Eea4UNsjKA;pAyQ-Z9RzFd66b6;h1KHo9WF zr{Wv|2*cl3tR$C(94RJBx6EdalogLhC972VAk5omCjRB3sRM$3kv_NpMARN||0$To zv>I!DyXE{)E(77?B4e1}9MEa`Th)B%r@7mzq`l_ucrnBR36U)mK^M(ZSX)j=2gBa? z=e|NU1_le-q4iPyz_pP_J+tn!^akLO4U7jxbBSh)ORAlG;<)Xc*$}rraZx9%PfZS~ z%vrwzN-*G8AR0_!LKJ32A>jNH2VfWwge%yOX}c))>%&}X{wYd>BS=Urhpz)6Q?X%A z%@;p4odb-tor9tj{%XnB)%c!>7UR__{3JLRO|jk#zPdigHJ}**G$Wj4vTXltQQ#zz z6U>)99kQ7(jA=EitM9 zy-NX>b5b$s8oRpgKdWQ)69YTCY544G$ykJRN_Sy2x&cJbbu4s7!}o0~x`Lz9St@Zw z+C!OKMDZ&IM8MO0u!8!2xC=01IJ7EKHwFX`LSPH!I3HxfuBM+5Z-XhT+jLW*Z(4Ee zQ%<4bor%%0J^Vvb`8a&A3*bVsAM-9Y&4>IvnX{-fq=)=Xk00l=ynjviQLk|vb>=ku zGwGDQckZ6>%l%ysz2eIoyZU;VI@Q;n-@H84=U8p2uC?cmjG;0x(Pa`oAkt?N<2y@DaILtjbzHD)_{m6j(+<2Z!f_u=7gs z^j}Ib+mWn8)_DRB!tZ|bIqdPa_N^KRlu-0s7=NF^VMc+}AETrP157utiO(ZrD56%o zdoCjA!;2^ubHm3mTx7Gw_4DVI!q*zKrL+~0r;xPN5E0*R{%_53Rh}2EMy*7jc5f&U zVsp}XySca3m@^yJS6wH`JA5YvIErNd@*bg;ZxH?hCx}lCc1DeSN7%3`1XvZf3Bd{{ zpWGn|E1B^VrjOeOHc*smlf!&qKtA}-nt7O z9mYma&mW`ZsbBkgt1$BRwn7q>F{=zhK39EEJ4UQTZp{z>7#qX)HDPJutc~EXb#vD} zU{GQQi*8+DC{B2D*LoFUmd@Y~EFy&|2bDoGkMH2(_2Ps4jR6o#VQK(xbO|HIZa<#F zdxihmFsx8H1QWD)6Uwq4abwIt?dr~^w)ScIh~U{H1wKhf8EwwURhsq*XR<5 zuWnER`$JW2Fo}ya`IgZY*HxnnX!nBpimx~6AvOG%?b)+;T-T{Dcx8RTbMSwu}Y6YOH^QH#&di|^)JZ%#b5as!LbSZJ=>NG4u~dWyWqOc z%SIQJak36O_-Xh!iWA3GDW07pqNKl7^RbK8RZ3+(4^cS`0QP`<;V+1@Qmn8Nv!7qc zo)@nN7h1gkw~i^0wz3SxVTQl4IEJK-(oi;&iCZ%ZfcRkn*p}MCEX)D~wqq&~w^hE{ zhC|0qHw87ij!>W25*~=iGZpx1_;FcBtChJzdRk)le8>|xRBcM^!iP;NX3dJ0gzh^q zTKaKOJT5eZAacxi;yOxwIHjfn#lIjS8*t4;!=O@talB}?jqh#hxB-oal zWuN2OE>f19c{>A8h8M`_L$kqBx7z^AA-F#XS?*hzIFR(gPDuU<6tS@ zY9tD?F6tAUB^9*h9WW@2UrLRTHTvuFJCl2oi%9qTg4Lw zI$jS{P_klOSh6lIFp?S6bLFi*3{1;um5@&k;xvZ@{Vl`8#gmjC92h-1fzJyfd&AW) zN)#srymX`aXjP(%+`QR{M_CDEYWmqhzbpjR(+zc!ab>7wv(YIY+S4Q*gXWWVV;=zV zSjBOlDIgE#;UsQCz?SYm>Z~etE)kTYdDM~Rl)aBjq`rsj%(>v9%UH+_B^aD~V z?;eNW!*BPHL5@Ylg`MW%3V&C>xsUKK3-r+3)?986qC{TP{S-Zb*fphqHI7h$AChe! zh0j7S;W7X+DI!o^r@-hW4w&BQF(so;mJ31g3$=g?eQMw1Z8cmG1HM)RrhKY>DT^nT zdAJ`z`IB`0W=-OW2a~q$Qx%8f#`;D)&4wRHLxmk*T%4!@y~m9`;2ZAp8dI_FJzXS` zo@TdJjjyEUQXwqpZ3DaG^x9mtwzk$GrG_iR<|B~S8k1pV4-OwiMOo8);@3Cg+iGdE zFab#h=!1)f#lg%(#ld=ig7r7D>0{lAPW<1rzo+>y1UAzZAqN{jlCD;pUaYn5sd`bA z;5x96YKNWXRsEH;7WTw@W3*s-$v^grc-g!w*+QM>S3NGp z1eZNUfwnz#DiaAn4OlWN05o58vU!_F;zhhgkGcR3L#b{g|{+XM5%0u1n!CN$C$yb zcf%^YMPo#Hwu+I#6V3?VW%Mk={8)KNd{i4~gXS|9*e+g*LtA)y3z)Wx+H+*a1_pRI zmI2cgC~Xb+$+#-vD`0tOI0k4}^4%dSU?;{lzmL|v*6ar88EesvxYcj&LV1tup(7hg zrG*uS8gVv}yxiDC|3w5)*&Fb%t)oq%1c~O!ik$k95xXSx+M*RuOEDLh8klsLD&0S$ zwb`%gU>w!+S9Ok>=+9t;fk=tVihIO0kiE3a@{xesZ{=OV^_>i6k==4Zdh3#X0$GcP z(m*QtXR)%WtQpa61?pB@N58>Zc80+FN0+`(=#JBUGMN}?M>pN%nco<#3dH5B56aE%- zaD5veko-&eKw!M2t`H=zi5J}?Xg{)K9;1_BIrv~dr2GsW161P=4Sp$>0cmI&aXeB3 zj)TZeN7K?6{>dOkAMd$>u&-l`oLj70Km-y*1~M3vV{v#E6{%m+^el%~H7sBFQJzg6AjmBpp zdKpqFMIv4@Hvd@}en$5pKn*-vEy~p=76#@Qjivp1ET7F|b0(8>YlkJm@83PugB&z1 z91Gwhd#-3TbnyIR)ltZVH(3m1Vo-=&hN9l+*af8kBE#+tKg(EJ6^Gv&WO}-hldr6T zx-`(=OJe9p-ESzg;BD3hY)RaOOYV#q=bDQ?O#7fV?Lj8^x%>n=S9iMHIv5LSbZL42 zB*h!T-hreQ6_X5H^q44_gJMnRYYP=W(pKtpC!6mO15{OU9>jOraqtD zo$D>*^;_}65yvo6)sl8`5ClV5lw}GPqAr78!=KQ9rFqo@q0^~bzGhk+!{kZ)Hhr71 zz-~bJbxRMN?}-mYv&R&4d4v^aXgMXKuieSDS4XX9KShfg{Zfk9@+OZhQQ<5U5y^$R z)}l2!6=5$USi{m7N$zcPV+YxXHbk_{AuOB*Zjor!j(QJu1KbeUqeWBdwHi||8q>4Y zm?l%-HXL8HC0PfsgWm%6s7*6GGRCl5o2K5Z?y0)2kKV*3(BgQBTkC!p)dnag^xfJp zFsdWBa8&3CqtaZ5pLboP>+9#IFn=~P zG=_Bw@wCgkjInr8iz&;zT$d3v#cfnB|VP(Zdf!A&-$H8em5>(n1>ie zAsWiIfjNxb^MLas6UysZoP7mIy%G?hs7p(#XXysORz>kzEp{z?+}!2n4t^|Q6_VQXwI>hliSavqNF}MMfG85XAMH^HRc$m&w zdR|UlUZzs|(e6KE&R!Vp6t9YLXvVx7eZj!Nj?+wTtDS;qC(9B&O*^=zUU?9U9QbH#_KhIS7Vp zA*<|siv=oTN|}u$Y(Xkr#hO!$@k+;7zD|a=U5_(xiskN0bvGUaGmk)k(s+xR z<>LOjezJ>~KH0^~W-r?1mkEP%YPPY8z@XlrCEu3;9U7i>4}Ru1?zONe%g_s{zMTDH zE?b%N6hdhN`i*M|mWn4g%g`?2waDqcNVneb73S5ts#Hf|Wo@qfR*x>f%S5cu1v&Ey z>^i!JZ?Qk@oVTW}D9bXg54(KKpobUGh2-K;(>0y;rmy!zOV;%t8H`)#&U98cLE$P4iz-1ig{yx6n?r+7NCl9e-*tScmEB_8j)W+5WMv8VorBladk_Z>j(;dkh78B?L&;|{N83~ zGRs+Jdp~y`@%pCA(qT5`rI&KR4~Zl4d+kWa)kb}Hr#mB&kd1l`75ODKwJ6SQ-vzC? znZQ0E0Sg`!&khXrIfMO}Zd`b@6Yu9l24LS36XmY= zKF}HW37zN}K7#4aGp4$lNPzWcdckN9Xx~SKqletIC43i}A9!W_mvuktpo942d*#<0 zWP_7Y9_z}Wt#Id+4|<0)aoW*6OoueGgfd9?ADaXe-AC)zSM0jXlzSiQQ0}n}iW93_ zB2?9>x?No-j5dd@wp%S2ZpsJh-^*E~A-bG>w8@+Q01q*_nY+ue=pCYZ%&xYrW?1v)F{v1a&Cxdi9Kd{ir$08jQt%jj*IO?V5;+aPR2lOn`LWM|^ zl7UNZ?B}P)oJKQU(I+0~I);nLyVJ+#(<&hCDY)V{8yH7q1&IUu)Gl9ZQ~my zQJ9}t0Q)H1p@Na3Xdb+j5_p2|HoC|Enba6I63S~VFllOq+CXZcfeRD?=QMz^=gwjH zQ`>#UB}4&R`qtOAFZ*d*9{lm%yLhDJ7f?x5h>*)C=h zo)}m`>XCpnv$c0(tw!d7=8Q}hM+rz30N{jjN_3Z zXv3A2aY7)2l7x}Fn0Pvbhxl&A4W`sE2d0vx;hmi^DB2$@TWpsf`2GtCmUd{}wuk8} z4^+6w+x7yn*x0bn~hvb-aTPjM(fSpT; z`Zg;`)!%MY_49eJeg}LaH9VTK`hO&k<~Xe+xVL5i3GRUiwV5)?OS7|9Ul%2iSoB$6 zSF)VSk+^!J!p-7bQr5P>jhm{RBGY?91Jqw>leF4H(Y+u8mAff_1 z5eOn<^dhuiN0~L0(+)akiI<+i^a)d+h47%!RK#T>fa4Yc=xk!Z#BJL(a_;enYhM736%O4wwS+IpV(&C8_no%`c5DT4MAW_YM6(LE( zL|AYF|4N8Dvwj%SblS971p(}#El~-yPKY<+z-!+FYs}#J@$&XZjBgo&F$8yuxB(wAS34bW2uU#xhAXWAMNF*~v_3Zl-76J%J8Q7p2z@X&*He zpu5AnmLWnXspBRoVL+zUQ4t>B8D9=7_4=;vVi`wy_btO;WWPv$yHNnHK%O@x)0O%Y zw=h2@q{7#>-Uy*cprTtCRzk;U77AXvc$^(8ijpiFdvTeY!8S5fP3J@3fO%xU%kY&j z9@z32^o>a%`v?< zZk09w@T+jR-qQ)PJp4Lo;vUvC*e;l{CdvY*og_fbLc5@klce!;0WV_}^5mMfTcB_| zi6cSujwB0d5UmdEg6ZnFwtlVMPIR;@MLm^LNOlLgR+Ng^sLD2i@^%B|y?qaqcG zYe-q#Z(+vdUX)8j?+c70?5B%RHb=QJ?H^x=C$2-wc-f#3SUzDL+NFj6prA1xsARG< zN`ahNaT2Y3vO+>9={yo;mgQ_`W?9ZY`LdjY{h~dR&XrId0+2!9-Gz`1OQnE7ws{hX z3EZI^3EJIPzCzPNkeP3mMY~Qh2A=6Shj){xsj34B0vYInc(`Q>L9T2yb@%*tEyt2<+!thY z8=hkPnm_bmV@afr%qI(ijc`HNQePd@h-uFazk69JjJS|*=1grQ4{;_USB5^N*RsVi zZCEfr2L&pp=X$5OkJ99!Q+y$61}8VNMTSr}Y##`m$1YO4(G&|DFNMRxn&8)P1+#+; zwtgEYrUT!c%+dB=nd;dezHeR~3a9o7CgC+k!AyymxI?Y`QpTJUKs8lZ0h=rvt+=a1 z1SZZWH7FQ7JFgOAKtpo$*?Q8M68GPbFnPh9FIl!ERrDAaf2@`3##&J;wK)GvVt(Qd49&&ru~?1`xr*L} zvpNaAPN?L<`eqHgWlXP11(XKW*dE>dn@uC!ET{kk$7?$D-Q!R%8+2t!X6-2h?-ntnTY9fvD zX*?X8kYS*4eW2B|+=FHd4|{XU;_mH)#r^5~bS80FrjlnK-3^@9<8vE5=^%wUc-kq^ z5j256reH|BYm;rxt%%ZdJ+M@bS>QyveHmD(*mCU3F8RfcbU1qHKF<=dRiMf<^tw*3 zo?}_M>|Bo5QCQN2^qT0sZFoSojHuMw5?E%ew4)ll26y zG0L$V%ayUWm`bz9V&niA-0O*Q0!F%!8MK+d55Q@X`inqZQ*VVw$QqEWkiC0z!z*A7 zh`&fblZ&mn2d7z8i()f%#QPs=EgVlGvREcfnlk$9m1h!cvR z*XxU-l~r0}eDQraL3Z`gD}hQL<@R1dIu)s-RlD;PSoPOzs5AS3=Rg}b^^wFUi12v; zHOGnmG9H?OLmVjk03AfVE>7*`vHnZPOUW7fktH-PW@YwT7qdb*s3rOb`LF}T=sQOey+t4F<) zQAQSGEul%~?d zrdAetYwYE)&=$>?#UcStq=RVrATvV;AoIHeX`x?v^7EP#ahh(c}$F*_G zHku)rMoDLuo+TGeITNhi@58<$vCc%On1ghqxo<~D+I>TNhyR|t(^>#SaOJghH?*_x zC3YHgOK~UOI+@a4>F{J3=SkNnhD*r_*Ko0L5YW)i`P7)t%&lTD#r$^_%(fjZKml#JrkT1sMJ z5sgp-wFlwdagM=?5hEGDIgPjv{>r!j^>9>pq_XxYL`rH>a2dY zJD8ROoRmz@r-L~?a+?supzDk+&z>^=EszS1L<3uv#p7H!ydq~H7mF=mMIcqqz!aIR zJ1+nM+s~LtC*aEE7mWxOEXuQ7Vqz-iu;JwPgqlnh`%HBbxfC*g_3 zVZQAtM4jQE#YLtjn+N`Ux%Hov-(xE5EsxQ1*|y1BY9G|t zck|GtO+Q6=VcyO6UENrbS3vN_5pGj%K>!XvvH1Uz_U_S^omGMFdhC79K6~wR&Z?@D zs!E+ovi8nNa*~`%3MiA96j-ZnDis7F-4_^m2jkxU!#i$9ReFrB3hlKuO)3v)Y-t-B z`^r^B&Xu#>#SHGN%zSV~d>hlRu=170+WIw?FbRG?8o6 zJP%2Ck4QQ32taQ?j2k>XU)o)p5Gq%tp+DD5ki3NM*YCk{V{SDW5rKT@bgUZjdB@>% zQKJ&BgXZdYMz{#o1qq@!h}r@dgHs6g{Ru3DkATIYY!dZSQUryz=Xpm30XAwc1K;7Z2o(tfk{rKA9(5AOyE?;^GoQFgI8E&SuT ztEOhfB%-$fLC})Aa7r<#@L!~Yyk-o8*N~GSA0p20Ea_Z=_yi$(#cqlV@h+8dMK63T zbO>Sb#ZwCc4GnYn#FxY@>rwB*BsuRfid9MgHIM!Gzu;}yn#W>DX}!5A5ziW!42SBJszT?FzOPAY5eb3guQ&w+uz zU@dMNOOGZ9|ED4OPXw7F-!kS91erNDtw9Lv>b7vzjMdBfXVd7;YlK?C`P15OJzSo- zDSw*6D5`=R6H+_9JnzpXAaakY-JP;?3}=svZuG9TTxZ(Uj4 zG~N-SUa*XpivY`C=P5lG@L5teX{9(Co-!iM&>|_wx~IyYTC1{aA|(K)!AfoBc68bX z&80?ttnq=BCQ<(RAL3+4lu63O&|xiMWjoDMlrCt0_@`yt&OESH=8Xw?*{Rn@@kpPC zRDlccJc`-Ls95S|C?VTN^HSS4iFzkd#T|I7W9Po_ zZjer-fFO8GFJQgRszw`E&M7ulX&KB&;+TCU%M zpkOgqZN~4wAcWX(-Z=g^jwyZzV7BfP1S;eLHth%g%D@k&O7pVu+=Zy_k{eAT-0sIH zao1)BXy6%VF!x+K7!lbEZ=a;v*f( z-Vg~aP!9j25L3j-6&HqFBRSam?3C>H*~}9a45NM2x;XVq%s_^wu;{5Kho}J!IYCL< znbnt9&P=#Nm77Bu-Op|SDjaP{M%xTZ7)8_8TTCr$kkI|JG#0{A|NHVWEcG;LOv>3@ zF;+mT<_t?is=K7g5(0jvCIp?B-^9zFb#r+$ETnh~DT5Sp$V4OYw+8hCEV-qV;uI;k z0idwe6J@1Ap}LB@vrr0a7LiE80Aqu zH%bpH6f(WA`o`?zV2|(hAEmQ^LR+^ldhcB9B49%q=THsb7**C5_1_|m#=fes36`i5 z?*B)zQx7I0hq@z0vE!16984+P!L(mFGL!R?w+RQ6fF$rd9cLVZ|I^pz8S^bL34>jf zqU{353q-EPfB0pF$Z*;PtYnb)K*q9O`|W$Wt6^G)oveUB;{v$$zj7FT9}>fP#9ZOS z#FKmjin@t^n=0b=tmtCj&^I5&S+eMSN`P7xUa&^RHV6dtDhj(Cf;a>eUm6OJDpT6{ zM#H zZlr@Io{808r5=rZy?Tvw0xJ;UDKxw3@g|3yQ>(>mFx57dAlR^a*${dCHZX>(Fxdyb<6 z@?ll|r((xZ9!Q8|#7(AR(c~6pi(n0*sHJ0RgG3rjl7?C_4EZL)$L1)LD5Y|y}SQKZU!)@eKri&FluxPOlR z<99#*`tn%yo&->M@v}s4v{A70bv>gP=fU(r3^%zkeNN$mQEre?I&;%4Fr^pxO3(qpY5 zqc%B^F81nQA1bu_jNI5`QN19al5(L6YKm)fg8wJ%nU$Zkn+*VwU()m`cpig+8L>EZ zVXzD^)3_~%#=G66kZ!9`pS>f!Z9*$ibx#P!GsbC)cdVPs>O}Q#c8IxzN(ci~g1v|x z)0A=YmT>9}rEzYywy&G~wSmAN0eAJplz%0y8UI4SX4~DAAFf{0P5gN=B{kTUC6%a- zzwPe(jz5sye|_07K3JRcOtjef4Rja}m4zfNW7kI}xs@_Xo|l#4RF%AaD8DJc+&7i) zj6yNUOjU?^JHZYCJN3&|4a^8N^;3=&;?okrvW)1w@k10;{WK|@Co^1Oenv%SKr%rL zZ_C;Ic^SF1 z%&@ZdGtiBz`5T5rokq03s{aGkkkgM)&L5vosKi-ACSZn#C*g|`X#rE^F&>3{I*%`$ zWN86y3Ok+J%81I5%wz-v5E+Ig>4m11u3C?5vXDg~hG@l27t|4_)9A)#hz`vB{5%mAi8HTbBTT5PW;FUWwd0J`w$u_DQ^I4lSD6cEf$E!ppY6>w8%l+r$q3S?K`1hGOXKo z@d<$?nFf>Hlv6P!g?cO!ja|7PXqMqgHd*z*2Obc;DS(vhdN3=|JuS4BzDHPT-bo>e4KcXlEGV_@uC&Dlvcw-ri^*xS0K)bMI8($?g>uJk(jr(m zMQolsr`m@ySQVQo>ca_lJD+f#~$GO zBHs{+MRni8Kk7sqtWz4n7=aASc}D)N^KMz2h6`a8rGnKINt5!@e$Vs8lL~{ZJBxt` ze99Fs#-cek{_yD581Y0O6a&ND?fP)xI})w2kT5W14T5BL6{(iWBLX z2Jcb=F{}R@jL>d0Ly-B}Fi=T>bpi%=iORFf-+;YmS?2oFG&4$8IL8l>##dUXhB!ng zm(iS~`XdBv+beilj*T14_Kq=UJCLb{W@BufI^gT=Jmn4wtnOhjI8gv|8>Z7PJ#H5z zZadE9FP(>LDbu;ww(8iNl4x&sXgCQ#w(_)f{6k-z2nA;uYJ;PzeFMMXjn=rd8LX7D zz2Er&oG>|4=5Gr<)NiK=pGjJceS+srBjvkt$X!GbW92J=D2){+oeHXll z4?bNUSU~VXMW6)A@1^`Rk;jEuk{PQMgs69)wxlC6;7K8a+Pm-6gI7?%1!Tc&7RQkE zipHD{iu&Q9%8;xkJ2#1zX64ym$j>wJ7;rLcaidw%VmPFajf)aN;o4?#jBn1$7-3Pw zch2B5BPDqC=mZ~%4iU7|;4}?brID*xY$pl4p;)umctEX;?0>o<^ub()Dgp7u3g#luEkAYCc2+LXKUJ2@aW-W(mQyJ$<2S0cq)Hb!r z1ABvBxriidf0s{nYiPO1jwnqlQL#QQJ@KCNo^TY_%%m4k__`RCzsvT$U7H;9V3Rxg z-PuDZ(4XF>C`5+@C6(bJ>;1ZJg8`BUa$zX!6d@~zM@9&g6)PJWonUsLtIp8S0{p|# z4NyX0(+n_m9G9seOD~v!vE=C#xY%&Ap!%z`!Z0P^6RXAJ5eEE*DL=O%;Y2CLlDjN3zEYq*W|a2E1RtL5Tfw8Hkc&)Wc&YUn$}@N16Y9T3$_^v*o&g+Tj02eA1@LGDk$N)P zd#8>sfFh#MZy$&~rqJx>ga~SuyoumoLPj>iCBe*TA_+>clT{Rfm)l0eW`M*at|PPv zaYg8oVdwR44|hDN5Qy3gyu4vEiD+pi)on|8DRek%Mok;dY=6>bGF`-zNoXXK)d_V2 zbs8OGrx_q;Am$KA?F&Ai3|NRbv$g(>3C&RQ+C1zycBbglxHb{KII&JVx*fZT;x!L&-Qh{7Wn4bC! zUw!!DyF7G3J&T#>x=sv+{8Tp1Hx;rzitKLlQSfJ6e_4!qHhJ~Zxs+l6G($ph)*>PN zb%L0*#o-)&Oi?uxq6<2lNw6S8AK_TPAbF-pg)saky%~HfeE9*C(&}<1T5Mqg+f@A{ zW#7csJGwOoK%2k1C!hK@ha)GbS-_PfM?($*A0~&9OyK6>=JU|q%bktx*3--jh9dPLa8lXGKCZU(PvDOZpAYBpx zl`R3P`7T4ip~yfaPo;Fwta4hx%yE%Zx+&EA+Ijkn!J^e_*Blw!ETz@euK91I2pv{e zXLP=ez-g4#y+awX%rcz=vU33ZNVl0toD`vD-W;g__nitpr2aljg?IE!kG zI<(bT8Lqy>qy5ZO5XtSgc6)_LuySzl7(Kaly^s6=PAI()NgGNCVpi>4XE+-jDGZVM zgC!6-L;cZB4z;k&!82Y#i-e+*oHFeBa2#QRP=E~YLEuBQ^0b@$Y`!{CKTRSMHoN;3wE>*!ys ztx?G&nvwei2Nv@Ky!=_}YHZ9ouFWUAn-%J!w8fK`3wK4Pm5?QrCOnjLfpmWZ$yF3_ zsZKQba(A-+y3&;zOqN=}afMo+#Zg^5|DB8Rlp@Y-rWz6ZwR_4KxqN{sY94 zkSL=uVgf0>+S`*ji@0QR{AF^iN{^XwN)Y2TBU%eIm1scClPF%Q7Y27MY#22mC&8=R`Y z5_>duX)r*}&=A8Hi!e@zW#_h3|2bqz!_;r)fJvOVZ4@MCSXPs;RF*ohP>)jUF(t0A1jsGHVdBZ9tc*XMuq8Q|4WL4d= zAzIrHA9$sW%#cBQQA1%Hw$-^jc!%x;;E&d$J9CG+?zBWJ(3&-{1oT-zICcFOm9QFE zj%7IwHtq1GvUWGv=+4Gr_;5V=emie(tH~m;m!hO3K0MK1mrBjSfW-}rs33xjr!!F491lS#T zkpI^JviW$AKnM2_YSA<4HcWO3In-6w{)Y06y@<{=&_?)r;0{*6WW>P)ifXx+KHRLe ztYgGst0B(}33zK@p&1e48ye>N%KXC?t^_3Z@X^7@Fx{Fc=M!EwFpOfO)rFJnPmP8X z;%B4O$eR&O5L|JrS&@>1>}Z2wyBZLvq&Y3xKxH{aWkg0~S$WaF$|w^%PFpWt%*HN= z0g36%p-bh1kzE=uyU10HHDt!1{kAlfw%5hTWd5%3Mq-6k4^ep$;Z^?9x<)%Iv-dObZfMV1P zO3qOXmr$SbI%zKJ0UNPB4D>+Rw3#S0M1!x?h`@%C-=>y0w$IXbHJ!dQU3De#Du#F% zrXkmy-|$^hl|%{Ie;=7qP?{VKDLH0xYQcdP`Vfkupld`I;M-JOTC-dGe7d&+4gP8b z$5foVcL8d2Z+#wJWy4yNS0}NOxYhvFix5iXu*m*B{66T4YXS(3>NKm;evo3m8#Fw zk%ZQ{{6Y&9-5W;-01&{R*ME!Mf(bqi3&b;2=j@&VLFpL-P|=`=d(!Y|oQKi&L*a|W z;COZagnwcSm*Z*=v53}MR>Yf3=0j)a--LW*iM-xv=I#g zwRzgxM8qiM;`z|$+eJj-(2a}w@C7T-)3D%5hM+t)=xEpUk~VC)b;e`)6orCtqj z!%ZY?LSI2VsMRh@H-l&=i}Wh+i!l84r99zjk4C@ZiJOmf=R(gT5>vyp8pHbU}!Xur)nEGF2#F2Wq$WUAX z45|dl#6bvH@iJaRxT2BCx*v^$h)Rwr!j9nC)TO0ycAn|C=CSe2itcRBDeHFneTXjCbwvx$n-W%ZA-*`rFz(4S5f67TS^aKhNs=BV zOJ_6bLH<2*QiP@vHvQ^}katW@rgy_;;_&w^$h_K1{1c1#bc5zQZT4WQo3(ieH=8?>SgBmV}41vag!5YCs((J6cbr{smVU0 zIDBOjx^cBrr*gAJnsAF@#Tls|y7T(tud%yv2u7ht5A$6C6KAe%`NQyM*^(T>Mr5N3 zTfl)lNqmtbUhp>3_Qvdc{kX39zVz`7#x!a~?P=$xT$oJ5B2pA?9`8=%LcI$C)McV%( z-J$&ebyolIl1Er#xI5S@fhBr*i;u{t88lZKI;J2Z$K$ek_KOv%JtX9`*YQMTnc5Ub z*AlCWRo@U;{PPC`b5BE55sPYR{!lh*_n%p3r!DYfrMLcFRGj|NII7D`ho+?f%xYIo zDQPZ@8hZNJZ|1NGyOGSMMJW&sRS;pLu}>dDwd}#w9#sS~4~ZB`f2BP+ko0Yy^Cd;G z%5W{z!%UOeh(JIucn?UlAO9c_2{$6A#K3!OWtu>KR1bB+y5xJqVP(>r(csrW{FTjQ zTy)q0Czv5FN$@gXT{BYop({iK?-W;-o9Q6mnCT!WNX{>B3jt8xnm&#tsqk!F%$xFO z@L|daH`@>Lc{88KPJgXO+K#|WYFf_OlPPs{kNg#Jk(M$QUj82+x zuP>_}sw#$kKIEkEW^`@7**^R&cPDM~#KY`*jV%p4FB;NmXG&&73tZYJqcV1Vg<({W z17G`7t)MBX5;mj(qhX193@vIPbFnkNsCAd+9w7m=4yME9U5n8;M@^;Shl-7wNis;- zsZunJ0Fdj%9BO?7a| zL##Ta?tH*h*!o9?d~M#?HDxBuoV+$CDFgzTO$2WrJw`Xw^CyEv3~rmy0N?ck+6!zB z2`-6grlAv-(xb#;?>1s3(hf$Ti;&tNJz)(W1*AnmfK3hH*`E~pLJ7pMJiICjE-}EK zTMTNq(_S4rv)rQ3nKaTbH$b8kb9jQKbyI!~>==SHD6$CgyNcYpyS-O-`XEM!Sb>U6 z5xkACs}I&6;(E*|$_>OLQqLeLVkh1LThLXh$xNdl%LC~KXVwEhEcelYI7vBaPshZH zu`miQ?*X+ABGH`oSByimZRbG1gk>J4f?4NUk4RFP4mG}lB~Mz*+Iuz-`V}9jkwk3Q zn=nMfgDV-)GSj_JR>yFBFg^O9k0QS;Bi8V-U90@1qy!?N`W_5w zw22F^QHtPb`z6zZj&hMW8~Cq3TwPz16RSQ$dV_&K&d!{5O$MNr7#kvhBfl=cpNdbg z@b?p!l>`qQhoaZHw#SGt|5W4EMn!0xc-QWfHy7%B3`P0ufpREJR{x?Wf58i zDFX+5xjz2v)sI3Su-Wt;llfCTEhuG~XvRg@M9Xg9Y7e$Q`5&a|7cogRJgx?G4w0;c z&)42FN%Sz$tO#mS!KtOHB#r37Q$zzpu47iUWb$3ncIW2M`?u0!uF~}4cT&}y_h)j5tW9`a2aJgwhpdO z)SrNgLsRBrUcK@VMLv2bY-bBx7f@RGkxd_I$pmR9zp_Pd82^h`UWpQ>5ktWtDa7oE*Ga(N)CnryE zbJJm9uD0LhDkB3r*nT!}UR?`KJ&^KpRxvWi7fZ0r_2NjUUejIjo`Yn+nmkJ$u3Ed2^^egfG=;(&h%6dV(KDY z4N>Po*UpQH17t06qL$-=!G)1gp3wBZC6+ko*t>0f8wgBJI9c4-@{&cJ&N{Z|^;)M5j40wAt|>#~UU}c}(E8gg`T;On9AIFJBx8 zt8PpV59jXqTK#F{ulq8>pWQiSM;E@TfQY~?KXKB$%5LNK{TVWhI6%Z^KzQP8P?0JT=p?Y(|{`SEPrl#0cs zx%^);WQItMoMy9WUOidXN5>V0mDT+QZMHFdVde1w;z2+o!?4_88TEcDKt7C95yrtP zq&Y*mVKBrLtUMW6l&r@96NVGul66uRC0a3Vk#mUZL%yB6M~8wD_`TbTI6>bo)qfO@ z*C@<|1NCR7ruJD z;X1|OpXjVA5))(5es1lnPX;J`5;w-+I*8#Q7lh@S|0k17#uc%5tgBPQi8&U;0G%NLsmCV1ydN=G53rQMS z$|eAe-m2=);qEiGI>oZmd;HWqs{c4fvD&^Tc}Qx9TGrcPSa^W>qX{XtX*meWCIyB_O|k>Yx={kDh1bKY1Aeih0FX0g<) zxwmYoecRpbcZCk447bQg6n(Rp+y-WdUOTqgp(K{T z_abkf2YoI&CRjEbM=0f1T`nLN_E5s#uF_sutua~3taMH(egtm=_ou=c=tdaM52XXD zF`KMfb{8zKlH_1Y43cfs?CQRm+z}_9aFuVS1n=UK&s4C7CwKFmzKMFrx)gDth$&Gt zZ4g6Ox>!wFnuM(|ejub+(BZ{3xHlrcr+LB=(X`CXtDG>3v_7{aw?iVdLU}wRQ9)54 zJc1d@Ja9#YP0oNMa1F(|g4;202d(0SBkV>Uxki9Lw8W9k$Cnn-+D4*iUgCgcT4wtK+<-+$?cY zJ|A-WVskH0Wk69jAGG%tXZXu9HK;fA7rqJ_se0jWQm`TR?XnW_9gG`$9dLDjc}X) zWXN5-W9V29^BB@9p8bP&^~uRWreL>&v=ygByRj_K%!X~#ZZH(*8?u(UdAN~lhV9$P zU*dOcIAAtfJaZg$wU<@d%-8`&l9#`kLlSbhidlQTF{8o^wj0_T=}I5yJKO68MU-Ss z-*v+Qro_IWFLtQW|GbjAsvW z<|!oSaUcM!3B$j$186P)xvM$&lrfq5%74xkh`5&cLGI4Pdl0#WN&o;KTOmkWvVTL0 zP9>gq>1@mWO7Rpcxe5Rh_*mJ?@D}cD7V$c_JWc6fvwxkj?v7wyNC}3WHk>Xd!;y=j z|5=xJ+i6dml)|Vm@nZWtw@*Rm`;c`2gTZgMZ@^K*25HRQn4@Dp>J0~H&R?fAx|(zG zXe>-1Kr|Ehz}5xkIoWFba|!6H@D-nq`GuA{vwce0NsHfH;D*8RrOmz*<4YLNzUCkm zs0XFhO)lqpEw5Qa6iPEm2qtNN`cKqtpVX(9 z_lpuW6s7`F8QaeV>op}bJR1W=!mX)k5N;_Wm~5iG$-8kZV}2#KLXozM2ayn}QO|89 zvR4E+v6boiTMrl-W&c5(7$W6l@u%Tfye}-d4~U@!CM*xi5+MWqZ081VqGhl|u%P(k zP$A}9CRePF$2(BnNk)&P)E>LGfn%EWW{lbkqYXHU?#XV@I$6eUjTN)bPQ|2HVe%~F zxO$bu1=!=*`S%XCgLzD-Vc1?2ZLi{`y|V1L8PhM0HCKSgVf#5eWXO0uw2wv2n@bo( zdh|du*4)yHqtbrlT7{h6y(8C(ar(H~OT%{9>}%3~ZQ^iYWpQp8^s(K4A_9P2h1!i< z$$whpQ24ZR$H>SyAn1gXJPk+`K!(5qhaES)lj{s=JIkylXs!B;6&p%2l~1CaT^v*pQ?(RLv*#B;M!k5Tk=PHEpy^l zb5PqCKbjDqlw48$fbE*-GsR1{*JRZoS%jIezgf0>q8v5X&WEyBzMK8lPo&@8q3l)f z?sxWtO5K3yckwI)gdDj!dRD6(M1t=|=nlraC25u-;Qm9|RbAM{6B_VbJf4`bYH6z8 zb|q`)PbUyAgF5K_C-Fv3~tcYb6kQW`5?)53wgCKM3?(#Bd+2gY?tRROT2dh zU-yZJMWM1#FIjikIEEr>`{|r+ri4 zx!_GL{f=fhaz&b1MviwhvpdlYq&B6Qm2EV$Jf)d~G_%rN3QvAf1knIrzZA4{sVnm< zQ<~uzP-$lO%-#>0xrEot@$!r)&PRVX9(Vc?!Kk=V&QOTgZuim?Uz5nN{Nc?^D~cH> z8nA#N>GS~<`Je|vn=y!dIqaU`sN_G;tRv1J0|)DK90=k-Luwsn-3j&7{=S{y1^_<=o&e(mDITFg*u866B_lrYF0-xI) zaNg1wEc(dESTBz&v4I9sabMP6jD=mC&hfQ~syd0)W(_819VBcFmfXvU%d1)e%Oy>w zmEM)7D_@30BzOV$cKaae7ct)1S*K|T8eT(=xLR|S3yKwCO_lar=n{YoCc?3qqNU`q zN&Vj|5CTfX+l0ubXyWH05AepVKFF;`Y()ZrqRMM}XK4wZwF0IwVAL$sr)?s|b0PK= zfMD3Xf8-Rsn-_bIa;mXaEwpcYx%y0YYOk1Twxs0b2EuA;=(4Si7TuUViLa|#r%AD) z<5>XT&3YJJhXop@{O#kC;kZUrVA23T8o_cNLa__+@|ESYCq$sgKDjRzRyuksv>Rk! z2+AO`fl{R8C&Hx>{X~cue2ZuxehN(zIyRNh`leZaR)r%QQb4zvkcQ;fpZ;^KfaqS)PadQ=Q}ch z&Yw5{zhQz&0uq>aiqGqaXqyl-oJuc@0YYRJYs7?y{|JZ#(jgH`WunO>E6^jCFKg`s z+z3?r1WT<50YRzjX*~|sdY#Y?!ygM|Zun=$*0uUIlpsi!HDGmUHq8CBQf9Cz%zd9h zdZcH(#8adECAF117e+4 zr`GU6`j6cxDIgdCW+gsEfWSsDAq|FvzZo7B5zs?YIYK?T%zc&^V(iOwU74{4w-=@0 zlQz?qQXIsN7RlCocH;GvY8J~M=p|?-QQwpnVy%2zHrSLFW_GwOvFwg|V$_^@aj>~c z7P+cvs82-(Mj(Z=1On9zWy1w`R+2~cm*Z3$VzcC@y0&e;xdaZ8@Q>%JLWVMq*yRER$7>S(Rm#pEz+U{_e|8l3o#uEQHW57VtXlG3L}(}9iJb{GB+i_uQHD`N<#qFeMXz4VawHY&};9p zf|21aJ`7WEaZ~K^3jen+&)dKMtBhj8EAEk^P{_G+6?zAPKs}jXf#eBe;pl5r7m?_%tlr~NHk`Ll03%2vxP(`GL zSFg*vqEN-L@>uW(h{~w{@_Li}v#iWT3#b}vCh_%9R*b`5qOKcfZRG7w!oi)rgl^f86TdV&Joh`ws;#uNNmjLOZjFTHQ8R-;N zCZ4}SP(hi|X_~I5hadjG$pzV8eQjr@mm+!=`8nnq`SKC~6<#Q4m9pSy8eA)2$?DZURi!NZkQfWGRjeQuJmE!%9?_1#YTxhxwLRJ54T%_>UoxIVp{10k zoO11pQ@#Kx81Qx7eA_e_*QSPBpS=2ZLGn?Xu}-|zZB1tw{9B`1oC7M}3r%>&;I4O2nKn-|!BcF`kku_p z;k#6{1;~ea{(_dEq+`AO7Q!IB*}B@+SI;Y3FoC^#bBcHHZGY6RaKo0TW&kGM^$BLo zWBz>7)IYleNfIyya-GJpI1`V2SNQV0u;G|}b5l?k?oyQJZ3?WUPA$k8Rwfh#+f4PC zZKjn~=rV3;Wy*)V%_wETZkP-%Af3_?xP2=Yd)(%G9Y}V$)*F+qNni?WWB(!gZ(PLy z*p1P8LeF#@Y43c@4#O{tNCinr@ETGYYH`g5Ot8mgf~%=wg&Y_Ry6tq76nBguezQII z!ukv;EQ~)O*$i5AnGV@wfNc9f zw*yXGI>^+qPeo{?gE(WeAJ)LSW|!0yL2=??-e^b(0!dCB*MxJFn*MZSP#`)^dSu`? zBs!9pq;G=aX``W&TAR_BfzIfdltRCVeK_icoIvBQAqOMIxx*p@FNy+1Z0dgVbk+R` zqBz`j8AP^)Ljw_GG!rI4Q1CXA5K;?-aG_xTqgzTrx3$M(vMkh2lK>H#%U%w2MfeVB zfUe;Ddra3xKs(CES>mE=$~AUW=|ZD z1npcS!$GVNdN@`5LZcmJOC96I)0!p(4wF!|9Ti(ps3VB-Ub)+^aITRBidC)84ro!H zra`n$7Ec4ODZ$RzWN`*WghUyVz&Sf{Sh|P{ups5-KAoLzBa{!^Rm%N1s~KxUa7d6p zicVFNu%9b-*$13B34=F9ws?f|*8ma@o}a0~4Y<0w`9jz{{~at?4Ya{1#mkl6>B zB*i{B;Y7^Xs015pz3ImGjgpwiWOrzmesW0wKZA2P-~@hqkiZdrN5*1|6C&OINZ_(h zB5D_q;A?QxpncUBF(cV_M9=|~ACPbm}LBnnDmY$*arSU;cOr z7-KCmxSd4IrzsfNX>!7rBzH|3m;c$##4UbV$b@<5$#K!DeLF9rq#X95T{|L89a~JS zC1iRY!QjUGn{u}PPDe{LIJL}+9_DTlifto?F`45_9C7Rq!}8bTvl(_lg%1qnS_0}H z79ag6q|QiWINLBZ)@=&bVYW?>IbYcIrYWe(6##3fdxAi&b9Igc7j+}jWF~OkT;O7r>q|3r#qGE`s+qAY^_5{w9K$a zg0|ZZ%ry~pDwHkzuH*OGIwi!?*S+f+b(0kn6Tt@R^i?dUF(sHF-eiVRg~Dzi!^O1r zksun~gY%FCV-Lt>Y*8qcVk*{`UGpSXo+rUXXAs!_;T>Stw5G+HTEF{(HQuY*N7z9{WLWe7mhnNSfl`e$`H#&njs81wt+oB{5LA*o-#ZIht9%$HIVomh z9zd`TA7@#+DXu#oZxdC}mk;|ynBc=Ws?;H;u}0qqLtSDRr(kmp;bTIXIwfBTBkcqy z*z_Dkz$JVuw$Poj21jtKoGy^2L?Wz;ls6u0c%BFK)0{T)6Zte~4@#;wo(M>_dTD&Q+*M0$z; zVvj4LlTn-m1@}Voo;Ve$8N!a}i4G1JkU}8s{xrY(Rtc}Cx9Ah_#sWcyZPm6;M>51r z=6hrpl$(+kK_c}WB+SiNy>vDW%3Er+=w)#zI=mft{S+= zf;kz)+bPP7mSb>Y6AmNQ(qxog`*UFd&c`yLo*AGQ8-kise4NVm!FB2i^?{k>?5a2R zx5p<5sZyabQGi7x2{GVYBFa)mEXFaKh?gl`CV&>S4IlZ3pR0>7Bn;&x~Kq2bP#pp709 zC*Fk`wl)8ua5Jn2HXY`NhE%<3zoWg5!5reS5jMP$dB?zMpJS5##}IEy9cv+?n*3SS zfb-=73msfgx5i-Ns)f73A|$}iUOUv#t^bCixWT9{sC5lMk*UQ=UVi}4Y1O6F)EG7+ zpxLIdG*nrCAq^XIT-z>g@az|7SLe`Sc_W|`;QONOdNye^shD9*6fnBS0QEFZO@kOs z`fuG+ejq!2$ifwV7|gaRl0A3BwgZw$l52{%2VALqR4+I%l^v~~?&1MbEwD_@GNX)= zY%?i1$%pm`ubg(HNz7n_Oh?wq)fZOKg0I5S2!%)DPY%I6veW6nvf$y0L5 z%`+Y+Wc!A|5EF=Odwx1z;6O=GK4^jxvaxBg zS5<3qVL(L!#}9cJT)4NG9*JZ5EnpMbnNe#m%D*#*qAks6EeYsjCB&^B@cZ&hdek1) z^e#=@HW-j%Ng=EKg%pY?7~ki{LYG&~jLUYJfpo8h6!g2PW%v_@yU{KmB6$S9iWt?r zU91)Lf3zEmQAlng6(PEr^Idpy%yC-!zI_+SX5~{k8=lG=-rZ;9STxYKH2Xj?6R!a> zSsmbe8Zk!8IK$}3dSDY+U=2MR0^#=7d|?;V?eYXJZWPIhzTcofcI(-=X)qsVrOACg++2bLK#baGfU z#0%4xaOF{Y=oFW@X_@@xm_E4n2hlCO+Z3V+2u1jfj$_s`^F|k)D%yRz9f9&WrpN-f zVNN{l@O!-vJcs9^xS}M2al@DioPndf{dgBZyRM-yXL<yfn10!#!q5S$<}VHVB6 zsxOEpLskDX$Z)Z4?hG>>9!kov0y2I)l0ehsckFaKwZDh5MNN!eDS$za7p_hgbZEU{;X1<+jXb zQnnv@SN|ju=aYP-MJ_{kkW!GC)-C0tI|5VsOsOKc7;xK)ZKPl*Y#hWy2e$#+4(yO1 zQs!GR63^sm5pD^>Mf+uxxx|IgN+@E7i$8ta>hQr_?Zx2+$1kx|wx4@PjQR_FxM<27 z4w?@cUuF?DGRgTfaCmW2CSfr3?RhgwG{7{%cepLYYbTIodkCCkMgoma+!Fn|0I8vm zGZp0N-FT4<@0Lg%x4qy>LnQNNncSe8+Lt-j6Z%cBh`MglpivRbYfOF$3V+f{%=9*= z+lfkI!35xBbzkASyc#h81JsBVmhLo1B1D=lq4q(cT*$@zN4hW}Z zQNV+VbNX-&Fzh%7X_{^;HZ}1Gd_-&>E2JM8p;48xddtG2RCr7>FGL>_kFyrwd`5{c zrWYNUvj!I+M$k!LJd@Ok%j#S%(t;B~R;;p5hCBe}cZ`9+wikXsZgBLTjc+naJ{s8P z-l4W9=V+x1aeXsg*VKd#c@QHjy%x`lOcpTQJ=d+PV92>{1VlpnA*#Nu5$`BQj!+5W zu>EIuJjpy6t6v9Q#ach`MQHlQFo9yOJ!vgQn)LJZ_hAsC6p3?~xgVi{`OWmO*Q<#s z*Rd5(0az#}i1A7w0x!t{u$9h*wW}>Sh>uOv4(f+J3)!C==_+y7nB`;vMD!5eqS}$f zW7^AbHIFOxBznFcNpBwR-kiP%te(@o>T~gGHhq<``4zA5q|b+_3?3pOjX7v6co8)c zYmI!r9b_jLHSOn*iKRm)5W3o`5Cd{w8hL+q%Y@u^hmD>=hvA&{f=okcrH;}|T@o{Q z>(_c1(X0VNFrlNMcMEa|6vEQrnIv^UaEd6}bC|8|MB6LnEUjPOTQcl9}v0QtHY za@u{NX&CO8M)4@!4G%3;FYG-A<76}q11|_IpfEzQFG@(paKZ?P6Q?3%I&@7seg;nw zrqdrH#O z+^yKli!y_C76PJSBugAVPASQt6%f8as(<%$`e@ABP~IKHC=DbabpT@*PvYzC#B*IK z(}if_fceylOCp%0FC4McM+%}*_7I8(458E=QM@u~>m)5wk)X$}K ze2o{xIh!YCS`8?e_Q8C|!ASreu}%CuirE@bN1|kgOczV!PKfR@D&iL7j4RAGLJ?#@ zYHe!xa0BEMlkKsuzkNq`rggzg{$jCA!NoTPF^7)PmES^ug}UGnp7ektK#fF{p2@_? z6fC71T14cfaY4{=w8g*67&WG!>mzylxKmA}HF2T6vI`w{Kt*F5aIP zp`4syKQ123=NHnOF!}5u9^3vVjXhZX%*>JTfFI&Sy$!}v91}1kE$TFSaFFAYp;+m0 z7>T@-N7;`&uOcsq0~Lgn+MmkVff0_0C#9xuG&2E-XZVG8wpn~ifA-wDA82VcC35Ab zpUW&R`EF1D`&6!R`4#Tf_v6*lMse&ozn+lSFF5|8S3Y=e|33Hjko7lNI8OTe!;8=2 zCnoljT*%TLFbgo0m;wNb8mE-sUYAVBRpbgOb5@Iv5ONzx9T8t(c{Q3y=O$1+cP%{g z1{sD`G0999&a11q*uLs(`Iup~-^flWMIqhddw>)l&)qCu^ty$x$*cMC+CuR2xfPo` zei5Q3mrXf3+|#J;9Pt3&d6@QaAw^u%p09 z%19Q2CeKy5uSLYogRvYQk!44j%Ki;phyW`kXD#pG)kJcHCJQ)I#sVNjBGWQDK=}mZ z`xGwgT@VF@?at-$1E!{<&e|8fR8q3E|5x(jy$?n*kh3b|4^A>W0 zWy}ZD^orTdjJG)2d_bJ6ufhNyhzQIAK1QqsYD;h)4Smv&G>I|I#x_k)*QQ-~Lt8Gy zLMEm-&X46-v`3?}B#()r(?F*z_)4kMP!_DIv9_i>j@3fDWGjdR=xkK3hc6PUN#v&J z#CN>zY8h(nh{LwGwnUityuC@8l0M|10 zXHL03>&{0ICp!)#h@O=>>A7e&+WTf$ihczQT&5Pi3l(LImSt1?N6KkM-xCYv&YEDf z^*15YmfHYF<4!Rj=NHV!5(W{dVBLvU2PCuMoFy{}>Qzq;Om|9k>MQFw_p3S!zlMJ? zH2-k1sy>|e=V2K5753@FGe{3er`uDF^AbT_C$d-^Yx-8ZVSTGhdhKcs^d=2!BQOp24=!h?6(2T#>sH{|1LYF8g2Z#Uv1YbyhW zkLUKZ>Q(3K#eN7Wz|Dx1zOjS8cv@Y1-{Er9gnvo(G+&`Nr<`^g_afD9Lt4+%mQiJbHq0nbEZ#{1`-8B z+zS?tvpF3b%%{394~@j2BtWjDh&rTAZvwG^~EAH=E4*&3RY98JS)EUjT+lF>rF@ z$-$BVd4-Pq&yD&L5L|eJT;v!}?iKa3+Kl)_qy%E_1Pe1{h|iS_JWETe<>@RhFrfx1 ztN%^IAXS>BuN#6knLilP8o&Syu0PBta6gp&RHSa>5ki4n!)vu!sKezMhNpqvtABZf z-B*2fj>7`<(dwaW+>*DYsQ_fIUIs+miSsD(`kkf$v^fps0vFJREE8SRqHv8N z$v|}&Zvpr2kbyVnv$YlMLw2YDlQe%~ZTMPbp*lunT2#j%G=@UvPyO|Df)L@D=z@*= zQm8*wI|#?F2DR6ZKy3&?;~(jDwt>*Zw{)?4iNcYIzK@@vp&S>jf^T4i)R9*%MFLs< z2V~!-%&@=Qu1eF$IUrrKfhR%@IE(#Q7hnC%w_=5jI_m;l84M4&|K=lnI%Im*Hs=?M z+l=t{GKPPS6+kMYXfq&2KASts{hUd49p51>Wq7~-&B*9Un{@t`L$859{J-r5TpVBZ z<%lq{HK~0uOS}qfrl%@>@hk6z$=ns=0Ikjnb<^c0-&96LOt?`kA!B$%sAUl6SC=NL z0)9kHw5kq-5CZy>;8CCX`O(;DMfLVM=?6U~I$v!6-ye`R7Sd-D3jk?``4IlDdGBMF)_0mzaMNsFZ4B#ZzvRr_Pgc1{hZ#p>oRVr{z!iqlP(P6UD9L0}<8 zjCc{ojoo;B?V^H#gCOwg<#T=$mv^y>4wbLFminn2oyXw8JF+pN0??QNNFB>DMBy+I zOTK~2TVU9^9!-cKJf;`PECp2>IOP6chuavW&E*gbG@sExIQ%Fe4Z~Q`L4MMjXGT}m zYkQA4a+S^)XLwSCypB?}`H~sB*C|56O*4=p@& znmjs(A9BE{4C-GPvf-7->eme2+GB%<*|LMz#qzUx_Qnk>Bl~^Q)pT51vcQ}gFdvb}pu@fF5TaFB^I)&Dk>OqKd=Y&P_s+JFU<`j=?Q z7;<-B7tbl?88iYSYwvqYX+#UgQLFwCQ94_S(j*RULJFeP%=gZ_bX~m{l+55%nC1TwNJ2Yqhjg7th--5!E3+)RTP`mi7CfQHbK1 z)w7UlNx-w~vnf5>q5Hs6_LqxQ@SydVK8g%iGS5yoT^j@IBtSuD`z=msg4?hUs!JU0 z`x3@DTcb0op@y5N?qQ8(KuH0;Ec~Q>jvpCqU@K{NZAlmOgvQ0gXXcob4o7*8o-*Bd~_3s#m z<4*-36y~V)ZVu?JZaXiF2MGM>IZ*+c9Ww~;#*t9#FEI`(_l5UEgV+UOK?d0He9xWZ zh#v5Y+R;`pzd39T!YbMd3j);hnc{3VU`X-^yEIkZHjg2a><4hA{jiYihySlQFM0%t z5s+O78^Vb`!uW-JuyYGgrMOhSGHWEPP8O&a{m5;CWjMG|$pUl7eS0mZO)<%$EmN_; z{&T5A!_!1xfoUN=Q@oTErs-GB>y*u@br&;qHp&fF;^mZ&4G(|<%v1IxX`nAM@d(1j z0OQ!2=$Q1c=p@w&eAK=J6HH??^*K$?h1Gi1%cd>?LQXZ0UQaR&5r$xZlT7naIhBBA z5iU?AM%GRQioOi?m3tb5@}Fv8e5DFnI=E*y88_PCU)(rwUZm}v|1&{p8! zlHN37uFW?D{AnVPNaY8scR%`pZG`mL_WW0W84{HHJu5KG37w0JrTfv>kK zPvX2RcOPot@Md`^%i7OmEQ;nC<{P-Nm_GIoe|tb0risJ7F|tCnBl5cWu{$7*e$k$p zh4uE#SVsRqXz)X&d;RGcJDyApYT>&qPGcg;pY4p(m0GFAy zJ7BbSv-Shu)K&1LC4gYv@_rIQe>V6>H@6^=K19rE2wfHM+sW}7;K~hw1#7V!R)`&0 z=tQ%27EON6wIF8J3yzDJg-lc?hD%TK28fW^G{@_=PFKnAf>R;OpM-(E52d~+pLkrB z%_tA4&?xyvx$V!ZtWlmWTMW_P{J0^$Q@kjZ1*v}*tN9#@%u?7UK7fy1SKRNiGol$7 z*d!G_RFlWJ=!P0bHf*Eq`n^l`78~HZi}m|iiQZ*i_PJc+z{>LM`WUm0wx=U#uV^;%Ie= zR#EXVNgP`Qv`2SfpfZgfErSCVrG*r>!)nWcZS+Mw2{j%UV0Z3?DVC+7umXhr>f2Ob z@>$*FtQk%A!k&{+v-jF8Z@(F5O2WIWj!*BT8J_(NfpG zM;}2r%hT4WgOx2&k%(dfbhBgQhu~+>R5KC18=@DG|0~%qDp^6v|BC7I7&%-tYZ#9b z#@7|kvG&S2&`+I~CZg`x5t?Nx1W=Bq4AQ{%yfOO;Nd%s)>R%ty+pZ2$Kx90!?ZeWD zM&4U_(9bt?pAU4D^pFjFoc4X7eTXk_^2-}oVXEpcV~GarC?a`n{tlRjTi?+=`}>c0 zRx>{J>Yi)~a>aAgzEAYyC~&h?G+JaGvfC3BQOkquLZzP+@Bn!Ln4MMiZ#55-J(C{VN&$-IP0d4H*nM95v*I1|l*w2XvCy_73Mc64_q*?r2xuFU( zS*gNJh*f~1q>`$%`5`jIjdXu^(UtR+hyRIh+sa=}?$L0;TrqkCAlqOGV66V*S% zDr2`KgWxa`Zx+W0RdR?^TakX^x*eZ5nvq<%yK9RM29_Dho8?d)`%aD5ToI!x=b2?f zV%sjuR}|6il|68?LK@2a<|Ov-80cch9ZHL1CclxE6IYvqj+R5(0A^<{@bz|%?=b}h zr=9b-upCgacDq74%NlHsyXBJVZV2+=*%MBD8Bij$59&Gw4{}sY2FP_W_F<~LHszlg ziqQM6Q&x6cj9DQA(p1%LuC%TyG}hzW1&XP??MFybzp{Qs3DQ>}@b;ygN8Xj!TR{N+ zpa~`pZ?c+P))@L~7l7%?Jt~YSc9`LG#NjgZR)a6_Kn33MRGwnZ->KPPkS8z!|Cy7| zxPnMHHzlgwEjK1y#%j$4P=^BFa*pFwkqz>#eYaTuoCydVca_8#CvRb@$@Y+JggB^X zeUws)j9OQ2byjsB0wwHFv!TTrtE=_1Xcetuuo$5ido+5nXAUlWY0;4n$(O*?^1DdT zvVIpmtx&L$T_5@QVrehtFPp-;%n^X6i2;eh*oxYmWkW}9BxIJMs#Prh#H}$eYHhOY zanlMXzQhyzfFPoY`lHQ-_Hbdd&xIXJjXL%V+uQI$b+8QLoY% zoZtqCJxDXU12~lD>nZ%CDp>0j#bj;2j+)Qv-7Pu=8-Ze}F!Hg%wFx=F)3c^%!=`9) z-c$lH=wvi(eC;jk2-xx`(R=^26E_}GHjUSYeH$DKyWY{6b(8B2iH>$elbZeSPUx!11Tttd5c0y zR=Y3^I0F0AD+_s^_sGYq5GYYz5FuT^g(w7N1{r!jo(Q13n4<(NbtGXprr8K~0BqQt zmFS$y7p0&Q+9brDu{2zq0QL&FF=(dT8ptFx-)21b*!@IYj@Ex^$b*qqK!gxx zD(l~&(o4tMAgvl-#;;Y^`A0+*0di~r?!deuMjCs}#*N>*>zg41peADt3dt$8nX9$0HB# zz7zHhv1p5nC(fK0KY^FmnoGx*&(x?p8VW1o!hw4whvgFV>ytN^IJeaxtY##=JjTc` zapY;((ugAmfm0!hNI5zeu@xc~1R(I>Uuy!br0jjW?s#Ok9swej`$**9nae{C3ph2t zqVdtm5hv+p^kwCa8ve+nPUT1v#W4w5&@@OjFi_dwez-KVxBw*xg;_6~JQLO$8=wsY ze`DB5U`ZgqHgB5xLEiQNOmhes@kg*))3a*Wxb)!+rCl3JuB`D-Gu+xC)mPfjAwQ8x zF;$l)sIz;rdBR!Uc1)M+keqxwK!%#)Jb2hu(vIP$3a=U;Vg&2W706AZ-q=nA*T+{k zyT;aF-+#;G8Yw1gu5zc%I#IF{%^|owHY9ZGGCr_^mqQz=lswGtX~@?#>omHJ*|EW% z>K!eONOm>C9L$cxE9?RCHA(U}T5+BZy5e4dD;&xU`q$(f>!?LWmb3HjRGo@mIg>LF z#y(x|LAHHIw1z^EoKB7Rw%;+vV(CzwF!6N8#gPoywloLr2Kg*u4LFU1^yPSvIp$VR z+yc0BIN<5=rF!fPg}p3odgSW=!|eL4jf z;1Lk^7^3m&4&6*<85;$M{zqdEC^cIP&3OnAqp8~9y&A)qiVJw z1M1^zsdmgg z!nd?QaOxEQunqoW$=|`NqO5_z6|(=3ql>Olj94aPOR+19cCALL^}{42XZm zK?)?&y6k{08@09_M6=)$E;+ejo-j6Gq*u?y%2*)^1jv8I)yWISn7e!$_|gQzf6(^q0-eL`uG-Tw4Ps8_=i;M78TJp5aF}qk8167$=>3mz1ZgH^- zq=m7%z-tQ>ioZW6#}p(6l8L9n2ac0fxC>jiIna|A8$+mEJmAF;R`V{(7X4`#V0Bmh zOl4WszJhc_Bh_~&i(*l*rIIo|>^|@o%R>t|G8Lv!=+pDaE6ych;V5Xy1S)+S>$B-@ zKnIhQL*;C^0AWEOF*4uTPCZPANC}I}+O5IdT1x&g0Z77TMNJwf-sc$r=0L;Gnl7Zv z1YAjL2_Un$kiZ;iAgtE%GH^k{O9b|-JS>^@Zv@06MSX$7BY+bZcZjn_VgEiug3BD7Q3wmCkcc&OZ^O!mj@}t0e8uhv`k#!k0?A5DI)_`oMTyS zT8U~YNs)iZA9cNOK=6x(jcZPoE7LN_W!aQ)=W$*FPqMnZs1x(^l(4EGeDJDn=?09d_(~7!^4RkJ>IyI1{DPpsN|M3IS{?WYErTk z-)|=z*zHkE?pyH6sQw6I%)*wb=pCa%3PfQOdT}MN`l<3!wtux4Ou&-kcHq@BgqqGG z`(nn#cm>H2;-pt%?qS{Zp=@0aBN$16a8rN4Q&-X{KSW)FdQK0|tVS_= z-TN7wC%dR{kBDg&0=qz_)DpM(`q#iE4IqMQ89r*5&+ZbTHR}VI3N#DxCy1Gmj%=Bw zS@3G0_Zw9Dv06~me)dbao8-QGjtA&;WZ71L|&0}u7DEInN7t?A3&B!0*c(HGqZPRG`B zR?*O0kLgLNDzPMZ__0qOW=8fkSupBy;gnHtTSsmCt0Ck{~9>v7RR{q1}2Q0 ztok9q#}c@|m*$#h!kUNzajCvb3&3;-mX1P=0gv7(VZtLUcBe-SfDjJBsmb)%7FbPE zVIpyVm~AKV3q|cOPD1N0)UykorH1BWTp8jaYY+XiTG`f<8E9(`k8_@|{G~fHCoK-v8 zB_n7TkCSOeC2PzCyXW#;=V5`Rj92uZ`a(A}S%7i0YnAh=9psJbv$1*mX5vWc19Zd71*{KNu>exjKA$yuD=T$mP1mlu> z5da3SQs@rI8SU^FVbxfTJsQ98Wb03JZ)-zV_Hj1 ztq@zdHh*&=$urh&5-XfNhQ^M6ce^yTfRSj<4c0@-IK?2UUv0XO`lbC5vbw{#MZmX< zv6(3s+y(4@5BGfLUOr7ZqreCTU9({P7^4B?xuu7L^;~0IYYzCpL4NJIF*DUvyDZrX z3rYvpp+vIw9mRuQSr_so2Bh5Q)W@k))#e1tUcZwfRK#`$m?B zIW>swvZ*i-vV)B-sUQ%P%|2_gJX5=o$)JKDC*JpHxo2C3jwh_Zw7<-k1aosaba*)p zzTtzMWRfOKbb^beA`_vkozGk5+$*qR!ymavB!ie#GR_?~yZ8!1CD1IF7{5$ZP1yNL zTrkX?yn4aBT$v9b?R94hzA?R%>#N#|;n_KGcbEn&xmVv?c{BZqybva#yqomTnw=46 zIU)HePUWgz+#~Y|V*rE3cx?xXhmgtSU~2_Vh6W%q+V(;9nF!@tS*){E8ZJfv?~eDOdEs8LQlIp8UX$4dZ?`v7Tk9 z+*z0FZp6@NrH2%{WtrT0=i^ojW5=&?Wv?tsf@Ai-7&q(xoTqUkna%`!Okx|beZAfP z{U^DF>t`&BzPEe<|D(PSGdniXc1@55YUMmy?AH(MVOcWT=ivnKJKOu&1)+90M|ElN z!f%LWjXtWL>r$7pdutyTG{71m?J{O=P|0(N_EOiY!XaGsNFh@i{q_53yIjfD8 z8yO}21&0Pwqx_s0kJntKS@xzjoJGTT+dpU=6}ERDhQ~wjx2XO$pJj1L zaRk@w;_*RlM0fphBz_PowV&(wfwK0QreHG|43Iz9eHuVTn^%q!K&3xCbh~E&m_gEU zDV-ys6Txnxb#VpI?u`nVWKF?g@K@T1;~2c#eYL4VI|pLa{wr(`0_Nd3?18U59ACqY zkBn@&$#^z*HllgT@RG6=JJ6p$&&Frs5coli(2!Va#sz&pkt#tZ-4c6(K;5^6Wwn#o^`y*uNkD3r2o1s@W+t~G^7gTb+T!$RlOYJeA0M*1zn+9ou z5NtyFCIuomdhJc5Ue@(XN~$5ghpiaQ2}xs43t-qRVh;gezpnTJE+DeZ$R+E`Ok8eL zDb8K9k&!6`d!|-E2i1?ybK&O+z8RvJT(pMKMFnH~g0r9@H_Onj!;7RauB1Lt0EFjb zO}cbVy4SvRn$|?JS$c;@-Shb4zrX}B9lFQXICdNY?QxcU!TKz>qU`ViaMy;{MDK(4 zr*nxoJd^6#vrPb&r9H108x5V~NqR&SVd1;`)$~4hb7@@iz1tCBSp9*nAQ~J_VTIo* z9>vE>VCgot&_DnK7)*Dt#H`(!mh z{$L>WSnCftRb8F=;GxXr@&DAw$53p zY8n%8cMq63nm%rjogd|oyZK^A-=o|+=5!wIkBPRK6X0wMhmCYZ1CZ@8ox$gZ!9dHG zhmup8m+cqHD1G|g*?;*G#TJ_UQT|)qd2M{jr5E>Sm&#qmq#jIm6@Ds}${vOGZ zxAGnM(Tg!cOK-drt+BzIWNJl`pV3BWge|0EG{Oc|k`GnQAJn4URDja#-}?Z$>_? zNCQZ7V6%>j6p2{!Hpm0o(p8PYXdI^OZ7QcG;1?;-{2CX5cW6N)0g(g%{RU1gg#cyf zsdC6dkb#9Ca8`mQM6XzhN9XV@+g(J!Lu%_)k)289M>;WA6?KOl;n^gpIry9f{jkrt zce~*rphuUeJ}~CyINXii^2TVwG$73`;hMG>+_~IA5(>i0Q9og^KFl}3%HxUIg%EZ; zwk0Mg@awnl;)yn@n2n$^TA6Bbb0#hbStYd*ABftwXdqvCDXw7Zk~&H(Dq-ajhZ^xb zIAw1*6PtRek^Ynl*LzhTEi9{4#=|v*NQuHC4Nzd1a?E1to%>u$_$<)f2_Ji!64&^79adKhAQSb|O}tLs~0*at7i0CT_=+spEF z+~xmI+PjBcdYARR&-1Lqdsy$xJTsXjlgt3mTAgiQWG0CiLrk*kJac7|0a6Uz;q>VdiyK|`TbDhiVQ z`FwxRTJJkaP_OPxX4YEI;di)y_xZkm_b=N&zRqp|LxzpYVJ#_0y&PQ$Mn%!JXB@DQK@ZZ2l#5D4(EFNT=$5f%Camf?xyBj&O z`V6HD@RJtW9Lu!!hsapAT@2G?%@xDkKM?nj481er30c*&WN{5r6udq+AJkQpIf(xs z-P}5~Tvdb@MMa^fn`r%4xjT%)r(uR{QwEj)ki{sqQwH_{(_x7xrU}txVJSSvYF$3q zdRuO^JW^`v5Rp;$ZvM8R5ACt0{TS>|!<%2+rATjvdW7DZ_Qy9D*^J3;2DN4_aT7o!+(`EkE#7LS3%W6Fx(O|LdO1ByVs~7XVX{4VLs*07CkrXOF^vxygvQ z&v?=X-?`d;eA9E@c}u&JW#*-06anB7a12_gbf$exSeB?cs53i?4I<-@ZIGw!uY_+T zb~h}RKTtBajER(e=2d(5n4%zbMvMOuB(8B^{@YLEtiJdG2Mo;}WL9gZ{AL*hjNXQG zTl2O&8D4tvA0J%byH-sn?5SxmkBF94^P1@{DH|9|*<8nu0Ot2#EL2|K#tvCLVsH;G z&1+Z(1dzQxBYgT8>skE55_S=`ubvqYZzM6R#)2MUU>9*Myh(qbb^SrO>uClMp2i52 z8a&;c$dDGS#j;=oU^{};j$|KkQV%alRJUzlJavnsp=VC(knOy>%lIDh_ufqg3NKLKiPLZ|#CgPY{DSQK-Ko86Sb%8u^rw$ABc9v3C*6#Kt|Ji8yJxD|o}a@b+x=2Fs; z>82QuhJ@)ryAyGeG=87vCYL>A1jj1_5l8z+s3R7>jS^HX_PUye40Ris1H&AGz=bj3L~7LHq^a+i9JBuw%K!62Sww~LN0zC}iLaEG7&Lo_DL6L~H(vmfMYA0XR;nV~c31_Yhe)}P82fhY`c0Xq)Y zTdBS#U%E>OB9?*yB&#umLBz(8`A;CZ_K` zNwT53J9x|C8Nl2nV>6L*Dho2=DM6JXqES)8gVv*=e}(>KPC22!)$nA(OS}~_A`lmX zgK=o>tTcBMAd+EaUp~-8>j!9}($2{rhN^edx|5m+1yl_}v4KJ(;s(q&t-yRe-&Djh zh(RHr^uLMzXa^YF?RS?0+mTaTI0Ea@D#X>X)CiQql70Wav_TDUY;Tz_Wg+|K8@mQx zsX7l#sja!rb{ag1TS2PQM})9Gv7txc1kIyBIUi*7Czpyr#1|?*55OgaHQW{fB;olk zvGnDjJQ`j(tZ7TXJdh(U2IS`Vi@mtos$ANt81Tc1YgPDLTsK(ZjdiLP@eR?)547tP zje!>sb7Nommz0tYY#zh4DcFj4;n9!EdvY9J(oR6zO1RcIolg-{<1KWFDtZJ%;ZPD~ zBue)oy|}>3ED9JRt*N2$$g#irk(>UqM{EO+PkRAcgBz{BU9Ol07@F zRKbO*F|K$lP)f_mfH<=UV{;JlP9V1SFabRb!+ZKRjW{G|Ir~3W&S#Yf0w&*KebdbJ zP9MCp{dyVnc5|m$Ou*vC`hJ$u&+qV)PN<{8_8&a?K#6yF8PM^jYt_D;+|6f~u6LIG zPVR5N1T(O7_>%k>owTaKxc&M1%GvDc^x!DC67`U8AL0iMg6Ol^Hx8qY<+5Oy1RSXc z0-Q>jqNoNgAC&XXC6Z3(qrM6s=5drNX8{^xzEkb>fe(%Itb;}kbOLJi73t-(uY4kI zSs=s+zx|?<_AhJyjMdyVLM{j0ZsbjtPF+&xFT7$wuW9coO2P6b+S2UnR{=18zbI&f6*ULe z3dni{j7$y!unxzRIcEE16*D4>=H&JF-1}hrAJ94g>RDdG{jq|>|FVNCx;2uUH(Q--enJ*GDMi8_tq=Z17AkZxRFBn_zK z(uq|FOEVRW_reVM&zz52Gv*fT5 zyh*fGg$v50WsbXFf#>;r9xcrm#0W;bXhoS|0APK|0%*p9WUBMJIRTId9J7S`3Y`ii zy?8NpO8t+jg)1e04pr*lZ1!bA7O{w~?30nR`yd^_&bfx~hM#!hQV^%kiA!OwS=^=4 zz<@61tBFd()3&HRFL$$ZIV)d{y*4mWDjrbs>1!N;Xwfl(p}a@`Dn&JqLJ(!Q3lD7b zKx|+{?9Nt~g5nVZ$S`0!wjR>=@1zElRbFG28KVx>q)RfaQ^QGS&55V_BW8&KfBnPD zz_Ey>zt-VpoC=0&&k8>2@Ur0qG476+hnF$%_y-3s01>aF&wAdMNG=bsyCmdde+6^&-pBXkI;4#qS!?4m_hnHoI zF9H>CLSPXkj+c!liVt-KBgMZg=?TY?fqjU#>xpR| z+hOKYFEADuDz8*j0k#*|3lJ#okL8HXR$t_Rp^~_;nM4Jq68|d(kv)|_zRShhli7Br z{q^CtubYTpqzyiWmr#@?$^+kD3{X)dv&BQ^@gKuHNMg*Xm%O@6CRdtp;EVdM-qh&3 z`GN6GEOkGC~*`@|M+OdY{UV;Yw!r>geVE44kMR=12eFJeeG0U`5Ji{ zROX6*8~hTEy;TbQiw-XzikYCW7^{l%`pY%& zis8deeOWfx=v~OD?}mRQ`N3f|r_j|)+OtkMnrMGIO zGwbrlpKJjsX?i6bAbMdwI{U2iGV6j^2pLXE=+ZSjz#G&-F^X;pRmwcD>L976C+C(r zdT@FE;u}PS=o=i5hMs|Yr2Q1glhB$BAY4u4`d6c89WqjO+ zUX~IN$e!kD6Lu-u&b^YLvon11N8gG^yMOo*@(&I>4^Bn}E9U#;RH0Rp)yz#8-HBaE ztbvhgbtfBnjAwyYnAL<4OuD@|+ju$iWDKUwtAwh|QF@n0Tsm8~3?|=6y!0FL2)5M! z?4M&dqj3dYAp-V)U=>c6+ag5ttc{g%md@oy@r#+HE)T{P z7EUPBGice@Iw&@SD5T*$6Gfu`(NEU%nlY`NjiUjzX6JB)H!KfV_|+#DU4`(dGj{&| zPl3c#KLda;jlvi#5ddb_OF?m-q`<>m>woT2kshlD2=zbl?z;b$k5>L>2Rq~9ONa9V z!3Bp))(*^XE$3a4kC&c$FG=!vugaV@Vv6CEEf_1u=X`p8?P=Jn_RCD6a1 zyp!0ri;D&8QIzFAv;;y+c^E-5O;X(=E^@z|*Gextx?M?z;!;OPtUpb_S-+i#4Cpg- zT~M#DG9PDbeslW?j0N!HuJ&C~jlhXg{cHBkJLy+>LuF{0Xr={1Lv?u@_~4N4N9dHt zXiR>^-S*$1AeFiEfCUirmGEe40gCy>I1S>{7_k;`{Jo}Tf$_Bc%Ud&2L}1(b^$Y9x zK;BZ@GxuK9HM9S7FkzlBBa+ZEr;G|Ba8wO&%+lD2UH7kJLu1JTOUFP1)8cLf8GP3% z$e@N{XV46c>mvuXQ3mw8YqRGvyuvU?io4N?h(z030$(s6T}G7RdH`?_;Iu$qWM!0A zT|K+0fRj*%!yM9dGh%ixsc_n6O^n$uJNfQ$F3!AJ7aSqC#?xb1r{ zKHDF}c|_Nr+CaTez43JTC8rsAsM-Zol~UP_U%pNfOcX15lHbb?v}u06lZSyY@OKO}fwpDrc4GZGe7Vaq zbdPe?Gyp!pKg>)zHd}3iZEph%Tpu(8FkJ+fzQcsQ6s>B6<3rVm8_RqmZiD#4#VU$1 zZQKS}S>x-P+p-)(m>%%nmZs*UXW>`_J%Pb)hjH{Y;xHv{jKZ4igQw~Zp;PkQEO|bX zxfeoy`;yx@m2K79G9x~&w=(5z)EB4}8^yuRN~r9ioel##H8u4C!n2JkrH2b!qvT}>? zJrfd}#KZ=pi-t-@3eQ+&w5xugPD<1!1rsa`P`b3|g1`t{I(>yA1v*qy~^1 zOl|nf8B2iemds6x+3t8)mxw?o7drupGU}K<5bd1@a9b1=KM$`Co6APN*|+T^6hpob zp#Dq0A&5-Dy;BpM<*@B!T=7bUTWIx|`kzrUF%7F%2{-=!|E$$#af;_g}$I$DVm z=vc~OX%W5=tnke|jt~3euC%(*v7n963(PbAWv25}g$5QC+v=FQq8oOHeJiRf`R9*W;tJngc}YuQBy8WZUw z4^1{d3{g>meSw77k`KNfAFr-A;o}10L#64|oI3C&D-PR-7AUcq{ zDvt7+MwNSU5KiDaDagUTPy=0J7m=jFN7B&Z0J|MvCl0zbpUukRh0Vd^F#|+FRNF6X zwx39@BK_cHVEb$Ff9?zev)HtRjOFP`_GC{n9)+wmhoj=1l*}e_e4GrRD!bE@11UrS zEUXc8%IyhZT#zy#UNQzjz)+5b?_-UP1JHM?o(io5Sp5g(iDr z2f}7NY8NfZBgF2hR&{3vNFWSuv)amkP_^J6KXL5|a0*&=TLW5^6SrgWUO>G>0vgEziS)!-PanGB8ybo(%2-D_9SQJx{y+h1PSbYWNVl6JJ!m>@yNH z>|y`b$&;%4!w1<39Oc&Mt@s)4MNS2*oZk5$45H&Mo4caFuo2L73(m591l+~~XdgA} zGtMa@W1vIuoi9g<7=FGBlp4DIIV-xqqO`7hvk?CseUWDGQ7?!CfKQ-*gN{qNF9-E zM?a1t$lYRKB?C(q;8n?<6{J2Slm-y`9=b$S*_4@S$>&1QNlJYJSJRR@lJIX&Ne*_8 zlF*V)!D0q*6XR$|$LPQ1JtKCSE+%6G?C(^YXXsx+uRa8tM+DRKhjS=ljH2OA`wo;> zzdM>(I56S1052akWxQ|F%TXY6`g2m zwo>vCqW2}3r3DfBv7~#x4y@0>E;w40Jx@Sm)e8=wG^#hVobUwxRg7V)NIDHjJRokZe#YRJ6aFW1vFRFPEB@=N=0wtIhi-Zad*dz&qfu82Xi`2!I_X+kumGFW@^Xf6>0dBp-D!W3L2?63%V5>v zn%T#ji|s|Cfzx6iH>?ALN00@gkP!j_$UJMMcmqyuKIZ1bJgL`V`0ca7r~cZD9|!2K zn<3HV)AS%&W7zy)ys?ws1JA;!*p8 z=s?b4qfQK!`#l3SZcW-wv&j}xWlTbJUzc2o_zlL18m`Es%sr*u6@tKPDgx4@=ySa4 zdba?9MJxJw4=EKF(a&4z!KqS|bl+pxhb)tkpf5D9_)~pB;@WdU_C49gbg*(jnzDsYK_E)8fg;VgLKAIcq zv+S)<9{(Jf&w7nd&Azb9`M7g@uCJkN7sw0;zYR$}EE!hfSw}*?mmrz|C>PKxtq z+DFEWs<}nXzm>s`tQ8|Xn^WERnWOc^dZ|-^_&a~s-$`-xY5)F9U_bZAy$jk2hjIVl zdm@PFsR*HWajNbZz7?$oRYrm!Lx-i&O*P)t>PhhNo9z0Q!(=L`F}zo%;OLU7u=40X zf5kBIxfVZEoKw(cbDVb#{Ap#5?5!spEn#~7Dx zE;fG|>Fib9TkcIOR5!&sUshCP^6;)NY&v6L?Pghbw=OXJ${u&bR1iG(2D{jY0R~SF zHvxUIm=`4rh(;&a0L0s7FRxfF))%b=5xg#%^KRWfT1sD~`$tE!Iq@k5@&iI2*bNs)8zWC1#W;mT?eWpFe~fX8{7 zHim2&SWD~|S|BXIuDp^`V&P*dn9Y8u5MgtoIWcll1autsct5E*P-Gu(? z!ep~K`kjSRX$Yww8abQ*T{x6$cY5aJfl(T_dtk0DC zJJ9|iP6w@Ohfb-;ihUj^o&1;$77DLyk?_0Gf0X0EI6+LywKy^Rs{i2c)zo~$JhAfL zyoz>*dm?>@y7;=(u8jxkxyAq{w%CB6*o7sjK*n;4yPGeF!~%p{SoL4n#1Hc>V895i z%vBc1-Cb;9IL#3ESeqytPGf(kjy}up(ycv$F#M(Jd4OUKWQ5!j4D6fdvKO1SvXWZ0 z>6*6mTFs{?@i07eAL-U`^5@PEx&XkKB|zmm1!F~?dQFgZ>sIZZK99!!*7H@;K{M8t zTkagn?PnWvW>$aOyNLnUvy+vX<(|R8lT@ih*AfU_5C`8Kvu3h5))E&Z$NbSzO2^U+ z^v*kUgRyRqn7j(lN=iXNs#w;kV(I;k`z5ZHs2Xf@XTm2L(L?twI7sB4lhxm0V37iJ z$O|R1iYM*TdnqurA&^oS%qesAl2@O+%Qpthpenwdv7*I-{t0nmu%KsP3uwdbW8Hyb zJK-*Q6Ho!0LCb(JdpLrSF`sd>+ zDH#yv73`-6-Q+uDu(I(;%m8)1I%vY8S`+CF>cWX&xzKsm_n$cD$QFEF_cMNa-I+Rz zY$JUGUeo*-JnScD`)?BIf;vt?7cRf-5f)d0v~U>(gt)R?+9euP#`Py19y$C%B@VMT zJI%}4&=417ct(f@w+ji`mcU;QKb5q0X*|ILw9<{cn) z0Jf6@0_g13?CnqK6~d&mw&6O87ov(4#0zl#{3GlYjLpnsXbOGPJFNfrktff!p3R6w zM&^uOxxQz>0TxWcrDKGEe^4yx{T@)hbCb%QDKkI z@f{S`1B-lqsHU~ie>uC=czEONf(#VK*lnBvV`gk^R)Iwm95byy=YUyyJb!+22X!mX zEmEsWC5R{R5&9eBlivxi@U`r$@@>clO%;l>bewp%cBX&D9mr_ts0?v(j)w0|kspS9 z5V{+)C@jaI=V4q>(JR;m5jTtu_;7eped}TBexXMvfww548IrT0rDN@P;>$mV!XY&W zs`6ADXI%kf3A6rqqH&YL#IxlcHLkA_rsQ#*CyFQ>=mRU)mQYE7Ic^`dm*qnaZrPfe zgDoV)w0ha+c{x`ppapw``gsyx8>16VX=^Zve`vRM#yBOrMMJ`A!oqd77t$69qVw9@ zQu^I9%Safmz8f?qn9RQ%mqibBiyz>k1Vs{WRKp~cW4BNa3sm*3ro7eM%IGg@MO_6w zxIA9y`S}gO?fqD*e{Zp*Pom> zCwWDq|1Eq({P&8!HfyF^jNr4T^mE1_K38l}fbbYIYVXA-Ilc>d)_i&0-gole^Y{B+ zQ;xf6NG&6Av0)|gezF#ym>yE}2u9%nEdH zkCa;eiCRY(-yi#j9|!z#VEA#+9|!%xTLc9)Ldu@kqdtj>njhgtlO(!}TlsnE(S%_UdP5pHQ@0q%@;*Z1xAk5<H^OQW!z=dLz!PZ^=faP8#6ud|FX&YTL^NQM(5()5SwiuNi)X;}?A|?1?SBmo zP1dIFi}DZD{bgtOZZ`GW8jH(+EbF9yh{fJmUmvs7)9Jdr`P3dJzZB^$XGv{gCXDxh zF-VF5B)Uu;8vX;EwBAabJ`_D%r5RE+y~F$jO|tIs1-uTS${Vs+mTu^&VdrQ`1Df=g z$QV2PkmY4wHH%MO>=%}3&7FoBaZB$rR6-#gvkR64h*=P+Y45`L7RIDA{a}Bz<&1wQSLu?&UsADdMOdT3qx}kh(lz3<) zHerhO*~e#FPw5?@L>I!CXy>YC_cWvcR7D(km7pMJD)wmBPPWSJgYw8y(S%u^JgAFn z*h}wSmPex?OG}bSqLM`sP16*EHh3!85^iApl}ZjAd@Z7fK<&R+})_X0Qe>Qt&f#Ve#w!lOjdhpTifP7#p5a z$P=akfQ}?qjJIGJ@lI?6AjK8J^%p~ZW|hg}6Y)+`bkHEPT1L7j?bqpWs&|h#3mT)5 zksDwhK8856K>@4=t*T=~MmJwW#Mc08bgwAxNs^S-vurHdoj0(A(_St7ACqgjf(YN3 z(cmo99_D=?{ETy5qcc;BSP*Q5x_#~DJdYD)U-GA200sU>u(gthm_YaXD$u>L3Ut3s zAnQp&3!qW!RIZnhHXPY7HV5VzfhMcNz_lS@)0nKCJ@(QNb{xS93~;NagF%0%*j7(~ z-L!vS)!+Yqg&y;;jy0f)l*NhY($FGyh-A%R7ULy}az~c}LFZHCUwAJeKANF0aDah^ zPswHvpyG@_r|o!jAMM70Qeq1=!}WpqJZGeT{qAyH+>`%VfA|kmjRWaLgQ%{!n5pD( z5G^`^q7h$6#K6;x)icUw6DH1sZtTlhfh)HBAo>*748~xnnRe*>{2&v=sZ5|hG-c0& zNo+C7utp>bJ5CYE-Ac~&S%%~{KTy%3MUCNqd55L#aT(KEg!qMlUdT z!!T3Bi)<4`>vI)3v_a+>YH(h;>WWt>!_BJr7!9XTH~=+i>Y!xG1V|}OrzQCyO6lyM z7bTFfMu)6U{yw#`nxzDSwd`&yKgVgh^b{*dV_T}n(m*GW+c^lnJ4}yiF2m#kW_&I{ zWNMl14VZKJcHoBUK>4=+2CTYV%c#@l_3k#!w`(nqm2bCS*W6ydT~oZ2wD%1+RNuh0 z^nHk~99FVzp!@us3lQx8(>^7GNkYmB+W43n-=4!|gw579wXE?N+~GHbh#zlgFeWyb(V4c}jXS;O*wKxD)o*WwcMx zDqS(1J7=?(4Sp0@6apA$pnko1ZAU9FAY&X-a+v0hqY>Uo_>3tRpW3{3GQcNUpe$SsU zcw+w!7;w$LV>;W-b9TNLb#!8o4k*u&KnU+qS3VBmhb#UC*Zc9u12u|6!zcOig2OOx zdFECQbDhmyX%aQWKD>IMhbYp^>rrRKSh%!tnPoUXn8jh1amOKm)l4_6y)~h*Rr{Tp zBo`Y5#~9dCn+5BF9ukH` z5-^YnC$PcUS6dJ%zuP#eBf6Lg6BvnQFe7bl`-`zxt0`{ zANm;-L1Q*QNbZ4OY2z4>9k4|JqGtW*sAQ@#A)L!8l(uH%34MB<4g79NYdQCnWh5bV zOkoqJ+1Kuck)xHIZMy~%2>DWmfGn;XiktH@_&E*5aonXCfk%^iMhqqX^N21PPAVl3 zbV=oAR9qtfoJG=qj>D5JfnApf0mi{GVt1$syuxuR?LSW{k{)Qm!$_y$xr^bPz4)QX;iwfEL*bbvuR5A zF8J7ZY}vJoMuO!Vd8Vi`Cfb*i>NmaExm=C7Pn9L`BiIM_EV?aC%n;NOciwIGzgOLX zvVa6a#P1`Wmpbw5;`m~Z(R#9pWd_ZOvPde50QM0~Mx!n;)9Y!Dk0b2S2I<;g0D;cY zl6O*Xa=30&TMdd8S+OI4FzYWEB%EaVF1WiXudwYD&aHcxFd2$DS}ikHsU%|i#6Gxm z{Sa`ZF*2-Ko^EUfVMDndrUUffS&0-?;)2OdQ1qSnoyK)lK~gSNPfX3!Z^Zwn z-kl0wMGk`8a4po$?dAi2!rpmUkoZi}wUEaH4Snzy|B?#TAfAbTVb#Fb%A$Slb15iX zv?7DGVLLD>89%t5n2#-HiN}TL2!OW_;x%VVbR@j1_HF3jy4Rsa^CNPMHgu<=Zsg8u6Hr6Sf}>kn@0C;thvKwUU~b}!24 zrI$|E8ys5xcj@@ji~nOeSXRT5EYJF-m+JJx#X|jUK6Kuy$(l^bE+)VNb`1Iyu!4S$ zv9bj6&0nic#hF_$g{tYgNxxnzSx9OWjW0nnG_af17=-r?1@>+QuMFl zPPs+`9wy4hDXVYL;Mnew3CV+TnJ|Knb+zBvK1A9~Vka=h8|#h---ScBw#4oFyb(p}sQs;+CUpxHbo=z--7tQfV;7h3}Yuv>pw@ z^Zcyc`ZTq>t)j0N&W)mzf_oK%q#EfhvRsDCoH!OmM+$7lW=M`$4HDVEGfaRl>ly|L zFt$?o7$oHm9Q$kOfG4(Am2}~=o*A*NL(ZJHKl^CKQeh}kRB!4H*PUjk-x z1~t87&m|_wkcrEfiuuW!yG&v;tZwS4rdbCclxGi$1PkSMdu(B0K#fDZC@Ks1A5vC% zzSY0w^TR`z=3OUHq4My-3tJSrZd~e8Kg%^}Q9}mP35Y;AZ>?|TnVUE+xgv~%-b0^1 zi2MDPJrs`=XgmNISU`T1bosZ7l}^EW#jc40D%IsoDTt^5>c0DBPAzl+lB{#ngEjP( zA4)oa^_mixG#Rs_OC8}W=V@8)y8S0x9AOt&UIo6f@1GU^_NyHc3%tc4u5?w>-jY1R zCU(F&JWuyN{@M3r20qWi^PTk|J&)BI-$tGbi! zNzE%dN`R>iV1O#gS0+!y2^=Uh)Z&W=7r?k)MIFzT%8K3?iDHi~ppXI>hHpV5GE4D_ zKy^1>)A|Qevwv7a`x@3u)+|2oNbx~8{g<*xD3zeafBJGd7mJ+bI0baOnm(_(Lqu=r zZKzINP(wUOunwI|cD-5J9Ug*Z9*|#z9uD;#y)@3>sXsu35sw=sOn|)~I}EmPm<{U( zlNl@P?SB)BB@tnDmQ{xz4RYHs$~WBg=gt#w>N(5L*IwsQl-Ot|dOISO1%X{m1`>I~ezziwBp}iT(f#HA~z?+Gsxk-oL4Z<4|uK z4yJQ4GwGPg8_DROkbm^#nVi~Vh9ENn3(9ns@3~#{^?&Glr8sVh(c*A5MVitvo29lS zsRe01u^V8ZfVWTJFR4pk)Bz(5MD{-{Hvnhs182rM(vj!92U?Ozuc4JiVC@Zundr z>hJgHg_VW|k=f52!qn~Y5vbMAj}4y`lsV+@H#Ft*e#OLpLhT`s#VW1WH9kq9_3N77 z=L=t7)4<$6JHU#q<@yg_&s%0CzGf+87*w#bU}`0WMEK~$3AXO0o!q&28WfId7QPll zs@lKD)UK}oq$XFSV=+sD13c6qA5>^1z%yZ{0D4e0vFM<>+|6_4zQ8y%Fp~$A6&#Ml z$IIa3hpcln?%xEr20=ie4maGfi~x;I<%5gpR;n0DNC=AUe9aP|gsYLiRAZusS82yicYhAJ&rK_pg)!(eTJOy>C|5`h*u zWY5Hvr>rC^{+d|octwg9IbyiDxe9u;KWq{ojpOimjck>#4280>d`X9H3$(v&)a)NY z$YmcndhT}fk=g?-2Zh(k@ch=|>9GMu-P4DCSUZn8%iWJF0W?J5kvOy3AI18w$(hET zg2=Z$29k2-AdfZ;0{`l2137~zzp>)XO&@HPETlMK%FkmwbIlAFM&oZVi&Md2GA1hU zBRMIsdCqEezbI)~lWsr1w&b{9>My==&>*iviQ(HG5`fB$r>KZu-L+$|;Y!qgN4a5B zRZ^tWDk_y*?YIn9JZL%x2!gjLi!|yEShBt0eg0+}0dHg4v1|!Ajet7{j7WrENdcNS z7TDtY|G$N~Bnv}v?f-#=(T)-Rj=sC)u&Ys)X@!*8!H1#nW|Ned8@_{Nz`);z$e8L* zHJ>S1Yn@S;uNtjYw9>0a;^@8?*NT&{rmsz@KTVa1FU$+$nq{) zdr>ZeeKHs@OzeYOpo10#dmthhhW-UU0JGdC_^8UwOi;SP$XLote2mz>c$J~K0ZHft zB*9a)hn))||63A6GCcr=;Ay(thWvUw*2Nq@0!e5S3HqGZ8YBP)dN`)w8$7h+GB|a% zNWk)^7dV{<0e6HQcoHHSPkdp+;+6M+g)S3x0hmu6z^z^lG(e56pNufK2qmA4JvZKS03;iY()5(C!#9A!=(N zVfWrb|Jq8-ulTKe@eyDA?*GRZAGzqovVHSbS7PNbST;KDh$XY2m$z?0Z&>niJUH~g znL_J|bWmjF7P;K-mkWxm#a{GA!4zw)Bu}cTz@5}bD{k#OUd2G!M+NG|Gal5_fSGg$ zs{1oe-VG0%+>?*-3nB8SP5P&!q6|q+8qY}Rhimfh|B%{;6APVTZ$JOMeYJxjqwM3>;6WXr9ygY#vmUm-6MD(L2qKmN~5 zy^weBgNr{*D#?8uG5((K<1QFZYq~Kr*te-$qHev}PjaMw*iYh_54bR|exD2TKo%y# zarxFO%1d{aXJ5*rpCxl<(tj%60v@Fc8CrMg4rqB6;6OkV2P0MS+NXa+#r6JG4|(R^ zVGQSe;xmuhFiKcd!)T?rjJN?GV9T4<>frXkDG`FqzPyA)JgK|55`hCUs9pXh`~FG# z3Qzv_k62S_j|M7q7Y%k;zPv@;<{m^yuJn#TfM@K&-W84@~sf2E60B&R+d z39(ljq{ zLedo(jMFM{hU^h?hO!!DK{@8OeD6Q@28k^e5e<|$Cayt3X>Y|Dsdh9tl?bVXIcDKX=>(=`Sd5QD zM8X>M(JZm~+mrTJH+ldOjhTpmGZ-!Qst#=lnQN(Mg=Se9fSWgf(6GzkRLsJ6)Q~bW zZLbXANclKeK9Yb^a#pb4)>&rqD1fXWx~cvCO;@6r$+n4IOm}qU*QA>?woHYM3AYml zJrYD{!=TEb)XgnGHEG}G7jj;>rnGVB)gu#SW^K30 z=8YS3wxj%6m%S)nGLy80k~{%JfYYh}fQ8xWgKsT4avF42UReU|Nc*z@&D}k8yddF6 z08q>7j&rL;p{?_=JSF{=e{THV=R~(uCf4xaJ&$^kJX)k&P0KZB9s) z$`sT76D+ch4digfGIsUi&+O)siwzZr<<4M_mK82fF$gwT(a%#Z-Ng$R1Fm$#G@UXU zI3U^qAamUq}jV zRH1G+QU=Eg2B;bYEvo@7MN@qSdro!x@ue2OL3$ws(SQ1*r2WlQw2`)$_sdRP4LSi0 zQfhm6e!c(DAD8FL;|y#bH>H(H;6A-d4OTpJ$Yjy07Cz+C~%!77=LCL zI{5)^auhmc(AO8VHtY}Dv@@iO%`YZ2Yit?6V0gelZ_0A*g!10@XzxHAA#r(vKK&`{){wCiu?JEHq%!1tJ^50cyGf zgfR;*5>E{ofN%sf=!^^tk(Cyw{aXi&Mt~Zv9wm_9t4*L*3nmeXI^fA3fHKl7FRTEF9PHYT!&=2ll=#mCgkS@;qVE-@dN4Wl6W z_n&}LZdjcCPj&sONY4dlwqVEJu7V^kK?~irP4!KdeVJKu!uk!V;Q;8oY2FridJbO1^gfXm*|F~5GNLC}FTtg3zOMo|S=Jivko)sF`C zpsVl!V?Yf$#y7+eECah&-&a?6Sz#&Y&v}3(sdE*xtor|(I`M15g7qY!bM95?!{p9) zeynm^3&XAFG|+$WU4a5ifE^(J{trB0t#ohx!SbdamgP?%#jC(JTL7=kuB9CZG*~@2 zpk)grIX0XWz5oOYq4;MR=O5I80gUAY(&DJ&gEF@Z@tU~FXndK87p9B~2ulX(Omg~K zx!ag!;CJF6LpJE4@{2mUs#qPU_d8It{%lp@5?e`{0(_KL8I!$|YCr&umCjSt{N1c_ zXZWV+O_o$HJIoTak^A@#I}6DJJx6eZlvgyzA94m#=ye8>>&&{Z|1N{(ZsWhwhvG`+7y0K#`qV z<3N!f0N>zsKx_UKNlOA#4caW3z_ij8gA$Rek2U)@Aym8rfCOCA#9&NnkRSYYP|NV? zYYQ2rNIDH2>_>6m1wlPy0CCjzzr4l6#7uoSCUIf>7am6R%J{4Paux&B38S6#-&7#b zem_JpF5+e~ySa!P>hWM;F+xY@N+kP*H1qbnbW%1XL}>34yZ6}MYX;V6`l4KZh;Ik5U< z>la%X?`f_Ln`Xj{jb`8@3?hx%Z{3_>;|@zUo&C=jYY378^e6`H68~>{hZe9{z+84q z{C~PaV?Z1Uc@qLFk3E^&f|t-MIh57B20R!b#SJYD$!Z|2!Qn_Z^j_SJuq)knka)h8 zEwS+7Uwn1?CcSoiNL6k66w|6QdjS`e_+08g&{WTXT+}05@{JG&t@asp9;))l!AJB%@GM%R$9kzD-;3x~l!w4K<4BWB_Vh z@$MftPhH1Sh+P{dsJRk%eqH<*(a@PG%6r8=ClV>Ex;8Cn$JjC5)Lpd&5V5k#yQ0(<4pO#0)Zt6h^5S{!;HdNQfZ1ZfJsbzlQ-WE>#>ur2um;%S3v!Hjh^cwDlZCteAD%GXRTM=%o;n0lAmb0v|X& znb?UzktCqauWo*MbAra`iRue9rm`}eYoFYly4!Q|s9UmV0MtkfltpG3_Qr4i^L4it2w{)c{#(46}mvI%a) zY<{ zLS%73dK;iLK3-v|$Ia-3gddmo#v)@7JPJ}WM?=xOIO=A1Ag)JY=U7wy3uHXB%U`Q{ zzIA3{)ix>z8lc3-qD*s{Fkm5omrA23&4aU^D2+jD^hiF)PKewX;D>B%e|iR3M+2a7 za-==-gj^k>3nvc_n9+(GqFsL@jPqB>Y14(UpIytmk}~up6dh2@*zaoXFAFttbQSA@ zc-lVzbN>>$cvoGg{oVeHfJ+m+gp_OluMHFkX<&sJI7ZC%6NgK7=GeH}2p+`Hf>`kX zZ(xvbejLLK_070~iJmJpYScsTIN%wx);;vY7_bvAF>ML&J7~3$0}-13&p24ZkZ=9` z1sstjDQBQ1J8D_00~cwR-EwA!gD)B)dO*-tI5*hDOl;o*wy8sw z?|XtCBuEs*QIi$KZ0HbxuC(9|Xoc6I3|s+7o`o^N%!$!hD)~J80y6W2X}-oVA>rh- zt0#^gTU?U2kGX=EgljK}`LIkCrn{NVqRftLdUw=%5N&+JCh>Pn^L6Iy5QU2$6^(>M}cxy#fUV=?9 zQFh2O3Fxx@AoDHEad;zDT}r0u@#=4|km3W~-lV$>$RE);xg1ExKz zb8~}m5sybmzaQ%l20!D6Mi8$r_5vpt#>LtqvNjfn`Ocvq3Fr{DHx5vRH3_WqpCKznrh+%-l}(7%rQ&{$sjv9mgKA zi&@IKsJTj@s0O`$?cJaom>pis8temUvE?4Kco3f-JKm)32DJhZ+~g;fQRJI(m`RmWf{57YHYKsujIy|ykwB~JIGIxV7xYjsxho|yud86 zu%>u&`p>=_X3^fuSu~mf%gbV z9)=V-H14hln~wYA2udxON;lBZQJBVkgyW8~6s+2T!6cLeJ>a;%kC6LXKLqi?lLVq! zZJi5OwBMnHIJ6@k3{8QJyRoM$$g=?pz$1z80-7yIGE8GFoYf8Slm4H7#MLYt2lU#b zP_}oF+9w8ks`tC9d*)AP^$>ro*Qh(J;&+7PNzFm|>Ebe|WzOb=6kFZsE;D8+3xJSA zO)1L7ORxzlz$_^mlp=+pyUgPOvQ4Wa>Qdq<7RQojM(rCfIsmm8cb#Vid_HFd6fY^W zgta<#yp8#^h*rmNXo-D8@F?I7#XN1U2cTjCaT7NuAOw}zMPuCCBsi9tkMZJCMUu{d zIeT@Ax{gjtq;;A6$y0;xjnqN*Sw+vWzEtx?{)B8GPJk(79W#CpjWWA@q3AA21L?P_+ z8>_v(R6A4tfR4dI0j?)=XI~tYD_wuU=uAe$AOZfK{*UlXfff+?52A$9#9~pFVUcC{ z!sw3vn^jU!SPNq=h+H8l+#8yt;E#yVpZi@K`bgmxu<=R%7e58#Rga5fhFx+~cflgl z%uZv@1|W56W^oZA)Y9$RbEkk1H;CaM?C*LRd@jc~{fz-D_aRn+O=NLtPk%8CaI?pQ zLE-}bdi-(kne1ZtxgnP~z92EWFNbgjh@fjft_>4mxwBbj=dCXJ5M^iAI;*dsfwk)R zV^_2;SU^M5O~H$C_ct*2yA35q5`N(~b=kq+*9zxNW}1Dl{OYMmcZ%2mEpl9GkP8(a z6fF#ouNaNN*d4A19f<)h`@D+8E2!P)cpu)}3cm${U{cei&dMy?dN!FbD0v%0g-2=M!{6qtO#A&_ued6yUA%tvaS3uxu-{@b-IwO~{ zTfyI34xd|$2@BHguv&Bkx43AbF5%iGD|waR33^iAM??qn3VI!{W@s$QZFP;3W0Z*F z(@&0HNFyQIpB#pZ0?F3t_>$L>!zRV9Mk&V}!j(Kl=f9*YU^$23E*iufN*;;pZi1ZK*xb&g^HRsJWVJ{Lw~Nh)8o|z` zt&ZRNrcp$c1z0iKp}I20>bUly%pA8rhqeaH@x>@6^sYkqyS%Tf_b|3Sx3Akfdu=@w z{9sufB(z#IdO)s`CM3DuEn*?o@d3@p0HA{Pu(Zq{eqLTiJ&?r} z;coi_sc-+ z(NC{u32==HA_6;~nX+C@fA5GW4=!egX}yrdqJrLDDQNU|gt?(6mN`c?j2-$h8xcZ0 z2BJV&)a>}N5ju_TGScInx@!j`Pnivdk77Bs|9~lG(!!3tK0@?MMGkmr9IWi2o zVqN;*`3W;kvgL3XMwteE!Cija+B*>qrB1sd2pbHny@786j5Z1P%Y%){6~ z>u@2PjVtrWMfF3lbG*$5&x=NNUOmcSC+!RPHxj6U* zfC*edNM;&0nFMlm{eqqx*qX*l0NK_2VJrzJV=?i8*}|Jfv!B`>;~1T2_|sL(6rrL| zdu{ngyhTm#zn|E~6{G27C?-KY2@+JMlXbt;>j=wcUeQv6m-Ou3wei#&R7#Z*bJ63l za0vBB^}Uor_^6(fp7Q1l^#?Xcw4pdjIo}0+v(oDUG!N1-{KR@9D6I2pbfT*ZHIH)~ zJ9gNh!&_seI!9mF>9RHjD7q9Z2L8yV1c0d+N8v{~flBCtO!6@wEn>3Gxp;xE6)OBViETXb3`7ooN z&idqAG$(kBWlrucaFYFEb`SMs#RVC6;aS=FhJ_6(&l{Q~VQQJE8uQuYSK^%vg07f^ zy$TjSfkh-T4T8ME^Qk(hKk#tID$=`{kU^)n4j}51<0FhnOC{mHU&IQx3*0fMA^G=z zRIbGDuzHJ8p?SAIHZH8HEND73)`ZYSZh!ICN0gem2y-85p0ENLjX>O{Z)@&CS=0Uj zMX!k)t_!^lrkIFSwg@Mq4;U4_K*yYhv}9ZgL7=Y=5mvlPP^Yyn1f~T}3jD=~(t0!=X2DL%K8umi2?3X{Z<&c>_dEGA;i;Z%c>$*5K>;b0tm zM`>qgDD(hY46bBIpuM14@}*UQ4=c|ldIm`?rIil7rjVd^2amqC`OBqPnd^yU38Ybw zgOQ~UuG*BC8M0w{vr$PTuA)Jrh%=u5alT72Fuldfg6Z8%o)ozc{p@-7H^l2 zu6!ISA0i)u7k58WLpc^3k(S9dcU`u0GoT(}shAiGb5s@ODOw)4KjJ~807p?2A9v+A z**i=I6kp}@m>p47QTRw_dG&7g2#F6_8ocBQC!)WY@(OgUkqn&-4cWV40}@0Gki)%k zI2tP50&K1};9=^_;_CX@6y_~P1~*V{Jb?xYBcaeTG;Ff8nr#2jw-B>zU#dkwVvi1y z_7&yMkGzNFZeLn%Ot?xbAYZYMi|<}lA+3D+lZc1*pO#kISJ$Z9RsWq^{deLRyt;ah zhH@j@rHy||ckcnh$aTPQRWhEOEd~cPOwK3*5D*u1g$ws>``>{)x5*2A-4jW(KyG|g znP9oOh1_3uhLd4yv4JGjD-tG%d4ESXBXW9>nl%ZeVUI_hbqgz$p{x~K9A84TMo@X_ z#H3vovX_6>fEjr#_oQ;$OGHvZgXSBrA4z~Z4YDZ%0z+FEOmo_1dF;(tWH5}-e4I*}HM-9}2&IjHBbV-9PA*O&Ap2{81F!=Pg-CeKaxM-| zNQjZO-@wSDJm!N%`2Iw~AS{h_^ARpO5@c<|Yk5hw&byRdLgwHfFI;@l6)Hc0 zx-87FB*WNc0IVLp7aW4%mN-Q3^cS{~=wnPdIILqSr)D;sn&~PH#gkY~7h?HFOjUu& zKtTYCc$IJb z#AUaDkL$to>-M{{A>3JhM$>dBJ&(4I>F)`jNh?M$ShIDWEZ?@uJ1)aG8G9tV+;(vW zn*4QOWbCr(|8o!?CL^YURO0=RfF{DDZc;*KU=%cVxT2$4NaqMlmxKOEp6u$`X*!Z9 zt@TJtR+L+B;Bd?gMBuly%G+SaFOy}C2#4-~4>NslP_-S*)bHKRmR)FkS$?z&%I*dS z+>B)3*~24_!>vKg5!6gc%->GN0@I1CDkeOB4_FsZfmer;7;C#Qj^wEtT^yS;;}iA- zuNJ3$hQhNwIevBkgYh^Ykv`kNxP6GO8@(P`KgEJLq8i=+3N3S1FbB2z^;#;P|IE1m zwuZXRJ~z3sMpO$h7_M9YO{a?mzgmhA;!%zq;_Sb_DWevpio$?1afd^jR@8pZ5>K<) z?>v!1I~IhKLy#M-l_U1}jw=Q5l`6@6BLMiU^23?yL1(IRTVPw}$~zpM%`&4gmUx3e z00i=Tmf6rB-SBO%AE8f6lasvOd3>6tjeI)lDZ?@s5&j$%1NlRT{G~%{qG=7JCrX{b z<#|!vP4!o`pt^noI4iIUQ=eyH{Mp-2;7a^R$RR9J;L!GeV$>YHStmV<9UA2Lq0 zgwP{#WNU0rpOAyb#bt37g*$_Ka1{BGT}&b^&J>+;Uqj6O6l)zZmh1z1SY8DcY)Dr*(_%{c#j-teuGnZEhB+Cp}*Dw6xlPL78>hhLj^!`!6`h zyBjg6QU9ulIOdcG1Qwv2&VGzE-Y=4#Mtet+W1B5wG)J)nngWW{6%D@#qUu~o#>-iz zRz{9StXHpSev26sNMZ{UCJjrPQIBa@Z}DrQt_-prw0vsqw?o~`Z+hST>9U0lV%Lu%6%sESt>RvE#HUPRcuvEdsbP8HO3e)D*qwNNq68o0m>6*+c{GYg<-WA0)% z!*4>VJcxLai!uROt;Em&;jRoosR_e`GJ$*h9Z)$MB;iS?NPE*q+V6y>;XcTi504h6 zz$o>@eUzNc5-Lq6CJDh5%4itCR3Z)kPM79%F^r}5et4D_=Ud|Xpv4dh zh`|!;w?f$GtR7?x7{h^7^vJp`z#x_-M;}HQ>Zx6zR3+)4f`ozT;F>PFZD?A${s-|w zGjYMga-7U*GBQkn;>Ga-koEO#?Ca?3c{Rf48yD`$cy68Yu%Ne$Uv-i<9=cDWfiLS7 zna%#y-YdQsEj;P^tLoto91hp)Cj4kqo&cG+3S?V_M2I0-Jv3s%fkvXVL>qZvodgR$ zD&pW7J4FRSz8Q<9WXHCnaCgrHdL=`SPCXRko9%4b85p3%1@Kv)KF(7^rEL zwr@544f;Tk7>*SLPPBxmMzOsq){|vnT67Db_g`IavpOcl3dpM}?hv%(O)J!3a-MT| zqkihI*?fan$jcHg7R?8+I0h7BIe8%m(6{~1lug4p>EiZwiy;ynciwMRXBI>Z4WnPm zB{PODlmBC&cbA3I2!~KQzzuSM)*Z3rotB~PYu`ss0A_j8?MEYUq?nIuCk;7Bnoc)1 zI>KsN0uWtuZyH-dLh3{Ag5O^wlQXG^fH??Hn= zN21&5X}9E(QMyFqSwUmN(=nH2Yu;UFnmAUNCTk)|5kZ5UGBdH5grdhEukIk3EBWyo z7m9GVF5%=(&}!0mrw@1g&Mo#aS}g)J@?<5igVr)}CQKUT>f-s4{B#}8o15$n@fQ4S zjNBWZB0-gJJakjmn^8isEp{iXzte9^zkAOSmt61F68V4*bv)qA&Iph)eA85;IW24^WJSO_Oxt@ZXd!)s|ouUykz`L&1n_loYyuc4aUl7?K*hLe$p5jW%v zHQnJC^3UZj)Z4-I`P1ARP+bIpGQ?V47)>XDz&2q>%Tt#@0hY5&6xq20>x(A3>s{8n z8!H0RDQ!L#WJv3kWx1ASs0`8E`}Q7qk}%w@Ko0vB2E~7R)RjoY>p+o=C7#QQo26AG zV{r(p&bH9LvT(kSMW0X~0v=n^v`wT^hyz@oK*0za#u9+!&E1=qE$Y==n-4W2+cX2qbqp z^Py>OI^FtJ^_O7Seqlx>@y0ZzE6&1J8uf9=a!^uP^{)nT{0+1a061k4`AdPXZ@IlY z#vLnPTzc3w$G{=@cqi+>*3hU0x&Z34`s@Zqne^9?LcsY!Bq)Hx93Lo5@bF$>G-!TO z*Nyc7Zk#_)t2)T`^v`PV-AvwZ2GZ5Uu|=_Q`@PuiOLiA^u4iA0vdTYDz~oe^|HLXM zztNCS07R~2)4oA%7Or``x*lvm4FFTrI!V)FE_$dlCB1XZEE6n4gMH@_7dL)9X5H;C z6R8;+qY!j7{G4LIyLh5zvW6Ul0!zKk+KcAqZ)F3<3)HwX^h@B2G00NQz^vR{M!=|& ztoDd&KWNl|2&yC_l?4W*Sl)2`zz@}toZyb#TWapqcfuPRMTI#v@Hhy=!`x|RrhMY} z_M+(L4lxZeM8Fd-{9uXFK#qXdHdMfYH8fhr%z+^H7uc3=ii4f)i^G8c4sF)$zc3fu zA;;%1a+IdD!@}cJbKPgKhO9bx0g@gT=;pA_+V4X&xYvUIG;rt_r#NFk>@apPC)qgL zh+6q+$$6w?$kFInbUDH*7 z@xO(V2xZJI@6^i{wrRILN!R5+`SEgU99>Cf;O*z=m-JLf%gvGm9ToL&L>bp>KWs~L z{E4~BeJC^lZ_fCnot5szXei&?zxk69$QGyUf1b?6{WW=KyoMgaa3HW^*QrV%WmYYK zEY7QN3R8^u=2YTOTH!2caaDbd3}f5uuFd1swx~Sn-~I_TXwASCQ@ULv7eb=r5C*$w ze7WEElDz+oXIS{KJbFpV23MAiW+8-u?*Kir#J8KjZ&oXxFJ@6=-3WP%`Sy>Ju3qp- zY^OR9yaJ*35{n1Q^RO_nXRNEaht{L#fDl)~Yxi6z45Xxc7yKz)65s^i{RFchVJTqA zT82vM)%wan{W&920P_`+`|05;TQuJ+81)Rp zB)LCg^Tu@zTQ3R34GbRf(p~agva};-Oh^Nq2*Ol2CEr+Px6Kbqz^0BR7M6 zX!!g!Kabr|z1M!p4SbiMm903owGJyZm0Xd-6ipp&CpkzHRcYebW{Xfxem?6piugkY350UP@Z7_J^uHD1EKQ zoP0-%n6Vw;e>`Xc?aqf_M9S?Zwyim zpo|70oTvz_6$OAUE#HA-VW{3#b`lg3L`Y+-izl;JpwT$H0f?_1k zwP+4iz0vl z$+MU5$Ersq!9e#a@2$q;!{`Z&;)MVk{UopH@FM|$18Cg4#gEJK~jkD~OET_z=YZVPf;>XM&gl3*D<0J5eh zCmqG9+s_M<4FF8?H##Oi-A7z?Y-HkqB|RaqyY8~9>NmI<3Gw#=G~qV&Gsnm{bRJY7 zU{d#+XXj7vDpBAW{(9cLgDpA|bYIx^6%f-wi5sjy&!u_(;x?OiL{jc#C-%Xj6)w1c znCGXwb-0^{9Xw-avEWGzSEdn)TWnw<4|t9wbsUp-ckwCreZUKs$ zsoMSp97h;^Z}m5x>7V|M zZzGP_Ndu{LOW~}u{qI*V>9)#^(HT`!1OHr3==F zKeOi@c5F}gD|)~k{rbzz73nB^HM@ZQ#XuL}K5LF}RXgb!c?8G-+9sgM?&Xc{l6%4T z=0Y|gV#fhq{<4r0bUUWmoM7RgOZirastQpZuP*C0U-pQFF+ua~ROSQNm$M7zR2NHQ zXu@~7ONhBUlAE1%ro4nuzCi5;*GeP`X2qOa=a;kXHbHVe4isj9N_K!>N2CNS81dms zrVH!gFa`g)vILrQ;mR{54S654qdPW5wn)FdSJwyT_)+KVQ)ZO_UBG6346tBK&&G8G z5N!6U`dZ!?u{B^)&TuLI++85?5z@&oWfriw@?eLMl~?VCbXZoloQ9!xQ}0fP9S1-U zNiEks*iqPyF|o@j6&2(VaP1zAf(8vaAXItcio#{^u`FK+M+49i9tbwQ0&k&D$T{^?I z3YjTtKy>h|N<*R_kB9J2t5Udow^Fk>ZWa{iCcbSsJF*-+pb|PShMa0dVMZ9Q4OPH4NtUqZyj_BEHni|m8ZjC1R3`4%Q zs__KF z4TmYxSNVsQQnq01LfhHvGCK7w{szH`8)LSNhNb~5n%naZKNR&B_VYp{q)Zf$l&XD; zTBiaS;xgp~E?0_y9WCcE@$DF(Cuc(j#zdbvI(-sCy$=Qk8Z@QMAEZ6|<58&-Tt-tO zdP~R+8X@re6hZ)mhDh4S$=4l_4Me6*u5_b&l{tmjH+RiwZ-BlSKXmf(`W}P<;7Us0 zd>=05DX`?k%9G9CrJ=nDK>{-0w3s|tSOZe;cFPYHt1lbu4k4UESPF51JNEBaL)~CO z4VL5NFS!#L?TgEx|9)&UwBmsYZDES3*|BNto>=*!_yUU%g^i{-*aAQrek6F2E${nO zes&&muM=wO@}XNi{sJXv;7S9y7kf_Duj%%@`XuLt-**pRfV{}lrFX`<>b*Alj4frr zQJkTnL1y3+a!-JDl>l_TZvED};*HNWoy)qY^$F*_j78>(aB z;?vn9^+gAv7m8pR=n210C_-+_T+?L80*6JG0B9^Qm&mjZyy0=OiTDkCU5LQR z^8Lk{@ihB~=1r<#q(0eS3Qb}l=+~GIK_j2(F7s*%>=C^lKdI`{~ zY`_O_q+K-q-!dr%A%od)@>N~)&};9JY0pj+d)vj#nw)H3sqK{<60<0{db84~!+)M( zyEN(PW*X&e$Di3cxFdWDlh5ygoyzp{mw$^Zhfwu|e{AUWC&0d5aY~=^?(`=jx8*DBJ8o*Wm<*T~*cqrXU3ll(bN_?~0$Y>XLl1 zL|jT8;3@V!74;H5+2t!nh|tWT#q^>3K$ovVE}J6(2FZ-!m=!CzKUw+QPG}HE1QCaX zulqMO{fFOY`J>n4X{>p4v)g-*-rUTeC@;iEDvWVdok}`qqE(a_Fc060Yj3LC1ch+G z`)*Hv;oihwc-t6HK90FPn1BvxF5O=EA+zyh0l)5=&As=q{gxa6GT|4HKw$8^!vKDg zB!D>;>dO}HZm%MkdIp=Xc@P<)RgDiwDXL+o*EEhyNHqPN{HkwxQ1G0+Lx=L>vJ3wo zYwrSY=UEndewVfOZS9?WNp{-Z?6iDqnFFa!N`w$<+XML`y-J)nNi0Pa;fRP>v7izzjn?Xsn@X!v@U+}SouW7t1rJKqI_eP>==}fB`>wV3 zPEyXyZ>DLo*7`2*<$0g`^SsYX(_7rl@H?|d{GI! z8-hQjsh^^yA+E?`6Bi+q^iI!AN-^_ z1~c;JK9`@Av4*e%nGc36t&9%lUMIe02(M4#Fn>I|MLbwrSGy*>2o8<3p5~*oa+!4yz+0-Nc=Yd$3h*Ytjg2VL$YvWcVT7k# z7hPn|Ip7AD^v6u|n4)sN`4xaf#WPFmeAvXWA_6!!L`DhYeM)-MAm7@Ep?=Ne=!__N z8gckN(um^U+0(`~ALEKpP99gU`6Orq5M0PpX0d&37GhV(64r$SShgg)<&pm84WdI$ zd@MFXD_7!PgT^EBsg7O4`eRcn<@j|qv5@$6HS$iw8|SrhWh%)PD;2?~U;yAKOpf$s z(PKgMpxvH+aj&jnZph#Lu(FRAhmM~7v)&=mm%cg9+my&lS?Dm#8d|rb|yR){nkjRdfV(u^T{aTF%B=RZ=1Y@+_vAo3SK}epgKc(N`RQenv8Yuq#K6h zT!HRrHVIKik*~y$>v>LuN74b8U__2`H|z_w8KMPDEL8BHh=oN8DG=2k?>IR|gryDM ziH?f@C{_(Q91kXoK@~7G35_xoD$rl-vbaBlpffd@Qb85FyW{BUNn^(mpzm-Fl^NNW zX0SH$t*4Bf`f`Duku5j)UqicM_%+(KgE}lCw7q3dzU?Y@J>^lb_OK|JBNup#ZA#s5 zgz|9%@|g=?WL`RD<%mc-#)Agg{2hw$Ys%b51vdF7IJ2A53N);zQ@*vTYaN=?=({Ox z7m!0a&2P@3OJhmeU-uwPkZbTXaRljX2Y|NUyn8-;U%+Z_@vTe)l*0~PKoY13qZl@S zj?=6^cvWl{uzw+1rerxE9q;?Gn@=%4?tPisLcpY4bwX&F2$MLEtOr__kOw^0oCqMr z66V|mMzqr06M5znHv?@!-}i91z#9@6LW3w%0i4*P!Q=`@9OwfvXyb(OyjwTHby@6} z-BBW2D74hdp$HWl<=EG3MlA2?Hji9SzN%a?}su-6#Vs|rih%F)*#7Wkk}zKQc4UstjHN>)oMKQ~Ml=+9xGTsM*Yit}cdRyd048rRHO;J$cAK9-LMBEQ z5)wY(8UtS$(lkZwT{Qj>BeCOzF)98TqNtsFE_o8X!q{ZPl}idJ_On9SV~o#?y9Tb< z_&LSm!v4aO!Fe>v`khfA&kTZSUuXOig zf)~DvY7!YJXd0jkmc8#=K`1m5)UX;BDKwDljhIZY2g9Lkd6Uyv{VIx2N?J$8(FAW|$ zG{{~IAH1zh`=z2(BLh*=87p|w58gN|f-hBF=!wFE_pOv&4Pneg3#x+*r0Sx&mYu^^ z(nD9l1>q9R#y+}|hy$d}Sv8K~5qJrA3vjAxPO{maDW?I2;2U}~UezoZ+!Atveh`~Q zx91AxEWF&ZSv7wdMBNNsnsAwn6S;sTE0^}Y*`sWR?x|gsMUP0sBoZq zPFp8v$NavRm0gOdn$qXf%pNrCHSd@m{7rR+@(r@2Fe4!u|F{+uaIGw%PD3c1Bf@L) zv94emG8g`aZvom|jYvAK4!!#TFbZGXps^71V$T$VW>&_mpjjYHqxw;ER^kat57=ir zt3;XZo&o*9h~+qv^>lZD3uFLz!Jink-I3<8(DiT7D`2<{7I!^^%67p~l1Eg598M}j z5{yMMnGH@BiC0=xvbl4m9teL*Nx<(fAeP_+Wjq~2b63m_0&Z6B6~_0G&!H40)Gu%1Gk5Z582Xcmqo zwvVO*aOH~d;sR#og3pJj@k^KyY=*d$dGO&rzB%;vUI)`cwF5CYx-8oG2E*q?Zf*+W zOTJc+ewVJVwo@yAjsWr+ZXtC4kC78{PRW_)scajeubTkpZC#G<)Xb#rjL8Ig`V zHPU;FJEQ@F=ORxcq0=ixC()9Y#7&+h@y>o!btx9p3%tGGHA-d?BE}1=F7)EG4-VVtX#lIsOg1 zb;Hb?n6{W^ttHKFRgVDI*AjuCbesyVWUEh17YZlRIqxLb1{IoPo|a<@e?ixRC`JCh z+wXKTSTQqf6^enXr%9M(RwyH&OEBpTh#=9vuG9^YF`fJcaZC>;?aZfkcBB**?(9r^ z*kk&*P_$pd#MvQVGN#p1_DGDN}lSis`UH_^b4airIsjNMK-DN4p_eApz6mL>U_~xx|~)3 z3N_hdjrlPw87wD>M-5D*-yFkfXOH7-9h#F})~vsSBV{%|ujg$ohLDl3My;X?Rk7~q zeT3kv(98^wjk9(b2O$IFbGgoH&>XZ2-h6IGmo+Gw2c%>tl1LEhXk#<@GUeesOF>)!#<-70UR;pQ9~}{srgqF(y`#oFgAsM%jT!BJ4Bkcc&^!I!HRU z1G(8O0EO!TrB-zA%1|D7ouHqa&~TbPZB&fq96({A)r74Vi=RO3ppV#y#w#_&Z#LR? z?n(^bdMDc|5^?mAFFM{s$aoFUhOUJ=5Szximzfz~vk;5I4T^TC1fIeBGyW3_D^8lf zLtR&3r5?qQajMfqI zXXcLz31<3bJ`a7-H2(YU{rDx%tRCUF>8vCVV`m(wzK_TL_O`0~#@~UIRJ!>Og32t~ z1J&nj;^A_oJNgB`J;IR>w>a1C=v*K&LuyHLv)lpL-mGmo;^2f_Qi!2-4}OAW)RT<+_c-G1WsFQJSGL7< zz>O)!pmfMxI7E+fKDFUY=O&0T@IT2-@f;{c= zgLK)q>{2+B#{>EMkF#aqojl%_&s|0ZxrKp)B1!)bF_cy*{5@%mF&x+=jOd_;klC0xKVMkYKUj(4!LB%De(&_{-(K^{Kj?+O42 z)7lvwcoB_*Prv4&t)U7pX2XaMEV~wa(O}LJevdc!3y15`Am77(7bxWe_)%y)xl(ly z;QYjLfsuI%1hLZr~|Sk28v>dS|#0}TlAnY$KqS3#1xw} ztyFCX0$3a=CgP_vQxenEBA;}SdrS6sY;=y3z~~1e26p2gTe+-Ar#9Si_6{?J!0ws z)F*m+C<45}@Pi&nrv*nk(uqob2Z@4+0%J_RsW}lYz#7>o z@D7&F>4x0Jp&wcuI9t^RnI`xW{s4Uwa>ocyc_?fPDmxlB9Ypm?rwwy=Hm(S-CjQW` zhz{tP0AQHG%9plI&Jl*@LD)K+KwKuq;F!xZ7+NkYI|`OBD9u<=R{{Ri?KyeG3F=-{oG7Cl^d<9=-wS=T&zkII*#rJ zUximu#NEUrv7pmek(=y_0nj#wC&;k}A*e>AV~-N9dn7X*B`#C~eKjv0>)puQV;c}X zFeqI#kVx6Gv!dmLj#))^F$S}kA3`?zu2h3TFc8h=12Qs+sKImDTIy1Ym8c@s!bu=U zaZK?qHVU<19M_@{n&X)u1lFFBT`x5IHnllD(GUz+kJy@ge*N;m@|rolzcgF4Rm zkfmWlt_E`(48E~34X~ri8Plg(I9DNqRXrA~QgI*#53zZFv1@OVukm&L+!v zvSJX*%Bz!?}+C(J_2;OT?GI=&j_q#VlM8&p4&EoOqj%d#&NO6gpK@1~1**VkB%vn&FSCGhN zw$oJfva9*DCoCA|=%M85N-jNP5f_-@FOnWL&zU^D)7G^IB_zIM3$(SzyMu#&6b!K=J2c zixoA;t{Kf*>xdQEIYI>h&7_+}bPl*5H0(-&7X|(?)WzmUY?ZAdTu#9P57kPwYWvOW z=G$4~JnSm#cY9s9F~piN#9~{QZ6UE}OSnyq*&uv?Y-$Y}a|#{NVp5jef~ovr7NQdE za)p|hkSczTvahBJ zO}`Qrhi#59ii$4%ra@dTf9!b&-b!8lvE{+J;4gBhXKseo#n1Dr`9tk%sXMHi>7<`& z5jZfRd**6a-P}DBC>E$@6O0fa7%iuSh?rAkfh~Ku0^i7~WoJ^fBc|X33uKW5`rXr2 znS!41;bYeTp1XNbowgo}C6MTz2H#b~QT!b}A8(79R=DtO%HQg5^) zsw||pk`6}N2sQ^ER6fe#+2K_J8X&0^Me#)K9tp?pzoW+CKpv6F!^&)P2`WYen=11pS_&0wLu|aKA01bXVatSt28%o|c zqc${4qYO~!d?lI38mB^RG3tY zx`NJlwAOTme_dQ)=C?Z{Uafv2BjbatCJh1FNa?tx7){kH3aETc=Ek{s)KXJU_1Yau zBPb7Dlk`|WaObdpWS+lG9q2{P3XrF`I>Jb37S@d;^G~g4+o8K^^S7gR1<Ai(6p^y*VRWRvhm-^zm68e4Ue6mpqS?jcLo7|?=dnWt zt#g*vkQVuw+9c=nne|<0KqUVzB=B;;A}P9vKUN1`io-RKK~xV9Z>%S)7WEnMe>Xoy zl~5fqq;3%O$TUKY2LpoKV+BhZGiVS~xM|G&QxeCsLh1_>AenwpC-5eG$X@~#fbCTG zS-!B_m+vkQ0}*I`CU3&p4Wx10Xz~qdOKpz-)5?bVbvDAH1LbLX35S>Em7YZzcWZle z2U4{xdS@mM3mCbvTWYF3 zrz@WqNFG#>AJtF-W3Pr~(E_{elNg#?R~C`IyDal4in0N{z!MgdqAg=o2{R;vBle#X z#b6wx1#6d@IXZQjom^?}Nv=hc8a!D#N3LyYLcGI`x2YP)dfF;Dy;Yn&%Z%N5&ZP?f z4W@P6i{kzvoF#%h3T5@#Ky2A2Qa%Otsro>Nn{_C&~?(#sZTR zBYI_nD!NmKr2q>eGKb^7$ib$(K&&z0TeX|1IBg5=;8~Vxxp5QT6AKk!4kC-b&gz~< zMmyNdoBSi64#;emSHlkEH&4K_S+3yFaB3AKWcfE?*`6Iq?S$qbMT`7F;mMjK#~n;Q zA>f=4XymOUo+9(9Lc{TBPdDwiB*h*da0ufjKXm-)8$yUj>4ojhZKV-4 z-XNr-jQbqvfc*E$PW`R~k9*ydu3E55^7VoP{gjcCy)3a%C}9JW-FrU_?XNgQyN|oUO7>mZTr}#CO8S zHhCm7ifr@Yy8HU$;rT}lUn{4n!WS8Ea_=qeUcqr_lqn)m8Asl7uJbCt7!0Q&Gm`~6 zg%K4p>ynS$&~QN;V=JIVJRO})`xxZj;1)H0$VgF0Fu-v5qH@LYHD(Me#`!br_~{e* zvO<5d0HA5Y$~rdf^U5FY(%X{bN@nnLxONJ@v5XJGci>3Py(b=zFzM? zlWaEiVFfVpeJJ#k;OqA0&B-K{P9J_B}v{Wr=oZPn+~&W`+uwcnaHkx;Oq9beh97~4vEXTD)#z!V|((^)5^I0ZCLgU0F z{bn3@j3tWlJp;33VtZ^usd(<{%=%=plN#@ej-=I9~U()lGf;%yr2^ zYqO@Lhk#12xmWG1x)K!SLNl7>f)xcI{=Hi;1H(K-g-JuUQ2gyGIKz=?6|2$_9k(5739 zaU?z1UVAyBY_!P!Np7Dy?7p+CujT|XjZBh4Tw)QAvBm1fP;_^4A_~t0-sYw3iF&69 zPZGDoyAaen_AUtEvAr`MfNGnIQe%9|BzXo!Nz*2Dcm#+-i0?}yb??lLQ3dy8jvLFA z)2U%0br<_Bbbf+*34YSh?&`4z`uYl3a#~ZPz|Z!8qJW(@9WK;-8asadaX;Zh++*rX z@OJzy5cEGLwi4RNl`<)C5(SfS&%nSp5$0<9Tc(TAT=(YEB8v_kwZ{%ZYkJ1>l-K4- zJMZp7a!|YJ=PmShfIx86p@@WdXzQ1E_iMyPwAbI)qTWI#XpXl^^+U0Ob|;ntRA=!qY90VRoT)O;hW@3&6i_o zgX*ArYDZO@7U;l{pc$S7Ai$N7eJ@q-3|Mm|9Mf@o7eR6+2?q*0J-8LApR9-|8-CGH zEQ4Fsaw`)B=PoYvu_b80R5dRH)m1V^_|N3SCQ&B9;VKJM2b0$vY5dTr9dj)z56QKJ zV{(J92Ym89hF=Iyo%SU>M4UY5yCqk0pHN@6fg<403ZxizDIiD0?p=y)DF2#5< z5C};LwJJj`;*1!qCXwta27j~gl$g!h-s`oEb;*Uk@!zpqJwt$ZEse46SAxmbHJA)X z?N-H43R@c<8|k3LvIr*q)Up_TOZV*OVKE-7yH|ta-LVEsaTf@sd*ggA@a*tg`Avq$ z@B-{*VqnW$#*;MsH-2(p{2m`O_I$-~>Cmn1x11bp^FY-hIc+D0Plm>O;SgCTc)%m5 z{4)6c&hNPi{C)CE!hYNwg)i9UHPfDRe0UCkVm-NgEdys+mfFoH@)irO?^%Fxz}nAG zl?xe4pPgXk6<#}+vD|3ulyI)JPW}xoV6a|No;PUEact*`Hc-RfaUqGN;dU&SS%{Fr zQEse;q6e5Fv$v1V%G9>p&Yp;HpQmhdPR?inoZ_*C#8f6_W${z(Y$-rcv=>nSZvg^o z&uw>sL?0iF(vji%1Be|3XMbwBCouxLhRRIHaDO>|TZmRYd=pd!QSUc$N293YlU?eWndN`K9|Av@|;+ZF!Dj^rq0 z%&iO}QX!cpH+I=2DD+*5c_*f>8(TI};d7EF?Qk zi8-|+p2wSzEB*3~IvK+!`SCPrw9$7YA94SHD@u(zR%G+-!?S2$uH9;asciv);cos8 z0pVQxBs2|?E*Jm>Tujbdp!f#2Oxv>L!>#}*Y3QB}9}&?-mn6<_EN~#P1rn!Bb|T44 zc?Sp3D$ZJxAPU@4?A@WWnfC07FPg8Ht0qYkpAF>=aSv# zf+H%dabT!n^V)Mqt`K$!ze748K*96x8O>l^2CTq_*{CDHR5PNF7FR}bp!}vaWM?*8 zx?A;ABfj~u4)=T3&>!PI1r-7}J#L8?P|p;sx=I(E=WYOz(+jr8=`n$~!%b-Y!fq4M z3_p3YovcyD+aP7(NO7j~wEVu65w{WDY}*~}?wbV=7`X@x$mzHd%MuR2B-?ctA(S0A z4|hW&J1*ySAn& zW{N6E<%q!|^y52B=|ys`Z@~ouV~VW&_PiG?ci<-&$CY+?Q!IQD3-6}anf58iM^BM$ z?foC{D8O<4c==MKU#;QXsK<{nMXi`vhjZJ#!PCGYnZOW3VI2oxVloBtVOXxsat7q$auTMEG~0NM^V-gk3vx-(UwJZY0Sd z&P}ssU^iTiq~H4oSJp|AF@Dc-6S+gwAUV*yPzxg60{(@l3A|AoqAEY)ww6m~8@C$l zp%32ijkTRcoP{B?LWC6L4lA~=b3%h3iWDLG1nCxiCk|*q(T!@z5IW4@ziqP)nrU| z)0mB1=%!b?R}#L3ot#W{UQDO-DXxSQFLF@!w{@zoMBDo{IH|)L$sXv4)Ez^^OJ!J5 z&Gw^jj_ScbSL;d@p)TBm!=+C8g4+RTr#D2&AuE`rmlW~g)kuI#%Dc7E@oc<{&qH6- z@s`qi@8Y-R58mRZI;B>*$?FE6Th(SW3yWl$Ew6LCt*o$> zUY;b|qHd?y$)rirSSvBAO5~cJ|H3;f#5d`o>1R%lO}{+cR5dei1Q%*wWbm|di@W`J z=$=w-??_H3@_~7$XB1r!r~k9!I08`wA-nLxaHjCooJsxyCsfP8U@ivXkZPP7SsIlj zGB|q=Q^zv7f@LgpzS5pL!(em4<+Az1@T)Z6JJ`xEDD6;G4>Gf3e(-;lQ|t9fpjpzo za0Cl@9PwmbwfMH1Z^zTueQRHLL6!OHp7<(-R+vW8lEvTSfMJO`l^1a9g{cbS3_09Z zkBc(YOaL=Za(&I1%DEe*HqQM>T0TQhZp5p^)ZDf7Dzd#31$uU!Gjq+S&0EZb6>Qv zXvA6I6bVx_?u98jcxDI&G%#YHVJY)uxhy#4t^9*GF;fdRr;|;v|5BM(&ov`;S}-Lv zC3GlPkkSl!fDRyd!iDOf*GUH5cs)c8qXP?2eYqE=kI$I;mH@{BjS(_Gjx#Aute)Un zu(iOVceA0iSCr+3#7$se{~-5_uZ(|K!*EPF39pZ5)U5`e+L-wjWW*YqS|;JJwAS0y zrO3Qe1;beWuwnATBa8ciGQ?Rq3%Udf+|k>U^ij{D&|;C3Q9vC@#VEijc4Voa6&;Aj z6~Y}3JZjEy0;0iVbbsIzD8C+^Nc%O4FO?~wm1_(N|Dm3bZMIjCqX6UKpNgE~!J?3H ztqCc_v5OprNX^X5HIY@M*Y|ei@_FR7xwidu#;}}esO&kA4gp3?8M1P>t@&m+Qdl_$ z9&vVw141LKAYJmDl6h!^fhlg%F@4Bl&mI$TOtoZ@W9J!88)zw|7}tXzNGZm7&~m!; z$7z6I!79eSM@S`g%P>L%VAlUKhnPXtfjIn^K#KlVKhc*N{%;qTb5@_s#P3%PE?uXu z6w-y*ni9+Su`BS}MXYseCf#L;T^os5t{Tgq(v!5z;EKgh*OJ%bt+3s*npFC32mqmOHLpm3FT8?Hy zsfMkzu|qG;6PV+SG4>sOC+FP|siG2M98PtbrpXU;he(W7V1h4T^uD&8?{5DKtyfeoQVE$Z<$2v^GrrCi8_LzvEEd=Py~P$#UBx|m24hE(1%Fuq zJ(PeaKu=;!^WPY{u(FB;raN0H^Sk*ua2Wfa2mgBVV3Q|P*4ltq^XeE?~fEam09ul>EyMG*zM z7{Ju{(v+mSaT|rXIT{c`qEoUG5y!yLlO^jGo8T@r@E!NuUD0{Q{%{v@Soo^^9=@Y0lMWSXGEKhUOg5N{en<&02~bYjj6JskWoLShI^J!}mUnO`_$p}%Ho`f9 z=la@3%$2~WCDplz;6zzX>q9l}XpasrsCPH-!|qzN)${9pn7JOi5sO2qtbfk{T!8tP zt7hm(Xjx?s;Gj4`8ktDKRNLmIzU8%atRIt3f@f}UXMe*!6|f7Av51m|?)jx6nG)C- z>VKsJF1VW1slt7oJgi|C>>Zx6$opJ9n3ObxDNc^GDF-#CN#0wPR%B|Z2wH2#%@77S z2(>wW&V*lhF14>TL;WC_()O?92nG!63(K>(%w4LJLssdI3&bnD8^b*PWlu6Y?PX5w zZTp;7VflX#xB!-%`X$=QGuIo7zU@Xgr4qhVa9zId#!{SzzN1c zb7&UwPjaIUeTcx=F0wBYg|?na;(O^> zl-d>1XAbVc@%ZteiESL*p02HGt6VS)UK8@kHfazl(I#Z}zfX*usesZ>Wmq|>L#$6`!t8X*Jv zFllIiH{s0LV<}P>FV3Z7oE%3~ZE|^2c--Z1oob~H>RWP3k8?d_xu~$zx=v0Jdrd~4 z6zO~e{RM9G7DajV<_Oe);9T?Fvyy5 zlR5%3)o>KWkxxbl3A!3+ZEHC&{sH44h?G^1DH1P~K)wO2f~+l~!+3%vOr_x3XVxPj z3z(`J0UL)$fI2%FJ-jeE6qxURHa--?0z`w>!nB6T6KVosbfl!sKPwl)PM>{c@SHk= zYi)d(#(=^lDI@xJrHf?Xc3*_RfkXEUtrF>c7j)k8nb`n2?)~O3DfChZ{T5=8*!B=* z+gt2qqpn;hYAE#vpWk}k2HZSN^`6|_5EmR@1q_cAtD|jLQ2_@LMs;*I;N!zXpvcs^ zwOi^w4B4n1v7Ea{XF-J)Ag(-WaN4sUU_exKAZSQ_4C}(qYHm;C63BPB_ZwCCQasO$ zvxPW*n7+_3SlzS8;RZK3OUqvulCaLlPE#bGTJ9k1!N(q~f^CifRAsrmv=qhds^*h6 z)=N^@sx(9+;RzhHSB%c{WX_%4>{StInhsr%odA|ilV31r@-OB|@H-mYF-f2bet?{S z^RdhpO8UfL{EH!a))VFY+GB}^(eh+iG{SojuvD|=AI5t+@eeB&iCH08D)V_TxfOdJ zvb{sMI@fSAH>eDnshgDs9AFYBX0|&nA&wI{OTeY&KT^MDc3HC`HxdY!-MMrxJQ?A`&{+J)Hy8*|d!{`4vi3>&V$(S*xL_oe(bEx7ww=*=r^dxUPUG8KoYPeV z^0);tA%@ovlZi6SJgu2LC|-kPgGh+A;;v)uTuh}Y8C&2qT&P8db&$s;uK(qU2ZvkZoDoUafCFq}O#;2cf&Sdb=u64JA zG-2!`io_uIJo_(-0ExBD+QO40mu^gTTPOXxKAZyqKJ*Q-r=zc;-RPL6yR<3K6pAPe zYbc*Soyj~(8dYk~BB}Kk=J`K1+72$`WVM@s6*bKf5PwbXUxINrp5<{d<;=tVdEqyU6_AKx=758MkK> z&aAG8&+#_LSV{aOguxy}pE!YxuBufMS62C{@*y`5urq`elJi0bpakGpHNBj2a^~A0 zzVe}}NEFXy{eCXn@(P25BYTP%t3BP__i79?L2HU>vy!emBrO`kS_>*b;sNKRYM?-C z47WYcV|7`_I7^Y=+j(9L0!BzcUI7NECMwX()m%?W)3gM|L)&M6?qtvvLzxtJf}FQeMc%83oGOI@PjVnTQ@6f)I&v zV|liluaFN$YOTIvks_dJiVyiU{DjNCa80MTLP}zr-M31dV-Yo)=EnpN;-qV*ej#nA z0g9`!7X^{!*oBvMy+vPirg%B=a3cnI)qFi+1(InZ6a-RYE+mhKLRz$NVOFcZ()C$D zz{R^{0SgsA6s$4j1P8o{s6`g3oF06Y5ZIbhb;NUDkW^?K1s?Vh>2<0RFwTTJEDVIi z5gBci1XZbN%VTZ%!ZlyT_Su#Ej^L4rtsqfd(ne z;c64U78wv8=%U<&7^8);gPlA}wi`$|=&b=>Br)H73xA@!Q+SskE^htgR;7zbY_-j} zKltBM&_*L*RCP!12on&T<$J2UgQ}z7MB9^x^iGsv9s=vQm7EmV$h?sZ$aoF|n>Roq z^f*fqrWR5S3~oL4hCCOy?h(PWR&Y$Y?iDQ?j|u1CPREqYp#}3?IkZ`h_X4J1&A1 zaqk%XsMc77Np2OeTXm4?&+*4%{*ge=52!T~Wx>MyQhHAE*Ub}41NcM+947h}z)h-u zk7E#$lZMvXG*vsp>JNT6tnI@4KGCxAn6=Xm<7{71si&5Pvc*$aD(2jW)|K%tF}ymyP2{d4dv1%uNy$1c5bz!i8*` zAFbWbRMtKBlakfdD zZ4;(#1UcAexWDoc7p#}rV31q134=+^4zU>t)6AWS8(XD6JmO;%s0;819TgN1VCWES zPjluA7v(Bp6ZAl>lTo8I1XfSO+ z0p$u3We2U2+cY&a&XR3kD(_5n?)Jz(E829XPKfTD$;o`oUoNf~JW!@cC5ue@k?ZpG zazAiwsB5oRqGD{IJ@5+G>HawMBA-*nc*7we+gAfSwa#R6fGXj%M|CqooF7jd>qoiBy~!!!5i45A@1f@<(PC6bTH6l-<&;MZze zMfZ+Jp%yCf0THD!z&JAu7eHHgFsh)tIVp@qm?CRg#ApXea$*@nl^`BQKczZ=A$qkAgV>Un zH9Xptzsz6mE_#)g>?)u=1CdD$lmgSqAMvbYXSm_d2eR_~k|;wJT6}DQ5tyrN@9a_z zhqfyO%gbpOBG8}jdN|t9QVB^lU!NOpW7V94_I8v;?} z~ObTK*@aX2cpIwDaaqV~rDO zWt7y85epK+< zHBjS~TAMMjD5(u>Ir>NtlMO6hqBBZysgOimdPBSmBa7EZ+wrBi23KaTNSjwfHxe%< z6;gwWwhccbXZNSHyYGQviA~R%VRI0CNK()1Ab?8S&ElG~S5q&U&k-B5~d}rHKxYj+JzC`>fE))A?%;*ki`rXOM7c1(LR3xQK)%{XQ zIynk1ST`)_gU0t3s$XfLgW<(lHW(ytRZp#YB@5YOJ2?Edqfx$-KS-BW6=FM`c23)E zeg&d2a*Eb{)*y^2M>leI>dT`wUT{oT?MtBdttmYk1-&Ukv8W zax!P}t;ZYuL$7X`ZYf!@YDn;!DvK5@-ayAn367k<78u4 z1w54jsIMf51$U(H<~?aMB%^~k{3jPf;GS}h!xL*pgmmTtmJ90-o|RmvSNMlBjacOt zjyAC#ew|>+X>vAQ>E2#;?_dR&qe^;tb7-i%xjEPfhx0I)ev7x39;X7|p;2-Iha7Ie zqG7u4E&c-t0=T$*CDJ1R8RyuM#x2(IR~Z{aj`Pa{7Z{(&Z}vdi{3`W?w$h*yu1 zKx>%eGJD`-XmoQO!eBPJkX;rgxuyFPDS^hGj^~VH*mU$p{Jr1(QB3|IBcVBq^7p$> zGkAw{F#rBSdIZf>V=J#w-=h0GbZI>4)p*(R<7st~;EBKVJD8aVMTnJU6IIHs>hHBE zH4iTEQk2!k9Rp(UYB~;$AJ@~RM{n#VC<)t0bxQNIvwEK8Z}HqrVwdBGtMI^d76%kgp+JI1j@G02>5Y8V*q9ZIOZj5eVT>I5UItHGQ*48VR#9;N&kTmX@U17ptR09?M%KG54l&*~pw~M1$6SjjH z;@p$@!I|)IP>_*zkV`3Mb_#qFJLYu=ggXnTfpylb?TRK`>r?d9EO<-`ki)ou3eY7+ z2d|hE8K%;eY!SJaHdjmstH#*{_fb&Bx1CB=I;JmR!zE=bUe>6a#IS%%W1b6O5mBOM zHB26JNQ`v-T}cZzhh46#GDY}mL1_`W;0Wa#mcE>MHv`Gq3p4W;?*DsN*2|G!6@Lz z4viZ%l8>;mz#ZrU4<_5c+bAeIoYEP$WyoQsQMT1duit)%_}TK2=2$r@7&-+xgrlY> zMm5ioxdD^lGqOhs|I;=@^`T<$#cK9+8Imw(b{DZnq=#BrL2=dT7wHkG`C07q`1!CM8m`zj6X2#!+cD7<)xTna;-86 zU0ci-G^GcaQY@%Kk|PEN|8b%lh`OYvahbnhC`8y%HCZvrtKf#dWYL0kBym(UD6BL<>0qAs!FM=9$oR5u4d>12Y>E^A>+>5aKbY>uBk}T?QT6$ zF{oL10_(0GmsH_24&BZS*+IC#0*L5{E)Gp51_}zmykpCxP9*r}91f;*AemDLQo=Ej zLkNuj;qsL8CZOW4k|>U7r7f0`kBk|z3v|oi0IH@@g`pWj5AfnbH4 zX;SxsT^7K^2bnH4P=qp8)s@}f70oXh>fkVekM*0k*Ez+^6@3nm@8b9GoEV`XXx>({sqQhPKhL4ui|10Z^^^ng|dg z7;-vf!=W| zHNS^d;CK8+79Z;ErC+|j*?Jq49(pe}=o7pR7i|7CzrC}0GhO&@YOQU4YrgsMb!}i2 zpJ@cC*XF0zJqg!|0j1`F48(kK@dqrqvgXTtia3wt&xgGZYWdh7pp)MN9*khnHZpR$+?!`U1H8F0M!je7!qv&NVMk6Q6XPfYSU4L=!$-uv|O(MAE+#wMP18fRiQ$Z|9)uw~y3Fzn3N zbYUyk8JE%j(54V2Izw~uT$B~eZ8#8Iq ziW7k5(yYVV6$gFOJ;pEcK7{OC_if_n5EkTa;ibgifK0&=>R^9qd4@ECC7XO zva&YCB(cHfJ)qG_YQY9pQcQ%EnPJpvYnD<9ya}^1-d=l;(`B(Z=eh;n)o&N<1!7ha zVp)0GZ*$!NkeFveu8Dvn#^)-DpfH(yG~*ipA+R+y!Ugz?kaTn1lW-8J2x&u5!6A-_ zw-JoKTceUQ>2=`jF-ma!|SII>3HwiHQo}sVVB>wm|uZ>7p zi;fuq3MjHNNn#}Oo$7#y2u8wR6qT|*7!!n|30g%4!W`9Kpxo1-ORh+=uGav}8scsu zKR2bk;R9eo7`Mdb^2*VucFtVKnU`l=Gffr-i5OI=q3K*O!bz1BgL93z>Kl+ER(Lr-r+kMGX$P7`y#IP=h226lB=)At6H%DDz2o88a}13xN1MiDLWLyX^Ryv2 zM6hiprSr!GDeHP)ggs$$2!H`*AkaBF8xlJb$uB8e@muu~?27Y1*vSnewx(7{f^J(V z8lT1GoMtLpLeT7qU1+3xyBSUU)eoghh?H5qLe#s*0LMZ7GjlqqL6+TO3DgDYjsI}E z9|X4`It1$rjL4CcIQkCkAZX$~8w#j2KSxH-Y-EKGj#e8>IuPf}dMCPNC`ul-jZ6y2 z=MJ0yp4^`@bNHy*jv6*FKpJR=M}{UTqws^~>oY^sJ9w#uK(%02ZR=eKe+!yFI?6F~xV4mGO1xe{#K1 z4|@IV-~jJu9V5M~MiJk3>qUrfsJrf+SEBn*4^RJ_#vcBlNrF4$nqe5F6@UtpAre6N zt}jIAp6{x3f(W&&jTpIp0h2&U#u2ftvDfzyGLCM7&>GHD`k z*e9bIi7|?FkQ_gL^_{1C#hf(8ZGZ`UX8;c)tPFWlUl^_O_0hL`=JTy|dG> zWYf2@d8#{4{(}Cl`1CWZJ-*TCJ}|%XbW00KaUgvhw= z)q#W;o){#b|C*6ZpXWxO(&Akdt>eN2)U)X-Q1>H0S;A*5_(A_;i!ZpmYlg}d-b%2U z)yv+>Q03SskI`-dn87Kk?!XLTLcpm7KR?f2afVAy)u`<&5V~Rk(^+7`Gjv2%&AH&2)?{zpX}b14-?J;*!z< zlOlRocMsJou5o>6UoHd$WYgXL`PI@hAz->YziKq)Wx5`c=G=rxHt!J1-Y zCKQ3kplV(^PlsWN?`I)za+O(f6;b}VRG@>h6ik(%UFVQTu19c0O6Kyw6k<%yM{_1@yUn~%*!B?zQsZ=|_OnA?Qzjx+G;8^fRJ9lUVOM|sk>U9Psf z=*F(Tsre(1CaH0gw)ke`8!52FNpT{j19+pEP8$Xg&l~r+3;r%Q3=rT&32*XJ_XBL^ zW}{iADJr{3G;HgC7b`=hRF--jxxpMG?>KPCe}FN0(;`5Oo93q=jdVLD9)tRlP<-G^ zteZcxYw&fkm2Rr;N0w0eyXh+;EDL?h6Ald}| z0d^$k!p#%rjGICF=Nnb?Y2g$bp$AC+lJSO!yHuls-)LD1XCmOFkFn;1_g1I)HBq47 z;FNhA9>r-b+-pL{+wFSG&~(EmzIk;$?>L|zlqWi2o*sNBSl+-6UZVOPAHc`fjb~E z1oEHjClm$3OEF-z+psx^gfdR-J2I1qJT2YBpA^6GW~QfSyEp2# zjTpCq8U#q>F1aXir1d)&mQD{6ee)||E_<#vJJEe=4Vba;Gx)OWx4`<9m!%~nA&50J zS_2FG;6I~Wi)zzUh-vOim5sWcq4EHIlG?m|Y4fx7=$ynaisoKXmYXr*g+m|bnDWXZ zrzNJ@#CtIsbGDhIKxH!&%JyQ#Y)T`d@j+R2Atd;Z~06i$=M$&+KRD4_$l zg|e5!lCpZml|=Q5n;#L=WF|#e<}9X3OM3`cG)}XJ2ipZHv&^UNN;#rEmFe;FhLq8}#BnuE?VZdHS?T*4tvFuQ)lFLH~ z4zc;rJk#bpkUU@5kIGB#RqPxMO!1)s>M)P&qD~Hndtlo+AiOB6BU0g3*a^3`h+AV3 z&t^1RmQBQBJ}q{ja`c?62G8Qq;l@W}Q8+bkXI7TEz-c&ZKkT_ZH~;=Ko5A@&ibxm5 zNm66<)3j%Gz3$-$b+Z4B4e!D^OP+?OihR_?iY5UFNzRtngALv=T$I!Wx%q zv_f4`%y6sNG1cK>W1{H=8esRLE;YxMzp+~~q;$6*f5VbPRfJF1bVf#GU^Ts3s|pCT zkUfsNS)u6crzevoO+`#FU2F$1*eabrL(`j!n^)Q`k(?k#Iusd`1jF|=#std@{~e1m zj;}`_^W#1k-LH)2GLzFQXkmk%zZhI@F(-?_i|J`R8BLLR4KMvEudxwwY@cZ-5a*0% z@O1NO3XXGgA~C)7BV;0Hj(57Y z=>E&kSD?7&8~Y8>^w3I@m5I3IK0hPVgK*TQ?uQ6L*)8cc>#&8yK^&c1R}E1X>?s3x zpI}YX2xBRouAUro4nu-hZ5%lhY$VywiK{pGCT71|F?7a9}JxB z&FkklOtUy0&YRcZjG{3!7@Q5s8^n_DGMUHnLm`U zBgR^h+|3aK$8GO~JoV)$KzA!pvcLX)?w1M8GgP-39!4$0T&c0L+8#w~ZDT%NMr*V1 z=x#ny1$Xhl)U%LA#H#hN@c6S(qgd%~pJL%xsi6@p%Sl`}cz@m(@^faa;>InRm8M=kGs23_z3IsjGF=3cHvHrb?TsPaTODg zi9naUvZUtj;#YU8z3&?JP9A!^JjPQ;%%WrT@FHi$cRH}y;ziAenZ#Fe8bX4%rAzP@ z*JEAx&Pw&M&DJcCv04Bh8BSrAYW|^Mf@WVVZs0FK6naQwm_v`jEU(aCI!bhDrTc^J zG=Mg9OHA6BH^JQCv3tL)8nH z1x`(Q`ucn|#;uwoy`FA&h%lY;^EhGp}grt3E! z6NL)(d36nb@@VtwGRmWNcf6bQopkk_z%Y%2Ny8uM1%NLw&KEdwgca`&#Kv8C^zQ1O z_e>?fTs>~(zSG_J)j`1G>!Ugjxq8nZ=0CR{OI0Rn`?O$9S0JE zXDE!{y@7v&fd*Rg62?;nuLBj6)v&h!&=6wHN5-(wR>Td$6$fCMeZky6AG*Scxh1-z~+8ttQ}*AeDO zJV7WOvS(Yn8+JxX+4!+x)AmW+PkcaV!UhhjyNVc9^27p1? z@+WFYV5>y55N!^1Otj`kawdtq@z7y0gt|oS;-O1C<$EzKi2eyXmAjkHzR2#uiO<9j;bkIZ07Z>O7;TfNUS=ItJ z^MA|_WF{^yzt&H~fx*g{c3Z;ktLCi$Al@o{>wMl19>R>N?9?4S*^50})yum(KNE;Q zWkD&6TC@Su5UT*OehNm1=Kj3nb}MCVGLXk}@yVah^NJz-Nj@`k4n#rdpoN~7ZA&e#`E8qgDhHyIb2`Zoh_Hl*kDDIqOnAETGG3$tFBz2n#k&k~81W#-MArgCR6h(s-izVZ0Kl8^M^TiZ0w%hoQW z!NE+SoN$JvVckY3Xux5?@XEURW$GBY*3`iZCKLPbVlL@n?oWGvAZ_SwWlg5NA9Wae zT%{f7M}SA}%l1Ql)G<%JfwvmGror3VAqrr-pgJ1hXZZicoz$eyIBm$Hi-=^{C zww!t*%yRS>o@kQ@B{3ae*qil6zZvxUwJ|qYQ;<%f;W*x+WML#g0n7AaJ4v0@B`~;$ zZiN0M-$I7%QptJcka2WJDf-y*2_I0`#Br@gh4Tp2Mg2;BwI(pHz$Da%=mf~OgeuAV z=^BOQX;_s7pd@|gAT+^%3Gu4Yg+iKC6dJA$>Lg{Xz|YUz$cO8gx+)q9(}UGou=ohA z!!gR6?xwvy>&9gLi^~%gJmrBTC6-+&9A61P3;8cBj*O;Hz(OBqXWI0k#~=Tl;w6-E z!*G(Qm_J@MS}LQK3zs+N%fV3$BQr6kH1!JD1HXK>8bAAZed@zV6=C#>?vea(dR4xc z+rk&*GW*#0s)DBOw!Wf!?2Io>+8jSGsCz4hnAd4R0K?INKD5?fy&G2uhx~;GskD6! zobyO|IMHh0$mk4wvtLwIRkDT^P-F2G-gP>b8M;1t>kIi^bjKIN6T5kEh;@6_m^}x( zk{KyNXyE2i@2$FgpHt-jUb@_Tup0bum5$Fi3~sa${;ybuuEGP#;dwC`y8Kb=Ri?>oK^l&d*sr0wTRk9>Ii<=K;K zMe)+*yS_H{fkf#js^5;uh6(qqs_0I>4%j!ZEfMBIMA8*#tOsd>RdX27zXkU(!6b{U zlE{(hn(6aMD{{YfgVvL2R>>~L-i3r>)RBzGNbkk~QL&Yx6JG-Pp;wW=W^&nj!*{KQ z8sZhdA};z<&fKizLo%5d4K4ISZTq3Ml=J`J#}VgpikDB&_s^XUhL8!okN`2Nm_7Rz zjthV!t!*q3elN6XqNWiahhM`^u*EmuxVO0PGm(s-9npJ5{wdIc6DQ70GdN@uJZLdd zkGfTFLOp}QPt>PJWOCL@UaZ@YG&+LDD>s7!34BJ&)N)f1m)^M>5$13qC`ZYsWQps` zqUN7CiqPz;?`ME_J5>V)@g9q+CpPU{bbdyccsy;T#B_9#sd|%~zxSoO2cRhpF)EwT zHO;BML%(YF5Ma($$P8zX*c74&ju;gam=tds^o$L3R-5--owLhD zjHWYO*pbA|3ILADprAAIlS3)-D>o(7Qd1U&mtsv-QT)bFa3VIA1JtYW z6cqn1_LS(q#ELjUFnW9#4!Io+0;o=Ikxr4%$vMe5yti(I@%9*1jR9)LL4)T2LMU8$wfhPIYkYPmEozbL~1RLeihuInHx+`JW5OG0$-T&f)G=X!7R%wy7 zv&GN7liwUVlsh|OA^LRVU3Ntf@Rmr#R}XjT53VvKP&s(+X!cO=aPtZh2(V7Fvj&Qj z>L4qsWtgHqRU@Xx`ALon*CC^|_FTABCcIa7V_e~&H+Zuq;Kc4wMC&taMMg zq>!{8{zP#}!8~}RhLc?*rx9YV=)N?IyT9TrNFKOFRuL0>??0d#Q4gg}5Kt{;oY#bA z8WRZ_qL#uFy@=1(-6IxM8|+}&PqmGkuhd}rnQ#5|6W{vVxb^$>mUT9n4i5dC>;GV< zo!X-Z10*blhj?aV`f*o9Jr$Qps4 z0`a@q)(vS!(3A|+Rictq+*~CdMN2o|&G8qr{5(0_rnXV1WX!7Fg4yTbs3kb!ltXIG z#fqZ1wTKjQ2eP+{RU&RBwz|3^7;dGg#)Gat7|y$roAeFMwc8GlC>Mqau*+NXYNRL|JVhDFEy*tcrH}ZWq7!ZooDdiUbmt1&iB!jU$j@Er)|WpstJT z$QA4j8cxsp^ovivDp+)yhN1_&Lr(Egzv{b|N4+pmX3_SUA6Zl?P_*V5=?c~no>7ou z?D}OtsuMyjSU1Pqs|dgfqtKjy4Nl)p3QhguQGZ!+&evBd_uAfzm+85`3`KsR(wmk5 z8`>J_qSu5Xkn~T05tq9Um()~jagZ~@4L}}M$=xj^U7DdPkRV8oZ^yz&(N?L|fvq?A zav2K1#OkJp>~t(HOE~-Hnq;AVq^!d1&aanHbf{ox>T@fAq1Y6y=3dkM(>(9v3~ZUU zXxH4_d^O0o_T9!9mij^_hvr{QVB=Bs20|{ylVXIW!J?h%D7kFHmY9r0VQJffk4Q%^j9|b$hyL+8~mp+ z*f2=3w!a;KARjKM3uQBs>jFQpfhAL%6i@pBmlx%?!scv=6wD_!;K=5 zYAadqOJ40$5iDUs!mwAZ$FQ`*P&$C3E$9YRNutZqfPe~=pci02a|dnx!JoI2!9m*SX7ITW3s$*A zK8(X~e^>-*APvHw8{W$7PXo4SEE=`n~%D98Uk0+_YfKy;6X?cdJIY&lmPxw9vc~y}FA& zlFS^#QXahzM#vg_7)^^Oi3$NJevVgt2UgEzV$T&1i(W#jN`G0u)o^Dpf1WmpF#i3 z0O^)vTxoUR>>M^#MX5whmySTXE=G#w>5Pd;X{>oj>bBmpxd{GYn|BU=l~qo1B0v>Q z5@!NW;`hy?dcqw4gKiEg8Z5fZWWF;Kfre&>-*L`I!0Tsc1NP-Wgc(9mxji({0^F*4AqA@5G;)= zzwGba+|7BwlQwoFNNwVY=Y0FmzUUp7fBucne#anwe)ayB?)cm)I=oBE^6-W(Q%%mCaj_nv-`B1|7dN=MFJGN)HrRq|cA>^Xm=5T1pAw_OApr+Z zj55}l>}^*WvY+?cyx+hz@XK##w0JJC4mSB^$x91<+sUQPerfq)_RfNp^i57Mvv$)7 zV|%1mn4|b;g*9lQlb-3z;ml&gWIn?H9~YW=-p)9bbArJi12ar-x-WmepU;lH!ThoO z?Byi4aw|3>KI*MD>CGf2o@m~fo~ON&*lp2lkk9D)ctnOf@#AMgEofnIj}=DV~YbOp}Gc<8L8` z>$B0%hR4FWHD7{H>50_%$ccRCc-rJSIfba!(mXWN{1s!+s>cG+9P*E^y#>p1+yTjk zX&l5CLK?mWgxlqtVzXAnlm5)M^XAPI8eRu{p4`dRpQ4V}+M`?~RWu%*vXn!lucwhfK%m*~>aNf~ z*1ZE{o7|8i*4&J_^_sUV$gw!mc-?|PDpq;}3( zt?RAt`pYtTi6mDrjr-;;@dltBVUnk7r@b>?83Q~s06#BMYx9r{UK%!wpJ;v>Vx#>a zkm*eoVg+Xi2kziIIC|8)y%*78=9CYG^aCinSl*E9vX9_2+I}GGTLT2FQFf+r>1U`i zARymgHFx@T%K_MlF#D9{CkAgXlRjEmxy5YBd|KTv+)nm<^9B^$?$bX#-5f){btE4U z2BUAZgXZ1*LjP-t?69E-{pu1*v^dhFZc)(b;j*GNC)_-UG!7E3L;XN7?ymkpQ1bcJ z{P{ILyU#^mMlmb361OU`ue8LZ);M}B9j1AqyYz&(Tsa&a){@n&9jB5$rrGRB#4tdO{^_Pbgo!ISl`U zkPt&iNL>j%A%)V5?oC9qYA6ZF(}`G^I#h-ORJavAvmqD|*lciDz~=?Jl`X1Jg51UC zKG2<~HLzO}r>p088HdzA~vZ{|W}d=!rCN0S;+~LdDK13zkH!oU%UX zi!8mfjuI!aT#$9_0T&($BqCi8;vt2`WIe*lWHmf4d`tF3QUzf~zd4U5O~eiDkk+vQ zWGqu1%G~%5JI13TpLg)j{K5iHsT9*mTq@#{B#ltK0>7G9T`OhM&Oo&Ey%juEpXo~Z z0L*AqTB?kFF|#DXu;R|Et#Hq_lmeWu%>bz4_+Dbblgv_>!h zOg?4l)sdG1>3;t@do>|crATFN^qoT*Q`GBYNJt(r(qP7{R0-BXDA@xKmkH)v0Po=1 zxdD5fh{(bBp1HTs(NatiCv{YD<+b4P#IU1j`JQc0hei;Cga55>`?ERq8|Bd_LDZ1Y zW3*2QpB>X+yE+Wd(b8f(7hjh`Y2X^Glsa?;R5qf;nYFK}@wnRa{jh~Z$7IllT7t+6 zj0`U1tjJ~#R0M+5wAQ5`Fx+D&3z^da@aAjif8$06eFWE{ABYu*v1r8nmmcEoyj&udiCND6-&TkxqWK-DC+HMhhl zQsTjA)1mr^iT&)1?4U0B4L93zKXP#1T#wb!*1L~H$T&TT~OfuNQk4-0t zCJ<|&Z=8tZn8Pd~Gs{s|2h(EdjyBH&stz?swJN;4N?md9c^qzq($=Eo`;1!+&3S-Z z`zhGm)V=qTKxyk&vY0 z$SfTU_0-#`WFAvl#b=W(zq$FPD2*DUj0Sjl&b@r7INfi*rl(T?2Kf{XfnK}FwwaGT z#4Yx9juu$9(5o4%dxR=>9wkM4X4L3`pz2IZ?l8WX?ffEEMS#g{W!$UV(^$}yVl=BB z;5M7agt9(l0+5;_Gf$qM8rOw+Mk*H(#(4!$^jdL6;BwQ3!~Gg+%S zIp(%(qlUFQCmRZDHEh{MVHvjU61FKNb2&F2`G#dG7ep1tAoU;;n0#1|d=i4!-n=q> zNL2_{tW{Pp^bexMIYjSU7a<}3l247jzv2_^gm3QeyfnTMRY!h6BRRlMb93!L({v=& zct-kYaKd6^9P`U=eV^P-&A}jwDeTM<35Tj$(?*ui+H`KJ24ScAv6w#Q(+BrbN0P_s zMyVlw+W^JT7U<__sl9|z5tp+q$`B9+mvgkr(WAGu$BZGgFVvE!FxxtVB=$#uQ-qeN zq49dl&*Vuu|0KB-D{BTr>=;8+QoLpHe{~yMn8!m%)+j^7!cpcr;ApLY%fmR|=1V-%jlirh%x5s~VTRF|hhr zXiyO*W)GaUckRmmo4R+8x2r1ez2{|J_TF>ty=RgQ1OhtOGHQfGa{A^#L|XUQCj<}> z+mCHM=lHh1%IU|mcdRCI_;7lFYy=Sj6>lxJYEz^JHL-YU@zxp?HX>ZOVVMa4Vy zcDzu1zrWv@bFH)tG3l z+C&ou9&V!bNW7N~N<~it)`y#D%*@b6YZ4yx3?mH-ZbLRN8;#wZ8XL`91Qyq(<7dl} z&{o?)QuyT3m9}8h%}z*WMMNhBz}ulkvlm9@)m4hG0x2El?me4&q7pGP$*Tq-=!sD& zYZOvJB-&dFl1cTKc_rhDscMX*MD?)#jLB4=u$24+4vku|(Vi3;FP|J{$2a^{+3XD_0` zACdyGmj{SKhp_%9$J-)%a&UrKkeFa!glV7&Q=lD6LDkEhD>zZ93izDNc-nGyRZ}MT zE7)Z@J zMzWjS1X{e(XVq)yO{BLWyUA`X6Nn5s1~7reZrc@%exI?lYnD#GG`1l!|2hwFI!YiI z;P6OQ{Kt0ZaPcQxc;{Ag{sVR*yy}q6ADRihDZVK_84!owM@PV;$KvR{V9*J;l`biOqP^n3UdV5 z-C)PgR*80f;ii}bcFa10vsItm(umYpL#sLKfR7y2Q;`8P$q1BmD99mIw3iZOVZ$6?pUh&h2Uspw zrMn)VaN2T|APFjdu@1)K(D@*NU2$`ysJKGwn7%8c;z#MrwR+<(7gCa4isDzDZrZ%D zj!cbxqzx%A&QMB)l6do~jOhCyQ-EB3b;`v56_Y)hdc~>Tr3n?y^_lx;ZqAS$T<;_M z#@hpgv`BR%gwRqm#!*k5RpH2gSriNMJt#qeq_sF2_u1W5i>{6H5f(C~Vdd{~cG0_E zFKSn(6@oi@1PE2Fz6unE?1QvAh<&cJ4d$sz;CYw+FW(h&8Xlz9b63DO+N@*~k@;Z> z7rDk|1FxP}?w24KzVXe(b`vWSB z6VXGA=q%(yBT}}T(M$_8{Xo^)!w7`dN5x8PKqN5y##el=MV%3yMW zJ#Lot{p(}aL|29XS6X}Ym_;hE6N4w0q?gjfEzDkfJ=GxvHgn#G=ft*QQhuDo<5W$R zpP05|C=fu7Q-)P|SVp@J5Q=M5(fY^{{Cj(hB-FJx07ofqN|L^0Lp$6rEBmRw{Gl$N z;>(+b#ZRUIEbg#rJG)PW``-!uu$A*-dB=3{8Ky1HOs{=jwx&?Tsdo^UISoiCV0mA- zGf{4%)Wy8~R2fBN2;ZqglZ9MM^EW;E`+{BLu-Z8oK6a$wGxT7tx_X5q4&EVozNz8B~2Ka=HHV( z54`{UTFoy@7MNbtWyisW1vXRQjV?fPzY0*BoXuMC0fcRm$&dU!eC=E)2iE^@`m%>g&BVb>D6>jR? z^na6k955ExoZ*yg2X^ABB?@6DE~!`CGAW?%1ltd_B8rJChu-h=8oI_3)y-0&2KcOC z;JykM?jSA6Xl~>NsZmUM#R`|?F~U8VOx4-9u>8(fKjt!J5eidi1e_6gMOJaPg+v00 zw_cHc-X>pznv=jjAfQc8#QZVVp|k~0Y|@T8+_8iCG>uOLN=cJT&5B|R%<^eVW-UKX z&&Ku=JwbA6&zCSml+%kbw?&gp_pRBFk76OIdJD^6{Ma1%!3^f|LGRLv&B{dZ8ds10 z2%it~J^C^V7+8T;3utM$Oqi1fQ{VxaROw(EI*Rw`E691TLUFXi@DGD(4|9 zHBQ8}cl34dxd7w3I{H1&6wyX5;Obh=9E1LZb>P+H1K1EoJMUpCz65oTBMr;#j5Lgc zE`TcCh$==><_;th`b8`r)i43ld`QKe}`A5Ey{MNMc zTi6UxOoVqFCG4zE%&~C7Sj{7k$N^&5?l01v zhzqs}rdPMV$Rb68O0ZYeCk^W~g$T6W@Vfidd$nGdGY4qeHY3P4Cns6iU0(j9SF|rf z;Z^3ZNQa$$R*jFH$z!l*Xy@Y*1h^UX4cosPK5~QmMy7^!4J=Vjd;Fq|JG1iY)A&UE z)IMga_&TIgN+1%z0m$9(H!pNOz;@Ico)@NJ8lxO|M<@x^Mv(IyB>ofU;NZ#K^n#x) zh;aDo$aB!ZmZ8+sksPc+FLdmN553=A>C{7lcIcA!PXy}$>_XCKZ&}3zz|KM0@8$Cx z6U*uhR4*7Bi!AoQBjHRlmkxTT<`+jMXCTn26&$ZBFCEO(+r;E&!)>e%!Bi2F?B&)} zigEy?7!P%Cpxe}%D1ogTuDzTk!QvkBrm#{Ewr#Q68Y(O2^2+?|FjyIE$Ik;Rn9byC zpRr3MG%n6+#5oc!!Fl!%IMl-sSXh4L*M9X9^W@zNUD)zMSBx0|{N}pIsxPZbb7%x< zH+<&#Y!m9_AZ~_=Q@2r^K*e!|3H>S(q3I5q7x`^UPK-MYm$!)?0LzJ(aYGN1A~ca} z@l!j9G=-6-XqCWXD_nk+rrGMaGSa=sr4`=s9np}V+F8O5*Ip;n3V$f_z=P`D5T)ON zoNVCK@G`kfP{kKf#HWjIWpbW1E^4{F6LSvpBfJ3OT{z(HnC;X1KC><^jN!%djd1-Z zlBMv%7w={V8$HtUFn)SPpIgxeD5m{{C|?U%E=ZW#s2t*mA*gL|NhNadlbaoZMGvk@Ru+9RI-TN|9zc+aNv=P-ld4QJXzw&_4)5FhDR;l z8Y%Eoe{>*nEZHnKKG3meL_K3ll8V2$fx^K%^BuaH3(I$XA>FaKuVN|93KBN)7(&t360jM0w6=sTMqn^i zBr7ziQx{qb%eQ~*`&az*Q@DFaF@mI+x1e2c>M8U6Dn@ zj&17m^~tC)>6w2st@dxAVXclqG~TYAfK9g{kLI-DwFtU9y;AH&5VOIKHNy z-Q2^?8Sdy_qMR?*;<-p!i$BOnfyN~qrk)!%10Tky&wszUr!e=-Wb?qTh;Uzb_(1j4 z$*c5KQ<#Usk@N@&FmzYoL^SO%!7FbLd_$%UU26Pp&>4*cH1J7T$-*5k7`!_$Agg(ir7RD!y;b&ZBj4t8?w*gxclAHqGyi(jAM~d* zWEU-kPZW!S$gSIcPk*lZof=7#J1=rMoqqua{bjL3r3bBBxBWj)`He^KdG)WwTEfg( z?8{4XkdygEKBEFRK9J#4FT*SUYk1Xv1rxI;u4DHDM#Z5ld4*-DH64-k9#a(W&7!v? zW*I~zY49g{v6qeW(npROEn`Cxj&AGUGd^pvpW%f7TCxgiE|$^+K+rh z$+0zQb7g~%X+!*l$}}wsA0u?$tzu}*+}06j31jHVmeE{Vi}u#^4SZ^5Aa%2b*rCi| zHbQVXA9ikx;e(h39}nNx%wog;hs**5n`e=-5$xPC1S3FGb^av;JBC8z2zIpZ#}Mo& zUJJq6VJ%|uv30|J-4v`ViXMa6WZ&0c^Z@8 zg_h|O{Z$YrEax>^A@?LJn_axvn&JWR1Z3Y&L`LwJAJ+Hx^NXI7-KTqfZ+k!&!b%oQ zfqkcea?Udc1Oh**zUES=oci19UYjyr67BL z$37SciY0MeMsj`LhZ}9kuFLx%IqMQ~SrF{_PJSCu+`KqACY-9Vv0AO4@h`Q_O^T%) z5>U`1it|XH#0ZG4$^s5#*Ibj zYIyav@_-^d{-AfXUJ<{wMG!M^N&TqeK*L?Qu;5QB$boNh)qqh37x7dA>yNg>SYBZ5g>w%wRvlrgC35cM)eM3FR!Ue_kPKgU1Dl%$su}N{;#ar(6&}Gq z=*_8z*RAl8WIJ-ye&Ijpd6*;^KK-y_AC1Kh;xYPz-fGnr5&t9j67fc{2Ff`GdEgBR%v&nhoVy(FRX`sQUE2j@`m(!m(Qo_kil+~b!s z@)z{H`-N-W`~5V0`4@7L-cKI`>oa>4i7np2yYI1~_t-n^1225y3{*ozs}o$$r`>fd z2ReWgVwHhC_qhCyrobN0`5jGxyjsK3tmfqxZ`RcTzr zvj8Na%d@!SyZ3?4#P3-;t#Y_i^>eQ5kca;d*mx%ElNB=vU=|sSS3#o6xuYuZSHy%q zwLKv7_cx9Gs!Mh*dN-SH5h8I7P%WRjUw(B~5$Hq|s0rmc%?QoC?LG;v^f-2v8H0AK ziA&jl{3K7Gho+hs=tGQ<)lu~bY1qU3KObR)?_gr(2w`CwVa-;M^rI2->fbg(z^4&z zQsOgH_W0!0B5kyY>rCnk%U8bVXJ7n!A4V^(*pQmKg>TA+% z7nb>Rpm%DMlOvIXsRWH^%Pdepm@yIOW*Kr|-gR8QY|cXKZYi_Ms&FA>+G5YoEF#ygv%6lhceMUNA+3 ztWr0#@Z}T2XMdK2FRzBMCU#=$q3bw%JqdsODGF!@$U0{`b(R!Fo*`#NxWx79a z0B(Fh)*H&bGUtZM8{B@NRGk5<>*dY|rMLEBE%XI{U6m>7ozk#9!Y2F^xdXsDJU*3e zBd4f+93hb;l0$22lN=J#;y)*Vk?E=Uu`Q%MMmJVzRJxNS!3XM_>e}5;3HbG7Y1(?) zpbuTlPMi9JgN?(v_-=Zn^Iicsl+0A-^XeZQNy+@wBw)kUyycDZ)zXbg#^MJc+15F( zC~6eR9YD#mdA@c@b%rllnLG*x5mM&MB?y;(F7|~bQ#;rfT}>%m2NbIA0eDU|@kFA* z)ufpT8#_^vB8m7}iL>C;J`^rdG|EoMWkoooWCY!!dsYPN!89ldmS zxG1JN=w+t0g}N$V=_rTw>_e-NK;qz6CY>tAzmntF4}>ALiJLMw4P_(c%aBsGvltE% zD-#aYaZduZrVVI63<8{wKthO=D#=)6EX3>j}oR z-npl)@vH-TU4c|mbb4q%i@+3oTnRaWuu%5B*>X1HE1jt3(2W!h#>5aDY4mnRwGKwVc#?% z359u7aP1#W;R>G(-GS2FTX<#p4J6e{DrFF%xRS0;=Za>TzC7Hi`Kad(n7XH1)y31p z={rcG+hJcLGuO`x^%op7MmC*pg5m;Ga%KSpGke28s9iOiQrB_WLK;M*Xg4woP8505 zNs6ZDgiVDh;o;l81|t?Hd5HySnnL+npF=h_7wFmq|HOojUvgQlPT-2hEBxIj6)zd? z)gmS1AU+GDZ}72|8x@PN_atL4FKHHJ-CX|4Z-3wew{E_4;TL~#@GS>|wgwX2MWrN@ zN{~f$1i(dCbn7{|sPUCY=1v6q+cTmjwkxNs{4e-OK^q?PR3_rGvU_T$shM7RHJiT2 zwOV1{_q56YxA!f+V4Ty;0gZA9TD~e#a)+)#NhxF+d>Y>RXOSyM4|yyaHrj%L->RQy zF~eGX!{s*cD?0GFnODMxA9I?dJVHF%D!k-(OP`qumuIz)St=Od5(|F7VK+^1bUfS3 zbYJ)KcWry%jsNti^PchKC)|i{P#CQMrzi!>1h$bEe?3~jmuV)wg{WI)!U$QG|1hl) zgA{T5G&4pRlu{tkTa??Oe2&XgC4M7b!M?CwD~-9rlOU~|J|THUfsf_`Gd3PdK_a=h z{LD1A|D|Wc>n@9#Gu%19GQ8%y5r~2-T`fQByca$!KPRiC{5(SUA0J{d5Q1P@`sG4e zc|+$xF}B2y%hyX$$gX%YxSnb#TG`9h9;MPJ;U)L{xANZ6ra`U2B)#V! z`JmERwB{h7`{wi11_WTL`MfkbE_klBe7sPQEW&Cqh0}yHxoCo`Ud3Tf+O{3M0ENsJ z1frNI4bvO@in7Y<9x*^wPm_~RavBON`EU_exz$c5q7Wg=*-w!bfJE`3o4Pvuzc@`u z_m3;mbn>8<3AR}L0o#$zIqYj(SSc;C+3hE%$!r+Qq0(BD5EBFcc$b~+6KyGjNG-4$ zt^~RVk}LYa!RXUn*c#6%0*7*RsjVV=MkO?NPB=@~sF+KMNw(wOU+#{F3~KF6mGaJS zn4>rX?2bt5{79_>_a1p#@<=e{^V66{YBv6@3e7Ra*@{r&R#$t-M$l(5pko? zwOe7L$rD!3?v#`298UnjGE9Z?ikU%As6tYF59budLrc>-c?Q^=5r`K8{&ZvuYi{4(RR#?p0tLNp%$FQr*1!=+khA0WaS3B>ck}}L z6M02Q;*3#^NEE%k0*K`cW&&sXVtaubEK;S1k^q@@qj9N$@LB{5h775iK52gH=So=w zohdgR_1C<(vFJ4p%0qt<9m_F&FkCt&f4%Ua6~2(ziH3?o2S}OF+>1{>T5#eo(j7>~ z8^nEh0L$`<8R6O`k`v7$7kvRqk-~){Z5C94uWZQzfVfx!+4FTkiFvtdCNe1)qpIH$ z+qeqHiiJA`@jz)&Zzldnh+fErz9}zTf71P<@5uWwpwEIsPS2Hl6f@i&yL}h8Ur=r# zTBLwV7|$Qqi~?wri4|bdWnzI=k z3KN%cg)cNUsf?ye&IZBh&hXno=DaQ$ugGjt#RdrUtm>UlIVCsFz&1ILkj*{7JpP;7 zzN>uUjF#67YsTTKrOptlaxq{`qspNtGY~dUqB#4KG$k}_GDtt8-GG>*4bv@=pQ}*+ z#;Q;vn#ab&)}k1;b#zsg8z#n{{A^%?oh&RdmusuqQbO8Kr@~}4vyPB_QeHhn1AO!d zaj%mxksgtOv=qBtD;w!o`Jx%pzb+92;<3~E>g1aa zun^kOTfH69yif(CpBj4&fFnOp%>$)_Hy=*<+ihdpiIHlf{-otKAiFzTepM?T;f`Mw z?~R`t(S;-h7%24CCzOhmhskBcH7KD7`0U7zkb*hX8nCjkP=;1kC)|~6=WTYr^-z&e zctnkc<-zGb!jqx#m_@QNnUQP78b;NVot1l8$AnBcjx$Vmx&d;yBQ?a+42GZlNIRB+ z`_;tR=Gkmo4A1g+bcVKNIg_Xnk)uB5m%@x9p34XM3S%HND?bgQ@!G z-;_KmB9Ks%r)&<(M*C7kk?1v39lqMlD+wg@e@X95P6;$)c^udub>UuqHE&rs4uu*f z9aT?$(EY!~-dEI1$G#*n^tVa*VZ?J5M^c;_hY_7MDo6d{=if~2V(F*NFj9?-dc8^> zkBd6vY1|1;vz9yL8bspJ#Y2pEHn`UsRk{C|oP(cd@VvoU8d%4zB9! zT+Ct&AUyEQ7F)c%t(KhtYZj_F?Ezf)(;1BcSbN!s1_FI?o&c&qQv8Q{d67O#rD*we zx))?uo~mtOWSCyCtL7I_->=VV3v}qo$mU0XtfxZ%O%ea~Wo= zd>;GRVu12S8`*OV*o@Q;z=Pt&e|xg>KIgsb9-6X#-(qILK^^v0qvIM-LrR=xf-?&I zMZEqe+aGE9^IqbXs^%6d;` zXh@%z-=NoAL|u_{DXFO;LVbd&aEOKnGNHBfTo-zsT`22$*#0%l7Y(%5`WPF16H8Y$ z_$lE8(aaW(2y|)ekJgoc)H|Q+1MvqDVB`}Zo)6_}-T*O}_i&ZoP-~Iks}(na zOk<%jmTC+Af<3x~LUfp9Z@=_H5EKgOK1sO$&&46gz(E$sR$XU4Ovf)3lLj-Gu7F_` z@sMirMb-yJ4KTy>^lXkggnmTx$XeAV2`8r-j2rp0pOX>2mkNFCI2o&j!dn#oeYhbH zXkW7&W`kZun*z?ItRRNPrYdd7x`k_{YM*bX7nv>A2C5kW;LrxX}qubsj*Z zG4mKBXVge)W(DAV(ga9fdmC7x#3ld+t`F4YR8k{Yr^a>Ii>49t$p|k)7=#D1<_YmvlcwCl_`CxzWOegaU0QChnV z;x58N1J*1}o7iV(fQAeltUFg`mN5xkmW8uY&y>X2@P<_E98F&yY33EP8z7}P_+&hS zlic9RlgE0oGT&j{G)()PT~aI3=%~w!9~F(~x6b2;h|{&iWm}Q1Of4uh@^?l^LP3p8 z6VXH0yaImFSWVGN(aCP~dMH|3L=UbG3b%bxcxFr7X&v5F-+y z4HdZa(Z&>i#)Wa-Xed0W+hI=XmV7WkJyiM;TLl7C7p)v++HD?#hboa-MceLk8me6^ z{BQ||)+^{E^Ljp}726SL&wkZTANhbvH+g{y`PXz1q-3aL9Tb*EK#V$=X%puock8iY zDu$AB`~eGGCw@MH#MuI_`iq>0iA~v@R_QZAs5rJ=q{Y{@p!UK6&jG%Ttw>_rcHVwf zMkX66g%5&`Q$0fJA~623?^Di*QAW2Sd+&Hmp&-{+u>bl>0evC4&aqD;Ae7w$D;g52{ZI9PsUi|8gJ~~f zEKb z3M#_L0rZ3Szd>)AT`47upZxzpuvB~nq?J#DJXxy`wTj!7Cj`IfwCo{#4VwIkIBDV_ zRGp4jOrPrynJ`xsGJP_7Sl59yiJ68`se18}D%ej?&Ck5n&zdQ2{Q=9Rkff$Yxqa%I zT7baw5L*$0gv-+-_C@|(zasWqy%e74OjcoQYZX#sNiVw^d(BZ=Xn8lu(>H5(gW^6@<~kN{1O z6V9X6c3%=&ZI!Q8x6vok&b~^9Q!&VjvlGF2J>}Hv^6#)C6sB3PA4fLy1NHG%u4#TS ziKI~cW-I{|qwBPIPiHo*#om#B5r(oq(QKF&)IMTZRbpKuYK8LRHbxoB8e3FKIiY#! zAP;V44e*9bWM|vsNv*ZXrTLlK+3)d#hg)YKJ-B1f`=8&wf+)WT4ulZ) z;!6-K5i)4CEemBkJ4v7vVh&b;Q?uc2TV|z@#C^hxO2jfhn|K}sjdB-_I5|0DzERl! zA$SS~SS)Wbn}-km6qxc*Am%eHD1iJrN@lgGmWQh^hcfitScw<$OrMD$1ad^oVMZ!E zc_+_n<2|No{rQIuZH|U9c8)VRWh>R-w0B>Cv~Rs~(V6z!2Kg%*rCb2?(BJSK@MDd}ejx4fTflh5S4=*heO<4A&7Q z>JD_l_E1DYMTdQ{VzJntwBoDoK-Sn8bTJz8XX}s@$5J6E8RjVA`vZ2nv=Bq6F|DYN^san`^W$~m~lS|?e_;=P;Jj$LDV1^q4MsX}FXw(N+%Lzkj z5muu!`gpt6@8}-7XiO)UcgZLN$i{pcs+bfJ;)Ln)?t%e zEFteh&fUZfK@F?eQo?ysg6T321!2O><~Vn2xrQ!^H6MG%bq zra6#oRN^>?c|aCf7zlw7E+RRMdLR{R72}C-rGe@hahJNdT7va* z&RRaNrZeUf_pCgVxq(B(j3)xmK)jF+JzDS*obH5oGsJorn42mn^kgB4#!f^5DQM=F z*f-pkxtav)v|0G%GcPT z1;3LfJU&mb1q~to)n_RUPA$!}T6vx(!*^8kWAeH4w4;b5X=NB+;#->)yGs}%!X^uk z2B30AXW?~k$U{dw8A+4}9W^c0XJyO0%EFsIKs;GvmKl%%vzomJ@(^=rmRWe`?R8y@ z8|@o;r@90MX+B5_dd(7x?SsTo^-8d-hei3;+0r>wVmWRKg&SW zB`1J8;hBm3atEkBmY6UaF=;siP)~(WSWkQyUGKuziF&yt*)t$W+z&o%rXX0U$d9oG z|Aah%&=w4VNf%;9G!fz?(o_@Pb|U3PhtZfF3o3z&bv#e_8Ugon*AsENa%h1Jv5B0? zhF~~9H!;1sW}G#MCxkf}UEwqhVCOn@f(xam$Tgy8I2fvl^J2tgoY<++nv&>W)kd7G zS#cKrSsjUeimvBF`UEXe13Kq<57sAr?@m-LSq$SCEGl}a#_g_-Gi7cV+b(g*Dr{Vc zw8w{HKw(8_L07F!XT_^0Ryt866z)K8Y^`Uo?AR>l6kafv>lcd2R`3(}&73_oZBckO zlE{`0jQ2=?8(w798|D|KLf&d27TVn|vw)^HC(h0(pknF1C3J}b#4d%+dvFQq$OCYZ zt)_H@nF`7YJTkv0qIZL774q4L5XuX4(F`Cf;+grr^7#`AClNqmKTeNp2}5ke6DZBH{$bzIWGza<2Q8;PuK~Ia+L`lmZlQB52%+;t*8X^oJv+-6z)G_CBrtx zYlZyb-r@uTcU*$4!A_0_D;1hSM`y4amE{GJGi8ZSqJ_U_;PV+(ZucdM)hME%1OrWu zTpbR$Aq#Zh7d7mWc@m=@m_`&iC3_9ewIbsN{o>^WO=VPVj!3(KAI0S=Ube!oQ2uy+ zZ?NydxF~&E7qv<)>=9ZicV@DoB-*L5IEF9yU;;I@-YuX{#tk=5Wo%@xr3{lJ@7c58 zp$5kntPYJQp0F!X^vA;h6t+7DWfWG96`-lE!O_}zMs&i)Q_;jZ^)~!?UHIX8Qa{S? zPCFPzivba(C*Q-nzxfEEM83M_BEKMlWj-fQ{ z(mJG|D~Hb{W`=Px-Lw_6!#B!nDQ>U};DSQX1n#(O0(S^EBbjiLz=JR)agc%89Wrn; z3;j2NzhP`tYRk7ULR9Xn9b0R2vKSjfJcHSH#$Fw9i%ylYS>11&+skKQV|HK6|36OdtLWmi;K6Zbi#dr^S{;3+5w3 z3NrnS5=Gs;{hzF9*#mqBv$r#G@z?N(y9pniVkT zf2Vp-!Vi7e!7Jgo(y&-t>mXt@uNfmEpWdCbP6|-wm^xik5{wFHoOPlS_-h|VbL62s z82NrSz&s)pm;!$|{1^ttp$-gpg$slVoMS@TA1bAQK~8(*Zj}O3=p8ZBuB~8(206e+ z1@?!`Qf><`k;L#U;f$_(e}q~3qNR4?B8ThRG%?kIt~PX5TOwY8EEKA)t zr)}%1b{3DQng*k%O8*!C&^_+R&fSN8ikRg56>0Ev2)3WiM_GvpCN?bhTQ53bF-+Ko zpQtNR9`1EKBSnh(U;V<5Wr~7V%A7-}16$IW);Z~_QAWnAc{e?<}6I&K2N1162^A1 z*}7P7a12jpi9_|ODL6PYP10qqq|3gxF)SAQ$5uycyc-6`$>u&vXFJj@c^lj3*E={0 z90Tn^5&<|^HJ11(U|^Tfwbe3H0LI$E8iu@jad5mfX61e2j-gnz$L8u{bAuCjI!D*Y z89#?Y$C4Vlwpv#mzgVrQR;iz>>f}(MEJ0S(?OT^q6MS8*S*%Wo8fcv`$;hJ)0#a>o z%TkYiz*+@-B+NQPt(1thL6bA8R0-oLS*ffyK{7|wgS>Nob3PIOwWHD zCXOM$rfV9e>~@t_?I_!1d#)f4tnl1af-A=AhR?3)6dy^O{I)$YLL)9A^(->##?nt8&*tl21nOlur)^JU}q$xmJqa{R9hXqg{qRTRRTi^>y z_64oT4YKWck>cI-!s?N@6IO||dwOv`7ST<5@VB*3d=Hc7lkd9l1nT4Or}GVkv`v}+<`fPXT)2BWeIH)IDt&z410@R52K86~n|6_XVC$>*V7lYpzwX-_ESG*ujC6k$`YYHSVfnr;Y%LhCsiBwjFv2HC=)D!-9I$Fmc z@J0lucD^K^hpM%%;HZT?#CnS6jM&q+j3}l`%TU-IdirARI-PQsId)g0sb2b_>Vvq) zJkFkp@LI)hIV*-%ejQ*%a z38c1w+)}QaFF+oep1f4s#+Mw&gR(u)jLDGTqv^Z>JiyjcrK((clA2>^4;;!Qm)nKm_xOq+1Af?xKtHT=c70sxtTQTWKX_%6#US5bwf0x(e)i1dY`6W& zK7c0OD;OP*1e*;@`+rL(%OY+W1Q%X$VlqPew#Y7?X4VVLfF`_M`NApLNqjw_!*>N? zzyTA`0uJRZ8S2!wSYAsY#wA*2l`2ZxG1VbBXX!m7Jf@0z-LKBP2whdW@>I`3wy;*q zSjlcfM$7X}Q~HRx`!;z{G(D<9j9r8?Am?9uF>yVC@HNZJ*r7y$L!NP7Vi|J#_obXX zs!Ej}+$_CSjkt81$~o;M2t$oD;8;MwAwY6WkH&{aF3*903MT?tX1~ll;fb z+quC0_5u_@B0y4~_$2OMW$%GaY|q)Irvj647R`@Z!H9O_8R_hekk=*_LvtbHW&`~p z%IGDi1~c3ZCD7j$Ta|;6ok3!}^3^;?zz;43 z)E`G#H6C&cCKsg(*M-YhdU=W_7WWZdQcIzbGm8mgFLO@lfvW}wO|-j5{YDWWP^1q3 zKvkM8Z6`Z?uOy5N0%=O#5i2tP=Z!WnZ3?K%StuzQKUzEdC`O7xo3mI9Y*c9HZaMWJ zj=_-3tjlN=hFio?PQ>FL8SHh0u7GufEPL9NBvLy3guN^T3ShL+m;oGN9GV?~NkLM4 z!!4heMdxBHaFtuP`CwzbqLM9YiBU-7w4+2QB1hLFfZrpktaxf;)-}r)ggcOkrzc_q zEk;Yo^BSM2RnWYrVjC9ASJ+9iK^P;D$;|qVdX8fPSu`v|Tzs6>T{71vkq4S5FN8Xjk_v+#?e?%;0WS-n>Wj z$V!#>t$v}ou_VHRV6u<@Zn!WaruF5UoSXtIl%@&>$N6thbV+rekQzMj`)UPXw8$>>tk5P*ZtB=HI%&?6-fcs|AFnG2>0mE;Fv zrcS+r6F81Z@mMiX4pv zQnB003wI;n^eSEwnIdh6|HVfP-H3jCxP&{l7(5hT4us7l z?9x_L9pZs0&Rq7sMr8dkwRv3Api2-977_EnNIMNF$X3^>HBd46UsNdH7WHcCoAS!< z#_fZ9W_Vx*OQ*rX;gcVU*J_xspy^yGl;22DxfKB0IX%lPzV8}Z(VpLG?6gDk=dO`YO;bxVwTx)<_d2uk=dh?Vvysj*8SM43FINHWaE$Z7cX zIW|@ye4xe@@x@MnPXe<sJ0EKS0ca@E zH4+r?)TSa{XC9JpsCWLSW6L(cB$x%6_d9Kkom}4WQ@}*hHa^5sP-G~~ZTif7t zQ3eAUcc9pA=PXLnAJ0Po$GBMHfabKa+x3v^)eo);<&aLoorECtFBgn6wh)_Xr%95m zK_2l?6-#C)pp$aEkxQW!F%#}OoP7KAs;1Fv{ z)vaLd^=7;Nf~oQs+O&qcHT_^7hTu#FYl%}ILC0~~7>L;{ry&nt@P)5IiY1gQDPD>3 zZ%NoEIRICTYc7-lmIRj`qU&f%VlCoYbp;^*Aqb2aE5A3;)+oWQ8jJ#v0V{<<7HkQE zxZ}~nsJenjjjxVA8r1YkGR2wHAiRO61pw9qJhcX%*kl8|OmcCkg7Af;i@p#(WbRiD zzAQ@Y1M&7vSyG`Pnc7rQVUMeJC@KsLaF+l;Ip15nPlB z1dYOF)WYh>`tDNhcqigPbsfS2+!B?dq7^`Sm75%z`=M%#!yY)RU>emnI=eog(;2~~iovVX=!tweeP zYkQfHF*0emzu1nj8h4l-^>Ls^)6oZ2E`U!(mwZ-S<%|X|>&cBTnzGSffCbBeY7!Er zCYM5+1+H`{4fkk69x^E*QuZo_&1+%X$$~&?u8)8S)tS=(xb6{&id2(Q&B=mA8cyU0 zFg*hHQrXaK(%1vq1fKwvsMm#Yb~yVIdBxLkBF(5-MjBJ=e3?t+U5ag?7Byw^#^;HOYuN8DOB>qKjxwNOjMN> zz7#l{CLC2lPtm{!>4Crz@;O66rUIF3(F>%T-i(rvhOV}-0iG9zEASP2iJHC&e=4C0 zvu&yrQ}&BxrR!;?-I4duktDu&A1`>Eqq!Q;HkUO+$(aqZoZh(7*+wk`om11Jk8M{$ z+#SdUc}m8>4#fg5w$IRErX|X~+z8T+fe5$72HTL#SVZRu$tte3z!ViPzX;t%4*#^^ zJX|{za0sc{39X_A3CdU1yIe5Swp-O6Vhs_S6escxV5PoX5Xpi|`^(v%@$+L^kJ^q&kqEuZ;M%TwVit z7J7t#*vcdFtLtg7cg0)fw|#vQ!)*mZUx7xG*nhud$4V} z#iAyG>ZT4Ueye<2G&|BNWv}RP8*v!=3ID()824S%j5ihyD>s~)sX_>D_FUw*-kl8= z0~A34foyhXA6Q183}S%G)`jxPR4pd3OP9c5Iawqk4#cEbz0nduzmZEQs~s^a6CE-B z+V7!@`n_~ZoC@~C=qmbQ^iA}`=o_VaGl7U60ZQH^z#+YespO$j^@`$DV~I;Js-ed$ z7Bhe|o(oZ2jgD3kq7;9XjX6oW>(T7;`D~szi_o>7qSWG~?3r%PFg}qqh#qCVjNEGJ zZXHcO-AUacFIxJenL&rNUmh?;iO3Pk@B=y#V-sVgZ&*=UN`)3L&^#hf&HEfZwj412 z9nw73bltpwst?F1jLqwTFhtEuo3~14E@hk;mX6Igr2%)nI7dGdcKLNM9dW+8KlQ5D z7c^ejfT~B2MQVebu7LQMdMVIg$minz;kWf9R?&i+cid_Fq@VLqn(wAeeM+|j>rmAJ zj3|5v_;6FGiC85cb#RW03pNa0S!B$*yko86tL@=79b%-}e9k;Xk(g;cIHejME9OEE z#otq}xS?(>u1VsDEC1)6-6iZGpacBUZf{a95eAwEc}P;N~J?5k+2^2%&W7^5MM0=V)-Z79m}`mXHu}olFmd>)qI@WOv2QKJOXMgMe6R{B}OAJA_wZEGJqn~(1BBR1_D*LB;W$+qDeH$rgViK zlm&LSPb|2?q^@8%a0FeUNMv^1EBOY0z=|QU*<1_6hsdxy8PjNuS*|r^dhDgo!=-0D zhPg<_sctR4ZnnqM*Dy%s82|~X8a65ojyPL9jRr5yAf`28TETV8TuVd?YgZuPke>q& zjbGS#XkU;R&`=&A4flK>wQ$DU^iUsAih9l6D*voJ>1&zuZSd4+E$|E13a)zGN zHkhoYCUcUHGANeuF)tEHHQs8$lms9}i)YuuGDY%_Ac~faB{p%PfGQR2&^NsccSU#~ z@`_`7$#e6&93&cjM#j41Q$86VPneCGTK+v#`CBYQPv0G-dD3xb;M(XvU07N{Qj7D@0mfVJ}ln=V+ zz4E9*-EHzm702~CP6!C`dc6$nk%UNEn7pL?eaTHw8f@3`rA&09jn|1D6D6S9ynJQ_ z93N`ED_^M3v45dkd?4imsc*l0*=`FH_ecF(1V-zh4Kr4|S;3A`t%3V|?4H53E<*ddhH*q)BYwy8*`4)sd>F9?%s$3L{6)p6Op2hLp3bd%x{!LPh8uE368BiT%^JvU0V(gFo04$@HiSF98} zk)5@XN%$my$Vr-B;%?voyAh1))+LC;tDd*16OVF2h*l|6_)n}mC=Y{@HEh&S6EIVM zDw4Gw(BJ4S)^H)kuc$$|44OLA*cA+SRx2J0l}i4o;!=yEhAj~2pgUUa3MtlxNpbF& z<^kw%VQUZf@&{|0B$0jI=9*_hNos{bhHm&USs>+gsOQp(IR6eZs*+-g|G?PtM{9~_ zjxvQ};3w8>*P18T{*U4A3 z7a81zi*W|MD)23z*GE>A26HQHkfTa4Cg){~K8BE6VVDoZ0nzVO$ z7yKoR@BIlez-!YEWsQa?3Q;M02$^I;tXj`iiGijiDt8UgXiK_JQt~2FnJ!&UUdSOpO})?g3AIh2#I_(w2?sN zTO6sJS5pj0Kjkxv=L{7@J)Mi=#d*NT+#fF%PdfvQq2=WVeo3y8T(RtKH9(dxp)ACy zq8+CL3>$;;CUeKvDd*sakb2sC-^C1kgMft-0l9^B_ApCCvf4dMjI! zl<&~eA!+@5vstRnhHSo`N{vA|xThCI*Dp2~&#)@M_~HPzcm`tn7?UL4skIlt%D8CH z21JV$pc&!yTAPWq4Awbo!bUm8v+`}E-BYG`+;9k-9jflE)daw3>v2l?Ls|k&UNfML z7#CV^gg9?E#tdz=pg+`qtt&Jbp!|`z;?mHC!SQgO3HWRuXeGG%!5>n z=8G*h{h>Q+;t^ovn1fdWD)cR&QrNO&Gsx%Nn_M5324y@v@ar9DTR>m{IOeqW&T;J0 z9=h^f@NxWQnC`6q{mpeHswiikH3X}4@jQ|>SFLd8cf>bWr5pmlBZ>Pnm4i%?!U%T&;NSs$ z1x%-8^|?JdbhVyQL8t+Mb0RW#lzx=uUFS#W=f(FE0Bsa`JOka?Z>W8K%wz2q~mF!FPZuKPV^M?2}-QKnc6I!%R73^&#DWEZU z1cnwSB0OqlOlwvA zPTizgAfSdeuM`g?nR1%EwQI0eddd;mVrP+(9r-Ss15ZAd(2g)0f?D9=nYSX+fh!endE^C zAoVgl^pSU%1DF>X2K$5nIsfF;JPUOQ_aU&vJK)8 z0qRjF5P*yYxKx;Ux<*Dflk!dl4JD@%-y2K``|iLaZZ}(!ct7AP73k@|iN&*cc+d~= zqTTmTVqe8gBcJ{-m7H2Wl9bOt=%7P&EwbsemwP+iI}P8VH$9#;1Q50I@A4ECK75Z~ zy3Dy>Ca~~N{9@qoWGi9Ll)-3N;T2!}>f6%iiHZ2Z*6^LTy!>qLCCVtUE&TFhFZta6 z+5Si2zTA5?_2TXl8-eM2Kdt3)3E0a&=nFYj;|gyRKdd^ zFkId|;F0s@D{rP?xcvHMz5L-JFK@U}IoX#lACPzWM~A$8{y)P&dAY2YKW<+3vA1IC zJYMk|($PX1Y;%Z$qPxrGmbaRKTtB!5Fb*d6FRUe5RLg9PI&#($keu8*=m0iNKnLw# zSxy|fi~mMc5YISCn}bb|QbHa=uEH=#O(=vqAY!yuut7LxrIC!qZgB>nqWw3|M*F_c z4XCb360Ok|d_v#CCuou@M;-FW$C+C_NsEieY%f*_1y=B7kxhh5Nf6XZMNqn;?R#fY zkF~}oZfFbBc}zBOYF3H8YK8$$EBtS2)=KuD@T)c4mNl*LQ*Mz*^(vQ6@!Lo2zLD&( z{v*x=3`X)8rJs(CgojcK!S7~3zXLmgo;4G)2M_7Kl7H2Gz(k*cm-|}xUcLPp-CSSy zUVA^N+tsk!S#jZ*vc6&59KcK$1v1hJB=O zP~A5&keJSk@-_iB$>J6Hh1Y*ADc>}{n4&0VDIEU(ww$PqkNv(gUAZlzzGJl+!qHcI zGV~*^v;qx`^%c*ot^lQcQ{okA_`-p)DwMb7kj_Y0vj4^^=m6%aO-R6dgMi#l^b{RXbE;+xy3?UsE+ zAR<4C6}{-~aA6)sCS?a@aYMcW)S%(P78V+KC@jqnFu(f!Nd0?9{rfq7kvno1{UrD4 zLUCl5?H#b?`qMIrSY=gpNHrm<03AS8#LrJl{%>ECjEB}p(ck6P6UeU5D7n zD9eGC(kyBZa~57OsY<~fp2cG&C<-EGn-X?G>JmgOKM5+Js(2z>pej9J2IOA-U1P?A zwI1w3Z;&wBDO(7ev-v?tpJ+2HeD+?*r+lw4*f^$Lv?)X7#7^`dzM>0vvE7k~L7vsO zq%~iNtcNLQ*3c4`!ll-+!cBFJC^F%V4@lE?#n7AtdAgl}v=I*RxoENIr&MuR7C&GU z9AU<{tg@Oyr{H5f93snCq_~S}vbVwn^8qA!ZTy6jcnW~Wssy6>#_QAY%KhMV`Qf}M z_2m7J3O{KcJj{|I+#Ju5WBB2RU>CMl#Pt{oXC8stIb^Dv=())+9KZ&b-(6N}-ojvJ2%c-1_HfxcaTJ)F4_F;azX_GvEdoKAcNl z*Y3ZpSc3=yBobPX3EB9coGGq(*pZHA@**sz>i|m!CTJ3T=TK_a41_(|;==m!M>GAI zY@RtlTilZky3mJIw5S1ry@3RKR|qV`qmE1!RT9{;C{~Qo~S<+@Asqr6m8JiZT!&2Rz8{n zTCuD9+*N3dCGz2wceTrxh+naFF~@PUSyFiU-5Q6Ecz%)k7sT}KlH5nOTHc?{8S?mF z^{|@tZoR;BR-HwF&;(H zpdrCtRtEn>r9SpGB1tDvvv7S5<_scb{kqE_^gBXBO#Q-SHH7c^H~P@@T_--KB8D z#jzV-`p10KjW(MJ^n@Xm;-g?j4=AZu3{9qfw=Z{!vaY}w2+HKedmqch?|QF@56^!M zNT~=QkG6s<|8yWX`tT7?HfnP?=*q=`XLyH;+YiG-9EahahxMmo;q@xI`V2G*4{uU- z+j{yC9=KM+QUiADOrprL!LZ5XYHegzo|-Rf6AGhV*z;WhaT&C`dq!Zb@k^Ya2h0jD{D$7&PZq~5 zv-NPa*I2>~YV?{GU6g}D8Av0dt)@t|Oo=|w3hz0%ucq2lvO82`q)@f+0=J-3?{Asa z>UK)6jj64M%7oUj9a#CvZST_kf%u7<7_07$KNL>hf>0d8m#H{e^D@kVfN;Gkp5!e{ z$C?w$sZV~ip1Y~?9kUgo6#AuiGvEmb!;rZ^NQXNTc2U`nnS|A;6Hi9MOnFT$ z+U(k5g$GK0A;B~VF7zePGteRlb4ji1$va4mb!uWTwQphWvW4mrTIjXN1`}(8xu99% zx$1@6|4yiKZ915Rx%Q`w75=WqW!FeYcy<^@UXKP;O)UY&*~Rd;#*piQ;k7cxIb=@z z_Kxr`cJ46j8?U&*JuqWb@7rDPo)z`#qp}YVtgDZh2D?En#yOHA%1C<{eMS~O*s4*8 z--I`OEe$Wa(K2L%(&g$26n2I8y@-s^qeim|sKX!q6pF#zd6|T$P_I?~Wj&{J;$cI6 zV!k1I{^hrFpnCU=0Ls7-9ZaKp{Uojq;|5m?{r01+N5OXrXVg=O`CeAOm&H*;)IIm9 z|(xydM}KhKbN-ShhO}h80Y;QSqX-lOBzXQtqBriYs0^V zyYqu`Djf?%?Mdct$S%aWSNFXt6*( zeCA8)8|F=v$o1?LOdA4o@BXxWseOuRf3-$}o(Cq85stMhLC49nil3pKeL>Z5`njvo z@&PhtEkoh*mZGIToug8TS*A+m8TorNr3~%Aj-dj}>(y8@2~|-$sk-|YI+s~liG-zf z&7JVWQ=9Qq6TrR2Ctc~J09xqx7Ls~=`LK z;~ku=NS1gSutD>BswS7bu4%}w!7rczT@Ha^{PB429FA9MTN)9MCj$~;y$Wf$lBZ)^ zL}}j9tcdH6EiC7kMmoSPsE^75vl?!-;<}fuoB&mi4ydFluVCX|>8Tpm>t8Zb;OGdZ zK==>ai$fYBV@S**oD?Tbmgd1nS{|QPJG6%Hoj$!cSd0Rs#t2 z5aU@s@_4qYBd@*jUtP^7j$F;Ws`={WW7UM+{b|#*(7TTq&(SP`cZ%od!m#H{tb5?h z>O?peDT1?6ok`BqmhfdHB_bYeiv=LaPPk`;cG|Y!wTS8=GCedPzH{UeIEG;^`IN{d zpG+&SctHFSiCXiG%xo&M1QT~BeC3}hvVtGDl6_(u(rhBm->lzRQPONwfM&{nAbFr& zt%@w-K&JGVuI%HaN~(0+KK{$e2S2jp5-mo?N@m}>o}C)_Fna@zklq0*CE*Ky(jYOs z!(L7uFI_@II04vG7#_Y0Te(&*ypkQ(9m9So9*A~zxnv%bal_MJE6}BwvHaOI)!TvJ zoJ#GQ?68x=U=jsO0Vs&~%z^yf-Lp9UgUQ>JkR+Uigj@MBv#J!2nnlG)0go0bkk3H$ z1n#RRnBa86>HdE4aXTSmAEEQGHa56}aJj?@!TS;Pp}CP!^f$ZWOF2*{ou-cJH;mZVJUq^@n8=^P<_I~i_crI5@( zk70^ufDFE>x~PVrfkyPJaX?c7S>2gYADU5;n5t8pce^g285BO|5s1+@_CZHUl|_?c z9QblriGFw~0LNb~Mqs>4gU<8RV^Es^6%tm5>eYeSvqGk1<0MJ3F;Fi7dRIinPcT^^ zC%7rVd;Nr8V*>^GfgfTR_}w%yF2f)gg2*{J6OVdP@YwM1JW>hspk;$x^XTsp(|oOBIFr`aX($<=R< z6)s;n6Lhu(bFtGl;c@Z(xqltsKm99@YTnDoz#5GD`wukVKUVLH!3?bfbQlGQey-M$ zry@mF?A#}erEP!wYW?~A6K-_r8t{fVCKc8Lh?B~CG-N)Ogbyc1;qB`*hbE)saQcbF zQwL2V;f&#Gq&kQs5?7q-$k=+QNAeJQgDIF?NQy@!I7;a=STC!G-#KZ@VpS+}cxazl z6rURlIED z@>DV>AXMu#guYQd$`FqJ4Kw*Hm<- z)@C?|i|I#X3@`_0m8<>q-=IHfc{Oec2+T1zY0MiL^Etz49z_@dhzz!T0ZL^wYBA0E z)RFE1@pSI#vKAR=Sd<4VXc;hqgx6#%Qb>rMtHiSq%luqeJ~ML*o1M@W2(an#T9!k` zmf43D-epvn17N7$YPAwpq~(56$Qh;>keEUF)>QjBfMGH8OTYDq7tE(?^+HOnwv^wB z3vn+P4?FfE%qAQLWuzGOM+#Lw&6QHiQ#FQ7$?2i=+O!SXS#eP3sy%SFEZ+c;#Wab7 z%5p6}vif1t8;X#Q@uPh1>e z3X+;U7!szTk#7<~O>Atf-9EW+5_Z3?|8PEIc8`+uWrmNb9xgqi_Q1BPV+?<^D<)Az z#{V)AQ(An=@~00YvAbEDKUr#*W+$AE3~wpy+d;kXy2t*}$Oz`1od(LgW(G5~-e-Rb&OZXmlh*NLKE>Kdhuby>E_7vWKoABW; z{x0E4$|N2D2kLi_l!g+BdI2_azy=PkQ?h5NFQ;S|2$yn2eLL!(Mmr$d+w4)#<(hiK zcbhk_p>)TN0)(5DEkU8*f&Ozq*f{`br*_2S?tzi?x`7wT1E}au4pYP!)l@M+WF~`E zEKzOE>sySXJ`=;95Q^>%rs#ZbUwOe>uDmLS2cib~&ZJej^_a{#=WLufNxZeLk!1t$o_uOPuU<<7`QDrH#<3RKYl{;nwKs1e#LtN!rl*qhkI+dBljd-|(@#o1lrj zTIE?)a>uc%Pe&sYduG;al^iQ4y+y3Cu=w75GCK8N86*dqwTO{;zTs6IJ zc)}W<^Dob6-9{2NgsLvFP9>I`KfCJ^BFpkCq8jWf#jvD6Xx>yc^5yse^|L6$yDB%e zX_3ZiDo2l4OX1bhANU5DC&i-2b*H=++7tATg16Zp*6deuGz}aLp?TNxg|s^Q&=W_V z%rYmTD8>=C9eG${u>22WF271onUhqWxeeKMRO0T!BhI2#9$k;tbxL-w9CD%nsEWIA z!<%#PI?*pBr7xSWYz}Y5=SS9^TmULfU&WqfPv1YL^l5}RvX#3WXm@pL$oD8(xI^(efAButehV0}%$fU!0*KQ*F;6DnP1tzC!C?0@^ zM5-`9J(ztveEfA;c=?~gln7E|tuQxo8Ry)s=WXLc)_uiWsyIH5&Ks_)!gjQ#JMeF@ zLzLgI%|H^&k^#mvxh-Bli4M>K*6Q=t;ux+NA_NiY`>C((hI??rJ zdXrPFY)1P!rEH@hUl14G?Wxcaep=C_5~)E8E;D21$(VA?%q*`U66;SWjHL#C=hZTG}krvYp zp9WE(AG7w@6OiUIYY`7~z2hw}mh>b{EQzsxf<&XFhsaOE+*0#Yk6>DOzL5_yw#&b# zSgUueim@u#v9sod(j8#u)Hzkxwsur39x^D(P*U4KV>w6j|r^8 zF7Fo;AxoH8TgFTYMrFK|Km8~-jOpl)>s=(6KwLe{iCO0cVKTW>E%{VB8{iwCxaI{f z*M?J4;ZQW@_yJ1+PWXh`6l%!Fv^~0lz9V|bomy^@!GsXf@kb2f!!1NX@9Cs zbcEoMpyNE0@fA$Tp6!+tVPt~xNzh!n;qQHNrJnV?pdm3At2)}Lho|b1zO8UtXmvYb zS}o@3otCin8{YSD&VZzr!8v$|C0DrqWTJ_4jnXajaH5*tU(M`asII#5)cmQDJ*Ijp z#dAV+S9BmwCeGK7E1*o%E%@|=%<=NhS@q&*lS@&}StF)yb!>8Da{rfD*Fane4lcr0 zCm4(+zvbh>d)fm|s&tR5&cOP?`o_LpgKYX3c0LVm{8<`V3t^TJ$M1U0Jh2b-HY> z#f>VRpoN9k!UkL?s+n)~tgUB{L4~f` z(VF2Q87VG~B_Dg?GKxdCS_!;N-(uQ`?vBtIcQX1RhJ7J{h_ddGh#a{eXGfxiVJiU& z5X-KsgDQD(*_ajN=uCu^gEXLEc=5d;`B<1Ho@4-ufV(yJpdVDqtMX%! zs>4-Z19i(kgytQ|F&^8{t($KbS7gPJ4Jk|~%piJ%E=@=}0!RS`uS$4xioSkt6OU#{ zDWi+w-*O)Zd=SZ@A1ufCCg*2?9S~dn;2TP)?gWx3g$HZp$>YtOEKRai?HI%1s@O8t zqy|@Bj#CRx{{OP}?!lH_cYWvH`#kQs_uSj}wA7MY>IU{bX+o1~jW08eQ4tl~ebJ+_ zg)GZfET^DGRd&^Qx&?(~<5AVLthOY}GPc1_a4HxCWRPQb2N)6_g)t%+j2$W%ii8OX z#Jpld4A{IqW32gnzH6UzPqzg%e~jC@d!N1cdi~b#y?*Prh}l9{5x8WVp2K87L?@`` zJ5FrVWIp%|F-0VO>`(k~FeE)wAo5M^NJO>6%Q>j0U$I;t3rmrCZu<2E0u$ZA^i8Hf zwpT3B>73el;R@M>?W~~r+a5Z7h>5}U&xh+Pkj-9##VXuLYq$KfnWGpFi~aum#HDbP zYggQ!HebXHP+PftV;#Ohpr!lodE+KJniSGU00i&qII+M1GOtMYfcB{S(sO5Q4-by> zeJ_O=4&7C3Q&}%!`YkolF3|Se?;^PP4=O3EJZ(9h$o{39R0oFuUY@#*jZYhLipZwZ zJl>%h<|&&qaNP6NUBbW2NJmzm`EbEO0CgBOsEYpJTq%esOWa1hBnaUEM(&d#u!4zKsTc7mx2Ucj}ELWFOQs2qFYHt=(p?e02Xj3I-JFD5mRoz6W#(b|K?t&*{-d-6kR)j)^2H32 z%iStAT&UWIY=?b#x{(guL^#6q!;>oo{%#TY42knQggN>Hxgi`zA)%5_tR0hwk1Fw~ z?Qte{W|VG^RUGqlws_j?QC8KOK!%VFR0#8Ls&SLxnKdhBGd%^N8X}hTKS3^doYgN{ zO4Eg#$q76h;6y+ZM>!-yLRJQY+i3t$Y1kjUQ>~YX$Nh^f7qL#c@K*8vuvPt2WG_ISZInLVt3<;GL#bVO^8Y={YEIPU>Aozsjomw_j%UyrH zw|n>RGEZ$S4C!_{05Kg7_3N~y*uBMk1C5!F6;wtGy(8M!z=EfvK65T}7`@pswh}TYp?8D}WQ)0ONHs$h~vWlZ=+1g0Gsd7NpR_f(`S>1KB58R{?d{;!56tb&S@iaCxOx(4| zo>5md+~oprK^-GKIB^hQ0XKOYm)*pmc+>I4?6Zfmyg^OurB`daQaA!R-{Eq~yGY1k zp)|lqJvVg^k>@hOe-bU#_q$oC8x;~*Ql93bm9=Xn0o(_FT{>X-=1oo1nbHWgJsCqV z_*R6gJC0S4!!SOH^JxG9gE95=zt)%S)J0hX;tixZUz2PJK@uT0%LNskiKBrqNv`)VMy0ec!^(#MByCr$-j#qL4onJxgSv+Z`U$Z2M$~sW zjK3s_3SlcH6kJ?YhhmPwA;$NWfX52@*eQ~2(gMFB7LPjPZWpm}(QKC7t47lA>Gxi} zFr<1_zdlg;KaN9R+m6pUmXrJUpjI=tHbEX>-8cI;eOfQfY7tVnA} z>vM<1xqbQz++FdTukF9@KlJ||e)P_*%6C?#R|4w*$M2P^*ZY;MZk*U2=7eugFlF5@ zvpHd0_5<_iq@(Tr^hxw^tzmyHb(l`gOrQVM{`E!qq9=+2&T#Nz#LNq5f754mN z_P3mOhJZVv>blyo&7FRTJxrh?|8>9my3!5dV%LI|pZLDgj}FD!)tcXV@A4xbP@=+6MeUPT>|T-!2KS2kM@QyOx8uvwv%yt9yT{K3yhHzsvY71%J_UjHLsTiq9Q$0 zesQnu_{%tK;9XDFSb#JS4&P23MF^q+wgYqsHT?)ybvIFF$AYx?5*q^Psdzej-L^U7 zZff>Y7Cg`kXB8+~%;6m@zopQbefKBvh$VB~i@_ReGkp^m1hSXia*477(~721;A&ae zlkkD{z@F45XwNVQdZ0ibx$H{^ZuHwdB?aqT{I}uM;gfKfH>X?f$swK1M`~AfPUYP? z*1m@MZd4Y!KO}^XKR5aZ)ph8i-)|qXe(Z22mCA0E9-yKE!Cm}_{5s_ZJq{O@dExe! zdExr%;Ebts?_Br!YW668>6=<|!zE5?cpB|c=Zn71>_B9@5c&sDCglvBCg0bDp$I2Q_)Y_TC34O92|*m9SZs7#6dd`j|H`a`rgV9FH7T7>x?tnI~q;Rxty&WejL? zBRzKG1jaF04!|{;_^AsWt4MF&rvU^qz^hWXLQ%NI;ZHTzBm zGcxN&TuEyJclIAh9C0fv*|I7~oKLOQDVHh6a7z)Vh8IyVy0`xhw6Mb5?T?ko!=oX( zHJnyp;iV70#-lhe$iaH{!r#V&u#|8s;Dy+M-S)~lxQwEU6e{`n`FF4iaW6kpf4S`!P4vEnpy=3oLv&5 z-zz>gx{I*gImDP4gf99rR6I$tU8d_$hN$0d#lEJy2@iH@j@2uul3=<51D=Sx=JJ@{ z^#HSXy=|VvwED@9SKVKH97%kv-7rZv@m5S9XYSD?V9-xA?3OU1G!I-xa-q*=e+xle_nDwFKF(T*>L0!^2pvn1zJ;q{`bnkx?)L;@cMK`wocfly4m_!>( zJlK{YEa0Uu(NVG*;f0%_I(#FJdHqk5F|zHyu0S= zljk*0aJ&E33+43%2UeB+8cb9J*>`{Yr&uJt^Fa>*$Ovh59@rW;!~0}?!?GR#VxE+R zx$|PMXALkWeGV~da(;SI9jJf=cZ=uDHui^$R_yymOS6?27Y&pE-?`rWi^JJ#pCVs= ziN}iHV1Q4P&)A_xuA!2pui1Z$p?r*yMy3{C@Sac8Jn)pgio>wh=QZC-P-w+1YSF79 z7CPM&%X*N^)eiGu8w5jkzX8oDb_>(tj`Fgf+NU=WtBu@7pk%XzlrjAmvtuisas#(k zRcP+%0OMys-TA;2m%#7i{B01EB`V@dJ)xgQ?jL; zOV0R`D*gIHJamLg;KWG<#_N>D49ciifIngnkS)PKWK`J0I})D`nu8!jFWz#vGkG zOBm`ADrIW|LjU;AHE@<|6vR#YMclA8?wYJIe=#LX;wzr13HeRk@|f@``fwxb&>N;) zKm1P^7k5Y7!!O}36i74#F@#ZDP8zqw{arxxJ&$1^E@>+&z#YaerCes<>% zXFp340#F@(W6QXaI3ggg;hzLwaH#08Yj>X0wRRJLJ=jgo@dbKL>E1s%Hb3^wK$Nf8 zaYk~Ook`g#$kdJwHBAM2+L|lmpW8;<@a^&EBZ^w;D1{712Io08pypJ{$VnONP>r zEZXCA0IOLLU{;3<@*V!!qipv$#uBemK)ve7*-Jaq_A0(8-n}I58Ma5|&R3zpvobm2 z7MA2PIbs}JUy|CSD;Qw$?a7J|3AUEz7|2x&AkIOm5}zg)cZluY!85v=W2rFqjnhrr zZr>e!eAKdcgAcDGru$k2!j)68ecovs?+}EAJc$+I5e=CH)Oy@E)qLhO0Ai+<{}^;5 z5C9EY3!SkaMpyW`U>HF%uWcnD_)678`>OAZCccCnjL zAwXIPk3Tn5gdWkc>rnr0UE?J|JZt7BJAt+WH*KX6h1B9-VKmP2{!6Nt@;>M~w8qE(~8 z;b2u%!YY?P^@0V9=>Y!aHGM{FkTZYK9I!;kg~1Q9>?Y%4KwMBI<39Hki|KxK zH;NffMG0>xV`F_OiC)IHz&kMG_v?oefpSYb&T&LquZF5;9ZmFV`Bb$3lmcG7d2cCT#%J zLOjwFEf=Q0M<>OjLQ+i1Qff;L2YG)Yk2|sB|7#t5+B@?9;EL_Jy$Tm}CkUHC=+T#x zb75&%-7{vD?g=bc!3(bvvGc2ibYOkmC3ep?fZGkUHDo{`6Y`|4RMPLu#eC~7{y?wf zdO{B9oR%>X5p}` zf}pIlif%kTs#6H$$buMX)Nj)m?$=0x>_C9W=>edJSz5QJ%p?@>r&yz5`M$bCj3iS4 zcC;TfPzmS=((xI;VmHIEMrDt+=lEE!R&MY~%)u4UNTzRJn_Q{Sp{e}{EJ7z}KED`D zixe5F8Exotlb^O4M~n)tvS2uiYg@BvscxFVU_2a;##IqdXRyri6l5U)lfnsZyMOju z8sp6A8_grI_%P11T{wifn=L}_cI9*m-Bd34(j-WIVR%S(nZ@SSC!42#TbYOVD)q6b zMqwMa*;vX}=3dj3dP%7Yht5i2H(jRmP!Tn`WwCS4{CzWa40ahk+0zYHtbJgDm zgS|o96K?FZWFiz+^qn7$0}CZ7xGp&Kw|r!f{Wt4uT*1dN>@L=4yHEX;cYThgINDHO zJuy!Mfp%b~nS&Ft=|^^R*|Yf?imBD-WM zg*Z@xq&B;?ED}bc7${d@8eU3ZrO{8}8)~`G{>`%5?gG@ZsTFFggZ&FF%Sqg0s@p_4 z?hAR7Efpx0bgAktwAo2UzZ68$H+@H-5824ftxG`G;^Cx*kq~2U7{!GP2qA%Vp}B)Rp|igzTdD8`qHWyK zR+(%4x2*x;oG&TY_k)-|#Zh^+~K(`-lgu0CA8 zJ%yj7DnbW)qt`qJju4eQ{>wNHQBwZ2x7d4?M3zv`KI1mKelc_~{ou+-SS_!imeQjc zqRnV|q%4e2EjAYn5JtlvPB~BqEU`D>U>7S2rU_7W8m@jP%N!_6^_;OPF>vBa#3D1F zbD{)FmSJff80<4%vEqofbjHlgFBCU;MU8Z$tIhOXhmNlZ+b?jD^zWYSx$yyS1yyl` z70{D;LgbLDOb%wVG4;73ipm3ampRl(6>-t2D&Dbp_1zCSi50?hy>B+ZCil#+As6p7 zlM>gPVFO$qWY3#$BW~uJ+562#gr_95c&e=QXL~2J_4OXx|Bbt`;E%ZldSlwU0@dgFik|pNAtI;(HS%{}}e_$fu%K2rA1M8n)wI~Ipms_z~{x?DDqYqE;{$J(&6Zqj^Js=AcKl|Zq*on+dffIPFohgEt3tvz1p&ZD5KFwQMG9ImT+N}m{c(zQAt!P$au9PNyz5P zdn_H91w*M}(~OK~^w5b%iPqhP&vOdx{Tu z9!xxrg4ja}UIruZp;}~LFX=p!YBfxXT7o*1YOi`IfjoZ8j0c=s0|C|S9YCq{VHbST z3#;aN05)oL*3ZtTHYY~T39`UWGrd88h>{?jv6g!{TY%stFl85y$&ux^f>w+z)5ut` zs~?sBQY#C==~JeU-?1mw+UweliyTLq_14U|(?JxsiB=gw2nfpIK^gN+XI=DjBbq%G zaA~aHcSgtP(_%(((vi8b$Fiu$8}0$cBN-UXIcp7KoF6;Oo?T@3dI zwoL5o$A~YdTX-O&k~8ptaBABL0;7vG)*d=T4_C^JcdiPk_&j#HmLWSxVK=}QR|!L} z%Ny{Q`yM4kX1;`no}WXP4jY}VmSJo7Lc*R98|~%<(7kwmPVxh6WCjj<3Ap1SWo9CB~j?v1a^c40uYa-oiP38Qaqh}K|OaZcMo;F=DpOduQY!;wR) zXQ0?JQXZ1W7b#XSG*!0*9m7=|G*y7l)ahcgGCsBSv0g~U+0#5x;=qtqMo$Pa8oWX@ z1!)u!==>aC@YieCt%$|tib0+|n=s6(0|L=tsD(UyB_rh@Nuo4MdZ2TukRjFnhURtF z8p>?w6m;r12T?_#g1^$;3U2JByka51&(L2QM}*#dvZ@e6%vi^OQvp0y@i&;e31XLp9|P^U<9+YfNh4+{7O> zdj=1{6>R3VovT3r7I%-UO~!I?N2dp^VQw)L*i+BS;g+rgur$GHHnMVuHH>Uz!t`qo zB{Gz%!K*XW4k{R+cn#XH+vhguwu5j;jsTee9OhXcsQkWRNB~5(ktA9hJfZ(n#99fc zo#5@Bo3hV21TMlzOAgUk zbZR(%PJwOT$>IE{qt1IqeYK*4Ny@(rENhR*w=yQS(nZ=We&KmIsM?@_l`ruk#APymm`F)pNJeZMqE=ioE<2=HrOY zJjTjP);BJzKm!Fu3o=p-eiJ^ib{iw|*kYWl1}&6Ga9L>W-YAC(uvo z!Sb|O?#L|zGVveCgwi6qyCocS2d#owWbM4Q-!Zl>mV(}xG}3K2F)jn~4)vsuxj+CD zaW88E?1_Q4+WsXr9!4&3TpdoE*g}-uxfV7Qyvb_Z?s*rQ!hY>0*2$m{?4bKvq*K#< zEheUINXsBQA|QJq6V9Z%XIG&~BpzMt>B_h-+@e5ggvrVvVOLg;A2F*zT-`X+8?~Y3 z1cf&c7>E-LjoaZQ`~(fuM<~kPb~maDbML4Z%9adYQHdpef=+UQ(_q!PJq?@og?(hI zbHP7Z1X>LNF-(m|?;r;vZ-NTPvq{W1kvS)070IN6+1c~*nL}4Uixl`m{=YDV^iMK= z-CWFONm`y6&ip5BA)*hC9SKDLZU#9depK}2lPks0TQwYuH-X$T6$$Ra+I(rQ8IE6Jm;)5h}0|(Q$%ZmpRC!XzZ;qvvY))* z^qHl_fGjB#!6=8AiugrlF8}2qjfo3`9GfxYCktdjlJ*=XF*XSVP$D-S33W7QZ`~o! z0-T_0wSS;VavK5?5=G9w8~MwK1Q9HTKH^+Oju}saO$mFuZRZG>G9Ey%VkCZ3^HR^e zxZV29b88~ts{0T}#=5^7UmhQF_dPWMUevj%N56@N125$PurphZW`kQkdGeC>@bjfx zr)h#zBdX>J^|g}!giK^k@4d>6tCT`FRIf;Bdow4ft~WQtos{j(%^jmJ@UU!K@Up(* zI(To59x72VXuE)u8q=@WLnDIJLx(q1FT#1mE8OAFtxv)eFjn|e?38}Ow=hNW=`9%2 zQwWq*W%xdCzkEQTDc{%kAM=Adk3FPbKQtH4op6q=uNs`eT(E!rpe(u{w}vAwKwCT# zNv+vW#m0MC%VjSw6+&oK3gwUn?1OZhsd4+*?2ioP@@GJ^L1+Zo84qDHN8J%?0~%&C zlC7faESUNq3|mdnJUrvDr)?ML6Bn^7)%AR74rknzDV}_Y5KnD0sbo&-`!9VwqR|^x z^JYIA`e}Qo$Qn+(5)?6KWms%Ickw*m#IfAF!kwGAi{)P9?hk(mWWrNC`?+mBPQ0}1 zdUiWDi_QMrcrSir$t+$tH#zjuY$+-vBxD`VAxDGqd=9$FT8~3g3KmLQY%K}lftQ6U z+f7U*nJhuPk}Lv?N0KwiEcEUdG7pc%63?*s+-VzH;t3{6R(1id(Z`dryA{-POJJd_ zX0N>(bb*`-M=OUd0Ml&vTcb4jV5pBLr_e#yz7pPs;$!XS0n--HChVlf6LFrfnMYXSQ$|>qpJ>#>?sG5PMyRb1}t<`pc_+`e^b3KzVNc81aNs7JsCyo)yrE{UP-;04kl(M=mGl zY)TBCordvioy@yw5UEBSG zc5>%2CKbx*+%W@_uFzlxkUalA|JYp9=`#HjOX|T_J+G>q0i_QGhkbZ)EFMBH7%VXM z-xxu8n!ROgqZ*sJ-Csxjg`VUul&JCxFe;){1K}-k*cbi706Ntp)xhy-s99#oGw#I$ z$i{^<=$ut1RjIrawGsLhVV~Tx2=^ArC)`iG&k$rAmeUcw{D2jQit=CWV`Vvu{7Dc@!}N*>s?yW%9v-?(cPd)bQgH=oa+!*|?2Z^&6jCz#yyo=_)MaEGaM3ll!0?EsY3GB7Go0db}P8fgh$5pJS> z9VNKsiJ}u$*x+D6dn3wE$IQT$LP(3xH+PI|4@#o#g$k|!<6;C=wDsE6SvwF5>(KNU zuKA)RVl2^tC$Ht-<&KusUp@MOHYRR1_|`en6C(AWEEne4U-HmV><9D0~ThJ32zg6Zg~aio{#3>tyoqLKgBjL6YGs*rx%T#UW- z*`MO~h#{NW`6RcF46HVTP_R?cHpHi zCotw>3b5jp7^=Xdcw;v}5n9{R#&YSAdyEcUG#^1zpk|(Ju#<;fQSwPo8f8l`*C&lV zPG=l=vvgMw7i54Y3m3vPH`6j#rk-F6ICxeH1VOn6TgF>rm|NZvLVB z21gA#sz7=4j}YKoqzg40fczFj;R^$csBtA$37r9ipuq8{H6_06won;f8`t90oeZXG z5CGW=bkHS=ot%AUMpH~P3&}W&~czJ{1edU?}a0XS%<=tW;t1TYWINuP(>YtFV+`$br>bFJXPxwhhPkAcZO zc-^bm;*9JOtbgTx*7^$Cu5IYw?}khmxjmCPm=##~W*Jk`=Zj^3 z0KMQKYd7x}XBy~ifo!a#8sEKGh#@LRj0BR)Ug5ztj)vz<2k7IDePT^`wEV=t9M^my zC%e)IBMkUNx2cX}4)Fl9cRWE$*9z6a*?!*aX>0v9*M1Ce3q30X`c0p$v@AW5crw@OUPIFVX9o8} zYgjrgZdR;At}{x8E5lN+3MPU&c-+Ir?wx;eyD4a{qy8_x%gDO}+{a~x88m*%;j-%U z$GszB_RE-TJ4f7G)3c%cifY6}@0pqdty63PzA7vgn+4?DuI-t@pWDOzsNj+vGJ$`_ zI~J6{n?*f$&e!6`nzYyJzasyC@n13YzHU+w3g-~vy_AJWRRGZFmi{ajSeXs{Sp#`E zhhYR3@f&#AhiuCnZNLa9`6t@zf+c=vJvRd&`cUvjZJG^hd zJ4#j>JOCg9-QLZ)0~@V_aYuAP_t&S5h@<)De*45z%+xc_tlba!_IFpbt)@xeurjaB za7`))(j0qH80Hc^X1eq3igsx57VaP*Dm7ZQkDMKcZ5VFqI}lV z?TShM9F8c1Y`$-M`koQa=VI011}-?){miDx3_^cwjY6ixF~}Ax+^Da+Fg(|N?}hW6 zzy&{zFTU_4RHFx(Z)DGJy~$%BuP6^e!B(sTaEG0&7DgOAk%$pu7=PedN|%y#_jA?P zU(qf~Qcaua`FK`J`=9*#YB+qZ`_^ac`(tq}*WG{l`wADavC{Ew*8K{K6&?7M?H3;7 z(tJJrxX{=2xkX*=BEfzEr#`K|5&#yU)I}t9*+zrkl3*(|7`+jYD=#tIk%}}*-{MKA`Sm4rlGj!oCOG|GJun+oBcR%sAzZ2|CSj6RW z++D?7iu=`V&m+Fc`LDY-{H?q5u9)@ZjQ>3qe9uZ>Vkl?;_Ul^jYA(x4;z~sj8?7I$ z4p$iKmnfU;@)*G+7~2r{l+yvDnf-NhJ)gPE!`@ta(r2Rg$3Q=%OM3?H8#Rh9hx{>0 zu5GZJ`W*t)rkKF@Bry3u`>JrBe|3dlh~ZCO^VL-x7u}3IJWM=0%AFp2s1I)kh5Qra zcG!LR(R!cd1K#3O`sag1pIIT`5yly%W0)2coKz$24>`AX)+0pJ|i(=6zB+RF`AR7APol31cYNOtdFP0d!<>Kb_U=zYnNh z=*l`WYt#w;3?DeC*7>*6HF~r*`)48!noGJYPIcHIgT01-W!D-Voq;B8t+SIKTDVVfD%k>K@@h!GtAcGthi=u)A9KDZuKtI3e-Tmy+4SYWHp_HMsjSG5$F2 zIjSH9c#|)K@_Ic$DU+A!F=4vN4dI1oWiPCV1P73JS$z=8xFdovi6~87ktPCKiaNZ9 zC9cx`YV*FNR`8~Lp?uPxz#i4m7&v0rd$8wii!7s?qBp~H9kWO=3@fm6H2v`vT*8|I zF0lnh#1)Is=#+5{)YS>x1~1B1SXb;zOtu9WsC*L=Q8qedP8^@Jvd6j+;LeIf zvX6u?PNI+mxGUL53dMl!G>jVR1&iDZh=X8`(LGr@CNhDE4#j=G$V=zU>I@}XE1R1E z$_XB2S{L}qdNxme=84FRbs8@%UBSy*AB>@7(B>|J9Y8jf$fr=L!wuJK{D+ylQlO=B; z>#s5eW*?_6fJja=JXCQ+uuP%p@7JqINvN3pTG1StWUTrUmLYwv{^keljmpVL5*H|7 zLgo!nlR%E)^lO)TO}Jd~)Kb9(b+J+Fq``7Y}$B*R;9vFRF(ame5FA5xDW zZ-P?GWJKS&y;J9*v;HIuayo>GOs}PkdeuKqG*@=zKgi=R;&DM1-WuusL%g4T&_5i$ z_YZhWx6Ew^%S-O2LFeo+iu8kqUtoP9PCnxTVxom#LyIrG4^a2*62ncR?M=F9`g4Ex?VVF5Yn zC#bZLPSbbRD-x#ncpfR6)G}pgo#Gq!3Y+(R2OuwnGd@1N+w<*B<3PN&y6ke72gx!{er1_;6Jo6BhzWa+O zrO4kPG7ZaM7#=u177R=pmQ)!&3C}}woc^PwBGBfsL6Ie6i#NI}+ajBr=|A*M(fs+g zUoI#(y1-hruj&7o*&FOpoo6rxAKlTF(aWEmDOLl2Z-ll-Mus%3$lB?~1yK1knv^xwmW@n~gF4+a|yn7y4c09exO z*ZA1ulel<%5@i%%-~XGGksFl#LUy4Xzerb{G>CLmM9R1aD8^h_s)=F%AY~+)r-;R|I zo>I9#1w5(Z6kbwijN9F?bW^5{3-*qt*9E3bn>>$N*8*a8uS|dF@9eL=-9KRnq{=cv z!uUaXic?Ys1X^yI41;H1-W+wuQ|{WYQbX`NG*gGdog-0uXwSmSj(6k%Ja(4JJUnJy zGHk2Ypk^-z-?AbVAS_29mn-zpQUPIxR$7%h5CVx?x&egkiDq}({epaQYF?#!NWD&x zf_3ctk*m6YsD}x70`z=zoc%h}7xir0(r|%9TRL^>sf}Wny$pdLd>UpPt#pXLU_PA{U*MGWffsUznqa^2;Lmm>y`=F=^NWZBOE zI1FLL>Q#oT(OCs(u~Mf0vboX-SV%3>uPTB|i-vj7@Ha9Y@#a=aGGP0Db__dra7nrq zEbKl9k(=1PTNocYUlQ7@FN}}59EZ=+Nn&jJH5z}Inc^kBO%t**MM!Mhp zZ=hz<(Q{4OT$EIonR;`snSOsy#0KP{-O56NLU;p}IUwbSJIekmCpj%nm}?6&@kBYW zL6%55P`p}vcIs^R&W~9M4DmPm%$uiz@PK*~JP0>J0kvefkpLccfBBzyRaj`5OW7H{ zY5Eg~OaE$~sJie6B?g(;?Xm(H^kD_bY1k(jzR^wlwY_EZZs&q>h;^p}O45J=rnjj7 ze-Fk|wp5I?U!1ag)8a;-V*>SWUfi5n+}ysnxo2_nlEuwt9})X>gm`~=M3L{hNI=-> zS4ZR({se=|?r?A>i{1x@St{&J6g`|N`mgJivO4=~htIkM!+c5NmBh2?t~fhUAg4J= zAjb;xNlp+3zlyVlP+*u%JqRTp5%sKQmPMtNe!Lv0#ZZc)y%cTB<#M+Ve#-Lrbh(`I z;(*^V=!IO1-7X=Pe{q<@DZY&3dk0O^FgDkfY3|=AcYDprF}L#TZ{Sl~(0%tOWH^#H zGMf<72QScHvJte9+z)@%}R7=twWKWKV2vcdlS zU)6TQT|t@n%W7GCQ|ho`#!65(F$I~^^n<45RQ(3jaM&-?!`CO2N@w94Jv`zk!65(> z=Lzeb#oiq(v2X#ZQvp>;6qp0$;UJ2?dbL*rQk2vx~6By9^z+} zJ3Uf1-=i8efN(8Sx_jF(6L6w+(4ju!M~qIw6&8@tH{)Vt-xea2(@AWxi&J%MOpJyT zT9qttG<|$&Y7xi5S+qS-1dPOzP_Cb#sst`X{kdYU;iw*|J3t*lp#T8w(4h}$M?7m;iI7(0r7jzwT-Jd5m?Zwz-s@DC7BneQ5l~ z5kzJz&=jcw|NfRRpgKk*G^2XxhTgcPt|JpM*u$3~Vz=a1nuqK?8pT$K}SZzkD zlm*7{#|DCQDhAF<*{j^}d4VJtS5AWs3?>9gS#e_fcta*&phHzc-(>sFcFw3_OfFD( zzEf0weg3dwicW76?BxHd?tx=~Qa8bv+y`Mwu*EZ%OrELkC*hJ9!V$yWh57+drz119 zWo94Ro<1jCVIs@?pkAwFRMU^IqH`uI=0LqqCcONwehI7#Rt2<1hJknEv+&xd`X<_e z{&XNgyIdI2{@N3B_IBMRo?$uMP+`c~H>{+^>Md*hbZemhkVwNu0*Feztmqv0UYNH7 zcCXmviJiJzg8`!hs;ocUtxG)6$U#@=0R_{8GD$(0>04@ZJS5PnAS3>s23P`JkJOwWhIjE5QIL zb-X!nNibTk+K`ysX=ZX3T7}bkl$aAWSjusk%|22TCAnPN6UPw%xO|6Z?K-5yGVJ>v z+~`@D>T!0@s1qczG9#KV^*dGc0OaWGqYjtV&l-=|bb8n7pjRPx^vXe7WCe1l_x30d z3|U2=5{|!8UuJ{!aB$y5k!2J)oyv86e=@P$3CM7K3}gY4mxE9IZhJ3U9AwaB*`mYM zKnwk?31M)q;95X5H5)Zo!my}q1yC`SsPtx6+PUu8SXa>tb!o)RA_l5LCC%_0P&qxg z9|sLC5u;kdXq07y)OLVemNfzXl0x8#I8ZhPS`sb66&W`Ww%AH5uw zfJBF=74Ux!USgE|cH3gW1UsODF8>iws-eslM_D2lnT1_vpzIoptOf*pt6S;-Vr|7+ zI#2-4nhRzevJbHjMD_a@udT3>AiY+Fv51|6>6@>J%7z#U0M@l&h!$j%MS^r_Sqiwc zoh>m7m^d^z-`eb_w(YOIAY_jr@gGA1h0=2rqAchlYnF3OA(R+IuRIEMK<+`jbXZRJ z363pUFXsT~wCx%?%eiwE%I)5VWHtmOBM|b?66YI--4e#EbHks}I0rbH zcrrM60(^ZUCOUOg(U+yBqo{jXi*niks^M#E3;{gdEhp>Yv%}?W=BpE`jzKPQAMe)e zH()6CXES8Z6PdZ-uLm^3W=OzCb8Gvj#Q5x^tY-h0NjAo_UrJ(Tq=jeAms;l31NLrO z<&3>60+n3~6^bkkYPAz%N9X0n1l$}o>ZS!DHS9?S57W$MZDvI)G!9ICe-;H&tAJY&fqk)ilh#aNec3y+*rmsP+GveP|o z5NcHCME6`}i}Vie$@*#cd!Im+WiG%@jJxiw@8YM66Io;?PP8y+E?AT8_=bw~EDU44 zX#7?8-M>maTOr46*})Q;{U-u#Pzk(<0&bVOb^(9)s^%MX!D4GU?L*`>Yz{N%_8}9r)C6>Bzd9{^UqqGk}Go17~~3xntT5G2i}C}S`FW!^wgE@2i*00UW&oc6Th>^h8 z)dXGLLD8WI)o*t-S_8+v6yTqTfvosrF~}oF@PEj3&;h2TAH)4gkw+7Yoq2zGa@6Nz zM#b5wF*KBmgZsK0J*RkS(McXW=t%=hwzbS zbi;G)041A>7N86uc^tN8byFnA(&hMdmE5xYqk+Tc4o#}6s%sJrA|w>Xps;p`cQ0Su ze0cfjmr&SV&?{`ftVnbFTxTHPAmE%mx7~5Y=;sFtA?FS&SDNl!E(>ukaiBDuK00{z zUFr-c62Yno_PLc2^unN)As;XjI(ousKS%fhJCff+M*e&V-Vz>A)*kNJlC>1Yzl0=+^ONbgz%1C@cYJ7;k(O z5HR>Br_E2#fne^hab7wdEZyUjQ;m6pSDZd7oMJyinN9bW2xZ*STGG)4pBu-~B5=MX z-U$$j&kuYVoZ%cxZThRLHV+6<#!<#F=mj58X-WD@9f~?kd)I;JfD;BvF+lzd%Ay^R zeLGfa-8@u6J5t4!wY%!lhsE)E#AGQE3#Gb49X?wonJtr{Ebo$xH=UC>RM2;_L2Hb(v`wz@hDKpQX)BrM4Kq&xmq$ujVZjTfEI8ImN0^$D1*>cBLH^{xO8ajKD7$1>K#z=mE_STJ^_^vF2oaMLe}_>Mbf5_Z1k+Nl{kw#3ppT2e_R|mI(e{BF%oETxGm0 z2RSe+!o;f4Ap444$1FV?rs4)z4@(%j!2Ml-t3cE>&a6y#CYT>Q~k*^j94Q=}rYsD{Ia3L_ezzk<066S=FJtVeN)1gTw?`Hc36yQz3 z9ij#;v^$sqKZ5a@_~L&qPCMLo@J6JW@Caura2}UJu;$LNensx+Zk+-7ne1YGegtzr z+61^3b_U->$bdJ~AKX6NFLJ~)xbP4zuM2D8@|ZTr(gM(b=6WMj!B7Mnhqu|G05S62?x;}H*5^)?R>;BZ$O>NA@a(TK0^36dwzG1&rC4_IvOGffA=Vi? z*df$?D4hqK>9Nj*sTDWe3&l>!^K4l{@I4hAcTd0hS{grJ&ldmrmV3qrv(J)dvF5x0 zk8>G4#0K?s_H`X20gzBC-2?C3#N~NEi&hmXB2JYR!K$6*NR_omS*bWCieCj_(CcQi zH!yiwwC-0c3hdS8g)==aLu0&Tz_2gW>SO{kKAq&83hB>sWya7CGA33hO?agFfV*`C zL^RFD;CMP%eAI!0woAgpj(spxn{;p{*K$7G=?-!bY)J!!xrUXpvCg@R@z0>)AaXuN zPx^4&2FT9T>Z#DvZuCO>5tNvAyU8R6-a7NqDbpP^s;AZR^259tO<^*OEVR==JKSe# z-3$j*bh84VGE9HdEBeGhE=LX9px)~FC_N(*)GbW}7%!ir(UgkjP+H>L zy_mHSnOe1ZsM`2O##R0@1UVQ`0;Q7lOi*fB6k}LPjRGNW5P~@ig9LQ3M>Q+K$|jw@^gUlfC_*p{^_J==g5T1mlV`z zM0ym9juYio8nm8Jq5;>=Kn!F8;3>WDl@SLZO|MGNz8$rc&M?($(6i*~Tmxn%d@*kO z0{1y8+_+;F)DClpzA~BqVZC-)Mu%RLC*^=xP)MK-fP@)+0?X)?9dF&=4y1sJ3jIRb z*jhCC1m`ln0z+u3$d?3sJ-~}?KZL*XftWRU5u@kR#I`wCfDf1&54&_IOfsE3mx3CQ ztDe1Srof|1*>+H?+`wNd-nW}`+NPBYgj5hw1d7`~T)<8VubmR_sMZOi zBh=?0hF7ddC9s=(h9XSNx8vbaPz=s=IYa|e9GG2$g2wUex6$9p-S^)@ z91QA`dS^pwF1&VI6?2?I!5+H)vVvh|lZy`qZJH!rp{f;Q3>+-s0ki+E!;CYS2lj-i z5LnjD+_+ASmqfw}1uQnUCixj|f##)x@ug1AjnU;`Dbr7kE_awM6k1Gq_1QYxYDw(D zK|MBUqkT(d=PXPznuIBA*3rv8>FOtPY2vrbW5+;nVZlt?9GjDB#0btopHG7nW8g9d zVHJn!1!{Wj%eV{soPDYc5QkSFPJb>F;p3TVVbYj1?=Pd5| zaa={|c60`OFbgO)N{1+naY=o6Y4nTgIYtynT(g0O1PCb%f|s*DfxCv=>G%Lks`;k- ztnp~SnzGA%)_Pe*d(J3Qs`4T2X8&s6a2lm^x)uyJFwg1e>?P3^z|B6rt)qicf}9xu zsz$nkf&ovmhko{%KE8~CKDSu( z0*F!^vw|%QV@T+pK9BX(0)uwr?l27RK<3zeU}8_tv`DBT)1lJArB-*ut2p~J)icSR zCj{R7In*)x3-*eGMBwKVb%RQa)}iSeD!oNihI({wu`FhPxef8KCMQTKyL)(q=~fc% z;LdbDMVj9mZ}pa3Vi|I8(w!BA-vZ&`C&~6Kpc%BR06vK*b?v!{7j7Bza^d0Z--dE~ zNus3brAW^ipp96r2=|SbMT6uw9WC?49s6mqVBj_D_>b$@Gy%fKi(o(uSb3Akj)q}p zhB}T+%QhR3kR6J_;hQme068y!=!Qa^Rqor`%~-R{9x&$l{=>7sit$N{xAH}E#_&k; z7CK@E+gd-C0Bdp#`FJ!w9d)go%UXg5f`p|4gSVJuxE@z2pF=#+@#XgGl{=&I#!e_c!M6=^S+b%nBW;S&n6NpZJrF7AKH<8A$w&CujG z=LE8}Y^zg#1_OQY3tFg+L_MfRARWr7GiSEXx;for)CDa=f z1vA_l%?i(}y9)#lvfcg?1++^1u<=8lHr=6DlkCJVidB?CAVyy-g%XE7;!8`iY2K2H zLYPIRB~&O1<@=(m-cX^`mIh!)qo>tnvs;_K`5~{add;Q%_VLH)S0W^+eS~qr0QiJ{ ziQuJH`i8KuG;1WKZ+7{LO0s>8N{H1>CF4}05m_2`oEILxAAXu^MM0OEggHBc$=uh`>fh^J@Jf#q1 zWQhQBAW}Bc7;)z?Aw_i5qAAh8i@vB9R7^>basK9ZHxc z7w1Dcpo=Wjr9Mks;;R`Y`mDrZ=AfidiU1v;$08ARzGmc@22wT~d} zX9ka!CM52h>s^{^hvcAggNRHUlAu$Xg3Tp4a$k2CSfn_xch4nrH+u%V=!cq(rOhp0 z>3K`WU1`Y75%$GG!MwOfg!%Hp-h55<1km0Xu>n1kjOUv-R8EB!$~_1@^#9TqL=b(U6N%WSd3^1L zGZjY-5khyDezfG6*aMmfHT5C4l5#HbC#!G%$2Ab>UVDGnu(Uy&D7~*zl0Ub0#bk>9 zSh)_1b>-4|HNCg2j~Ckx&BUIAtxdWN{(m#bH8`V`6W^$tDf+)jcAyf7OaNCu87r>? z+lr-7>cAsi7Ms7kEM=vF167`OzVVi#qB5!PWpCHs^pBcielEp;lLp|Pt*AXA`CIT= zWfVT@oEGqzh;aDGeDah7pOfGUX$|U@SnYL3LMp=#X(ZgqV-~neI_gMWm5!p~viA61 z{LewOY6r45#~Qqitd${dHJ7;NXzW4a&*)s&bYRmB5Q@pIflH4( zwNo)3pHfw$jtB&+^wJI*I*9V&AQ9P=nqrIsW=s)Pu67UvwqpP6`Y; zCAuA`4N{cyaDp!=8oU}$-&JScg)Z}ouFqWt5YJfInk93Mgy4k?ox`J_#{M}Loge*} z6B{MU#FSui1#s$QczzWjsGl-cSLeYERSfVY_EZZ)5tE9sI-I(`Xh7}+xkAoE>_53 zi((xa{UXnc38B}SAeHphN~oIw&Hm3pWFoyyKy#E-Wh;hB*{ZejgGo$lb1cLra`%R6 z@Bp+%hv7{juv1(Z;+?_fJE?a1#Xf)mak)IFH%R#4tERW|{3|ManqN`X`@4^Ot@dwx z{4sBu{gdTppt9zZ;r`KbGuoe(oALhS@yE{NYhN%CdZ{@lr`0$Mi0IAyN+ap>|9=}v za0fU^a9E>oI{gFW{s9#&<^GE0sY(KXv4yA+lMnNa+7 zKw2+f#a!J{Go(-V#6Cs$xyOF*Vcul`H_g{QAVQP}nUIy(cL1HNErk#9^fTbf-T(}qKY_~JR6FN=tpuMqKWmbUsAT(BD zla@keiG%~%NJgsWKL8E!?$pg5!Vk4vEhXp<@CdYt^^V|LZeg+(L$L;AERb0n)}CBv zQ3;WJZemYQbxCl?uZ7Xh98^m$Lhk&))~HI#h;B{;o-|fU_g&#-IfrWba??imhANed zz%+0qjAdoXqX5C=Krsu7r8;bw&tj5gCTJWnt}>|sTfWh7jL~Mj2PQ1YO@RI4 zkCp~2pC7{Tifz|6@P(=y^aWsJ1%HGNjGf$I{BP}kzR{169Te5{ranFr+EC_vAtQEe)adR+bYTsdla=27FEV(-GnC74JwA6_V#A!%RxVo zVtqfb2hxv>M3CBi8JiZIr$frqy3dOW92pagxYSN!nL8x&pqH1I&d0)8dz82kw{`Z4 z)nn5+IU!a|2m#$60$fl3?Pc4egt?r-MD^^*>Cg?c$DxmVu7Yh6_?$oomuy^2Z)+EU z@##l3VYN+VnWPbkigBF*Av-p%K@Vq6VUE7pr^G=Y>KozMFbd{Gj;Zc*YRpkCu1*!_ zC?4jrt`?$RM1Jwe7O}lRsvx9y#at??|9X6RNC%hB`2?L%MFM<;x$Qsfc?i6$Rt&_f z4e&|7HUN)`dd#S|7;8D*XgNZI z0HWy2@Zr~+9sR)cej10WC+Y&Cr8)j|^`hyQgcxmV!%o>k^WWii63 zqjk|{GOs!Y9sChMMo#tB@G}yUr$}Y$5PEtp(j{w|eqcDgOygN+7TLM0A@6GpUIy1Kks?+D{iWoD&^%6*%N zL!J;jgu_wWkGLY>fZANNV7NZ0#}YqtN!mdaL5Bh!3Q1pK$4Q}hMi}I69T4!<<}uP2 z`*JY*4pPo-xxog^p(Z#+*5M31?Du}VofDH4ZJv(O4Sw;xVLj?l*r4L&0v;k&2?lY% zc2y{mN$`$7@)KJZX!Q^n&EDea;wo!!;;jEsdt4k;O+i9}g2G3wzlS&m_@Sn*iUoH2 zmeCHdU=!ARM~|q@PVoUV%3TT0HQ1sZzy+vwh-OIt0N#P)Zl(710hZK||5Y(cYeJC= z!Y@LKD+GH&g}wQM?KI%+CkR)kk?Gs7dCs$A&+_SkJ0_R~SNJ&Wd`%^XncH!Bm5DrF zF3TW7qU(`$JcP+KOvHRv&K~m2tD9t;xA1teV}RM@69LlavnnuL`~_9&`x86Hq-yvg zF*% zB9%NNm0#=p3egYPpK?DaJU*ri&F=5eb$R_}>p^%Jv~M7@oic}ghD7x3p4BTcW?`KP z%hRLXu8#tDY;C2{F2x?lO_A(X*QJj6wXTf1{1=o5B1B^8`*xv`lh<&p7vw&H$+ zrN@Ekxe9LpC(G!50MvBmh^>{=Ef~~k<`8ey@%DN$_j>}A=l=pbUhO8T5_{JrJ02s% z`E)+B&YpjH3_Vu_;sShAtV=4ncHP* zk?Xq8{0vIKN>&lhUBD;s@XpnY>^WA)8NM>V%FNF`zqm4!nvv>YNtAKZM*iMjwokswhM zf8yn>h#AH>Ul+sdAHlb|;nWM)=(zWwh&AxT#ff!S;dr>l;a8e@HdW2uroS#0<8z9y zx1PPdgc>ly!`%}e)>Y5m0jC0vS&mrK_4uj<|n*I30)a?@+d-agy10jB9_ z?hthzS$$HF=kruxZ%X}Js!B>D6kNbySA`@G#tb$a(3!kBiZ*F5=?nj%5wG(xYQL&) zmNNr$Fqdp*_$^Idcfc+|jmhl0+{_N3ivH>tbR??B!ct&QCBTthWh1+wKMm+;gn&3j zDb@8+FnVI$i?=;X67T_MjWkzCdFoP7-bb5_#UY?8U5zVq6lK)w$ zj8}dnvprKTcb3aN6oGm%HGBs@?%L-y{U06fy3Qf;17cDJ zc)08bK+o;u5Y`* z%?Hrr!Frky*PjV~ieUcwbom9lpc~+Dc?vtnDhFdh?Zoua zZuY$t;{oK$1(YN_cgINtU7*(5OgWh;0lL{E`^_>l`PT+by$fN_IDtL@Wk~&5zxc{r zyn_?Uv=QjOG|-NQX#$Mx*^b>s&(}d;o}(B!CF+DUTE2sIY}h3qe>?|@jHj<0xVqzp z$BR3|eYQM-MuT}{LNfH=cF4Ii&KZ$u&HksV*Y1C;%8A}(`o055Db1+!IG2WGsZxOx zq$0q+cDfA30D|dP0w>}&7L)Xy6g{E(%%~Rx=PdV+>+WsdO+Q z^%y3!op5?nGNq2b25E<@NWmTa0_&wL=4f{w2eF#ed~7fYGZt=tS`^V!wPx3F5~2hc z$}iX`cRJoeexELg^l!k!;xC-Ouy+mk8J39`ft9q^+`CzkOZ025K)tA1Xeu^{nFpv* z28OerpTUQw)Awv%wX`#qcI)!V((=IOAg7DFlu=cgMAadHC)UtBXD$}mVpo>xTP3Wz z_n^W}R#dn%;3v@GOBb^Nhpx!zZ~S09^swk|^$zOC&S6ma{T`bVi-A`^>`HU}ZM@)e z|1CR53L@@oF*wisQ1_tLXmKMpT2cFuLwOIk*J_;firNT8jZWyPn=ka5AxAEw-l(d< zZIo<>{5_eo5a4!T<|x}q_b9lnFKag6FnE~xQ<;p{5sHfC##R|bmuc7a4y{KJ`@s=T07LC#V>b<4^8&4J zG(H41eVvuW3FCnsq&JoXQPq^VZhBRDA~|C5LZVpZ%tFpjzIAKDHXRCG^FnxySZN^? zEw3-wa!Xda4QrF*!@Rb?p4vURjbY#)0yNkb83Ly*%{TOUZpBkwvFVHEr>HHkd=%}= zp+ZU=6%G1FAjJ>|FFh1AsgtUT4cDRoH?SaZP7OQL29t!FIX{fmIo>9Kh^Cl9PLpGG zXQCRBjsdviA~OlQHzH>=`!^aBBjlTSg$3N)-(~j* zDr5y6rdK&;2g!(ogsK!mO3!)OWks$OUtttTOJ}0)TI1W{O~y#dd#Rd|Hy8C#Uf}6~ zWXXg{I59`(n-~3H84mTxtb{k%96LgFPIJpygI-Qb@mxA;AyGxqeQ8KC0{z8o zs7%Ze&DYPc7-c=|6+$xs#0GR(&1nlywAiK>u?l&Dq-2H>$I+$(2#h&TJD#`?q-w7= zAvg~f(OZwORaU6TQixLJf=vOs;*X*>Lti0ADCU9r`Y})hI%?Nl)x7$tmJ)z2n6TIcgJNqZu|5|tN>VHy|+joCI+r;YbyL?PXY6gJ=oO9HzxchD&PpAKS zHB47s1f7OfPZt+t*Azib$A~C6h_s?xb^)4zPkqveD_DS2n7tV`#;i1Koq#xLjO`Pl z2ecdaNbuUz>Y&@29TKrz?OwI-1|vI%FEt~idit`|^!$-66w_Z^yL`R3kJL0^2iF7H zet|rFOn%?8kVR2q^@tcEK?twd(RbVZVIATIdc3YytN^j}`J73%t^&Tn3^wSsWj;?S zSvFjrKE(yU^=lBh#i|E9{%~2l>Dq8qK1E}dzrdzoD%?O|S{=>W2po`P`kOm zxk%tf_J|UyGB)-fMgdmJKS7xzQ3RQ`(d_$YdgAOA|Jcb&4>6yLG(pnfVvMjkA}@10 zS_(5>~_^y0oL&nw{^5`EyXzg5lPXK}kt1g;} z@+H6m;*u%bAxb4w|Bck8--t5rL5N?ofyT9DcBt7CqWhv>DHSu>Xy|0^<|tYwgxTfhkae)CwgaM@l!khhKGn zK~K8MOBJT@`;#k;TYdUv8xcdjT2#=U0vmWxgvf?@P@_zOCsTAtIO-wrUBijSJ4f+s3=^4 z(RjKse{eZ|2!79M3e}kqJ8>T^5G?^| zEW2dizOUt;h(sREM{F4s9X9YSw3CMj&|@aA=*LivVsGw;}H>>sD@&&=zz3k zs~KON?bgM0xSi{qU-E4aSO@cpe8WKI((Y6SJ5f(?IVtw|n686h?S^>5FTVA++bI?6 zyG4t|4Z}m?AsCDu2R0C7h^`~AMruukr7i;}Vj7^{`%%m2sf>Xkj6n@cTRF5AU6;d- zB*T$Z`Fgfg@$Lvj5`c_mAI5>?V4$;>bqH({m>>j$hOrn-ylqsdY5_#t1~=^uFLZUG zWsHG{nKaTG2DoK+^koBc&uq;+VJv)5TP0qPCwEzGV zz`ElK95UOi?G&0~u7M-pqdGBir)Ry85|70LYyztj<5P0cVP>k&gT^;}D9FYA9??N? za&|Z~2l!3V1Y?Rt?S|+~rFh~aF$bZ^zbVnm zhmpx!gcms_XadX3%%k>@GUjmTz`CR%`HIFdY!*=yS%HI@Af5&yR72(^@`IJjcGG9D zNTQJXXWY@}2oveMmAGi7*sY*MX(T$cw-ruu*cujkw&@fyp#zo$i=ED1A;4fY5hePT z?hiuD&+csLP*|Dr>3)Ux$2bx2L(uI+gW7Iq4>5@X%qEA2nK1M(yXgi`9-T}a2izw5 z&v5n;P^oOQo_@NyEI~S)zRw?kTwrN?zS-T_?V@5^BZgmDb3tEV%_R~ms@YKQ^Dx>Z zdRNcsdR<~zV#U;&z@4SB!a4&#HCOssg)Zc#X0PQ|-*i??=>6?5ayGTt0e+pK>hDEoNSa-H=1<9h;=pi0y`1O96}1`MPSbR)U+fk{y~kVHX@z6sZWF^ffGwxp-AVu&o-RLVjV#VVC` z&=dC>F&=zUpc4b_s_A_RFg5^IrakJrf(&9_@y7oEIt!~)TBwL6x(14=NJVCy>rS4d zMu32X5ORQTha1!E)vE1UYN#wUmIUF`{|RqXw^dLdi6MS7(l}z`ksh$M=2h+BRS9QS zk*>aV`u)w~6jdh4iANiEW(=^;azauL(VxZ1prDJM#rlRSx#S@jIJeO}nGC4#hUz+7 zX8Ovi;K6$+BZ1VGrS&1^B7z#SWZ3LcHZY2joNcX+f#aDVn26Z$1T1xQm;3$)JCMsy zezR2u4X-ae&!UiC-lfpbsHpW4iYmMA5$%8^!DGJRz(T+qSasDuu33Z<)SEyK%O0Un zP2X5o4FiVBC}EjMS6-M0n5XMF+#9e0u$+o8WSV!SWB?R+X;6!Wm&_)I@A6z{Dvc4}n;PpW_+~p$JhG|o(sET{BQ3}{U#oo47 zGGRAQvCpF&=p1r)3JOCL2Q_G;N2<}R2IqVJF^?y>*{O?V!`r%DcToo1tme>6cB!HP z8N-r>eZrWaRW-fwITmJ^U*w;zmgZ?a=*&H(cS45aqPq>lEZ4{-lm0|if^|RzvDwyN~aGA|0ruVYf=Df)bnf=+n zoWVp;Jo;Tor##;tw&1%Sg~!a)97-$RLk7>Xuz2b$+Uev)YBGE54|0COWpJjNc#7rG z=3Ly)Aa(Xp7U-nTG5Y6n@P<#Qo4`0BOcO$E&<~)dlBx>0#-`VVDfSk011$AidtXi(FUT6AtNB8c1KJw^BTfSWOp)$m+p6MKMPs79V6y*fS*$~9U7w$HUw^?q( z2(r3vg`%1<}gY|%ZanJ?b;|-wG+W?RwOuAp$&aMo;B{#z7*n&~t z&(5trXs&Hujc1dl(!D4av_U_NT~6Y=0pP$oVw>N;tN&ll-UZsSt1Qr6kG;>?=j?N; z_DL$CNJU(GTeg)@k+Q83i%_FEtGbd@AV9F`YuXX*v_YG$g1$+m1~R;P6eeQOC=n2O z1TBIXg^DJKKny}unuZ8UD=61%Yk*)A9ug!i;rht^zJJcO_dZpXmcDiBoW1s1bIr#; z|M&mTIYU0qF%8<-QN4`Gfd#cWZ!iftx`VR$UbKA!C9EMc!{mbW4gVJ`A(onMg((mk zW*Hy;JGm-U5^RFg((powexw)3?|F&Vrt$W=ec=B_DCJl??1P6P7GRj5Kw8A! z!NMc%uC*7g$=B2;h|(Pj>TsP_>s8FWV{_`ywqt4pJ=`zV!Ps>*?Vd_2qu&gsyHkFm z;KdOErXF-q`2WykT(poZ4U`Q>*%cF$nQi9J%$DuCf_Q{TqeU!rKL>~Oi>c$qTZx;+ zle1w(XVXo1*acy5#9d}i-K$D==MKOY_A^pr^xNhO0c*!XTr&zU(Gr1fj0kE0h?@J(V*1428{Zim7m^T^ zVv~?r)UZEtGgVw%Pnx|20xD603(tNooYtLD6Q8M%MPdvDVt`19I`4~c27c%ZYw$IC z`b>j@C06feFQyEm*P;ss{c4j03+PrK=}_{X@=ideOo57OCrif8dC}41tsJB@G%$n4 zLrd?fvLA9-W3pE#rK_nJ{ljSPcawT_dhCO^2 zrs1BUQMWvIM^`s&L&k-xNUj2CKuAE2D9M!w9R|NQw#XMS3=j^GDyeY}Ab+6@!Ki)} zX;oB)7>FgNpvjNLCJ)pZ6rcKFn%E8-+74K7;kqo<%GqrlW;~%Iy)m+joRm_yX=mW> z#kt&NHRdYlBO#{e+ zU5DsC1KRB;%jyvg?Tuq_Qq7%72OMbF;6UV~U>VEHN$l#FzZEBAqt|w5gu;={<+Q;o z>iJX}O!N(etJ%gT#_<>7JhI{r+pUM6g#(iUGooeJ)P@Ttkr9D$1)&8t2t(Pi6DkVe zKkR_L!T{_bErPIaw5C8k)FjMB3ui2dIjCcBsPw$Z7(osk?(FU$stf{Zk+Rman+-c$ zvrRVhf~r0GjcI})jfZ-~fDSTGAg(=^B19O;!=?gPwG@-h3Eq6*^lvu*Yga5esn!F5 z6}MNnxI1BMVrhf#oNNd;WCqK1y`7dc{6#RWed{MTrtymy0KbWoKjY#aGrj0xj`%@>Cdy2R{vFx`u zdbl%fXzkSHT~zd|u^^Huyh4&v1LWGBOU7peG)QF7bEE`EREXqf`Y|vfyao%^(ZfoN z+_4JPevKXwem4BO7F@@LlhO_ zjdSW31-3(?$G=ZTpfruMYAlsqfY)geWh(J=RoxMyq z1hXLcmt+x?1*s&%aJHD*$rU7-GI*Nab(7O#ku|VEfCD+^v6yJ|;1ng(hO2V2dU&!7 z0G4B8rP!$64YpF@!35G{f<^o?0-I^*XT=aF=1mBdMGbu{mYqaILkDH$1UEUsy~nBP zK+W_ZcRLT2(n3^73*dEjpA6ira{P^^Ptt4Y^69eiQ8J^h3HCFkhl!LORU~{L6Q_ zJ{0cCSi2I9tYisEALVR^FnbVm01=m?P$e?tSR#Xqn(>wN4oyy{E{}~$06aZaL3NSp z#1>{XscA1g{EPxmXtT<;Z>~J!g`xWF7hl5E>3VL}X+&|*O@z0zG4^N#6_<`asIcA`A`t`~&lL8$(Mh~{ zj9f?wi8G>O4+h%Im5~BQjj<6}G*-RY`F_AQ?`+HOLp9ln{USBq= z)0`fC*BTh|6VjkXc_6Z!5SDnLvvfKTv^&A-7zYWHl&-kzY(uDL+{Mn6h*op)V~XG$ z*Q4lw%)rn$w@i|qf+{juk%&;#F_z^}h1;g0zU5t03vhF`YigA9&lYD;E`mLJ zFnk^wwGbDoe5VIdY&WQus@8-fj2~J}ByY#%S#HCC_y7tNOL`{kbQh(`oW!a&71sWA z*9%_2B|PY*)*{0<3Hy!Y8b8#ztSPifn4jS0JG=86{p*3IH47b@#mlx)DebC}lerD` zG%L@&E46~4^CET_O6P>7jjd&O^!ECcfbDy!Abim1R&)mwL$RNHa}So`JQD0HP5HFa z6jo4`KS}(B>qY$zQHn<+T|8ZCb)vMUIBxM$zB;$j(Ey4VNCDI(H2-x+7|+8~faM6G zy61zl!@ha$d>eC^d%-*h@d>POqw6qA@3+17wXxzDl;WwX*vqSD6i-jhb%sW?y*Jw4 zJFJUx_#>5$^>DGGojF#KpjwCM02n&jzd=;e8Nv+v@`@I66J;KuFY_#vo}H*oFv^%c z))YbRd0)!38RhW1Fn|-%mms}rp?_q#$;%v0rj;=bF)@}H?n$Ao_0$dz?A+8&nAFC; zwbN22{Eq7G^1{%Bhc7(g#TeCo-7Z$Z{PoigP_n4B1(YhE5BEHwh78qZo zQ!zMK2ExT$8#Vk$Ip>T^1FPwFATuW_>6Mdj(dOZ3h6{3LD_h**p!q}Jw?J03y9L$` zKR>X|4SGl~g0-{ew+&5-j-gWW25cfaiS!U@@Bn$AJ!8C2T|Euo%Be3*v*aF~EjZe+ zfQS04s-epo#1zm{KmdAQ_$FHG(luLz5aYQVRi=%i=*0S|tFE>keH&0r7ajd+Hd)94 z8pm_FZvyL}0CiKothe>Ea5YBdcwcu{`~O`xBZSV~>KauPKuA9+d6Xa$y*M=^qbx~V z!FglIm{gg6NWVq_K}YWZ@XlDM0_JU$|&LL7?IO z{|@Jy`i3c>jqDq33GK0bK7GN!n|_(~<^`!YPDyx*-;)>MWfx#VPZNRU6tK$YYLI(5o8W zW}vBKygyFcfz%1JEeG=rZkJPI{-$(G^a%9vH$LqUG2>|%sDC}$3-_*^EFOpPlmA0P z1!K~^)AX@Pm+=GfJhrbpuW;?+Hjc)^&l|xWhQN#z3}YGXp(a-dHv^(u;|W)Z?3$Me z_9X5Q+w=yHj^nRrx_9Do6C6{trsd?SFI`lrGfA$aM1Swt92Jx|hzE%qf%^oi;Y~@z zO!X`t{V4wp~j@S^CYK+Xax%*Zy4yB*(u*@@fSAL(G>^80xki9+_3zue{ zcNhHVJjwvF_L|j_O8Q~+2TiT8wkNaH1kGt}L|BE3Sd{IlI_jpYaJZlAPOm`d%DK_4 zQ;>+Rpb873=oEkOvmJ}HPeSpI%3(v$OjeMv-(nBiSjmLkaY55=2q-O@rTKVyONytU zq@@)GY$TO-_6!Gl=q1dt(`5Z&#lU7)oUK@r^u~o*EH@D{TnNnS=8TtQAM$3RK^?5G zv^FwuVGZhrm z#xjR&taVcf#RONo$5caGu%b{_rzi(M6^kN-2cdR4qdVxiI4Y?=F&SWVhjgNM8EK12 zZB2VHC%RL`#Y zkb+SPp&=qecC1`?%k>z`kn-II_FTDv{ggHy$mdGCbiY2%M(tW>`|w2`Jz8OP)aw~X zlmSZL@Gt_wef?ML+i~5#&l3sXd=pV3^&=)OsZF)at3go;791aN6u&86jcYETLnQ}9 z%m@J`vEsaA5~%m+6e@H<<%0W~vJfJc>cj@AaX%a~Xpa(1$VL<u*_yqOt4}r_??I2M@2AZ= zxC&!o#v|!}x-KFu0Z2C)4q(8PfdJGdX>;x{kw;2F1CJ!L4#$n+1nB1oOuh!=K^YDE zk8Wm!n)t&jPTT~rz0s&Qoq^|4MV!&dC%jkVFLb1_dWTuUVTpn=3M4p^ydrY_C>RRd z0afzIItCk^N+>+dXngP*4XDK?0cA6;E|Cw=1at=0lYKrMu17^svAcs+>%K?&QP`;1 z!uDmLkE+6E&jDm8Bd^XBCd2(2Q*1PW=W+s4kw|qyJ!o(|`(Ib`zEc`YsXGyOiQxX$ z?pz`u=z{7(84=rU`6OvS=g#ptGxR1PofJgs1SWS4e@?^YbUPrjo8Qd+J5h zhd510;L3uC>}mYF-Aa%G>-I42!D#*N{-GM5^}9XK<7NK@F2xMdASjbgqXP31hWycN zmF&FQ=5Uh|eyD!A5r;Mo!2f?!fn1mQ)Ff|JlNAK^n z5b$TePk^L@1HR%~SYM-$GG4-L0gN|v@0?JO%BN-CXql;&_cS1x@Hqf#cZ7oeyt<1) z1Xya&yT`eH-A)^U(!3h4Z-bGANt{fTnz&m^HAPDuGb%Yy%)H4)VA?!r7f#?#+!}J3-ed(kx#bR&C!HrDuoJn_RKpTD%3-0yrQb$N; z^Coa@VWHRyTZ(n0{0aE7%Sm3qlAf7pg)|5_(`Mhd!($rUo-WYTq>o0%h(Ln~zq#EX zfs)u#V<8DleTzUMw(@l}WIIa5s2Aag20|P(i!qvDv;d5f%CI1-?M1e8n4Ys<<6w=* zbo81(^Sw^6OT7kMY-@qChxG~sk{59JE2pxGp=ZGwmLG5wzA6VmHwaTEVx$Ivi4Tw- z6I~)H(5;hVBJqmmxfQB&{bO9bl9Hj~ny1NK?M5;xL{y>Htk*Sd8Qzihaf5_H@Nhn}dDwP5bP;`<^Mq8Pp@+jn}FyLWr(UHo`W zrCY=uX|GpG&2EnpIK?~sQ7lKQIk7#Dpha}k~x9HPV)@i@}{1pqo@HGFD% z1tn=OE8fBMV)QBezhY**e>H56Aw=1~pSt+xQ?6#)9*JGb3rECw#<>HM6=)Utci;+m zMjt8gB1{4sl{Rf)| zWO0@r2M00=CrU@63SC9KU7BkFbI_{ddh?*#vYnW8$#lFm$&`|)OX$YN# zD_q9GmT7tUv=M5;%m%R_F2;BSAh@Jqg1p#Kv8E+O0xNR$+oq{F3x+Hl^Pvm_w~P3V zKo(H-{OZMgz(vV4fr27c2WJ-E(olJD!gT#e$6_zvIos2nArB5U%ln#Jx|?S0iVsWf z`@=T*P!3wHN2vHs*f_ypm}xGBJ>A>>D0?dG?NkF0<=>wYQTiYX_%FB^a>luG z!{>gNWn>qi6F9C{XsS#XR{$*3%thKAePh$`a29ves<}8{FY1zHqQVi2eM~5egp*3V z6Oa5z8BMTRw^)Lapfgz;h09dB@Ey8+3&5<0%ilC6Q)K?wBc(%EN z33M?XyXaLM5F4J(M6AY38D;C1cVu{t7jsDTR7Qj3gH<;%jv8W%3Z9|(8Gs0QPdIPu$B;Y zd6WHOcor0gVe2#%F(N8({201_ws7*ol3?4(MWuQ#2qr4p=yIRxsKOoj-6}XGWH%Q;YsYIFC+r+9>3&lkbA|#MwS|`j0+LxLXWn$7BCtPMo)uQ zSLj4<^yem^bBhxT+A>MG?6ja-*DDsWi~0qHW*_^hqk*467KmuJoYRE_=uSZt7|#F{ zkU$UxiJ{Q`Vfu;B40t%t4n=4>`7ZDVq5)eP@UZ|<C;3q6?AMY*>LT)gEj>+S15gLhbYum%lq^mWz=K3814jR&JI@G5O!*ihBz z&o{9nLU?_V7Qa1jCCBs;?Y@{_lh#i2VzTKU&zrbg-Tq#Fo9UL(Pw}QdsQWZG@0;tC2m*` zFA0S+`diUc%yOM1LIq99Z`0nQmta5&0`K?6FdF+Jvj-%_@QR2%CyTr@buKzQ5#!Z`qwAHqP+Y^@yr#lj{GfQ>&>7klSqU)WwuIZK(e z4?w*;#X`c68BO4|F{C}?ffQM-J3jueOqQ|l84w@a+v{ z45a}bln2w-L8M42cJ*Uvb4^xRe<*d5jS4giWZN zH3tq1(p*nNp#$V);xPPonaeCB6pRn@!UWf@X5~)k9TlC-$b+a)Ibu|0F_VQ6pXVX#K?OU;@pHx#=B%nk;Bpx73^CRoILH4M`P ztC%8&kHG{a`2~`m;X+7u5Wrm2W)qC4q-p335GTb!+^@h3Y|ahQUpP)M8_uGKIT2qK zR4Idyq*n4$-Cmd@p>GdW2drNXRfi!Gc^Al3hCdb%?MX<-)o!LHwr?4Iku%6hWZgt( zISv3#h?$4rE$vA@%&wCv8b6qiiPUG!>|q-e8#Nmf@qPOR`D|XdNF6mD&+-Qa8E^GBGJ< zC}d0qLF=5pNFA1CjQrP$i!)Isu<$JNH!|6s(3lS_uY@Ec zjplJoaI<3=!?#u&T-0em(@yMf-CmTg3i=?*Qg%OuGAc_bTHTGUV<4Fn&91+U!3E^j z5O7Wd`uZl$m`Y3zg0hFy1MuT@b!29Ip5q0p8~t_iFfvBjB?KkA1QRm1jG-bzecPNC zq&zMgW@I)M@Ezc0qP-l6?8n+kk=H{0ffRJLoAoJA{V(%ktByIJ2T|m}P{o)Tli$mm z=>H5C!Z3}NQ@V_km7H8=CovsC5M}C7WsgLuxgG_ErP}9e4b-x(gduLo9B=}fc}RJ# zvyb{eAi>oAMcKskD?Wgxb2H)3=(&djnq1CQ$_b5!&4_RWw=v(nv(>f&=Nqn=xiCb3 z2LrAXJzavvY)v-N-HcxwJtm9E5O#g(35GBoIl^7dU_qcG5GDc7H0=$QIjl(b<(nG~ zgmJ3T;E+p)@N}c;#_Ovq%Cj^r|Y zMc&PdTZi!RZzIuxbW7qflOsBX)Cij~r&~b~NHc zz?sX}>y&aJ5G|^^T?%X;xxP(O(g{S7F^UDcZb3F1N|Mth#`4*Wxq}ert9md#;C|xn zi^F$rsmnm=O85H1clWy7;g0YmxEol!qHD8f=2@c!3SLDL09g1!Y>gv_PMND0yNS zqfBRttb+aMD#rXcwhfU`+kqG$*pyxpE$pa9`H$X|)Gmlj`dzl6tyyv8a(74##*#9} zT{bCe0z!I$c3_6uNe@PP0cyMv+X(a1wx};C#6V-=*b}qCv|5K?R55uo+z+ZhG_mVPqw|E11Iny))*%gb23hd0|iuT`s|i zdlT~hE}HZ>!o2E^Fh_K`>jY<%gLUjMGa&;jTtuVqXF_}1aF5aRI4d2TxuB4QaG{{Y zmlVbJhSll{gBtIIdHn>GNaf9ovUQ^EdJGka`uJ+t=^UXKA zZzf1E=?|X~W;;WkQE>^x68P;cz$aCNsT+*HS_96_^>j@2Fk| znKNX*0u-ky>7P2~-W$_cG5q+z*gS(+8oZLWE9ULQO@l*3s!{|vvD0jlqdL_}W$8ni z5Qw&QygDOMw&LEusfJ1=cxMmINKWroS?P-PP{?>ljrDA*i(e-U7@{-BgkX&*4+iPj z>Mj)=eQop;cp&BJ3xO-f0YjlUTanBne7;KLmcS)12GY@J17w9uNW`Q6sYe4^T@9B} z*)`7_N^Ty28S{LY%{eVsli2P{#*s=KPG zvnwXk^K^1wmxcXY3=W`S$hipGg|=uD1SmWdq^Q>0pZ*)9DY>*MY`7Q>L*^t>b=y&^fE4)I1P|f3|pPH}?%O znK&qfM_XL%K68i>HiYD3Wuk+gWCpZ9!>fPCGCkRcYQ^k_F6i~lho_xa-~!iY$-OOX z5A9WZ4mvUKrwzDyFrY#{IK}o*dxr7#CBkbUbc&l0^wW|X5KEpc=`CWJF3w?YA@5i| zs+xx`3^t}tip2Z^juCxX;m|SVEj#{2Ul+L-J|QcJW|>D`0Q>cEu0`Lj4mlZdhFL?|L1SEf8pcW z1kM0VR**`YXY0*&bIj#!&tRFJV~^oFz6dl_@QRd)G96|>8=?DT({mTUlh4eEvcTpnbItTC#Z)+C@t5Mdvd4q82jQ z2u(rN_I|g#V-iSqsh}71lJ0y?W=jVl3P&VIHRxVhUAQJJ?a&uSw7>dIXjRF6LrHDX+Y9LHRCym0pDe8 z)5z?1LdoWh7crrMxk+_Xl9tb>vB+;ryowFPrg{v{D-ew624vm7=~vN$Mz^qzwY_ol zKAdP%F*N+~p_`$e_%jzr=$@e--3Ea1>o6Yrygz*ixw`G^?yA~%e724TLWvC)v{q_d z_1&EbmiNKf!cZYPx&gus3z}8UWD34O!*{@CAQ*A|%M$o5Z#LaI*$hsjMNwkK5~q1J ziW*8A*-9gvm-|BzS8%33$W~C?Z`O(;9Qmv-hB6k3Cr}$&RrG&P3cT)0A3NaAYB>@Q z3w+sFXM85iWl=!~Nh~&JFhYjPi3k^4+jFl0^ij|D^wFdbsuMU^E)+eJFGNY{%FeX~ z^bJ_3xBKmOy+rIM$dk)wPe3+01xxS`)iMH#?Ks%}Vrj`M*4Cm9y4BUg?qfXI716m> zs4Y>QMC;r8Q_ervaSmF)WravMr+8=k+9K63Aj%%DmDqHkPS@NYG3l>5YMx=;|!+~~>w*-Bl#Z4AudAP7_ z)-BQDUS@KHoq0Oi1`F&3ppVS&NcUB7H;(b75$?uOA~#6mM1VQS)X_ovP{Fy9b|{yc zENnBIDG!wUTPN(2vmPxw%ms!VLzTP22@ACvO}mt6lyLt5qcIu+J3(RTw|@az_uB^( zawm-PD9c{6c9>GB%=)1YBMizyU~zOG9k{~z5H+Xxn)CLZNoyxOJNhRAPw55KoJ)Cs zxk1l$7sJa`zrYMia{Lv4-EZwQsQvLkngh|Cl>}D~{CgRIFBn9#{M^G~eJqTQu4T5L zddB>lvCs|hB(jL%c_6k!cOXg9@ye|wipY(l5621>JR+n2hV+m7uw8>; zT<>;!ggzV<-`;Qp7azSGgTp1L1T=>4n{(M@gHcB0)S_s0PAfBQF-1Tj6il$^M$7|r zwg|5v;OlkySx&KYwat1v8Xz!Youo32@RD)&7t{R{!&IaPH za+9zE%Ju?Xn`Qf*k*I|(GJ3_D_A0%nUm$Ntu!Z4oRwr5;dGThlu$Pb^DC|n6_%No( zH}vD<6L9JHb!>BeBig-aNyT#U@WWxR(#&(&Wd=wC3>;v*iKA>uzJtFpn4yeqvPwTS zG}4ZnTyfxB(?7sjXq%6JpOFuiOu={9b7XQFP=Se@mh-M5Z`wSYHr<b@;F8l#x^RJn(}>l{W15bucp9>|E; znfec6PO9O{dmBQgGi}rk;>Qsx*6#7m*0G!WeC0sbi%A@3heRvc=2sky zPVCV^Wcn6GbkYaealLbbE_wiomo$wS{vO3UwzF=iVQ5?}K1_h19I-Jt^rlWc*3TYAG6H=nU?vsbf+BsehcA$%_JwqW;j9<49&W6AeiR!3H2>g#@v_r@g|^r!hMj=d3G-yZQYjrYakFGWik!{u5bDsaXizZ!NuU-0%?h`7LY-;=xsuk~ z@JhVBo%R_FAV0NM1ytjokb}IXvuj?;5**^GbT-xbyszE!w&PMUT7x)+v#u5S$k>KPh zoExjU$+v;K)+69l`Z!Dn@>q_5h?BmanmGPqF)ue^fKXu5PfjPUE#=IS^&_9u##_eL zg!T!e(|A(IS8Q|));SzV+!fEfAaJPruf_pvJV9T=Wz! zz#Vgn+GEk<-P#K&q-2(pC)G?=ufKPH5&s^1=CNjV?#o+8_noFzt%9xvd~pBIeEGMI zef>js|0{&+Qhuo@et6r{byUvT@rw?9bX9Ba3=n{4wTTC%QIrHEsC3IXK3w;q5v`=m zz!DfqAcy?Mr7;}i5{*5L7-b+EwlB+)t=tg;x&W19b!tKyIMCe7N1mzP%s>#QwW!Db zKUuFIU7HTt#lUe1reW^*adPtvt0Jyfs(w@n;^}|K0KL zYtOu+*?jD+cQi}K7~KA{MvUfLFAKx_Upu-bRnA z*s>>bGCk9SKB>I$Fx(yVQw2wjCpkd%KVbo?NeQaY4&7E{!%tf>(==hATO?`URpL*O zLA8tF=V?WS9(?^>v0-{|-~C6A9vyv;=PYtvz&NmGkCqiW_uNar{B?)r{Gnp>vylVJS28$+iA&@dGW>6{)V=`)6Sj@1$X-rdqnN9#!X{{@uTE}Lw7{>n z0O%NZS^T$jF_+E75x3_hN2etmRxxUVONLO`xr_RNYttdmexeyr{-edAO`FTAUhXX~ z_m|_}0$gIT{e9B<=Yjy1_nhy)q5MMG+q7vDnyuAQ^t0US6`MDgSfdy!7Zg8Vt~fj| zUstZM0b5-DLb*cVDlT7Nt{`3(+jB2ob>J`m@tX(d^HzTPn&}$MRx{lyf21IF8ynbv}`7h2Y|0Qcm?HtqaV$ZIU$6A=_r>ou3 z_R8hu4b{8eVky1-mRX&5%<6orRiy%N&D9r_tf$qV*o=c%D?ozP)!wTA`ur{c70jOt zieH|A?QJu#{mN`)cg}k8tFvDG+N>9ExA8RFiqbUOcbeM}mlZ8kbDir(|3$jhFPEw% z#TK|?f`-U;@v7<)J$uKjwd1qa?uyo;z^})q@Ev|pJS|6Q`zAfewj zeq&bK-MKdI-eXm%z&#y^eLmvj%3QkWu=IIRtQtsksRsxOhG+)ux2Rq&v`3Y? z<&meA#~$iKUj3J1!$(y9X!+c2UNmf?DGf99Z@otIUcbM$Bfpo@&7yIOO!>CZu`zBN zlE_h#K71iRU5E;>71HJ+igBIgaBr62$~csUIEx<0yepUp>jnxo1jp=wC$-hHSMhSf z68K<2?D^F#=wiXv81p}TSLS&vKyEodJs%9$Z*P9u+=F87L1L3F!AS^%-ee}mnl5;G zsun|)y&CmEVdBB#;iSV~sZTh8na-D(zIZ^`Pa<@~+e$^tt@M&y*^nrz8*xfh5e(O` zl}Xd7SZ2H|u(GOVa0!#7-KPNx01!*WQMlJ5Vhn8Ak?s?*DBE-y-T)NOBg<-l7_l__ zVgswAZYs%giE-Kf|9>jw` z2XmbBLt^p9fZz}g7_c;FW8jEUl?*yipIpC0J9#>D3slf+R?NgDG0?HZ+%4w0)2Lo_ zHWp$wf-Q8j0U)8gNUfv(ranX>nsIJ;Lu!rMS{aBF-~Hk@g6#8rZ}Xb-rufJ>!3?R^ zER2474f#z)(`wObOcQbbuzgk?JRC&G+)|EiT}!8lTs*xzS6f@>_vc$NrW~zw z1*i3NH&Q=Nduh9PP5VgK6{cUoEHFvXHIlN-$M3RTqYUV*OSa9%7tkK!O<8#!RF9|5 zqkf0S*~kx_ZD~sHq8$#;ArG-KnqflaDK@Gn9hnfLN8iJ>sH#V~4&^+T-R-pL(>#XJ zr4z7AMB0E|%#!#;&jPVlr-;R(l~W*=!HfTY=wic=JZT8ZfK?e3h$MP~NigwMU`g-g zp<2$4Xz38%Pf?7s9hcEEqXfDpBX9xO@D=k;YMDzxb+2W&BnAcGZpC+)SZ$@3E>!#5 zP&sM7fUJt9!j5RmM(d9+xbj{KZ%!O%QX|1UP6zgOh!XX)IJm*&LQs~%Tu=GOwZmIC zBr_E2>sQE5`Qi-%bn`;W!AQn>MpAhC-F>@4nKJ6pX3X-v0_Dq6DJMY5=5@xAugFGs)}JT)8DLCh*)FtwSCi`N`fqNl*oiv9SJ)hfc{Z?xPq}N40>4(sHwRS@qdr$ z%iMeO(j%jQ8kd~82#|BpLp4yP@W6J?zXU=_LBK<)098*B2|D$F+f#Xu{>!(Sdcbx_ zUD>1@%ok=Y9))MhL4I{6;z{<4x949XZ8Wve6`R)5-AH}dpc>$%JjmJw#WnttpkXJm zEe~fTR~=jqbucM2n6VJMYk+j}-CxSG7N?W5mwvKN0nIs9Tqb>P`l`0 zJ)#4*Lt8W#eKr+-o1uetS}vQ=VZJaDiNZ5<$gj@TmC<4TC8TX?p({46rMrQxN{J2V zpbuJfSTfVs^HNBrgshuQtj`Vu1OV)EbfGapf_J zIyzKQfW_^Muzlb?2@fI88uhP@)WI0f==G}K%;@JHC_P~Yu8dkt2ippjauMNza^AS< zYx}tm!&$h;ePrY44Vda0pEPj^I`e(6oHjvNC^s-G>%yYc>D+Pp9Kb{YmC1b?w^mh@ zj2lQ@g5#{R$xnZtCb@1u|7yJ%7Zl>&U%$HK8J!hMQJTA!{>-PMgH`*AJ7%SCzN0H0 zT;k#4;&?~K6fZseC@*o{e&*KMOAp?fU$Oxhl?OG%^p;NIWXbLV#zjwBNSigrAw%3+ zeoms1Bkj*GUBf~egy_=65cHSgg-z3^FMoM?%{Bw>)GxrJe!==it>^&oo8rp3?BrgQ z!ybwN1hBPF?#pAUO`z#F#6z)y*|8dC3Ndr2eb_3*ta>&Fv#V6B3jA~)wiHX@#a!ZF zZ)vH|$HL;0ja4n~qV@J;Kki&Je%oal*{<<4U}(FdljrKqCaj)K7_amWVV&S$=VjcY z!}bqzRj__A6K-u)sI~-YtV$8}=pX;i*A`ge!#kC4yE?S(UxLHaKCq{`eb^y_{>9Jy zK_uFB9no9F&3E{=PV*@BX-nxY?Mg}2+)SlVJfd<~NvfO^iw0Ky@S{Kf8oKQLrRW-y zHHR~Uc8W7lNUdK!>Ora9SkIUK^368y{Zx-?|Lbn)aBtAQ_Lhu$Q4gGgF+vdSpZ-Jw zIy4+Wk7a$qvJ%vF)6EdSZfA%e*7YE!FHRks^=R3Vefm@PbYSaxw9L(52N~osng#N) zF@FZ_hjLH)h-)}c%gHmR1==lVZnD&VwSi6~*QNF=O`=xD5z_~2`C}>|UxC+>qCFcx z!u4rMcUq|1kIveQkw<$WdZRrS#?})sy-YJb(Skoxx=(lwIC8>CKARGVkcXq%D zPz#*-IYJt>fA^{mS?l)ES9Qpmp@Zx2bKgm!Q@!};2V$enV_ER9qe9x_DO(*A+05dqjMR(V42o9hB0xd|fr-k`^1HtIHxGR5O_|I2=4vk$ z1l@b>L$4OKX)?wM;+}vT#;T`{FtQ5Uy1g6Vq@uy{I!ZsWBnU_^WOE=!v;v#M{T6zJ z6cD|MEfxVV{_ys*ubTFTazT0OB~dPiIwaEe1GmnVL%>8yZzafJ%64c0N21fGo{ag) ziSD6w32pE>RF|`gRW=kM3K=2E{sLEvgQaCYhNh0I(y)#ajJL6ixwie=*H(usruZq% zWC0r{F+`G{kNKi8y&=*rjyIx`WrNqz27VLU_}oLZfpL}ESW@1`W1JH{W|EA^=Ennr z+|dOLuoJrQ!F%431!^=DMH7bk#JFazWKpRcGq~8kZ5;K)1Oo6Gn~ypyDKsg)pf2&{ zCQ1hjolVYQ5`}Zu;|RL0bAy8->X#q5_pKnRxRT3SF~WxV45U$qh&mRK{Lx%!!tegZ z6us1%Q(0r?q1j1h;jJ&99b=oTn*O2-YyJwtuY3Uzh63U&_7(Rr`hNT8!F(w^!{5*) zESISXJnzZ8V?<8?CX2T3gn06BLXWVHT8~wxmB)9?s+cDgie*xvsY)h&V!1>rl*^<- zxl&PgVmWUJ#W493mx>}&!ze7Du24o+RoL|6n`odTC^}tX=x==8z%>kV%IVOPy`j;Q z8pdNhHHE;=F!Hh~H2lMI!=WoovX1m;KAQ@{qfR`Hi_I@3bh&uVgwxUf_VGT(3m1=Y zK^k26uHjE{N>Hh>#iBA@{^7kga(2Tt1iFtdT*CVKu`vOxUH#TZ8o3BRJLaxZF&v!I z4@2v0Iq0;S<5`rY7H8T}%5^Toqw zwf6F?KfT-^z!E-FYwVhC%WKIVr9-%& zXe60Yx@SwHX8nuOn4kJh^sMXHdbkbRC$znW&%@|ys+R)MSUu2|5fS)CagklV_?qF3 z-N@!fP_I|~h*|R5Ud$u)>Dg$KMtO`HHPfzM53>Ghc-9r6KT^xu{ezR23!)Puiw#AXZ?P zfD^8Agi!mPY%El}KTLY6TLSkz_Q%2Y+tcyH5vBn^0t0qW8i1_GrL7CPm)!J@VX^{? zK5a*jiy=E#u}2oWbb%gqL(X4{!uI)EG|Y7RN}A>h!;f50K5@9Ev5-ZlZ)uvkeKHEX zx}Hz`GlQ6;ESMxTNk=EyX?IAi@?5*Y*baBSEM7Q zr~+)kf`C_Xvqyc+Mcb&ccaixyK9F4v;@*gRFkE^KJh?{3R5OZYmk*su;CJkSt=G*J zvM>jytK3J{A^+|_et+yXTeU~4!^uaHAKmtrU-(@gffz(u3Crv+_;>W?r?i9;BQuEs z8-tSH+8T=4g*P^Lv|ouL^ufd^cWSuuIM;U1}DeUhnX&0dGkpl)%#>{cy$F zj|3gz;w>9xE+I`Y08AS|s7BRh7k^jJ9EdqEQ{kDcB#oWv!{H&C8W4kk>N)IE-MrFe z?M3_Qk6DuQ)+I{1AqrB`Wu*~;W*a{7kXOY+P)@AvF zaE)Y5E_dZ>%-HpT*LPYs+fVF_fFRU@Jd?4djzUPxY!Sm{;}>wuvO8iAL}HHcr0M?1 z@qlWNmvRBS3x$jx8>O-ly>tQ!0nh{s6_RP&Q>t`p3Ehf3WgZ;ZPB^2yZweVIZGZ8P zfJ_1lg@I1$KeFppo86jjC%eB0yPZrd^9IaJi~m%S)-|U^$AXI$PBco3R?1@&;&yK8F1(^HjX+B{MZ*F z$?W}IF{7i8M3F7YsXh8BMMUKG`}Ay6h!QU?Vk4-{>~}OgI)_<-K$e6XN3$igbPdyI z-m|n~x*7M_%-nqt%?1d5F4r#)l6*&8f$OnVeqpumt$40tD4OyB!(O+^`d2#LEgZ_bbTA-}O=!)hWI z+8p>2Pnu3i_--sIT-eqOf_Vn^FlrYB5Cx|z^wWt1-GA2ow0Ore2TExd zScSsEJBLw-SAfNHOxa0A7DO~^Oq(rzb3mNk_o9^XzGYHhOhPB~NcZ7M@=kuvsdq(s z|1M{3_G9?(>`6^-aaEwqx-to^hfmh!rbaon!qpj0MvAk89JUyw>&n6<&ll3d3L3dA z5zc{t{^%XduH~I)y1RgN#yD2^Ffj$CGS3Tk7zoKajadA~KoD}IqYmnIPznU()dQ0_ zastmg%Z_uPWhYPJ3@lx^OzkajYdb3iGoPN|@Sm+=NPL@ezpBmqLu0%XwFI+(IZ=Vwhe8OvVMNL*6mK*&HXXf-yL6EyIk2Q=nX~4=J0>lp zSJY8bM^ZuZ3D^JzRxz!>L$TA0v1_9$Q;`;;SjxR14ZWi}_0u4ll0B>HvK9uQH?=@# zak$`5jPO;_l`UA4kB8~l#8wg@k6X)uUKw9tRvvqmT4{ng^KeH(rVU+)xbCSMqFvTq zO-LHyNRm|b;+^8+$*;rP>Xt1KBI;%*HWVRJ1(jgcVx=cyL^`DSBn-6Ui}10HY>R2V zy`0o72K}nd?+uHijl)iO2210aEUn(=<2}tPUcWHv6G=dNeNFVh12BaH0pSxJ4Kg{B zUj-sCmrdk%+4BUUAU7ro4UKWp2E>Z)na1bT0|aT*6cGm?8F+ptEbm7|!w&9wIjNPh)YkuT4d=25eq1s|ziU8Ec? z7T#YOexgbpxPb__H_G5@ke`cvLp`ldVGvV#Yj5@&D`;@bq4T+%W#xi!mat zlmomL2hVNK61-bwsUR22__JM1N#6Tzk?Kyr`aD94^Ocv7OX;H#fFJ#??%CX*9+a?9 z!aI3*X-4`K!{^3<38Oz?6c{AnWl5mx+zCCSWsgRPMh@h9Mjwb%?x|?!w8xwdKo=&Q zG2xkfXcP2?8P);9yGR&zDC6r7t6bGITQWcQta)}5_DZ-p)J9Py&nuqv;)BrbxCTEe z=nHZJmS{Yaa`etMijx~);zIhuyK2#RdE(tO2xtw5e_wSA)Ll%gpzMW0owmZFI(Mf) zQlmBT0Un&4zQHBKT!6*No!f^Vk%yqNylZVzD5{=Tnpuj-LS1YbWb8xTYhASmbJ^c6 zUc_qq{q2qFn^6@^$7TxfA!@w!VR)O>1>UO1lDNs{4DiwFCEz3FAQJZ_i{iib%kbCH zZ>@=X)l`wUYWzD7$Vt(OeRPj{%22eAX7@8|%uX8{Y1lIbNYuzA>?=p_UQ6<)z3tcN z&+cmP=sj!c`4^tz_jSHU6}v()riR_!#h$nTE})T0o3-mANlRyOd7a7RZkS7^>NnSh z-xi2~qhkWSZQSpXjU?IckxZA1c=TNbnMvPOl>2tQ!q0+@9B=lbihUfpsM$a`?)2Er zF)sT1M(JX~JsqzbUImgRr%UL3X|*2cq)j2--BQwFuy;p@RlER6M+d0xw@0djmX{m) z$g2XpY^E2olEQqJ!nAvzpg9_vI`IqcNz;P6L zkTz?W_0fax#SAUD-uKj3T6g=dUvWAgWSbW76lF0u)((4sAwZ`%dk50&r@?NSVI|dK zXnW2M6q2qve20YL!hDV5M~onj1{p#FD^>qAXZC`DEZotX4;Lyl&h#`;k*LzrHB|DISkF6<9=kB5#V3` z6JNomPxYftomb$WISdGR`^RJ$ z?x?PttiGRwGZJLkeAbTk4+a>noU2TN}Yhixzy^(Y=kAm(8=4| zVSkb@~vlw(JTJ=#gYR5DbdR@U~L5 z0CIwaNZo~_&?#yUDu-$?vxAg(@Bs-mRQ9DWo4?Q``pHN-BNK2R56lEge?Ab3m)w@Q zN(Uz^EU4mBcS>o(1OpO|8-!nn2V?kTI4S2)jmzjp;$cx>`1f;GuO6)jv-INy1Soq@ zd9vZwjWmB5#0O!pEb309Bceefd$%pgJW{%^;><1Zkl|;a66#H?q89%-6JwDh8f)6%QL~x@Sh92{7*sIR>j@ zqE4r+hJFfCF==$)+VGDz&pTqnhz2aj2+-+{*U$EOq9AX+kwjf+Zl%R=ZTrvKwxc?B zXLeh^;;-?zcW!I343EwE)q}_nV6xagSREYwX^rcst(aD>S`w7>C$Rt!j74a81p?w( zJ<3TPu}S9=IB`~50t8|Y!^CqN&&Tjfv-GFo^6uksN&*AnKLg=Qf*ltWXNvl+20~#V z!*n}e+55|{;74PgE%JcYr+Ky)vZ*O|SEDD{H4}A>Ar+rsH-flyvwIjf2%`?#Ti=%Q zK$wK~mbaBiZWFeO(NC5z7hb{HF#1dQ8TbP``2-BZy(&JA)3yDxPYRol1DhWU%xm9u z=YmIV^|ac-AHCd6|I&HIlgG<^Hwz}Yv^2|$_Nf|(43&YgX(m;uAa#ua{&(fZ?zXX? z`~zbmciWir6RYmvNC1>`tfGc9pqJcJUjATy`F`EQoL1o5_xtvgQRsXawr~F>REE)y z(Y@j5<}!R0?P9EdZ`fhmF|bQnTjHI2<+flywDLfm_VplQA|otDA1z6hKEFEVQl3Di z_83h?AP3ETbQQG^ghX@}fkdEkne)N0_(;)B=7muaR_PcqXqO3u+N2=4Cb%lV2Xq-> zJ=bTD+d*r6Wq3419*#~M0LmxP+ybDD=+7g2uATnn2plFK~@V20?f0tTUISF8W81X~j{f!~Z?wd{j_;)%Y$1cYz|lD_VIfK9iju&&vHj}iu&G_>$}^6U-?Vm-`*Vsp zqsOx8bPX3}*qUE_K`zxszjmi7}~KbEeM6z5lurfYV`J0FYyy})H9?@jN4 zcxFGNJ6RkHoR)|y8By8=Z1C0*y}^+;j~Q22>+MnEA|M8WNW=iV`yMLT(Qr$01bzjMhec`6ujG;kT+Yy&En?N8pz zSF7&)F6*Mr!LP8k{KS3+4PD_D)=DHC5PRu>qKPjteC)ObZr%IVlEVYmO&@5nRMt zJ$wzaTV}uCe#f)qYH4#M-a!4BhGElM47ml6kA0TRlR3*()H6ak77YG0@XmdqT(g`VA>AtcT0tYDbv4;>X8*J~I zMrx1#QbcOa*~&e_y90}hF2!DSm?j8BGimHy=-2K2cyv=|?+PZ!R5o4WDaQi`u{#B~77<|)Nb)xPs43E$CYq(S(2tdJN`0_Hs zfeotgPC)|faT-dQ5HTBWQ|@=ye0pj4MYy=EyLdr&ad~%fMR##!ck#mR;zixXi@S?; z_(Ck4Nft;l;)(l|Pyx*}42tm^7m3(1ny<(ADx6Pl5U|B4zHI~-&V(k)c zuhd6}}15llZ zG^LQAJK+?Cuv;`jv0Xp_x1Xa1Nq0fulkMV%hyNnjz*2y_Gs7>OOw~HTq8G?94R-g$ zhD#X39{7ldan}vHI+HH!`C@eK=xvL^7EqNJTDEnLLnl9kQV7hk8Mk;G1HIW_wKRh# zcJvXN6g|^!F|~*Cx{F@46bK&>93_$D;h_DHZt$+Kt_n35JR!j6Y?Wb@*pdRPR38yG zrVmX}2Tq_!h%2YibES&W>uOvqXsB^gU7zX2EaTboPMn#{8`fsSb%}d`*`wcO`=Q9H z@#XgMpDagjufh&%OOzd4^2^>weR3N>Vx0sAK!lISmgPR0=;c9^WZz?UMeaCVsYaAM zn1sQu)U*zQcu`Q_j_L);)a$qZ6)u+9MlR( zaEf{k?re}>c?=TH3^qBJ!V*kt$(M(#h;U~IekS@UMh}39>Lfl0qFsdji=@Hv2E+dt zj7@$PTnuoxKwp=L81n*@&g8dx0dmAGu7lJd22yR{!OSOomnoyaPBzYzkF3Fn;?=u6 z4#Mm*d^*F&r~K&O&#WbZz*5A@u39_J;`XnK6p2`PNdq!+cOAvh z`QS1-vo5UUgMcMoJg45H`;{spK$MCWQXgEE& z70L73@L3-YpK%-@%}$62ub&oXcAwmxHGFAE8yr8(4q|0aof%ltXCji4MqtC7- zE+5q}aj0huC>HGmAUO{kKx$39NgjPP<6*(q(~sjn5LE={MSY{v`)V0-bb(dU!d7Xs zU~ab(7S^N{z>&CtWh^ex+yDTI8vZo?+0nlJgWwf2y)b%H?O`ZUs#6mgv`ijOPP$(X z3etpc(w*dGrBNEU+m4CkB3h9{#fkTMK%%wGN2k2~vNWlJqBa?!@(VL28_-HN5i`xk zzkp;fx0&iJaZIcXy0U#>zy~lJy|ZRmY-B+XE|l`Vx9O*C*@08IAI~fFzc+oH@rNTD zg>f2WSYUg-9*FbWGi-L;l*@LASAN}yd)NhPZ^O=U5As;qaeE$c#WK?Lz@=sUWN23 zKwxB~)~rDp$nxCk#rHkEzPx$TDehi25-d>fq5gc&~ZzlYLu{3^B=F-MG*L>_s&k;EC9a_x2`46c##*ZFj7pHXUQ&(x9#f@c&5@v;rv}fn=8*l6!e1*K>E@y)id?ME^Y^E>}sBLT7>#<)xbQgD-FQzBNgD)!R_Jn4i4Goy}B8x zHP;Oxi8Z6THvDXW#_OrGp@^&Be9ROT?PQFU?dZ3|{~UT8P{F`~Y$P0bFfJvvi<(;- zrrtPFJ6X1!|sGL)t`7UWf{C%Y;g_ z9fexul+N+zfwkdd)ya#?*41;%q-2+eLfVJdOsxP>liEIu;Ubu$4e~@CCy=m&FYbxA zVu)A;uz?pa3ObQ=M6F_(+zpY(Wy$KX^@fsr}+o9=uPLrL$*SQXaaZzeHaGPQB%_fob zjE<|(L%6?u(i>wsa5rRbzUwNvuHXreVrujt-N{Mr3H~WP`T&Jg6?`_~Do)zemETjLB=pGcO3pP>OYi!VkX2x8i!QO-I=9pK5CD)~V5+-l`McTZ>Jd_zE(A1AJY zkQOP_coIg2nWb)tcL{3>f4QoYzH&MbucN;j5zM3sn4ko+o4co}=>tqnIEfoD!zi?& zqL*hx!lskE-T62KU5~z0jXr7)URwVa?`ms;%KW;sqVMDleCpwq)AUQ8)Ajy@-S!+b zhn&UQ8dBC`yix_T1x{sktN|`DUR^!#B(&C*<@jmfQTZ^Uhp2 z;n+xA0DBbHJ`)b@u*9aR*^bJ&<|^r|!2hJVmjBpmL};Co4gm^m4iO}?>J48>l5wY- zd(OjL>J&OUVNP6b?JI1BYW5~|dzlXLExX&SkeOr$u%g|C%PHwrP?CpN2plpN;WPsF z45T?&Ob+cP-atcE8mP1KOq8l2%w`j3F{>>w1EvO{l1J{w%IMljF!-h@9(ksm{{F`w z|H?BrF#S8;-7LL(VoYmz-&Gt7x+ex6EFg|5)!Q@b>WSB_Cn`KeJ*(8SdfyATO;)W( zj=?~Qo0HR1$b?r$f8tSFJyWiu+mOI1y3PLnE24wX;6vCXi z^5qOR`f_~g^uEAE8+ncd7ZbiR`ef|}A0=HJj6T8OhfmnzWx=3nF_jB+XnLm8L-Y}K zPFWamDp-2%&E@ceuO`3J<%H(COXxm)O_!%01wUCCeUXHNTojw!)e;kkL!YoAA?EHpjBME_oCFkC_jLU=qNcoqU(uMC_)f)Q7Xlyq)=lW#V4s z1NFRU- zi>imW_ckab40)EXobjUwAGiw{^nr(jW7?1l?G}fMD_&&^VX`Hq6f4PnO6wnHiXFVS zD4=WRuVJ1{hPTqhhnPu-eFalJ^=Mwvq1zQqnN5Hdz)$yiMCcS@THAOFvXhR_`f#$c zdm^`fqYB>vN^np;-v01;^5#~m3SokHNOhKnM*kzUI#3B74NiLehW+ZE8wiZ^f&jM8 zqlz=>Ibe10(! zMjMKQgs>(&flx9EObS?EiiR*PASscolDf^=p9s}T#IKTKxpk3_vCe2FFJg@Q{$HX%A*5t{5CV%gTiKHy-RO#`53=poJjq`@5PK|$Ib!N$s zEry#dHyQJDa*MR#I<#ny*1rIvT{vsLS$fN4Q?q*2;naf*$%5PTLx}GcFtmhS9%(1+n$u03hrjX6|Ad2{M6=irdmYOCenO) z-T4FkbS|$WqqMs>d)nzBsf=34_3#9JgeV{Y2(&dk4q?fX^mN2n5K+KPu;py1BGgYzs@;WK z5WpB)V~Tps=@~23SC;`E&qa(m0RZY__MigULz+dApoU&V=isV3QkI+3eG%%}WzdW6 z&Y6YG@0ZeS#|73vAho@PXPZJ0by&6daD+c|3?f8MSd^)jc^EaND8PAnOX!ked~-M{ zy=0xw)@c{*e%vLyY3}ZM#TI&iN4|IP#gm>O+hp(&akwSaIuMDPINvFcl%t44OcDWm zu@~dbfX~tsPU9vCwJmW0G6m1sHvTp!5x?oT@B#lBZ|4(T5#u0&5u5wi<1Cm*i`vu} z(xel)PK`*}b&}O9F*6~kDWiDXFe^|on-~H5&7&`KFs?Z6f;(mv@UJyztKx5J)}pW9 zF2rX}c&y6nU&5)a<9|V8Pnq$HGiR4inq7V?&DJlOe8>1SMtoZHFU*ozF#UJA`F5~Z zS%Sa^tzzzZgey*;*XcIB;aQ9LrH)?nZ5ipJns}ktoOWPayq5Kls8Yr-!^Byam^uY{ zbYt{4YvUbpjo{?^99tmAlHse{jL*%laX1*$-yMzAoa~dSBW&f2W`5APwVx z&&0&)ZxIylVOig5GkW1R*jLocy=KgxXIZZW^b%3xDuMyC;gZk2rP+FH%o+`pvM~Kn z=KJ`#Df*T>##^&9=Sj_uW7K?F^BouQ!kO~V45No5bgF9c@Y*r@^Q~81Xo<{JN8@j8 zP8&a^*)l%U*3UVHd;c^M>a-*X^K5TwwmGGf&2)4k<2rfPdrc^l8=l$enDvCv=-wD6 z6g+^RQ1qoR6E?$@$s%kHg*hQvU({ZQ(10|AWB2waHD@(z7ZPVV>#DY)$+r;;BR`N( zQ>SAo)&gc|ze%_|I;JZtZBHhN`)jliK~sVu!_lLD3)zNiHT6eyu_I@hlWFijIWzmi zA%N7?0_n#Y%CpQbZY=X~^rI|C`zsAwv)!s^g?2+*BoPuWLr|`!Ft^$e4AhNAd;DKP}CG2Rcc?Yur zFl3_g4(wls$Ceq-8L#e3jQ`>YUP9}z`#fT*L61gZC2Rb<11aLJiOvMLn1lI+FUkOEiL3T6+czF`#R zf$zZbH<%s37flXv%r{zI1=KLXBsnqxb*}~*PU_1vz^WD_S_@icUQs1B zy%zu$(n?ab7<~nc*)^UfjM2v}d zcy%Dr)uF#ZrNhf=*D-+xRyC=jZ_MfRJ@I{9fB{8v__<(IxW?($VG4&OBc$oz*~8&) zcle%^OZh|?bXz7p++KFE3Hv{;WD_n!nCM8pYxJK{UPHUI>kbzbkv4b<`%sds!8+|o z9o)L6G0<4WjZQ%Rh`nSgNo?i2?N}PGr$@Vl=R7;A1q|=&jMgD+RzRVa-ydF3@Tfd# z>{WETm=vK|1E;2RrBV@~P%{F*)+;r5Hrs)qjP?O$KkBP=T*HZ)`h{Kvxs4{Yg3EtW zveZxpQ$Bk*{PAkz?j#L*F_;@(g@$p41AcPE27MC9uTVtv_Ohr zk3b%p5S#Ii9%6)1B%Y5!b>0boIm;kPw4)1_M&v+9IDC3|Zdk7M*TmShcfiPonIY4;ErXSGuG7mpr_p8EX=K+)B;QczMO~p6O$#BZjO1~6eF|~$*8Z^R9BIzQ zveQJj5FYRb-CK;K9^N}mmowLx91;h?2i{S&b_SF~U3@(=5@5j$8hTDB9u8DQbxUOt zgfU7gTyaW~PjKRhIglNHu)NV1!r+Y>Dk|Sl1NwWefvX>YGj%nbYYqGfpE=yvT?B_W zRdSKw5nEIclA*A_h<}(FRkhyzNM0PmSyv??G}BOUM4nsic+GtgSn+zhf120acgOS& z7V){&*7-Xi)w$JZ{to)Wxz&I>n}^>_ySr_7ceUgCdvhzhZFhIoTz_xZ?rtsd-PP9l zJG8sI8qMFK-QCrIJ9v9L2Pm!%fH6OZdGb2Qq>1Zh%XP)3Hp1z`ZZh+3@dvgUqksxr zJ?)&HveXYoDdz^pEtVzBSx)i`YNH!Xgo_#MuI5OERgLmD$I#UoGa#B8y&|`Johdd{-4nXR)8(xfUFHbgHi3oXJuU({Z#LW@-0YBI(Gn-;kyeMxZ}wBONU2uAue!N|q>m11Pm zt-+gBz;$Ofk{ZaI#0wA@Ecz!-rO9SFdNN1SZ!NOFao;cQco)qgQ!$ zgr12En9-Fa(%riZ|=w%UdtT+TjK-^x}WdOAD%_@b@a2YXz^3D$wbu?Y09 zj^y88Ym?nB=EZ#pXM-js%cW;jFXbNWl4 z(_i|Wvh+DBeeVJU?2WKhg@F?O_!&^Mq^PE=QjHz?3o4O2PVikRz|)pd3Oj>HASwt8 zfCH_Rn<0Cd9I&*KEi4sLqOkEP5JPAgmm2YFK^jd^2umv|u}y217U2UvRat6Gx2A4y zNS*qfUM2=83)>4+{1s!0+`r$SYNa``mC0rDyJaZWEpBV8dgM*BxCgmzKjL-_a9mk= z+lqCg$kfMr_T{8hza}{XxPSWjSF`4EF~uWORw9e`E3R>}bvVU?E4?YD5Wl z)-n_&K0J6$GDN>T4(jq!@<<6& z>2O=86z88(^w8@4x7eEzlF8^6NoN+fB$Z@BU3Ip#sKkV1H=B9pACB8>Wuf$Ivbp?@ znHF9^RSGWb6)CYt9<^BsddM~3`X~uk$NITku2w2g!?=Cs8#7CC=r_$sYv!bJfC75K zQ`>cl&QX{q>A0{10k?E5V*(l^Vq_sD4N)Sf>W9dP+7wqM8vcXv;+o9mC|k_Eo=D_b zWtrGX)S-sX$iB4D%`x^DNa#@FH)VqlRi5N55t$GDNtpYQYSFs1<>eE&OLSEfzV84d}bq=nGe%a+9$vw5m zG=mT&`F{8NV!J0trk6pZK}7ACWSQ;lY^O&qj~ZaqZ_yMhvu39f0|mX!JJDh8`{QLr zP^?kufyp*LxI|~XT#B`?EaTw;cArrtGKTqRx8rW#DYxTaAP_qu(h`G^L4h*0|Ap4f zLD9#yNcKxMPg<+!Oj>O>E}gt&b{jHePqbB``^My|ttRgC4lDH#UFzW=C3&vBbiaH# z4fX?|vAxK)YUHQE4GD*@&`+(513^5%O&9+_u{IcJM`7wXg=7Kg(?8}KT2hyh9P-1J zUIoNUwn7^+y$p805%ZzWeFYm~F)769#{~kA((=inD&&=?Doa&S=ksf%tQh}b{!mQO z#13I>(wLr!;uxug8q_s07eq~$?F%D5^`3J|Azj!H0=Gr?9A__PbihNlgb^MRTd(y! zy`YkW(#c3?PU($veQMV@S&O zP)s<rNjSz+$zWR9{LXsk-ldgRg8P2o71xYB%jum-}oZdFkKDF&IV>57ea! z0<9ncFk2*+WwoLkZ2_AaP8A{|G(=0?5Ok7VbHG8+APl1y%<&JkS$8_~xqnahI;xBz z_9-*`zMwR@vIRV7O-NhC0D!6+&{|xJJS!MsCK*3|$&&26L}a8<_+eCl3w|u8mJ07t8GlevkqU>EGw5o4O!shNI zXtt|?Un~uL-@pMX*xfgP>su;Z^e&_x{HUP!(LNWwv;Ap@)X>Xd&=8|=6u=w<7)=8 zCl=ad_!C5j>lpNu*Pb^A^v&7Ua&5FtsB!2QJCZD!xBE+ZGs_wEK z60AI_YUdkcqq^64Hfj!4V01d-l>HnTDLGd~jEq6sdJN?69+Bv)6Z`y<@!4;)4qQkQ_{X!JUg03unfk85?2HHK2M1Ddu^n6$88*#@HPU zC<^RXl6|KGgf)$hC$fy6%nqCYAMW~5_Ar4d{xFuIeGTLgP@#1_K&7yKz*)D;Xw(l1 zX?1=14k_!Qiv22RwgoAkNM;$7jN+7=DA6SB1Lf$9^%f{sxT#x8qqI^LcZ|&vAuQbo zzCDz0Wt(ah1PgNA3{#q;l6xUGLriF!I&Gy;WA$esyM-7+Jh7{3m;A5+07y7=qvrnb zv#4j7H2~p+K6301+`NlaTrMtZF$ltVc2|Lp10KjO_jGBlj$j4sE%s6280&|iX_dhm$np(Kna$Bp3^k@a*3YC+arFj2@cA(C4N>H;?K@s5}9j*iep=& z(nf%s>@lqy0KRCW5Mkz5=^&~ADUIfmGNr>SBE^ykb*T46`U+`TuZm#+BR|s)Y@LF9 zB%kv;u||aTDh150AF)E4%SjZ{j!(5M?n&i{Ir^M+S8sPqr&~uc zVqd%Vu3j2;M@!UHg2b-UPxiL=~0kV)5_#X~ZK)hN+LAVRMtGGguq}Z+TU;@S5et z6xJG%#pkuKVo(~Cp(}h0x{IMR>=PDW5Nkl|lEzBa=fdX-`zxt4pp9>px=3yG-oS!{ zH$MkV%VfY9U@eL{Q%rGAOP>))^86YU9B|O1m1ta9vEGYGIaE(hj5d@73@bI&R`Cre zJ46+mKcwi1@W^JlHb;+*ZsG*Cv1$MOy(0)AB)GflU34s&&|i-)&yGnPV=nW|Gh-CT z5hnh>Uq)dBp}Y1bE+odlxJg`)LDIbB#0>*Tv>POagJfq43;8b@55mA3Wo{ghb7x=Q zI3SZ7P=oSPQTh|rg&6N!H6)|3D1)F*(3z@itR(>nc=(5_P@#?_oe%E@aPy=eH5Z<>90p>IVLL|rGcAt|BIF%pP4fmx|i@9>42WrxN$ zD~T4$;~8MrbQp-Nf=1rTT2>{BkjaW^0|RO@SC!`;$(p3EszM5y2dCd~j+Puc@XSy_ zaO&O6DEoX|Utnu#b0bXkI9O43oQdoxYAn4>32V;0q7V2M(){Yzl>;Q+S`vdF7qf!u zhr40BDH>$dVy4oeUn>jAsuG`I0FCwaGr>I)X#cZ_~RrpP23m+MihrEU-O+ zIw+)R4G?gTbiR!ydv1ufm*W_--Jlti z*O>ae5B0VSRV4JW3x$5h!kWrPc3l#AUO3eM1i!K8AN9Qwd`+` zUN|oJ1D<}XlUq(y;8Tpkr-9EgeMEH$td4jUtCz%zB|zB2iK7~v6}_RxBT^tCh+N|J5nGghddCKbnqGr96Ex12xvB=?%9=1gZS zPLg8a_`eI}>`5XOv7IDlyuz|t=@fF87JB!pG}jEg-}27~)>Df$IHl9TX10fkeOeZy ze+o%382Q?1Cb2_&Aqm0ULAd9&VC?L`PlJ-EEdiBkCW=I!#7X=-#P3Rk zS;E#)Nb=*kG*c@sefkkZSbml9<*}iSNglZyNN{<0hzrco@9>M5)PF_(TF+&LxnGDf z^TP0sq>C``O^#+it#-E-0{OV<#Imd%aiX6uwqQlUoq{P)hz! zLr7;`gd6k zMfX=k_l84VC`UNZUGuMqWi%CHktZ}GGeMAY?15^JD5o4KO9AqUq3TP8*0uNqeJ_*i zSlRokz-q;eqn_M7`5hVh=Cb_U`Yk88qG+F)*{asEHlr3}GN8*9V<<-AV#y)Q!i)XU zrJEJpmNnu_mSfi}!@@pAzE8i%fDu}Jd_PeI4b2T2+7%V{8#_Dl2Ne^RF=4YA%V9`; zk>`&pXP@qr9apamtiruKIga+b>!&Fm`lCZCXWjO5EE1%)-Q8Anml7W3LqX8+1x8A& zXE+I*e>>wcP63vXTcRK9mk7qc^nK-%W0@a>edu+;(kNIyB2+#*YgvU=F^{q-DQDIp zzYTcHOjFp`CZsR~um==#R7VkfK2lQ2{JmR;5q_V3vJFpUtX^+%I{C{J>`!LcU|z0J5+X>^`YZ=vz96H|IY5WXdE^ zMHH@{9qpIlr2uwCw09TEjs1XOdQ?$x{z`58Vyf>VemC1q_MefX|6L(E9V zi{(SZ82W0m3o!=a4!_ul(;LdYnadu;O@W0H~%LMb-nhkLBWvaw*{ zz6b@&;HB6k#E?k{dgQf!V?8VTzD(>}TEB>xc1?jxzA>SB4c+3QmO$87$K$bWVNjo= zBSj6aw-qhmN>-ab139}w3DH`3#tW_gW*`zWG7>z#?KPT(M>nz}f+=ei02fptM3j7s zQFgl}nk@)^dol}N=1HwsvI5SRqR~hJv8GeGqg(B|$Q@c0u#}-qVPeT9$q<6TlgQfx z(HeBj3)a903YVQ6N#8RqVG5rSq7n5hahuMhgao%7QR7c9HrP%{+>tO5sW=>CNxj1v zhm*)&R8FXm(=Ay310$sROF$qRWmPT#JlRy~A>4DH&$LmA3jTr31p{~P%{{1j)qYT( z4PrMtn(8NiZ0F0Amh*kPZIf<**`RfsR{9l9QVkw3M`ij3{fyK$dP6^pXi#W~732DR zCv;&Itmyib#354#;sBy#e+_rekL(zmsb(u+sG7_;-WlQ5&a3M-%jN#^7B1lx6}Xklm5|l9fkFNUDUz2YQCvZOnAkm`Aj%`{UuDTRGcgUc7^~0} zjXI_W+BWo2f)u1Mn1Dp|(P`NUM&ejc4BEtKERx5g^3u&Xim&9hp~!+;N=Az>7Bo?m zy*{)D0Y_^nOaS{MIs@ITAsAtdIE@`k^E2s>ktXnroyCI^!jP?JkHiZTz35%uqD=6d zO8VS$qtU0@2L-O;Py?J7tMn-IV2S-uGygQpEtaXYBHTxq89J>8w-(m-wkBRCW(!*| zLXoK>SImYB_vng`F|kVDQSe9j;~Uaro8qR2phPxDucUV#5gFz*VwA6A42i^wq!yy8 z$5xvA<XXp10W1H5=$pVJ zS0g}UxjmK7BS4Cp2;_`gl#gea5JGDaK{(5>G4fk{m4G@G5SQVH7?M$sr)6KO92A66 zb<4;d=VuUoGRDkfC7I~|t5=cE!LmsJSMlem!kb$E#JhqY-r5|l90E;EE9NNAKt?f> z8qg|rNa|=tu9d2KSU?ZSE`hkYVymJR(Qz`RAY+DDG@)hSCum_rxev~P9bh6`Z@B?j zvnkl?DIYX2@BHp<2UIEbu8Mp;m9fwYy6$!pux2i|y^kB)N0@(^pYzW2ZcRyJapX*@+L? zt%Nkpd*30`G(0)`W%KG(v3;jDBKN&pw3R{s)9ufOV>l~z)r`CLjvf2cb-Q$A=kD;` zzTKU+fKb-6ch&rSyEbU8I z^nD&pbgrkEVhQnlo7kd0;_uXTpS|e5=8ij8%};&wqW|%%yJxGOz-``IjjFh8Eyw~YYr_+MfBirq;+~!5UeaMV|F=WPvL1y>!9x@q@kXh{^v$_D8 z@gb0j816@=D%ikPYpj0UseT`{KxQBo7(u&|Mx}Tf5~@FneTwQ5;bdr`bvWzEbYd2s`SPpEQkS>t`}E zAl|L7me;gqW<9K9_h+)ysCrs?x5jURgc$0SIfqCYV7SPcMZ49Xm`5>X2LZCjC zr0iSWSVR(qi%ry2Ua6Nw#Og=?1QDq5zuG+3{8L)Sz$Qy_to^!V(&CgMG^kO}UbNaS z_UwP>>h*Rtv6{qTIpc$;g*U9`0#7QAbY;8F-XhB)xgPSTf3H@o&|t2^2upz2;TLem zoFtja?j01zpIr?k0ue=^Z$}B89${fQ1{?~dMHW)u8D?2oS#~$mMlAeF-6gZL@2x11 zuFE~w*<};d@7|xXBT-p=ORrt)cef+^`reR~bOv2yAkT!)i^kM77e?D(`p}7+=X+N? zef^If|I9Jx{dtV2Ew4O4>~lJ@KUJUpBcGS8CuN_dXr`vV`Tsng{pD*;mFSMhfk zbQf;!+dV&JGXAw+L&(p~Pd)Rl_Yd2cc6`VkNXLor{JyX-utm(SdEJ( zzV`wG-%dGuG^I~x_ox0-1QT&GqG%i1>>|GBM)E9fE9G;=>s%5xcy-f_wf68_J1+sV ziX^N$YI6($+&>;csJ$eVYD{!k7^&Q;)QxCAt#~76n9g>{7f{{1+eggL@p8C0Vvfpy zo03C{2pw4pbpyEo4G6#g>!+QueDmkgvcLVn=dL*8(l1K2#_m}ke&dEO>+-DUy!Vx_ zH3UrU|BK&!;IH2PfS#tmsz2Z6veO>!2mO3I*Nm*%8tx*pv8PiknVS>Z`pZuJTl`SeMPJVY7H+|>79@Wjdkzl z>0BEGluRA%>0B>t@DDDvHy!#B*`Ix@I_;o(cS7A`IzUH|(1zMF@BeC4yjDAamzXk{ z$FZ`*dJZX<5M759Y*{UGohzDb9ptXTM>lsR$-gq1-I7#Fi{D%LkVuKSpvWWy6Lk_C z?N6tr8p0r=XlmJtsn!+{FI3(dHQV_5U{Z ztIzq+`(CP#pyB+E5i#~$sQss_uoBe3t7*Bcp$ldp85+f^!(ac@s3DYi_Q-r$@vWT> z2tYFQbOz$L#D%_NecPyPFMS09Dhp&1oxx7+T;Jh8s|GxqFWme6wW5+=d+*!+=kj-bP*n2TsqMqBz2kFwdhzdmHy!z3U$v)Q+UZvGuJ^y- zV|U;32`YMh{GRc1YmcbhJ(s=ynuni{Av-^H=8DUXe(uTX9xjcP*oL`tefE16DY|X) z1mO?%VSo5K%CiS1sUm}}{_AuYZzsP@7Dnu@YFJ4gmo@J8z3H~F+sa?x$v-{97aVvw z(&eX4c1NPUWW24pNmP_d(3DgprVXkz-DxabQW1SCu~{~B{z*L)Mb=%TA$UU784Xz# z6Vd~-KNR(Zp5}LfxC0Q3>C}&7;sB%A(G`j^*}I8~KJmz{CYieZpt7o}F)a6}M>;l? zc?`no5eIsv1Eul>-<9Qcw!0LNUL@!^y`F>f{a_zk)ydk?4&J3E*vwD+zl@kZLK2@M z0Go^G>Q*oCRuzV%6339Mh|h?r{OIAj^olPg zc$IW$MSC}VbJ?h-R4_b|Ac9}EjU9~DS5Y7|sIHo#E9s9O&F<-#P1&QjBKiKl9m{TXlKY zcdsI1@i{J)BBZbV->Jp_(Ej$xyDq02-yPa`?3wTU@G45b@|62JZyoxWF3&4oe)kto zyIGg}w?^+jcI{_$IbTn`%VswgNVXkChz)$BKb)>{m0mFRYxj+5+{Ta z&EfSfxK-XKm_B4}NS4-h@Ip;wt;>|}(+$U^on1Awo0l=oiQeTNzAFn;KSL`xMDrC& zv|Cs^60y;z+U+BiH5F}uxE_JZV6i*>sA!orb!il9Q>|o2uT9K>APnbj?FgNHw`CXi z2&}&Adv?{#s>wVSFP88jWD$f9{Q{y%SF@$=Y13?}`zBID=9R2mexmu3_>nks*LP$= zm45s_dnC&M=^G5PkN(mr*rK}4^EZ2 zBAt`A(%-4em)v_~Cw>B>_Z_di1M~KEyW!WD8^8WJ{AyYaF__xb)K^d1e*0rj+;AHb z;$xq@?b?5Bol5CluexUT6`S9WwM=;iKTp6b`)EF9e7RuizALkRv^l){<;dN{Y62}~ zV{UHREqgoD_V_aL>j^i#?OZZH*bIjhmkn<3F3y=sA|_i>2(dk~&aaT*v>>ha8Z1Wq z(YSTM-f(+J_o!>Ok9vusl%cRFA_h%m%aeV(YHW*BWoN$(dwqS{el zT#Xa0@{MawLVdUH)mT)H+|Voqol*2Kb1y6wv6{uL)Xx|pAHc(a)^WnefU<-H0$&9! zkOxGMidu`YF$$y0hTDrnCrHppppWxUoqsC1x$Cr_e}}sElqM>v%wS2{i^hmoBjKjlg9paDr;_&I&2wFGxrInm^zycCTU?_@Y^c;; z>K-J)E-99h@1OFU6k`|iGq!=1C+ZL@Nwhh7y;yRg_&&oh44>))xAek{&6Y?-mX0I~ zipX8)!`@YIwN$B)GYN6DSORhw(6mQ1dsepz5f(;qYP+0V#*VKn(b~wEA*i#o1r1I$ zTCwWu%MOH0GEp2syL_H{ajNK=)PUp&Ph-SKIfC{w8$6pdX)HxTb^=N-YzIH&nAh%F z603?TaI^u|v8c*HBL0L2ULkYCz@z9*M0G6Rx2OTi0rIp(CV>zXY!)>zV9Npr!UIfD zGMDe8)tRwFDDF2Y2*pK@3I#9(>LZ_BbV@FxRXhNA`pOk7I%BzwwJQ$Q!X-Wssq1VS zSU^}*CpiBv64`cp56Pt^_5L686FK4p4Q;y#EI;(pG8oAyH?()Ydn?w0AA@zN3rFJ; z&W$Sz_Hjwz&_%6GGzpmtsr_|`m%1jK#}UJVDYdMzW)rZi_W}{d`{C0PEjM$xyao>2 zVFZ-TpDHUY(Qs;lD}!N8XVGL|crJ!dAD1{Kh};K8^^Lu()rKt71t1mzdC}$^-#vHA z6ifR>R8e0;)8csW%d|04vf(;0xbq!W|KNf%cneQWBQ4djzKP+YVoMgIih$0rwNwCG zz{o-M*udMiFo7kCh#I7Y9Vwi5+M}vHB|OL$?Q@*~iZgwG5d793k&x!U|4-^n4ycpP zEe^vpnM|)bcH$@nO(;)GD0^UFmc^iB$jlUz-HqeY8}ukH7IO+DKRi{Ed>=jn{%Hrc z6xcXhC^TsBum(MjF>s3N4qgw90|0!IgR2Q-BqH*J@(Wc}(9aHaOPIjN>e3meCl1*Y zROEql(AO_JVq5pZQQ!EvHvsUd;2pcZi7m_ntf}g;QLw67=}M)*`+<#mzFO?98rO<<8Kp|bBw0(ntc=9EKzc?!fyCKg{}CLh#vb5E~=y@za? zr>a0}n|*!(NLHtt6MbJEvgy6P>CJpeAh+f|{YO9W0I0cJpZxps@~MyCJ4+G@61pEO zE4OU=`iS-I^H*N6^L@jQ9niP#Q}vC-#XYdtm)5sX=77F+pX$qt{itg0$vYoXFXDy0 z&^V9mgV4SMdf}17Q`NyB0Wf z*H_*$d-|(u$y_PARjeW=kIa+2O|998KREwCrw-985_qm1LDnW{$F%n)ajX#1nRbg& zfL2PazfoLp3c*x*Pcs*spT6L-Bd`B8S^WcZh1~B@mnJ~^D)|*nP7e4!$7mZHrTpNdE&+BACUA~ji9Q_2B8g}qnEz|^dO3CRGavhnZ$ImAaP7YKraN%*o-fz#LyzZ+7cahKRY&$a_0G45 zToM={%0o}*r`G!DG(`z!;jUAp>rvx5Q>@CYTM^HJ*-(}VtvOcK`uJhkCO<)3%Zcxg zfTS?|2N%rm`bh!Obu6sQE;U`C=3g2Sszm}2zr{VsuBHU}OJ5dHb>=QWc0uBLnoGs_S(33q|fWy?gzj4%( zw-z7R)5#xXh9R;)yvhDFj@jgrabB%CH=m|*-97LA(JI1Bp_rl&C2ihtD)A-8kbjH( zZ;;p>ulSh5Ovyqnn*ca6P{`3dtPbVL(Z~p5LQs*V!p-)35ND=#( zY&4#KePljc;?vDY&88Jdw_tnvhQ%^Mx1v11e`LXf^Y!4dqzvXNX=PJFz7ie!#)wU6 zgkD9LzmzA;4Th>_C%A=av^YyT5=7EfTdLKC0T7hH2=|xU7YS)4Wp5atf_7eN%wF`$ zUe?*ZEvh}~kHLZ<09-K+ChhMZi2m{OfX$4!*}G~`;k?^!zwNlwCNFG`_|H}T1%aN+ z!xghIhIvJ$K)<^se0r1p!gIjR-4Gsj%7-;Nx|5Vpw~tvKD1P5vnB^Tf7z{lxeVn_> z>k{ARUwuxPrP`9tTcsCM;57Uyw zqAen^Zi#)XHu)0Fprwqd3wAVK{>{?a&zacUTi!&p-YupWfFw>d*Xes&R0$oGEryi6 zF23G0ZV7JTo~pB>yCfHtc(juUI3J;r4MrG_`Lxkuc7N3qnavkiO56l8!$|Emve){; zw26D-zW2P#&mH9dbht3`>qs49Eu&^9Bm1*&w=tlfalUjy6Y1S??KRLP?#>7Ae}>2^ zfeiPtyFar(g&0){=|T>ByPGnGa1)#?`E7ScsgYZHZ*S{=yQ*U{aw?>bbgdR8ntX_; z4IXMc?$$f6Pff7-s^>)$1#>EMXlnisd?aD}kOIJPk0v~N!(h&|GH;*gGyYDkxU+fQ z%}-x;`~1{PUiHYOpa0T*3J2c&z(=k<@^8naY<~Z>&!BhSKpb)E$5K0s=kzqPKazR1 zaNWS~DJsmRSAwL8mQBzyPpKm)LX?TfgJ7E~H~< zXYX!PY2ofZGtc6_0d~qyqCF;1#m2PTrAR+3%`_{?C?{OH8-OP6B{EikYx!v@%gZLE zKv1)koNcTg4^N?OM!{rH{Q_STO4yB_)eTXiH7avfYp1H8qSEae^=EVn#f=D$Lj1f+ zFRu~A zf-Un9C0s*%tc4LewSS{}NLLge$=P^{FW#8{8^8Q#*^le9?P)PLB3y_t2!hUjB0TjMJS|w#6K9YGrQ4KGX+oS61O2`bO_4b}T!sU{g^Kc-i?YdNmuOI9nHMV6$pEr}53&O;;HC2gegC3$v&F}HBV%;mNB&0_2v9Ho6C@t{0 zR3)2j6jh5CCF0`R#j5hvzzWmSAD7)XPRTwRKssmySQ=FeGgp~Q`$fMtw-3h;!?+I+ zG-}m$?YhcqJWNXaV0L!PR-_i%L(#3xbR!smjf)GG@}F?&wkmSN0JuGCC);)h0eb8MHQqiR@p>EvoSiNFlZV3-_?Lt?pYp8_S6iuy zFZ7de+wiyF;x=RdkfbDER**^Bvq}WIekm;_`MXE6pC${pGYU&as(3L-V=WR#z9P$D z4hGH0{8C0ltQI!{1dMg9|Drl=oq)d3U*AOVvdxi}m|9I{X`6gZ2hxZr^PDxX8B>sS zv0_Ob;DN9u+CWRUg<8v8);nTYtkiZ$6Rl>dv>Ru(n{09in27-rFCJ(1PfPA3UZEJr z`X?TeAE)AY&YE4JZoFg+UmHKK>WXmp^+R(IiXdzW+(yCUZ4FRCySB=W=6JZ0Mpy-C zrjz7iPYUR5R({0+v*VG=Hj*$>g z-%Y|DZ!CgbWj{-8F1pMWewCOXk#vnfE2s_vRZ$p z5EZej%8s>b+MLbaAFus4q@DGyHqDT2!Tw5W(SxNSekZXXMhOaC$4VF7R z5YaXNB0DQ_e+3bTT+Uz;BzY5s-G*3CABw?ioc{25Gc&9j(^YsRxtN*E3Co$dXNP}&?!0a458NIn@k z;N*1O_bK-U3L7$B$a~<6Pi;eA1`?Ri)VZoTUjMOnQ^5xY$`2&t#y7ZQF3diLFKd|u z!kv16keW93I9;PVS9~X-V?4qN$<;b41n~%Cz#PmhNNN?ewX8YLe*$SDqu78Ya1YaC zdJXRj1@w$_A$7`II+4Ji`QszTr&bw_6xbq0?|f4M3g^ijk!)3CI)~asR5kl00awz| zT?7JE$bI*H8qsW#KRJ?Zjlq@YF3>Vttg+ITJS4s_TqpSuRwJ5^)$!3pi>qs$QO(6GkOaJjOgj> z=^1y2z_ie3J0u@~J~OTSC&!B$5x27OAq<)`tirySUY{$`m`vEhT)&<($)6cvFxrn# z)C}25&Iz^_`>{%RBqPu-D`G{n%A5^&wGf8Mn-mx^hp83i(?HJ+7__(%s{jIcL3dv6Sd0Hc~M;gZhM8q(oEJ{UVRU&U}I<=W_$w{ct4;)T9Dk zl6i;ZIxoAdUx&02zTjHsoXfdj5qvmj0ds8vp!mZf;Z#<(4k2y5oTW>Wt@<%Mj!Gh= zk_e0m;#9fgy*%c9MPpCw3sC(Ta$|`R!Szx0&IMvAl30SYv?`kQ(Yb8v4_?6{WHb_! z^Eg(L?2@fv$1yF;)e}gXa$;tH>I<(EqpNdq&ORh`l>+uiWG|VMUD|^Kn26jd`EIHL zUe1upv$%)=#yZgFJ7Us86C*Mj+I}&eI;jYb^t?b`AAldk+U%QY>m3T0+{EwR*NTG-Y)TK$8{N-SUZrOv;s z(z@ub7xDP+Ex2@Hr2FsHj%!5 zB=#0ig1N5=V*N#orJU`eLsO_(_1calTJVc1uplrR$bUguvYzaNAsR3v!M1d;()RIc z`c_%%O#oHqE_v6s#<{A}&2lAKOT8Dg(`i;{xmn(FjGX-_riF1V8-yy`9&t?)r`o#`+gjUBR9xYMry?`@E29w|s!5(@`O)%gP_xv-j|D|h`V?gEaK3}e z5(|_DJ3cn@RznnSW3vN&ig06g2pIMOSWId8NA$Ie=C8zN+CR(K>hj3`EN&rjN6Z3K#WkRf+~S1KKT@J>WN2$)80^pXIkfqkz@yPK9YNrHLSN-LCkMCZ zf9ltt)toaBAyl1PGmZf#E?E@unZC%cmTi{(PM;Hw7%_aGn5eGoNNu|c`-YhLXr5-8-Aue*Ax!-ZoAXtn@S~L+4ENJ+YKz51 zRirrVzv8iVg+0Dj)M4eI`;(V=htcD5PPZPvZHq6)e=`0XI0#X^Rr(L$u`(2 zfX74~TI_3GG%hxy_^-X1(G+q~_lc9U+g{+V@8o|xD(e-fhHZXok_qUG9n^DMqYk|m50ltEAVmhc$ zF}rOEVw3-gA;E95#WjZj3yO$D5n(OmtU~gs`QNQlJrr^F{BHfAmX_(vpxge5x{U-k z8@PBkJI<~v{TKG-&7(*+B z@D$vYf82EY=AI`gJcax+9=nQXv$KUkhRg4LOfi4%vK{5{x}p_mve(w4WJ1a+$7mN- z;odPWCOAzd$jeL2sWmUJQ2330qVK#rakfSN5gFd&LJZMg^UVMO0tu9RCyoQ0Lba%% zbVamC62BYaFb!2_p!u%RY?BdCg7mie3cOf<>=fEDzk!*GW$FNb(iz1S)qCqt?C!Vn z^vGS~za*H{{|Hp8n<4|DLz5Ur3UU4szstj4j%G8~c>YmTsNUs&F?tkD{O22y=n%Q7 z4NbM&GzxZ**KlzDF=o-?>=@9gp_aq7eDwVY8$Yv@Eer2KBPdrvp%ZIq(BH-R`{?6u z^29p)?;}2rf&2u79wcs{4=B+AK#{3q6}ka{A_q_PxB)t>V9se>20|H&|HOO{j*t7u zGIL@#{7(f*#R2l^N)BW*GB|8JJF~x*z_Lamyad6LP9W#3@%$L*DxuvO@v4J#=AXcZ|eS_LkYO7riIN+5e-pV}nSbv^qT;NmtQhGZ>IM%huo6?hW$;E|c( zBBXeRNuVE;ax?(eOG6@%z%7NXQ!Z9Sih-!t_R)H6L=Br!S&ChV>E3k_+UfMc{sHp; zKzD+!U(imbi{uc#gcwd(Q)~rlCC(@Zgk1s_xE+Xq%-eZ)WBsfHs7fcHw~1}y>$j{^ zFU4!V<9^vw6w(-k-rm4;l@iH}sDT(LN>FcOg?>Pxs)=pPbcp)YxUiT`_ri*>0@D^? z%IH%Q7P5-1GWkJ#2mE~wOa=3!@Y5951A{W^*`*uZ(KBo_CaFW;i)4c)VSI-Ked|VI zjl&FO|Ha_u{q(Bf^CHovqv`>T!U#4hUr9SKf^{Ycqv`C~rKxi_n;U6ENKLMo z>0%^HKL|=@r%Hf-@t=XVAn2}+@%D6O1q1K0clitB*{{{uh1SOIKKb{o8#AX!;tn3X zb2K|YLA3k98psn2>^Fsj!--2ANBTpf%yeNWehFV5!WY1@fk|xA^gO zhh*sIVDDstZ=ez3qC!a9&LK^l44Z!J2dWSfph~L6s+6!HYO919eLkI?2y_^bB8Hym z3^6nhcFj_1rhG#1-wD!DBLUdXWItBbZ-+<{&cU?=M1hvb=sK)j_(`+3&|5AI2&^ zvCyYsAl+_9QW*%#v53EQEwHYLyln?P-fNbQ9{3j_Kapj%;e~Bz&lk2UDBtE^v=?0b zEm{~J&MxjAcM&)~1X(-|MI)RjhM>ZJ7Gw?2cE*@a)ABMQ29&YHj)+tt8hr~gJ>Z#{ zCKu?L6dOR5Xag~XhXgTeaj)&g2zbOyj&U`ab*iV5OaO2jn<{tt27|s^#&K$iKj+N) zq!;upvKInRw|{i3hkm+fwJOpNZ>T8=;Kl}w6zi2NT||RaV=_(uD&yIQ7W9t^2jW z(DVHi_FNkJ`Mug;@I<{o+V?;F)6pq3h`FZtG$&RyFL8QHUw_}*TCsnYD=r` zM9jpTAb#T709x>4;hD6dmJ-^8wNoh(o*8nX0AHJEM@ zEVtL-w?eCOa&)gIGAICb3!t@DoKDpo%+5Q#Z}fG6UHg3(2I+#$m$WnA1?vgv7Es8- zF0iUpT~L;QHk-BAMrVq8&;|Ze6Y2t!Xz+)+z>*IpA2sNhb%f+IP_h6I>&_%Z)*fKD zfr4eh<845+u05FFij!C1;1~4$0xjufW4X2Cs(rwj|Hi(nOtG>;*RA4YA&2rpnrY=m zVi7d_XK9lvO8|JMB^xA#6ks0|>5LZwm>1UO%@tg{$2bzSpy*eA5Dddmtu7PU?Z!jp=Cn4)6HdL*d;P6&lI zWGqD4&PrCseH8oYUWX{qfH#5|NaBvw_EVCg?dnhr&?{75hN31RGH&(MbZ~V~e&47h zX9Xdkd2kJ^M*N}bnVt&SsS9VlY8xa(F#%x9B&fO-tH(uMLV3u)8Sv`^T%N$cfj_ePP?q@sS}1qlwugVX>NRa`B44hK!;QOoE^HcdiE`T5;z#-LoJ%>^X_YQ-6iMT$ zTl}>Q^v2X%!hSOI@E}xGkd}^3?*C3*@ai`{aPNgbA}Ret??17#ee;;o&*R_z;ScYh zdYLYlr?2~5`|WSn<%$2Rw(ZB~d_b4K_ly$M?^xBLx?Wvh{k`2A&VT-sETMXA=e}QA zbjyf}zAb;xQ9pUkN?k75y7!rT9{3GiUa{@G$G-iXcj@vO_lfaO&HV+Joq3#0{p++V z9TcVQp>OQHVVZd}hGebH(`1bA+0igMbNYV=$8XB4@69IeF4F7yB<^iR1tS(|?-te1 zK7_zAoe!Qex#HHkaGo;FZU!CtR*Q5b13=ZnwGZV2EjSAV9wH|2cLV}OPkR3|V**eS zfdR_JGr2zM^XLD8elUlw=FNZi#CFru5A9o}d{}?W*7G~|M7_z>Xtp<1$*>5EbXPv_ zTNQ>IO^Ap(xc}V;0M$oOe69Qb_ydnxBcYt&*;lr|DC2LCJlcD|XI|^Jv<=mQFBq71 zrUH@?Tgg-*(myL5ecb$(0!OO^YVXz<`&-Q12Nfm%60{i()3WenTy`(*O7iDzeZM1K znC2-ljxSpUh33ovG+XY-aiC@qnBpvmlKD;KiOaj)+fKoT(R8K`$VJ(^N9*S*s79hC zE{em}De7icASsaOH7R-J<62KrMsmM0$t^=%xlkbwvZAn{4~gerAI+BHT_GswyjRZA zw1zRBy~`+Xvm`@W<~3uYk{B&~n>*5tfkn}q*kdEAb|36}88n?g2n|`bhnrZ3En*== z_(QzJzLL7_#(VyN9N$uY?OUbQppsIzC%p`p`*8JuUV(~#aq@+j(R5g@$y}BWYG7s0 zavr{z(?>KCUfzRoQ+1@x`+_hl%d18e_~fh&I$CIoi5ZmN(k>k#Z;MAOHL!^9{F(uN zda0(QwAmy*M(Oe5Cxyh3?9BUM`B=`AlGJ}j>&hvtGan~hSu+BAh<=l1ps4LiDj?DH zcz;LR1l2)vo}%cqp`7&@Wm@eGJFY|HqMvb#n`gB{UlyW5k}z6j4D z&Iva30KCMZm1bFY&s)c-%60eLbsVT%cgxqc#*zvDH=RIl$LRzk9X9%}UvP$;pJG`1 z*f5#!()Lg*E=wm9#Sq3qJM#&6+_G^B_C{tT#1XzgGIP%+P+wq5P-`Y*;@P6IjJNPr zh|%yoL9Mba%(`~7rJV?#t=NS0B$LU~MQkbE>ry*ALx)od&M5Xc|E5CeoaWS&JriS( zFQzL^Hg}TE(O_N$t|k!_>q`9Hbg4?koIKrVEmj)>3*)x=Wd))}#m-H4j75F%Fc?NG zqq}Hs;PD@RxuUbZ7!F^`sy%lv|4^&=sa!G75YEasOa3Ndp;JViHk<) zr{;g?U8C%$W+DYgP3~d~E8`V1QeRL`TJ#K&WbDJ#2*c5vB^*RWKNY{QZ@WWV!tfR; z){Ct#;%eAD8m)2DTI8r`Nq_^JEO9=lSdFOoBKCrqB}=|FsM_l~>3Z*In-ZsUUWBLt zTY#FiwZedH9d2&*3xF~y#lm%Wl)xnsHky8vyi7edeD+swu+4)83%>kd%Mk((Auy6- zZt37Qq-GeBCfGB)w?OT9G{0`0H(Yu8w_&J=jR0q=bp+VtR1YR&*$<;VDk5mOCow}; zuN?xZ9;8io^0~M-?!AxH%*6oG-hyqI59S*LxeYfi5^tO~G*m1O6YU<8i_QJjIfFWI zqYfq)Yj9`*&Mp-{Fd}v@Vl5MP6jQeOw`{$TDjCv}c%gO3pSX+4nW1ai{{5XZ?WLH< zhN>CNQwk2cPmZ!9%2>-ESdUuj`@8TCViXUL?jfl7>KRyVR3|W|tC=<@>7R%9N7KWt z%F^&BU)rqYdA_u!`=pvKT{^HdUb?g*n;Af1x)0a$rP)%-n33^!(dwaWkQ24)&r4Uf zM(7vYRA?xD9inqZbGQ-3Nm_YUwe~Edt(C>F;KY$3pefvpmp3<}BnJ`6{?)I=(cqEg zjiw-%l{czkX?bHG9g*R#3}A9M$gAR{C+%F&V3~-lT6M8K!iLu|z|H?@6c3p9qz#Rn zt!M88WCcBNn4^S$E6s#xIF^SkwQY1 z2(;m5bK=kT#dp*XjUSvp}BeK?FarAU*XOOHFZbF5x6KHKeA7R3#}) z@=npJ{`ogY`&y)ZfNDcj3zDH1sF_9F#l<3s!eCNjalraTRmY|59>)lPEF-BderW_! z;QfYhB!Q{{nK1Il{6wfh9VQ6T0GU!%sLQD2Qco0;`Vu9S;z(I(ERqjU${Kw7Mch z4#T8sRUwojM;Itr$I+Q}R#9RQ4QIOqA5y28Z1GB ziC8ovKy6abU%2`ck3>W<%vJ-S=eDs>v6_Mfb!J#6lnV4_DpQvQY~TYQueEw@=gA_@ zZpCVyIMiQiY)%i4L>%JYXi8WPGzYliSof}CmpWyfz(xtzT*+zmI=}DLuf&=NIpnKf zJ^ZVc(P6*(FAHC}`Z{-!cEA=7TW6S#W+xR|#J4Ka#Z^miIk;mdB!_Ln&bRIL`QRo@ zi$>Y6(4J06gO(v+nT^p-G}?-&^Bpz?vs9aCva-F6-Tf+K(-`aX5TCH!zE8}FCesC_ zFN@{5U}a;vg2$J4-;h^DJh8m zx=BG5_wC3F6Pq0MVya-djk+E=(Svm*+fjFw<@?_GnDEio>yw7wMr1kEGOL(_gKY!r;>kTG~2%Hh{HG` z7J3qpx_|wNwAxv8h@PUGIMuw8fTaAf(e@J4j4npC-agto0w13F)W=3!OQabYRnUx! z-5tD@kiKiw?H*MWZ>GI?oDUYC)>5iYv841g*+aVPb#nbm*jqw|H9^?RZN>AYH@z6) zb1z07dpdI8_9mqgEamqm&H=_2unCebhfAT%TsKlB;J%K zAWdG>Z<(_|%5Q)1i*CNZlTZVI<$Hyum!cd;WHiE{Oh$24& zdXB!Mj1(1pXxEkFW98+@prxVP08p()#didtb%uv^Kw=MXxzH9_gYL+6u6dqR>7rtp zdn8)jI+8)~R^K(~f0L1D+zdjJo%{-&MHgXYiTtd)MYgdujLgqAFpbj6&2Sh9@Kt}1 z1ldMx1%Wv&@|j}zT%ad_(}K2JM@99j^(Up8!)q|$bm-n-GBl(e zT@Vp`){IZ{`_GY1JmOR-!3a|=RESm*P>0;MH@fe=MWk~2_&O?@y(iKkaLu>3ht<(m zX6>eg7MkZu)YPFUnpTVS$J8S!Wq6O~Bb$|{*l**!Hf}Co44-B;R-0pASW_1k+DYh2jchJJ|L&-XTXqKKd{t6z1b%tW(5qqJW;VkFFgv z4{+2=OfLWcrc{y+i^Ma99Xzqyb5$o;$a)Chmbt;8=s$y2nZ|}d=mz7Yp3#Ro4+hTi ztNc6%mK?=Eg?YKO%+1eWR58LPBoFDc18y;><>$>ac=XOQi2aOfJJ~_znKm<*!c3n{ zOf_cO!%Qf>gN=K!OM!(1gjgiQg@-CqXqElm+`#!humZtAjy!=XAjkB4ie=CZdy};-Mb2kMw;&3Wj|!W$_yOz(Qh6L2cB8lZM^ zybJ5~q0u(G@y4DJqyy--W&Ms)z$M1Vi~`NPsHiG!Rb|`?cbuv|eOym)DtddYsM6nFB>@pjr8fNTaN z&ztf}4YP%<=By(M(12$R#gynDRCpl+L*RgH#5jE=WOneBu}jgy1QK;4EThi~J7d@V z`Dary7ZvbB4!vB$@GN+|zatFWT8E1c-@3Kqh}lt1^Vi4K7#GTr4{agmj-M!%CNb!UO!;29Hctp{g!HEeTc4jn@vzRfXMh4bRW4r{o12IvZ zuaaI#HWcaUNL}p%qVUI}brSA@!}DU1s76S{jO}rFArl;uE$ZcKF&*|upaZt5_Ai8M z`>u;?MJ5}gNTo2n6)Sz1SpC`oPw=2*m+C$wEoUmW`lw_VZUDIlG+O-6hwsMB$ zpH=!lL*Dg&R$-)kRP}uZmIv;kl4MJGiUp*2gn}G0B;1zlS3NA5#)ugiW5W~Af4Lo1 zwsZ?cZ)ERHXu&Z}nM@QBBO%riA@7q3 zca7~n1q|pFk7u{Af@e1=z_u+U#TMB{j=bSyV0Hu%D^R;5_h*mpB9{;);JXQ4?@8C_ z@}|@dOR;k0S2)nT8rm8bCm9z$Io_dIK*=D)qw<(SQHpt8t`;z%( zQUcFiPZT{Syl}1ct_}f-nA8bv2uB2M1N{Q9)9Yv6)~@vRhF88fa72Usjrw|1dB;qf zY1S}PMn?w4>ee5+5<0?_^7rVEl9H?|YLgjdzAWlcZk+&@jl7k(KeGNYWx-A*PLey_ zxS`D?U}zQgw!Cwt5?L-m))JfBA{oZ49>6{R2PvQ>l(1tfQoZUK@f$AGGT?Aec~oH- zJ{m4K&O)aLY&?P$DqB1Qy157;3$#kQ;T#YH`jUE7!P?E`OfL$bK67=CKd7)fD z`j+;9l}MI@94}oAw#~xlif!8Z(Wr1fPsd2lXNKC1tutw;1!Gu9TEoR?Q(Ob|C2I+I z&*13-5txA?c} zo&zN{Hvac^G_7QPUd0=x-Kp}Fp%OvHvw@Ui2{z-&mZ$;CUj(2j?|37sj^AU}jBn_H zvVqPV{R8N{|@x)B-3ZLJKCHMSZVl?tdmYa@H)FcX`%n|OwZeKtkqaZIfRIP*r9 z&NhZrNZW&?>s^vAaEibf=;&g(1%wQV=|n#o>Cjp#L_jwK zSb%Q359qFWbTj|c<#G#@cR7l2iU%3`@{3GfwmeQwPCKKtvbei+1x@}(KXpdrD!vb^yPQ{|Qmi6uaEjR_gA@??I>nk(Je)BA_mv7aNFJgk*|HE zdVxCd(46NH_sQ~Nw#b-J(3)+gw%W}Z43X+tLj&$6YoQ&}*bV*?%R;taau$$mtX)3@ zn^DV(h%nR4P({p9j!hrkGS_TH;1cw)_@KBbLpwyb6~ zQ-#bV#-h()L50}08bw4oO$F&XIvP!5`fCv}2b~R7%dQG8p{pczD)Tr#3j#>!DrIYG z0`^hh6UT!f<}^lh+a4QHc}%avmVo}mDs+cp+LQei#$q1k^apEfTHT1JnT4QQ^;_zP zWi_<|`WU1+epJJnp{izyB1og*e|X10by&CI00=TtXB)i18zme(MAQW~5iC-fc>S2lg67C?S`VLTmL6 zkvqfoAP$+XAg&trd&SpDOGH6viTI*1IXoPAT7U*c#Z00_|rsdq^58GxT#Bm&Gj_d*~5*tBXBE3e{6YnDT_XRi4?=GfSwucE%% zb)!cjyyk_?+V#k#qzm3GLxLK4Fn56Zkq8tMF@+#lrwZ)Q4K`F!f6*Hiw;9_|oX0^q@BnRkp+$&-i^ ztSr|+(ORhQ7A#3bX{?uBfsh1CTC7-I&T1f#Wx zHneS2yUu>x&$`tKl2J|cr_|Xr`)3Tb>q@6cNxH7+@ zPv{tFP@5<8_>hE-3qlDIx=m*oq0{VvgdWpG7c`9p?}WES?*kM8!`rQwVAER`0I&JVQ1JO%O7YT(F<%<9cJSzz=ldKwqCor6s zqY;2T0+YK)4-O`<3{(?zgl>?B_Z0CTN;t1i1%0-qcYHqsEkntAvp6` z&5D+XYIe1Rglr^%y1RNM%KpB-FfZQco=2vSh*Yx54-$f(97O6L%1vgXBAsqUNokrI z|C^cz%_f;j%^s9JC{Mb)7kqR7QNKT3x;_VeM3V?Xi9=&unN_gf45!pV73PBi0~{n< z0amgt57?@d^}t>W1qB7Uh-*uVfikI9;RYaOWXosE{PsS6t4FH_6UUbdTnnZ0d<;8& z3*_5%xLCZ4;5LV=3PV*}*i!gO_}4UJ>#;So2v7!59Y*j3vut_On zW6uHt1s-23LV%An8 z+Y4g+YD~#FGTmDdU41sqq@OA-LgVS)SLhC6Nlo zYk-RKHW1@A?n7_`GfPqgb4L{Hr3lVzYBJJ@^-!d2@>O|k$Z{#= zqlru&T50heaQ#^vi}TXuSW27bGHVi!m0*!gsZGxX4MqdJ4L~xCC=SPZC<(*%LWWUz zQB*=KiIW5@ry@!w{9lme4F(@S`I&;;z|-UJG~j;C5J%2oed@Iy*#$d3c*@X}izM)2 z)hC%7%LK+Ht9-HCw^J$38sX#*vG|-S;_0bS+V4rb) z01eST05~KK9W2+OSi%Wi*3s0;!IGW`eBgZ19wiQx^odD&KXVLbZGP(jNzYJ9a}mNi z1{rfGK_7cTj|}sI9;liu?FxD=%JG7}YD>(vl%if8i~B`A2=6nU-7=Q0m~jvx@TuPf ze(VK4vY;pMQSv>3AA5nX{zxhwM&PURLK|1x$Wv52Ne#px( z^AQxGv5uk+PN5?H(JKY|2#XPT=6RO=L7Yev*rZpXy>Gx+>?XpJWbX?a63I+c&OMV( zupqx{$Mc`CQ-F*Fbc?<^aN``e$z23eyhg$QpBXPWFv&Lh0klLJsDX{)wdZD$WY^T2 z2P!9ZOA@)tS7ydxKg*M$c`{(pI!c8mO3D)j0pZ-~5UvHhXW3>2>bg`DK~tKvqACX2 zE3~hFG&}Ni1kpiFN$O@SJ=wNC<7PegojL!q+ z_6}imYtM+%JoT1JImf4-@)@$(MsBgXvKsNdr+!NDn&)F}_A}}?x^0_ZFQ01|-8FJX zw0R4L0QRnxM1ehy?Mt3*lXMDd^7%J(F=C8z!FWBQ7M7Q%sF0#=sBDYj(toF zkeY%z$hJ?re2#5T8GLCf^M{B9+0e(-m}QjlEUkHHrk7>h!qOmPfyotEI{48_M>UqV z`@qr%*!F_2>)Q4bZhfX0P!0kVRmv-L2UYo=^=$i|H%_;LT^0nx|7P!9ejCfu1ixF4 zsVYYrc8}qOcXKnUX-SckLewiBnaXHNq7=-aNF_-rGNQUbP~@e=3W{X%k`YpLx-o+; zx7)KZU<2NIb`2XS*ee5uy=cG-!+@9mBMjIJ1BQVC4A1!YednC}ATJ{$vkRWhM5cJ} zJ@3bNzV|stoL3nQ<;%!Nb3Vk|V`Ywbdxsb@rE$~!MZ{o6X%R7)>0-hJ7@_sq%)GMZ z344nWK52723ei-5G&8Sd3g2((S4Notlp9=O1{A)ep-DjEGh0iO0;KfZ#LPT=ngFL3 zV)-CNoWHUXUKX*KXXZa1vXq(snPuh^W9Ry5n0Znqsfh}NA5BftDx8>^cR=&Up(Yt^ z2Noh`-Yy8INK5Fy6KWf3&@^e7Xu-j-X{`-2S)<)F2 z^I98~0`F`Q(@0GZ5bNlcuoffBDlt z^SwVD{PMele~v!uAN^JFpQ(f1eeVz7-M6<&a31TQ{6Fy0e|sOt7iQv5{uB*CL{vFT zSn}xV^Sw_vwjDP?AJLcV`uv~$<#+ziIJ8E%Sb6+hzp3b7{@Z^gRKQ+aasMZOsrULq zdPs3!a(qV-a+RV@!DXBh$O-cl&Z+QPf|U8!zsCXblQU|iBR?ztou`L%^7d!H`@>&< z`qKl?I11~@g|z1n_kaG^%*x*h(fPyQ{2nqxOaEFlE410TGUCzrtN8+j8d2cie2N87 zy`#9TN9lqoh$6LU3KSsx`QLoX%1jsdAOHN9KXLor^oe&K{+Hs)YDNJs#J_^iL1%oh z`8RZs)2V*(x1ia7^3PF`|G#Q%`so3U_YS_$cB4lk<`1er_H;n(uzCmoM0`m2_bYQi z&riNHP4?X8w}1RAwl?}d<+v*Ur^J17zz3g_pMSr+;O@Xr8K6J-zxd9uB|rWB85d8| zrn{`~i!(gwYi>Sx7&@gMyJTR8(|gQTI-4gVKs_y2+HOM>42lIv5se^L|a zN|6SbR{x#%d;cGB)Ct@&wj5vYRTZ9_0sU$5A7ih0^C$m;y?q>~FF*g@@7bs+2Y?w~ z>X(1=FE#F0GE_u+0I`gh_fvG_e~3E?{QaJ&)JS;;jFf4N>z5fRBL2$vh+|S+%&-1K z+7pd?JZ55V{<-m)jjrF8Yb>dn>neSZJ1YN?SNz}9sX>g^{|6>@L4p#bXycPlenG+P zr~G$tq5Ueyd{jWUl@JrA8ul^xV;?H<5^Y>4WJ@3Ea`M3Q2FZ}%%{QYQn2mPD=G|JNMbb>JYx*UuykNd;+fCf!W zX#W09aC7Ots3aJ6M&17KD#|n(2gBn*I}Vt2d#Ug7BpA0RK`Jb~8+K9w-S)KIyc-8m zv6CR24W@^qZXDE}O|M52X`2k8^teAdY>(YXNKg8sq5FJGqZ6OK&Tu+#alOH)^TvI2 zM#EnJ%6)Y&4^!V^FzM@nxCGPNp^PZ=<7*qHlXfTicsp%hYQ*>|eDCGn=fWJ1aD(6S z(62WqLEy`0`1Bq@VgGh|=lw1m4OP!y+WkS$^`|4hJz&@wIX^e^ zFYl&7m`L@!cu}sN_?d8J?&WQ}Gn?JCa+`&{!QfT^ z%bN}PF({xl35M;Pp!Mx+G!1$L18wpcj&5et;MS{@UzGgO#6PLj4*YR@It?a6CT!$) zMmOUD31-7W&UUK`uDpXE08 zc;DQ*_0~W0eShPJc~Sh^AF_PS`z7d0KkNY8FAz=Hgqz85W08wFj@fpg1zg5X-R zrtGI3?)$lS_cs#3;Fkab2k3k6+Jly$sWpjcp0ag|#YFwR&7BA2uC1?v7YKil^FBFjsqcmqaW=InJx)ug^=#f`+hBuF!Vk z{ctu3N0aALmo6Hqliq?Be((nsKAg;#t{e?FqA@qzWcW89xx5;b6Oh@Zm2c(|qFUd8Lw-&eb9qFBh(^2~fyL zg4q>!HomSTN`^^U5R`ed3r$1= z?`mV*kY^V0u%vjn?#l3Oh2Hb_fMVz-%c2jY%FhUi!MiMBK4S41K9+_C^rAc}_9FpXCB0auFI1f(P8gH1sFJ z>U!7w4)je~U$1cu>svQb60hHtpf`mB4yP;@H#|o6^7_qSa${QHv95_%+~8g=TbgBd zscfO3d=kl=NU$(RH?j^KE=ot|CVs7c1gCoN3T}CF<7ccOJEIXPiOLR#{qa~@E3*Iz zbPk+0Y`j}o0@^El@{g@5I+1Qfx9=#E&43T33 z#sLq*2GaxN1dsO1qcZhQn9Wk9#IktpvIn`9lLcSb;}g;N zdNLZ0cvo62Y+-vKT-u$X?V)El310_rE{eoCuwOboaB?MV>|zXrs3iOXbzKcbL{y>y z<#EV6^yX0C}aNg*;e~F$!`Z5G9zL%0S_JAxOsEN3d|J4Ws*5hDUQP!^XJGj-iyz#Kiayf-Y~WZf}Deiy6@ zvH|3UyvWQb+7A;vVLCgj*)UI_2gAB7F9X&b&oGUrO*NOV2pT<7>bBS z*GF$)zoFnsi0=$WfRkMsGtov_{wQ7_GO!xc53lLsCGzoX47%-%Lb%>Del0g^iCN1~ zv(P(oe4CxJ1eKsjBUwixSm+&>RS{%oGcLzAwTGoJ(vd75u?)_1W&Dc_u1QCxc}xYzb07aS`|gV4J%IzJg!*1&MOzp=4lm7k!KM7%Bl7}cc-YyqMz>UZZ;#lw#7 zB80LA-FRX=`l5M}4W&6t@8%XhW&{$<|pIPS}p>Z|JTS>ayH z@3uep*Vm=DCci~lhHKlh`7Zr~QuAf0RP~<~lwEtamCj|+^!qKpQEK|#{mTa*oz*s2 zMd{TCYaq_ISF4vi!`aR1AQ)avuU9*3d?$HLLR{DGeQXm3>4${(1`Qgw>Ij7~OU)W3+WN-$kqgfN7!eGPIXNCN; zt^Bj?wdIKc(I1ewkV-sP?2j9(MS$we&olk_?z@%0T*JBk+C*a0j__e$R!md=_!RVhC!33AAi@XXI5&FH}b^2B%Ya&@AFVVtVwffnl9rR$M8~-Xm8!<&& z>^O`lO`<{b9Hn$P5-Xw%)NeQkY!_)eR6VX?YBC z!f^|@2#0!K&9NH~?!#~mx*fEBaD=A;wt8M<`r14(zrJM<4iPDkDj5Ocy5T@EEF;Fj zhN2+XkoG0h{vHEV=xyk4UVkm$0#qeF`7(@*hBXkk}|GHy3(&?2Phk92Tpr7=5>@R@9|f655xoD7q`^^G37CI$=Q& zoco#|EA}|=iTyapsYTI41QNV?o4b7~*}D20(iCwR;D1KT%Dtkl75%J8=YpL~^bPs~ zS=xfVrub4MqAcXA7l5pJqgMvzWtke)vMEC(qjbDf+$??5Oy-d=)p#e$F=3~rdiiiZ zDYB@j`2tx@fUeOMVTIBL9yc4i25H!C;2dG!oT=2zjA`e5oET(Hb{DgtbMg(-?BbJL zPVQ@IHr7nWd!z6;r0*PYg>b=(yn~A-Qw%*<;;6%S%7jejmE5AcR*4xwO4Vi(0{+a_b-&@{lRU>@ci zR3jP&1X4kDWMAwdIjzEK&frYj=Pq_*jh=G&O2k}+-nD`-|i6=Zdd zV%`;Hur$TyRt6xlwdmT3BUPF0cP|YyKzOQaJyG@AzP&6~qD00~z%5CcTD1x47+Bdc zf_kt+WTy9B7Us;rJvByRF4)1j$k~KHfEq%I(?QN{4biWkHGO-Rk{U!y9XtuDXIQAHOxdqXG2+f zS3`6jPOk++EmTmWMfZt~*L4gA?M;LhQ>8jJe=0C0FP_>}jL#IhM0BJeT&6*jYn(WR z4d2j+xkx+zY7g}V8;E*Fvz>lrvAurbLm<8}2BkezOpZCxuvBe~e{G!^)tMN@jpj1R zbwM+m*el-B0wMp(I-)=mc1%+`cE_PZ8>k2XxWXkq zi&(b7HCk79hEJ97^hqqEF>%9%a3^rkTs{#h68I-0uW3b8rR#$6RMGU&Dv;Syb**X= zWjVW*Y8GNb`KlRRSz1N9sCXF(1&^0koRmecSOz}WxA== zkT((UrAso@z2H|EY_pF#|ssAtu|W`K5BkWeC7Mj>7N z&_p2V1}qpTVTc{`rma;ftumxa@SPAV4Tqcn2)XwNz&uAG_PGA-Mh8ysslS@*t`RDH zor$)DOgoqtVepO7ng|2=b*%g(i}>jXI+gsEUt|U>;oe?tN9-Y?xe&E#B0w~(%4=t5 zf4}wj%0As$z2^g)jz2XGASl%YzN1Fm(@wmbcw#y5Fd0lIUPpc)qVf>~_8q~)9}<-?0mbcEgo>M2kuu-fwOZ`_Y`B@_t^-p@7htj0P% zZQmLsPlF&Cg7=Jz#&`f=1``|UaG+M^om&CWdX@{&uB2ge@}j`bST=Q)(x5CAp4~*5EHL1 zekaDm%sYOg-dvItkAQV`(c;5-8W}X3!?I)@^JL7#(L;nlm-rUjf>d^4pCv@rvl6Sx z8SEpcIZza<3d$x{J{8G595cvz+qk|tz~i{jyTy{iuf?*za#2>%<%yGS(-=%K*3u%p zHLYWn;K$+gx@Guk=d9PJts#;tmIs+Wyb`=915(X!D%AD^iIv|Lt1UJTu!8aBNn{Y& zWGF7<$r?;191TA{OW8KAF7_S6y9TNz zYMjk+DGs}_)2)YNFmuH`dUvc8?-0BHM0^cvfKu=+el&vt4wYVM5C)}hz1+7RKJ|cv zI&>e+#yAj-#@<)6o3ZzB7ET^c4_+qSTUv#`+V&&ggv2>D8=4ize90PI*Qyrfi*I z^TSmuH}-@~JmookH&V*tos6a(yIliAQa2(J3WhH6z< zLNZzE5G3N2LE<6WC_!naRp2;vpp}3G-iyM-a~7o@J8+UI)!|K%dCMRhayxQhIZoZR z0VWeg0QOmNd`~FVJd|PaP6S|K;6w%iB)bVI6`cEZ6LYxZ;hi4>_INhgFpdcYjkl5u zS0bH#B%pYp?qT=XI+;5=uVdB|4haq^E0Ur3M3j;Ui=HF*9hcrHb747r+=Z1RGzuBv z-4^o1W)4vq3aYWBfS#FxkUT`4lbPG5wLU@1(>2;Xb}8XM@iw4ER{lxU0K*|tbgGYD z6Xwf$CVBn$%C&lDI3~9cwDPgFmIsSh&yBEGdy69|jzkeB|H9@*V+2P}G5)1}*`PH8sMEcTfJKP*&($Ei2dojy1sO5d1sWkd zvB^Ldrs_S+x&g=IbFcm(=zhe%43fw=2-Tg}OgO+3?%}9(Ts*HdMG@J?K$G@h5&FgQ z75A33w{ikwWyVLEUd?Ku&g_zDG;4KS!EC9x!fKMfeO}n-V94eRIHvy4YeQ>1`gFr) z3sG4rB2;Z-TfJq_S`NKDHU;pP2X2tZg?R`gAY85txmU7J@%jL=aBK4r^5lU)sCIQ91YY72f_4RKz`XgC{JO{^+k6LYK&B;LFyQ- ziExdUr|t`sm+O8P8bpWN1o9`|*9}I{yAYS}GL1YMH12McP#OZMBsB4A>1GBg^~zA! z3*C{1pm2jXPjCz8A_78{2kMUS#={=qjc>dJs3}769(IGb4`-}#JOsUBw_Cos@!0m! zzwrk8E9NBe^=gIJH=yZtdDM&LM#-Yz1wXJPySlDElIc3Kd?HlBg^yUCEZ(NuPhdHtR~v?d&^X<##Wq~s(k z*H{`OUV~o;4tcIyGnU!E6n!}f4L}1!ksOv0I>!sXuaH&es{}{NM_qo@q01Y;@kVcG zmS}Dyva2s-#j#Le6$T7-CguhG7>;Ciyxa4kKFuBz`@yDWq9EudNkzU)0(}*6M_-!4 z{+Xad*)1cYnP}KFNH-oa{^YgTS%nv|FdC0(mZ35dy3fia#Id>a#>UG2AhYqo#6`K+ z%{Q{27A{+$&D(`}L@XAI3Ta6yJbdH*&cjiC+V?>C@?b^r+wbTvHo%Y%{T=r`Fu|aY z!#K8L5D{7UBQESq8cD>bd{Ii+;a7XA&Y<26kbiCbwRHz-%Xm+Dtc_qAeL%HjXQb}= zf+C22mG`d84-Cq*HJ*jnAOQIlCs2ODv;2a0u4TSp06M%J>qGfA_MZ}Bb|{#4Sw(7- z!8F2N0b<*impD=P(J$IdtiEf{92R=N}K7qOfR`Yd!ClICmK2kk@T=(?@P5N%YOtP$G6 zveu_=W2d$1w?b27cRw=u2sS}FA;B#SZ>&1?6R!s}V56|d@28s^gc*gOJonug3A};Kcs%B%RBrwwa&Ujt*80$9h_S{5X*r(GLX^x&~|HTr7 zvKR$`zTGmm=1pxxc3?y@12xJP0%K+p&8P7dh-E6loywJiW}|%`8PSnoX6$EiA0vSq zc)?DfnqXs}&_#s(@}yon$Mozrk$7jtdb8XtNBa`JwqGscdxv>X{ppS1KcNvM@@@0J{o7d8#Xkl*W=v7|CuFV)w_2lost%kiG0E#LP)AxUeIf)7Gfa zD)`^1M4hvO%J@;dYPGerCFf4(-xTT^Wx3Hz6 zW^GE^o7=PY^je52+z}Ks`Z9et^wtwhqmw1$YZBMZ^TIycH<0@o{GY>6nkv@szz68o zz!Vh6o0K$ltme?q_f>6GL%jm@eSE6N1DHYSj;7KYhkBGL(ty}sK*JntsLPBOzORMH zlC6IusvLN6uP9C?`ZhqJ-??k4vt7#sMG9YOk`1e&iI5{8+$OJ{!r(hLQ2?%8L0X2r zf?HwW1>>`4NL}ez4@u*!O}2=2_Y15sw_}kJjj(b?4rqrcR)g;MWkP>FhC{*VD5nOj zf2m6gWukTG)3wDqF#VRpY>etnIdxh6vhJ_cPHU1lN~uU3B55WV)k~y^e$kf(nVRJF2+2-hcNt#~p&Vn2=?_!dda~m}+kCBzs zSUtq_;u3+3th{9ux1%6=K7pXI%sdhi+3&52$6GP9QN-dEI+nSUEH%^gMXb|mc(f3Z zFui*#lR$JzT~nCgJEsj+-arm;iJ>Mo@Vj<=Og6`173`GELbFPQvC?ffK1sa}17!46n(I8xbNx}E#P0p||Z)Q%+yXCBOF{RF-0cfX@7MJ6u!Vq>G z<%Jr6qVM)$w3qo@6F5I%XWenKUH4MhdFTk7R#!xr9wbmt_t5au;y10c;z_A>SUaya z_cw2Q<{uq}p5Dm38d3{>^mftdb}GsT+B2c z2NUs|bQ2bmBD$!S2x3Sa&}k(|`jnHk^yMoQgJ@bn%>n0?u(4f8(dZ2VIB%U1Jb2iF zCg~w@h!ya;9Jm5Wv@fD}Y)eQ@es0y*9NrjHi>ToFRoVza9k`E6w)UAX1&hnTs|H>r z@J<46YqRroYg3+=`Vp)y|BzOZc7CUH>2OH_UzYqlL&0`)YuK4r|`$ZCR(m&*fjJX2dDqY*LEOH-Hw7#5QvY}B<4)!?0Zkts26%zH4SdDgAw1E)HS zu)gcL4)S78b}(U_?Z69q2E-|z3XbNr_lEBde-Ku6Lqqr2;?u!83!@WAfTFfA`qX9X z?0Y0>CVMZF zaWQ|z3dfOx6UBt$S+_wL1qcyJO51onhC&IRbepI+BH<1vtiSO~Or%goKxCPWxOhxB zokPS3yVEltl}`%8U*P<-&{NllWHBE~WT3e5fs#ZfV$O`-faUB(%wK#)klO{Lh&wVC zdSF7)wFw(4`Gis$>4Yzf?Rirjx191Mq0u=@e3-KgghRv046!fvvQI?GG~nCB8G?yu zt;*2AZoJ{!w7>}6f^Il1gjz^z_gffQ85AmH8+SH|wIDA75zMu5mNhYF5Ign^KlO*0 zi`ca|EXIec>#>pD{pss1Np!kg;olbqr_5!D3R2oxIR<$n9wU&8tZjP}qfFL6x3Pq^1 z&%vGW5G=~B7YQxKoO2_CND+~yO$FA7;jm7N9uDlK@<~;W;qyTyuEjmw%pI4>P*9c- z_hd~OL8fDIgmX$zD+?0Mkn<%Rj9~^>Ndo@gM%ZC78v$5oj;odf@c2~i6kYyjT%G#FInq^3(@0)n+Ec zqOqsrPKDys8Sx+*&rjXtU_BK)JQ9tP52d*tyQXk&edd_EaY8B(+Zt*CERV8JA2wg! z&>OV7*uJq8n+fLJ4Xf@J{#H`G!B5w-(mw7IwsXeC64Km+2{ImBB({5&f6be)5m5{Q zA1p$&Kl|dd1C2q|u%G)H!ge{(ZN>VLEQwPFz8w&1D+4!kIK;=*py2-fm257pBHH!k z)2)(wrX7@S8}~YLW_tG0*ur^gzc#DRGwC~!iBMwLsfx<(SdT9VhRBFFr(l*22;z}U84sp+t<7i<<_0aajk(XwhpZ6OPU4QHS=C=@?`!F)N z>Tehn7!TXNT`D#;rtaPuAP;tt<%zJB1q~XyKYyE(nTdi5tY($ zbN#fISitOXJUv7GbL8tXckM=vQ!ZA@uS>0J?XY$h6?s&uzVeFv*;%N)XjN*(qt;oe zep;+@l0qelvdyLkF7X9hMqFCpG`&?gkzg*uuAHL-TQ^!*S8D`Z61INxyWHm9H&0-*qXeKlmlp6nEC~)YXE-EJ zXmCmFs2fLL7ieo0y{|!NvcvfpPhgio2V3^@rvh|HlcC9>&InHiMcuM%M&rig3s-?b zjP-+a7a$wPjP}cDdSIG31|}FFm5Q@2^020`r?j|SiUXVF(-J4QxG+;R8p;j6V@gNbL`iRmL&(6T)RB3OP{p%EK@piUShO zYe^KsnRNfPo(8jzj~*H(-xkou**-B^EBn;Iz_FI${fvkuWJT zks44$&nU(j+hkX=0i9!65H1KLn)s-}5JgcD2CS4$iifXSObe`oN#b^QsOOD{=14tF zBoF=b)^p7z5^fJkMqH3djc&ml1|)2|@ycm>NprHKLhod*f{5(JhUE}DxDgkHc~+iX ziZuA0gI(&)bEuoy?MpbWtkqbzn97P$7@Vb0zPxH2wYTa2OKnipl1y%kR^sX)0H45Cv5qhYai}!Q>pH#g-);hg zb|@!TZXi;*(B|n`;wwr6S%)c3#F&`{99l}8OHlzP;;R}b?iDN9k&2~UHj589xs}7} z4O#Ju#|)%v5j^zs7E>Mtm>Pt;KomQw#1SzOcgw+*p}ePEBIz(;_2(jz9O#lLbGA-Y z(wyuzmq};|C-E$iuuxLI*K=$0_(IB-DJO<4lwL2v$Tdoes8r~3Da?St+m>|9WiiEr zB6&aot?K#dK^!Wp@1lq-F0y7i$}GS6$SOeS>RUh*rLSF-LSReq7T^sPi%mlCn0N4n|gJ1b{Gg-%&yvpO{taHw`sJ+9;lU-Q5FP735#^nlaJ zDuMaJXZDocbRLrfecVgEut8`y<*q2AS<&%{TO^*+dJHlfK(4_;U&q?FrZ{hsrAh@?T#`V_saK#NWRp@ zFnT#bHq~V22tsVxs=bR-VUngIYx#<_>HBfzhNG4%3SIqnEnRie+;n()B zT;tS^7HUR8EsD%oGgUyb6eV#qEY8BjwSWRmlxG8z|Ga#J0@BMHEwTGtFCRA#s$R7i z7iAbir+6_sBE`oMMOnB6GW=sYheAkcxi!>_se$H=NSh1V&f6z~{i!HSOgCA}uPz{?H^-ZxR&NA50Y0 zJXFPp%$dsL#(6z)e{IxQbQjv8rz)r1!IGJ|(A zL-(?Sw=xrNX9pLe#JWDu>t#1~79~jtvP>%xVUwS%BQ{hF4V|P>JjO;AS6G(pMEi>CE+ zUP3}|HH=63I9MR&!nzhav(Mq+*+muveZ&3Dh|9vW~Nb z3u=B-ZKVPtfHFKq}+I$e2!d5Ccf~0D#rS?V^bt-|ejHQCK7pA|p zYAPn_#c|BJ*Dkt_7>K-%@J2`2#%Z?_L zyn#Df&+wtBPko#Gpd_vlu8O44U$QIJ#ZfB?*cPmJ^VM0LBmJ3JPa<+BQ!Y@YYE+0U zoN6up)?clI@vd)&^jtEFM-@;GGD@c*$Kvbf zil6_s3IrjUD1Tu>arKK5H!u~UEGb6;3D8pmn3ujb$*ZN3iiH+&)OZy}Whf#PFvac| z1)32;q1!rza!0|D?0R&N3b*)3oB##Lo8(YnN3eoX0#Kt89EYf`lVYoiVj@OH2t;;_ zf^RCy78i4)nI%Sml*$`dsJ78mT!KiUa!eMg!)4Zto5QG}xP5k2xfF?cI>Y!KcUs{D z?j1@Q2bzWH@|snnT8B7^^86}I#bHJoGS^-Z3SWU!hB98_TLxSgqp>z+;%tP|Q!+fk zbET_KCK5`T{7$~xm8)h{W2<)M*cdT(p?_90wlhG1Gn~&s(;9M`asc`l`@Xq=L%+V1 zFXutY))W$etPj7h5X~lgGvXrCg@8c3#w*Mrr^qEDx6HR#LbIbX(}S?n;ql^dC7a zV!{$xkCKIWL?hM`Y=t6K@6X@}o|>(w(H0QVI#WmH}AjSV&B^~e>?6z+3C(k#+9<%AEDNKw&%C^Npk4|-fv03 zb|QfC_X+KMZub2|iW;9Rx9!`0xO$t~2DHAlvAHIS7rchR^uC>z+t1jCsANeq*+IJf zqOh^GmZzvYE$S{^R3WpdyU(6&nW8k4E$WVncyMdJ?o6pSGFtpIZWXJy z4{k|HhBf~Se}}4tph}rvY&|BS>BUy68)jgVZD3=Wrr?%j(^FTK+uvY=U4iXYyI(6= zNa}uN=OD7;Z+!OP*KBhve8z#wTFJvl`5h`M@VBzEW_qKud9#%`i|tP8x@TuRRWt_= z^>1iE{&r=vO#zy>?SLLz8g7H+R(c;v zltaN`l|N@2gE$~Zbt$@K1NYVHXsip2t751}J*7ARA%2}|Y}6E!kNa87%C5x+^xVhEI27BWm!@oHSxy z`{u#;A?mm>w6+(Jf~$JVR&96X$`F2U)h;a_h(EsKZCkNL=^s_GOKU6Uj2PErd8Nnl zuszn{``iS_n-y z0HFVIV5QCH&Y{0YZkErF$}O8-{I`H{!{JmdhBX8MG6V6x;JRrN19%@uyp>K2uq;nJ z-Da8-UVZPkKKGKVLvN+8AhG$;xi!(8$o^A3r)agE-&*_3yk3IfqJ5}Q($|Ntid9kB z9+yf-MIfo%%)kChXhI!v?z=*U#ahF#w)`ho0AH z>aA1)=Bo#^U{flQxL|Mfs>&dX<0Ocv(KhT66JAu5X5Vz5praUyEMg<@4G}5jz!b z8qf2uMUPReG|H!E6|@X6%ST-7EOH(YAo_hW@K9p<>E4|d6 zUG*9*tJJC|$K@(Y>x&ZiTAq|@hTzCv7__Ba<~6#aDWaC)HKT$FfW^O?lqxh91zC{> z9lkg|=cG>=35+7tZ}ySa#c2fhch&J=Y|OuYRjePOI6o;eVdabR(O0FHCGGQBtx=|+ za$USe@kE4Rlqjb`lg?gIXPwTWaIU>1^+CN{IzFi#ygI5K;adBgBSW5(78BTkH36{4 zl!}T+7tF7W(wQt#aPZktt;TtzW+;y8uW){-9F$%$G6yJ|s;2m2;|2Y|klQ3(nYqIn zn}7YH{E`OCutIG(pvp{uQNl4_^|M-~eE90CbFI-#U=1j#V{)yQ>Xjl#5WQylOBI<{ zMj4G9PIT&)n}2-*m^6@8UKv0RjVf8e2xwajM&g~EB|_`H5ZveRSAB)3G=>#wk*AHG0JRanORSf+^m zyE5nvhUEy2CgY~vY&5K1?tn%}$0WRYUIio?2j|DfMFc{8*P9Z2P^`YNVFFq-wpLf@ zR;U9sn_r(Z0IcZx2~9aDo*v*vPD?pNtawnyVOp+z&%dshFo!b_viXSp#3!bxp<(mp4(gz5*c?s}(>@TC5Pw zq%f9dCxq;-ral&U3Ctu;-GX|U)F#-7mDOacn?S9sK3RpeQznvy&c4zMa3QUIA@%29 zv(B30R!D>~cmU>totS+Aimz%fK(lgcFUV5yru66F0OZsV-8xv9p<-_?EoZhskM&oK zK)v`9dzefkHPma&`>CwPv)Y-=+E<_onsWlc=%NSiWVlO3Gd(9IaF01C*n;K@noN4a zS**YdMFWwd3jqh==W%`rKk62tM=NubBbEH06uh4PG;(Vb) zTzZZYkyh%=978E8ug>VLL0B>$m;+xHU!8FsTwT|IEX3m3D;7=V6($Oq+VcjZE{2q5 ztyC1)!U`!t;u=*gA2y0IIWLQ4wkr!jG`>EUW*O{y_`F;>Qanxsv-V1sS)*xYo`rNk zb+x+m97;pSX@{;;Aq)apU)2C2ApD~A92f^ESa%nt%8@h;H@QB5XT z8Ryed1&Scm7V9s*LZ@+DKc|ggVg|$vg~4#3Ldd7O`bb2bMGm!;**Y!Dkpff$#-V2? zILU&1j#(%tm2+BD29y9wS!v)voN@IKNX3cZHvn3R;Q{E2n(-8q;dx1JwgfgHww6>v zr^`?wpyBAOR(&O2HL^5c)@ppq0SAY*17NIvK>0H4WjEcD1MZI%B>4OQ>Ptgex{TyY z#Y?b)&xQ60W^(AA0f%E?EQ|GXft};xSG)^|lv!vjco1jfg{4|xlOn{l+7wS?X$iA0 zQ&TB2Elr_XOj?!YQaxm(1+or7{R;NN0LZ*pA1X}R6kSrf2GKhpMpoo2umK&CHCn66 z3zJ6|!833_(l;Reg_1@hz#h$4U!Sv_?ILBmYM}k%8E6BiW*R8y4OP1fia{n8UmX_H|rqvCOfiD zEVm|7DMJp(0`J1su-S@LB(ulHIUvH^~COH=zA{r(JWn}bwD$r zZ2cF{MEEzw+;iN$&EXQv>xfVX^oQfwbTyoDRV&=QJ1d5=v@Kn>9Zkd4_xZs%6~9tg z$y43x%GL@TI?wHu{I)z1J<&s~uI#SlcjMk@mr_5gD|;*XJxTd!CI3jCk5}@K<@sbK z|HM>&yUHFJJbxEeD>PSPbhC`SqV2Szfp$j~C|PBpgdN5AMn@ZkqyhkJIHW}sp)m78?hfmfXJVDfcaos*hzY+05wmwU2C#?`@? zA=EM$(2p&`)xORBxH+HS2mba#<*w&c;?i$DlB8RYw8bCHpw03hnzHxOEt7smsxYhL zzO~DRVcFmO`>z#kn>&1o1>;603o?D!;3nhvnTqS8R%S8lrvi?hS~HJ>@fS~|^#Ypz zdW|4L{_8cO%j93h8Zl~Mj6_!Zx|_IMJEeJ5yNJ{AM(I(jC9l$6evx-}PB@AR_7=%z zU)Nkh+o0$+SGme!IK96rMl|+wiX7Get;NnbLe z+Lx*tr=R)DI3p+k?FX$8wfc0+q}f_snxf!JNu;ouQ&Dru@Tm9FsSoyD%xrPj4PdOCCw)@choRB#roG{SZVt+ISP@Jc+^*y~4wC;l;*rOERky3U%T-XK z+l8m^y3tkN-l=&Y4`Ji<-z#G>klVlQZoS0<*{f!F zXgiW1uw1NEWh0>7N|SC2FyF95Qu&>0Y8H&d{Gm?aWeRM3I@=qqz1=U30Si zSvuEr>oQd?aSfR|@i;nL8=oBHMa@9exonkqviTVrfw=B0C2TTtmhL~tv&=M*PPOO{k!(k{ zPCQ*gwy8KC%q(w%bO}rCg>fMnR%QT%Fza`eX zWRgt#R5C%9=`uZjSr-3fAF@1AB3N2tjgR6NE%?cz=M6vc&}2B(#E}d3&UA+|4CKj5 zmzlPbX|iq8+N(Kb!=liC&`>t;A6F!wjcO#Fh`Z4`pKbrJf{9@M@;*JWJpw;WCezMI0#Bz)aVTWuRv~46-~A zvQPwe+a<0O%P9A9kDMj4;D=1Z^Mn^zU+#l8&u@wCGuvkyjxTe$c48$al&V zW%`mV!MV!~v)RO!0nE19X9~Z7?Gg{LC7Pq5rjt{q%S4v4i;>9kCCs2Tg1@qSHJ2zPnT~AV#RYj0FwOQbTa*g` z(JW#4Lr!Fw>L~$5@%>u#Fv?P-P;0j5#3CgJ0AxYUOzOY~>5mpJ-mYBG z`G|OFme#15}j|6-^p~PKzl@Mu~luptu-uEOMagVhu zX@>NJstZyU8MjEhBh4iI3GW37+~Z@1+y$vsno`&#YEQCl61+o2Pk26(O8DEAO2|U+ zo_vzw32FDV1W8ZaBWWbhZ6bHHZV4cAk6Z=$BeJl`%Z}7Zb00mPlU3Llf?XJs@;$dj zLq8+;E$fi7din1c*1q_1wap`KS^Xge?C;wG>{g)#tE?Qx>2Br2QwWo+JMb9ql#;ZC zjYxWvpFMCGzwoL(47qBOio=_~VvN1tw4xglbGa3t&FlE9`YYe87^fcbb26nFE3mJn z*}QSq*2=;G$zuA==enO29mxZbFi+F6OQKfSGTD|1h!-3R%;U|V+kMXsxUJIq^pFD3p@kzbI5 zg}cwTEhISCzdOnAHt==0Bw|W4xKdBZL zW!yJtl%BogPQ*7`oVj@t4-q+$$Y;l%Yig;$ zbwcj&lvH?`CJsTDR(7Mvj85q&v6kYF;qRfl#P5Hek=%~YTypCdla;}Y^?dmndjE6p zDfjw~CU;LgxqtGh_cRQ`kh?(|oRr0-lLT;ZL31JqBJ2YkwX7yCI0zrb93{F$3fHFi;Q0hHXJD)pyr$Zt88ZPrSE}y#^?1c=ed;DSLdFGuJs`<*~=4f+EGyM(#@)P<~)V#9kGHlSZSC&u?QB2Z*?ID4cMr~5vuozi^ zQ5!Zg8?lkuijB->Y-F}$BeNkHp)9`RqMpUZm~bzmC^YwXHlOTya`epHl?VIVTaWhk zT;s*%m4N`3^=HTY?%GG3Ot!JJn_hoR(hW(wA#1=rO?7%YhPGgDmmxG~3+d50iCHe} z>3RO%c-Ngsb=++1deL=4(VaV?fR(x16z_0firn=sZ?<;5<4WAF$1>38=pAEa8d?ddJ7JL7e( zT{Jt!7ge*tKv76} z$`%5gq8;ExEt<*=mZ?4@Bp*Zx)%DhG0>W8~a94%}vs3CRRkIYbsCk;jE6TOJ2I z1VO969nEC&H0<3%G%tEi4B*LSWb6k@8NQ1NH zlDakjmb;+}E~EAd9^dxKZfGaJx3#&oyS@pU+wlv9r<=P^L3iD)Ua)t$x!c=*+Ns3Krg zvtc8JBaP}6{?!D#^Lr#(4lOD;oTy_4PTcRa@4;+tP*f;MY?n-)RH2qH%}#FzKk|Gw z?CN~sNme^vy>jwVRB=3uHnWMfvaqS$`6QoTY-y5bOhk zdUik8sIW1gz1fEi!e+z1TwT8>%{R=NyGu+6z9rr31@FFPh2^ls^5OlbFdHriy9cGQ z_woKy61uqo$r%8P`nZ7D%&}8~6(KP(j*|dij^*QydKd@)N0#~Je32Z|H(#Q?4@w>N z=USUN%dRP@Gih?+#>#i!>1kuDqD5Kz?zwjKz+&}EZOVbDnE9Qf@;I0j;p${?Y- zoe{Gab^=cC7){5Bfou}|a?_17S|QVLt;Ohw?B(nh0_V$;6!#)of4uToCW;wKV368j-#CH$5)R;aBKq`gTEyvcR?wA*rL& z=@SW)VfF$;&Nn5&ldY}o?MGXi+k209cOE_3eH<5VuX>m5|BcuCTbsg)6-HcmME^H`m<2xD?_z}6+NbeERd;4gmO&{Mu z5r?I&nTUgvR~nd5m5fb$M5Q=)w}iCG)^cI465HR>AQx(GsL-M$rA-T7u(wPkW5NKK z;qsz{5Y8o{3Gt^5T(j4-jezbXAvun$O(u>s^JKgbM(X>WL3?<$zQuWAg!Y>p8eW~< zTq1;j>2GqfUv6Xj_M!KXJu01t(CyyCUiYB~efFvw-nw^RVEsNv2by)U-BP7!OE0^* zyt|)YmOz^}Y4_RNlt}Zk9o|R-&=AZzsTf!M+g_N=;DX=0C8CAy;Cj@}Owb>FDE2K} zL8~*HgriAT>84NpVQ-Wbdo$|J20>PgsF@Be0V{mE}1Sn=zDIic!-yOQ>S#}4VsZ)d^eZap_!^Hzl;(zgRH*&9zM z?7JT8vG8~Po8WFgH}g4D5Y8;0PQ zfFn_^4Q5A>-3>JjZl`&H7#MZloWk3DMI{3ia>Jm8Cd(O={I?L=%T>eWqh#cWy5aN# zNx+qCUH<-bCW#~-^?F>GxaRd&!!R@t`5p6K6)rJ17<2_Mi@qY{CcFWi?fRE@(_ncD z?icnu0ZCQZl)Hn;lE_9~YiYs2$|+8bibEN@{Tr*#^3OP>(a1z*aq9~5du;%%%Uy}# z#%eD7VqX%aHe^v=E+lHr6Vt{Gp8QPUX>OQtGhn08*#uB34{Gq@a}0 z^MQ2nZGpl9T(&W0SX!*LVe&mGF&G&wHfy`($fpwiJYPB={ct?imvMjW-b?`BYu?*c z`5o&ovu9#{XA^{d^D-u{D?=08Py6_t`|QgLC2HC=FC}Vjxp1C3u zf*~nxyqr< z^$y5H?2aFgDI)-`y1^81_;g?HB-9rF&h}BCVL0yFZ+)1LexIim5t3Yv-S#L7AX$*? z!v9tdfo*jsqcP{N4rVt);Ft?v=@&rl?)Nm7s>oC&ES6j9i?%J-D^uL}_iTU2&1!2N z!_vK6&5iT2BG8FHh@jmuuBAmqYG=^`(QHS&|-?@ zqb^zp?#&oaul><%Dob_(kql(juEn}a=BU@dH7kk9SQY#z2}DYe`VbAow!q!WlxC5J z(P~T5{>|*h)*+cnKQR501t^vqyH5SpmAAn}TEHfLslws}yOndt>(euU0+C` zyLUOmkQk0DWBcf-yDLENYi8t})?{e{cTV9C0xuMw&CT&S1t`rH-A}oRR*~U~oEhN&6<}vmuNyK)#h{XT)XcLWuMKL0OwnBA zjWnE>B_}E5=Gwfdr0rH-mOE?I+{wAd-NDjq7bOttVp2H!R#jJ`R9f6IE2z|ZMyGE0 zWFqAnOCHBBsHpR7Ev4&8$%z(GDJ>N&w&t)qR3=Zx6nsTF)x5Y$mwi3qJDF)NOH30I zASomaRBP6a5e?@Sn5-czZs~@jwvak+H}kiJ{M}~$u8@DfnSWnMd7|LafXf1|4C?;y zC|!aaplqqAj1YbeI83ZL5ihL;PHI+sj`-oK^4oCGM?SQQn1NXz zGH~a54ZNytv!~2uHCb>-=&OZb0mv68+s&3cU?@5abU_isfjm}8;?gXbEaVuVbeie* zVmY3@Poxe0jBgY1XLA0zukJ0@JH<_|4jO!zC6sn`nu=6afl2G#{kiB^E5ULHX``fF z$*)+&CPxI->M7q3L0yhn-rtOX*lPYgCd7IT6Z(OnL7e9eiq$svL`MR`@b@R1W_($0oqyBDxpbhu5J;}{S<@04}L zSAYavBS1<&qOtZ(4os$;5ApHo-5v3+;Y^w6MG_Mq)!?GqH<$gZ*=QE}k@;DMjo!mT zDn=u}<&VYB!L8qA{PB-qU@%do&;ZPvLjW8UrYK>}vv(fCW2~;=2^6)-VjF3i(@ZY# z?6yt1-dBZfQVz!81k1o%zDn$72{tI0~7;h;M{*=T0om-yz#zhTC_{Rx?;uv#>A^m8C(ufAm!!~5@*p_HO=|2B&=2slY zWlvG(0*W>7UPRp-*XMB+O6}CQfXM0MInHi!)QGA+NEMKlRSmDPV6_$%fBt`#pCZ7^>lF3S>bxHn+Tbu-N( zS>{gSe^iIuOngjk2MGdoqP&!Te~NHvoEKKSC_XhZ$rLNOjR)V7PzTKA(=m)j)HCW3 zDZ=&mP2PWNX4du=HHfgXBsExE#XQmR`Dl1hs`#rtl|n@#c6v1U1|Rhg(ifggi1Yr+ z1bbwE(2c6GWZTwZ*g4mPr3O)lD=tMSr_rr+zNuWhqw589t0cq`wB3m2+V-7A34jEV3pL?;E$+?~~x%5XIODTU_Ujx%$MHdyM=QRqsDo zF^C0KSs1Jq5Ae2U-ODZDiz+mDEm~bg2{B)k5T*ydihj_9%rXVMe7FlBp@Z6B=v!+8 zg(^l%H9)#2f=Ff?1m&6O8{?FC({3f&Bjb)>YDYH_G1q5A*~Lhyk+x^X&G+y}0EQaq z(1>FJ2*N`1OIJ*GM%*t2=J~+KY#>BO5=uqc_XS z5rRz2v}H8V425*ijDn>+xttOi>D)poH<(A}DB1UyLJer>{=Aj*{?z-mEij2g;D> zRN;m#vC2rDQCrAt2wfdr4Kcie(#Il)NE5Y!Tt^%gy;c21qbn*|m`DECkgH%AOaNtA zZPl6LFTfo!V2EUTD=N|ck-v~Z6Pn(`k!DBRdM!TBPGdM)Ee$0Fe0fx+hFRLE?TQ#~ z^*a=HIJ|CmNAHY2)inM5Oz)VH?)GoSgFw82>7^Jv?5a(sPKyH>32YDSx|eIJP&gXG z%wP$E(hy}~O#|?N2xnkhO=K=G!$9_CIC?kqMOCFZS(<}L?ru19H%5yRTc*g&iOuW^ zOa-Q!RdwTS%6=_EEi<5&fjH7otq@xs9$6E=HyPcy ze6m7Sm5~ah6kD!x6)L5{-2|LCJnF4WODATIiT1qHjBUB9rGvCYY zpk-%(Wr^@L@jcj?i7L}Qt0vM55ZH?gS1%_@dVX4;WJ8l23OK>=I`>7u@i5j`xT3*# z$kW~hCYU1=bLxVQDU3mu-?ZkG!yiG4lzTMU(H}^$Elhw*#2sM>MdE@h+E=1K*W9J# z;$Ka3k_q{*!0U`c*a>TIr5C24B zE3%6qocd>-Hd+|JI1pbggS>rV&ee2#Pf|8O7mC6B=K*H%bFs-kmEz=IDy1tkU6@Ij zPT5f9TULSdWu8&nWJ$tAnYNN9H(pkBVX?|Ka+}-T(DY#(1YH5df+Ar&M_>j7$>lb7 z9-AbW+^C32O2&jvNg4MlF3SvGP#6!H5 zL?UtoQc@inf;bun1}Uo%ShwF~6e1ZM2A4)+jW_u9-r@BK9X!`m;-7%sOuRb%-WW1P zcaXn~A`M%c-hy_|3ulw@0F938lQ!`jk_XE6*Pq?j0lE%2b3Cdq(dg`imO!B|6Ch$> zyXyi!K7J1rV`H_SLKn0Kp`P$NQEZ$SE2POiR?yV>1IN0lx#vl#A|D`h&R`z|zebk+ z?mf?B`#=J?j5qDDkJrNTLS%(R$&`5Y+9*RAW%DmbMY1+#9fm%{z$LtkDRn+gT#hJ9 z(#0@RT8= zU)2@@r1w1e_rL$@C*IkYp7&3F;d$@*oAUSH@^{JK-|+We^Y=ge!Ylr>|McgdoX7^X zKf*t+_N3Awm9;38e} za8b`inN)l=kNLSEfKraR^W>Ni%|U!qKKZz~AiCVVI5;3-lTxVtKl}M7|I@!~(L9s? zoAq^r0K(t;a`A$jMS9}T0{eM2*V1Xt^qr5)F zYanc^%_8Jx)Na>Y#Q0DI{I+V_eei+Z>899DvnoL8V&u+7{nubRt@2kRTk8K=-SDd; zu}M_LyFln_h>aX(+z>TsvRWSWCRkgNUq=aLi%MS=>l@K0V09WCBs-6_J;7}UOezXR z_s{klH28)!(vnW^vst%t-r$@Bn`b-_%pCu#^xv?ZZyly-G#uRdmq4L9v~sL<&}9>@ z;pC7T-@#wXC8_J{Vo>iPo^_&9Y{gN;J{K9A3Kd&6UjKjOy$5(yMcX$%bLzHiHVLGY z-KAtnNWu~bCA1AKfRxZ72!t9+gwTru0fZnTMT!Ul5s`%8gQzHo(xMVT5D*fofG9;u z2pv*(zu%m*Nzljmyzh6t|L^}@*LP;`oipv8d+zBo_sp^2VoA4eclB|%xR?ZBpJAc} zUKI9NLNWRs%lPje5U`L+tdO~#@VD8_9M}i}6N?m#s+EFJp5LR#O`b3o_MOXVWtlb! zEuGs%;S#Hdot0SF1Q{2MmHWo=XSe_1h-SJ{?vzyx((c!3}YB7QT$q*|0xd@D(w9>8r0o6Qn9%E?Nlo zQZ-{vBe5BYO`+!a9GyGBBqoRTQar3m|IJdKvYVz(Q`LE%N~gQ+WoH20IM_Mk;TATG za=W2KGG`?^r9!j$WLbeOFCokY-{6K53Wr)~-J^lBasm7mMWc(_Hn8a-3#s;3NW}M?watLQFVy!YGW56ikp| z!xCNv{Wz4Z+9;8`7reSyCgG4H#HWT0R|XBS>IX+6G1Fv1aD#!j>_KR^je>v`19ikc zITeGW;pl;_+7h1+6CG5nZ6Go*%f}kS5 z`mi&YtfsImb33!;1y<;lA+@r6Q=Wr}XcP{mvK1ru!%EmowrY)F!;JF6uYOwn<*K5D zfgh}tsn+hgg4s2bzeT;kC>O<2sRZz+((Z0%%ObX*t3dx2g}T97--#pHN)D)I37Iq! znKX6WWQfI$91LC!8IF-UHY=i3Oe1kzdrVow!0=%k8;ccr z)&pDUBPI;TLdDogDbw9Z{#1?`lJ3J(kV}Y7;TtQ3pskHs1elz=8aIaXLnkrsWe+Qg zJs^*dBj9QU`}>l|iUzvem!2Lh#T5;Q1xaS<$B5e<(`%EMFedYXSp%Lp^xIR|DBsv0tiWh+ojd{*TnP6Sw#t24?YW2s_!o{VBQ7Dq#|QqA%^1;W!1WNWA9BpZ{UF=o;} zkW69^3&yTe!9|f4e1fk-8_U0!ITCjuOVFot=aykKEf8{s>BK}XDLQd@;`!%ZJ;{&-7f*4FH8 zpZsh4r#n9T{EMAmezj}&*L%MCcJIFZ2M*?Z_x%rtat|Ll`s1gUsE^77A~ zJAdKgrC%;zx%%t1-+sS-+gNKhEKY9A>`HQ0Bl2WG&dBF04GR6Mb z?^7^#2jDY+Ao3!G;-HxRS2MGJSuyvQ&0B$E1i(y0IuO`<0)IQ0!&~+zwFV)!xIg|S z=tasN5|_4J&|k+(8gUT(xgSIME5S; zey!LYABn|Mb6a-!5!X85o7C6{Zi_EJRe5oG77+4p7I zF(DO{d)!pVjJU;#&3aTB2%JCb9@o8JhaPN=w+FtusGKar_cjr>L)#u0Co%^d3sY`2 zVn;gFtMt_G#A01Fu7iq>O``hZ%a%RR;h?X>0(VagL9yViim9;A#ITR4Vs#Z?5yfSJ z>;t>l@NSFG@Uo9Sg1EN$MraRpXomYh)wZkrbCCF!X6yE?+V<>&Ph8@w$_R|_Kqi16 z___D2*{-_#3MzG@vUM*k=yvHj2>ifzy*uOkt$68(uMV>fpw3K2mfZ~**QsA(TXk}Y z3jy$TEqe~i*o%DR^)M` zQCxRS=kYyaHr)m;_J!LnJwYnIQOeHv;Y1q_v$9SaU&ig(x_j3i_#~@JcKLUBa2pm# z!8gj;hmY~KSVguB-ztt{UwrKj3*5VfCLSJetQ4OMRnEtDK;girR`DetHttY9MBRgZ z1h_4}Da^hgt9%!^J3`{?udkqo0Own=qlj(WD0gFFQrsn8T^_(^X@R^AzT=AT*eah) z#;1C_Ocw5GDsHLPQE0&p}rw|$#>)s z`H7q+=g38JnOq}x$$jz|>NzPPJk?T9S`{jY22%^Q(KuD;tuW- z^ed<=i-LqUP?C8`l4V}QNunU|Izg7S0^YS+LFPF@kn|EKi=tN22@=Q4ctI#pCyBBk z$_R)TUPd5;RsaI%8eo!Sc+!fZ#0y#vjuRwFBYGKREzkjjAfVyZNP2t4xz%$$~& zN!-=lg8o;Y67+OvGAZlvnC@;qDG!2}nf(EWB&v_3zQ`1GvgbAi3#?hb!*q-&o+&y> zyQ}C9a!=7IDPTG}{rieJjT9<6p$}A@d#LKBN6^t3XdbI(;i;-yo~XLxIdl%FUO-QS zUc~G%kSS(58$w{P!r&x^2y7tp7|7B-zhPwWYz;BtJ3^f9!3>Oq1^W{46<`-&H{ff) z9>6z%ZvlG&`vCg^2LJ~FIRKy{-vfRC90D+0zX1LY*JapW0bB*Vj0?uU#Ram-uYkY9 zbq)5v0e%PkXIyb7zZLYKbFTm9Q!xZ`2UJHw|4l6a_jqTSql{$0Sq^}bPXvGnkN`4( zJy>B@9xVnQEB6cf>N;5H0nFZjKM#Nr;0Z7Ryx{Q`JZjG8i7zZ44n2$I=L3S?7qb^O z3CDDV$=uZ^tvYm3n$H7pTp(>)Nyz)BQI_5!-j(ksPgCHC z0nQx6c@*v&fY<&i2Kn%R3ABbcM*RvPq+usQW&_6)q|q5e$UFIjjA=tiFSyNz{V>3D_eJau0Unfa@v3cR(I^Aj~?@ln)#m@%|m?Y&3+Bx`5tre+B8; z4?0SLM~3@p_}c*d4!Es=eh##Jjkt$_kKKW@8hEo6VMhglf8bFX=&1!hPJrK~Nbj@$ zgxm#haOW5K0B%D;%P7!R9c66iMM9E*zZd*|3OX)A-vhW0s1CZh4uqUVd~e`=7H~a< zei3}!hdfIHZ4;4aFA%N(@Ed@FUxA>#H>PK|kcYQHXG4UU(;4%xLxMiqZw96UZxV80 zCJ+rL%0n^0;Lr$R27pe2o=1--vR+oB(Q0)% zz20E(@Gu%ZJxwMrFK=%jpDI3u(0s(I&~rejW}amOxhm}t--2KV_jYSg%KlO`qy=RkEoEa+qI zj0PiKN5vRPNc?g_>L5)>I(k(}A#XjHQ`C%*(O{I7SV#y7CV}XM5!QMP%-)Ae&;ymY z8<;x+%q?;tH06m%B=nnc%Z>>8sBADU3z@qI8T8&+pa*ox$M#nq7z^g!M`73weIp9k zbr5zEfiQ21dklR&Cg^cw4yAMEfo(ibz3CA=6x&T5j&wLk_p`QaEyk2>j z-#Cg~=QM;d9}4-)09G6!-XRu{$}Aj?(DH{kyd4ha#{p}_GkZ-S4nZJ}1m?mV@tBBY zA_6$E{zpNtbC?nwK*f1`lepcm2(N~iLjYy~do0kcfa-u6fSQ0>fKVhe$FcJZQR}pvtEvQ)* z8f3$D9*PL(kKV=Y-G$HwQ(dL^Vpd1c&L~8?)6_l4ZFZ9#1!_FU*Ad*o$svR{4K8N@ zIZ+ngq52q&`il7C3V%XUezK~_%0mB|q?*gvcMZtAOhITW)yDx|doy020I%pNfwt%G2emx4V&EmgBZ&1#36=Bx1BF1Jsaqe|LZKeySU zM%vHUZFU!vWh~#p!7`$@qDina*8U8Fzj5b_!%eV&n5(1worI%g2SaMW=T&By3KTU_ zW(#3xXaLh|4c3%rmjww3wR)DDpMdFbFB|!gVQ8yuRS@TCU^)zMwFRsfGDF*1goGiE zlQ7hJV~9$6nwy#dZqm!}W`l#c>Lcxppr6a_g#i1;kecaScbDjK)~d z!BmaAX>@we04$hQPl`$(!JV~m>TF+!v{C)myU|PnADy_e8*r`PF_zST_6aNyn-y8 zh*26z^e0{|CqOq5f~1re^5h{P5K| zRjbyi-@{|kpawpzXV~A8f+tP=sJ*tzv^DM8&g+txRC}deoI2|bKCt^#qov;a16I^9 zPv0=XYq(}vT3sO|eu(@|lf`+2&#q%ytVhKh5VQG>*v&l%}XoYf#CyJQR5kG=w zYq#MfwW{2jbWNH<2y%UB1ZhM%kwF$~lK{4`*$0i)1wp@!s}}5jWH}hWe|uz4jVSo~ zYrMRxR`JsZn$YXIAJNBP^pMmgP<8P0@;|y>Es$}Vmn~mckTbYh#LwQua8Hqb{39K#iUAZ3Tgg>6S$F2QE(08lc=l`xtT*eiwjns3Mx=IOV zuuiA5w7AGcN?oMbNw7TbBqc>ojH^paN=iygi=8DUF1!;LfydHPrxQU+oiGrW^F?v- zQ;gaP>`I*ES&6F@KbO<>>}iRsxY*^w$^{Srmy;A1JufPPN5onTFQp~U5`;vAFfr5$ z8iL5+3C5CV#V<;WUpyzy$IptNBT`a|kO<4>+@(du&r6D)6}yT-kn$i2Ag-jSn5D+$ zEXJ?2xVQvAAZAG`eGFm{7h+)4BgMrI(x?}vn7lQ zFrHE4E;#pOtz0Y*6Niabl1|TwR%x`fk7Mc}v6d_5`5bv)P+cnfUrkrjaafeRK=#ub zTyH3Ws;V|gB@XOR?4^IuZrn`nI_Jet=ilL7ypJ$nc>lkk{sli(#W1LFPA5;1E2H6m z(tZ(Eq+V9LuTL8h4gd5t*9kR(-|3SXf;kjuE?wSEMV_Dkvfod6l$6S}pm? zqHJ}mRZ@h!4R))gZHoOitl(~g?+AIj8Q9Fh7zWN~MwpcxTHipgvGk1(*Nstu65ox?(Q&Hus5;F8(5J z6#I#vh)elzgva7u(Ni)@)uq1DNGV0SC}xN?rQKq4$%h*GXem`%B6&&gO7BT2;$<;I z%9a{PKZ#$+yX242!|jy6l>a4vDmRtu$!+D&puUou$-Cv2@?QBTxs}`%HVN`-c?Wcd zoFRWGen)~u^vQ<-E6QzmN)YaHEwKV(X9JzreKog^BtZAxgu4$%e zp=qgUrRkt)t!blat7)g{sCh-xNpn^{Bj?Haa%W9~rk^HJGm?!ju?gWz3&{g=6>GZJ z0PH;ntN+Z&kG{I=a#~q6rms2sRl>EW^9mJ^qpND=QCKaDtDLx|&p}yGANygA; z6d6s%kQDM78H=_t745?W(j7x4m6APJA^#Su1Q zK#Go&aB8H-E5)bMqc6w$*Yq_bZ)0G~QkSp%H^S!52+|H|X-0DpTPf+Rq;UrR%Xre1 zoFIJ>cOq77bI1Vv|1}kLE2U=wnM|f&b4ul51oZ))2&$SY<4IY(@4~N|9$ZCPNq%)F zbI4o_Uf4g&_emH)22@IoA4cAxw6b{5lj$THDQrLkE5$HL;oo_8s-}TsIoNi4gUlrU zf6CYSpo#Ie2<|1|E%Ud9WV+LHywdcrG&H9z+~rhLX}K!PMW&aP8kN&GQC><>YFvmh zhj5gq@1oRHmgd)#I&+uYbJvy1{N<2oN_kP!x)7LsNJpgc9hB|)h>z99?)ZEvUW zS?bjiGN)3!m8EDcsQmz-a?Kwbp2xA3dI@V|KG=edMy+i?Rkza$k66wyGvifF2;@|T zS8X|(0kf)D&NGuAxbzda)B&xC4_QmrA@=s}dLdJWoq?x2=RGUU`CY(OjSdHneBdqP z(`)W@n1FpEK&70;JOi6C$1xsJ`BZs{sw_P!rR&KCCI3~t!%?CpgMuF|_*RFZz;O?UzE%+z}XIzRu=Jz2M!DTFmX+e)j zB?vSy&fg;M1JpETRGLOcH^ZU&%c;~~G+m0;f%y!j29z?EH_ViSIuK10;Fg2foG4{M zNauh`(-@8rHQZ^;hhACP%0d6^aQkENoFYFf@pVKAXswi<&Pp1eAl6q4;MQ(V_<)Bjq}qCDQ7#x4&B&!GfZj^X%ZLs9LAgS> zLH}W-$YS>gzV{(58HuG4IL_`4}#y_hdbasXluhma0SHET;}D>+#ie`=xx zEQenfZw|zPD)W~EEDe!wjFYNg^Xb5^gP!}zpZu~A3|v7BVKzHWaL;iA@PW;;W%RWYbOCb>rNUgCq*`uRo3yJu=Jw@p3tkGvT822<+Z}oa z>926!4-~PUX9@n_M4zGJE-SG$fxnEG6Y-{|lW}kcOn;?l2{^BYFQc+2>803IP}B^e zSYKDsxAw-nIv#nMqB88m-LX_qRFTdKidcM%qI-a{xLF7_t|`!`AWr5|#`6k_%4}Yy zsLZbapRh5EIpC2RM|G4WRu*#HoM&zo6y=ad3Po1&6ON| ziX7bqp|&OD2vjIGi0e=b-dI2S9?Do9^ozC09pX(2Fq$gBe{K99!M`^(QEze>ZmR*$ z6x9s>-ipf+xNIaXvGx-W-|b=Yg?<@&S4HoRebh-1tc!!qMX2B5J{z(}Tj0kZ`UI>T z1=C-^zhL@1sgIWKqQXDs_aZR7iq)}+0JV%=hA{RF$jj*IDvXL*-SLI;qeWx^{H_Eg zFO-^8jM@W{L0S{7NihWZo{=BHlkc$E{oPAt>>#N}50Z}{aa9lPKt4H%GRXd~KnZxu zhs>2PcER(Ju9IXl_;(f~FhBICeyFYUz`Fp{wJI?CBPW*QeI8T`QVXq7L%6d4;jo#E zEe;CKvvT2!yqbjGrY*uw#G<~ME|!loU?)PnaS7b3K$@&9AN`R|FVsSj%tGjQFrTY% z^F=;-5ew{nUrJYP(ANfO2?1ReG8j9PzA*cNF5J$7TvY3}A8dRv>heRn{1h6QeLslA zFF{+}34Z+mosf@xpmzrhgj;ol@kdWko$(iL3`=*U+zrDcrJ4A*i_JL)7tO7wRUlZ?oconVa|Z4h{gFm--BGm8 z@}YDpt&fGNhqO5wvvWMN4U^b_w?789$An{oO$ZmNL8W6TywI)IQw!8r7_wRDuhgGo zx=P6o+MM%1jLji$8_nqu|Hp_^#aEZB3}0<}j4q+S3JcKGFf||QO-0Sa5b8S`K>~$9 zp|(&*xG7K+?RFeT?g(wU)xsTNwGcQj(jg(XcDJj)MlK7hNHo-108mwnX<8pzeF$Di*Jefn5WBcJIT`oK!7K#1;H5DSQ zjGpi4PT@;or=apM7wP$m_WR@8Y^pI7)M54&etN)RFkX8y@|4# zMrE>|hH}@5&Yd3bO3MpNLzMIeRnz@SrRgrqMW(ls)Ka6;^r{qxTwF(@!M&TJhTeo! zQ03)ChMzyg7${ah9#)#}b=dS}bwN$*4&EZIr^WnE;ZuGjEkb-Pq-ZXJwB&41kz5ZU zO0ppS9zt#MA$>x8xL-vzMHefrdEGFrr{L>)8U~u|gm4GwetM6#;&K6fX(ZVxoI*)r zrRfuTTG&7)@GSKz-k&Qi@s*XbGlGLVBXn?=&w2DNT|rI4ENrN~P8xGoNg&hRZm}Fw zj6V~2QK&E07n?#ZzB0UwODr7@E)#jr_>@V%hm`*mzB%VYt-_aoAh|E#k%Smdtrrmr zb{4}Gch3J*Y0hsJZqjR_34D^kk!UiGpN?gOoyZHunGrOS!x9W)jN`tie%wyPvy0ZH zXOyXae=O`*R+B1Ak4mX5)KJ<)H5QZ5RIJKX@Toah%tv#BX{j*G%`;KBMK=ro#3u*W zM=4PUDN{f4>uG=Kd%BeWNMIan&YeW-T0qp;V-)_N_2bsTwl6(RJGuGvL#652ESS)i zF+TMcdJFfdm!R-TXikH<_-cAaRELMrW{ERutJ9c5Uhc2A`(&Ro=<>j0Kk)o+}5 zMmWl!5n6C{Nfw{QpGWKaDK(+@9}ZqJe@xXQ3A8)kgYU_YBYnlDI8EcgDB&}lx`}r4 zVq&GdaB$U>c2MPoSEXgZDqTkFpu|Q;2+M^f^bLUxTOZl?Yh0XcpLb7lJ z|CQzKNVF0Qcn7x}(*Wro%0ND8EUtyWvNUqyM@sDL_zx)0y@Qa;QOGBvK!zWz1x2iZ<* zOVzp7SlnYh@F4WTMoGX{4o3^wyDRXePO4IG&GDr<67cHBEV^c{7*A`PmjGHlv-b{Cs814iOgWF+& z>Fuy-i8PQ4n25*Ytvx2K4#?7Xz_w*0vW|}CAHv)i+qw?U1WGT{CZq}8SzFo^iYtp_?R3=`-3=0aNov++ZxB?BJ&f?ddYm z^C@zFn3zSIa-$(G&w5AJ=hUJs%?XG(0f)Ac3iup{rQ*(*HZFzvIQgDlCPT&P2tA*F zliw^X!!)!DR1DVwlj^Qet!XJ-b+jcG92P@JCPoV35}4RGH<4CTD7p%YbU0!682=M6 z3UFYN(82wTxRi8qRncZ;lWf?{0I2DN8|ZX!AH!xG*#^}IsvAu}FBXS|iz2ZHmL1-O zy1-xLdy<}@C<|u@S3KoMM+`8Kxf zzxj@5dEm&UmI>CeIOjAcZCf4HF1icpzgTDe_<=A z0qw$NL;Mo1= zWGmf9hhVAZdn_^!M@jvH3=*D`{=y5Cis@MN`3Osj187e{hc+VLJ>FvZC9Gt`Pb&ucgNzZm>dlKyHv@{Ch$$StwK^ z>x56qDgn!!*wR=FHw%{5YH=ED!JkB5^C@X6LdfYH!3bveU z5^s_%XoXRHA<5+5z`~gc3$NXzX521pZ!Dr)guze8$us|s!oecm6@16S)7cMxbmOuUUvVv+$CHJmnvL>q(HZ67JSSv_jN-! zBj%NxaFkg3U0f`_EiMw@5}%5r#ChTyVw!kDJSqMpj*{}kGw?fG{8Zd8ZZ8j25zGHq zZ@a{O5Gngs{6YLi+%0}4?hrp0zYv|^N3l@vB|3JBvX~`iid$fpBYr6!6c0cUt*g{U zy8e={8^X(+`Oh?u5mjEwik>2-;35iM94GopT|`y&f&R~U43h4p-1uj|e|GKhx0u@l z+XJzs*u$-Qi4L)a*jdzw_k^j^Qt?f(Ct#8^S6m9k{(HjYFAkJ^P=c5m<5uI4l2dT) zjCiI>Q>6jo0C9>m1^RVygtSI%;1+d^h5d73F6>4CE3==g0JD7}j)(u}!bQc8`W7uR zWmBlXh&O-5#O#`Z_ABBQk@;=_(Z6ZpG;t=V$cOocFjIV8oDSUK;w#cCQoN$xklv7d zr9LS4s_G*Jih)S02IfA0;%j%9yrdiA;J@YC%bX4VQ@9G3^$7Wg;PY>;3&eDB$X~Fo za+{a^#r}pc@lW9&i;ol^gZ|B5MZCWM;8x+Q;%&x1`fnnomb;HGr=@+lT?L*S!VsyI zxB)I7iY2H~50$nD2V6*8+FnurxwH?md3zz3cfhUo<6TwXL*D8zR4&vHP{*Ktf;xen zdZvEHRQN2qyvo$C=)8V`VmmR{-0C+>fmC%BGLFA1>PIyBH_O#+>=<3d9@QOmc6UJu z+r?7pISxsjvS!(&3Qw8a$LjeCkcH(r@q;AE(x*pAtKC=FFr znd~;(k;9G~c8?|OKovpO;1-4?OtBp*J$;Uyrx#GgZna<8JM+NMfT{f$(x{5j$aeP1 zlsB%N@Wig0348KddI5uLrp_y>%v7PX{mZ|qD&?X6>cXzFz%Dh06EC|2&;TsY2U343 zV*upDj+!6n3xW*TW$e@a0ToPxVZ&54OefVh_Rl0t_hU+6RaA9M5~`!auc<7Ugkl%d zMr*khi|?MI)X-s=v{c|>Z{cop1a{-c>JyhiB8qqS<7;*`XX*0;y zwV*AbnnO9D;uKW^xdo=0Ld9Z0#3V|YOes?b6~!de_oHkcg<|`$tYn^sItitg%^x8p zavi1YHcAweUSdT=hn>$0kW^#b3Mp4-u+v$CvNYF*!hR}^go>i|6lI_>pqj)T_)gUS z&a)#xHL;I35PA$MR66v5*fi)39ml|6qle@Lhlw0+q6M_V#J3G5f9>$jo=1amc3U~* zi1TGJIA0ZqbKWhXPs2f^1vuh63#+bzMv@fYxWsFa`Y|~&Z1`AQP=^ay$B@+F6Nch$ zI@K_AGVX52J$jSK*h#pplHek{VI*a6vJxJLlZH@C)Nu9;z-Vj&GvsK>%`3jCje+{NPHSHf>wsTpmtfLKK=DA415;#W?>4 zU=O>w_sB>>e5d35H;zg_d0l9&N;LM*+tJP>^+;O7ZFv3RC>Om-+F=o%$Nh1d- zpS2;%Ri5tmSe*1zA9hyIf!8bGJIEkSyAcAGlZy>O8+3o)syKmJ)8b#%&o?rxcDOCH zrUfS*b49)PYGlukfO>!i@IJC34m!fYD;D7x;7FpP$KqTi?5((16&GEn3?DHG7qH>h zH(d12E_xj`7N5@;I$_+zi6rjB!=k>XjEQw^ooF$Nb|0a!pGbp69;klmf#ZD8d*Dbv zJ0AlHrQN#^kFau*2 z-nrU%*^QT4`EJznE)vq-2l<>2UwBTqbrdHS=oSkUhL`7f@hCDWew3JCx9k`k!|{@V z7Y~OUqdU6Y%&`s}598%WDGg^z*|X1eo*Z;_b#-!mNK&YSbZ~7#?>7z;#2&8mxO>2Z z8_P}L>bVBdyUq))FS$B=OFoXD#mnK-{D6J-%wew z3zBQo{U%ItB|(bfT})Q1qG$M+UZsb*7JPTUx$ufGO88o+ zgYBlq7*5X?Q|X)H`xsc|h)2X<#cP;OagqiTES>Z-SHkt>^^!p{N}C05sj3tpd5d?2 zKxu~mgZB*}{Q-7Y-|F#Z8Lp#f>S0Cr)xV_K=z~Vv)m)rO;_O*{(j) zM11FE>@c+Kr_pt#wUlsKHX3DezW%R0aSFSYfJ-vjdEgyQ3ejQ>Zp-5vH7sOe$wwW@ zfvkA(wQ=ZL5OQQhd(t4Jqc9y`ZDJmNAKvc3`-QJ)bsp#^((*+8b`DJ@8-6N(?B&1n z{BH&N??muF;CEC9UPRkVTH-9U>1Uj4?|?}f%*&8}%sjRWkH#B~^;9Lt$oOu8Vy15M z#2%`-WQv-jU!P?yIC37@eiH9^joWb^O{*S<;t%6R8Zv1t88LyxU4>yaMJXW9<8c-r z_t3BsQdUaX*ol>tmthebWT5S5v+ z0}cQV0&)P~0lo+P0GiV-iuyI&#rn8p1;CyI7+PVamdu9!E}#k6lmV)1!|pl!RE6EH zrWkoRFtWn1%o93$wqxjYs144C!~HGvIiowM_S;})&q9>Z&KP=bg1!qtIZ@|XB_JRm zI(iuHLDhI$W4a`#ef~T1dkEC!0uBR?0N6s*kAP!<;{cXZKS4hMI0-lf_!)2-a0ZYE z$OoJSoCBN(TmW1ITmt+8xD2=gxC;0ca1HPq;CH}vfHF*t+w+T>wZ{i}W6(9}ozeC>* zXm}5oZH>jKsRRd+9?9&u)g5eYJ|Nh3>&D0^JUtZihhMs{WFU`-lt% zNv^8(4={L(RgAu(KlaDi4;jtt@zd%=gP*@nhpUS`J@FS5r2o4U^yiKVbN>~fnmsGrKi z#;$leU1s$ag%g0GGAV3@ItX0^NPyol`7U^p2vA)ZR+!}<+}PS8{3zIj(D@o08P2!k z){q7C9NmIdnNZLR;0(qM%KJe44+rIafhz`~@F`^$7smI)1x5p-F@&EFN}9N-8YPL+ zKx~wKg6&bKbeSR^{ShG)t0C6~#@R;X6R{rTWMi;(szL-w=99sxO$xso;Vlv4{21sm z!o|~1xXzGjjz^eeLkv=VSK;z8%(FUy+l%4SnIYCtHX#CA zz_G~RP?F0n#(xA2#b#|ND11U~dkL1A*y$^zyA#6?dlrUmMY9x*hHWQM z69F8I+D-@+q4>1XWVg>u1>I0Jp8^5X6kzY9gk*HwhaW~o znIFbKMnkrOu_JskE~+%gyM5Y3#^c2=#izP6Ugg41JSX#5B~y4kTH%n6c0^vu$f0=T zNF(?PMIOZ<{$8+Q_-#<>2$8J3#p9j%J%;#g;7lmqI@5H#&p^(zdOHIy7hu;FrU=BV z0&52tuoR^W$7nb>&q``0O66i9kV2FIrR__|mG>gaVn?JQ9GJtERI->l(>x^woe+Nt z%%efWZP2usWFjo%#!#G_q`Cdt~#I5D1yG^T)mDWET&1Kl(kai&Y15aV5J|1%m= zD60>w-LruL#(_N4%~c539HwN{yL8DWGAeU5nLNw!PDn>b_&o|gu}WRYo z`_4G^l_=aqY@^|pDTTu)i;exW_zd(Y>4ca&Lwx87V$M^zb`vo$?lM2wiocui@q{GO z2&_wXf_*NpmSgtL@WjJCT?xfvVxd!DyNaY^^VL8ZZ@+|(WI!%|2$WQ%tbTujJiM!v zhIII5WdhrI^2cZg+6r5QyTW2}*;}Lo4I);Rf54hH(<|Ot-h`oryN*+0Kfqp74j(J6 zb#0}kpN5u@wcWL`^fF(0n+7~vVJfrlOJ>qdSV`@Lo}xZVSWo4@0cdOr0h3MOd<+B* z>LWGmY-|&y3{HkHN(_3QUJ&u#gmu`u;N1zdlPtGG3B<6Jw=J{}{|S8?DH}r;(?n3a z7Lcg4&ux{qK2|X|fiT4dyfKpsZ$Yo6^f>9z6G3+e+`~H%G{=Ghh9Q=Ca%0ifFG1X2 zW2Lwsa5EPbil7(q{St_j+zUC6Kn~+HVz*e5x8#@*LvA%8~PLj7%O@>XCST41_;yXnS(? zi4Z?Zq{;kRLFS71uJi)$iFWcn4HUZ4BH=zQk^?R9Ndhs7K>NytlABA4u;Iw+UAmRE zE;4%Vcyd`}ZOj;?v6Iq&hVba2HC<4@^T=~9l=j7Zr!Bb*-iZ)Z8Hifh7rfm-W})A% z1umlB2c#=}Wi>n;CGZ63W<687w2HL~l8%c&tmr?vT*S-T;B?+Vdm$%M&?>}0SRn=B zSbM|TYt{xV!hAIp{?LAk$6(V*0Tz>tc8aylt3W^N?PmaAxYF;~kmIbE$^_Wpll3{s z8;l;pmGHm?K8C|3S5d44BnvDy6=D=Oj7i|{CTEjs5+>?a6GB@pNp57k$90r2hBqGd zB9mq+_|c1b_;bmTEO%v1u9Qw$x((bDC6{B+uEjvCJmKH+ysR{o>Ae&mt8g}ZGRiC~ z5o#~Tbk^F`L#x8Z6KK83O%pykjQ9WUn3&;;Q81(D0e3UScH}0n@*)}IpeAT3W1+`F zSR|1Q0i@G-KADThM%0Q7EOD_1X zB^TtiB#^(LnL*)Zv;kk4%57bpa0WvNt3h!OU83HyUp$Z1(Z5%}VP%xWZAz2$CD?{y zA5Ex*{yGdfrJh}9A5e%zUkqH>ZF?0vbpy#Dl0*iV-(WDCWZ-Q4CbXcL5Omy%QOh=r zU;c%%_$j{9!i2?kVg&LP?z3loCEHVFQUGj6{|ffFpJTeogabR!ju4=p4FR`#^i7&h z7eV}M2|kao0)lv}Awc{A_BJ+Re_|8Ogy`8P5CQ+3?u2mtZn_6Tz2DM(5JLYRW06Cs zHHY!}griuSKZe`9exa8kZuWpaq>mu5_l&*(ha2EvM>8CEYRScMZMb-@J(s|(=&n&07WBeU9L6vPt}8ehNQ>f1RHNVbcYCI&L3Z%rD`W;f}D6_)qu~ z{3-rtJ`ZBVh5TdwDgTTw;!F5a-Yz5wb0L7XP*@}!6ix^yA!gJM0*-?r7PSb%G|M57 zv>$sI2gUEi@3E7Si#7N{2ze0fJZd4p$X51EQV`bMEs{fu!>W1`?v)#ho3F-W#XAq{ z+P`4k`wDXKCT`}sEfq+GQW0+8a^VgzPuV1U$=W7SjnnOr0j z+&>kFo2Y8yo~hcJFx)rgz}-;;H5r;sn%{B#1FsddvD&8EX4>Z37TP#%2W@9<7j1&J zo3^iZh<2EEgf>+>UOPcMT{}lRS36(3RJ%f(t^Hj4mG)chUhO{ZL2a(~N9}R#PujEE zOWG^iYuX#yLhVECV{MVPSW9)h4y%beA6>XES{I{htZSxgp^MYS>t4}y)AiF0)Q!-k z>L%zW>*na@>E`Q}>Q?Bob)W0L)P1YltJ|kLsLRzI(fz19t~;r_s=KDUp)1rq&{3@B zih57Ik3L)K?*(6`h(^l|!l{VV#;`ri6J`d9UX^h5L`^r`ys`U(2E`g!{K z`X%~z_3!IH&~MOxq|efC*YDFG&>z$v(jV0y*Pqm%)!)z;>L2M}=!^8!AR3GYZ$r2t z#?ai*!VqU@XXt3?W$0^2G7K?{FibPdHq155H!Lx{YsfZyY53N#*Rap9-*CWi$dGF| zYB*-dGh8-YHC!{?Fg!4D9-@cQ!`q{|M+=WQk9Hm%Jvw`I@#y1`OU<@qOcm#*dAe#%$xijGq}lH|{ikW87;zU_4|zY&>baWJIIyDR}yLR`IOr z>F*inY4HsAY~UH=+0e6*XJgMMp0S=yJ)3zp_iW+m@a*6@-gCBRn&*7a1)d8%-|>9k zbD!rS&s@)+JWqP&d7k$qraGobQ$16(sj;bvsi~>Csinzb>S#(Z^)~f2C7K4B2AhVM zhMSU2V@=~tlTC9?^Gx$i>85u~OH4~m%S>xc>rER>8Kzv*anngtv8lvVYU=2n;N90d z(L2d|k@qt1&%JkhAMnocKJ0xCm#6#t4DdvzuY zqTeOIU;M8675Wi>$zS%@`y2gD{uck%{%!oz{I~jN`|t240hWLo0k(j!0DC}mK>dIw z0giw+0qp`30#XCg0(Jx(3^*KcGT=hMWk{;}1qK9$1X==n1@;c?6WBK}DR6M$kiemV z!vkLnoESJeFfDLdU`AkOU{)Xr5`x5_20<}F4TG8nH4ADU)GDZTP}`t{pv0iTL1Tg@ z1*HYe4VoA9VbG?aEkRj9*+JWaJ_*_$v?FLw(2by*LAQc#2i*%Q2)ZBiFsLMm1lJ6X z2yPJEFt};3Be-*LLU3a6wBT962ZB!qpAJ3~{A=*F;6H-z1s4QA41OH^B$!l-s5YkB zv})6i3-Ej=tfExjy*EJ>EpmQ>4l%OuMT%S_8G%WO-UWs&6_%M!~nONQm7#9Gr@%NlC6S!-Lvtl`!uYhA0|+Q1rP zZDNhJHnX;{I;?H2@z##kSFD|^U94TL3DzX*JnMYxTh?XPRo1oE53Cv153L_rH(R$@ zGp*aLpIU#ip0xgKJ#9T>&9gqXk{X&Ch8mU{)oX;+2(MA6#v3(e)>v0#XN^lWuGJtl z9W|3`eo*r^I^12gcGo&sE2q};S|oH_Xez{lM%qT%M%%{NQf#l;#@fc&Qf=dH6KoT0 zlWdc1Q*0}32W&ss4%u>TH*7a;w`_mdZrkqI?%M9z3T*dng*MiK&kK7qY<}2+u=KEn zVQ+;k3VS~-4KiLaA@L4Z9XDPm~E@QCDyu@U1VCPYk%m>e-R;*E$|5pyEuM*JReJ>pKp z{fLJVFCt1KoVXy+78x07j~o}78aX>MEixlAD{@EV?#Kg?ha*o$o{PL1NuszYK1zrZ zqogQplrBmiWr*^KGDi7D`9}pt1w{o%Rf`IVvP4; zWK_-Y%~-bi^9k*vO8xdWWSo7l%1MAK6`5RjO^F5)3SGDf0q4u_LteavcJyWmwh1nV0KRS#q3|Q zFK1uPzLR}7yCAzT`(gH@>?hezv*|YNHm_}#ZMC-@*!J7D>)UQ@yS43)ZFjca-F9zV zAqI*co!xQvM+^pMUvyn`T_IN?T=62ch!p!2S1S%FHW!B#hZi?4Zc*$gZe852`19h^ z#Vtx(mL`$^mhh0El#_$p0mC)#@W!>$l2K0#2M>s>TKq0?rh;~ z>2x^boUNR#oo$?Lo$=20&JNDb&ID&qXJ2POXQH#e^Ht{n=RoHm=Md*m=P>6;=P2iB zXR31wt_r3u!6mvhF0D)F(z^^U50}wpas|4AU1pcn)zsC@)!fy>)zal~#ku;sUUdy{ z4Rj51CAkK>hPZ~hhPg(#QeER+8(bN#9M@6T&#nuutFCLV-(0`DuDfoz{&3xMy>OLa z*UtmhmW{I$NE*h(G9&8k1iFzRZlbLbLu zNxGT3*|;X82}VkN^-20^xJ)Do-%_I{&cvfPk2iHUjWDGtJ@yXM7p7gNuT9^W_L}yg zpDr{JFW$@M72y@>)zHh~mF6|qYo6B^USE0b_d4kHgV#x~G~aE$pZNaEcf0Qn->-ak z`5y2k7E&{{CZ-i5$+(1Z-Nr2)w_+S73Ma{_uv5cNC7&97>a|l7PrZI>-l_Sg7N5#K zwH<<%t$uC`Vap_3cNci3!I>^+dY>72X6~5}&TKfd>CDGxww~F3=BqQ`oY{NkhchS7 z+&&}Z$$1`mzIh>ejq{r3Ir7@&b_(|KRX-_eEBKc@H8tiiHs=f-l!}q%>+84)acjc{Ux1SywcjOR2B` ztIX*TD|w5Cb8kamLM?PD)ER`Pv|a@5_J( zcz+20PjQU?84fo+r?j?(8%wKm)H{}Ihht9!2dYzO3$6{0O%WV^8co}9!L%(GLfdgv z*OsqIQ+X;(!JhU4-kUDuO_;R>(j~kWc*0@PHuEg90_4 z6lmXiqHk!1sa0sMsTDmAz{cY0bs=xk4IxQ1BZMYt%&Rs2=G9Vd=#2sG@!rq;o@ON8 z7XsD*vH-iytGPYqS=_hgm2{tZ7(Hx$LpX-_bFjZ)p2ppRe%m~SyK7!UpPN&;BJ%{U z1n!~MAvE0jDy?H3NTaO=nq<|O=2;2-s-`ZGMEKTCiXe1IL|-~IVgwx)ffdaND!mrb zla7t(O~*wf(A0?TbOQWL2F!}+!lgyfVRs^^@DOIl78;edh5A>|q{iq>+G2Vp6=r63 zqO&ro?(IxM-^uJqm%%Or=IqS&)ao)So9z_)%o^O}Vg7tg**q zcQ^q@+m7OB-Ep_{Ka;P{gY^G-tSnz7GM^M&JG@T#w~6NxOC}%8`!(-c-tT#QzBWG~ zKkmw&D{o#K;Dg7`=4gXwxzb#7UFoi6t`A%rUD>X$TnAj=yAHVyqYXZZ_V=di zw(EiG87_=}p-Nn!#)xubxwSl0UMR1Wf0S?Gc4q_bT%M-cpgE^0(A3s;)n;jTYtLwF z>QZ!{=q~F5^AZ2Ut@{+x7z} zMN||;#Ts?(V(&(dv4V=&up>qYMIb?{hy?)^6fq*JV8xD|wW1pp*M=QC78KjcS`rjc zRFMCklamm6_x-;A`sU)v%$fV1XZoDOoH;X}^FNn-u2$Hwa7N+A!mEYv3TqZQ6iqFf zTNGcEUX)RkS(H^&t+-RMym)W%_2Qq!eZGwNGW$!ymz!UzeQp1B^w-$0n=z8W;P7i7 zxgsPyTB#0_Quo8+uP?KU%wAHbXXG*_&G4BFgT<*G>jcQ>>V5yE`9Ohh3w56AB9Gv z2`MfP$GWVYrj{6k^oCCpMzsHGw1oc(Vi&fEU(hv$NC#>lD@cWR5wN{UaL@#iFj{=9z-NQa{+FJ+xuEb1^%Y&N}a_tv`>i%(xGm=|jn zAY88&>%s~4**ndvUOSEbsWHB@ct3i5A;4SyH*B8zKy9p!w2HhXep_s)$@wF#j&?=RDUh)?ttYbO)O zEvFy8@2J@yZe;GdlDe2oq=?dCRItyNM5U}D``O#@p2~l#%Gf4h2eC=>pWTHKcy+r?P*2m1=`hkEe$!8 zOSY44(@y)Uxc!t<_k|q&)h(ZrouAR43-CgFz#6%J9H@9_ zJ{{e?j(WS?r-$}mXnU;&yZh-_~@r!8H}$+PKfN|_|3{Xd4&!bLgMLUw|><;T(AXJ?Y; z!VU84WkIgoJ*xNYAx-X&kHj`4(w!DV>09dsK+v!yqwTH76TH{~dq z?)psA!xqu@zoJPhj-};6bLmk0R8l-VO?JE7sp#xATDe$5tE7T2)Xwn@mEFh38)r(XY0`BHxT&T( z_Qmw!QzRXEd!8^Qmpkx+9!&jPRF*;@I-8P->oxMck!pd z-AeL(+l;ziTT9{fMvx@@B^5o7qx__G^z!c*O6iL2T|fGgn_DmXv#cgLtUpR#JN#%) z;2>J*+Ksl@WRU8O1+DDbioOQ-r7l$)Q;q6IG}7FgI;tnr@V!b3errspAN)pN7wjUr zLm+Lbr=f(TU37Hy7rH%uEZwU1nMBFmsd(fv^Brm~A50Dr4wq|0nb=^dc?$R-YVw7f_Qn zr)aHDJGyiouY&4MAmz*16#FQSItGrRDm%_lm{}73!wJAZ*oNNCNh8m{9LXbZ0Ikc7 zrtRE18k|%{HI~LxSIILZRq{+FZ86vpH!{xUW#konLMIH z$)bOEs+rV~#`fDwO}768-8F|1T%9o41iNC$1wCE}AR~u-)pwc=GR>LVb^# zQFW0G<(!{J#fkWY^}t9PeRU`8?tO#)-qVZrB_>hsAaAmDe@3D48uDH-j!K{Orh{Ae z(Q})wxFKw%>OUTnhm$9Lta^gl$-2;_iDzkeIhK}vJ4qpD3aRay=d>@f3wg$Wp(@vG z=z9xOdh{B{102~wlNzm}UNC&$8_|WPlY2M>_!V#0{!s8RP*YgyG-omH0#!cvtPj(caa*oa)2&1JA zkLjyxDqV^!qWzd@%l)vPxalg&e&$cg%gw0$ljF3#RX^Me*VBRVYv}l-D%8&ID2J09qoqp|WM=)YjgN zq+Z>reS@Xsbow3o(;-^rFQ?zV@EZQ?G>UoXKwX~WKm@zN)Jocut_0kqF4r>XtX~;6 zTir%g{a(}5+*E3=7*4aS@6gHVF%%$mB;Sd7lrqkU#<=vRruR=!_fI$$MD9keU0&0Y zPJ5`y;q$b$TQ4#{v4h_Ifidc9b6Vx|n%b0yQFW6@jO%vfd?S@aJ5%V$w!75XwHh7$ zHi&9JzD5hqWYdNx=V)L3({y#)VltmSojSSH$BS4OT2!}yUYISVx|SZaR6CEDM~m1++8NR90Wk@Nx<*OvW5Zyyv=i}_bcvAQRj=Ut@ohbu`w z`z589U7|JS=V-obF!>%hOgH44$UZQFF4dk*UvJ?Be9&_`cI6bdksV7f57(gJQ@_!h z1v4o)XF1id=}3zkRHucWNo3Tn9&MQyii50A+ z3sN=*qO1b%p9*9no?~J`<-+m+2cDqhxmLupz z(GN=K?@uq6cBFsq#Zc+dJ)}|JrcOPtQ0Kl<>eGA(HF}gqi%YA~j}fz}bK@Kue>8?h zr^M5Q7T2l0%Tvm{^nfgF*HXiP4D$KigIZ6WN!&O!EvjurMaODW>9u0&p|XRhDc|)v z<<6K%UI`m0vAc$@)XyO4j?G^Ow%J(`zH zn~Ledy}j4K%jK4od0%2km)SlYFW= zknC^)EsEVuv7^?}H=J_aJn;xcM2(>2Tg_?U7JPO-+=X7?gln(&gXrg`=QQJ<8%22S zpi}$jk;@lsa39-}Bsf`eiX6M3v|mbnheuP~tH0^Z=6mG$V<44J#An`CSLx!E<&^Zj z1KmA$k*qG>q9;=i((sGegLCjKYQD5Tbqr6UTGD0IepCcSc5Fz4&stM#YbDJU$5Gma z*YxH|1YPKd<1C8a(N{0DfyA>U+unf&toegZ&$pxhX@8o^6 zEm?d#N<+4YXms*b3W##2h4WjI)yZzOyEuXBPJBzvKbg}pJkux^I?+zsv2^U)K8kw& zfY#RRJ=?GUX4U$y)lZ+smmuZk&pGh~7nqCO>JIg9 zxw!1)>Syops$F}r@W7unNYj^v`4;t>a=dxP! zW++ul7RmE%UTL^GU%YybyAv-CUSe}M{gHcCl3^-#i-gf(Lw-4JjoTXeD*TZDCs?pt_hdeiExSFRsw;wn0ch%Tw*4ajD zG@Q%3(eawdF{Q5x=$%k+O<-HjBFP1u>0JWs

hg?&ORq(}U8QRBsI(iFM`TiJk5D9ICG2 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 u#$JpMM@^=|8&blG0V}O8z!QV2PQ_WuA_fTW24 diff --git a/workloads/sqlite3-wasm/emscripten-4-post-load-init.patch b/workloads/sqlite3-wasm/emscripten-4-post-load-init.patch deleted file mode 100644 index cc9975b7..00000000 --- a/workloads/sqlite3-wasm/emscripten-4-post-load-init.patch +++ /dev/null @@ -1,41 +0,0 @@ -Backport of the SQLite 3.49.0 fix for building with Emscripten 4.0 or newer. - -Since Emscripten 4.0.0 (emscripten-core/emscripten#23157), the -sMODULARIZE -factory awaits the Wasm instantiation and runs Module.postRun before any ---post-js code executes. SQLite 3.48.0 registers its API setup as a -Module.postRun handler in post-js-header.js, so with Emscripten 4+ that -handler never runs and sqlite3InitModule() fails with "s is undefined". -SQLite 3.49.0 replaced the handler with Module.runSQLite3PostLoadInit(), -which extern-post-js.c-pp.js calls once the factory promise resolves. -Remove this patch when updating to SQLite 3.49.0 or newer. - ---- a/ext/wasm/api/post-js-header.js -+++ b/ext/wasm/api/post-js-header.js -@@ -7,8 +7,7 @@ - installs will be run after the WASM module is loaded, at which - point the sqlite3 JS API bits will get set up. - */ --if(!Module.postRun) Module.postRun = []; --Module.postRun.push(function(Module/*the Emscripten-style module object*/){ -+Module.runSQLite3PostLoadInit = function(Module/*the Emscripten-style module object*/){ - 'use strict'; - /* This function will contain at least the following: - ---- a/ext/wasm/api/post-js-footer.js -+++ b/ext/wasm/api/post-js-footer.js -@@ -1,4 +1,4 @@ - /* The current function scope was opened via post-js-header.js, which - gets prepended to this at build-time. This file closes that - scope. */ --})/*postRun.push(...)*/; -+}/*Module.runSQLite3PostLoadInit()*/; ---- a/ext/wasm/api/extern-post-js.c-pp.js -+++ b/ext/wasm/api/extern-post-js.c-pp.js -@@ -75,6 +75,7 @@ - } - //#endif - //console.warn("sqlite3InitModule() returning sqlite3 object."); -+ EmscriptenModule.runSQLite3PostLoadInit(EmscriptenModule); - const s = EmscriptenModule.sqlite3; - s.scriptInfo = initModuleState; - //console.warn("sqlite3.scriptInfo =",s.scriptInfo);

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 t-u#>JL(~@u*AVlOz+I8h`xF{&&={vWDg0W1Ij diff --git a/workloads/sqlite3-wasm/emscripten-4-post-load-init.patch b/workloads/sqlite3-wasm/emscripten-4-post-load-init.patch new file mode 100644 index 00000000..cc9975b7 --- /dev/null +++ b/workloads/sqlite3-wasm/emscripten-4-post-load-init.patch @@ -0,0 +1,41 @@ +Backport of the SQLite 3.49.0 fix for building with Emscripten 4.0 or newer. + +Since Emscripten 4.0.0 (emscripten-core/emscripten#23157), the -sMODULARIZE +factory awaits the Wasm instantiation and runs Module.postRun before any +--post-js code executes. SQLite 3.48.0 registers its API setup as a +Module.postRun handler in post-js-header.js, so with Emscripten 4+ that +handler never runs and sqlite3InitModule() fails with "s is undefined". +SQLite 3.49.0 replaced the handler with Module.runSQLite3PostLoadInit(), +which extern-post-js.c-pp.js calls once the factory promise resolves. +Remove this patch when updating to SQLite 3.49.0 or newer. + +--- a/ext/wasm/api/post-js-header.js ++++ b/ext/wasm/api/post-js-header.js +@@ -7,8 +7,7 @@ + installs will be run after the WASM module is loaded, at which + point the sqlite3 JS API bits will get set up. + */ +-if(!Module.postRun) Module.postRun = []; +-Module.postRun.push(function(Module/*the Emscripten-style module object*/){ ++Module.runSQLite3PostLoadInit = function(Module/*the Emscripten-style module object*/){ + 'use strict'; + /* This function will contain at least the following: + +--- a/ext/wasm/api/post-js-footer.js ++++ b/ext/wasm/api/post-js-footer.js +@@ -1,4 +1,4 @@ + /* The current function scope was opened via post-js-header.js, which + gets prepended to this at build-time. This file closes that + scope. */ +-})/*postRun.push(...)*/; ++}/*Module.runSQLite3PostLoadInit()*/; +--- a/ext/wasm/api/extern-post-js.c-pp.js ++++ b/ext/wasm/api/extern-post-js.c-pp.js +@@ -75,6 +75,7 @@ + } + //#endif + //console.warn("sqlite3InitModule() returning sqlite3 object."); ++ EmscriptenModule.runSQLite3PostLoadInit(EmscriptenModule); + const s = EmscriptenModule.sqlite3; + s.scriptInfo = initModuleState; + //console.warn("sqlite3.scriptInfo =",s.scriptInfo); From 8c7e7568f9bfbdda9646f8e2a4a26abd0e682df3 Mon Sep 17 00:00:00 2001 From: Daniel Lehmann Date: Sat, 31 Oct 2026 03:48:39 +0100 Subject: [PATCH 2/2] sqlite3-wasm: update SQLite to 3.54.1 Update SQLite from 3.48.0 to 3.54.1, still built with emcc 6.0.13. SQLite 3.49.0 and later work with Emscripten 4 and newer, so the backport patch is gone. benchmark.js now passes "--testset main". Since SQLite 3.50, the default testset is the "mix1" list, kept in a static buffer that speedtest1 tokenizes in place. JetStream calls main() repeatedly in one instance, so only the first iteration would run all 8 testsets of mix1, and every later iteration would run only "main". With the flag, every iteration runs the "main" testset, as with 3.48. `make dist` no longer builds speedtest1, so build.sh builds that target: - Run `make sqlite3.c` first. ext/wasm/GNUmakefile stops if sqlite3.h is out of date. - Pass `CC="cc -DSQLITE_DISABLE_INTRINSIC"` so the host c-pp preprocessor links on Linux without `-lm` (speedtest1.wasm is built by emcc, not CC). - WASM_CUSTOM_INSTANTIATE=0 uses Emscripten's loader instead of SQLite's fetch()-based one, which JS shells lack. - emcc_opt=-Oz is the level `make dist` used. Without it, speedtest1 builds at -O0. - bin.wasm-opt= skips SQLite's extra `wasm-opt --all-features` pass, which makes Binaryen v133 emit compact imports that engines reject. speedtest1.wasm grows from 862,092 to 960,233 bytes: 3.54.1 exports 71 more C functions, and speedtest1.c has new testsets (json, star) that "main" does not run. Score change against the 3.48.0 build, d8 / jsc / SpiderMonkey (each test alone in a fresh shell, 10 rounds): +1.8% / +1.1% / -2.5%. The first iteration is slower on all three (-3.6% / -5.8% / -6.9%); the average iteration is faster on d8 and jsc (+7.5% / +6.4%) and level on SpiderMonkey (-0.9%). Part of #277. --- workloads/sqlite3-wasm/benchmark.js | 5 + workloads/sqlite3-wasm/build.log | 4 +- workloads/sqlite3-wasm/build.sh | 20 +- .../sqlite3-wasm/build/jswasm/speedtest1.js | 10620 +++++++++++----- .../sqlite3-wasm/build/jswasm/speedtest1.wasm | Bin 862092 -> 960233 bytes .../emscripten-4-post-load-init.patch | 41 - 6 files changed, 7282 insertions(+), 3408 deletions(-) delete mode 100644 workloads/sqlite3-wasm/emscripten-4-post-load-init.patch diff --git a/workloads/sqlite3-wasm/benchmark.js b/workloads/sqlite3-wasm/benchmark.js index 8a0f8956..47cd3f67 100644 --- a/workloads/sqlite3-wasm/benchmark.js +++ b/workloads/sqlite3-wasm/benchmark.js @@ -69,6 +69,11 @@ class Benchmark { "--nomemstat", "--big-transactions" /*important for tests 410 and 510!*/, "--size", "2", // To speedup, default is 100 (and takes about 4s). + // Since SQLite 3.50, the default testset is the "mix1" list, which + // speedtest1 splits in place in a static buffer. Calling main() again in + // the same instance then runs only "main", so only the first iteration + // would run the other testsets. Run just "main" in every iteration. + "--testset", "main", "--vfs", vfs, // See VFS comment above. ]; diff --git a/workloads/sqlite3-wasm/build.log b/workloads/sqlite3-wasm/build.log index 085ca3e3..44556fc3 100644 --- a/workloads/sqlite3-wasm/build.log +++ b/workloads/sqlite3-wasm/build.log @@ -1,10 +1,10 @@ -Built on 2026-10-28T21:51:11Z +Built on 2026-10-28T22:49:56Z Toolchain versions emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 6.0.13 (e13ee988ce3d87a738dd8f3661d02223308c412a) wasm-strip 1.0.36 -Getting sources from https://sqlite.org/2025/sqlite-src-3480000.zip +Getting sources from https://sqlite.org/2026/sqlite-src-3540100.zip Building... Copying files from sqlite-src-*/ext/wasm/ into build/ diff --git a/workloads/sqlite3-wasm/build.sh b/workloads/sqlite3-wasm/build.sh index 2cc8acb0..3c0a76de 100755 --- a/workloads/sqlite3-wasm/build.sh +++ b/workloads/sqlite3-wasm/build.sh @@ -16,7 +16,7 @@ emcc --version | head -n1 | tee -a "$BUILD_LOG" echo -e "wasm-strip $(wasm-strip --version)\n" | tee -a "$BUILD_LOG" # Check https://sqlite.org/download.html and update the source link, if needed. -SQLITE_SRC_URL="https://sqlite.org/2025/sqlite-src-3480000.zip" +SQLITE_SRC_URL="https://sqlite.org/2026/sqlite-src-3540100.zip" echo -e "Getting sources from $SQLITE_SRC_URL\n" | tee -a "$BUILD_LOG" SQLITE_SRC_FILE="$(basename $SQLITE_SRC_URL)" curl -o "$SQLITE_SRC_FILE" $SQLITE_SRC_URL @@ -25,15 +25,25 @@ unzip "$SQLITE_SRC_FILE" # Paths and information in make output could be sensitive, so don't save in log. echo "Building..." | tee -a "$BUILD_LOG" pushd sqlite-src-*/ -# SQLite 3.48.0's JS glue predates Emscripten 4.0's async MODULARIZE factory, -# see the patch description. Drop the patch when updating to SQLite >= 3.49.0. -patch -p1 -i ../emscripten-4-post-load-init.patch ./configure +# ext/wasm/GNUmakefile expects the amalgamation to exist already. +make sqlite3.c cd ext/wasm # Emscripten 6.0.2 removed `wasmBinary` from the default INCOMING_MODULE_JS_API # list, and setting the list replaces the default, so name every Module property # that benchmark.js and the speedtest1 glue code pass in. -EMCC_CFLAGS="-sINCOMING_MODULE_JS_API=wasmBinary,print,printErr,preRun,postRun,noInitialRun" make dist +# `make dist` no longer builds speedtest1, so build that target directly: +# - CC="cc -DSQLITE_DISABLE_INTRINSIC" builds the host c-pp preprocessor +# without GCC's __builtin_ceil/__builtin_floor, which at -O0 emit calls to +# libm's ceil()/floor() whereas GNUmakefile links c-pp without -lm. +# (speedtest1.wasm itself is compiled by emcc, not $(CC).) +# - WASM_CUSTOM_INSTANTIATE=0 uses Emscripten's loader instead of SQLite's +# fetch()-based one, which JS shells don't have. +# - emcc_opt=-Oz matches the optimization level that `make dist` used. +# - bin.wasm-opt= skips SQLite's extra `wasm-opt --all-features` pass, which +# makes current Binaryen emit compact imports (0x7f) that engines reject. +EMCC_CFLAGS="-sINCOMING_MODULE_JS_API=wasmBinary,print,printErr,preRun,postRun,noInitialRun" \ + make speedtest1 CC="cc -DSQLITE_DISABLE_INTRINSIC" WASM_CUSTOM_INSTANTIATE=0 emcc_opt=-Oz bin.wasm-opt= popd echo "Copying files from sqlite-src-*/ext/wasm/ into build/" | tee -a "$BUILD_LOG" diff --git a/workloads/sqlite3-wasm/build/jswasm/speedtest1.js b/workloads/sqlite3-wasm/build/jswasm/speedtest1.js index d505be51..987dcc7b 100644 --- a/workloads/sqlite3-wasm/build/jswasm/speedtest1.js +++ b/workloads/sqlite3-wasm/build/jswasm/speedtest1.js @@ -1,4 +1,5 @@ -/* +/* @preserve +** ** LICENSE for the sqlite3 WebAssembly/JavaScript APIs. ** ** This bundle (typically released as sqlite3.js or sqlite3.mjs) @@ -23,14 +24,14 @@ ** * May you find forgiveness for yourself and forgive others. ** * May you share freely, never taking more than you give. */ -/* +/* @preserve ** This code was built from sqlite3 version... ** -** SQLITE_VERSION "3.48.0" -** SQLITE_VERSION_NUMBER 3048000 -** SQLITE_SOURCE_ID "2025-01-14 11:05:00 d2fe6b05f38d9d7cd78c5d252e99ac59f1aea071d669830c1ffe4e8966e8alt1" +** SQLITE_VERSION "3.54.1" +** SQLITE_VERSION_NUMBER 3054001 +** SQLITE_SOURCE_ID "2026-10-16 14:45:20 555e07ef33f69a0957d24d8e555b702464a131d6f1607f4c3c1e4551e8e6ca76" ** -** Using the Emscripten SDK version 6.0.13. +** Emscripten SDK: 6.0.13 */ // This code implements the `-sMODULARIZE` settings by taking the generated // JS program code (INNER_JS_CODE) and wrapping it in a factory function. @@ -64,73 +65,107 @@ var sqlite3InitModule = (() => { // Determine the runtime environment we are in. You can customize this by // setting the ENVIRONMENT setting at compile time (see settings.js). -const ENVIRONMENT_IS_WEB = true; -const ENVIRONMENT_IS_WORKER = false; -const ENVIRONMENT_IS_NODE = false; -const ENVIRONMENT_IS_SHELL = false; +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = !!globalThis.window; +var ENVIRONMENT_IS_WORKER = !!globalThis.WorkerGlobalScope; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = globalThis.process?.versions?.node && globalThis.process?.type != 'renderer'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; // --pre-jses are emitted after the Module integration code, so that they can // refer to Module (if they choose; they can also define Module) -// include: ./bld/pre-js.speedtest1-vanilla.js +// include: ./bld/pre-js.speedtest1.js /** BEGIN FILE: api/pre-js.js This file is intended to be prepended to the sqlite3.js build using - Emscripten's --pre-js=THIS_FILE flag (or equivalent). + Emscripten's --pre-js=THIS_FILE flag (or equivalent). It is run + from inside of sqlite3InitModule(), after Emscripten's Module is + defined, but early enough that we can ammend, or even outright + replace, Module from here. + + Because this runs in-between Emscripten's own bootstrapping and + Emscripten's main work, we must be careful with file-local symbol + names. e.g. don't overwrite anything Emscripten defines and do not + use 'const' for local symbols which Emscripten might try to use for + itself. i.e. try to keep file-local symbol names obnoxiously + collision-resistant. */ +/** + This file was preprocessed using: -// See notes in extern-post-js.js -const sqlite3InitModuleState = globalThis.sqlite3InitModuleState - || Object.assign(Object.create(null),{ - debugModule: ()=>{} - }); -delete globalThis.sqlite3InitModuleState; -sqlite3InitModuleState.debugModule('globalThis.location =',globalThis.location); + ./c-pp -o ./bld/pre-js.speedtest1.js api/pre-js.c-pp.js +*/ +(function(Module){ + const sIMS = + globalThis.sqlite3InitModuleState/*from extern-post-js.c-pp.js*/ + || Object.assign(Object.create(null),{ + /* In WASMFS builds this file gets loaded once per thread, + but sqlite3InitModuleState is not getting set for the + worker threads? That those workers seem to function fine + despite that is curious. */ + debugModule: function(){ + console.warn("globalThis.sqlite3InitModuleState is missing",arguments); + } + }); + delete globalThis.sqlite3InitModuleState; + sIMS.debugModule('pre-js.js sqlite3InitModuleState =',sIMS); -/** - This custom locateFile() tries to figure out where to load `path` - from. The intent is to provide a way for foo/bar/X.js loaded from a - Worker constructor or importScripts() to be able to resolve - foo/bar/X.wasm (in the latter case, with some help): + /** + This custom locateFile() tries to figure out where to load `path` + from. The intent is to provide a way for foo/bar/X.js loaded from a + Worker constructor or importScripts() to be able to resolve + foo/bar/X.wasm (in the latter case, with some help): - 1) If URL param named the same as `path` is set, it is returned. + 1) If URL param named the same as `path` is set, it is returned. - 2) If sqlite3InitModuleState.sqlite3Dir is set, then (thatName + path) - is returned (note that it's assumed to end with '/'). + 2) If sqlite3InitModuleState.sqlite3Dir is set, then (thatName + path) + is returned (it's assumed to end with '/'). - 3) If this code is running in the main UI thread AND it was loaded - from a SCRIPT tag, the directory part of that URL is used - as the prefix. (This form of resolution unfortunately does not - function for scripts loaded via importScripts().) + 3) If this code is running in the main UI thread AND it was loaded + from a SCRIPT tag, the directory part of that URL is used + as the prefix. (This form of resolution unfortunately does not + function for scripts loaded via importScripts().) - 4) If none of the above apply, (prefix+path) is returned. -*/ -Module['locateFile'] = function(path, prefix) { - 'use strict'; - let theFile; - const up = this.urlParams; - if(up.has(path)){ - theFile = up.get(path); - }else if(this.sqlite3Dir){ - theFile = this.sqlite3Dir + path; - }else if(this.scriptDir){ - theFile = this.scriptDir + path; - }else{ - theFile = prefix + path; - } - this.debugModule( - "locateFile(",arguments[0], ',', arguments[1],")", - 'sqlite3InitModuleState.scriptDir =',this.scriptDir, - 'up.entries() =',Array.from(up.entries()), - "result =", theFile - ); - return theFile; -}.bind(sqlite3InitModuleState); + 4) If none of the above apply, (prefix+path) is returned. + + None of the above apply in ES6 builds, which uses a much simpler + approach. + */ + Module['locateFile'] = function(path, prefix) { + if( this.emscriptenLocateFile instanceof Function ){ + /* [tag:locateFile] Client-overridden impl. We do not support + this but offer it as a back-door which will go away the + moment either Emscripten changes that interface or we manage + to get non-Emscripten builds working. + https://sqlite.org/forum/forumpost/1eec339854c935bd */ + return this.emscriptenLocateFile(path, prefix); + } + 'use strict'; + let theFile; + const up = this.urlParams; + if(up?.has(path)){ + theFile = up.get(path); + }else if(this.sqlite3Dir){ + theFile = this.sqlite3Dir + path; + }else if(this.scriptDir){ + theFile = this.scriptDir + path; + }else{ + theFile = prefix + path; + } + this.debugModule( + "locateFile(",arguments[0], ',', arguments[1],")", + 'sqlite3InitModuleState.scriptDir =',this.scriptDir, + 'up.entries() =',Array.from(up.entries()), + "result =", theFile + ); + return theFile; + }.bind(sIMS); -/* END FILE: api/pre-js.js, noting that the build process may add a - line after this one to change the above .uri to a build-specific - one. */ -// end include: ./bld/pre-js.speedtest1-vanilla.js +})(Module); +/* END FILE: api/pre-js.js. */ +// end include: ./bld/pre-js.speedtest1.js var programArgs = []; @@ -139,6 +174,10 @@ var quit_ = (status, toThrow) => { throw toThrow; }; +if (ENVIRONMENT_IS_WORKER) { + _scriptName = self.location.href; +} + // `/` should be present at the end if `scriptDirectory` is not empty var scriptDirectory = ''; function locateFile(path) { @@ -161,7 +200,17 @@ if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { { // include: web_or_worker_shell_read.js -readAsync = async (url) => { +if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = async (url) => { var response = await fetch(url, { credentials: 'same-origin' }); if (response.ok) { return response.arrayBuffer(); @@ -263,7 +312,7 @@ function updateMemoryViews() { HEAPF32 = new Float32Array(b); HEAPF64 = new Float64Array(b); HEAP64 = new BigInt64Array(b); - HEAPU64 = new BigUint64Array(b); + } // include: memoryprofiler.js @@ -3702,17 +3751,19 @@ relative:(from, to) => { } - - var abortOnCannotGrowMemory = (requestedSize) => { - abort('OOM'); - }; - var getHeapMax = () => // Stay one Wasm page short of 4GB: while e.g. Chrome is able to allocate // full 4GB Wasm memories, the size will wrap back to 0 bytes in Wasm side // for any code that deals with heap sizes, which would require special // casing all heap size related code to treat 0 specially. 2147483648; + var _emscripten_get_heap_max = () => getHeapMax(); + + + var abortOnCannotGrowMemory = (requestedSize) => { + abort('OOM'); + }; + var growMemory = (size) => { @@ -4081,9 +4132,6 @@ relative:(from, to) => { - /** not-@type {!BigUint64Array} */ - var HEAPU64; - FS.createPreloadedFile = FS_createPreloadedFile; FS.preloadFile = FS_preloadFile; @@ -4127,12 +4175,12 @@ var _sqlite3_vfs_find, _sqlite3_expanded_sql, _sqlite3_step, _sqlite3_column_text, + _sqlite3_reset, + _sqlite3_sql, _sqlite3_column_count, _sqlite3_column_type, _sqlite3_column_bytes, _sqlite3_column_blob, - _sqlite3_sql, - _sqlite3_reset, _sqlite3_bind_int64, _sqlite3_bind_int, _sqlite3_bind_text, @@ -4146,6 +4194,7 @@ var _sqlite3_vfs_find, _sqlite3_open_v2, _sqlite3_file_control, _sqlite3_create_function, + _sqlite3_compileoption_used, _sqlite3_db_status, _sqlite3_status, _free, @@ -4153,6 +4202,7 @@ var _sqlite3_vfs_find, _sqlite3_result_int64, _wasm_main, _sqlite3_status64, + _sqlite3_db_status64, _sqlite3_msize, _sqlite3_vfs_register, _sqlite3_vfs_unregister, @@ -4169,6 +4219,11 @@ var _sqlite3_vfs_find, _sqlite3_column_int, _sqlite3_column_name, _sqlite3_deserialize, + _sqlite3_backup_init, + _sqlite3_backup_step, + _sqlite3_backup_finish, + _sqlite3_backup_remaining, + _sqlite3_backup_pagecount, _sqlite3_clear_bindings, _sqlite3_value_blob, _sqlite3_value_bytes, @@ -4207,9 +4262,13 @@ var _sqlite3_vfs_find, _sqlite3_column_double, _sqlite3_column_value, _sqlite3_column_decltype, + _sqlite3_column_database_name, + _sqlite3_column_table_name, + _sqlite3_column_origin_name, _sqlite3_bind_blob, _sqlite3_bind_null, _sqlite3_bind_pointer, + _sqlite3_bind_zeroblob, _sqlite3_bind_parameter_count, _sqlite3_bind_parameter_name, _sqlite3_bind_parameter_index, @@ -4218,13 +4277,24 @@ var _sqlite3_vfs_find, _sqlite3_stmt_isexplain, _sqlite3_stmt_explain, _sqlite3_stmt_busy, + _sqlite3_next_stmt, _sqlite3_stmt_status, + _sqlite3_preupdate_old, + _sqlite3_preupdate_count, + _sqlite3_preupdate_depth, + _sqlite3_preupdate_blobwrite, + _sqlite3_preupdate_new, _sqlite3_value_numeric_type, + _sqlite3_set_authorizer, _sqlite3_strlike, _sqlite3_auto_extension, _sqlite3_cancel_auto_extension, _sqlite3_reset_auto_extension, _sqlite3_prepare_v3, + _sqlite3_create_module, + _sqlite3_create_module_v2, + _sqlite3_drop_modules, + _sqlite3_declare_vtab, _sqlite3_vtab_on_conflict, _sqlite3_vtab_collation, _sqlite3_vtab_in, @@ -4244,15 +4314,19 @@ var _sqlite3_vfs_find, _sqlite3_txn_state, _sqlite3_close_v2, _sqlite3_busy_handler, + _sqlite3_progress_handler, _sqlite3_busy_timeout, _sqlite3_interrupt, _sqlite3_is_interrupted, _sqlite3_create_function_v2, + _sqlite3_create_window_function, _sqlite3_overload_function, _sqlite3_trace_v2, _sqlite3_commit_hook, _sqlite3_update_hook, _sqlite3_rollback_hook, + _sqlite3_preupdate_hook, + _sqlite3_set_errmsg, _sqlite3_error_offset, _sqlite3_errcode, _sqlite3_extended_errcode, @@ -4270,14 +4344,56 @@ var _sqlite3_vfs_find, _sqlite3_db_name, _sqlite3_db_filename, _sqlite3_db_readonly, - _sqlite3_compileoption_used, _sqlite3_compileoption_get, + _sqlite3session_diff, + _sqlite3session_attach, + _sqlite3session_create, + _sqlite3session_delete, + _sqlite3session_table_filter, + _sqlite3session_changeset, + _sqlite3session_changeset_strm, + _sqlite3session_patchset_strm, + _sqlite3session_patchset, + _sqlite3session_enable, + _sqlite3session_indirect, + _sqlite3session_isempty, + _sqlite3session_memory_used, + _sqlite3session_object_config, + _sqlite3session_changeset_size, + _sqlite3changeset_start, + _sqlite3changeset_start_v2, + _sqlite3changeset_start_strm, + _sqlite3changeset_start_v2_strm, + _sqlite3changeset_next, + _sqlite3changeset_op, + _sqlite3changeset_pk, + _sqlite3changeset_old, + _sqlite3changeset_new, + _sqlite3changeset_conflict, + _sqlite3changeset_fk_conflicts, + _sqlite3changeset_finalize, + _sqlite3changeset_invert, + _sqlite3changeset_invert_strm, + _sqlite3changeset_apply_v2, + _sqlite3changeset_apply_v3, + _sqlite3changeset_apply, + _sqlite3changeset_apply_v3_strm, + _sqlite3changeset_apply_v2_strm, + _sqlite3changeset_apply_strm, + _sqlite3changegroup_new, + _sqlite3changegroup_add, + _sqlite3changegroup_output, + _sqlite3changegroup_add_strm, + _sqlite3changegroup_output_strm, + _sqlite3changegroup_delete, + _sqlite3changeset_concat, + _sqlite3changeset_concat_strm, + _sqlite3session_config, _sqlite3__wasm_pstack_ptr, _sqlite3__wasm_pstack_restore, _sqlite3__wasm_pstack_alloc, _sqlite3__wasm_pstack_remaining, _sqlite3__wasm_pstack_quota, - _sqlite3__wasm_db_error, _sqlite3__wasm_test_struct, _sqlite3__wasm_enum_json, _sqlite3__wasm_vfs_unlink, @@ -4287,7 +4403,7 @@ var _sqlite3_vfs_find, _sqlite3__wasm_db_serialize, _sqlite3__wasm_vfs_create_file, _sqlite3__wasm_posix_create_file, - _sqlite3__wasm_kvvfsMakeKeyOnPstack, + _sqlite3__wasm_kvvfsMakeKey, _sqlite3__wasm_kvvfs_methods, _sqlite3__wasm_vtab_config, _sqlite3__wasm_db_config_ip, @@ -4297,6 +4413,8 @@ var _sqlite3_vfs_find, _sqlite3__wasm_config_ii, _sqlite3__wasm_config_j, _sqlite3__wasm_qfmt_token, + _sqlite3__wasm_kvvfs_decode, + _sqlite3__wasm_kvvfs_encode, _sqlite3__wasm_init_wasmfs, _sqlite3__wasm_test_intptr, _sqlite3__wasm_test_voidptr, @@ -4330,12 +4448,12 @@ function assignWasmExports(wasmExports) { _sqlite3_expanded_sql = Module['_sqlite3_expanded_sql'] = wasmExports['sqlite3_expanded_sql']; _sqlite3_step = Module['_sqlite3_step'] = wasmExports['sqlite3_step']; _sqlite3_column_text = Module['_sqlite3_column_text'] = wasmExports['sqlite3_column_text']; + _sqlite3_reset = Module['_sqlite3_reset'] = wasmExports['sqlite3_reset']; + _sqlite3_sql = Module['_sqlite3_sql'] = wasmExports['sqlite3_sql']; _sqlite3_column_count = Module['_sqlite3_column_count'] = wasmExports['sqlite3_column_count']; _sqlite3_column_type = Module['_sqlite3_column_type'] = wasmExports['sqlite3_column_type']; _sqlite3_column_bytes = Module['_sqlite3_column_bytes'] = wasmExports['sqlite3_column_bytes']; _sqlite3_column_blob = Module['_sqlite3_column_blob'] = wasmExports['sqlite3_column_blob']; - _sqlite3_sql = Module['_sqlite3_sql'] = wasmExports['sqlite3_sql']; - _sqlite3_reset = Module['_sqlite3_reset'] = wasmExports['sqlite3_reset']; _sqlite3_bind_int64 = Module['_sqlite3_bind_int64'] = wasmExports['sqlite3_bind_int64']; _sqlite3_bind_int = Module['_sqlite3_bind_int'] = wasmExports['sqlite3_bind_int']; _sqlite3_bind_text = Module['_sqlite3_bind_text'] = wasmExports['sqlite3_bind_text']; @@ -4349,6 +4467,7 @@ function assignWasmExports(wasmExports) { _sqlite3_open_v2 = Module['_sqlite3_open_v2'] = wasmExports['sqlite3_open_v2']; _sqlite3_file_control = Module['_sqlite3_file_control'] = wasmExports['sqlite3_file_control']; _sqlite3_create_function = Module['_sqlite3_create_function'] = wasmExports['sqlite3_create_function']; + _sqlite3_compileoption_used = Module['_sqlite3_compileoption_used'] = wasmExports['sqlite3_compileoption_used']; _sqlite3_db_status = Module['_sqlite3_db_status'] = wasmExports['sqlite3_db_status']; _sqlite3_status = Module['_sqlite3_status'] = wasmExports['sqlite3_status']; _free = Module['_free'] = wasmExports['free']; @@ -4356,6 +4475,7 @@ function assignWasmExports(wasmExports) { _sqlite3_result_int64 = Module['_sqlite3_result_int64'] = wasmExports['sqlite3_result_int64']; _wasm_main = Module['_wasm_main'] = wasmExports['wasm_main']; _sqlite3_status64 = Module['_sqlite3_status64'] = wasmExports['sqlite3_status64']; + _sqlite3_db_status64 = Module['_sqlite3_db_status64'] = wasmExports['sqlite3_db_status64']; _sqlite3_msize = Module['_sqlite3_msize'] = wasmExports['sqlite3_msize']; _sqlite3_vfs_register = Module['_sqlite3_vfs_register'] = wasmExports['sqlite3_vfs_register']; _sqlite3_vfs_unregister = Module['_sqlite3_vfs_unregister'] = wasmExports['sqlite3_vfs_unregister']; @@ -4372,6 +4492,11 @@ function assignWasmExports(wasmExports) { _sqlite3_column_int = Module['_sqlite3_column_int'] = wasmExports['sqlite3_column_int']; _sqlite3_column_name = Module['_sqlite3_column_name'] = wasmExports['sqlite3_column_name']; _sqlite3_deserialize = Module['_sqlite3_deserialize'] = wasmExports['sqlite3_deserialize']; + _sqlite3_backup_init = Module['_sqlite3_backup_init'] = wasmExports['sqlite3_backup_init']; + _sqlite3_backup_step = Module['_sqlite3_backup_step'] = wasmExports['sqlite3_backup_step']; + _sqlite3_backup_finish = Module['_sqlite3_backup_finish'] = wasmExports['sqlite3_backup_finish']; + _sqlite3_backup_remaining = Module['_sqlite3_backup_remaining'] = wasmExports['sqlite3_backup_remaining']; + _sqlite3_backup_pagecount = Module['_sqlite3_backup_pagecount'] = wasmExports['sqlite3_backup_pagecount']; _sqlite3_clear_bindings = Module['_sqlite3_clear_bindings'] = wasmExports['sqlite3_clear_bindings']; _sqlite3_value_blob = Module['_sqlite3_value_blob'] = wasmExports['sqlite3_value_blob']; _sqlite3_value_bytes = Module['_sqlite3_value_bytes'] = wasmExports['sqlite3_value_bytes']; @@ -4410,9 +4535,13 @@ function assignWasmExports(wasmExports) { _sqlite3_column_double = Module['_sqlite3_column_double'] = wasmExports['sqlite3_column_double']; _sqlite3_column_value = Module['_sqlite3_column_value'] = wasmExports['sqlite3_column_value']; _sqlite3_column_decltype = Module['_sqlite3_column_decltype'] = wasmExports['sqlite3_column_decltype']; + _sqlite3_column_database_name = Module['_sqlite3_column_database_name'] = wasmExports['sqlite3_column_database_name']; + _sqlite3_column_table_name = Module['_sqlite3_column_table_name'] = wasmExports['sqlite3_column_table_name']; + _sqlite3_column_origin_name = Module['_sqlite3_column_origin_name'] = wasmExports['sqlite3_column_origin_name']; _sqlite3_bind_blob = Module['_sqlite3_bind_blob'] = wasmExports['sqlite3_bind_blob']; _sqlite3_bind_null = Module['_sqlite3_bind_null'] = wasmExports['sqlite3_bind_null']; _sqlite3_bind_pointer = Module['_sqlite3_bind_pointer'] = wasmExports['sqlite3_bind_pointer']; + _sqlite3_bind_zeroblob = Module['_sqlite3_bind_zeroblob'] = wasmExports['sqlite3_bind_zeroblob']; _sqlite3_bind_parameter_count = Module['_sqlite3_bind_parameter_count'] = wasmExports['sqlite3_bind_parameter_count']; _sqlite3_bind_parameter_name = Module['_sqlite3_bind_parameter_name'] = wasmExports['sqlite3_bind_parameter_name']; _sqlite3_bind_parameter_index = Module['_sqlite3_bind_parameter_index'] = wasmExports['sqlite3_bind_parameter_index']; @@ -4421,13 +4550,24 @@ function assignWasmExports(wasmExports) { _sqlite3_stmt_isexplain = Module['_sqlite3_stmt_isexplain'] = wasmExports['sqlite3_stmt_isexplain']; _sqlite3_stmt_explain = Module['_sqlite3_stmt_explain'] = wasmExports['sqlite3_stmt_explain']; _sqlite3_stmt_busy = Module['_sqlite3_stmt_busy'] = wasmExports['sqlite3_stmt_busy']; + _sqlite3_next_stmt = Module['_sqlite3_next_stmt'] = wasmExports['sqlite3_next_stmt']; _sqlite3_stmt_status = Module['_sqlite3_stmt_status'] = wasmExports['sqlite3_stmt_status']; + _sqlite3_preupdate_old = Module['_sqlite3_preupdate_old'] = wasmExports['sqlite3_preupdate_old']; + _sqlite3_preupdate_count = Module['_sqlite3_preupdate_count'] = wasmExports['sqlite3_preupdate_count']; + _sqlite3_preupdate_depth = Module['_sqlite3_preupdate_depth'] = wasmExports['sqlite3_preupdate_depth']; + _sqlite3_preupdate_blobwrite = Module['_sqlite3_preupdate_blobwrite'] = wasmExports['sqlite3_preupdate_blobwrite']; + _sqlite3_preupdate_new = Module['_sqlite3_preupdate_new'] = wasmExports['sqlite3_preupdate_new']; _sqlite3_value_numeric_type = Module['_sqlite3_value_numeric_type'] = wasmExports['sqlite3_value_numeric_type']; + _sqlite3_set_authorizer = Module['_sqlite3_set_authorizer'] = wasmExports['sqlite3_set_authorizer']; _sqlite3_strlike = Module['_sqlite3_strlike'] = wasmExports['sqlite3_strlike']; _sqlite3_auto_extension = Module['_sqlite3_auto_extension'] = wasmExports['sqlite3_auto_extension']; _sqlite3_cancel_auto_extension = Module['_sqlite3_cancel_auto_extension'] = wasmExports['sqlite3_cancel_auto_extension']; _sqlite3_reset_auto_extension = Module['_sqlite3_reset_auto_extension'] = wasmExports['sqlite3_reset_auto_extension']; _sqlite3_prepare_v3 = Module['_sqlite3_prepare_v3'] = wasmExports['sqlite3_prepare_v3']; + _sqlite3_create_module = Module['_sqlite3_create_module'] = wasmExports['sqlite3_create_module']; + _sqlite3_create_module_v2 = Module['_sqlite3_create_module_v2'] = wasmExports['sqlite3_create_module_v2']; + _sqlite3_drop_modules = Module['_sqlite3_drop_modules'] = wasmExports['sqlite3_drop_modules']; + _sqlite3_declare_vtab = Module['_sqlite3_declare_vtab'] = wasmExports['sqlite3_declare_vtab']; _sqlite3_vtab_on_conflict = Module['_sqlite3_vtab_on_conflict'] = wasmExports['sqlite3_vtab_on_conflict']; _sqlite3_vtab_collation = Module['_sqlite3_vtab_collation'] = wasmExports['sqlite3_vtab_collation']; _sqlite3_vtab_in = Module['_sqlite3_vtab_in'] = wasmExports['sqlite3_vtab_in']; @@ -4447,15 +4587,19 @@ function assignWasmExports(wasmExports) { _sqlite3_txn_state = Module['_sqlite3_txn_state'] = wasmExports['sqlite3_txn_state']; _sqlite3_close_v2 = Module['_sqlite3_close_v2'] = wasmExports['sqlite3_close_v2']; _sqlite3_busy_handler = Module['_sqlite3_busy_handler'] = wasmExports['sqlite3_busy_handler']; + _sqlite3_progress_handler = Module['_sqlite3_progress_handler'] = wasmExports['sqlite3_progress_handler']; _sqlite3_busy_timeout = Module['_sqlite3_busy_timeout'] = wasmExports['sqlite3_busy_timeout']; _sqlite3_interrupt = Module['_sqlite3_interrupt'] = wasmExports['sqlite3_interrupt']; _sqlite3_is_interrupted = Module['_sqlite3_is_interrupted'] = wasmExports['sqlite3_is_interrupted']; _sqlite3_create_function_v2 = Module['_sqlite3_create_function_v2'] = wasmExports['sqlite3_create_function_v2']; + _sqlite3_create_window_function = Module['_sqlite3_create_window_function'] = wasmExports['sqlite3_create_window_function']; _sqlite3_overload_function = Module['_sqlite3_overload_function'] = wasmExports['sqlite3_overload_function']; _sqlite3_trace_v2 = Module['_sqlite3_trace_v2'] = wasmExports['sqlite3_trace_v2']; _sqlite3_commit_hook = Module['_sqlite3_commit_hook'] = wasmExports['sqlite3_commit_hook']; _sqlite3_update_hook = Module['_sqlite3_update_hook'] = wasmExports['sqlite3_update_hook']; _sqlite3_rollback_hook = Module['_sqlite3_rollback_hook'] = wasmExports['sqlite3_rollback_hook']; + _sqlite3_preupdate_hook = Module['_sqlite3_preupdate_hook'] = wasmExports['sqlite3_preupdate_hook']; + _sqlite3_set_errmsg = Module['_sqlite3_set_errmsg'] = wasmExports['sqlite3_set_errmsg']; _sqlite3_error_offset = Module['_sqlite3_error_offset'] = wasmExports['sqlite3_error_offset']; _sqlite3_errcode = Module['_sqlite3_errcode'] = wasmExports['sqlite3_errcode']; _sqlite3_extended_errcode = Module['_sqlite3_extended_errcode'] = wasmExports['sqlite3_extended_errcode']; @@ -4473,14 +4617,56 @@ function assignWasmExports(wasmExports) { _sqlite3_db_name = Module['_sqlite3_db_name'] = wasmExports['sqlite3_db_name']; _sqlite3_db_filename = Module['_sqlite3_db_filename'] = wasmExports['sqlite3_db_filename']; _sqlite3_db_readonly = Module['_sqlite3_db_readonly'] = wasmExports['sqlite3_db_readonly']; - _sqlite3_compileoption_used = Module['_sqlite3_compileoption_used'] = wasmExports['sqlite3_compileoption_used']; _sqlite3_compileoption_get = Module['_sqlite3_compileoption_get'] = wasmExports['sqlite3_compileoption_get']; + _sqlite3session_diff = Module['_sqlite3session_diff'] = wasmExports['sqlite3session_diff']; + _sqlite3session_attach = Module['_sqlite3session_attach'] = wasmExports['sqlite3session_attach']; + _sqlite3session_create = Module['_sqlite3session_create'] = wasmExports['sqlite3session_create']; + _sqlite3session_delete = Module['_sqlite3session_delete'] = wasmExports['sqlite3session_delete']; + _sqlite3session_table_filter = Module['_sqlite3session_table_filter'] = wasmExports['sqlite3session_table_filter']; + _sqlite3session_changeset = Module['_sqlite3session_changeset'] = wasmExports['sqlite3session_changeset']; + _sqlite3session_changeset_strm = Module['_sqlite3session_changeset_strm'] = wasmExports['sqlite3session_changeset_strm']; + _sqlite3session_patchset_strm = Module['_sqlite3session_patchset_strm'] = wasmExports['sqlite3session_patchset_strm']; + _sqlite3session_patchset = Module['_sqlite3session_patchset'] = wasmExports['sqlite3session_patchset']; + _sqlite3session_enable = Module['_sqlite3session_enable'] = wasmExports['sqlite3session_enable']; + _sqlite3session_indirect = Module['_sqlite3session_indirect'] = wasmExports['sqlite3session_indirect']; + _sqlite3session_isempty = Module['_sqlite3session_isempty'] = wasmExports['sqlite3session_isempty']; + _sqlite3session_memory_used = Module['_sqlite3session_memory_used'] = wasmExports['sqlite3session_memory_used']; + _sqlite3session_object_config = Module['_sqlite3session_object_config'] = wasmExports['sqlite3session_object_config']; + _sqlite3session_changeset_size = Module['_sqlite3session_changeset_size'] = wasmExports['sqlite3session_changeset_size']; + _sqlite3changeset_start = Module['_sqlite3changeset_start'] = wasmExports['sqlite3changeset_start']; + _sqlite3changeset_start_v2 = Module['_sqlite3changeset_start_v2'] = wasmExports['sqlite3changeset_start_v2']; + _sqlite3changeset_start_strm = Module['_sqlite3changeset_start_strm'] = wasmExports['sqlite3changeset_start_strm']; + _sqlite3changeset_start_v2_strm = Module['_sqlite3changeset_start_v2_strm'] = wasmExports['sqlite3changeset_start_v2_strm']; + _sqlite3changeset_next = Module['_sqlite3changeset_next'] = wasmExports['sqlite3changeset_next']; + _sqlite3changeset_op = Module['_sqlite3changeset_op'] = wasmExports['sqlite3changeset_op']; + _sqlite3changeset_pk = Module['_sqlite3changeset_pk'] = wasmExports['sqlite3changeset_pk']; + _sqlite3changeset_old = Module['_sqlite3changeset_old'] = wasmExports['sqlite3changeset_old']; + _sqlite3changeset_new = Module['_sqlite3changeset_new'] = wasmExports['sqlite3changeset_new']; + _sqlite3changeset_conflict = Module['_sqlite3changeset_conflict'] = wasmExports['sqlite3changeset_conflict']; + _sqlite3changeset_fk_conflicts = Module['_sqlite3changeset_fk_conflicts'] = wasmExports['sqlite3changeset_fk_conflicts']; + _sqlite3changeset_finalize = Module['_sqlite3changeset_finalize'] = wasmExports['sqlite3changeset_finalize']; + _sqlite3changeset_invert = Module['_sqlite3changeset_invert'] = wasmExports['sqlite3changeset_invert']; + _sqlite3changeset_invert_strm = Module['_sqlite3changeset_invert_strm'] = wasmExports['sqlite3changeset_invert_strm']; + _sqlite3changeset_apply_v2 = Module['_sqlite3changeset_apply_v2'] = wasmExports['sqlite3changeset_apply_v2']; + _sqlite3changeset_apply_v3 = Module['_sqlite3changeset_apply_v3'] = wasmExports['sqlite3changeset_apply_v3']; + _sqlite3changeset_apply = Module['_sqlite3changeset_apply'] = wasmExports['sqlite3changeset_apply']; + _sqlite3changeset_apply_v3_strm = Module['_sqlite3changeset_apply_v3_strm'] = wasmExports['sqlite3changeset_apply_v3_strm']; + _sqlite3changeset_apply_v2_strm = Module['_sqlite3changeset_apply_v2_strm'] = wasmExports['sqlite3changeset_apply_v2_strm']; + _sqlite3changeset_apply_strm = Module['_sqlite3changeset_apply_strm'] = wasmExports['sqlite3changeset_apply_strm']; + _sqlite3changegroup_new = Module['_sqlite3changegroup_new'] = wasmExports['sqlite3changegroup_new']; + _sqlite3changegroup_add = Module['_sqlite3changegroup_add'] = wasmExports['sqlite3changegroup_add']; + _sqlite3changegroup_output = Module['_sqlite3changegroup_output'] = wasmExports['sqlite3changegroup_output']; + _sqlite3changegroup_add_strm = Module['_sqlite3changegroup_add_strm'] = wasmExports['sqlite3changegroup_add_strm']; + _sqlite3changegroup_output_strm = Module['_sqlite3changegroup_output_strm'] = wasmExports['sqlite3changegroup_output_strm']; + _sqlite3changegroup_delete = Module['_sqlite3changegroup_delete'] = wasmExports['sqlite3changegroup_delete']; + _sqlite3changeset_concat = Module['_sqlite3changeset_concat'] = wasmExports['sqlite3changeset_concat']; + _sqlite3changeset_concat_strm = Module['_sqlite3changeset_concat_strm'] = wasmExports['sqlite3changeset_concat_strm']; + _sqlite3session_config = Module['_sqlite3session_config'] = wasmExports['sqlite3session_config']; _sqlite3__wasm_pstack_ptr = Module['_sqlite3__wasm_pstack_ptr'] = wasmExports['sqlite3__wasm_pstack_ptr']; _sqlite3__wasm_pstack_restore = Module['_sqlite3__wasm_pstack_restore'] = wasmExports['sqlite3__wasm_pstack_restore']; _sqlite3__wasm_pstack_alloc = Module['_sqlite3__wasm_pstack_alloc'] = wasmExports['sqlite3__wasm_pstack_alloc']; _sqlite3__wasm_pstack_remaining = Module['_sqlite3__wasm_pstack_remaining'] = wasmExports['sqlite3__wasm_pstack_remaining']; _sqlite3__wasm_pstack_quota = Module['_sqlite3__wasm_pstack_quota'] = wasmExports['sqlite3__wasm_pstack_quota']; - _sqlite3__wasm_db_error = Module['_sqlite3__wasm_db_error'] = wasmExports['sqlite3__wasm_db_error']; _sqlite3__wasm_test_struct = Module['_sqlite3__wasm_test_struct'] = wasmExports['sqlite3__wasm_test_struct']; _sqlite3__wasm_enum_json = Module['_sqlite3__wasm_enum_json'] = wasmExports['sqlite3__wasm_enum_json']; _sqlite3__wasm_vfs_unlink = Module['_sqlite3__wasm_vfs_unlink'] = wasmExports['sqlite3__wasm_vfs_unlink']; @@ -4490,7 +4676,7 @@ function assignWasmExports(wasmExports) { _sqlite3__wasm_db_serialize = Module['_sqlite3__wasm_db_serialize'] = wasmExports['sqlite3__wasm_db_serialize']; _sqlite3__wasm_vfs_create_file = Module['_sqlite3__wasm_vfs_create_file'] = wasmExports['sqlite3__wasm_vfs_create_file']; _sqlite3__wasm_posix_create_file = Module['_sqlite3__wasm_posix_create_file'] = wasmExports['sqlite3__wasm_posix_create_file']; - _sqlite3__wasm_kvvfsMakeKeyOnPstack = Module['_sqlite3__wasm_kvvfsMakeKeyOnPstack'] = wasmExports['sqlite3__wasm_kvvfsMakeKeyOnPstack']; + _sqlite3__wasm_kvvfsMakeKey = Module['_sqlite3__wasm_kvvfsMakeKey'] = wasmExports['sqlite3__wasm_kvvfsMakeKey']; _sqlite3__wasm_kvvfs_methods = Module['_sqlite3__wasm_kvvfs_methods'] = wasmExports['sqlite3__wasm_kvvfs_methods']; _sqlite3__wasm_vtab_config = Module['_sqlite3__wasm_vtab_config'] = wasmExports['sqlite3__wasm_vtab_config']; _sqlite3__wasm_db_config_ip = Module['_sqlite3__wasm_db_config_ip'] = wasmExports['sqlite3__wasm_db_config_ip']; @@ -4500,6 +4686,8 @@ function assignWasmExports(wasmExports) { _sqlite3__wasm_config_ii = Module['_sqlite3__wasm_config_ii'] = wasmExports['sqlite3__wasm_config_ii']; _sqlite3__wasm_config_j = Module['_sqlite3__wasm_config_j'] = wasmExports['sqlite3__wasm_config_j']; _sqlite3__wasm_qfmt_token = Module['_sqlite3__wasm_qfmt_token'] = wasmExports['sqlite3__wasm_qfmt_token']; + _sqlite3__wasm_kvvfs_decode = Module['_sqlite3__wasm_kvvfs_decode'] = wasmExports['sqlite3__wasm_kvvfs_decode']; + _sqlite3__wasm_kvvfs_encode = Module['_sqlite3__wasm_kvvfs_encode'] = wasmExports['sqlite3__wasm_kvvfs_encode']; _sqlite3__wasm_init_wasmfs = Module['_sqlite3__wasm_init_wasmfs'] = wasmExports['sqlite3__wasm_init_wasmfs']; _sqlite3__wasm_test_intptr = Module['_sqlite3__wasm_test_intptr'] = wasmExports['sqlite3__wasm_test_intptr']; _sqlite3__wasm_test_voidptr = Module['_sqlite3__wasm_test_voidptr'] = wasmExports['sqlite3__wasm_test_voidptr']; @@ -4575,6 +4763,8 @@ var wasmImports = { /** @export */ emscripten_date_now: _emscripten_date_now, /** @export */ + emscripten_get_heap_max: _emscripten_get_heap_max, + /** @export */ emscripten_get_now: _emscripten_get_now, /** @export */ emscripten_resize_heap: _emscripten_resize_heap, @@ -4626,39 +4816,51 @@ await run(); // end include: postamble.js -// include: ./bld/post-js.speedtest1-vanilla.js -/* BEGIN FILE: api/post-js-header.js */ +// include: ./bld/post-js.speedtest1.js /** post-js-header.js is to be prepended to other code to create - post-js.js for use with Emscripten's --post-js flag. This code - requires that it be running in that context. The Emscripten - environment must have been set up already but it will not have - loaded its WASM when the code in this file is run. The function it - installs will be run after the WASM module is loaded, at which - point the sqlite3 JS API bits will get set up. + post-js.js for use with Emscripten's --post-js flag, so it gets + injected in the earliest stages of sqlite3InitModule(). + + Running this function will bootstrap the library and return + a Promise to the sqlite3 namespace object. + + In the canonical builds, this gets called by extern-post-js.c-pp.js */ -Module.runSQLite3PostLoadInit = function(Module/*the Emscripten-style module object*/){ +Module.runSQLite3PostLoadInit = async function( + sqlite3InitScriptInfo, + EmscriptenModule/*the Emscripten-style module object*/, + sqlite3IsUnderTest +){ + /** ^^^ Don't use Module.postRun, as that runs a different time + depending on whether this file is built with emcc 3.1.x or + 4.0.x. This function name is intentionally obnoxiously verbose to + ensure that we don't collide with current and future Emscripten + symbol names. */ 'use strict'; + delete EmscriptenModule.runSQLite3PostLoadInit; + //console.warn("This is the start of Module.runSQLite3PostLoadInit()"); /* This function will contain at least the following: - - post-js-header.js (this file) - - sqlite3-api-prologue.js => Bootstrapping bits to attach the rest to - - common/whwasmutil.js => Replacements for much of Emscripten's glue - - jaccwaby/jaccwabyt.js => Jaccwabyt (C/JS struct binding) - - sqlite3-api-glue.js => glues previous parts together - - sqlite3-api-oo.js => SQLite3 OO API #1 - - sqlite3-api-worker1.js => Worker-based API - - sqlite3-vfs-helper.c-pp.js => Utilities for VFS impls - - sqlite3-vtab-helper.c-pp.js => Utilities for virtual table impls - - sqlite3-vfs-opfs.c-pp.js => OPFS VFS - - sqlite3-vfs-opfs-sahpool.c-pp.js => OPFS SAHPool VFS - - sqlite3-api-cleanup.js => final API cleanup - - post-js-footer.js => closes this postRun() function + - post-js-header.js => this file + - sqlite3-api-prologue.js => Bootstrapping bits for the following files + - common/whwasmutil.js => Generic JS/WASM glue + - jaccwabyt/jaccwabyt.js => C struct-binding glue + - sqlite3-api-glue.js => glues previous parts together + - sqlite3-api-oo1.js => SQLite3 OO API #1 + - sqlite3-api-worker1.js => Worker-based API + - sqlite3-vfs-helper.c-pp.js => Utilities for VFS impls + - sqlite3-vtab-helper.c-pp.js => Utilities for virtual table impls + - sqlite3-vfs-opfs.c-pp.js => OPFS VFS + - sqlite3-vfs-opfs-sahpool.c-pp.js => OPFS SAHPool VFS + - sqlite3-vfs-opfs-wl.c-pp.js => WebLock-using OPFS VFS + - post-js-footer.js => this file's epilogue + + And all of that gets sandwiched between extern-pre-js.js and + extern-post-js.js. */ -/* END FILE: api/post-js-header.js */ -/* BEGIN FILE: ./bld/sqlite3-api.c-pp.js */ -/* BEGIN FILE: ./bld/sqlite3-license-version.js */ -/* +/* @preserve +** ** LICENSE for the sqlite3 WebAssembly/JavaScript APIs. ** ** This bundle (typically released as sqlite3.js or sqlite3.mjs) @@ -4683,17 +4885,15 @@ Module.runSQLite3PostLoadInit = function(Module/*the Emscripten-style module obj ** * May you find forgiveness for yourself and forgive others. ** * May you share freely, never taking more than you give. */ -/* +/* @preserve ** This code was built from sqlite3 version... ** -** SQLITE_VERSION "3.48.0" -** SQLITE_VERSION_NUMBER 3048000 -** SQLITE_SOURCE_ID "2025-01-14 11:05:00 d2fe6b05f38d9d7cd78c5d252e99ac59f1aea071d669830c1ffe4e8966e8alt1" +** SQLITE_VERSION "3.54.1" +** SQLITE_VERSION_NUMBER 3054001 +** SQLITE_SOURCE_ID "2026-10-16 14:45:20 555e07ef33f69a0957d24d8e555b702464a131d6f1607f4c3c1e4551e8e6ca76" ** -** Using the Emscripten SDK version 6.0.13. +** Emscripten SDK: 6.0.13 */ -/* END FILE: ./bld/sqlite3-license-version.js */ -/* BEGIN FILE: api/sqlite3-api-prologue.js */ /* 2022-05-22 @@ -4708,12 +4908,12 @@ Module.runSQLite3PostLoadInit = function(Module/*the Emscripten-style module obj This file is intended to be combined at build-time with other related code, most notably a header and footer which wraps this - whole file into an Emscripten Module.postRun() handler. The sqlite3 - JS API has no hard requirements on Emscripten and does not expose - any Emscripten APIs to clients. It is structured such that its build - can be tweaked to include it in arbitrary WASM environments which - can supply the necessary underlying features (e.g. a POSIX file I/O - layer). + whole file into a single callback which can be run after Emscripten + loads the corresponding WASM module. The sqlite3 JS API has no hard + requirements on Emscripten and does not expose any Emscripten APIs + to clients. It is structured such that its build can be tweaked to + include it in arbitrary WASM environments which can supply the + necessary underlying features (e.g. a POSIX file I/O layer). Main project home page: https://sqlite.org @@ -4723,13 +4923,14 @@ Module.runSQLite3PostLoadInit = function(Module/*the Emscripten-style module obj /** sqlite3ApiBootstrap() is the only global symbol persistently exposed by this API. It is intended to be called one time at the - end of the API amalgamation process, passed configuration details - for the current environment, and then optionally be removed from - the global object using `delete globalThis.sqlite3ApiBootstrap`. + end of the API amalgamation process and passed configuration details + for the current environment. This function is not intended for client-level use. It is intended for use in creating bundles configured for specific WASM - environments. + environments. That said, the "sqlite3-api.js" intermediary build + file aims to be suitable for dropping in to custom builds, and it + exposes only this function. This function expects a configuration object, intended to abstract away details specific to any given WASM environment, primarily so @@ -4745,7 +4946,8 @@ Module.runSQLite3PostLoadInit = function(Module/*the Emscripten-style module obj - `exports`[^1]: the "exports" object for the current WASM environment. In an Emscripten-based build, this should be set to - `Module['asm']`. + `Module['asm']` (versions <=3.1.43) or `Module['wasmExports']` + (versions >=3.1.44). - `memory`[^1]: optional WebAssembly.Memory object, defaulting to `exports.memory`. In Emscripten environments this should be set @@ -4753,6 +4955,10 @@ Module.runSQLite3PostLoadInit = function(Module/*the Emscripten-style module obj left undefined/falsy to default to `exports.memory` when using WASM-exported memory. + - `functionTable`[^1]: optional WebAssembly.Table object holding + the indirect function table. If not set then the table is assumed + to be in `exports.__indirect_function_table`. + - `bigIntEnabled`: true if BigInt support is enabled. Defaults to true if `globalThis.BigInt64Array` is available, else false. Some APIs will throw exceptions if called without BigInt support, as BigInt @@ -4784,9 +4990,17 @@ Module.runSQLite3PostLoadInit = function(Module/*the Emscripten-style module obj can be replaced with (e.g.) empty functions to squelch all such output. - - `wasmfsOpfsDir`[^1]: Specifies the "mount point" of the OPFS-backed - filesystem in WASMFS-capable builds. + - `wasmfsOpfsDir`[^1]: Specifies the "mount point" of the + OPFS-backed filesystem in WASMFS-capable builds. This is only + used in WASMFS-capable builds of the library (which the canonical + builds do not include). + - `disable` (as of 3.53.0) may be an object with the following + properties: + - `vfs`, an object, may contain a map of VFS names to booleans. + Any mapping to falsy are disabled. The supported names + are: "kvvfs", "opfs", "opfs-sahpool", "opfs-wl". + - Other disabling options may be added in the future. [^1] = This property may optionally be a function, in which case this function calls that function to fetch the value, @@ -4809,43 +5023,36 @@ Module.runSQLite3PostLoadInit = function(Module/*the Emscripten-style module obj called, an alternative option for setting the configuration is to define globalThis.sqlite3ApiConfig to an object. If it is set, it is used instead of sqlite3ApiBootstrap.defaultConfig if - sqlite3ApiBootstrap() is called without arguments. + sqlite3ApiBootstrap() is called without arguments. Setting the + `exports` and `memory` parts require already having loaded the WASM + module, though. Both sqlite3ApiBootstrap.defaultConfig and globalThis.sqlite3ApiConfig get deleted by sqlite3ApiBootstrap() because any changes to them made after that point would have no - useful effect. + useful effect. This function also deletes itself from globalThis + when it's called. + + This function returns a Promise to the sqlite3 namespace object, + which resolves after the async pieces of the library init are + complete. */ 'use strict'; -globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( +globalThis.sqlite3ApiBootstrap = async function sqlite3ApiBootstrap( apiConfig = (globalThis.sqlite3ApiConfig || sqlite3ApiBootstrap.defaultConfig) ){ - if(sqlite3ApiBootstrap.sqlite3){ /* already initalized */ + if(sqlite3ApiBootstrap.sqlite3){ /* already initialized */ (sqlite3ApiBootstrap.sqlite3.config || console).warn( "sqlite3ApiBootstrap() called multiple times.", "Config and external initializers are ignored on calls after the first." ); return sqlite3ApiBootstrap.sqlite3; } - const config = Object.assign(Object.create(null),{ + const nu = (...obj)=>Object.assign(Object.create(null),...obj); + const config = nu({ exports: undefined, memory: undefined, - bigIntEnabled: (()=>{ - if('undefined'!==typeof Module){ - /* Emscripten module will contain HEAPU64 when built with - -sWASM_BIGINT=1, else it will not. - - As of emsdk 3.1.55, when building in strict mode, HEAPxyz - are only available if _explicitly_ included in the exports, - else they are not. We do not (as of 2024-03-04) use -sSTRICT - for the canonical builds. - */ - if( !!Module.HEAPU64 ) return true; - /* Else fall through and hope for the best. Nobody _really_ - builds this without BigInt support, do they? */ - } - return !!globalThis.BigInt64Array; - })(), + bigIntEnabled: !!globalThis.BigInt64Array, debug: console.debug.bind(console), warn: console.warn.bind(console), error: console.error.bind(console), @@ -4859,39 +5066,31 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( certain wasm.xWrap.resultAdapter()s. */ useStdAlloc: false - }, apiConfig || {}); + }, apiConfig); Object.assign(config, { allocExportName: config.useStdAlloc ? 'malloc' : 'sqlite3_malloc', deallocExportName: config.useStdAlloc ? 'free' : 'sqlite3_free', reallocExportName: config.useStdAlloc ? 'realloc' : 'sqlite3_realloc' - }, config); + }); [ // If any of these config options are functions, replace them with - // the result of calling that function... - 'exports', 'memory', 'wasmfsOpfsDir' + // the result of calling that function. They must not be async. + 'exports', 'memory', 'functionTable', 'wasmfsOpfsDir' ].forEach((k)=>{ if('function' === typeof config[k]){ config[k] = config[k](); } }); - /** - Eliminate any confusion about whether these config objects may - be used after library initialization by eliminating the outward-facing - objects... - */ - delete globalThis.sqlite3ApiConfig; - delete sqlite3ApiBootstrap.defaultConfig; - /** The main sqlite3 binding API gets installed into this object, mimicking the C API as closely as we can. The numerous members names with prefixes 'sqlite3_' and 'SQLITE_' behave, insofar as possible, identically to the C-native counterparts, as documented at: - https://www.sqlite.org/c3ref/intro.html + https://sqlite.org/c3ref/intro.html A very few exceptions require an additional level of proxy function or may otherwise require special attention in the WASM @@ -4900,7 +5099,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( not documented are installed as 1-to-1 proxies for their C-side counterparts. */ - const capi = Object.create(null); + const capi = nu(); /** Holds state which are specific to the WASM-related infrastructure and glue code. @@ -4909,7 +5108,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( dynamically after the api object is fully constructed, so not all are documented in this file. */ - const wasm = Object.create(null); + const wasm = nu(); /** Internal helper for SQLite3Error ctor. */ const __rcStr = (rc)=>{ @@ -4918,7 +5117,10 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( }; /** Internal helper for SQLite3Error ctor. */ - const __isInt = (n)=>'number'===typeof n && n===(n | 0); + const isInt32 = (n)=> + 'number'===typeof n + && n===(n | 0) + && n<=2147483647 && n>=-2147483648; /** An Error subclass specifically for reporting DB-level errors and @@ -4952,7 +5154,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( constructor(...args){ let rc; if(args.length){ - if(__isInt(args[0])){ + if(isInt32(args[0])){ rc = args[0]; if(1===args.length){ super(__rcStr(args[0])); @@ -4995,16 +5197,6 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( toss3("config.wasmfsOpfsDir must be falsy or in the form '/dir-name'."); } - /** - Returns true if n is a 32-bit (signed) integer, else - false. This is used for determining when we need to switch to - double-type DB operations for integer values in order to keep - more precision. - */ - const isInt32 = (n)=>{ - return ('bigint'!==typeof n /*TypeError: can't convert BigInt to number*/) - && !!(n===(n|0) && n<=2147483647 && n>=-2147483648); - }; /** Returns true if the given BigInt value is small enough to fit into an int64 value, else false. @@ -5040,32 +5232,6 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( return (v && v.constructor && isInt32(v.constructor.BYTES_PER_ELEMENT)) ? v : false; }; - - /** Internal helper to use in operations which need to distinguish - between TypedArrays which are backed by a SharedArrayBuffer - from those which are not. */ - const __SAB = ('undefined'===typeof SharedArrayBuffer) - ? function(){} : SharedArrayBuffer; - /** Returns true if the given TypedArray object is backed by a - SharedArrayBuffer, else false. */ - const isSharedTypedArray = (aTypedArray)=>(aTypedArray.buffer instanceof __SAB); - - /** - Returns either aTypedArray.slice(begin,end) (if - aTypedArray.buffer is a SharedArrayBuffer) or - aTypedArray.subarray(begin,end) (if it's not). - - This distinction is important for APIs which don't like to - work on SABs, e.g. TextDecoder, and possibly for our - own APIs which work on memory ranges which "might" be - modified by other threads while they're working. - */ - const typedArrayPart = (aTypedArray, begin, end)=>{ - return isSharedTypedArray(aTypedArray) - ? aTypedArray.slice(begin, end) - : aTypedArray.subarray(begin, end); - }; - /** Returns true if v appears to be one of our bind()-able TypedArray types: Uint8Array or Int8Array or ArrayBuffer. Support for @@ -5074,11 +5240,10 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( property can be used to pass them as an ArrayBuffer. If it's not a bindable array type, a falsy value is returned. */ - const isBindableTypedArray = (v)=>{ - return v && (v instanceof Uint8Array - || v instanceof Int8Array - || v instanceof ArrayBuffer); - }; + const isBindableTypedArray = (v)=> + v && (v instanceof Uint8Array + || v instanceof Int8Array + || v instanceof ArrayBuffer); /** Returns true if v appears to be one of the TypedArray types @@ -5089,43 +5254,31 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( and friends to the isBindableTypedArray() list but not to the isSQLableTypedArray() list. */ - const isSQLableTypedArray = (v)=>{ - return v && (v instanceof Uint8Array - || v instanceof Int8Array - || v instanceof ArrayBuffer); - }; + const isSQLableTypedArray = (v)=> + v && (v instanceof Uint8Array + || v instanceof Int8Array + || v instanceof ArrayBuffer); /** Returns true if isBindableTypedArray(v) does, else throws with a message that v is not a supported TypedArray value. */ - const affirmBindableTypedArray = (v)=>{ - return isBindableTypedArray(v) - || toss3("Value is not of a supported TypedArray type."); - }; - - const utf8Decoder = new TextDecoder('utf-8'); - - /** - Uses TextDecoder to decode the given half-open range of the - given TypedArray to a string. This differs from a simple - call to TextDecoder in that it accounts for whether the - first argument is backed by a SharedArrayBuffer or not, - and can work more efficiently if it's not (TextDecoder - refuses to act upon an SAB). - */ - const typedArrayToString = function(typedArray, begin, end){ - return utf8Decoder.decode(typedArrayPart(typedArray, begin,end)); - }; + const affirmBindableTypedArray = (v)=> + isBindableTypedArray(v) + || toss3("Value is not of a supported TypedArray type."); /** If v is-a Array, its join("") result is returned. If - isSQLableTypedArray(v) is true then typedArrayToString(v) is + isSQLableTypedArray(v) is true then wasm.typedArrayToString(v) is returned. If it looks like a WASM pointer, wasm.cstrToJs(v) is returned. Else v is returned as-is. + + Reminder to self: the "return as-is" instead of returning ''+v is + arguably a design mistake but changing it is risky at this point. */ const flexibleString = function(v){ if(isSQLableTypedArray(v)){ - return typedArrayToString( - (v instanceof ArrayBuffer) ? new Uint8Array(v) : v + return wasm.typedArrayToString( + (v instanceof ArrayBuffer) ? new Uint8Array(v) : v, + 0, v.length ); } else if(Array.isArray(v)) return v.join(""); @@ -5253,8 +5406,8 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( 4th-argument value, taking care not to pass a value which truncates a multi-byte UTF-8 character. When passing WASM-format strings, it is important that the final argument be - valid or unexpected content can result can result, or even a - crash if the application reads past the WASM heap bounds. + valid or unexpected content can result, or WASM may crash if + the application reads past the WASM heap bounds. */ sqlite3_bind_text: undefined/*installed later*/, @@ -5325,10 +5478,8 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( functions passed in to this routine, and thus wrapped by this routine, get automatic conversions of arguments and result values. The routines which perform those conversions are - exposed for client-side use as - sqlite3_create_function_v2.convertUdfArgs() and - sqlite3_create_function_v2.setUdfResult(). sqlite3_create_function() - and sqlite3_create_window_function() have those same methods. + exposed for client-side use as sqlite3_values_to_js(), + sqlite3_result_js(), and sqlite3_result_error_js(). For xFunc(), xStep(), and xFinal(): @@ -5346,20 +5497,16 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( possibly generating a console.error() message. Destructors must not throw. - Once installed, there is currently no way to uninstall the - automatically-converted WASM-bound JS functions from WASM. They - can be uninstalled from the database as documented in the C - API, but this wrapper currently has no infrastructure in place - to also free the WASM-bound JS wrappers, effectively resulting - in a memory leak if the client uninstalls the UDF. Improving that - is a potential TODO, but removing client-installed UDFs is rare - in practice. If this factor is relevant for a given client, - they can create WASM-bound JS functions themselves, hold on to their - pointers, and pass the pointers in to here. Later on, they can - free those pointers (using `wasm.uninstallFunction()` or - equivalent). + Automatically-converted JS-to-WASM functions will be cleaned up + either when (A) this function is called again with the same + name, arity, and encoding, but null/0 values for the functions, + or (B) when pDb is passed to sqlite3_close_v2(). If this factor + is relevant for a given client, they can create WASM-bound JS + functions themselves, hold on to their pointers, and pass the + pointers in to here. Later on, they can free those pointers + (using `wasm.uninstallFunction()` or equivalent). - C reference: https://www.sqlite.org/c3ref/create_function.html + C reference: https://sqlite.org/c3ref/create_function.html Maintenance reminder: the ability to add new WASM-accessible functions to the runtime requires that the @@ -5397,10 +5544,10 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( 2) sqlite3_prepare_v3(pDb, sqlPointer, sqlByteLen, prepFlags, ppStmt, sqlPointerToPointer) - Note that the SQL length argument (the 3rd argument) must, for - usage (1), always be negative because it must be a byte length - and that value is expensive to calculate from JS (where only - the character length of strings is readily available). It is + The SQL length argument (the 3rd argument) must, for usage (1), + always be negative because it must be a byte length and that + value is expensive to calculate from JS (where only the + character length of strings is readily available). It is retained in this API's interface for code/documentation compatibility reasons but is currently _always_ ignored. With usage (2), the 3rd argument is used as-is but is is still @@ -5426,8 +5573,10 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( (e.g. using capi.wasm.alloc() or equivalent). In that case, the final argument may be 0/null/undefined or must be a pointer to which the "tail" of the compiled SQL is written, as - documented for the C-side sqlite3_prepare_v3(). In case (2), - the underlying C function is called with the equivalent of: + documented for the C-side sqlite3_prepare_v3(). + + In case (2), the underlying C function is called with the + equivalent of: (pDb, sqlAsPointer, sqlByteLen, prepFlags, ppStmt, pzTail) @@ -5502,19 +5651,27 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( bigIntFits32, bigIntFits64, bigIntFitsDouble, isBindableTypedArray, isInt32, isSQLableTypedArray, isTypedArray, - typedArrayToString, isUIThread: ()=>(globalThis.window===globalThis && !!globalThis.document), // is this true for ESM?: 'undefined'===typeof WorkerGlobalScope - isSharedTypedArray, toss: function(...args){throw new Error(args.join(' '))}, toss3, - typedArrayPart, + typedArrayPart: wasm.typedArrayPart, + nu, + assert: function(arg,msg){ + if( !arg ){ + util.toss("Assertion failed:",msg); + } + }, /** Given a byte array or ArrayBuffer, this function throws if the lead bytes of that buffer do not hold a SQLite3 database header, else it returns without side effects. - Added in 3.44. + Added in 3.44. As of 3.54 in SEE builds it performs only a + rudimentary length check and does not fail for invalid header + bytes, under the assumption that the input may be an encrypted + db. We cannot unambiguously distinguish an encrypted db from + garbage bytes. */ affirmDbHeader: function(bytes){ if(bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes); @@ -5534,7 +5691,8 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( database. It only examines the size and header, but further checks may be added in the future. - Added in 3.44. + Added in 3.44. See notes in affirmDbHeader() regarding SEE + builds. */ affirmIsDb: function(bytes){ if(bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes); @@ -5546,44 +5704,60 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( } }/*util*/; + /** + wasm.X properties which are used for configuring the wasm + environment via whwashutil.js. This object gets fleshed out with + a number of WASM-specific utilities, in sqlite3-api-glue.c-pp.js. + */ Object.assign(wasm, { + + /** + The symbols exported by the WASM environment. + */ + exports: config.exports + || toss3("Missing API config.exports (WASM module exports)."), + /** - Emscripten APIs have a deep-seated assumption that all pointers - are 32 bits. We'll remain optimistic that that won't always be - the case and will use this constant in places where we might - otherwise use a hard-coded 4. + When Emscripten compiles with `-sIMPORTED_MEMORY`, it + initializes the heap and imports it into wasm, as opposed to + the other way around. In this case, the memory is not available + via this.exports.memory so the client must pass it in via + config.memory. */ - ptrSizeof: config.wasmPtrSizeof || 4, + memory: config.memory + || config.exports['memory'] + || toss3("API config object requires a WebAssembly.Memory object", + "in either config.exports.memory (exported)", + "or config.memory (imported)."), + /** - The WASM IR (Intermediate Representation) value for - pointer-type values. It MUST refer to a value type of the - size described by this.ptrSizeof. + The WASM pointer size. If set then it MUST be one of 4 or 8 and + it MUST correspond to the WASM environment's pointer size. We + figure out the size by calling some un-JS-wrapped WASM function + which returns a pointer-type value. If that value is a BigInt, + it's 64-bit, else it's 32-bit. The pieces which populate + sqlite3.wasm (whwasmutil.js) can figure this out _if_ they can + allocate, but we have a chicken/egg situation there which makes + it illegal for that code to invoke wasm.dealloc() at the time + it would be needed. So we need to configure it ahead of time + (here) instead. */ - ptrIR: config.wasmPtrIR || "i32", + pointerSize: ('number'===typeof config.exports.sqlite3_libversion()) ? 4 : 8, + /** True if BigInt support was enabled via (e.g.) the Emscripten -sWASM_BIGINT flag, else false. When enabled, certain 64-bit sqlite3 APIs are enabled which are not otherwise enabled due to JS/WASM int64 - impedence mismatches. + impedance mismatches. */ bigIntEnabled: !!config.bigIntEnabled, - /** - The symbols exported by the WASM environment. - */ - exports: config.exports - || toss3("Missing API config.exports (WASM module exports)."), /** - When Emscripten compiles with `-sIMPORTED_MEMORY`, it - initalizes the heap and imports it into wasm, as opposed to - the other way around. In this case, the memory is not - available via this.exports.memory. + WebAssembly.Table object holding the indirect function call + table. Defaults to exports.__indirect_function_table. */ - memory: config.memory || config.exports['memory'] - || toss3("API config object requires a WebAssembly.Memory object", - "in either config.exports.memory (exported)", - "or config.memory (imported)."), + functionTable: config.functionTable, /** The API's primary point of access to the WASM-side memory @@ -5603,8 +5777,8 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( catch exceptions and convert them to appropriate error codes. For cases where non-throwing allocation is required, use - this.alloc.impl(), which is direct binding of the - underlying C-level allocator. + this.alloc.impl(), which is the unadulterated WASM-exported + counterpart of this wrapper. Design note: this function is not named "malloc" primarily because Emscripten uses that name and we wanted to avoid any @@ -5628,7 +5802,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( Like this.alloc.impl(), this.realloc.impl() is a direct binding to the underlying realloc() implementation which does not throw - exceptions, instead returning 0 on allocation error. + exceptions, instead returning 0 (or 0n) on allocation error. */ realloc: undefined/*installed later*/, @@ -5667,9 +5841,10 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( } affirmBindableTypedArray(srcTypedArray); const pRet = wasm.alloc(srcTypedArray.byteLength || 1); - wasm.heapForSize(srcTypedArray.constructor).set( - srcTypedArray.byteLength ? srcTypedArray : [0], pRet - ); + wasm.heapForSize(srcTypedArray.constructor) + .set(srcTypedArray.byteLength ? srcTypedArray : [0], Number(pRet)) + /* Maintenance note: the order of alloc() and heapForSize() calls + is significant: https://sqlite.org/forum/forumpost/05b77273be104532 */; return pRet; }; @@ -5688,11 +5863,18 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( }; wasm.alloc.impl = wasm.exports[keyAlloc]; wasm.realloc = function f(m,n){ - const m2 = f.impl(m,n); - return n ? (m2 || WasmAllocError.toss("Failed to reallocate",n," bytes.")) : 0; + const m2 = f.impl(wasm.ptr.coerce(m)/*tag:64bit*/,n); + return n ? (m2 || WasmAllocError.toss("Failed to reallocate",n," bytes.")) : wasm.ptr.null; }; wasm.realloc.impl = wasm.exports[keyRealloc]; - wasm.dealloc = wasm.exports[keyDealloc]; + wasm.dealloc = function f(m){ + f.impl(wasm.ptr.coerce(m)/*tag:64bit*/) + /* This coerce() is the reason we have to set wasm.pointerSize before + calling WhWasmUtilInstaller(). If we don't, that code will call + into this very early in its init, before wasm.ptr has been set up, + resulting in a null deref here. */; + }; + wasm.dealloc.impl = wasm.exports[keyDealloc]; } /** @@ -5736,7 +5918,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( rv[1] = m ? (f._rxInt.test(m[2]) ? +m[2] : m[2]) : true; }; } - const rc = {}, ov = [0,0]; + const rc = nu(), ov = [0,0]; let i = 0, k; while((k = capi.sqlite3_compileoption_get(i++))){ f._opt(k,ov); @@ -5744,7 +5926,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( } return f._result = rc; }else if(Array.isArray(optName)){ - const rc = {}; + const rc = nu(); optName.forEach((v)=>{ rc[v] = capi.sqlite3_compileoption_used(v); }); @@ -5761,12 +5943,18 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( }/*compileOptionUsed()*/; /** - sqlite3.wasm.pstack (pseudo-stack) holds a special-case - stack-style allocator intended only for use with _small_ data of - not more than (in total) a few kb in size, managed as if it were - stack-based. + sqlite3.wasm.pstack (pseudo-stack) holds a special-case allocator + intended solely for short-lived, small data. In practice, it's + primarily used to allocate output pointers. It must not be used + for any memory which needs to outlive the scope in which it's + obtained from pstack. + + The library guarantees only that a minimum of 2kb are available + in this allocator, and it may provide more (it's a build-time + value). pstack.quota and pstack.remaining can be used to get the + total resp. remaining amount of memory. - It has only a single intended usage: + It has only a single intended usage pattern: ``` const stackPos = pstack.pointer; @@ -5783,21 +5971,23 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( ``` This allocator is much faster than a general-purpose one but is - limited to usage patterns like the one shown above. + limited to usage patterns like the one shown above (which are + pretty common when using sqlite3.capi). - It operates from a static range of memory which lives outside of - space managed by Emscripten's stack-management, so does not - collide with Emscripten-provided stack allocation APIs. The - memory lives in the WASM heap and can be used with routines such - as wasm.poke() and wasm.heap8u().slice(). + The memory lives in the WASM heap and can be used with routines + such as wasm.poke() and wasm.heap8u().slice(). */ - wasm.pstack = Object.assign(Object.create(null),{ + wasm.pstack = nu({ /** Sets the current pstack position to the given pointer. Results are undefined if the passed-in value did not come from this.pointer. + + In debug builds this may trigger an assert() in the WASM + environment if passed an illegal value. */ restore: wasm.exports.sqlite3__wasm_pstack_restore, + /** Attempts to allocate the given number of bytes from the pstack. On success, it zeroes out a block of memory of the @@ -5823,6 +6013,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( || WasmAllocError.toss("Could not allocate",n, "bytes from the pstack."); }, + /** alloc()'s n chunks, each sz bytes, as a single memory block and returns the addresses as an array of n element, each holding @@ -5835,7 +6026,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( Example: ``` - const [p1, p2, p3] = wasm.pstack.allocChunks(3,4); + const [p1, p2, p3] = wasm.pstack.allocChunks(3, wasm.ptr.size); ``` */ allocChunks: function(n,sz){ @@ -5843,21 +6034,22 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( WasmAllocError.toss("Invalid size value for allocChunks(",arguments[1],")"); } const mem = wasm.pstack.alloc(n * sz); - const rc = []; - let i = 0, offset = 0; - for(; i < n; ++i, offset += sz) rc.push(mem + offset); + const rc = [mem]; + let i = 1, offset = sz; + for(; i < n; ++i, offset += sz) rc.push(wasm.ptr.add(mem, offset)); return rc; }, + /** A convenience wrapper for allocChunks() which sizes each chunk - as either 8 bytes (safePtrSize is truthy) or wasm.ptrSizeof (if + as either 8 bytes (safePtrSize is truthy) or wasm.ptr.size (if safePtrSize is falsy). How it returns its result differs depending on its first argument: if it's 1, it returns a single pointer value. If it's more than 1, it returns the same as allocChunks(). - When a returned pointers will refer to a 64-bit value, e.g. a + When a returned pointer will refer to a 64-bit value, e.g. a double or int64, and that value must be written or fetched, e.g. using wasm.poke() or wasm.peek(), it is important that the pointer in question be aligned to an 8-byte @@ -5869,8 +6061,8 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( */ allocPtr: (n=1,safePtrSize=true)=>{ return 1===n - ? wasm.pstack.alloc(safePtrSize ? 8 : wasm.ptrSizeof) - : wasm.pstack.allocChunks(n, safePtrSize ? 8 : wasm.ptrSizeof); + ? wasm.pstack.alloc(safePtrSize ? 8 : wasm.ptr.size) + : wasm.pstack.allocChunks(n, safePtrSize ? 8 : wasm.ptr.size); }, /** @@ -5883,39 +6075,41 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( */ call: function(f){ const stackPos = wasm.pstack.pointer; - try{ return f(sqlite3) } finally{ - wasm.pstack.restore(stackPos); - } + try{ return f(sqlite3) } + finally{ wasm.pstack.restore(stackPos); } } })/*wasm.pstack*/; + Object.defineProperties(wasm.pstack, { /** - sqlite3.wasm.pstack.pointer resolves to the current pstack - position pointer. This value is intended _only_ to be saved - for passing to restore(). Writing to this memory, without - first reserving it via wasm.pstack.alloc() and friends, leads - to undefined results. + Resolves to the current pstack position pointer either as a + Number (32-bit WASM) or BigInt (64-bit WASM). This value is + intended _only_ to be saved for passing to restore(). Writing + to this memory, without first reserving it via + wasm.pstack.alloc() and friends, leads to undefined results. */ pointer: { configurable: false, iterable: true, writeable: false, get: wasm.exports.sqlite3__wasm_pstack_ptr //Whether or not a setter as an alternative to restore() is - //clearer or would just lead to confusion is unclear. + //clearer or would just lead to confusion or misuse is unclear. //set: wasm.exports.sqlite3__wasm_pstack_restore }, + /** - sqlite3.wasm.pstack.quota to the total number of bytes - available in the pstack, including any space which is currently + Resolves to the total number of bytes available in the pstack + allocator, including any space which is currently allocated. This value is a compile-time constant. */ quota: { configurable: false, iterable: true, writeable: false, get: wasm.exports.sqlite3__wasm_pstack_quota }, + /** - sqlite3.wasm.pstack.remaining resolves to the amount of space - remaining in the pstack. + Resolves to the number of bytes remaining in the pstack + allocator. */ remaining: { configurable: false, iterable: true, writeable: false, @@ -5923,12 +6117,16 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( } })/*wasm.pstack properties*/; + /** + Docs: https://sqlite.org/wasm/doc/trunk/api-c-style.md#sqlite3_randomness + */ capi.sqlite3_randomness = (...args)=>{ - if(1===args.length && util.isTypedArray(args[0]) - && 1===args[0].BYTES_PER_ELEMENT){ + if(1===args.length + && util.isTypedArray(args[0]) + && 1===args[0].BYTES_PER_ELEMENT){ const ta = args[0]; if(0===ta.byteLength){ - wasm.exports.sqlite3_randomness(0,0); + wasm.exports.sqlite3_randomness(0,wasm.ptr.null); return ta; } const stack = wasm.pstack.pointer; @@ -5941,13 +6139,13 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( do{ const j = (n>nAlloc ? nAlloc : n); r(j, ptr); - ta.set(typedArrayPart(heap, ptr, ptr+j), offset); + ta.set(wasm.typedArrayPart(heap, ptr, wasm.ptr.add(ptr,j)), offset); n -= j; offset += j; } while(n > 0); }catch(e){ - console.error("Highly unexpected (and ignored!) "+ - "exception in sqlite3_randomness():",e); + config.error("Highly unexpected (and ignored!) "+ + "exception in sqlite3_randomness():",e); }finally{ wasm.pstack.restore(stack); } @@ -5956,54 +6154,52 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( wasm.exports.sqlite3_randomness(...args); }; - /** State for sqlite3_wasmfs_opfs_dir(). */ - let __wasmfsOpfsDir = undefined; /** If the wasm environment has a WASMFS/OPFS-backed persistent storage directory, its path is returned by this function. If it does not then it returns "" (noting that "" is a falsy value). The first time this is called, this function inspects the current - environment to determine whether persistence support is available - and, if it is, enables it (if needed). After the first call it - always returns the cached result. + environment to determine whether WASMFS persistence support is + available and, if it is, enables it (if needed). After the first + call it always returns the cached result. If the returned string is not empty, any files stored under the - given path (recursively) are housed in OPFS storage. If the + returned path (recursively) are housed in OPFS storage. If the returned string is empty, this particular persistent storage option is not available on the client. Though the mount point name returned by this function is intended - to remain stable, clients should not hard-coded it - anywhere. Always call this function to get the path. + to remain stable, clients should not hard-coded it anywhere. + Always call this function to get the path. - Note that this function is a no-op in most builds of this - library, as the WASMFS capability requires a custom - build. + This function is a no-op in most builds of this library, as the + WASMFS capability requires a custom build. */ capi.sqlite3_wasmfs_opfs_dir = function(){ - if(undefined !== __wasmfsOpfsDir) return __wasmfsOpfsDir; + if(undefined !== this.dir) return this.dir; // If we have no OPFS, there is no persistent dir const pdir = config.wasmfsOpfsDir; if(!pdir || !globalThis.FileSystemHandle || !globalThis.FileSystemDirectoryHandle - || !globalThis.FileSystemFileHandle){ - return __wasmfsOpfsDir = ""; + || !globalThis.FileSystemFileHandle + || !wasm.exports.sqlite3__wasm_init_wasmfs){ + return this.dir = ""; } try{ if(pdir && 0===wasm.xCallWrapped( 'sqlite3__wasm_init_wasmfs', 'i32', ['string'], pdir )){ - return __wasmfsOpfsDir = pdir; + return this.dir = pdir; }else{ - return __wasmfsOpfsDir = ""; + return this.dir = ""; } }catch(e){ // sqlite3__wasm_init_wasmfs() is not available - return __wasmfsOpfsDir = ""; + return this.dir = ""; } - }; + }.bind(nu()); /** Returns true if sqlite3.capi.sqlite3_wasmfs_opfs_dir() is a @@ -6020,11 +6216,10 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( (defaulting to "main"), returns a truthy value (see below) if that db uses that VFS, else returns false. If pDb is falsy then the 3rd argument is ignored and this function returns a truthy - value if the default VFS name matches that of the 2nd - argument. Results are undefined if pDb is truthy but refers to an - invalid pointer. The 3rd argument specifies the database name of - the given database connection to check, defaulting to the main - db. + value if the default VFS name matches that of the 2nd argument. + Results are undefined if pDb is truthy but refers to an invalid + pointer. The 3rd argument specifies the database name of the + given database connection to check, defaulting to the main db. The 2nd and 3rd arguments may either be a JS string or a WASM C-string. If the 2nd argument is a NULL WASM pointer, the default @@ -6035,9 +6230,9 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( object. To permit safe use of this function from APIs which may be called - via the C stack (like SQL UDFs), this function does not throw: if - bad arguments cause a conversion error when passing into - wasm-space, false is returned. + via C (like SQL UDFs), this function does not throw: if bad + arguments cause a conversion error when passing into wasm-space, + false is returned. */ capi.sqlite3_js_db_uses_vfs = function(pDb,vfsName,dbName=0){ try{ @@ -6060,7 +6255,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( */ capi.sqlite3_js_vfs_list = function(){ const rc = []; - let pVfs = capi.sqlite3_vfs_find(0); + let pVfs = capi.sqlite3_vfs_find(wasm.ptr.null); while(pVfs){ const oVfs = new capi.sqlite3_vfs(pVfs); rc.push(wasm.cstrToJs(oVfs.$zName)); @@ -6086,12 +6281,12 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( capi.sqlite3_js_db_export = function(pDb, schema=0){ pDb = wasm.xWrap.testConvertArg('sqlite3*', pDb); if(!pDb) toss3('Invalid sqlite3* argument.'); - if(!wasm.bigIntEnabled) toss3('BigInt64 support is not enabled.'); + if(!wasm.bigIntEnabled) toss3('BigInt support is not enabled.'); const scope = wasm.scopedAllocPush(); let pOut; try{ - const pSize = wasm.scopedAlloc(8/*i64*/ + wasm.ptrSizeof); - const ppOut = pSize + 8; + const pSize = wasm.scopedAlloc(8/*i64*/ + wasm.ptr.size); + const ppOut = wasm.ptr.add(pSize, 8); /** Maintenance reminder, since this cost a full hour of grief and confusion: if the order of pSize/ppOut are reversed in @@ -6101,7 +6296,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( */ const zSchema = schema ? (wasm.isPtr(schema) ? schema : wasm.scopedAllocCString(''+schema)) - : 0; + : wasm.ptr.null; let rc = wasm.exports.sqlite3__wasm_db_serialize( pDb, zSchema, ppOut, pSize, 0 ); @@ -6112,7 +6307,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( pOut = wasm.peekPtr(ppOut); const nOut = wasm.peek(pSize, 'i64'); rc = nOut - ? wasm.heap8u().slice(pOut, pOut + Number(nOut)) + ? wasm.heap8u().slice(Number(pOut), Number(pOut) + Number(nOut)) : new Uint8Array(); return rc; }finally{ @@ -6128,7 +6323,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( or not provided, then "main" is assumed. */ capi.sqlite3_js_db_vfs = - (dbPointer, dbName=0)=>util.sqlite3__wasm_db_vfs(dbPointer, dbName); + (dbPointer, dbName=wasm.ptr.null)=>util.sqlite3__wasm_db_vfs(dbPointer, dbName); /** A thin wrapper around capi.sqlite3_aggregate_context() which @@ -6149,11 +6344,11 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( creates (or overwrites) the given file using those APIs. This is primarily intended for use in Emscripten-based builds where the POSIX APIs are transparently proxied by an in-memory virtual filesystem. - It may behave diffrently in other environments. + It may behave differently in other environments. The first argument must be either a JS string or WASM C-string - holding the filename. Note that this routine does _not_ create - intermediary directories if the filename has a directory part. + holding the filename. This routine does _not_ create intermediary + directories if the filename has a directory part. The 2nd argument may either a valid WASM memory pointer, an ArrayBuffer, or a Uint8Array. The 3rd must be the length, in @@ -6190,7 +6385,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( if(rc) SQLite3Error.toss("Creation of file failed with sqlite3 result code", capi.sqlite3_js_rc_str(rc)); }finally{ - wasm.dealloc(pData); + if( pData && pData!==data ) wasm.dealloc(pData); } }; @@ -6199,12 +6394,13 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( debug builds of sqlite3 because its out-of-scope use of the sqlite3_vfs API triggers assertions in the core library. That was unfortunately not discovered until 2023-08-11. This function - is now deprecated and should not be used in new code. + is now deprecated. It should not be used in new code and should + be removed from existing code. Alternative options: - - "unix" VFS and its variants can get equivalent functionality - with sqlite3_js_posix_create_file(). + - The "unix" VFS and its variants can get equivalent + functionality with sqlite3_js_posix_create_file(). - OPFS: use either sqlite3.oo1.OpfsDb.importDb(), for the "opfs" VFS, or the importDb() method of the PoolUtil object provided @@ -6213,6 +6409,8 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( from here because the former is necessarily asynchronous and the latter requires information not available to this function. + Historical (deprecated) behaviour: + Creates a file using the storage appropriate for the given sqlite3_vfs. The first argument may be a VFS name (JS string only, NOT a WASM C-string), WASM-managed `sqlite3_vfs*`, or @@ -6251,11 +6449,14 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( - "memdb": results are undefined. - "kvvfs": will fail with an I/O error due to strict internal - requirments of that VFS's xTruncate(). + requirements of that VFS's xTruncate(). - "unix" and related: will use the WASM build's equivalent of the POSIX I/O APIs. This will work so long as neither a specific - VFS nor the WASM environment imposes requirements which break it. + VFS nor the WASM environment imposes requirements which break + it. (Much later: it turns out that debug builds of the library + impose such requirements, in that they assert() that dataLen is + an even multiple of a valid db page size.) - "opfs": uses OPFS storage and creates directory parts of the filename. It can only be used to import an SQLite3 database @@ -6264,27 +6465,29 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( capi.sqlite3_js_vfs_create_file = function(vfs, filename, data, dataLen){ config.warn("sqlite3_js_vfs_create_file() is deprecated and", "should be avoided because it can lead to C-level crashes.", - "See its documentation for alternative options."); + "See its documentation for alternatives."); let pData; if(data){ - if(wasm.isPtr(data)){ + if( wasm.isPtr(data) ){ pData = data; - }else if(data instanceof ArrayBuffer){ - data = new Uint8Array(data); - } - if(data instanceof Uint8Array){ - pData = wasm.allocFromTypedArray(data); - if(arguments.length<4 || !util.isInt32(dataLen) || dataLen<0){ - dataLen = data.byteLength; - } }else{ - SQLite3Error.toss("Invalid 3rd argument type for sqlite3_js_vfs_create_file()."); + if( data instanceof ArrayBuffer ){ + data = new Uint8Array(data); + } + if( data instanceof Uint8Array ){ + pData = wasm.allocFromTypedArray(data); + if(arguments.length<4 || !util.isInt32(dataLen) || dataLen<0){ + dataLen = data.byteLength; + } + }else{ + SQLite3Error.toss("Invalid 3rd argument type for sqlite3_js_vfs_create_file()."); + } } }else{ pData = 0; } if(!util.isInt32(dataLen) || dataLen<0){ - wasm.dealloc(pData); + if( pData && pData!==data ) wasm.dealloc(pData); SQLite3Error.toss("Invalid 4th argument for sqlite3_js_vfs_create_file()."); } try{ @@ -6292,7 +6495,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( if(rc) SQLite3Error.toss("Creation of file failed with sqlite3 result code", capi.sqlite3_js_rc_str(rc)); }finally{ - wasm.dealloc(pData); + if( pData && pData!==data ) wasm.dealloc(pData); } }; @@ -6316,86 +6519,6 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( return x===v ? undefined : x; } - if( util.isUIThread() ){ - /* Features specific to the main window thread... */ - - /** - Internal helper for sqlite3_js_kvvfs_clear() and friends. - Its argument should be one of ('local','session',""). - */ - const __kvvfsInfo = function(which){ - const rc = Object.create(null); - rc.prefix = 'kvvfs-'+which; - rc.stores = []; - if('session'===which || ""===which) rc.stores.push(globalThis.sessionStorage); - if('local'===which || ""===which) rc.stores.push(globalThis.localStorage); - return rc; - }; - - /** - Clears all storage used by the kvvfs DB backend, deleting any - DB(s) stored there. Its argument must be either 'session', - 'local', or "". In the first two cases, only sessionStorage - resp. localStorage is cleared. If it's an empty string (the - default) then both are cleared. Only storage keys which match - the pattern used by kvvfs are cleared: any other client-side - data are retained. - - This function is only available in the main window thread. - - Returns the number of entries cleared. - */ - capi.sqlite3_js_kvvfs_clear = function(which=""){ - let rc = 0; - const kvinfo = __kvvfsInfo(which); - kvinfo.stores.forEach((s)=>{ - const toRm = [] /* keys to remove */; - let i; - for( i = 0; i < s.length; ++i ){ - const k = s.key(i); - if(k.startsWith(kvinfo.prefix)) toRm.push(k); - } - toRm.forEach((kk)=>s.removeItem(kk)); - rc += toRm.length; - }); - return rc; - }; - - /** - This routine guesses the approximate amount of - window.localStorage and/or window.sessionStorage in use by the - kvvfs database backend. Its argument must be one of - ('session', 'local', ""). In the first two cases, only - sessionStorage resp. localStorage is counted. If it's an empty - string (the default) then both are counted. Only storage keys - which match the pattern used by kvvfs are counted. The returned - value is the "length" value of every matching key and value, - noting that JavaScript stores each character in 2 bytes. - - Note that the returned size is not authoritative from the - perspective of how much data can fit into localStorage and - sessionStorage, as the precise algorithms for determining - those limits are unspecified and may include per-entry - overhead invisible to clients. - */ - capi.sqlite3_js_kvvfs_size = function(which=""){ - let sz = 0; - const kvinfo = __kvvfsInfo(which); - kvinfo.stores.forEach((s)=>{ - let i; - for(i = 0; i < s.length; ++i){ - const k = s.key(i); - if(k.startsWith(kvinfo.prefix)){ - sz += k.length; - sz += s.getItem(k).length; - } - } - }); - return sz * 2 /* because JS uses 2-byte char encoding */; - }; - - }/* main-window-only bits */ - /** Wraps all known variants of the C-side variadic sqlite3_db_config(). @@ -6408,43 +6531,51 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( missing or falsy pointer argument as 0. */ capi.sqlite3_db_config = function(pDb, op, ...args){ - if(!this.s){ - this.s = wasm.xWrap('sqlite3__wasm_db_config_s','int', - ['sqlite3*', 'int', 'string:static'] - /* MAINDBNAME requires a static string */); - this.pii = wasm.xWrap('sqlite3__wasm_db_config_pii', 'int', - ['sqlite3*', 'int', '*','int', 'int']); - this.ip = wasm.xWrap('sqlite3__wasm_db_config_ip','int', - ['sqlite3*', 'int', 'int','*']); - } switch(op){ - case capi.SQLITE_DBCONFIG_ENABLE_FKEY: - case capi.SQLITE_DBCONFIG_ENABLE_TRIGGER: - case capi.SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER: - case capi.SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION: - case capi.SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE: - case capi.SQLITE_DBCONFIG_ENABLE_QPSG: - case capi.SQLITE_DBCONFIG_TRIGGER_EQP: - case capi.SQLITE_DBCONFIG_RESET_DATABASE: - case capi.SQLITE_DBCONFIG_DEFENSIVE: - case capi.SQLITE_DBCONFIG_WRITABLE_SCHEMA: - case capi.SQLITE_DBCONFIG_LEGACY_ALTER_TABLE: - case capi.SQLITE_DBCONFIG_DQS_DML: - case capi.SQLITE_DBCONFIG_DQS_DDL: - case capi.SQLITE_DBCONFIG_ENABLE_VIEW: - case capi.SQLITE_DBCONFIG_LEGACY_FILE_FORMAT: - case capi.SQLITE_DBCONFIG_TRUSTED_SCHEMA: - case capi.SQLITE_DBCONFIG_STMT_SCANSTATUS: - case capi.SQLITE_DBCONFIG_REVERSE_SCANORDER: - return this.ip(pDb, op, args[0], args[1] || 0); - case capi.SQLITE_DBCONFIG_LOOKASIDE: - return this.pii(pDb, op, args[0], args[1], args[2]); - case capi.SQLITE_DBCONFIG_MAINDBNAME: - return this.s(pDb, op, args[0]); - default: - return capi.SQLITE_MISUSE; + case capi.SQLITE_DBCONFIG_ENABLE_FKEY: + case capi.SQLITE_DBCONFIG_ENABLE_TRIGGER: + case capi.SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER: + case capi.SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION: + case capi.SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE: + case capi.SQLITE_DBCONFIG_ENABLE_QPSG: + case capi.SQLITE_DBCONFIG_TRIGGER_EQP: + case capi.SQLITE_DBCONFIG_RESET_DATABASE: + case capi.SQLITE_DBCONFIG_DEFENSIVE: + case capi.SQLITE_DBCONFIG_WRITABLE_SCHEMA: + case capi.SQLITE_DBCONFIG_LEGACY_ALTER_TABLE: + case capi.SQLITE_DBCONFIG_DQS_DML: + case capi.SQLITE_DBCONFIG_DQS_DDL: + case capi.SQLITE_DBCONFIG_ENABLE_VIEW: + case capi.SQLITE_DBCONFIG_LEGACY_FILE_FORMAT: + case capi.SQLITE_DBCONFIG_TRUSTED_SCHEMA: + case capi.SQLITE_DBCONFIG_STMT_SCANSTATUS: + case capi.SQLITE_DBCONFIG_REVERSE_SCANORDER: + case capi.SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE: + case capi.SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE: + case capi.SQLITE_DBCONFIG_ENABLE_COMMENTS: + case capi.SQLITE_DBCONFIG_FP_DIGITS: + if( !this.ip ){ + this.ip = wasm.xWrap('sqlite3__wasm_db_config_ip','int', + ['sqlite3*', 'int', 'int', '*']); + } + return this.ip(pDb, op, args[0], args[1] || 0); + case capi.SQLITE_DBCONFIG_LOOKASIDE: + if( !this.pii ){ + this.pii = wasm.xWrap('sqlite3__wasm_db_config_pii', 'int', + ['sqlite3*', 'int', '*', 'int', 'int']); + } + return this.pii(pDb, op, args[0], args[1], args[2]); + case capi.SQLITE_DBCONFIG_MAINDBNAME: + if(!this.s){ + this.s = wasm.xWrap('sqlite3__wasm_db_config_s','int', + ['sqlite3*', 'int', 'string:static'] + /* MAINDBNAME requires a static string */); + } + return this.s(pDb, op, args[0]); + default: + return capi.SQLITE_MISUSE; } - }.bind(Object.create(null)); + }.bind(nu()); /** Given a (sqlite3_value*), this function attempts to convert it @@ -6491,7 +6622,9 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( if(n && !pBlob) sqlite3.WasmAllocError.toss( "Cannot allocate memory for blob argument of",n,"byte(s)" ); - arg = n ? wasm.heap8u().slice(pBlob, pBlob + Number(n)) : null; + arg = n + ? wasm.heap8u().slice(Number(pBlob), Number(pBlob) + Number(n)) + : null; break; } case capi.SQLITE_NULL: @@ -6525,7 +6658,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( do not. */ tgt.push(capi.sqlite3_value_to_js( - wasm.peekPtr(pArgv + (wasm.ptrSizeof * i)), + wasm.peekPtr(wasm.ptr.add(pArgv, wasm.ptr.size * i)), throwIfCannotConvert )); } @@ -6663,75 +6796,135 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( return (0===v) ? undefined : capi.sqlite3_value_to_js(v, throwIfCannotConvert); }; - /** - Internal impl of sqlite3_preupdate_new/old_js() and - sqlite3changeset_new/old_js(). - */ - const __newOldValue = function(pObj, iCol, impl){ - impl = capi[impl]; - if(!this.ptr) this.ptr = wasm.allocPtr(); - else wasm.pokePtr(this.ptr, 0); - const rc = impl(pObj, iCol, this.ptr); - if(rc) return SQLite3Error.toss(rc,arguments[2]+"() failed with code "+rc); - const pv = wasm.peekPtr(this.ptr); - return pv ? capi.sqlite3_value_to_js( pv, true ) : undefined; - }.bind(Object.create(null)); + if( true ){ /* changeset/preupdate additions... */ + /** + Internal impl of sqlite3_preupdate_new/old_js() and + sqlite3changeset_new/old_js(). + */ + const __newOldValue = function(pObj, iCol, impl){ + impl = capi[impl]; + if(!this.ptr) this.ptr = wasm.allocPtr(); + else wasm.pokePtr(this.ptr, 0); + const rc = impl(pObj, iCol, this.ptr); + if(rc) return SQLite3Error.toss(rc,arguments[2]+"() failed with code "+rc); + const pv = wasm.peekPtr(this.ptr); + return pv ? capi.sqlite3_value_to_js( pv, true ) : undefined; + }.bind(nu()); - /** - A wrapper around sqlite3_preupdate_new() which fetches the - sqlite3_value at the given index and returns the result of - passing it to sqlite3_value_to_js(). Throws on error. - */ - capi.sqlite3_preupdate_new_js = - (pDb, iCol)=>__newOldValue(pDb, iCol, 'sqlite3_preupdate_new'); + /** + A wrapper around sqlite3_preupdate_new() which fetches the + sqlite3_value at the given index and returns the result of + passing it to sqlite3_value_to_js(). Throws on error. + */ + capi.sqlite3_preupdate_new_js = + (pDb, iCol)=>__newOldValue(pDb, iCol, 'sqlite3_preupdate_new'); - /** - The sqlite3_preupdate_old() counterpart of - sqlite3_preupdate_new_js(), with an identical interface. - */ - capi.sqlite3_preupdate_old_js = - (pDb, iCol)=>__newOldValue(pDb, iCol, 'sqlite3_preupdate_old'); + /** + The sqlite3_preupdate_old() counterpart of + sqlite3_preupdate_new_js(), with an identical interface. + */ + capi.sqlite3_preupdate_old_js = + (pDb, iCol)=>__newOldValue(pDb, iCol, 'sqlite3_preupdate_old'); - /** - A wrapper around sqlite3changeset_new() which fetches the - sqlite3_value at the given index and returns the result of - passing it to sqlite3_value_to_js(). Throws on error. + /** + A wrapper around sqlite3changeset_new() which fetches the + sqlite3_value at the given index and returns the result of + passing it to sqlite3_value_to_js(). Throws on error. + + If sqlite3changeset_new() succeeds but has no value to report, + this function returns the undefined value, noting that + undefined is not a valid conversion from an `sqlite3_value`, so + is unambiguous. + */ + capi.sqlite3changeset_new_js = + (pChangesetIter, iCol) => __newOldValue(pChangesetIter, iCol, + 'sqlite3changeset_new'); - If sqlite3changeset_new() succeeds but has no value to report, - this function returns the undefined value, noting that undefined - is a valid conversion from an `sqlite3_value`, so is unambiguous. - */ - capi.sqlite3changeset_new_js = - (pChangesetIter, iCol) => __newOldValue(pChangesetIter, iCol, - 'sqlite3changeset_new'); + /** + The sqlite3changeset_old() counterpart of + sqlite3changeset_new_js(), with an identical interface. + */ + capi.sqlite3changeset_old_js = + (pChangesetIter, iCol)=>__newOldValue(pChangesetIter, iCol, + 'sqlite3changeset_old'); + }/*changeset/preupdate additions*/ /** - The sqlite3changeset_old() counterpart of - sqlite3changeset_new_js(), with an identical interface. + sqlite3_js_retry_busy(maxTimes,callback[,beforeRetry]) + + Calls the given _synchronous_ callback function. If that function + returns sqlite3.capi.SQLITE_BUSY _or_ throws an SQLite3Error + with a resultCode property of that value then it will suppress + that error and try again, up to the given maximum number of + times. If the callback returns any other value than that, + it is returned. If the maximum number of retries has been + reached, an SQLite3Error with a resultCode value of + sqlite3.capi.SQLITE_BUSY is thrown. If the callback throws any + exception other than the aforementioned BUSY exception, it is + propagated. If it throws a BUSY exception on its final attempt, + that is propagated as well. + + If the beforeRetry argument is given, it must be a _synchronous_ + function. It is called immediately before each retry of the + callback (not for the initial call), passed the attempt number + (so it starts with 2, not 1). If it throws, the exception is + handled as described above. Its result value is ignored. + + To effectively retry "forever", pass a huge maxTimes value such + as Number.MAX_SAFE_INTEGER, with the caveat that there is no + recovery from that unless the beforeRetry() can figure out when + to throw. + + Added in 3.53.0. + + TODO?: an async variant of this. */ - capi.sqlite3changeset_old_js = - (pChangesetIter, iCol)=>__newOldValue(pChangesetIter, iCol, - 'sqlite3changeset_old'); + capi.sqlite3_js_retry_busy = function(maxTimes, callback, beforeRetry){ + for(let n = 1; n <= maxTimes; ++n){ + try{ + if( beforeRetry && n>1 ) beforeRetry(n); + const rc = callback(); + if( capi.SQLITE_BUSY===rc ){ + if( n===maxTimes ){ + throw new SQLite3Error(rc, [ + "sqlite3_js_retry_busy() max retry attempts (", + maxTimes, + ") reached." + ].join('')); + } + continue; + } + return rc; + }catch(e){ + if( n{ if(!sqlite3.__isUnderTest){ /* Delete references to internal-only APIs which are used by some initializers. Retain them when running in test mode so that we can add tests for them. */ delete sqlite3.util; - /* It's conceivable that we might want to expose - StructBinder to client-side code, but it's only useful if - clients build their own sqlite3.wasm which contains their - own C struct types. */ delete sqlite3.StructBinder; + delete sqlite3.opfs; } return sqlite3; }; @@ -6800,21 +6988,26 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( let p = Promise.resolve(sqlite3); while(lia.length) p = p.then(lia.shift()); return ff.isReady = p.catch(catcher); - }, + }.bind(sqlite3ApiBootstrap), /** - scriptInfo ideally gets injected into this object by the - infrastructure which assembles the JS/WASM module. It contains - state which must be collected before sqlite3ApiBootstrap() can - be declared. It is not necessarily available to any - sqlite3ApiBootstrap.initializers but "should" be in place (if - it's added at all) by the time that - sqlite3ApiBootstrap.initializersAsync is processed. + scriptInfo holds information about the currenty-loading script + so that we can locate the WASM file if it's somewhere other + than the build-time-defined directory. It ideally gets injected + into this object by the infrastructure which assembles the + JS/WASM module. It contains state which must be collected + before sqlite3ApiBootstrap() can be declared. It is not + necessarily available to any sqlite3ApiBootstrap.initializers + but "should" be in place (if it's added at all) by the time + that sqlite3ApiBootstrap.initializersAsync is processed. This state is not part of the public API, only intended for use with the sqlite3 API bootstrapping and wasm-loading process. */ scriptInfo: undefined }; + if( 'undefined'!==typeof sqlite3IsUnderTest/* from post-js-header.js */ ){ + sqlite3.__isUnderTest = !!sqlite3IsUnderTest; + } try{ sqlite3ApiBootstrap.initializers.forEach((f)=>{ f(sqlite3); @@ -6827,28 +7020,83 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( } delete sqlite3ApiBootstrap.initializers; sqlite3ApiBootstrap.sqlite3 = sqlite3; - return sqlite3; + if( 'undefined'!==typeof sqlite3InitScriptInfo/* from post-js-header.js */ ){ + sqlite3InitScriptInfo.debugModule( + "sqlite3ApiBootstrap() complete", sqlite3 + ); + sqlite3.scriptInfo + /* Used by some async init code. As of 2025-11-15 this is still + in use by the OPFS VFS for locating its worker. In non-Emscripten + builds, this would need to be injected in somewhere to get + that VFS loading. */ = sqlite3InitScriptInfo; + } + if( sqlite3.__isUnderTest ){ + if( 'undefined'!==typeof EmscriptenModule ){ + sqlite3.config.emscripten = EmscriptenModule; + } + /* + The problem with exposing these pieces (in non-testing runs) via + sqlite3.wasm is that it exposes non-SQLite pieces to the + clients, who may come to expect it to remain. _We_ only have + these data because we've overridden Emscripten's wasm file + loader, and if we lose that capability for some reason then + we'll lose access to this metadata. + + These data are interesting for exploring how the wasm/JS pieces + connect, e.g. for exploring exactly what Emscripten imports into + WASM from its JS glue, but it's not SQLite-related and is not + required for the library to work. + */ + const iw = sqlite3.scriptInfo?.instantiateWasm; + if( iw ){ + /* Metadata injected by the custom Module.instantiateWasm() + in pre-js.c-pp.js. */ + sqlite3.wasm.module = iw.module; + sqlite3.wasm.instance = iw.instance; + sqlite3.wasm.imports = iw.imports; + } + } + + /** + Eliminate any confusion about whether these config objects may + be used after library initialization by eliminating the outward-facing + objects... + */ + delete globalThis.sqlite3ApiConfig; + delete globalThis.sqlite3ApiBootstrap; + delete sqlite3ApiBootstrap.defaultConfig; + return sqlite3.asyncPostInit().then((s)=>{ + if( 'undefined'!==typeof sqlite3InitScriptInfo/* from post-js-header.js */ ){ + sqlite3InitScriptInfo.debugModule( + "sqlite3.asyncPostInit() complete", s + ); + } + delete s.asyncPostInit; + delete s.scriptInfo; + delete s.emscripten; + return s; + }); }/*sqlite3ApiBootstrap()*/; + /** - globalThis.sqlite3ApiBootstrap.initializers is an internal detail used by - the various pieces of the sqlite3 API's amalgamation process. It - must not be modified by client code except when plugging such code - into the amalgamation process. + globalThis.sqlite3ApiBootstrap.initializers is an internal detail + used by the various pieces of the sqlite3 API's amalgamation + process. It must not be modified by client code except when plugging + such code into the amalgamation process. Each component of the amalgamation is expected to append a function to this array. When sqlite3ApiBootstrap() is called for the first time, each such function will be called (in their appended order) and passed the sqlite3 namespace object, into which they can install - their features (noting that most will also require that certain - features alread have been installed). At the end of that process, - this array is deleted. + their features. At the end of that process, this array is deleted. - Note that the order of insertion into this array is significant for + The order of insertion into this array is significant for some pieces. e.g. sqlite3.capi and sqlite3.wasm cannot be fully utilized until the whwasmutil.js part is plugged in via sqlite3-api-glue.js. */ globalThis.sqlite3ApiBootstrap.initializers = []; + /** globalThis.sqlite3ApiBootstrap.initializersAsync is an internal detail used by the sqlite3 API's amalgamation process. It must not be @@ -6871,6 +7119,7 @@ globalThis.sqlite3ApiBootstrap.initializers = []; this list. */ globalThis.sqlite3ApiBootstrap.initializersAsync = []; + /** Client code may assign sqlite3ApiBootstrap.defaultConfig an object-type value before calling sqlite3ApiBootstrap() (without @@ -6881,6 +7130,7 @@ globalThis.sqlite3ApiBootstrap.initializersAsync = []; global-scope symbol. */ globalThis.sqlite3ApiBootstrap.defaultConfig = Object.create(null); + /** Placeholder: gets installed by the first call to globalThis.sqlite3ApiBootstrap(). However, it is recommended that the @@ -6889,8 +7139,9 @@ globalThis.sqlite3ApiBootstrap.defaultConfig = Object.create(null); value which will be stored here. */ globalThis.sqlite3ApiBootstrap.sqlite3 = undefined; -/* END FILE: api/sqlite3-api-prologue.js */ -/* BEGIN FILE: common/whwasmutil.js */ +globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ + sqlite3.version = {"libVersion": "3.54.1", "libVersionNumber": 3054001, "sourceId": "2026-10-16 14:45:20 555e07ef33f69a0957d24d8e555b702464a131d6f1607f4c3c1e4551e8e6ca76","downloadVersion": 3540100,"scm":{ "sha3-256": "555e07ef33f69a0957d24d8e555b702464a131d6f1607f4c3c1e4551e8e6ca76","branch": "branch-3.54","tags": "release version-3.54.1","datetime": "2026-10-16T14:45:20.546Z"}}; +}); /** 2022-07-08 @@ -6903,54 +7154,58 @@ globalThis.sqlite3ApiBootstrap.sqlite3 = undefined; *********************************************************************** - The whwasmutil is developed in conjunction with the Jaccwabyt - project: + This code is developed in conjunction with the Jaccwabyt project: https://fossil.wanderinghorse.net/r/jaccwabyt - and sqlite3: + More specifically: + + https://fossil.wanderinghorse.net/r/jaccwabyt/dir/wasmutil + + and SQLite: https://sqlite.org This file is kept in sync between both of those trees. - Maintenance reminder: If you're reading this in a tree other than - one of those listed above, note that this copy may be replaced with - upstream copies of that one from time to time. Thus the code - installed by this function "should not" be edited outside of those - projects, else it risks getting overwritten. + This build was generated using: + + ./c-pp -o js/whwasmutil.js -@policy=error wasmutil/whwasmutil.c-pp.js + + by libcmpp 2.x 2fc4afc31f6505c27b9c34988973a2bd9b157d559247cdd26868ae75632c3a5e @ 2025-11-16 23:03:27.352 UTC */ /** - This function is intended to simplify porting around various bits - of WASM-related utility code from project to project. - - The primary goal of this code is to replace, where possible, - Emscripten-generated glue code with equivalent utility code which - can be used in arbitrary WASM environments built with toolchains - other than Emscripten. As of this writing, this code is capable of - acting as a replacement for Emscripten's generated glue code - _except_ that the latter installs handlers for Emscripten-provided - APIs such as its "FS" (virtual filesystem) API. Loading of such - things still requires using Emscripten's glue, but the post-load - utility APIs provided by this code are still usable as replacements - for their sub-optimally-documented Emscripten counterparts. + The primary goal of this function is to provide JS/WASM utility + code similar to some of that provided by Emscripten-generated + builds, the difference being that this one can be used in arbitrary + WASM environments built with toolchains other than Emscripten. To + that end, it populates the given object with various WASM-specific + APIs. These APIs work with both 32- and 64-bit WASM builds. + + Forewarning: this API explicitly targets only browser environments. + If a given non-browser environment has the capabilities needed for + a given feature (e.g. TextEncoder), great, but it does not go out + of its way to account for them and does not provide compatibility + crutches for them. That said: no specific incompatibilities with, + e.g., node.js are known (whereas it is known that some folks + use this with node.js). Intended usage: ``` - globalThis.WhWasmUtilInstaller(appObject); + const target = {}; // ... some object ... + globalThis.WhWasmUtilInstaller(target); delete globalThis.WhWasmUtilInstaller; ``` - Its global-scope symbol is intended only to provide an easy way to - make it available to 3rd-party scripts and "should" be deleted - after calling it. That symbols is _not_ used within the library. + The `target` object then holds the APIs. The caller may set certain + properties on it, before calling this, to configure it, as + documented below. - Forewarning: this API explicitly targets only browser - environments. If a given non-browser environment has the - capabilities needed for a given feature (e.g. TextEncoder), great, - but it does not go out of its way to account for them and does not - provide compatibility crutches for them. + The global-scope symbol for this function is intended only to + provide an easy way to make it available to 3rd-party scripts and + "should" be deleted after calling it. That symbol is _not_ used + within the library. It currently offers alternatives to the following Emscripten-generated APIs: @@ -6962,7 +7217,8 @@ globalThis.sqlite3ApiBootstrap.sqlite3 = undefined; - WASM-exported "indirect function table" access and manipulation. e.g. creating new WASM-side functions using JS functions, analog to Emscripten's addFunction() and - uninstallFunction() but slightly different. + uninstallFunction() but slightly different and with more useful + lifetime semantics. - Get/set specific heap memory values, analog to Emscripten's getValue() and setValue(). @@ -6991,14 +7247,16 @@ globalThis.sqlite3ApiBootstrap.sqlite3 = undefined; How to install... - Passing an object to this function will install the functionality - into that object. Afterwards, client code "should" delete the global - symbol. + Passing an object to this function will install this library's + functionality into that object. It returns its argument. + + After installation, client code "should" delete this function's + global symbol (if any). This code requires that the target object have the following - properties, noting that they needn't be available until the first - time one of the installed APIs is used (as opposed to when this - function is called) except where explicitly noted: + properties, though they needn't be available until the first time + one of the installed APIs is used (as opposed to when this function + is called) except where explicitly noted: - `exports` must be a property of the target object OR a property of `target.instance` (a WebAssembly.Module instance) and it must @@ -7019,6 +7277,12 @@ globalThis.sqlite3ApiBootstrap.sqlite3 = undefined; require that the table be able to grow but it will throw if its `installFunction()` is called and the table cannot grow. + - `functionTable`: WebAssembly.Table object holding the indirect + function call table. If not set then + `exports.__indirect_function_table` is assumed. Achtung: this + property gets replaced by a function with the same name (because + this API used that name before this config option was added). + In order to simplify downstream usage, if `target.exports` is not set when this is called then a property access interceptor (read-only, configurable, enumerable) gets installed as `exports` @@ -7032,11 +7296,10 @@ globalThis.sqlite3ApiBootstrap.sqlite3 = undefined; false. If it is false, certain BigInt-related features will trigger an exception if invoked. This property, if not set when this is called, will get a default value of true only if the BigInt64Array - constructor is available, else it will default to false. Note that - having the BigInt type is not sufficient for full int64 integration - with WASM: the target WASM file must also have been built with - that support. In Emscripten that's done using the `-sWASM_BIGINT` - flag. + constructor is available, else it will default to false. Having + the BigInt type is not sufficient for full int64 integration with + WASM: the target WASM file must also have been built with that + support. In Emscripten that's done using the `-sWASM_BIGINT` flag. Some optional APIs require that the target have the following methods: @@ -7055,70 +7318,175 @@ globalThis.sqlite3ApiBootstrap.sqlite3 = undefined; APIs which require allocation routines are explicitly documented as such and/or have "alloc" in their names. - This code is developed and maintained in conjunction with the - Jaccwabyt project: + Optional configuration values which may be set on target before + calling this: - https://fossil.wanderinghorse.net/r/jaccwabbyt + - `pointerIR`: an IR-format string for the WASM environment's + pointer size. If set it must be either 'i32' or 'i64'. If not + set, it gets set to whatever this code thinks the pointer size + is. Modifying it after this call has no effect. A reliable + way to get this value is (typeof X()), where X is a function + from target.exports which returns an innocuous pointer. - More specifically: + - `pointerSize`: if set, it must be one of 4 or 8 and must + correspond to the value of `pointerIR`. If not set, it gets set + to whatever this code thinks the pointer size is (4 unless + `pointerIR` is 'i64'). If `pointerSize` is set but `pointerIR` + is not, `pointerIR` gets set appropriately, and vice versa. - https://fossil.wanderinghorse.net/r/jaccwabbyt/file/common/whwasmutil.js -*/ -globalThis.WhWasmUtilInstaller = function(target){ - 'use strict'; - if(undefined===target.bigIntEnabled){ - target.bigIntEnabled = !!globalThis['BigInt64Array']; - } + When building with Emscripten's -sMEMORY64=1, `pointerIR` must be + set to 'i64' and/or `pointerSize` must be set to 8. - /** Throws a new Error, the message of which is the concatenation of + After calling this, the pointerIR and pointerSize properties are + replaced with a read-only Object member named target.ptr. It + contains the following read-only helper methods and properties to + assist in using WASM pointers without having to know what type they + are: + + - `size` = pointerSize + + - `ir` = pointerIR + + - `null` = a "null" pointer of type Number or BigInt. Equivalent to + one of Number(0) or BigInt(0). This value compares === to + WASM NULL pointers. + + - `coerce(arg)` = equivalent to one of Number(arg) or BigInt(arg||0). + + - `add(...args)` = performs "pointer arithmetic" (`wasmPtr+offset` + does not work in 64-bit builds unless all operands are of type + BigInt). Adds up all of its arguments, accounting for whether + each is a Number of BigInt, and returns either a Number or + BigInt. + + - `addn(...args)` = like `add()` but always returns its result as a + Number. Equivalent to Number(add(...)). + + ------------------------------------------------------------ + Design notes: + + - This function should probably take a config object and return the + newly-created (or config-provided) target. The current approach + seemed better at the time. +*/ +'use strict'; +globalThis.WhWasmUtilInstaller = +function WhWasmUtilInstaller(target){ + 'use strict'; + if(undefined===target.bigIntEnabled){ + target.bigIntEnabled = !!globalThis['BigInt64Array']; + } + + /** Throws a new Error, the message of which is the concatenation of all args with a space between each. */ const toss = (...args)=>{throw new Error(args.join(' '))}; + if( !target.pointerSize && !target.pointerIR + && target.alloc && target.dealloc ){ + /* Try to determine the pointer size by allocating. */ + const ptr = target.alloc(1); + target.pointerSize = ('bigint'===typeof ptr ? 8 : 4); + target.dealloc(ptr); + } + + /** + As of 2025-09-21, this library works with 64-bit WASM modules + built with Emscripten's -sMEMORY64=1. + */ + if( target.pointerSize && !target.pointerIR ){ + target.pointerIR = (4===target.pointerSize ? 'i32' : 'i64'); + } + const __ptrIR = (target.pointerIR ??= 'i32'); + const __ptrSize = (target.pointerSize ??= + ('i32'===__ptrIR ? 4 : ('i64'===__ptrIR ? 8 : 0))); + delete target.pointerSize; + delete target.pointerIR; + + if( 'i32'!==__ptrIR && 'i64'!==__ptrIR ){ + toss("Invalid pointerIR:",__ptrIR); + }else if( 8!==__ptrSize && 4!==__ptrSize ){ + toss("Invalid pointerSize:",__ptrSize); + } + + /** Either BigInt or, if !target.bigIntEnabled, a function which + throws complaining that BigInt is not enabled. */ + const __BigInt = target.bigIntEnabled + ? (v)=>BigInt(v || 0) + : (v)=>toss("BigInt support is disabled in this build."); + + const __Number = (v)=>Number(v||0)/*treat undefined the same as null*/; + + /** + If target.ptr.ir==='i32' then this is equivalent to + Number(v||0) else it's equivalent to BigInt(v||0), throwing + if BigInt support is disabled. + + Why? Because Number(null)===0, but BigInt(null) throws. We + perform the same for Number to allow the undefined value to be + treated as a NULL WASM pointer, primarily to reduce friction in + many SQLite3 bindings which have long relied on that. + */ + const __asPtrType = (4===__ptrSize) ? __Number : __BigInt; + + /** + The number 0 as either type Number or BigInt, depending on + target.ptr.ir. + */ + const __NullPtr = __asPtrType(0); + + /** + Expects any number of numeric arguments, each one of either type + Number or BigInt. It sums them up (from an implicit starting + point of 0 or 0n) and returns them as a number of the same type + which target.ptr.coerce() uses. + + This is a workaround for not being able to mix Number/BigInt in + addition/subtraction expressions (which we frequently need for + calculating pointer offsets). + */ + const __ptrAdd = function(...args){ + let rc = __asPtrType(0); + for(const v of args) rc += __asPtrType(v); + return rc; + }; + + /** Set up target.ptr... */ + { + const __ptr = Object.create(null); + Object.defineProperty(target, 'ptr', { + enumerable: true, + get: ()=>__ptr, + set: ()=>toss("The ptr property is read-only.") + }); + (function f(name, val){ + Object.defineProperty(__ptr, name, { + enumerable: true, + get: ()=>val, + set: ()=>toss("ptr["+name+"] is read-only.") + }); + return f; + })( + 'null', __NullPtr + )( + 'size', __ptrSize + )( + 'ir', __ptrIR + )( + 'coerce', __asPtrType + )( + 'add', __ptrAdd + )( + 'addn', (4===__ptrIR) ? __ptrAdd : (...args)=>Number(__ptrAdd(...args)) + ); + } + if(!target.exports){ Object.defineProperty(target, 'exports', { enumerable: true, configurable: true, - get: ()=>(target.instance && target.instance.exports) + get: ()=>(target.instance?.exports) }); } - /********* - alloc()/dealloc() auto-install... - - This would be convenient but it can also cause us to pick up - malloc() even when the client code is using a different exported - allocator (who, me?), which is bad. malloc() may be exported even - if we're not explicitly using it and overriding the malloc() - function, linking ours first, is not always feasible when using a - malloc() proxy, as it can lead to recursion and stack overflow - (who, me?). So... we really need the downstream code to set up - target.alloc/dealloc() itself. - ******/ - /****** - if(target.exports){ - //Maybe auto-install alloc()/dealloc()... - if(!target.alloc && target.exports.malloc){ - target.alloc = function(n){ - const m = this(n); - return m || toss("Allocation of",n,"byte(s) failed."); - }.bind(target.exports.malloc); - } - - if(!target.dealloc && target.exports.free){ - target.dealloc = function(ptr){ - if(ptr) this(ptr); - }.bind(target.exports.free); - } - }*******/ - - /** - Pointers in WASM are currently assumed to be 32-bit, but someday - that will certainly change. - */ - const ptrIR = target.pointerIR || 'i32'; - const ptrSizeof = target.ptrSizeof = - ('i32'===ptrIR ? 4 - : ('i64'===ptrIR - ? 8 : toss("Unhandled ptrSizeof:",ptrIR))); /** Stores various cached state. */ const cache = Object.create(null); /** Previously-recorded size of cache.memory.buffer, noted so that @@ -7132,10 +7500,17 @@ globalThis.WhWasmUtilInstaller = function(target){ installFunction() extracts them. */ cache.freeFuncIndexes = []; /** - Used by scopedAlloc() and friends. + List-of-lists used by scopedAlloc() and friends. */ cache.scopedAlloc = []; + /** Push the pointer ptr to the current cache.scopedAlloc list + (which must already exist) and return ptr. */ + cache.scopedAlloc.pushPtr = (ptr)=>{ + cache.scopedAlloc[cache.scopedAlloc.length-1].push(ptr); + return ptr; + }; + cache.utf8Decoder = new TextDecoder(); cache.utf8Encoder = new TextEncoder('utf-8'); @@ -7143,7 +7518,7 @@ globalThis.WhWasmUtilInstaller = function(target){ For the given IR-like string in the set ('i8', 'i16', 'i32', 'f32', 'float', 'i64', 'f64', 'double', '*'), or any string value ending in '*', returns the sizeof for that value - (target.ptrSizeof in the latter case). For any other value, it + (target.ptr.size in the latter case). For any other value, it returns the undefined value. */ target.sizeofIR = (n)=>{ @@ -7152,9 +7527,9 @@ globalThis.WhWasmUtilInstaller = function(target){ case 'i16': return 2; case 'i32': case 'f32': case 'float': return 4; case 'i64': case 'f64': case 'double': return 8; - case '*': return ptrSizeof; + case '*': return __ptrSize; default: - return (''+n).endsWith('*') ? ptrSizeof : undefined; + return (''+n).endsWith('*') ? __ptrSize : undefined; } }; @@ -7175,10 +7550,14 @@ globalThis.WhWasmUtilInstaller = function(target){ cache.HEAP8 = new Int8Array(b); cache.HEAP8U = new Uint8Array(b); cache.HEAP16 = new Int16Array(b); cache.HEAP16U = new Uint16Array(b); cache.HEAP32 = new Int32Array(b); cache.HEAP32U = new Uint32Array(b); + cache.HEAP32F = new Float32Array(b); cache.HEAP64F = new Float64Array(b); if(target.bigIntEnabled){ - cache.HEAP64 = new BigInt64Array(b); cache.HEAP64U = new BigUint64Array(b); + if( 'undefined'!==typeof BigInt64Array ){ + cache.HEAP64 = new BigInt64Array(b); cache.HEAP64U = new BigUint64Array(b); + }else{ + toss("BigInt support is enabled, but the BigInt64Array type is missing."); + } } - cache.HEAP32F = new Float32Array(b); cache.HEAP64F = new Float64Array(b); cache.heapSize = b.byteLength; return cache; }; @@ -7212,25 +7591,20 @@ globalThis.WhWasmUtilInstaller = function(target){ BigInt64Array/BigUint64Array, else it throws if passed 64 or one of those constructors. - Returns an integer-based TypedArray view of the WASM heap - memory buffer associated with the given block size. If passed - an integer as the first argument and unsigned is truthy then - the "U" (unsigned) variant of that view is returned, else the - signed variant is returned. If passed a TypedArray value, the - 2nd argument is ignored. Note that Float32Array and - Float64Array views are not supported by this function. + Returns an integer-based TypedArray view of the WASM heap memory + buffer associated with the given block size. If passed an integer + as the first argument and unsigned is truthy then the "U" + (unsigned) variant of that view is returned, else the signed + variant is returned. If passed a TypedArray value, the 2nd + argument is ignored. Float32Array and Float64Array views are not + supported by this function. - Note that growth of the heap will invalidate any references to - this heap, so do not hold a reference longer than needed and do - not use a reference after any operation which may - allocate. Instead, re-fetch the reference by calling this - function again. + Growth of the heap will invalidate any references to this heap, + so do not hold a reference longer than needed and do not use a + reference after any operation which may allocate. Instead, + re-fetch the reference by calling this function again. Throws if passed an invalid n. - - Pedantic side note: the name "heap" is a bit of a misnomer. In a - WASM environment, the stack and heap memory are all accessed via - the same view(s) of the memory. */ target.heapForSize = function(n,unsigned = true){ let ctor; @@ -7257,17 +7631,23 @@ globalThis.WhWasmUtilInstaller = function(target){ "or (if BigInt is enabled) 64."); }; + const __funcTable = target.functionTable; + delete target.functionTable; + /** - Returns the WASM-exported "indirect function table." + Returns the WASM-exported "indirect function table". */ - target.functionTable = function(){ - return target.exports.__indirect_function_table; + target.functionTable = __funcTable + ? ()=>__funcTable + : ()=>target.exports.__indirect_function_table /** -----------------^^^^^ "seems" to be a standardized export name. From Emscripten release notes from 2020-09-10: - Use `__indirect_function_table` as the import name for the table, which is what LLVM does. - */ - }; + + We must delay access to target.exports until after the library + is bootstrapped. + */; /** Given a function pointer, returns the WASM function table entry @@ -7276,7 +7656,10 @@ globalThis.WhWasmUtilInstaller = function(target){ */ target.functionEntry = function(fptr){ const ft = target.functionTable(); - return fptr < ft.length ? ft.get(fptr) : undefined; + //console.debug("functionEntry(",arguments,")", __asPtrType(fptr)); + //-sMEMORY64=1: we get a BigInt fptr and ft.get() wants a BigInt. + //-sMEMORY64=2: we get a Number fptr and ft.get() wants a Number. + return fptr < ft.length ? ft.get(__asPtrType(fptr)) : undefined; }; /** @@ -7289,17 +7672,16 @@ globalThis.WhWasmUtilInstaller = function(target){ - Emscripten: `"x..."`, where the first x is a letter representing the result type and subsequent letters represent the argument types. Functions with no arguments have only a single - letter. See below. + letter. - Jaccwabyt: `"x(...)"` where `x` is the letter representing the result type and letters in the parens (if any) represent the - argument types. Functions with no arguments use `x()`. See - below. + argument types. Functions with no arguments use `x()`. Supported letters: - `i` = int32 - - `p` = int32 ("pointer") + - `p` = int32 or int64 ("pointer"), depending on target.ptr.size - `j` = int64 - `f` = float32 - `d` = float64 @@ -7325,36 +7707,47 @@ globalThis.WhWasmUtilInstaller = function(target){ call-local functions and superfluous temporary arrays. */ if(!f._){/*static init...*/ f._ = { - // Map of signature letters to type IR values + /* Map of signature letters to type IR values */ sigTypes: Object.assign(Object.create(null),{ - i: 'i32', p: 'i32', P: 'i32', s: 'i32', + i: 'i32', p: __ptrIR, P: __ptrIR, s: __ptrIR, j: 'i64', f: 'f32', d: 'f64' }), - // Map of type IR values to WASM type code values + + /* Map of type IR values to WASM type code values */ typeCodes: Object.assign(Object.create(null),{ f64: 0x7c, f32: 0x7d, i64: 0x7e, i32: 0x7f }), + /** Encodes n, which must be <2^14 (16384), into target array tgt, as a little-endian value, using the given method ('push' or 'unshift'). */ - uleb128Encode: function(tgt, method, n){ + uleb128Encode: (tgt, method, n)=>{ if(n<128) tgt[method](n); else tgt[method]( (n % 128) | 128, n>>7); }, + /** Intentionally-lax pattern for Jaccwabyt-format function pointer signatures, the intent of which is simply to distinguish them from Emscripten-format signatures. The downstream checks are less lax. */ rxJSig: /^(\w)\((\w*)\)$/, + /** Returns the parameter-value part of the given signature string. */ - sigParams: function(sig){ + sigParams: (sig)=>{ const m = f._.rxJSig.exec(sig); return m ? m[2] : sig.substr(1); }, + /** Returns the IR value for the given letter or throws if the letter is invalid. */ letterType: (x)=>f._.sigTypes[x] || toss("Invalid signature letter:",x), + + /** Pushes the WASM data type code for the given signature + letter to the given target array. Throws if letter is + invalid. */ + pushSigType: (dest, letter)=>dest.push(f._.typeCodes[f._.letterType(letter)]) + /** Returns an object describing the result type and parameter type(s) of the given function signature, or throws if the signature is invalid. */ @@ -7368,10 +7761,6 @@ globalThis.WhWasmUtilInstaller = function(target){ } return rc; },************/ - /** Pushes the WASM data type code for the given signature - letter to the given target array. Throws if letter is - invalid. */ - pushSigType: (dest, letter)=>dest.push(f._.typeCodes[f._.letterType(letter)]) }; }/*static init*/ if('string'===typeof func){ @@ -7379,16 +7768,17 @@ globalThis.WhWasmUtilInstaller = function(target){ sig = func; func = x; } - const sigParams = f._.sigParams(sig); + const _ = f._; + const sigParams = _.sigParams(sig); const wasmCode = [0x01/*count: 1*/, 0x60/*function*/]; - f._.uleb128Encode(wasmCode, 'push', sigParams.length); - for(const x of sigParams) f._.pushSigType(wasmCode, x); + _.uleb128Encode(wasmCode, 'push', sigParams.length); + for(const x of sigParams) _.pushSigType(wasmCode, x); if('v'===sig[0]) wasmCode.push(0); else{ wasmCode.push(1); - f._.pushSigType(wasmCode, sig[0]); + _.pushSigType(wasmCode, sig[0]); } - f._.uleb128Encode(wasmCode, 'unshift', wasmCode.length)/* type section length */; + _.uleb128Encode(wasmCode, 'unshift', wasmCode.length)/* type section length */; wasmCode.unshift( 0x00, 0x61, 0x73, 0x6d, /* magic: "\0asm" */ 0x01, 0x00, 0x00, 0x00, /* version: 1 */ @@ -7414,7 +7804,7 @@ globalThis.WhWasmUtilInstaller = function(target){ is stashed in the current scoped-alloc scope and will be cleaned up at the matching scopedAllocPop(), else it is not stashed there. - */ + */ const __installFunction = function f(func, sig, scoped){ if(scoped && !cache.scopedAlloc.length){ toss("No scopedAllocPush() scope is active."); @@ -7429,26 +7819,28 @@ globalThis.WhWasmUtilInstaller = function(target){ "or (signature,function)."); } const ft = target.functionTable(); - const oldLen = ft.length; + const oldLen = __asPtrType(ft.length); let ptr; - while(cache.freeFuncIndexes.length){ - ptr = cache.freeFuncIndexes.pop(); - if(ft.get(ptr)){ /* Table was modified via a different API */ + while( (ptr = cache.freeFuncIndexes.pop()) ){ + if(ft.get(ptr)){ + /* freeFuncIndexes's entry is stale. Table was modified via a + different API */ ptr = null; continue; }else{ + /* This index is free. We'll re-use it. */ break; } } if(!ptr){ - ptr = oldLen; - ft.grow(1); + ptr = __asPtrType(oldLen); + ft.grow(__asPtrType(1)); } try{ /*this will only work if func is a WASM-exported function*/ ft.set(ptr, func); if(scoped){ - cache.scopedAlloc[cache.scopedAlloc.length-1].push(ptr); + cache.scopedAlloc.pushPtr(ptr); } return ptr; }catch(e){ @@ -7462,7 +7854,7 @@ globalThis.WhWasmUtilInstaller = function(target){ const fptr = target.jsFuncToWasm(func, sig); ft.set(ptr, fptr); if(scoped){ - cache.scopedAlloc[cache.scopedAlloc.length-1].push(ptr); + cache.scopedAlloc.pushPtr(ptr); } }catch(e){ if(ptr===oldLen) cache.freeFuncIndexes.push(oldLen); @@ -7478,8 +7870,8 @@ globalThis.WhWasmUtilInstaller = function(target){ available slot of this.functionTable(), and returns the function's index in that table (which acts as a pointer to that function). The returned pointer can be passed to - uninstallFunction() to uninstall it and free up the table slot for - reuse. + uninstallFunction() to uninstall it and free up the table slot + for reuse. If passed (string,function) arguments then it treats the first argument as the signature and second as the function. @@ -7490,9 +7882,8 @@ globalThis.WhWasmUtilInstaller = function(target){ This function will propagate an exception if WebAssembly.Table.grow() throws or this.jsFuncToWasm() throws. - The former case can happen in an Emscripten-compiled - environment when building without Emscripten's - `-sALLOW_TABLE_GROWTH` flag. + The former case can happen in an Emscripten-compiled environment + when building without Emscripten's `-sALLOW_TABLE_GROWTH` flag. Sidebar: this function differs from Emscripten's addFunction() _primarily_ in that it does not share that function's @@ -7528,10 +7919,10 @@ globalThis.WhWasmUtilInstaller = function(target){ has no side effects and returns undefined. */ target.uninstallFunction = function(ptr){ - if(!ptr && 0!==ptr) return undefined; - const fi = cache.freeFuncIndexes; + if(!ptr && __NullPtr!==ptr) return undefined; + const ft = target.functionTable(); - fi.push(ptr); + cache.freeFuncIndexes.push(ptr); const rc = ft.get(ptr); ft.set(ptr, null); return rc; @@ -7541,8 +7932,8 @@ globalThis.WhWasmUtilInstaller = function(target){ Given a WASM heap memory address and a data type name in the form (i8, i16, i32, i64, float (or f32), double (or f64)), this fetches the numeric value from that address and returns it as a - number or, for the case of type='i64', a BigInt (noting that that - type triggers an exception if this.bigIntEnabled is + number or, for the case of type='i64', a BigInt (with the caveat + BigInt will trigger an exception if this.bigIntEnabled is falsy). Throws if given an invalid type. If the first argument is an array, it is treated as an array of @@ -7552,17 +7943,17 @@ globalThis.WhWasmUtilInstaller = function(target){ As a special case, if type ends with a `*`, it is considered to be a pointer type and is treated as the WASM numeric type - appropriate for the pointer size (`i32`). + appropriate for the pointer size (==this.ptr.ir). - While likely not obvious, this routine and its poke() - counterpart are how pointer-to-value _output_ parameters - in WASM-compiled C code can be interacted with: + While possibly not obvious, this routine and its poke() + counterpart are how pointer-to-value _output_ parameters in + WASM-compiled C code can be interacted with: ``` const ptr = alloc(4); - poke(ptr, 0, 'i32'); // clear the ptr's value - aCFuncWithOutputPtrToInt32Arg( ptr ); // e.g. void foo(int *x); - const result = peek(ptr, 'i32'); // fetch ptr's value + poke32(ptr, 0); // clear the ptr's value + aCFuncWithOutputPtrToInt32Arg(ptr); // e.g. void foo(int *x); + const result = peek32(ptr); // fetch ptr's value dealloc(ptr); ``` @@ -7574,26 +7965,32 @@ globalThis.WhWasmUtilInstaller = function(target){ const scope = scopedAllocPush(); try{ const ptr = scopedAlloc(4); - poke(ptr, 0, 'i32'); - aCFuncWithOutputPtrArg( ptr ); - result = peek(ptr, 'i32'); + poke32(ptr, 0); + aCFuncWithOutputPtrArg(ptr); + result = peek32(ptr); }finally{ scopedAllocPop(scope); } ``` - As a rule poke() must be called to set (typically zero - out) the pointer's value, else it will contain an essentially - random value. + As a rule poke() must be called to set (typically zero out) the + pointer's value, else it will contain an essentially random + value. ACHTUNG: calling this often, e.g. in a loop, can have a noticably painful impact on performance. Rather than doing so, use heapForSize() to fetch the heap object and read directly from it. - See: poke() + ACHTUNG #2: ptr may be a BigInt (and generally will be in 64-bit + builds) but this function must coerce it into a Number in order + to access the heap's contents. Ergo: BitInts outside of the + (extrardinarily genereous) address range exposed to browser-side + WASM may cause misbehavior. + + See also: poke() */ target.peek = function f(ptr, type='i8'){ - if(type.endsWith('*')) type = ptrIR; + if(type.endsWith('*')) type = __ptrIR; const c = (cache.memory && cache.heapSize === cache.memory.buffer.byteLength) ? cache : heapWrappers(); const list = Array.isArray(ptr) ? [] : undefined; @@ -7602,14 +7999,14 @@ globalThis.WhWasmUtilInstaller = function(target){ if(list) ptr = arguments[0].shift(); switch(type){ case 'i1': - case 'i8': rc = c.HEAP8[ptr>>0]; break; - case 'i16': rc = c.HEAP16[ptr>>1]; break; - case 'i32': rc = c.HEAP32[ptr>>2]; break; - case 'float': case 'f32': rc = c.HEAP32F[ptr>>2]; break; - case 'double': case 'f64': rc = Number(c.HEAP64F[ptr>>3]); break; + case 'i8': rc = c.HEAP8[Number(ptr/*tag:64bit*/)>>0]; break; + case 'i16': rc = c.HEAP16[Number(ptr/*tag:64bit*/)>>1]; break; + case 'i32': rc = c.HEAP32[Number(ptr/*tag:64bit*/)>>2]; break; + case 'float': case 'f32': rc = c.HEAP32F[Number(ptr/*tag:64bit*/)>>2]; break; + case 'double': case 'f64': rc = Number(c.HEAP64F[Number(ptr/*tag:64bit*/)>>3]); break; case 'i64': - if(target.bigIntEnabled){ - rc = BigInt(c.HEAP64[ptr>>3]); + if(c.HEAP64){ + rc = __BigInt(c.HEAP64[Number(ptr/*tag:64bit*/)>>3]); break; } /* fallthru */ @@ -7627,34 +8024,32 @@ globalThis.WhWasmUtilInstaller = function(target){ bytes are written. Throws if given an invalid type. See peek() for details about the `type` argument. If the 3rd argument ends with `*` then it is treated as a pointer type and this function - behaves as if the 3rd argument were `i32`. + behaves as if the 3rd argument were this.ptr.ir. If the first argument is an array, it is treated like a list of pointers and the given value is written to each one. Returns `this`. (Prior to 2022-12-09 it returned this function.) - ACHTUNG: calling this often, e.g. in a loop to populate a large - chunk of memory, can have a noticably painful impact on - performance. Rather than doing so, use heapForSize() to fetch the - heap object and assign directly to it or use the heap's set() - method. + ACHTUNG #1: see peek()'s ACHTUNG #1. + + ACHTUNG #2: see peek()'s ACHTUNG #2. */ target.poke = function(ptr, value, type='i8'){ - if (type.endsWith('*')) type = ptrIR; + if (type.endsWith('*')) type = __ptrIR; const c = (cache.memory && cache.heapSize === cache.memory.buffer.byteLength) ? cache : heapWrappers(); for(const p of (Array.isArray(ptr) ? ptr : [ptr])){ switch (type) { case 'i1': - case 'i8': c.HEAP8[p>>0] = value; continue; - case 'i16': c.HEAP16[p>>1] = value; continue; - case 'i32': c.HEAP32[p>>2] = value; continue; - case 'float': case 'f32': c.HEAP32F[p>>2] = value; continue; - case 'double': case 'f64': c.HEAP64F[p>>3] = value; continue; + case 'i8': c.HEAP8[Number(p/*tag:64bit*/)>>0] = value; continue; + case 'i16': c.HEAP16[Number(p/*tag:64bit*/)>>1] = value; continue; + case 'i32': c.HEAP32[Number(p/*tag:64bit*/)>>2] = value; continue; + case 'float': case 'f32': c.HEAP32F[Number(p/*tag:64bit*/)>>2] = value; continue; + case 'double': case 'f64': c.HEAP64F[Number(p/*tag:64bit*/)>>3] = value; continue; case 'i64': if(c.HEAP64){ - c.HEAP64[p>>3] = BigInt(value); + c.HEAP64[Number(p/*tag:64bit*/)>>3] = __BigInt(value); continue; } /* fallthru */ @@ -7672,7 +8067,7 @@ globalThis.WhWasmUtilInstaller = function(target){ multiple arguments, or a single array of arguments, it returns an array of their values. */ - target.peekPtr = (...ptr)=>target.peek( (1===ptr.length ? ptr[0] : ptr), ptrIR ); + target.peekPtr = (...ptr)=>target.peek( (1===ptr.length ? ptr[0] : ptr), __ptrIR ); /** A variant of poke() intended for setting pointer-to-pointer @@ -7680,7 +8075,7 @@ globalThis.WhWasmUtilInstaller = function(target){ value of 0 and (2) it always writes to the pointer-sized heap view. */ - target.pokePtr = (ptr, value=0)=>target.poke(ptr, value, ptrIR); + target.pokePtr = (ptr, value=0)=>target.poke(ptr, value, __ptrIR); /** Convenience form of peek() intended for fetching i8 values. If @@ -7690,7 +8085,7 @@ globalThis.WhWasmUtilInstaller = function(target){ */ target.peek8 = (...ptr)=>target.peek( (1===ptr.length ? ptr[0] : ptr), 'i8' ); /** - Convience form of poke() intended for setting individual bytes. + Convenience form of poke() intended for setting individual bytes. Its difference from poke() is that it always writes to the i8-sized heap view. */ @@ -7734,16 +8129,27 @@ globalThis.WhWasmUtilInstaller = function(target){ validated except to ensure that it is a 32-bit integer with a value of 0 or greater. Likewise, it cannot verify whether the value actually refers to allocated memory in the WASM heap. + + Whether or not null or undefined are legal are context-dependent. + They generally are legal but this function does not treat them as + such because they're not strictly legal for passing as-is as WASM + integer arguments. */ - target.isPtr32 = (ptr)=>('number'===typeof ptr && (ptr===(ptr|0)) && ptr>=0); + target.isPtr32 = (ptr)=>( + 'number'===typeof ptr && ptr>=0 && ptr===(ptr|0) + ); + + /** 64-bit counterpart of isPtr32() and falls back to that function + if ptr is not a BigInt. */ + target.isPtr64 = (ptr)=>( + ('bigint'===typeof ptr) ? ptr >= 0 : target.isPtr32(ptr) + ); /** - isPtr() is an alias for isPtr32(). If/when 64-bit WASM pointer - support becomes widespread, it will become an alias for either - isPtr32() or the as-yet-hypothetical isPtr64(), depending on a - configuration option. + isPtr() is an alias for isPtr32() or isPtr64(), depending on the + value of target.ptr.size. */ - target.isPtr = target.isPtr32; + target.isPtr = (4===__ptrSize) ? target.isPtr32 : target.isPtr64; /** Expects ptr to be a pointer into the WASM heap memory which @@ -7754,7 +8160,8 @@ globalThis.WhWasmUtilInstaller = function(target){ target.heap8u(). */ target.cstrlen = function(ptr){ - if(!ptr || !target.isPtr(ptr)) return null; + if(!ptr || !target.isPtr/*64*/(ptr)) return null; + ptr = Number(ptr) /*tag:64bit*/; const h = heapWrappers().HEAP8U; let pos = ptr; for( ; h[pos] !== 0; ++pos ){} @@ -7762,17 +8169,59 @@ globalThis.WhWasmUtilInstaller = function(target){ }; /** Internal helper to use in operations which need to distinguish - between SharedArrayBuffer heap memory and non-shared heap. */ + between TypedArrays which are backed by a SharedArrayBuffer + from those which are not. */ const __SAB = ('undefined'===typeof SharedArrayBuffer) - ? function(){} : SharedArrayBuffer; - const __utf8Decode = function(arrayBuffer, begin, end){ - return cache.utf8Decoder.decode( - (arrayBuffer.buffer instanceof __SAB) - ? arrayBuffer.slice(begin, end) - : arrayBuffer.subarray(begin, end) - ); + ? function(){/*dummy class*/} : SharedArrayBuffer; + /** Returns true if the given TypedArray object is backed by a + SharedArrayBuffer, else false. */ + const isSharedTypedArray = (aTypedArray)=>(aTypedArray.buffer instanceof __SAB); + + target.isSharedTypedArray = isSharedTypedArray; + + /** + Returns either aTypedArray.slice(begin,end) (if + aTypedArray.buffer is a SharedArrayBuffer) or + aTypedArray.subarray(begin,end) (if it's not). + + This distinction is important for APIs which don't like to + work on SABs, e.g. TextDecoder, and possibly for our + own APIs which work on memory ranges which "might" be + modified by other threads while they're working. + + begin and end may be of type Number or (in 64-bit builds) BigInt + (which get coerced to Numbers). + */ + const typedArrayPart = (aTypedArray, begin, end)=>{ + if( 8===__ptrSize ){ + // slice() and subarray() do not like BigInt args. + if( 'bigint'===typeof begin ) begin = Number(begin); + if( 'bigint'===typeof end ) end = Number(end); + } + return isSharedTypedArray(aTypedArray) + ? aTypedArray.slice(begin, end) + : aTypedArray.subarray(begin, end); }; + target.typedArrayPart = typedArrayPart; + + /** + Uses TextDecoder to decode the given half-open range of the given + TypedArray to a string. This differs from a simple call to + TextDecoder in that it accounts for whether the first argument is + backed by a SharedArrayBuffer or not, and can work more + efficiently if it's not (TextDecoder refuses to act upon an SAB). + + If begin/end are not provided or are falsy then each defaults to + the start/end of the array. + */ + const typedArrayToString = (typedArray, begin, end)=> + cache.utf8Decoder.decode( + typedArrayPart(typedArray, begin, end) + ); + + target.typedArrayToString = typedArrayToString; + /** Expects ptr to be a pointer into the WASM heap memory which refers to a NUL-terminated C-style string encoded as UTF-8. This @@ -7782,7 +8231,9 @@ globalThis.WhWasmUtilInstaller = function(target){ */ target.cstrToJs = function(ptr){ const n = target.cstrlen(ptr); - return n ? __utf8Decode(heapWrappers().HEAP8U, ptr, ptr+n) : (null===n ? n : ""); + return n + ? typedArrayToString(heapWrappers().HEAP8U, Number(ptr), Number(ptr)+n) + : (null===n ? n : ""); }; /** @@ -7853,6 +8304,8 @@ globalThis.WhWasmUtilInstaller = function(target){ if(!tgt || (!(tgt instanceof Int8Array) && !(tgt instanceof Uint8Array))){ toss("jstrcpy() target must be an Int8Array or Uint8Array."); } + maxBytes = Number(maxBytes)/*tag:64bit*/; + offset = Number(offset)/*tag:64bit*/; if(maxBytes<0) maxBytes = tgt.length - offset; if(!(maxBytes>0) || !(offset>=0)) return 0; let i = 0, max = jstr.length; @@ -7915,10 +8368,11 @@ globalThis.WhWasmUtilInstaller = function(target){ else if(!(n>0)) return 0; const heap = target.heap8u(); let i = 0, ch; - for(; i < n && (ch = heap[srcPtr+i]); ++i){ - heap[tgtPtr+i] = ch; + const tgtNumber = Number(tgtPtr), srcNumber = Number(srcPtr)/*tag:64bit*/; + for(; i < n && (ch = heap[srcNumber+i]); ++i){ + heap[tgtNumber+i] = ch; } - if(i{ return cache.utf8Encoder.encode(addNul ? (str+"\0") : str); - // Or the hard way... - /** Attribution: derived from Emscripten's stringToUTF8Array() */ - //const a = [], max = str.length; - //let i = 0, pos = 0; - //for(; i < max; ++i){ - // let u = str.charCodeAt(i); - // if(u>=0xd800 && u<=0xdfff){ - // u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF); - // } - // if(u<=0x7f) a[pos++] = u; - // else if(u<=0x7ff){ - // a[pos++] = 0xC0 | (u >> 6); - // a[pos++] = 0x80 | (u & 63); - // }else if(u<=0xffff){ - // a[pos++] = 0xe0 | (u >> 12); - // a[pos++] = 0x80 | ((u >> 6) & 63); - // a[pos++] = 0x80 | (u & 63); - // }else{ - // a[pos++] = 0xf0 | (u >> 18); - // a[pos++] = 0x80 | ((u >> 12) & 63); - // a[pos++] = 0x80 | ((u >> 6) & 63); - // a[pos++] = 0x80 | (u & 63); - // } - // } - // return new Uint8Array(a); }; const __affirmAlloc = (obj,funcName)=>{ @@ -7967,18 +8396,17 @@ globalThis.WhWasmUtilInstaller = function(target){ const __allocCStr = function(jstr, returnWithLength, allocator, funcName){ __affirmAlloc(target, funcName); if('string'!==typeof jstr) return null; - if(0){/* older impl, possibly more widely compatible? */ - const n = target.jstrlen(jstr), - ptr = allocator(n+1); - target.jstrcpy(jstr, target.heap8u(), ptr, n+1, true); - return returnWithLength ? [ptr, n] : ptr; - }else{/* newer, (probably) faster and (certainly) simpler impl */ - const u = cache.utf8Encoder.encode(jstr), - ptr = allocator(u.length+1), - heap = heapWrappers().HEAP8U; - heap.set(u, ptr); - heap[ptr + u.length] = 0; + const u = cache.utf8Encoder.encode(jstr), + ptr = allocator(u.length+1); + let toFree = ptr; + try{ + const heap = heapWrappers().HEAP8U; + heap.set(u, Number(ptr)); + heap[__ptrAdd(ptr, u.length)] = 0; + toFree = __NullPtr; return returnWithLength ? [ptr, u.length] : ptr; + }finally{ + if( toFree ) target.dealloc(toFree); } }; @@ -8043,11 +8471,13 @@ globalThis.WhWasmUtilInstaller = function(target){ Cleans up all allocations made using scopedAlloc() in the context of the given opaque state object, which must be a value returned by scopedAllocPush(). See that function for an example of how to - use this function. + use this function. It also uninstalls any WASM functions + installed with scopedInstallFunction(). Though scoped allocations are managed like a stack, this API behaves properly if allocation scopes are popped in an order - other than the order they were pushed. + other than the order they were pushed. The intent is that it + _always_ be used in a stack-like manner. If called with no arguments, it pops the most recent scopedAllocPush() result: @@ -8073,8 +8503,9 @@ globalThis.WhWasmUtilInstaller = function(target){ if(target.functionEntry(p)){ //console.warn("scopedAllocPop() uninstalling function",p); target.uninstallFunction(p); + }else{ + target.dealloc(p); } - else target.dealloc(p); } }; @@ -8098,9 +8529,8 @@ globalThis.WhWasmUtilInstaller = function(target){ if(!cache.scopedAlloc.length){ toss("No scopedAllocPush() scope is active."); } - const p = target.alloc(n); - cache.scopedAlloc[cache.scopedAlloc.length-1].push(p); - return p; + const p = __asPtrType(target.alloc(n)); + return cache.scopedAlloc.pushPtr(p); }; Object.defineProperty(target.scopedAlloc, 'level', { @@ -8117,21 +8547,22 @@ globalThis.WhWasmUtilInstaller = function(target){ */ target.scopedAllocCString = (jstr, returnWithLength=false)=>__allocCStr(jstr, returnWithLength, - target.scopedAlloc, 'scopedAllocCString()'); + target.scopedAlloc, + 'scopedAllocCString()'); // impl for allocMainArgv() and scopedAllocMainArgv(). const __allocMainArgv = function(isScoped, list){ const pList = target[ isScoped ? 'scopedAlloc' : 'alloc' - ]((list.length + 1) * target.ptrSizeof); + ]((list.length + 1) * target.ptr.size); let i = 0; list.forEach((e)=>{ - target.pokePtr(pList + (target.ptrSizeof * i++), - target[ - isScoped ? 'scopedAllocCString' : 'allocCString' - ](""+e)); + target.pokePtr(__ptrAdd(pList, target.ptr.size * i++), + target[ + isScoped ? 'scopedAllocCString' : 'allocCString' + ](""+e)); }); - target.pokePtr(pList + (target.ptrSizeof * i), 0); + target.pokePtr(__ptrAdd(pList, target.ptr.size * i), 0); return pList; }; @@ -8176,7 +8607,7 @@ globalThis.WhWasmUtilInstaller = function(target){ target.cArgvToJs = (argc, pArgv)=>{ const list = []; for(let i = 0; i < argc; ++i){ - const arg = target.peekPtr(pArgv + (target.ptrSizeof * i)); + const arg = target.peekPtr(__ptrAdd(pArgv, target.ptr.size * i)); list.push( arg ? target.cstrToJs(arg) : null ); } return list; @@ -8198,15 +8629,15 @@ globalThis.WhWasmUtilInstaller = function(target){ /** Internal impl for allocPtr() and scopedAllocPtr(). */ const __allocPtr = function(howMany, safePtrSize, method){ __affirmAlloc(target, method); - const pIr = safePtrSize ? 'i64' : ptrIR; - let m = target[method](howMany * (safePtrSize ? 8 : ptrSizeof)); + const pIr = safePtrSize ? 'i64' : __ptrIR; + let m = target[method](howMany * (safePtrSize ? 8 : __ptrSize)); target.poke(m, 0, pIr) if(1===howMany){ return m; } const a = [m]; for(let i = 1; i < howMany; ++i){ - m += (safePtrSize ? 8 : ptrSizeof); + m = __ptrAdd(m, (safePtrSize ? 8 : __ptrSize)); a[i] = m; target.poke(m, 0, pIr); } @@ -8235,10 +8666,10 @@ globalThis.WhWasmUtilInstaller = function(target){ value to dealloc(). The others are part of the same memory chunk and must not be freed separately. - The reason for the 2nd argument is.. + The reason for the 2nd argument is... When one of the returned pointers will refer to a 64-bit value, - e.g. a double or int64, an that value must be written or fetched, + e.g. a double or int64, and that value must be written or fetched, e.g. using poke() or peek(), it is important that the pointer in question be aligned to an 8-byte boundary or else it will not be fetched or written properly and will corrupt or @@ -8287,16 +8718,18 @@ globalThis.WhWasmUtilInstaller = function(target){ target.xCall = function(fname, ...args){ const f = (fname instanceof Function) ? fname : target.xGet(fname); if(!(f instanceof Function)) toss("Exported symbol",fname,"is not a function."); - if(f.length!==args.length) __argcMismatch(((f===fname) ? f.name : fname),f.length) - /* This is arguably over-pedantic but we want to help clients keep - from shooting themselves in the foot when calling C APIs. */; + if(f.length!==args.length){ + __argcMismatch(((f===fname) ? f.name : fname),f.length) + /* This is arguably over-pedantic but we want to help clients keep + from shooting themselves in the foot when calling C APIs. */; + } return (2===arguments.length && Array.isArray(arguments[1])) ? f.apply(null, arguments[1]) : f.apply(null, args); }; /** - State for use with xWrap() + State for use with xWrap(). */ cache.xWrap = Object.create(null); cache.xWrap.convert = Object.create(null); @@ -8304,14 +8737,13 @@ globalThis.WhWasmUtilInstaller = function(target){ cache.xWrap.convert.arg = new Map; /** Map of type names to return result conversion functions. */ cache.xWrap.convert.result = new Map; + /** Scope-local convenience aliases. */ const xArg = cache.xWrap.convert.arg, xResult = cache.xWrap.convert.result; - if(target.bigIntEnabled){ - xArg.set('i64', (i)=>BigInt(i)); - } - const __xArgPtr = 'i32' === ptrIR - ? ((i)=>(i | 0)) : ((i)=>(BigInt(i) | BigInt(0))); - xArg.set('i32', __xArgPtr ) + const __xArgPtr = __asPtrType; + xArg + .set('i64', __BigInt) + .set('i32', (i)=>i|0) .set('i16', (i)=>((i | 0) & 0xFFFF)) .set('i8', (i)=>((i | 0) & 0xFF)) .set('f32', (i)=>Number(i).valueOf()) @@ -8322,25 +8754,30 @@ globalThis.WhWasmUtilInstaller = function(target){ .set('null', (i)=>i) .set(null, xArg.get('null')) .set('**', __xArgPtr) - .set('*', __xArgPtr); + .set('*', __xArgPtr) + ; xResult.set('*', __xArgPtr) .set('pointer', __xArgPtr) .set('number', (v)=>Number(v)) .set('void', (v)=>undefined) + .set(undefined, xResult.get('void')) .set('null', (v)=>v) - .set(null, xResult.get('null')); - - { /* Copy certain xArg[...] handlers to xResult[...] and - add pointer-style variants of them. */ - const copyToResult = ['i8', 'i16', 'i32', 'int', - 'f32', 'float', 'f64', 'double']; - if(target.bigIntEnabled) copyToResult.push('i64'); - const adaptPtr = xArg.get(ptrIR); - for(const t of copyToResult){ - xArg.set(t+'*', adaptPtr); - xResult.set(t+'*', adaptPtr); - xResult.set(t, (xArg.get(t) || toss("Missing arg converter:",t))); - } + .set(null, xResult.get('null')) + ; + + /* Copy xArg[...] handlers to xResult[...] for cases which have + identical semantics. Also add pointer-style variants of those + xArg entries to both xArg and xResult. */ + for(const t of [ + 'i8', 'i16', 'i32', 'i64', 'int', + 'f32', 'float', 'f64', 'double' + ]){ + xArg.set(t+'*', __xArgPtr); + xResult.set(t+'*', __xArgPtr); + xResult.set( + t, xArg.get(t) + || toss("Maintenance required: missing arg converter for",t) + ); } /** @@ -8353,23 +8790,27 @@ globalThis.WhWasmUtilInstaller = function(target){ - If v is a string, scopeAlloc() a new C-string from it and return that temp string's pointer. - - Else return the value from the arg adapter defined for ptrIR. + - Else return the value from the arg adapter defined for + target.ptr.ir. TODO? Permit an Int8Array/Uint8Array and convert it to a string? Would that be too much magic concentrated in one place, ready to backfire? We handle that at the client level in sqlite3 with a custom argument converter. */ - const __xArgString = function(v){ - if('string'===typeof v) return target.scopedAllocCString(v); - return v ? __xArgPtr(v) : null; + const __xArgString = (v)=>{ + return ('string'===typeof v) + ? target.scopedAllocCString(v) + : __asPtrType(v); }; + xArg.set('string', __xArgString) .set('utf8', __xArgString) - .set('pointer', __xArgString); - //xArg.set('*', __xArgString); + // (much later: why did we do this?) .set('pointer', __xArgString) + ; - xResult.set('string', (i)=>target.cstrToJs(i)) + xResult + .set('string', (i)=>target.cstrToJs(i)) .set('utf8', xResult.get('string')) .set('string:dealloc', (i)=>{ try { return i ? target.cstrToJs(i) : null } @@ -8386,12 +8827,11 @@ globalThis.WhWasmUtilInstaller = function(target){ Internal-use-only base class for FuncPtrAdapter and potentially additional stateful argument adapter classes. - Note that its main interface (convertArg()) is strictly - internal, not to be exposed to client code, as it may still - need re-shaping. Only the constructors of concrete subclasses - should be exposed to clients, and those in such a way that - does not hinder internal redesign of the convertArg() - interface. + Its main interface (convertArg()) is strictly internal, not to be + exposed to client code, as it may still need re-shaping. Only the + constructors of concrete subclasses should be exposed to clients, + and those in such a way that does not hinder internal redesign of + the convertArg() interface. */ const AbstractArgAdapter = class { constructor(opt){ @@ -8410,6 +8850,11 @@ globalThis.WhWasmUtilInstaller = function(target){ indexes must never be relied upon for anything because their types are indeterminate, whereas the LHS values will be WASM-compatible values by the time this is called. + + The reason for the argv and argIndex arguments is that we + frequently need more context than v for a specific conversion, + and that context invariably lies in the LHS arguments of v. + Examples of how this is useful can be found in FuncPtrAdapter. */ convertArg(v,argv,argIndex){ toss("AbstractArgAdapter must be subclassed."); @@ -8417,12 +8862,11 @@ globalThis.WhWasmUtilInstaller = function(target){ }; /** - An attempt at adding function pointer conversion support to - xWrap(). This type is recognized by xWrap() as a proxy for - converting a JS function to a C-side function, either - permanently, for the duration of a single call into the C layer, - or semi-contextual, where it may keep track of a single binding - for a given context and uninstall the binding if it's replaced. + This type is recognized by xWrap() as a proxy for converting a JS + function to a C-side function, either permanently, for the + duration of a single call into the C layer, or semi-contextual, + where it may keep track of a single binding for a given context + and uninstall the binding if it's replaced. The constructor requires an options object with these properties: @@ -8458,7 +8902,7 @@ globalThis.WhWasmUtilInstaller = function(target){ - 'permanent': the function is installed and left there forever. There is no way to recover its pointer address - later on. + later on for cleanup purposes. i.e. it effectively leaks. - callProxy (function): if set, this must be a function which will act as a proxy for any "converted" JS function. It is @@ -8466,34 +8910,35 @@ globalThis.WhWasmUtilInstaller = function(target){ either that function or a function which acts on its behalf. The returned function will be the one which gets installed into the WASM function table. The proxy must perform - any required argument conversion (noting that it will be called - from C code, so will receive C-format arguments) before passing - them on to the being-converted function. Whether or not the - proxy itself must return a value depends on the context. If it - does, it must be a WASM-friendly value, as it will be returning - from a call made from native code. + any required argument conversion (it will be called from C + code, so will receive C-format arguments) before passing them + on to the being-converted function. Whether or not the proxy + itself must return a value depends on the context. If it does, + it must be a WASM-friendly value, as it will be returning from + a call made from WASM code. - contextKey (function): is only used if bindScope is 'context' or if bindScope is not set and this function is, in which case - 'context' is assumed. This function gets bound to this object, - so its "this" is this object. It gets passed (argv,argIndex), - where argIndex is the index of _this_ function pointer in its - _wrapping_ function's arguments and argv is the _current_ - still-being-xWrap()-processed args array. All arguments to the - left of argIndex will have been processed by xWrap() by the - time this is called. argv[argIndex] will be the value the user - passed in to the xWrap()'d function for the argument this - FuncPtrAdapter is mapped to. Arguments to the right of - argv[argIndex] will not yet have been converted before this is - called. The function must return a key which uniquely - identifies this function mapping context for _this_ + a bindScope of 'context' is assumed. This function gets bound + to this object, so its "this" is this object. It gets passed + (argv,argIndex), where argIndex is the index of _this_ function + in its _wrapping_ function's arguments, and argv is the + _current_ still-being-xWrap()-processed args array. (Got all + that?) When thisFunc(argv,argIndex) is called by xWrap(), all + arguments in argv to the left of argIndex will have been + processed by xWrap() by the time this is called. argv[argIndex] + will be the value the user passed in to the xWrap()'d function + for the argument this FuncPtrAdapter is mapped to. Arguments to + the right of argv[argIndex] will not yet have been converted + before this is called. The function must return a key which + uniquely identifies this function mapping context for _this_ FuncPtrAdapter instance (other instances are not considered), taking into account that C functions often take some sort of state object as one or more of their arguments. As an example, - if the xWrap()'d function takes `(int,T*,functionPtr,X*)` and - this FuncPtrAdapter is the argv[2]nd arg, contextKey(argv,2) + if the xWrap()'d function takes `(int,T*,functionPtr,X*)` then + this FuncPtrAdapter instance is argv[2], and contextKey(argv,2) might return 'T@'+argv[1], or even just argv[1]. Note, - however, that the (X*) argument will not yet have been + however, that the (`X*`) argument will not yet have been processed by the time this is called and should not be used as part of that key because its pre-conversion data type might be unpredictable. Similarly, care must be taken with C-string-type @@ -8501,13 +8946,17 @@ globalThis.WhWasmUtilInstaller = function(target){ be WASM pointers, whereas those to the right might (and likely do) have another data type. When using C-strings in keys, never use their pointers in the key because most C-strings in this - constellation are transient. + constellation are transient. Conversely, the pointer address + makes an ideal key for longer-lived native pointer types. - Yes, that ^^^ is quite awkward, but it's what we have. + Yes, that ^^^ is quite awkward, but it's what we have. In + context, as it were, it actually makes some sense, but one must + look under its hook a bit to understand why it's shaped the + way it is. The constructor only saves the above state for later, and does - not actually bind any functions. Its convertArg() method is - called via xWrap() to perform any bindings. + not actually bind any functions. The conversion, if any, is + performed when its convertArg() method is called via xWrap(). Shortcomings: @@ -8519,10 +8968,9 @@ globalThis.WhWasmUtilInstaller = function(target){ - Function pointers which include C-string arguments may still need a level of hand-written wrappers around them, depending on how they're used, in order to provide the client with JS - strings. Alternately, clients will need to perform such conversions - on their own, e.g. using cstrtojs(). Or maybe we can find a way - to perform such conversions here, via addition of an xWrap()-style - function signature to the options argument. + strings. Alternately, clients will need to perform such + conversions on their own, e.g. using cstrToJs(). The purpose of + the callProxy() method is to account for such cases. */ xArg.FuncPtrAdapter = class FuncPtrAdapter extends AbstractArgAdapter { constructor(opt) { @@ -8554,9 +9002,9 @@ globalThis.WhWasmUtilInstaller = function(target){ } /** - Note that static class members are defined outside of the class - to work around an emcc toolchain build problem: one of the - tools in emsdk v3.1.42 does not support the static keyword. + The static class members are defined outside of the class to + work around an emcc toolchain build problem: one of the tools + in emsdk v3.1.42 does not support the static keyword. */ /* Dummy impl. Overwritten per-instance as needed. */ @@ -8564,9 +9012,15 @@ globalThis.WhWasmUtilInstaller = function(target){ return this; } - /* Returns this objects mapping for the given context key, in the + /** + Returns this object's mapping for the given context key, in the form of an an array, creating the mapping if needed. The key - may be anything suitable for use in a Map. */ + may be anything suitable for use in a Map. + + The returned array is intended to be used as a pair of + [JSValue, WasmFuncPtr], where the first element is one passed + to this.convertArg() and the second is its WASM form. + */ contextMap(key){ const cm = (this.__cmap || (this.__cmap = new Map)); let rc = cm.get(key); @@ -8576,35 +9030,48 @@ globalThis.WhWasmUtilInstaller = function(target){ /** Gets called via xWrap() to "convert" v to a WASM-bound function - pointer. If v is one of (a pointer, null, undefined) then + pointer. If v is one of (a WASM pointer, null, undefined) then (v||0) is returned and any earlier function installed by this mapping _might_, depending on how it's bound, be uninstalled. If v is not one of those types, it must be a Function, for - which it creates (if needed) a WASM function binding and - returns the WASM pointer to that binding. If this instance is - not in 'transient' mode, it will remember the binding for at - least the next call, to avoid recreating the function binding - unnecessarily. + which this method creates (if needed) a WASM function binding + and returns the WASM pointer to that binding. - If it's passed a pointer(ish) value for v, it does _not_ - perform any function binding, so this object's bindMode is - irrelevant for such cases. + If this instance is not in 'transient' mode, it will remember + the binding for at least the next call, to avoid recreating the + function binding unnecessarily. + + If it's passed a pointer(ish) value for v, it assumes it's a + WASM function pointer and does _not_ perform any function + binding, so this object's bindMode is irrelevant/ignored for + such cases. See the parent class's convertArg() docs for details on what exactly the 2nd and 3rd arguments are. */ convertArg(v,argv,argIndex){ - //FuncPtrAdapter.debugOut("FuncPtrAdapter.convertArg()",this.name,this.signature,this.transient,v); let pair = this.singleton; if(!pair && this.isContext){ pair = this.contextMap(this.contextKey(argv,argIndex)); //FuncPtrAdapter.debugOut(this.name, this.signature, "contextKey() =",this.contextKey(argv,argIndex), pair); } - if(pair && pair[0]===v) return pair[1]; + if( 0 ){ + FuncPtrAdapter.debugOut("FuncPtrAdapter.convertArg()",this.name, + 'signature =',this.signature, + 'transient ?=',this.transient, + 'pair =',pair, + 'v =',v); + } + if(pair && 2===pair.length && pair[0]===v){ + /* We have already handled this function. */ + return pair[1]; + } if(v instanceof Function){ /* Install a WASM binding and return its pointer. */ //FuncPtrAdapter.debugOut("FuncPtrAdapter.convertArg()",this.name,this.signature,this.transient,v,pair); - if(this.callProxy) v = this.callProxy(v); + if(this.callProxy){ + v = this.callProxy(v); + } const fp = __installFunction(v, this.signature, this.isTransient); if(FuncPtrAdapter.debugFuncInstall){ FuncPtrAdapter.debugOut("FuncPtrAdapter installed", this, @@ -8627,27 +9094,26 @@ globalThis.WhWasmUtilInstaller = function(target){ function. We're relying very much here on xWrap() having pushed an alloc scope. */ - cache.scopedAlloc[cache.scopedAlloc.length-1].push(pair[1]); + cache.scopedAlloc.pushPtr(pair[1]); } catch(e){/*ignored*/} } - pair[0] = v; + pair[0] = arguments[0] || __NullPtr/*the original v*/; pair[1] = fp; } return fp; }else if(target.isPtr(v) || null===v || undefined===v){ - //FuncPtrAdapter.debugOut("FuncPtrAdapter.convertArg()",this.name,this.signature,this.transient,v,pair); if(pair && pair[1] && pair[1]!==v){ /* uninstall stashed mapping and replace stashed mapping with v. */ if(FuncPtrAdapter.debugFuncInstall){ FuncPtrAdapter.debugOut("FuncPtrAdapter uninstalling", this, this.contextKey(argv,argIndex), '@'+pair[1], v); } - try{ cache.scopedAlloc[cache.scopedAlloc.length-1].push(pair[1]) } + try{cache.scopedAlloc.pushPtr(pair[1]);/*see notes above*/} catch(e){/*ignored*/} - pair[0] = pair[1] = (v | 0); + pair[0] = pair[1] = (v || __NullPtr); } - return v || 0; + return v || __NullPtr; }else{ throw new TypeError("Invalid FuncPtrAdapter argument type. "+ "Expecting a function pointer or a "+ @@ -8661,26 +9127,32 @@ globalThis.WhWasmUtilInstaller = function(target){ /** If true, the constructor emits a warning. The intent is that this be set to true after bootstrapping of the higher-level client library is complete, to warn downstream clients that - they shouldn't be relying on this implemenation detail which + they shouldn't be relying on this implementation detail which does not have a stable interface. */ xArg.FuncPtrAdapter.warnOnUse = false; - /** If true, convertArg() will FuncPtrAdapter.debugOut() when it - (un)installs a function binding to/from WASM. Note that - deinstallation of bindScope=transient bindings happens - via scopedAllocPop() so will not be output. */ + /** If true, convertArg() will call FuncPtrAdapter.debugOut() when + it (un)installs a function binding to/from WASM. Note that + deinstallation of bindScope=transient bindings happens via + scopedAllocPop() so will not be output. */ xArg.FuncPtrAdapter.debugFuncInstall = false; /** Function used for debug output. */ xArg.FuncPtrAdapter.debugOut = console.debug.bind(console); + /** + List of legal values for the FuncPtrAdapter bindScope config + option. + */ xArg.FuncPtrAdapter.bindScopes = [ 'transient', 'context', 'singleton', 'permanent' ]; + /** Throws if xArg.get(t) returns falsy. */ const __xArgAdapterCheck = (t)=>xArg.get(t) || toss("Argument adapter not found:",t); + /** Throws if xResult.get(t) returns falsy. */ const __xResultAdapterCheck = (t)=>xResult.get(t) || toss("Result adapter not found:",t); @@ -8719,9 +9191,8 @@ globalThis.WhWasmUtilInstaller = function(target){ The first argument must be one of: - A JavaScript function. - - The name of a WASM-exported function. In the latter case xGet() - is used to fetch the exported function, which throws if it's not - found. + - The name of a WASM-exported function. xGet() is used to fetch + the exported function, which throws if it's not found. - A pointer into the indirect function table. e.g. a pointer returned from target.installFunction(). @@ -8755,44 +9226,51 @@ globalThis.WhWasmUtilInstaller = function(target){ same arity as the being-wrapped function (as defined by its `length` property) and it will throw if that is not the case. Similarly, the created wrapper will throw if passed a differing - argument count. + argument count. The intent of that strictness is to help catch + coding errors in using JS-bound WASM functions earlier rather + than laer. Type names are symbolic names which map the arguments to an adapter function to convert, if needed, the value before passing it on to WASM or to convert a return result from WASM. The list - of built-in names: + of pre-defined names: - `i8`, `i16`, `i32` (args and results): all integer conversions which convert their argument to an integer and truncate it to the given bit length. - - `N*` (args): a type name in the form `N*`, where N is a numeric - type name, is treated the same as WASM pointer. - - - `*` and `pointer` (args): are assumed to be WASM pointer values - and are returned coerced to an appropriately-sized pointer - value (i32 or i64). Non-numeric values will coerce to 0 and - out-of-range values will have undefined results (just as with - any pointer misuse). + - `*`, `**`, and `pointer` (args): are assumed to be WASM pointer + values and are returned coerced to an appropriately-sized + pointer value (i32 or i64). Non-numeric values will coerce to 0 + and out-of-range values will have undefined results (just as + with any pointer misuse). - `*` and `pointer` (results): aliases for the current WASM pointer numeric type. - `**` (args): is simply a descriptive alias for the WASM pointer - type. It's primarily intended to mark output-pointer arguments. + type. It's primarily intended to mark output-pointer arguments, + noting that JS's view of WASM does not distinguish between + pointers and pointers-to-pointers, so all such interpretation + of `**`, as distinct from `*`, necessarily happens at the + client level. + + - `NumType*` (args): a type name in this form, where T is + the name of a numeric mapping, e.g. 'int16' or 'double', + is treated like `*`. - `i64` (args and results): passes the value to BigInt() to - convert it to an int64. Only available if bigIntEnabled is - true. + convert it to an int64. This conversion will if bigIntEnabled + is falsy. - `f32` (`float`), `f64` (`double`) (args and results): pass their argument to Number(). i.e. the adapter does not currently distinguish between the two types of floating-point numbers. - `number` (results): converts the result to a JS Number using - Number(theValue).valueOf(). Note that this is for result - conversions only, as it's not possible to generically know - which type of number to convert arguments to. + Number(theValue). This is for result conversions only, as it's + not possible to generically know which type of number to + convert arguments to. Non-numeric conversions include: @@ -8804,11 +9282,11 @@ globalThis.WhWasmUtilInstaller = function(target){ to accommodate various uses of certain C APIs (e.g. output-style strings)... - - If the arg is a string, it creates a _temporary_ + - If the arg is a JS string, it creates a _temporary_ UTF-8-encoded C-string to pass to the exported function, cleaning it up before the wrapper returns. If a long-lived C-string pointer is required, that requires client-side code - to create the string, then pass its pointer to the function. + to create the string then pass its pointer to the function. - Else the arg is assumed to be a pointer to a string the client has already allocated and it's passed on as @@ -8821,17 +9299,17 @@ globalThis.WhWasmUtilInstaller = function(target){ - `string:dealloc` or `utf8:dealloc` (results): treats the result value as a non-const UTF-8 C-string, ownership of which has just been transfered to the caller. It copies the C-string to a - JS string, frees the C-string, and returns the JS string. If - such a result value is NULL, the JS result is `null`. Achtung: - when using an API which returns results from a specific - allocator, e.g. `my_malloc()`, this conversion _is not + JS string, frees the C-string using dealloc(), and returns the + JS string. If such a result value is NULL, the JS result is + `null`. Achtung: when using an API which returns results from a + specific allocator, e.g. `my_malloc()`, this conversion _is not legal_. Instead, an equivalent conversion which uses the appropriate deallocator is required. For example: ```js target.xWrap.resultAdapter('string:my_free',(i)=>{ - try { return i ? target.cstrToJs(i) : null } - finally{ target.exports.my_free(i) } + try { return i ? target.cstrToJs(i) : null; } + finally{ target.exports.my_free(i); } }; ``` @@ -8841,7 +9319,7 @@ globalThis.WhWasmUtilInstaller = function(target){ - `json:dealloc` (results): works exactly like `string:dealloc` but returns the same thing as the `json` adapter. Note the - warning in `string:dealloc` regarding maching allocators and + warning in `string:dealloc` regarding matching allocators and deallocators. The type names for results and arguments are validated when @@ -8878,7 +9356,7 @@ globalThis.WhWasmUtilInstaller = function(target){ abstracting it into this API (and taking on the associated costs) may well not make good sense. */ - target.xWrap = function(fArg, resultType, ...argTypes){ + target.xWrap = function callee(fArg, resultType, ...argTypes){ if(3===arguments.length && Array.isArray(arguments[2])){ argTypes = arguments[2]; } @@ -8890,13 +9368,13 @@ globalThis.WhWasmUtilInstaller = function(target){ const xf = fIsFunc ? fArg : target.xGet(fArg); if(fIsFunc) fArg = xf.name || 'unnamed function'; if(argTypes.length!==xf.length) __argcMismatch(fArg, xf.length); - if((null===resultType) && 0===xf.length){ - /* Func taking no args with an as-is return. We don't need a wrapper. - We forego the argc check here, though. */ + if( 0===xf.length + && (null===resultType || 'null'===resultType) ){ + /* Func taking no args with an as-is return. We don't need a wrapper. */ return xf; } /*Verify the arg type conversions are valid...*/; - if(undefined!==resultType && null!==resultType) __xResultAdapterCheck(resultType); + __xResultAdapterCheck(resultType); for(const t of argTypes){ if(t instanceof AbstractArgAdapter) xArg.set(t, (...args)=>t.convertArg(...args)); else __xArgAdapterCheck(t); @@ -8929,12 +9407,20 @@ globalThis.WhWasmUtilInstaller = function(target){ _not_ stable. Maintenance reminder: the Ember framework modifies the core - Array type, breaking for-in loops. + Array type, breaking for-in loops: + + https://sqlite.org/forum/forumpost/b549992634b55104 */ let i = 0; + if( callee.debug ){ + console.debug("xWrap() preparing: resultType ",resultType, 'xf',xf,"argTypes",argTypes,"args",args); + } for(; i < args.length; ++i) args[i] = cxw.convertArgNoCheck( argTypes[i], args[i], args, i ); + if( callee.debug ){ + console.debug("xWrap() calling: resultType ",resultType, 'xf',xf,"argTypes",argTypes,"args",args); + } return cxw.convertResultNoCheck(resultType, xf.apply(null,args)); }finally{ target.scopedAllocPop(scope); @@ -8942,7 +9428,28 @@ globalThis.WhWasmUtilInstaller = function(target){ }; }/*xWrap()*/; - /** Internal impl for xWrap.resultAdapter() and argAdapter(). */ + /** + Internal impl for xWrap.resultAdapter() and argAdapter(). + + func = one of xWrap.resultAdapter or xWrap.argAdapter. + + argc = the number of args in the wrapping call to this + function. + + typeName = the first arg to the wrapping function. + + adapter = the second arg to the wrapping function. + + modeName = a descriptive name of the wrapping function for + error-reporting purposes. + + xcvPart = one of xResult or xArg. + + This acts as either a getter (if 1===argc) or setter (if + 2===argc) for the given adapter. Returns func on success or + throws if (A) called with 2 args but adapter is-not-a Function or + (B) typeName is not a string or (C) argc is not one of (1, 2). + */ const __xAdapter = function(func, argc, typeName, adapter, modeName, xcvPart){ if('string'===typeof typeName){ if(1===argc) return xcvPart.get(typeName); @@ -8977,16 +9484,16 @@ globalThis.WhWasmUtilInstaller = function(target){ xWrap.resultAdapter('twice',(v)=>v+v); ``` - xWrap.resultAdapter() MUST NOT use the scopedAlloc() family of - APIs to allocate a result value. xWrap()-generated wrappers run - in the context of scopedAllocPush() so that argument adapters can - easily convert, e.g., to C-strings, and have them cleaned up + Result adapters MUST NOT use the scopedAlloc() family of APIs to + allocate a result value. xWrap()-generated wrappers run in the + context of scopedAllocPush() so that argument adapters can easily + convert, e.g., to C-strings, and have them cleaned up automatically before the wrapper returns to the caller. Likewise, if a _result_ adapter uses scoped allocation, the result will be - freed before because they would be freed before the wrapper - returns, leading to chaos and undefined behavior. + freed before the wrapper returns, leading to chaos and undefined + behavior. - Except when called as a getter, this function returns itself. + When called as a setter, this function returns itself. */ target.xWrap.resultAdapter = function f(typeName, adapter){ return __xAdapter(f, arguments.length, typeName, adapter, @@ -9010,13 +9517,13 @@ globalThis.WhWasmUtilInstaller = function(target){ }; ``` - Contrariwise, xWrap.resultAdapter() must _not_ use scopedAlloc() - to allocate its results because they would be freed before the + Contrariwise, _result_ adapters _must not_ use scopedAlloc() to + allocate results because they would be freed before the xWrap()-created wrapper returns. - Note that it is perfectly legitimate to use these adapters to - perform argument validation, as opposed (or in addition) to - conversion. + It is perfectly legitimate to use these adapters to perform + argument validation, as opposed (or in addition) to conversion. + When used that way, they should throw for invalid arguments. */ target.xWrap.argAdapter = function f(typeName, adapter){ return __xAdapter(f, arguments.length, typeName, adapter, @@ -9039,8 +9546,7 @@ globalThis.WhWasmUtilInstaller = function(target){ is to be called more than once, it's more efficient to use xWrap() to create a wrapper, then to call that wrapper as many times as needed. For one-shot calls, however, this variant is - arguably more efficient because it will hypothetically free the - wrapper function quickly. + simpler. */ target.xCallWrapped = function(fArg, resultType, argTypes, ...args){ if(Array.isArray(arguments[3])) args = arguments[3]; @@ -9086,54 +9592,57 @@ globalThis.WhWasmUtilInstaller = function(target){ - `uri`: required URI of the WASM file to load. - - `onload(loadResult,config)`: optional callback. The first - argument is the result object from - WebAssembly.instantiate[Streaming](). The 2nd is the config - object passed to this function. Described in more detail below. + - `onload(loadResult)`: optional callback. Its argument is an + object described in more detail below. - `imports`: optional imports object for - WebAssembly.instantiate[Streaming](). The default is an empty set - of imports. If the module requires any imports, this object + WebAssembly.instantiate[Streaming](). The default is an empty + set of imports. If the module requires any imports, this object must include them. - `wasmUtilTarget`: optional object suitable for passing to WhWasmUtilInstaller(). If set, it gets passed to that function - after the promise resolves. This function sets several properties - on it before passing it on to that function (which sets many - more): + before the returned promise resolves. This function sets several + properties on it before passing it on to that function (which + sets many more): - `module`, `instance`: the properties from the instantiate[Streaming]() result. - If `instance.exports.memory` is _not_ set then it requires that `config.imports.env.memory` be set (else it throws), and - assigns that to `target.memory`. + assigns that to `wasmUtilTarget.memory`. - If `wasmUtilTarget.alloc` is not set and `instance.exports.malloc` is, it installs `wasmUtilTarget.alloc()` and `wasmUtilTarget.dealloc()` - wrappers for the exports `malloc` and `free` functions. + wrappers for the exports' `malloc` and `free` functions + if exports.malloc exists. It returns a function which, when called, initiates loading of the module and returns a Promise. When that Promise resolves, it calls - the `config.onload` callback (if set) and passes it - `(loadResult,config)`, where `loadResult` is the result of - WebAssembly.instantiate[Streaming](): an object in the form: + the `config.onload` callback (if set) and passes it `(loadResult)`, + where `loadResult` is derived from the result of + WebAssembly.instantiate[Streaming](), an object in the form: ``` { module: a WebAssembly.Module, - instance: a WebAssembly.Instance + instance: a WebAssembly.Instance, + config: the config arg to this function } ``` - (Note that the initial `then()` attached to the promise gets only - that object, and not the `config` one.) + (The initial `then()` attached to the promise gets only that + object, and not the `config` object, thus the potential need for a + `config.onload` handler.) Error handling is up to the caller, who may attach a `catch()` call to the promise. */ -globalThis.WhWasmUtilInstaller.yawl = function(config){ +globalThis.WhWasmUtilInstaller +.yawl = function yawl(config){ + 'use strict'; const wfetch = ()=>fetch(config.uri, {credentials: 'same-origin'}); const wui = this; const finalThen = function(arg){ @@ -9150,8 +9659,7 @@ globalThis.WhWasmUtilInstaller.yawl = function(config){ (exported from WASM) or tgt.memory (JS-provided memory imported into WASM). */ - tgt.memory = (config.imports && config.imports.env - && config.imports.env.memory) + tgt.memory = config?.imports?.env?.memory || toss("Missing 'memory' object!"); } if(!tgt.alloc && arg.instance.exports.malloc){ @@ -9159,29 +9667,28 @@ globalThis.WhWasmUtilInstaller.yawl = function(config){ tgt.alloc = function(n){ return exports.malloc(n) || toss("Allocation of",n,"bytes failed."); }; - tgt.dealloc = function(m){exports.free(m)}; + tgt.dealloc = function(m){m && exports.free(m)}; } wui(tgt); } - if(config.onload) config.onload(arg,config); + arg.config = config; + if(config.onload) config.onload(arg); return arg /* for any then() handler attached to yetAnotherWasmLoader()'s return value */; }; const loadWasm = WebAssembly.instantiateStreaming - ? function loadWasmStreaming(){ - return WebAssembly.instantiateStreaming(wfetch(), config.imports||{}) - .then(finalThen); - } - : function loadWasmOldSchool(){ // Safari < v15 - return wfetch() - .then(response => response.arrayBuffer()) - .then(bytes => WebAssembly.instantiate(bytes, config.imports||{})) - .then(finalThen); - }; + ? ()=>WebAssembly + .instantiateStreaming(wfetch(), config.imports||{}) + .then(finalThen) + : ()=> wfetch()// Safari < v15 + .then(response => response.arrayBuffer()) + .then(bytes => WebAssembly.instantiate(bytes, config.imports||{})) + .then(finalThen) + ; return loadWasm; -}.bind(globalThis.WhWasmUtilInstaller)/*yawl()*/; -/* END FILE: common/whwasmutil.js */ -/* BEGIN FILE: jaccwabyt/jaccwabyt.js */ +}.bind( +globalThis.WhWasmUtilInstaller +)/*yawl()*/; /** 2022-06-30 @@ -9201,56 +9708,106 @@ globalThis.WhWasmUtilInstaller.yawl = function(config){ - https://fossil.wanderinghorse.net/r/jaccwabyt - https://sqlite.org/src/dir/ext/wasm/jaccwabyt + This build was generated using: + + ./c-pp -o js/jaccwabyt.js -@policy=error jaccwabyt/jaccwabyt.c-pp.js + + by libcmpp 2.0.x 4539e17f451054d2aeb6a5ffe3891af087fd8fa6cfae4e31d02e1fddfec69d46 @ 2026-09-30 09:12:44.230 UTC */ 'use strict'; -globalThis.Jaccwabyt = function StructBinderFactory(config){ +globalThis.Jaccwabyt = +function StructBinderFactory(config){ + 'use strict'; /* ^^^^ it is recommended that clients move that object into wherever - they'd like to have it and delete the self-held copy ("self" being - the global window or worker object). This API does not require the - global reference - it is simply installed as a convenience for - connecting these bits to other co-developed code before it gets - removed from the global namespace. + they'd like to have it and delete the globalThis-held copy. This + API does not require the global reference - it is simply installed + as a convenience for connecting these bits to other co-developed + code before it gets removed from the global namespace. */ /** Throws a new Error, the message of which is the concatenation all args with a space between each. */ const toss = (...args)=>{throw new Error(args.join(' '))}; - /** - Implementing function bindings revealed significant - shortcomings in Emscripten's addFunction()/removeFunction() - interfaces: - - https://github.com/emscripten-core/emscripten/issues/17323 - - Until those are resolved, or a suitable replacement can be - implemented, our function-binding API will be more limited - and/or clumsier to use than initially hoped. - */ - if(!(config.heap instanceof WebAssembly.Memory) - && !(config.heap instanceof Function)){ - toss("config.heap must be WebAssembly.Memory instance or a function."); + { + let h = config.heap; + if( h instanceof WebAssembly.Memory ){ + h = function(){return new Uint8Array(this.buffer)}.bind(h); + }else if( !(h instanceof Function) ){ + //console.warn("The bothersome StructBinderFactory config:",config); + toss("config.heap must be WebAssembly.Memory instance or", + "a function which returns one."); + } + config.heap = h; } ['alloc','dealloc'].forEach(function(k){ (config[k] instanceof Function) || toss("Config option '"+k+"' must be a function."); }); const SBF = StructBinderFactory; - const heap = (config.heap instanceof Function) - ? config.heap : (()=>new Uint8Array(config.heap.buffer)), + const heap = config.heap, alloc = config.alloc, dealloc = config.dealloc, - log = config.log || console.log.bind(console), + realloc = (config.realloc || function(){ + toss("This StructBinderFactory was configured without realloc()"); + /* We can't know the original memory's size from here unless + we internally proxy alloc()/dealloc() to track all + pointers (not going to happen), so we can't fall back to + doing alloc()/copy/dealloc(). */ + }), + log = config.log || console.debug.bind(console), memberPrefix = (config.memberPrefix || ""), memberSuffix = (config.memberSuffix || ""), - bigIntEnabled = (undefined===config.bigIntEnabled - ? !!globalThis['BigInt64Array'] : !!config.bigIntEnabled), BigInt = globalThis['BigInt'], BigInt64Array = globalThis['BigInt64Array'], - /* Undocumented (on purpose) config options: */ - ptrSizeof = config.ptrSizeof || 4, - ptrIR = config.ptrIR || 'i32' - ; + bigIntEnabled = config.bigIntEnabled ?? !!BigInt64Array; + + //console.warn("config",config); + let ptr; + const ptrSize = config.pointerSize + || config.ptrSize/*deprecated*/ + || ('bigint'===typeof (ptr = alloc(1)) ? 8 : 4); + const ptrIR = config.pointerIR/*deprecated*/ + || config.ptrIR/*deprecated*/ + || (4===ptrSize ? 'i32' : 'i64'); + if( ptr ){ + dealloc(ptr); + ptr = undefined; + } + //console.warn("ptrIR =",ptrIR,"ptrSize =",ptrSize); + + if(ptrSize!==4 && ptrSize!==8) toss("Invalid pointer size:",ptrSize); + if(ptrIR!=='i32' && ptrIR!=='i64') toss("Invalid pointer representation:",ptrIR); + + /** Either BigInt or, if !bigIntEnabled, a function which + throws complaining that BigInt is not enabled. */ + const __BigInt = (bigIntEnabled && BigInt) + ? (v)=>BigInt(v || 0) + : (v)=>toss("BigInt support is disabled in this build."); + const __asPtrType = ('i32'==ptrIR) ? Number : __BigInt; + const __NullPtr = __asPtrType(0); + + /** + Expects any number of numeric arguments, each one of either type + Number or BigInt. It sums them up (from an implicit starting + point of 0 or 0n) and returns them as a number of the same type + which target.asPtrType() uses. + + This is a workaround for not being able to mix Number/BigInt in + addition/subtraction expressions (which we frequently need for + calculating pointer offsets). + */ + const __ptrAdd = function(...args){ + let rc = __NullPtr; + for( let i = 0; i < args.length; ++i ){ + rc += __asPtrType(args[i]); + } + return rc; + }; + + const __ptrAddSelf = function(...args){ + return __ptrAdd(this.pointer,...args); + }; if(!SBF.debugFlags){ SBF.__makeDebugFlags = function(deriveFrom=null){ @@ -9281,30 +9838,35 @@ globalThis.Jaccwabyt = function StructBinderFactory(config){ SBF.debugFlags = SBF.__makeDebugFlags(); }/*static init*/ - const isLittleEndian = (function() { + const isLittleEndian = true || (function() { const buffer = new ArrayBuffer(2); new DataView(buffer).setInt16(0, 256, true /* littleEndian */); // Int16Array uses the platform's endianness. return new Int16Array(buffer)[0] === 256; - })(); + })() /* WASM is, by definition, Little Endian */; + /** Some terms used in the internal docs: StructType: a struct-wrapping class generated by this framework. + DEF: struct description object. + SIG: struct member signature string. */ /** True if SIG s looks like a function signature, else false. */ const isFuncSig = (s)=>'('===s[1]; - /** True if SIG s is-a pointer signature. */ - const isPtrSig = (s)=>'p'===s || 'P'===s; + /** True if SIG s is-a pointer-type signature. */ + const isPtrSig = (s)=>'p'===s || 'P'===s || 's'===s; const isAutoPtrSig = (s)=>'P'===s /*EXPERIMENTAL*/; - const sigLetter = (s)=>isFuncSig(s) ? 'p' : s[0]; - /** Returns the WASM IR form of the Emscripten-conventional letter - at SIG s[0]. Throws for an unknown SIG. */ + /** Returns p if SIG s is a function SIG, else returns s[0]. */ + const sigLetter = (s)=>s ? (isFuncSig(s) ? 'p' : s[0]) : undefined; + + /** Returns the WASM IR form of the letter at SIG s[0]. Throws for + an unknown SIG. */ const sigIR = function(s){ switch(sigLetter(s)){ case 'c': case 'C': return 'i8'; @@ -9317,14 +9879,29 @@ globalThis.Jaccwabyt = function StructBinderFactory(config){ toss("Unhandled signature IR:",s); }; + /** Returns the WASM sizeof of the letter at SIG s[0]. Throws for an + unknown SIG. */ + const sigSize = function(s){ + switch(sigLetter(s)){ + case 'c': case 'C': return 1; + case 'i': return 4; + case 'p': case 'P': case 's': return ptrSize; + case 'j': return 8; + case 'f': return 4; + case 'd': return 8; + } + toss("Unhandled signature sizeof:",s); + }; + const affirmBigIntArray = BigInt64Array ? ()=>true : ()=>toss('BigInt64Array is not available.'); + /** Returns the name of a DataView getter method corresponding to the given SIG. */ const sigDVGetter = function(s){ switch(sigLetter(s)) { case 'p': case 'P': case 's': { - switch(ptrSizeof){ + switch(ptrSize){ case 4: return 'getInt32'; case 8: return affirmBigIntArray() && 'getBigInt64'; } @@ -9339,12 +9916,13 @@ globalThis.Jaccwabyt = function StructBinderFactory(config){ } toss("Unhandled DataView getter for signature:",s); }; + /** Returns the name of a DataView setter method corresponding to the given SIG. */ const sigDVSetter = function(s){ switch(sigLetter(s)){ case 'p': case 'P': case 's': { - switch(ptrSizeof){ + switch(ptrSize){ case 4: return 'setInt32'; case 8: return affirmBigIntArray() && 'setBigInt64'; } @@ -9359,19 +9937,20 @@ globalThis.Jaccwabyt = function StructBinderFactory(config){ } toss("Unhandled DataView setter for signature:",s); }; + /** - Returns either Number of BigInt, depending on the given - SIG. This constructor is used in property setters to coerce - the being-set value to the correct size. + Returns a factory for either Number or BigInt, depending on the + given SIG. This constructor is used in property setters to coerce + the being-set value to the correct pointer size. */ const sigDVSetWrapper = function(s){ switch(sigLetter(s)) { case 'i': case 'f': case 'c': case 'C': case 'd': return Number; - case 'j': return affirmBigIntArray() && BigInt; + case 'j': return __BigInt; case 'p': case 'P': case 's': - switch(ptrSizeof){ + switch(ptrSize){ case 4: return Number; - case 8: return affirmBigIntArray() && BigInt; + case 8: return __BigInt; } break; } @@ -9387,95 +9966,252 @@ globalThis.Jaccwabyt = function StructBinderFactory(config){ }; /** - In order to completely hide StructBinder-bound struct - pointers from JS code, we store them in a scope-local - WeakMap which maps the struct-bound objects to their WASM - pointers. The pointers are accessible via - boundObject.pointer, which is gated behind an accessor - function, but are not exposed anywhere else in the - object. The main intention of that is to make it impossible - for stale copies to be made. + In order to completely hide StructBinder-bound struct pointers + from JS code, we store them in a scope-local WeakMap which maps + the struct-bound objects to an object with their metadata: + + { + .p = the native pointer, + .o = self (for an eventual reverse-mapping), + .xb = extra bytes allocated for p, + .zod = zeroOnDispose, + .ownsPointer = true if this object owns p + } + + The .p data are accessible via obj.pointer, which is gated behind + a property interceptor, but are not exposed anywhere else in the + public API. + */ + const getInstanceHandle = function f(obj, create=true){ + let ii = f.map.get(obj); + if( !ii && create ){ + f.map.set(obj, (ii=f.create(obj))); + } + return ii; + }; + getInstanceHandle.map = new WeakMap; + getInstanceHandle.create = (forObj)=>{ + return Object.assign(Object.create(null),{ + o: forObj, + p: undefined/*native ptr*/, + ownsPointer: false, + zod: false/*zeroOnDispose*/, + xb: 0/*extraBytes*/ + }); + }; + + /** + Remove the getInstanceHandle() mapping for obj. + */ + const rmInstanceHandle = (obj)=>getInstanceHandle.map.delete(obj) + /* If/when we have a reverse map of ptr-to-objects, we need to + clean that here. */; + + const __isPtr32 = (ptr)=>('number'===typeof ptr && (ptr===(ptr|0)) && ptr>=0); + const __isPtr64 = (ptr)=>( + ('bigint'===typeof ptr && ptr >= 0) || __isPtr32(ptr) + ); + + /** + isPtr() is an alias for isPtr32() or isPtr64(), depending on + ptrSize. */ - const __instancePointerMap = new WeakMap(); + const __isPtr = (4===ptrSize) ? __isPtr32 : __isPtr64; - /** Property name for the pointer-is-external marker. */ - const xPtrPropName = '(pointer-is-external)'; + const __isNonNullPtr = (v)=>__isPtr(v) && (v>0); - /** Frees the obj.pointer memory and clears the pointer - property. */ + /** Frees the obj.pointer memory (a.k.a. m), handles obj.ondispose, + and unmaps obj from its native resources. */ const __freeStruct = function(ctor, obj, m){ - if(!m) m = __instancePointerMap.get(obj); - if(m) { - __instancePointerMap.delete(obj); - if(Array.isArray(obj.ondispose)){ - let x; - while((x = obj.ondispose.shift())){ - try{ - if(x instanceof Function) x.call(obj); - else if(x instanceof StructType) x.dispose(); - else if('number' === typeof x) dealloc(x); - // else ignore. Strings are permitted to annotate entries - // to assist in debugging. - }catch(e){ - console.warn("ondispose() for",ctor.structName,'@', - m,'threw. NOT propagating it.',e); - } - } - }else if(obj.ondispose instanceof Function){ - try{obj.ondispose()} - catch(e){ - /*do not rethrow: destructors must not throw*/ + const ii = getInstanceHandle(obj, false); + if( !ii || ii.isDisposing ) return; + ii.isDisposing = true; + if( !m && !(m = ii.p) ){ + console.warn("Cannot(?) happen: __freeStruct() found no instanceInfo"); + return; + } + if(Array.isArray(obj.ondispose)){ + let x; + while((x = obj.ondispose.pop())){ + try{ + if(x instanceof Function) x.call(obj); + else if(x instanceof StructType) x.dispose(); + else if(__isPtr(x)) dealloc(x); + // else ignore. Strings are permitted to annotate entries + // to assist in debugging. + }catch(e){ console.warn("ondispose() for",ctor.structName,'@', m,'threw. NOT propagating it.',e); } } - delete obj.ondispose; - if(ctor.debugFlags.__flags.dealloc){ - log("debug.dealloc:",(obj[xPtrPropName]?"EXTERNAL":""), - ctor.structName,"instance:", - ctor.structInfo.sizeof,"bytes @"+m); + }else if(obj.ondispose instanceof Function){ + try{obj.ondispose()} + catch(e){ + /*do not rethrow: destructors must not throw*/ + console.warn("ondispose() for",ctor.structName,'@', + m,'threw. NOT propagating it.',e); + } + } + rmInstanceHandle(obj); + delete obj.ondispose; + if(ctor.debugFlags.__flags.dealloc){ + log("debug.dealloc:",(ii.ownsPointer?"":"EXTERNAL"), + ctor.structName,"instance:", + ctor.structInfo.sizeof,"bytes @"+m); + } + if(ii.ownsPointer){ + if( ii.zod || ctor.structInfo.zeroOnDispose ){ + heap().fill(0, Number(m), + Number(m) + ctor.structInfo.sizeof + ii.xb); } - if(!obj[xPtrPropName]) dealloc(m); + dealloc(m); } }; + /** Returns a skeleton for a read-only, non-iterable property + * descriptor. */ + const rop0 = ()=>{return {configurable: false, writable: false, + iterable: false}}; + /** Returns a skeleton for a read-only property accessor wrapping value v. */ - const rop = (v)=>{return {configurable: false, writable: false, - iterable: false, value: v}}; + const rop = (v)=>{return {...rop0(), value: v}}; /** Allocates obj's memory buffer based on the size defined in ctor.structInfo.sizeof. */ - const __allocStruct = function(ctor, obj, m){ - let fill = !m; - if(m) Object.defineProperty(obj, xPtrPropName, rop(m)); - else{ - m = alloc(ctor.structInfo.sizeof); - if(!m) toss("Allocation of",ctor.structName,"structure failed."); + const __allocStruct = function f(ctor, obj, xm){ + let opt; + const checkPtr = (ptr)=>{ + __isNonNullPtr(ptr) || + toss("Invalid pointer value",arguments[0],"for",ctor.structName,"constructor."); + }; + if( arguments.length>=3 ){ + if( xm && ('object'===typeof xm) ){ + opt = xm; + xm = opt?.wrap; + }else{ + checkPtr(xm); + opt = {wrap: xm}; + } + }else{ + opt = {} + } + + const fill = !xm /* true if we need to zero the memory */; + let nAlloc = 0; + let ownsPointer = false; + if(xm){ + /* Externally-allocated memory. */ + checkPtr(xm); + ownsPointer = !!opt?.takeOwnership; + }else{ + const nX = opt?.extraBytes ?? 0; + if( nX<0 || (nX!==(nX|0)) ){ + toss("Invalid extraBytes value:",opt?.extraBytes); + } + nAlloc = ctor.structInfo.sizeof + nX; + xm = alloc(nAlloc) + || toss("Allocation of",ctor.structName,"structure failed."); + ownsPointer = true; } try { - if(ctor.debugFlags.__flags.alloc){ + if( opt?.debugFlags ){ + /* specifically undocumented */ + obj.debugFlags(opt.debugFlags); + } + if(ctor./*prototype.???*/debugFlags.__flags.alloc){ log("debug.alloc:",(fill?"":"EXTERNAL"), ctor.structName,"instance:", - ctor.structInfo.sizeof,"bytes @"+m); + ctor.structInfo.sizeof,"bytes @"+xm); + } + if(fill){ + heap().fill(0, Number(xm), Number(xm) + nAlloc); + } + const ii = getInstanceHandle(obj); + ii.p = xm; + ii.ownsPointer = ownsPointer; + ii.xb = nAlloc ? (nAlloc-ctor.structInfo.sizeof) : 0; + ii.zod = !!opt?.zeroOnDispose; + if( opt?.ondispose && opt.ondispose!==xm ){ + obj.addOnDispose( opt.ondispose ); } - if(fill) heap().fill(0, m, m + ctor.structInfo.sizeof); - __instancePointerMap.set(obj, m); }catch(e){ - __freeStruct(ctor, obj, m); + __freeStruct(ctor, obj, xm); throw e; } }; - /** Gets installed as the memoryDump() method of all structs. */ - const __memoryDump = function(){ - const p = this.pointer; - return p - ? new Uint8Array(heap().slice(p, p+this.structInfo.sizeof)) - : null; + + /** True if sig looks like an emscripten/jaccwabyt + type signature, else false. */ + const looksLikeASig = function f(sig){ + f.rxSig1 ??= /^[ipPsjfdcC]$/; + f.rxSig2 ??= /^[vipPsjfdcC]\([ipPsjfdcC]*\)$/; + return f.rxSig1.test(sig) || f.rxSig2.test(sig); + }; + + /** Returns a pair of adaptor maps (objects) in a length-3 + array specific to the given object. */ + const __adaptorsFor = function(who){ + let x = this.get(who); + if( !x ){ + x = [ Object.create(null), Object.create(null), Object.create(null) ]; + this.set(who, x); + } + return x; + }.bind(new WeakMap); + + /** Code de-duplifier for __adaptGet(), __adaptSet(), and + __adaptStruct(). */ + const __adaptor = function(who, which, key, proxy){ + const a = __adaptorsFor(who)[which]; + if(3===arguments.length) return a[key]; + if( proxy ) return a[key] = proxy; + return delete a[key]; + }; + + const noopAdapter = (x)=>x; + + // StructBinder::adaptGet() + const __adaptGet = function(key, ...args){ + return __adaptor(this, 0, key, ...args); + }; + + const __affirmNotASig = function(ctx,key){ + looksLikeASig(key) && + toss(ctx,"(",key,") collides with a data type signature."); + }; + + // StructBinder::adaptSet() + const __adaptSet = function(key, ...args){ + __affirmNotASig('Setter adaptor',key); + return __adaptor(this, 1, key, ...args); + }; + + // StructBinder::adaptStruct() + const __adaptStruct = function(key, ...args){ + __affirmNotASig('Struct adaptor',key); + return __adaptor(this, 2, key, ...args); + }; + + /** + An internal counterpart of __adaptStruct(). If key is-a string, + uses __adaptor(who) to fetch the struct-adaptor entry for key, + else key is assumed to be a struct description object. If it + resolves to an object, that's returned, else an exception is + thrown. + */ + const __adaptStruct2 = function(who,key){ + const si = ('string'===typeof key) + ? __adaptor(who, 2, key) : key; + if( 'object'!==typeof si ){ + toss("Invalid struct mapping object. Arg =",key,JSON.stringify(si)); + } + return si; }; const __memberKey = (k)=>memberPrefix + k + memberSuffix; const __memberKeyProp = rop(__memberKey); + //const __adaptGetProp = rop(__adaptGet); /** Looks up a struct member in structInfo.members. Throws if found @@ -9492,7 +10228,8 @@ globalThis.Jaccwabyt = function StructBinderFactory(config){ if(v.key===memberName){ m = v; break; } } if(!m && tossIfNotFound){ - toss(sPropName(structInfo.name,memberName),'is not a mapped struct member.'); + toss(sPropName(structInfo.name || structInfo.structName, memberName), + 'is not a mapped struct member.'); } } return m; @@ -9509,15 +10246,6 @@ globalThis.Jaccwabyt = function StructBinderFactory(config){ return emscriptenFormat ? f._(m.signature) : m.signature; }; - const __ptrPropDescriptor = { - configurable: false, enumerable: false, - get: function(){return __instancePointerMap.get(this)}, - set: ()=>toss("Cannot assign the 'pointer' property of a struct.") - // Reminder: leaving `set` undefined makes assignments - // to the property _silently_ do nothing. Current unit tests - // rely on it throwing, though. - }; - /** Impl of X.memberKeys() for StructType and struct ctors. */ const __structMemberKeys = rop(function(){ const a = []; @@ -9534,12 +10262,17 @@ globalThis.Jaccwabyt = function StructBinderFactory(config){ const __SAB = ('undefined'===typeof SharedArrayBuffer) ? function(){} : SharedArrayBuffer; const __utf8Decode = function(arrayBuffer, begin, end){ + if( 8===ptrSize ){ + begin = Number(begin); + end = Number(end); + } return __utf8Decoder.decode( (arrayBuffer.buffer instanceof __SAB) ? arrayBuffer.slice(begin, end) : arrayBuffer.subarray(begin, end) ); }; + /** Uses __lookupMember() to find the given obj.structInfo key. Returns that member if it is a string, else returns false. If the @@ -9614,8 +10347,8 @@ globalThis.Jaccwabyt = function StructBinderFactory(config){ const h = heap(); //let i = 0; //for( ; i < u.length; ++i ) h[mem + i] = u[i]; - h.set(u, mem); - h[mem + u.length] = 0; + h.set(u, Number(mem)); + h[__ptrAdd(mem, u.length)] = 0; //log("allocCString @",mem," =",u); return mem; }; @@ -9646,13 +10379,13 @@ globalThis.Jaccwabyt = function StructBinderFactory(config){ Prototype for all StructFactory instances (the constructors returned from StructBinder). */ - const StructType = function ctor(structName, structInfo){ - if(arguments[2]!==rop){ + const StructType = function StructType(structName, structInfo){ + if(arguments[2]!==rop/*internal sentinel value*/){ toss("Do not call the StructType constructor", "from client-level code."); } Object.defineProperties(this,{ - //isA: rop((v)=>v instanceof ctor), + //isA: rop((v)=>v instanceof StructType), structName: rop(structName), structInfo: rop(structInfo) }); @@ -9678,13 +10411,36 @@ globalThis.Jaccwabyt = function StructBinderFactory(config){ memberSignature: rop(function(memberName, emscriptenFormat=false){ return __memberSignature(this, memberName, emscriptenFormat); }), - memoryDump: rop(__memoryDump), - pointer: __ptrPropDescriptor, + memoryDump: rop(function(){ + const p = this.pointer; + return p + ? new Uint8Array(heap().slice(Number(p), Number(p) + this.structInfo.sizeof)) + : null; + }), + extraBytes: { + configurable: false, enumerable: false, + get: function(){return getInstanceHandle(this, false)?.xb ?? 0;} + }, + zeroOnDispose: { + configurable: false, enumerable: false, + get: function(){ + return getInstanceHandle(this, false)?.zod + ?? !!this.structInfo.zeroOnDispose; + } + }, + pointer: { + configurable: false, enumerable: false, + get: function(){return getInstanceHandle(this, false)?.p}, + set: ()=>toss("Cannot assign the 'pointer' property of a struct.") + // Reminder: leaving `set` undefined makes assignments + // to the property _silently_ do nothing. Current unit tests + // rely on it throwing, though. + }, setMemberCString: rop(function(memberName, str){ return __setMemberCString(this, memberName, str); }) }); - // Function-type non-Property inherited members + // Function-type non-Property inherited members Object.assign(StructType.prototype,{ addOnDispose: function(...v){ __addOnDispose(this,...v); @@ -9698,188 +10454,440 @@ globalThis.Jaccwabyt = function StructBinderFactory(config){ Object.defineProperties(StructType, { allocCString: rop(__allocCString), isA: rop((v)=>v instanceof StructType), - hasExternalPointer: rop((v)=>(v instanceof StructType) && !!v[xPtrPropName]), + hasExternalPointer: rop((v)=>{ + const ii = getInstanceHandle(v, false); + return !!(ii?.p && !ii?.ownsPointer); + }), memberKey: __memberKeyProp + //ptrAdd = rop(__ptrAdd) no b/c one might think that it adds based on this.pointer. }); - const isNumericValue = (v)=>Number.isFinite(v) || (v instanceof (BigInt || Number)); + /** + If struct description object si has a getter proxy, return it (a + function), else return undefined. + */ + const memberGetterProxy = function(si){ + return si.get || (si.adaptGet + ? StructBinder.adaptGet(si.adaptGet) + : undefined); + }; /** - Pass this a StructBinder-generated prototype, and the struct - member description object. It will define property accessors for - proto[memberKey] which read from/write to memory in - this.pointer. It modifies descr to make certain downstream - operations much simpler. + If struct description object si has a setter proxy, return it (a + function), else return undefined. */ - const makeMemberWrapper = function f(ctor,name, descr){ - if(!f._){ - /*cache all available getters/setters/set-wrappers for - direct reuse in each accessor function. */ - f._ = {getters: {}, setters: {}, sw:{}}; + const memberSetterProxy = function(si){ + return si.set || (si.adaptSet + ? StructBinder.adaptSet(si.adaptSet) + : undefined); + }; + + /** + To be called by makeMemberWrapper() when si has a 'members' + member, i.e. is an embedded struct. This function sets up that + struct like any other and also sets up property accessor for + ctor.memberKey(name) which returns an instance of that new + StructType when the member is accessed. That instance wraps the + memory of the member's part of the containing C struct instance. + + That is, if struct Foo has member bar which is an inner struct + then: + + const f = new Foo; + const b = f.bar; + assert( b is-a StructType object ); + assert( b.pointer === f.b.pointer ); + + b will be disposed of when f() is. Calling b.dispose() will not + do any permanent harm, as the wrapper object will be recreated + when accessing f.bar, pointing to the same memory in f. + + The si.zeroOnDispose flag has no effect on embedded structs because + they wrap "external" memory, so do not own it, and are thus never + freed, as such. + */ + const makeMemberStructWrapper = function callee(ctor, name, si){ + /** + Where we store inner-struct member proxies. Keys are a + combination of the parent object's pointer address and the + property's name. The values are StructType instances. + */ + const __innerStructs = (callee.innerStructs ??= new Map()); + const key = ctor.memberKey(name); + if( undefined!==si.signature ){ + toss("'signature' cannot be used on an embedded struct (", + ctor.structName,".",key,")."); + } + if( memberSetterProxy(si) ){ + toss("'set' and 'adaptSet' are not permitted for nested struct members."); + } + //console.warn("si =",ctor.structName, name, JSON.stringify(si,' ')); + si.structName ??= ctor.structName+'::'+name; + si.key = key; + si.name = name; + si.constructor = this.call(this, si.structName, si); + //console.warn("si.constructor =",si.constructor); + //console.warn("si =",si,"ctor=",ctor); + const getterProxy = memberGetterProxy(si); + const prop = Object.assign(Object.create(null),{ + configurable: false, + enumerable: false, + set: __propThrowOnSet(ctor/*not si.constructor*/.structName, key), + get: function(){ + const dbg = this.debugFlags.__flags; + const p = this.pointer; + const k = p+'.'+key; + let s = __innerStructs.get(k); + if(dbg.getter){ log("debug.getter: k =",k); } + if( !s ){ + s = new si.constructor(__ptrAdd(p, si.offset)); + __innerStructs.set(k, s); + this.addOnDispose(()=>s.dispose()); + s.addOnDispose(()=>__innerStructs.delete(k)); + //console.warn("Created",k,"proxy"); + } + if(getterProxy) s = getterProxy.apply(this,[s,key]); + if(dbg.getter) log("debug.getter: result =",s); + return s; + } + }); + Object.defineProperty(ctor.prototype, key, prop); + }/*makeMemberStructWrapper()*/; + + /** + This is where most of the magic happens. + + Pass this a StructBinderImpl-generated constructor, a member + property name, and the struct member description object. It will + define property accessors for proto[memberKey] which read + from/write to memory in this.pointer. It modifies si to make + certain downstream operations simpler. + */ + const makeMemberWrapper = function f(ctor, name, si){ + si = __adaptStruct2(this, si); + if( si.members ){ + return makeMemberStructWrapper.call(this, ctor, name, si); + } + + if(!f.cache){ + /* Cache all available getters/setters/set-wrappers for + direct reuse in each accessor function. */ + f.cache = {getters: {}, setters: {}, sw:{}}; const a = ['i','c','C','p','P','s','f','d','v()']; if(bigIntEnabled) a.push('j'); a.forEach(function(v){ - //const ir = sigIR(v); - f._.getters[v] = sigDVGetter(v) /* DataView[MethodName] values for GETTERS */; - f._.setters[v] = sigDVSetter(v) /* DataView[MethodName] values for SETTERS */; - f._.sw[v] = sigDVSetWrapper(v) /* BigInt or Number ctor to wrap around values + f.cache.getters[v] = sigDVGetter(v) /* DataView[MethodName] values for GETTERS */; + f.cache.setters[v] = sigDVSetter(v) /* DataView[MethodName] values for SETTERS */; + f.cache.sw[v] = sigDVSetWrapper(v) /* BigInt or Number ctor to wrap around values for conversion */; }); - const rxSig1 = /^[ipPsjfdcC]$/, - rxSig2 = /^[vipPsjfdcC]\([ipPsjfdcC]*\)$/; f.sigCheck = function(obj, name, key,sig){ if(Object.prototype.hasOwnProperty.call(obj, key)){ toss(obj.structName,'already has a property named',key+'.'); } - rxSig1.test(sig) || rxSig2.test(sig) + looksLikeASig(sig) || toss("Malformed signature for", sPropName(obj.structName,name)+":",sig); }; } const key = ctor.memberKey(name); - f.sigCheck(ctor.prototype, name, key, descr.signature); - descr.key = key; - descr.name = name; - const sigGlyph = sigLetter(descr.signature); - const xPropName = sPropName(ctor.prototype.structName,key); - const dbg = ctor.prototype.debugFlags.__flags; + f.sigCheck(ctor.prototype, name, key, si.signature); + si.key = key; + si.name = name; + const sigGlyph = sigLetter(si.signature); + const xPropName = sPropName(ctor.structName,key); + const dbg = ctor.debugFlags.__flags; /* - TODO?: set prototype of descr to an object which can set/fetch - its prefered representation, e.g. conversion to string or mapped + TODO?: set prototype of si to an object which can set/fetch + its preferred representation, e.g. conversion to string or mapped function. Advantage: we can avoid doing that via if/else if/else in the get/set methods. */ + const getterProxy = memberGetterProxy(si); const prop = Object.create(null); prop.configurable = false; prop.enumerable = false; prop.get = function(){ + /** + This getter proxy reads its value from the appropriate pointer + address in the heap. It knows where and how much to read based on + this.pointer, si.offset, and si.sizeof. + */ if(dbg.getter){ - log("debug.getter:",f._.getters[sigGlyph],"for", sigIR(sigGlyph), - xPropName,'@', this.pointer,'+',descr.offset,'sz',descr.sizeof); + log("debug.getter:",f.cache.getters[sigGlyph],"for", sigIR(sigGlyph), + xPropName,'@', this.pointer,'+',si.offset,'sz',si.sizeof); } let rc = ( - new DataView(heap().buffer, this.pointer + descr.offset, descr.sizeof) - )[f._.getters[sigGlyph]](0, isLittleEndian); + new DataView(heap().buffer, Number(this.pointer) + si.offset, si.sizeof) + )[f.cache.getters[sigGlyph]](0, isLittleEndian); + + if(getterProxy) rc = getterProxy.apply(this,[key,rc]); if(dbg.getter) log("debug.getter:",xPropName,"result =",rc); return rc; }; - if(descr.readOnly){ + if(si.readOnly){ prop.set = __propThrowOnSet(ctor.prototype.structName,key); }else{ + const setterProxy = memberSetterProxy(si); prop.set = function(v){ + /** + The converse of prop.get(), this encodes v into the appropriate + spot in the WASM heap. + */ if(dbg.setter){ - log("debug.setter:",f._.setters[sigGlyph],"for", sigIR(sigGlyph), - xPropName,'@', this.pointer,'+',descr.offset,'sz',descr.sizeof, v); + log("debug.setter:",f.cache.setters[sigGlyph],"for", sigIR(sigGlyph), + xPropName,'@', this.pointer,'+',si.offset,'sz',si.sizeof, v); } if(!this.pointer){ - toss("Cannot set struct property on disposed instance."); - } - if(null===v) v = 0; - else while(!isNumericValue(v)){ - if(isAutoPtrSig(descr.signature) && (v instanceof StructType)){ - // It's a struct instance: let's store its pointer value! - v = v.pointer || 0; + toss("Cannot set native property on a disposed", + this.structName,"instance."); + } + if( setterProxy ) v = setterProxy.apply(this,[key,v]); + if( null===v || undefined===v ) v = __NullPtr; + else if( isPtrSig(si.signature) && !__isPtr(v) ){ + if(isAutoPtrSig(si.signature) && (v instanceof StructType)){ + // It's a struct instance: store its pointer value + v = v.pointer || __NullPtr; if(dbg.setter) log("debug.setter:",xPropName,"resolved to",v); - break; + }else{ + toss("Invalid value for pointer-type",xPropName+'.'); } - toss("Invalid value for pointer-type",xPropName+'.'); } ( - new DataView(heap().buffer, this.pointer + descr.offset, descr.sizeof) - )[f._.setters[sigGlyph]](0, f._.sw[sigGlyph](v), isLittleEndian); + new DataView(heap().buffer, Number(this.pointer) + si.offset, + si.sizeof) + )[f.cache.setters[sigGlyph]](0, f.cache.sw[sigGlyph](v), isLittleEndian); }; } Object.defineProperty(ctor.prototype, key, prop); - }/*makeMemberWrapper*/; - + }/*makeMemberWrapper()*/; + /** The main factory function which will be returned to the - caller. + caller. The third argument is structly for internal use. + + This level of indirection is to avoid that clients can pass a + third argument to this, as that's only for internal use. + + internalOpt options: + + - None right now. This is for potential use in recursion. + + Usages: + + StructBinder(string, obj [,optObj]); + StructBinder(obj); */ - const StructBinder = function StructBinder(structName, structInfo){ - if(1===arguments.length){ - structInfo = structName; - structName = structInfo.name; - }else if(!structInfo.name){ - structInfo.name = structName; - } - if(!structName) toss("Struct name is required."); - let lastMember = false; - Object.keys(structInfo.members).forEach((k)=>{ - // Sanity checks of sizeof/offset info... - const m = structInfo.members[k]; - if(!m.sizeof) toss(structName,"member",k,"is missing sizeof."); - else if(m.sizeof===1){ - (m.signature === 'c' || m.signature === 'C') || - toss("Unexpected sizeof==1 member", - sPropName(structInfo.name,k), - "with signature",m.signature); - }else{ - // sizes and offsets of size-1 members may be odd values, but - // others may not. - if(0!==(m.sizeof%4)){ - console.warn("Invalid struct member description =",m,"from",structInfo); - toss(structName,"member",k,"sizeof is not aligned. sizeof="+m.sizeof); - } - if(0!==(m.offset%4)){ - console.warn("Invalid struct member description =",m,"from",structInfo); - toss(structName,"member",k,"offset is not aligned. offset="+m.offset); - } - } - if(!lastMember || lastMember.offset < m.offset) lastMember = m; - }); - if(!lastMember) toss("No member property descriptions found."); - else if(structInfo.sizeof < lastMember.offset+lastMember.sizeof){ - toss("Invalid struct config:",structName, - "max member offset ("+lastMember.offset+") ", - "extends past end of struct (sizeof="+structInfo.sizeof+")."); - } - const debugFlags = rop(SBF.__makeDebugFlags(StructBinder.debugFlags)); - /** Constructor for the StructCtor. */ - const StructCtor = function StructCtor(externalMemory){ + const StructBinderImpl = function StructBinderImpl( + structName, si, opt = Object.create(null) + ){ + /** + StructCtor is the eventual return value of this function. We + need to populate this early on so that we can do some trickery + in feeding it through recursion. + + Uses: + + // heap-allocated: + const x = new StructCtor; + // externally-managed memory: + const y = new StructCtor( aPtrToACompatibleCStruct ); + + or, more recently: + + const z = new StructCtor({ + extraBytes: [int=0] extra bytes to allocate after the struct + + wrap: [aPtrToACompatibleCStruct=undefined]. If provided, this + instance waps, but does not (by default) own the memory, else + a new instance is allocated from the WASM heap. + + ownsPointer: true if this object takes over ownership of + wrap. + + zeroOnDispose: [bool=StructCtor.structInfo.zeroOnDispose] + + autoCalcSizeOffset: [bool=false] Automatically calculate + sizeof an offset. This is fine for pure-JS structs (which + probably aren't useful beyond testing of Jaccwabyt) but it's + dangerous to use with actual WASM objects because we cannot + be guaranteed to have the same memory layout as an ostensibly + matching C struct. This applies recursively to all children + of the struct description. + + // TODO? Per-instance overrides of the struct-level flags? + + get: (k,v)=>v, + set: (k,v)=>v, + adaptGet: string, + adaptSet: string + + // That wouldn't fit really well right now, apparently. + }); + + */ + const StructCtor = function StructCtor(arg){ + //console.warn("opt",opt,arguments[0]); if(!(this instanceof StructCtor)){ toss("The",structName,"constructor may only be called via 'new'."); - }else if(arguments.length){ - if(externalMemory!==(externalMemory|0) || externalMemory<=0){ - toss("Invalid pointer value for",structName,"constructor."); - } - __allocStruct(StructCtor, this, externalMemory); - }else{ - __allocStruct(StructCtor, this); } + __allocStruct(StructCtor, this, ...arguments); + }; + const self = this; + /** + "Convert" struct description x to a struct description, if + needed. This expands adaptStruct() mappings and transforms + {memberName:signatureString} signature syntax to object form. + */ + const ads = (x)=>{ + //console.warn("looksLikeASig(",x,") =",looksLikeASig(x)); + return (('string'===typeof x) && looksLikeASig(x)) + ? {signature: x} : __adaptStruct2(self,x); }; + if(1===arguments.length){ + si = ads(structName); + structName = si.structName || si.name; + }else if(2===arguments.length){ + si = ads(si); + si.name ??= structName; + }else{ + si = ads(si); + } + structName ??= si.structName; + //console.warn("arguments =",JSON.stringify(arguments)); + structName ??= opt.structName; + if( !structName ) toss("One of 'name' or 'structName' are required."); + if( si.adapt ){ + /* Install adaptGet(), adaptSet(), and adaptStruct() proxies. */ + Object.keys(si.adapt.struct||{}).forEach((k)=>{ + __adaptStruct.call(StructBinderImpl, k, si.adapt.struct[k]); + }); + Object.keys(si.adapt.set||{}).forEach((k)=>{ + __adaptSet.call(StructBinderImpl, k, si.adapt.set[k]); + }); + Object.keys(si.adapt.get||{}).forEach((k)=>{ + __adaptGet.call(StructBinderImpl, k, si.adapt.get[k]); + }); + } + if(!si.members && !si.sizeof){ + si.sizeof = sigSize(si.signature); + } + + const debugFlags = rop(SBF.__makeDebugFlags(StructBinder.debugFlags)); Object.defineProperties(StructCtor,{ debugFlags: debugFlags, isA: rop((v)=>v instanceof StructCtor), memberKey: __memberKeyProp, memberKeys: __structMemberKeys, - methodInfoForKey: rop(function(mKey){ - }), - structInfo: rop(structInfo), - structName: rop(structName) + //methodInfoForKey: rop(function(mKey){/*???*/}), + structInfo: rop(si), + structName: rop(structName), + ptrAdd: rop(__ptrAdd) }); - StructCtor.prototype = new StructType(structName, structInfo, rop); + StructCtor.prototype = new StructType(structName, si, rop); Object.defineProperties(StructCtor.prototype,{ debugFlags: debugFlags, constructor: rop(StructCtor) /*if we assign StructCtor.prototype and don't do - this then StructCtor!==instance.constructor!*/ + this then StructCtor!==instance.constructor*/, + ptrAdd: rop(__ptrAddSelf) }); - Object.keys(structInfo.members).forEach( - (name)=>makeMemberWrapper(StructCtor, name, structInfo.members[name]) - ); + let lastMember = false; + let offset = 0; + const autoCalc = !!si.autoCalcSizeOffset; + //console.warn(structName,"si =",si); + if( !autoCalc ){ + if( !si.sizeof ){ + toss(structName,"description is missing its sizeof property."); + } + /*if( undefined===si.offset ){ + toss(structName,"description is missing its offset property."); + }*/ + si.offset ??= 0; + }else{ + si.offset ??= 0; + } + Object.keys(si.members || {}).forEach((k)=>{ + // Sanity checks of sizeof/offset info... + let m = ads(si.members[k]); + if(!m.members && !m.sizeof){ + /* ^^^^ fixme: we need to recursively collect all sizeofs + before updating that. */ + m.sizeof = sigSize(m.signature); + if(!m.sizeof){ + toss(sPropName(structName,k), "is missing a sizeof property.",m); + } + } + if( undefined===m.offset ){ + if( autoCalc ) m.offset = offset; + else{ + toss(sPropName(structName,k),"is missing its offset.", + JSON.stringify(m)); + } + /* A missing offset on the initial child is okay (it's always + zero), but we don't know for sure that the members are + their natural order, so we don't know, at this point, which + one is "first". */ + } + si.members[k] = m /* in case ads() resolved it to something else */; + if(!lastMember || lastMember.offset < m.offset) lastMember = m; + const oldAutoCalc = !!m.autoCalc; + if( autoCalc ) m.autoCalcSizeOffset = true; + makeMemberWrapper.call(self, StructCtor, k, m); + if( oldAutoCalc ) m.autoCalcSizeOffset = true; + else delete m.autoCalcSizeOffset; + offset += m.sizeof; + //console.warn("offset",sPropName(structName,k),offset); + }); + + if( !lastMember ) toss("No member property descriptions found."); + if( !si.sizeof ) si.sizeof = offset; + if(si.sizeof===1){ + (si.signature === 'c' || si.signature === 'C') || + toss("Unexpected sizeof==1 member", + sPropName(structName,k), + "with signature",si.signature); + }else{ + // sizes and offsets of size-1 members may be odd values, but + // others may not. + if(0!==(si.sizeof%4)){ + console.warn("Invalid struct member description",si); + toss(structName,"sizeof is not aligned. sizeof="+si.sizeof); + } + if(0!==(si.offset%4)){ + console.warn("Invalid struct member description",si); + toss(structName,"offset is not aligned. offset="+si.offset); + } + } + if( si.sizeof < offset ){ + console.warn("Suspect struct description:",si,"offset =",offset); + toss("Mismatch in the calculated vs. the provided sizeof/offset info.", + "Expected sizeof",offset,"but got",si.sizeof,"for",si); + /* It is legal for the native struct to be larger, so long as + we're pointing to all the right offsets for the members + exposed here. */ + } + delete si.autoCalcSizeOffset; return StructCtor; + }/*StructBinderImpl*/; + + const StructBinder = function StructBinder(structName, structInfo){ + return (1==arguments.length) + ? StructBinderImpl.call(StructBinder, structName) + : StructBinderImpl.call(StructBinder, structName, structInfo); }; StructBinder.StructType = StructType; StructBinder.config = config; StructBinder.allocCString = __allocCString; + StructBinder.adaptGet = __adaptGet; + StructBinder.adaptSet = __adaptSet; + StructBinder.adaptStruct = __adaptStruct; + StructBinder.ptrAdd = __ptrAdd; if(!StructBinder.debugFlags){ StructBinder.debugFlags = SBF.__makeDebugFlags(SBF.debugFlags); } return StructBinder; }/*StructBinderFactory*/; -/* END FILE: jaccwabyt/jaccwabyt.js */ -/* BEGIN FILE: api/sqlite3-api-glue.c-pp.js */ /* 2022-07-22 @@ -9902,7 +10910,6 @@ globalThis.Jaccwabyt = function StructBinderFactory(config){ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ 'use strict'; const toss = (...args)=>{throw new Error(args.join(' '))}; - const toss3 = sqlite3.SQLite3Error.toss; const capi = sqlite3.capi, wasm = sqlite3.wasm, util = sqlite3.util; globalThis.WhWasmUtilInstaller(wasm); delete globalThis.WhWasmUtilInstaller; @@ -9962,215 +10969,343 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ // elements instead: [x,y,z] is equivalent to x,y,z ] - Note that support for the API-specific data types in the - result/argument type strings gets plugged in at a later phase in - the API initialization process. + Support for the API-specific data types in the result/argument + type strings gets plugged in at a later phase in the API + initialization process. */ - wasm.bindingSignatures = [ - // Please keep these sorted by function name! - ["sqlite3_aggregate_context","void*", "sqlite3_context*", "int"], - /* sqlite3_auto_extension() has a hand-written binding. */ - /* sqlite3_bind_blob() and sqlite3_bind_text() have hand-written - bindings to permit more flexible inputs. */ - ["sqlite3_bind_double","int", "sqlite3_stmt*", "int", "f64"], - ["sqlite3_bind_int","int", "sqlite3_stmt*", "int", "int"], - ["sqlite3_bind_null",undefined, "sqlite3_stmt*", "int"], - ["sqlite3_bind_parameter_count", "int", "sqlite3_stmt*"], - ["sqlite3_bind_parameter_index","int", "sqlite3_stmt*", "string"], - ["sqlite3_bind_parameter_name", "string", "sqlite3_stmt*", "int"], - ["sqlite3_bind_pointer", "int", - "sqlite3_stmt*", "int", "*", "string:static", "*"], - ["sqlite3_busy_handler","int", [ - "sqlite3*", - new wasm.xWrap.FuncPtrAdapter({ - signature: 'i(pi)', - contextKey: (argv,argIndex)=>argv[0/* sqlite3* */] - }), - "*" - ]], - ["sqlite3_busy_timeout","int", "sqlite3*", "int"], - /* sqlite3_cancel_auto_extension() has a hand-written binding. */ - /* sqlite3_close_v2() is implemented by hand to perform some - extra work. */ - ["sqlite3_changes", "int", "sqlite3*"], - ["sqlite3_clear_bindings","int", "sqlite3_stmt*"], - ["sqlite3_collation_needed", "int", "sqlite3*", "*", "*"/*=>v(ppis)*/], - ["sqlite3_column_blob","*", "sqlite3_stmt*", "int"], - ["sqlite3_column_bytes","int", "sqlite3_stmt*", "int"], - ["sqlite3_column_count", "int", "sqlite3_stmt*"], - ["sqlite3_column_decltype", "string", "sqlite3_stmt*", "int"], - ["sqlite3_column_double","f64", "sqlite3_stmt*", "int"], - ["sqlite3_column_int","int", "sqlite3_stmt*", "int"], - ["sqlite3_column_name","string", "sqlite3_stmt*", "int"], - ["sqlite3_column_text","string", "sqlite3_stmt*", "int"], - ["sqlite3_column_type","int", "sqlite3_stmt*", "int"], - ["sqlite3_column_value","sqlite3_value*", "sqlite3_stmt*", "int"], - ["sqlite3_commit_hook", "void*", [ - "sqlite3*", - new wasm.xWrap.FuncPtrAdapter({ - name: 'sqlite3_commit_hook', - signature: 'i(p)', - contextKey: (argv)=>argv[0/* sqlite3* */] - }), - '*' - ]], - ["sqlite3_compileoption_get", "string", "int"], - ["sqlite3_compileoption_used", "int", "string"], - ["sqlite3_complete", "int", "string:flexible"], - ["sqlite3_context_db_handle", "sqlite3*", "sqlite3_context*"], - /* sqlite3_create_collation() and sqlite3_create_collation_v2() - use hand-written bindings to simplify passing of the callback - function. */ - /* sqlite3_create_function(), sqlite3_create_function_v2(), and - sqlite3_create_window_function() use hand-written bindings to - simplify handling of their function-type arguments. */ - ["sqlite3_data_count", "int", "sqlite3_stmt*"], - ["sqlite3_db_filename", "string", "sqlite3*", "string"], - ["sqlite3_db_handle", "sqlite3*", "sqlite3_stmt*"], - ["sqlite3_db_name", "string", "sqlite3*", "int"], - ["sqlite3_db_readonly", "int", "sqlite3*", "string"], - ["sqlite3_db_status", "int", "sqlite3*", "int", "*", "*", "int"], - ["sqlite3_errcode", "int", "sqlite3*"], - ["sqlite3_errmsg", "string", "sqlite3*"], - ["sqlite3_error_offset", "int", "sqlite3*"], - ["sqlite3_errstr", "string", "int"], - ["sqlite3_exec", "int", [ - "sqlite3*", "string:flexible", - new wasm.xWrap.FuncPtrAdapter({ - signature: 'i(pipp)', - bindScope: 'transient', - callProxy: (callback)=>{ - let aNames; - return (pVoid, nCols, pColVals, pColNames)=>{ - try { - const aVals = wasm.cArgvToJs(nCols, pColVals); - if(!aNames) aNames = wasm.cArgvToJs(nCols, pColNames); - return callback(aVals, aNames) | 0; - }catch(e){ - /* If we set the db error state here, the higher-level - exec() call replaces it with its own, so we have no way - of reporting the exception message except the console. We - must not propagate exceptions through the C API. Though - we make an effort to report OOM here, sqlite3_exec() - translates that into SQLITE_ABORT as well. */ - return e.resultCode || capi.SQLITE_ERROR; + const bindingSignatures = { + core: [ + // Please keep these sorted by function name! + ["sqlite3_aggregate_context","void*", "sqlite3_context*", "int"], + /* sqlite3_auto_extension() has a hand-written binding. */ + ["sqlite3_backup_init", "sqlite3_backup*", "sqlite3*", "string", "sqlite3*", "string"], + ["sqlite3_backup_step", "int", "sqlite3_backup*", "int"], + ["sqlite3_backup_finish", "int", "sqlite3_backup*"], + ["sqlite3_backup_remaining", "int", "sqlite3_backup*"], + ["sqlite3_backup_pagecount", "int", "sqlite3_backup*"], + /* sqlite3_bind_blob() and sqlite3_bind_text() have hand-written + bindings to permit more flexible inputs. */ + ["sqlite3_bind_double","int", "sqlite3_stmt*", "int", "f64"], + ["sqlite3_bind_int","int", "sqlite3_stmt*", "int", "int"], + ["sqlite3_bind_null",undefined, "sqlite3_stmt*", "int"], + ["sqlite3_bind_parameter_count", "int", "sqlite3_stmt*"], + ["sqlite3_bind_parameter_index","int", "sqlite3_stmt*", "string"], + ["sqlite3_bind_parameter_name", "string", "sqlite3_stmt*", "int"], + ["sqlite3_bind_pointer", "int", + "sqlite3_stmt*", "int", "*", "string:static", "*"], + /* sqlite_bind_text() is hand-written */ + ["sqlite3_bind_zeroblob", "int", "sqlite3_stmt*", "int", "int"], + ["sqlite3_busy_handler","int", [ + "sqlite3*", + new wasm.xWrap.FuncPtrAdapter({ + signature: 'i(pi)', + contextKey: (argv,argIndex)=>argv[0/* sqlite3* */] + }), + "*" + ]], + ["sqlite3_busy_timeout","int", "sqlite3*", "int"], + /* sqlite3_cancel_auto_extension() has a hand-written binding. */ + /* sqlite3_close_v2() is implemented by hand to perform some + extra work. */ + ["sqlite3_changes", "int", "sqlite3*"], + ["sqlite3_clear_bindings","int", "sqlite3_stmt*"], + ["sqlite3_collation_needed", "int", "sqlite3*", "*", "*"/*=>v(ppis)*/], + ["sqlite3_column_blob","*", "sqlite3_stmt*", "int"], + ["sqlite3_column_bytes","int", "sqlite3_stmt*", "int"], + ["sqlite3_column_count", "int", "sqlite3_stmt*"], + ["sqlite3_column_decltype", "string", "sqlite3_stmt*", "int"], + ["sqlite3_column_double","f64", "sqlite3_stmt*", "int"], + ["sqlite3_column_int","int", "sqlite3_stmt*", "int"], + ["sqlite3_column_name","string", "sqlite3_stmt*", "int"], + ["sqlite3_column_type","int", "sqlite3_stmt*", "int"], + ["sqlite3_column_value","sqlite3_value*", "sqlite3_stmt*", "int"], + ["sqlite3_commit_hook", "void*", [ + "sqlite3*", + new wasm.xWrap.FuncPtrAdapter({ + name: 'sqlite3_commit_hook', + signature: 'i(p)', + contextKey: (argv)=>argv[0/* sqlite3* */] + }), + '*' + ]], + ["sqlite3_compileoption_get", "string", "int"], + ["sqlite3_compileoption_used", "int", "string"], + ["sqlite3_complete", "int", "string:flexible"], + ["sqlite3_context_db_handle", "sqlite3*", "sqlite3_context*"], + /* sqlite3_create_collation() and sqlite3_create_collation_v2() + use hand-written bindings to simplify passing of the callback + function. */ + /* sqlite3_create_function(), sqlite3_create_function_v2(), and + sqlite3_create_window_function() use hand-written bindings to + simplify handling of their function-type arguments. */ + ["sqlite3_data_count", "int", "sqlite3_stmt*"], + ["sqlite3_db_filename", "string", "sqlite3*", "string"], + ["sqlite3_db_handle", "sqlite3*", "sqlite3_stmt*"], + ["sqlite3_db_name", "string", "sqlite3*", "int"], + ["sqlite3_db_readonly", "int", "sqlite3*", "string"], + ["sqlite3_db_status", "int", "sqlite3*", "int", "*", "*", "int"], + ["sqlite3_errcode", "int", "sqlite3*"], + ["sqlite3_errmsg", "string", "sqlite3*"], + ["sqlite3_error_offset", "int", "sqlite3*"], + ["sqlite3_errstr", "string", "int"], + ["sqlite3_exec", "int", [ + "sqlite3*", "string:flexible", + new wasm.xWrap.FuncPtrAdapter({ + signature: 'i(pipp)', + bindScope: 'transient', + callProxy: (callback)=>{ + let aNames; + return (pVoid, nCols, pColVals, pColNames)=>{ + try { + const aVals = wasm.cArgvToJs(nCols, pColVals); + if(!aNames) aNames = wasm.cArgvToJs(nCols, pColNames); + return callback(aVals, aNames) | 0; + }catch(e){ + /* If we set the db error state here, the higher-level + exec() call replaces it with its own, so we have no way + of reporting the exception message except the console. We + must not propagate exceptions through the C API. Though + we make an effort to report OOM here, sqlite3_exec() + translates that into SQLITE_ABORT as well. */ + return e.resultCode || capi.SQLITE_ERROR; + } } } - } - }), - "*", "**" - ]], - ["sqlite3_expanded_sql", "string", "sqlite3_stmt*"], - ["sqlite3_extended_errcode", "int", "sqlite3*"], - ["sqlite3_extended_result_codes", "int", "sqlite3*", "int"], - ["sqlite3_file_control", "int", "sqlite3*", "string", "int", "*"], - ["sqlite3_finalize", "int", "sqlite3_stmt*"], - ["sqlite3_free", undefined,"*"], - ["sqlite3_get_autocommit", "int", "sqlite3*"], - ["sqlite3_get_auxdata", "*", "sqlite3_context*", "int"], - ["sqlite3_initialize", undefined], - ["sqlite3_interrupt", undefined, "sqlite3*"], - ["sqlite3_is_interrupted", "int", "sqlite3*"], - ["sqlite3_keyword_count", "int"], - ["sqlite3_keyword_name", "int", ["int", "**", "*"]], - ["sqlite3_keyword_check", "int", ["string", "int"]], - ["sqlite3_libversion", "string"], - ["sqlite3_libversion_number", "int"], - ["sqlite3_limit", "int", ["sqlite3*", "int", "int"]], - ["sqlite3_malloc", "*","int"], - ["sqlite3_open", "int", "string", "*"], - ["sqlite3_open_v2", "int", "string", "*", "int", "string"], - /* sqlite3_prepare_v2() and sqlite3_prepare_v3() are handled - separately due to us requiring two different sets of semantics - for those, depending on how their SQL argument is provided. */ - /* sqlite3_randomness() uses a hand-written wrapper to extend - the range of supported argument types. */ - ["sqlite3_realloc", "*","*","int"], - ["sqlite3_reset", "int", "sqlite3_stmt*"], - /* sqlite3_reset_auto_extension() has a hand-written binding. */ - ["sqlite3_result_blob", undefined, "sqlite3_context*", "*", "int", "*"], - ["sqlite3_result_double", undefined, "sqlite3_context*", "f64"], - ["sqlite3_result_error", undefined, "sqlite3_context*", "string", "int"], - ["sqlite3_result_error_code", undefined, "sqlite3_context*", "int"], - ["sqlite3_result_error_nomem", undefined, "sqlite3_context*"], - ["sqlite3_result_error_toobig", undefined, "sqlite3_context*"], - ["sqlite3_result_int", undefined, "sqlite3_context*", "int"], - ["sqlite3_result_null", undefined, "sqlite3_context*"], - ["sqlite3_result_pointer", undefined, - "sqlite3_context*", "*", "string:static", "*"], - ["sqlite3_result_subtype", undefined, "sqlite3_value*", "int"], - ["sqlite3_result_text", undefined, "sqlite3_context*", "string", "int", "*"], - ["sqlite3_result_zeroblob", undefined, "sqlite3_context*", "int"], - ["sqlite3_rollback_hook", "void*", [ - "sqlite3*", - new wasm.xWrap.FuncPtrAdapter({ - name: 'sqlite3_rollback_hook', - signature: 'v(p)', - contextKey: (argv)=>argv[0/* sqlite3* */] - }), - '*' - ]], - ["sqlite3_set_auxdata", undefined, [ - "sqlite3_context*", "int", "*", - new wasm.xWrap.FuncPtrAdapter({ - name: 'xDestroyAuxData', - signature: 'v(*)', - contextKey: (argv, argIndex)=>argv[0/* sqlite3_context* */] - }) - ]], - ["sqlite3_shutdown", undefined], - ["sqlite3_sourceid", "string"], - ["sqlite3_sql", "string", "sqlite3_stmt*"], - ["sqlite3_status", "int", "int", "*", "*", "int"], - ["sqlite3_step", "int", "sqlite3_stmt*"], - ["sqlite3_stmt_busy", "int", "sqlite3_stmt*"], - ["sqlite3_stmt_readonly", "int", "sqlite3_stmt*"], - ["sqlite3_stmt_status", "int", "sqlite3_stmt*", "int", "int"], - ["sqlite3_strglob", "int", "string","string"], - ["sqlite3_stricmp", "int", "string", "string"], - ["sqlite3_strlike", "int", "string", "string","int"], - ["sqlite3_strnicmp", "int", "string", "string", "int"], - ["sqlite3_table_column_metadata", "int", - "sqlite3*", "string", "string", "string", - "**", "**", "*", "*", "*"], - ["sqlite3_total_changes", "int", "sqlite3*"], - ["sqlite3_trace_v2", "int", [ - "sqlite3*", "int", - new wasm.xWrap.FuncPtrAdapter({ - name: 'sqlite3_trace_v2::callback', - signature: 'i(ippp)', - contextKey: (argv,argIndex)=>argv[0/* sqlite3* */] - }), - "*" - ]], - ["sqlite3_txn_state", "int", ["sqlite3*","string"]], - /* Note that sqlite3_uri_...() have very specific requirements for - their first C-string arguments, so we cannot perform any value - conversion on those. */ - ["sqlite3_uri_boolean", "int", "sqlite3_filename", "string", "int"], - ["sqlite3_uri_key", "string", "sqlite3_filename", "int"], - ["sqlite3_uri_parameter", "string", "sqlite3_filename", "string"], - ["sqlite3_user_data","void*", "sqlite3_context*"], - ["sqlite3_value_blob", "*", "sqlite3_value*"], - ["sqlite3_value_bytes","int", "sqlite3_value*"], - ["sqlite3_value_double","f64", "sqlite3_value*"], - ["sqlite3_value_dup", "sqlite3_value*", "sqlite3_value*"], - ["sqlite3_value_free", undefined, "sqlite3_value*"], - ["sqlite3_value_frombind", "int", "sqlite3_value*"], - ["sqlite3_value_int","int", "sqlite3_value*"], - ["sqlite3_value_nochange", "int", "sqlite3_value*"], - ["sqlite3_value_numeric_type", "int", "sqlite3_value*"], - ["sqlite3_value_pointer", "*", "sqlite3_value*", "string:static"], - ["sqlite3_value_subtype", "int", "sqlite3_value*"], - ["sqlite3_value_text", "string", "sqlite3_value*"], - ["sqlite3_value_type", "int", "sqlite3_value*"], - ["sqlite3_vfs_find", "*", "string"], - ["sqlite3_vfs_register", "int", "sqlite3_vfs*", "int"], - ["sqlite3_vfs_unregister", "int", "sqlite3_vfs*"] - ]/*wasm.bindingSignatures*/; + }), + "*", "**" + ]], + ["sqlite3_expanded_sql", "string", "sqlite3_stmt*"], + ["sqlite3_extended_errcode", "int", "sqlite3*"], + ["sqlite3_extended_result_codes", "int", "sqlite3*", "int"], + ["sqlite3_file_control", "int", "sqlite3*", "string", "int", "*"], + ["sqlite3_finalize", "int", "sqlite3_stmt*"], + ["sqlite3_free", undefined,"*"], + ["sqlite3_get_autocommit", "int", "sqlite3*"], + ["sqlite3_get_auxdata", "*", "sqlite3_context*", "int"], + ["sqlite3_initialize", undefined], + ["sqlite3_interrupt", undefined, "sqlite3*"], + ["sqlite3_is_interrupted", "int", "sqlite3*"], + ["sqlite3_keyword_count", "int"], + ["sqlite3_keyword_name", "int", ["int", "**", "*"]], + ["sqlite3_keyword_check", "int", ["string", "int"]], + ["sqlite3_libversion", "string"], + ["sqlite3_libversion_number", "int"], + ["sqlite3_limit", "int", ["sqlite3*", "int", "int"]], + ["sqlite3_malloc", "*","int"], + ["sqlite3_next_stmt", "sqlite3_stmt*", ["sqlite3*","sqlite3_stmt*"]], + ["sqlite3_open", "int", "string", "*"], + ["sqlite3_open_v2", "int", "string", "*", "int", "string"], + /* sqlite3_prepare_v2() and sqlite3_prepare_v3() are handled + separately due to us requiring two different sets of semantics + for those, depending on how their SQL argument is provided. */ + /* sqlite3_randomness() uses a hand-written wrapper to extend + the range of supported argument types. */ + ["sqlite3_realloc", "*","*","int"], + ["sqlite3_reset", "int", "sqlite3_stmt*"], + /* sqlite3_reset_auto_extension() has a hand-written binding. */ + ["sqlite3_result_blob", undefined, "sqlite3_context*", "*", "int", "*"], + ["sqlite3_result_double", undefined, "sqlite3_context*", "f64"], + ["sqlite3_result_error", undefined, "sqlite3_context*", "string", "int"], + ["sqlite3_result_error_code", undefined, "sqlite3_context*", "int"], + ["sqlite3_result_error_nomem", undefined, "sqlite3_context*"], + ["sqlite3_result_error_toobig", undefined, "sqlite3_context*"], + ["sqlite3_result_int", undefined, "sqlite3_context*", "int"], + ["sqlite3_result_null", undefined, "sqlite3_context*"], + ["sqlite3_result_pointer", undefined, + "sqlite3_context*", "*", "string:static", "*"], + ["sqlite3_result_subtype", undefined, "sqlite3_value*", "int"], + ["sqlite3_result_text", undefined, "sqlite3_context*", "string", "int", "*"], + ["sqlite3_result_zeroblob", undefined, "sqlite3_context*", "int"], + ["sqlite3_rollback_hook", "void*", [ + "sqlite3*", + new wasm.xWrap.FuncPtrAdapter({ + name: 'sqlite3_rollback_hook', + signature: 'v(p)', + contextKey: (argv)=>argv[0/* sqlite3* */] + }), + '*' + ]], + /** + We do not have a way to automatically clean up destructors + which are automatically converted from JS functions via the + final argument to sqlite3_set_auxdata(). Because of that, + automatic function conversion is not supported for this + function. Clients should use wasm.installFunction() to create + such callbacks, then pass that pointer to + sqlite3_set_auxdata(). Relying on automated conversions here + would lead to leaks of JS/WASM proxy functions because + sqlite3_set_auxdata() is frequently called in UDFs. + + The sqlite3.oo1.DB class's onclose handlers can be used for this + purpose. For example: + + const pAuxDtor = wasm.installFunction('v(p)', function(ptr){ + //free ptr + }); + myDb.onclose = { + after: ()=>{ + wasm.uninstallFunction(pAuxDtor); + } + }; + + Then pass pAuxDtor as the final argument to appropriate + sqlite3_set_auxdata() calls. + + Prior to 3.49.0 this binding ostensibly had automatic + function conversion here but a typo prevented it from + working. Rather than fix it, it was removed because testing + the fix brought the huge potential for memory leaks to the + forefront. + */ + ["sqlite3_set_auxdata", undefined, [ + "sqlite3_context*", "int", "*", + true + ? "*" + : new wasm.xWrap.FuncPtrAdapter({ + /* If we can find a way to automate their cleanup, JS functions can + be auto-converted with this. */ + name: 'xDestroyAuxData', + signature: 'v(p)', + contextKey: (argv, argIndex)=>argv[0/* sqlite3_context* */] + }) + ]], + ['sqlite3_set_errmsg', 'int', 'sqlite3*', 'int', 'string'], + ["sqlite3_shutdown", undefined], + ["sqlite3_sourceid", "string"], + ["sqlite3_sql", "string", "sqlite3_stmt*"], + ["sqlite3_status", "int", "int", "*", "*", "int"], + ["sqlite3_step", "int", "sqlite3_stmt*"], + ["sqlite3_stmt_busy", "int", "sqlite3_stmt*"], + ["sqlite3_stmt_readonly", "int", "sqlite3_stmt*"], + ["sqlite3_stmt_status", "int", "sqlite3_stmt*", "int", "int"], + ["sqlite3_strglob", "int", "string","string"], + ["sqlite3_stricmp", "int", "string", "string"], + ["sqlite3_strlike", "int", "string", "string","int"], + ["sqlite3_strnicmp", "int", "string", "string", "int"], + ["sqlite3_table_column_metadata", "int", + "sqlite3*", "string", "string", "string", + "**", "**", "*", "*", "*"], + ["sqlite3_total_changes", "int", "sqlite3*"], + ["sqlite3_trace_v2", "int", [ + "sqlite3*", "int", + new wasm.xWrap.FuncPtrAdapter({ + name: 'sqlite3_trace_v2::callback', + signature: 'i(ippp)', + contextKey: (argv,argIndex)=>argv[0/* sqlite3* */] + }), + "*" + ]], + ["sqlite3_txn_state", "int", ["sqlite3*","string"]], + /* sqlite3_uri_...() have very specific requirements for their + first C-string arguments, so we cannot perform any + string-type conversion on their first argument. */ + ["sqlite3_uri_boolean", "int", "sqlite3_filename", "string", "int"], + ["sqlite3_uri_key", "string", "sqlite3_filename", "int"], + ["sqlite3_uri_parameter", "string", "sqlite3_filename", "string"], + ["sqlite3_user_data","void*", "sqlite3_context*"], + ["sqlite3_value_blob", "*", "sqlite3_value*"], + ["sqlite3_value_bytes","int", "sqlite3_value*"], + ["sqlite3_value_double","f64", "sqlite3_value*"], + ["sqlite3_value_dup", "sqlite3_value*", "sqlite3_value*"], + ["sqlite3_value_free", undefined, "sqlite3_value*"], + ["sqlite3_value_frombind", "int", "sqlite3_value*"], + ["sqlite3_value_int","int", "sqlite3_value*"], + ["sqlite3_value_nochange", "int", "sqlite3_value*"], + ["sqlite3_value_numeric_type", "int", "sqlite3_value*"], + ["sqlite3_value_pointer", "*", "sqlite3_value*", "string:static"], + ["sqlite3_value_subtype", "int", "sqlite3_value*"], + ["sqlite3_value_type", "int", "sqlite3_value*"], + ["sqlite3_vfs_find", "*", "string"], + ["sqlite3_vfs_register", "int", "sqlite3_vfs*", "int"], + ["sqlite3_vfs_unregister", "int", "sqlite3_vfs*"] + + /* This list gets extended with optional pieces below */ + ]/*.core*/, + /** + Functions which require BigInt (int64) support are separated + from the others because we need to conditionally bind them or + apply dummy impls, depending on the capabilities of the + environment. (That said: we never actually build without + BigInt support, and such builds are untested.) + + Not all of these functions directly require int64 but are only + for use with APIs which require int64. For example, the + vtab-related functions. + */ + int64: [ + ["sqlite3_bind_int64","int", ["sqlite3_stmt*", "int", "i64"]], + ["sqlite3_changes64","i64", ["sqlite3*"]], + ["sqlite3_column_int64","i64", ["sqlite3_stmt*", "int"]], + ["sqlite3_deserialize", "int", "sqlite3*", "string", "*", "i64", "i64", "int"] + /* Careful! Short version: de/serialize() are problematic because they + might use a different allocator than the user for managing the + deserialized block. de/serialize() are ONLY safe to use with + sqlite3_malloc(), sqlite3_free(), and its 64-bit variants. Because + of this, the canonical builds of sqlite3.wasm/js guarantee that + sqlite3.wasm.alloc() and friends use those allocators. Custom builds + may not guarantee that, however. */, + ["sqlite3_last_insert_rowid", "i64", ["sqlite3*"]], + ["sqlite3_malloc64", "*","i64"], + ["sqlite3_msize", "i64", "*"], + ["sqlite3_overload_function", "int", ["sqlite3*","string","int"]], + ["sqlite3_realloc64", "*","*", "i64"], + ["sqlite3_result_int64", undefined, "*", "i64"], + ["sqlite3_result_zeroblob64", "int", "*", "i64"], + ["sqlite3_serialize","*", "sqlite3*", "string", "*", "int"], + ["sqlite3_set_last_insert_rowid", undefined, ["sqlite3*", "i64"]], + ["sqlite3_status64", "int", "int", "*", "*", "int"], + ["sqlite3_db_status64", "int", "sqlite3*", "int", "*", "*", "int"], + ["sqlite3_total_changes64", "i64", ["sqlite3*"]], + ["sqlite3_update_hook", "*", [ + "sqlite3*", + new wasm.xWrap.FuncPtrAdapter({ + name: 'sqlite3_update_hook::callback', + signature: "v(pippj)", + contextKey: (argv)=>argv[0/* sqlite3* */], + callProxy: (callback)=>{ + return (p,op,z0,z1,rowid)=>{ + callback(p, op, wasm.cstrToJs(z0), wasm.cstrToJs(z1), rowid); + }; + } + }), + "*" + ]], + ["sqlite3_uri_int64", "i64", ["sqlite3_filename", "string", "i64"]], + ["sqlite3_value_int64","i64", "sqlite3_value*"] + /* This list gets extended with optional pieces below */ + ]/*.int64*/, + /** + Functions which are intended solely for API-internal use by the + WASM components, not client code. These get installed into + sqlite3.util. Some of them get exposed to clients via variants + in sqlite3_js_...(). + + 2024-01-11: these were renamed, with two underscores in the + prefix, to ensure that clients do not accidentally depend on + them. They have always been documented as internal-use-only, + so no clients "should" be depending on the old names. + */ + wasmInternal: [ + ["sqlite3__wasm_db_reset", "int", "sqlite3*"], + ["sqlite3__wasm_db_vfs", "sqlite3_vfs*", "sqlite3*","string"], + [/* DO NOT USE. This is deprecated since 2023-08-11 because it + can trigger assert() in debug builds when used with file + sizes which are not an exact multiple of a valid db page + size. This function is retained only so that + sqlite3_js_vfs_create_file() can continue to work (for a + given value of work), but that function emits a + config.warn() log message directing the reader to + alternatives. */ + "sqlite3__wasm_vfs_create_file", "int", "sqlite3_vfs*","string","*", "int" + ], + ["sqlite3__wasm_posix_create_file", "int", "string","*", "int"], + ["sqlite3__wasm_vfs_unlink", "int", "sqlite3_vfs*","string"], + ["sqlite3__wasm_qfmt_token","string:dealloc", "string","int"] + ]/*.wasmInternal*/ + } /*bindingSignatures*/; if( !!wasm.exports.sqlite3_progress_handler ){ - wasm.bindingSignatures.push( + bindingSignatures.core.push( ["sqlite3_progress_handler", undefined, [ "sqlite3*", "int", new wasm.xWrap.FuncPtrAdapter({ name: 'xProgressHandler', @@ -10183,26 +11318,31 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ } if( !!wasm.exports.sqlite3_stmt_explain ){ - wasm.bindingSignatures.push( + bindingSignatures.core.push( ["sqlite3_stmt_explain", "int", "sqlite3_stmt*", "int"], ["sqlite3_stmt_isexplain", "int", "sqlite3_stmt*"] ); } if( !!wasm.exports.sqlite3_set_authorizer ){ - wasm.bindingSignatures.push( + bindingSignatures.core.push( ["sqlite3_set_authorizer", "int", [ "sqlite3*", new wasm.xWrap.FuncPtrAdapter({ name: "sqlite3_set_authorizer::xAuth", signature: "i(pi"+"ssss)", contextKey: (argv, argIndex)=>argv[0/*(sqlite3*)*/], + /** + We use callProxy here to ensure (A) that exceptions + thrown from callback() have well-defined behavior and (B) + that its result is coerced to an integer. + */ callProxy: (callback)=>{ return (pV, iCode, s0, s1, s2, s3)=>{ try{ s0 = s0 && wasm.cstrToJs(s0); s1 = s1 && wasm.cstrToJs(s1); s2 = s2 && wasm.cstrToJs(s2); s3 = s3 && wasm.cstrToJs(s3); - return callback(pV, iCode, s0, s1, s2, s3) || 0; + return callback(pV, iCode, s0, s1, s2, s3) | 0; }catch(e){ return e.resultCode || capi.SQLITE_ERROR; } @@ -10214,68 +11354,24 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ ); }/* sqlite3_set_authorizer() */ + if( !!wasm.exports.sqlite3_column_origin_name ){ + bindingSignatures.core.push( + ["sqlite3_column_database_name","string", "sqlite3_stmt*", "int"], + ["sqlite3_column_origin_name","string", "sqlite3_stmt*", "int"], + ["sqlite3_column_table_name","string", "sqlite3_stmt*", "int"] + ); + } + if(false && wasm.compileOptionUsed('SQLITE_ENABLE_NORMALIZE')){ /* ^^^ "the problem" is that this is an optional feature and the build-time function-export list does not currently take optional features into account. */ - wasm.bindingSignatures.push(["sqlite3_normalized_sql", "string", "sqlite3_stmt*"]); + bindingSignatures.core.push(["sqlite3_normalized_sql", "string", "sqlite3_stmt*"]); } - /** - Functions which require BigInt (int64) support are separated from - the others because we need to conditionally bind them or apply - dummy impls, depending on the capabilities of the environment. - (That said: we never actually build without BigInt support, - and such builds are untested.) - - Note that not all of these functions directly require int64 - but are only for use with APIs which require int64. For example, - the vtab-related functions. - */ - wasm.bindingSignatures.int64 = [ - ["sqlite3_bind_int64","int", ["sqlite3_stmt*", "int", "i64"]], - ["sqlite3_changes64","i64", ["sqlite3*"]], - ["sqlite3_column_int64","i64", ["sqlite3_stmt*", "int"]], - ["sqlite3_deserialize", "int", "sqlite3*", "string", "*", "i64", "i64", "int"] - /* Careful! Short version: de/serialize() are problematic because they - might use a different allocator than the user for managing the - deserialized block. de/serialize() are ONLY safe to use with - sqlite3_malloc(), sqlite3_free(), and its 64-bit variants. Because - of this, the canonical builds of sqlite3.wasm/js guarantee that - sqlite3.wasm.alloc() and friends use those allocators. Custom builds - may not guarantee that, however. */, - ["sqlite3_last_insert_rowid", "i64", ["sqlite3*"]], - ["sqlite3_malloc64", "*","i64"], - ["sqlite3_msize", "i64", "*"], - ["sqlite3_overload_function", "int", ["sqlite3*","string","int"]], - ["sqlite3_realloc64", "*","*", "i64"], - ["sqlite3_result_int64", undefined, "*", "i64"], - ["sqlite3_result_zeroblob64", "int", "*", "i64"], - ["sqlite3_serialize","*", "sqlite3*", "string", "*", "int"], - ["sqlite3_set_last_insert_rowid", undefined, ["sqlite3*", "i64"]], - ["sqlite3_status64", "int", "int", "*", "*", "int"], - ["sqlite3_total_changes64", "i64", ["sqlite3*"]], - ["sqlite3_update_hook", "*", [ - "sqlite3*", - new wasm.xWrap.FuncPtrAdapter({ - name: 'sqlite3_update_hook', - signature: "v(iippj)", - contextKey: (argv)=>argv[0/* sqlite3* */], - callProxy: (callback)=>{ - return (p,op,z0,z1,rowid)=>{ - callback(p, op, wasm.cstrToJs(z0), wasm.cstrToJs(z1), rowid); - }; - } - }), - "*" - ]], - ["sqlite3_uri_int64", "i64", ["sqlite3_filename", "string", "i64"]], - ["sqlite3_value_int64","i64", "sqlite3_value*"] - ]; - if( wasm.bigIntEnabled && !!wasm.exports.sqlite3_declare_vtab ){ - wasm.bindingSignatures.int64.push( + bindingSignatures.int64.push( ["sqlite3_create_module", "int", ["sqlite3*","string","sqlite3_module*","*"]], ["sqlite3_create_module_v2", "int", @@ -10283,12 +11379,12 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ ["sqlite3_declare_vtab", "int", ["sqlite3*", "string:flexible"]], ["sqlite3_drop_modules", "int", ["sqlite3*", "**"]], ["sqlite3_vtab_collation","string","sqlite3_index_info*","int"], + /*["sqlite3_vtab_config" is variadic and requires a hand-written + proxy.] */ ["sqlite3_vtab_distinct","int", "sqlite3_index_info*"], ["sqlite3_vtab_in","int", "sqlite3_index_info*", "int", "int"], ["sqlite3_vtab_in_first", "int", "sqlite3_value*", "**"], ["sqlite3_vtab_in_next", "int", "sqlite3_value*", "**"], - /*["sqlite3_vtab_config" is variadic and requires a hand-written - proxy.] */ ["sqlite3_vtab_nochange","int", "sqlite3_context*"], ["sqlite3_vtab_on_conflict","int", "sqlite3*"], ["sqlite3_vtab_rhs_value","int", "sqlite3_index_info*", "int", "**"] @@ -10296,7 +11392,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ }/* virtual table APIs */ if(wasm.bigIntEnabled && !!wasm.exports.sqlite3_preupdate_hook){ - wasm.bindingSignatures.int64.push( + bindingSignatures.int64.push( ["sqlite3_preupdate_blobwrite", "int", "sqlite3*"], ["sqlite3_preupdate_count", "int", "sqlite3*"], ["sqlite3_preupdate_depth", "int", "sqlite3*"], @@ -10341,7 +11437,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ } }; - wasm.bindingSignatures.int64.push(...[ + bindingSignatures.int64.push( ['sqlite3changegroup_add', 'int', ['sqlite3_changegroup*', 'int', 'void*']], ['sqlite3changegroup_add_strm', 'int', [ 'sqlite3_changegroup*', @@ -10409,6 +11505,31 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ }), 'void*', '**', 'int*', 'int' ]], + ['sqlite3changeset_apply_v3', 'int', [ + 'sqlite3*', 'int', 'void*', + new wasm.xWrap.FuncPtrAdapter({ + name: 'xFilter', signature: 'i(pp)', bindScope: 'transient' + }), + new wasm.xWrap.FuncPtrAdapter({ + name: 'xConflict', signature: 'i(pip)', bindScope: 'transient' + }), + 'void*', '**', 'int*', 'int' + + ]], + ['sqlite3changeset_apply_v3_strm', 'int', [ + 'sqlite3*', + new wasm.xWrap.FuncPtrAdapter({ + name: 'xInput', signature: 'i(ppp)', bindScope: 'transient' + }), + 'void*', + new wasm.xWrap.FuncPtrAdapter({ + name: 'xFilter', signature: 'i(pp)', bindScope: 'transient' + }), + new wasm.xWrap.FuncPtrAdapter({ + name: 'xConflict', signature: 'i(pip)', bindScope: 'transient' + }), + 'void*', '**', 'int*', 'int' + ]], ['sqlite3changeset_concat', 'int', ['int','void*', 'int', 'void*', 'int*', '**']], ['sqlite3changeset_concat_strm', 'int', [ new wasm.xWrap.FuncPtrAdapter({ @@ -10496,43 +11617,23 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ }), '*' ]] - ]); + ); }/*session/changeset APIs*/ /** - Functions which are intended solely for API-internal use by the - WASM components, not client code. These get installed into - sqlite3.util. Some of them get exposed to clients via variants - in sqlite3_js_...(). - - 2024-01-11: these were renamed, with two underscores in the - prefix, to ensure that clients do not accidentally depend on - them. They have always been documented as internal-use-only, so - no clients "should" be depending on the old names. + Prepare JS<->C struct bindings for the non-opaque struct types we + need... */ - wasm.bindingSignatures.wasmInternal = [ - ["sqlite3__wasm_db_reset", "int", "sqlite3*"], - ["sqlite3__wasm_db_vfs", "sqlite3_vfs*", "sqlite3*","string"], - [/* DO NOT USE. This is deprecated since 2023-08-11 because it can - trigger assert() in debug builds when used with file sizes - which are not sizes to a multiple of a valid db page size. */ - "sqlite3__wasm_vfs_create_file", "int", "sqlite3_vfs*","string","*", "int" - ], - ["sqlite3__wasm_posix_create_file", "int", "string","*", "int"], - ["sqlite3__wasm_vfs_unlink", "int", "sqlite3_vfs*","string"], - ["sqlite3__wasm_qfmt_token","string:dealloc", "string","int"] - ]; - - /** - Install JS<->C struct bindings for the non-opaque struct types we - need... */ sqlite3.StructBinder = globalThis.Jaccwabyt({ - heap: 0 ? wasm.memory : wasm.heap8u, + heap: wasm.heap8u, alloc: wasm.alloc, dealloc: wasm.dealloc, bigIntEnabled: wasm.bigIntEnabled, + pointerIR: wasm.ptr.ir, memberPrefix: /* Never change this: this prefix is baked into any - amount of code and client-facing docs. */ '$' + amount of code and client-facing docs. (Much + later: it probably should have been '$$', but see + the previous sentence.) */ '$' }); delete globalThis.Jaccwabyt; @@ -10555,16 +11656,17 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - Anything else: gets coerced to a JS string for use as a map key. If a matching entry is found (as described next), it is returned, else wasm.allocCString() is used to create a a new - string, map its pointer to (''+v) for the remainder of the - application's life, and returns that pointer value for this - call and all future calls which are passed a + string, map its pointer to a copy of (''+v) for the remainder + of the application's life, and returns that pointer value for + this call and all future calls which are passed a string-equivalent argument. - Use case: sqlite3_bind_pointer() and sqlite3_result_pointer() - call for "a static string and preferably a string - literal." This converter is used to ensure that the string - value seen by those functions is long-lived and behaves as they - need it to. + Use case: sqlite3_bind_pointer(), sqlite3_result_pointer(), and + sqlite3_value_pointer() call for "a static string and + preferably a string literal". This converter is used to ensure + that the string value seen by those functions is long-lived and + behaves as they need it to, at the cost of a one-time leak of + each distinct key. */ wasm.xWrap.argAdapter( 'string:static', @@ -10578,16 +11680,17 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /** Add some descriptive xWrap() aliases for '*' intended to (A) - initially improve readability/correctness of - wasm.bindingSignatures and (B) provide automatic conversion - from higher-level representations, e.g. capi.sqlite3_vfs to - `sqlite3_vfs*` via capi.sqlite3_vfs.pointer. + improve readability/correctness of bindingSignatures and (B) + provide automatic conversion from higher-level representations, + e.g. capi.sqlite3_vfs to `sqlite3_vfs*` via (capi.sqlite3_vfs + instance).pointer. */ const __xArgPtr = wasm.xWrap.argAdapter('*'); const nilType = function(){ /*a class which no value can ever be an instance of*/ }; wasm.xWrap.argAdapter('sqlite3_filename', __xArgPtr) + ('sqlite3_backup*', __xArgPtr) ('sqlite3_context*', __xArgPtr) ('sqlite3_value*', __xArgPtr) ('void*', __xArgPtr) @@ -10632,8 +11735,14 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ ); } + /** + Alias `T*` to `*` for return type conversions for common T + types, primarily to improve legibility of their binding + signatures. + */ const __xRcPtr = wasm.xWrap.resultAdapter('*'); wasm.xWrap.resultAdapter('sqlite3*', __xRcPtr) + ('sqlite3_backup*', __xRcPtr) ('sqlite3_context*', __xRcPtr) ('sqlite3_stmt*', __xRcPtr) ('sqlite3_value*', __xRcPtr) @@ -10644,19 +11753,10 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ Populate api object with sqlite3_...() by binding the "raw" wasm exports into type-converting proxies using wasm.xWrap(). */ - if(0 === wasm.exports.sqlite3_step.length){ - /* This environment wraps exports in nullary functions, which means - we must disable the arg-count validation we otherwise perform - on the wrappers. */ - wasm.xWrap.doArgcCheck = false; - sqlite3.config.warn( - "Disabling sqlite3.wasm.xWrap.doArgcCheck due to environmental quirks." - ); - } - for(const e of wasm.bindingSignatures){ + for(const e of bindingSignatures.core){ capi[e[0]] = wasm.xWrap.apply(null, e); } - for(const e of wasm.bindingSignatures.wasmInternal){ + for(const e of bindingSignatures.wasmInternal){ util[e[0]] = wasm.xWrap.apply(null, e); } @@ -10664,57 +11764,52 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ wasm.bigIntEnabled is true, install a bogus impl which throws if called when bigIntEnabled is false. The alternative would be to elide these functions altogether, which seems likely to - cause more confusion. */ - const fI64Disabled = function(fname){ - return ()=>toss(fname+"() is unavailable due to lack", - "of BigInt support in this build."); - }; - for(const e of wasm.bindingSignatures.int64){ + cause more confusion, as documented APIs would resolve to the + undefined value in incompatible builds. */ + for(const e of bindingSignatures.int64){ capi[e[0]] = wasm.bigIntEnabled ? wasm.xWrap.apply(null, e) - : fI64Disabled(e[0]); + : ()=>toss(e[0]+"() is unavailable due to lack", + "of BigInt support in this build."); } - /* There's no need to expose bindingSignatures to clients, - implicitly making it part of the public interface. */ - delete wasm.bindingSignatures; + /* We're done with bindingSignatures but it's const, so... */ + delete bindingSignatures.core; + delete bindingSignatures.int64; + delete bindingSignatures.wasmInternal; - if(wasm.exports.sqlite3__wasm_db_error){ - const __db_err = wasm.xWrap( - 'sqlite3__wasm_db_error', 'int', 'sqlite3*', 'int', 'string' - ); - /** - Sets the given db's error state. Accepts: - - - (sqlite3*, int code, string msg) - - (sqlite3*, Error e [,string msg = ''+e]) - - If passed a WasmAllocError, the message is ignored and the - result code is SQLITE_NOMEM. If passed any other Error type, - the result code defaults to SQLITE_ERROR unless the Error - object has a resultCode property, in which case that is used - (e.g. SQLite3Error has that). If passed a non-WasmAllocError - exception, the message string defaults to theError.message. - - Returns the resulting code. Pass (pDb,0,0) to clear the error - state. - */ - util.sqlite3__wasm_db_error = function(pDb, resultCode, message){ - if(resultCode instanceof sqlite3.WasmAllocError){ - resultCode = capi.SQLITE_NOMEM; - message = 0 /*avoid allocating message string*/; - }else if(resultCode instanceof Error){ - message = message || ''+resultCode; - resultCode = (resultCode.resultCode || capi.SQLITE_ERROR); - } - return pDb ? __db_err(pDb, resultCode, message) : resultCode; - }; - }else{ - util.sqlite3__wasm_db_error = function(pDb,errCode,msg){ - console.warn("sqlite3__wasm_db_error() is not exported.",arguments); - return errCode; - }; - } + /** + Sets the given db's error state. Accepts: + + - (sqlite3*, int code, string msg) + - (sqlite3*, Error e [,string msg = ''+e]) + + If passed a WasmAllocError, the message is ignored and the + result code is SQLITE_NOMEM. If passed any other Error type, + the result code defaults to SQLITE_ERROR unless the Error + object has a resultCode property, in which case that is used + (e.g. SQLite3Error has that). If passed a non-WasmAllocError + exception, the message string defaults to ''+theError. + + Returns either the final result code, capi.SQLITE_NOMEM if + setting the message string triggers an OOM, or + capi.SQLITE_MISUSE if pDb is NULL or invalid (with the caveat + that behavior in the later case is undefined if pDb is not + "valid enough"). + + Pass (pDb,0,0) to clear the error state. + */ + util.sqlite3__wasm_db_error = function(pDb, resultCode, message){ + if( !pDb ) return capi.SQLITE_MISUSE; + if(resultCode instanceof sqlite3.WasmAllocError){ + resultCode = capi.SQLITE_NOMEM; + message = 0 /*avoid allocating message string*/; + }else if(resultCode instanceof Error){ + message = message || ''+resultCode; + resultCode = (resultCode.resultCode || capi.SQLITE_ERROR); + } + return capi.sqlite3_set_errmsg(pDb, resultCode, message) || resultCode; + }; }/*xWrap() bindings*/ {/* Import C-level constants and structs... */ @@ -10723,7 +11818,6 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ toss("Maintenance required: increase sqlite3__wasm_enum_json()'s", "static buffer size!"); } - //console.debug('wasm.ctype length =',wasm.cstrlen(cJson)); wasm.ctype = JSON.parse(wasm.cstrToJs(cJson)); // Groups of SQLITE_xyz macros... const defineGroups = ['access', 'authorizer', @@ -10736,7 +11830,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ 'sqlite3Status', 'stmtStatus', 'syncFlags', 'trace', 'txnState', 'udfFlags', - 'version' ]; + 'version']; if(wasm.bigIntEnabled){ defineGroups.push('serialize', 'session', 'vtab'); } @@ -10752,22 +11846,19 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ "entry SQLITE_WASM_DEALLOC (=="+capi.SQLITE_WASM_DEALLOC+")."); } const __rcMap = Object.create(null); - for(const t of ['resultCodes']){ - for(const e of Object.entries(wasm.ctype[t])){ - __rcMap[e[1]] = e[0]; - } + for(const e of Object.entries(wasm.ctype['resultCodes'])){ + __rcMap[e[1]] = e[0]; } /** For the given integer, returns the SQLITE_xxx result code as a string, or undefined if no such mapping is found. */ capi.sqlite3_js_rc_str = (rc)=>__rcMap[rc]; + /* Bind all registered C-side structs... */ const notThese = Object.assign(Object.create(null),{ // For each struct to NOT register, map its name to true: WasmTestStruct: true, - /* We unregister the kvvfs VFS from Worker threads below. */ - sqlite3_kvvfs_methods: !util.isUIThread(), /* sqlite3_index_info and friends require int64: */ sqlite3_index_info: !wasm.bigIntEnabled, sqlite3_index_constraint: !wasm.bigIntEnabled, @@ -10781,7 +11872,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ } if(capi.sqlite3_index_info){ /* Move these inner structs into sqlite3_index_info. Binding - ** them to WASM requires that we create global-scope structs to + ** them to WASM requires that we create top-level structs to ** model them with, but those are no longer needed after we've ** passed them to StructBinder. */ for(const k of ['sqlite3_index_constraint', @@ -10900,29 +11991,39 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ wasm.uninstallFunction() any WASM function bindings it has installed for pDb. */ - const closeArgs = [pDb]; - for(const name of [ - 'sqlite3_busy_handler', - 'sqlite3_commit_hook', - 'sqlite3_preupdate_hook', - 'sqlite3_progress_handler', - 'sqlite3_rollback_hook', - 'sqlite3_set_authorizer', - 'sqlite3_trace_v2', - 'sqlite3_update_hook' - ]) { + for(const obj of [ + /* pairs of [funcName, itsArityInC] */ + ['sqlite3_busy_handler',3], + ['sqlite3_commit_hook',3], + ['sqlite3_preupdate_hook',3], + ['sqlite3_progress_handler',4], + ['sqlite3_rollback_hook',3], + ['sqlite3_set_authorizer',3], + ['sqlite3_trace_v2', 4], + ['sqlite3_update_hook',3] + /* + We do not yet have a way to clean up automatically-converted + sqlite3_set_auxdata() finalizers. + */ + ]){ + const [name, arity] = obj; const x = wasm.exports[name]; if( !x ){ /* assume it was built without this API */ continue; } - closeArgs.length = x.length/*==argument count*/ - /* recall that undefined entries translate to 0 when passed to - WASM. */; + const closeArgs = [pDb]; + closeArgs.length = arity + /* Recall that: (A) undefined entries translate to 0 when + passed to WASM and (B) Safari wraps wasm.exports.* in + nullary functions so x.length is 0 there. */; + //wasm.xWrap.debug = true; try{ capi[name](...closeArgs) } catch(e){ + /* This "cannot happen" unless something is well and truly sideways. */ sqlite3.config.warn("close-time call of",name+"(",closeArgs,") threw:",e); } + //wasm.xWrap.debug = false; } const m = __dbCleanupMap(pDb, 0); if(!m) return; @@ -11022,10 +12123,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ 2) It accepts JS functions for its function-pointer arguments, for which it will install WASM-bound proxies. The bindings - are "permanent," in that they will stay in the WASM environment - until it shuts down unless the client calls this again with the - same collation name and a value of 0 or null for the - the function pointer(s). + are "permanent," in that they will stay in the WASM + environment until it shuts down unless the client calls this + again with the same collation name and a value of 0 or null + for the the function pointer(s). sqlite3_close_v2() will + also clean up such automatically-installed WASM functions. For consistency with the C API, it requires the same number of arguments. It returns capi.SQLITE_MISUSE if passed any other @@ -11266,18 +12368,20 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ sqlite3_prepare_v3() */ /** - Helper for string:flexible conversions which require a + Helper for string:flexible conversions which requires a byte-length counterpart argument. Passed a value and its ostensible length, this function returns [V,N], where V is - either v or a transformed copy of v and N is either n, -1, or - the byte length of v (if it's a byte array or ArrayBuffer). + either v or a to-string transformed copy of v and N is either n + (if v is a WASM pointer, in which case n might be a BigInt), -1 + (if v is a string or Array), or the byte length of v (if it's a + byte array or ArrayBuffer). */ const __flexiString = (v,n)=>{ if('string'===typeof v){ n = -1; }else if(util.isSQLableTypedArray(v)){ n = v.byteLength; - v = util.typedArrayToString( + v = wasm.typedArrayToString( (v instanceof ArrayBuffer) ? new Uint8Array(v) : v ); }else if(Array.isArray(v)){ @@ -11303,15 +12407,14 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ "int", "**", "**"/*MUST be 0 or null or undefined!*/]), /** - Impl which requires that the 2nd argument be a pointer - to the SQL string, instead of being converted to a - string. This variant is necessary for cases where we - require a non-NULL value for the final argument - (exec()'ing multiple statements from one input - string). For simpler cases, where only the first - statement in the SQL string is required, the wrapper - named sqlite3_prepare_v2() is sufficient and easier to - use because it doesn't require dealing with pointers. + Impl which requires that the 2nd argument be a pointer to the + SQL string, instead of being converted to a JS string. This + variant is necessary for cases where we require a non-NULL + value for the final argument (prepare/step of multiple + statements from one input string). For simpler cases, where + only the first statement in the SQL string is required, the + wrapper named sqlite3_prepare_v2() is sufficient and easier + to use because it doesn't require dealing with pointers. */ full: wasm.xWrap('sqlite3_prepare_v3', "int", ["sqlite3*", "*", "int", "int", @@ -11323,15 +12426,17 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ if(f.length!==arguments.length){ return __dbArgcMismatch(pDb,"sqlite3_prepare_v3",f.length); } - const [xSql, xSqlLen] = __flexiString(sql, sqlLen); + const [xSql, xSqlLen] = __flexiString(sql, Number(sqlLen)); switch(typeof xSql){ - case 'string': return __prepare.basic(pDb, xSql, xSqlLen, prepFlags, ppStmt, null); - case 'number': return __prepare.full(pDb, xSql, xSqlLen, prepFlags, ppStmt, pzTail); - default: - return util.sqlite3__wasm_db_error( - pDb, capi.SQLITE_MISUSE, - "Invalid SQL argument type for sqlite3_prepare_v2/v3()." - ); + case 'string': return __prepare.basic(pDb, xSql, xSqlLen, prepFlags, ppStmt, null); + case (typeof wasm.ptr.null): + return __prepare.full(pDb, wasm.ptr.coerce(xSql), xSqlLen, prepFlags, + ppStmt, pzTail); + default: + return util.sqlite3__wasm_db_error( + pDb, capi.SQLITE_MISUSE, + "Invalid SQL argument type for sqlite3_prepare_v2/v3(). typeof="+(typeof xSql) + ); } }; @@ -11422,6 +12527,43 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ }/*sqlite3_bind_text/blob()*/ + if(!capi.sqlite3_column_text){ + /*[tag:proxy-text-apis] + As discussed at: + + https://sqlite.org/forum/forumpost/d77281aec2df9ada + + Summary: there are opinions that sqlite3_column_text() and + sqlite3_value_text() should handle strings such that embedded + NULs are retained. This block does that. This block does _not_ + apply that special-case behavior to any number of _other_ + APIs which return C-strings. That discrepancy makes this + block highly arguable, but one can also argue that these two + specific functions can get away with such acrobatics without + it being called voodoo in a pejorative sense. + */ + const argStmt = wasm.xWrap.argAdapter('sqlite3_stmt*'), + argInt = wasm.xWrap.argAdapter('int'), + argValue = wasm.xWrap.argAdapter('sqlite3_value*'), + newStr = + (cstr,n)=>wasm.typedArrayToString(wasm.heap8u(), + Number(cstr), Number(cstr)+n) + capi.sqlite3_column_text = function(stmt, colIndex){ + const a0 = argStmt(stmt), a1 = argInt(colIndex); + const cstr = wasm.exports.sqlite3_column_text(a0, a1); + return cstr + ? newStr(cstr,wasm.exports.sqlite3_column_bytes(a0, a1)) + : null; + }; + capi.sqlite3_value_text = function(val){ + const a0 = argValue(val); + const cstr = wasm.exports.sqlite3_value_text(a0); + return cstr + ? newStr(cstr,wasm.exports.sqlite3_value_bytes(a0)) + : null; + }; + }/*text-return-related bindings*/ + {/* sqlite3_config() */ /** Wraps a small subset of the C API's sqlite3_config() options. @@ -11508,118 +12650,21 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ }; }/* auto-extension */ - const pKvvfs = capi.sqlite3_vfs_find("kvvfs"); - if( pKvvfs ){/* kvvfs-specific glue */ - if(util.isUIThread()){ - const kvvfsMethods = new capi.sqlite3_kvvfs_methods( - wasm.exports.sqlite3__wasm_kvvfs_methods() - ); - delete capi.sqlite3_kvvfs_methods; + /* Warn if client-level code makes use of FuncPtrAdapter. */ + wasm.xWrap.FuncPtrAdapter.warnOnUse = true; - const kvvfsMakeKey = wasm.exports.sqlite3__wasm_kvvfsMakeKeyOnPstack, - pstack = wasm.pstack; + const StructBinder = sqlite3.StructBinder + /* we require a local alias b/c StructBinder is removed from the sqlite3 + object during the final steps of the API cleanup. */; + /** + Installs a StructBinder-bound function pointer member of the + given name and function in the given StructBinder.StructType + target object. - const kvvfsStorage = (zClass)=> - ((115/*=='s'*/===wasm.peek(zClass)) - ? sessionStorage : localStorage); - - /** - Implementations for members of the object referred to by - sqlite3__wasm_kvvfs_methods(). We swap out the native - implementations with these, which use localStorage or - sessionStorage for their backing store. - */ - const kvvfsImpls = { - xRead: (zClass, zKey, zBuf, nBuf)=>{ - const stack = pstack.pointer, - astack = wasm.scopedAllocPush(); - try { - const zXKey = kvvfsMakeKey(zClass,zKey); - if(!zXKey) return -3/*OOM*/; - const jKey = wasm.cstrToJs(zXKey); - const jV = kvvfsStorage(zClass).getItem(jKey); - if(!jV) return -1; - const nV = jV.length /* Note that we are relying 100% on v being - ASCII so that jV.length is equal to the - C-string's byte length. */; - if(nBuf<=0) return nV; - else if(1===nBuf){ - wasm.poke(zBuf, 0); - return nV; - } - const zV = wasm.scopedAllocCString(jV); - if(nBuf > nV + 1) nBuf = nV + 1; - wasm.heap8u().copyWithin(zBuf, zV, zV + nBuf - 1); - wasm.poke(zBuf + nBuf - 1, 0); - return nBuf - 1; - }catch(e){ - console.error("kvstorageRead()",e); - return -2; - }finally{ - pstack.restore(stack); - wasm.scopedAllocPop(astack); - } - }, - xWrite: (zClass, zKey, zData)=>{ - const stack = pstack.pointer; - try { - const zXKey = kvvfsMakeKey(zClass,zKey); - if(!zXKey) return 1/*OOM*/; - const jKey = wasm.cstrToJs(zXKey); - kvvfsStorage(zClass).setItem(jKey, wasm.cstrToJs(zData)); - return 0; - }catch(e){ - console.error("kvstorageWrite()",e); - return capi.SQLITE_IOERR; - }finally{ - pstack.restore(stack); - } - }, - xDelete: (zClass, zKey)=>{ - const stack = pstack.pointer; - try { - const zXKey = kvvfsMakeKey(zClass,zKey); - if(!zXKey) return 1/*OOM*/; - kvvfsStorage(zClass).removeItem(wasm.cstrToJs(zXKey)); - return 0; - }catch(e){ - console.error("kvstorageDelete()",e); - return capi.SQLITE_IOERR; - }finally{ - pstack.restore(stack); - } - } - }/*kvvfsImpls*/; - for(const k of Object.keys(kvvfsImpls)){ - kvvfsMethods[kvvfsMethods.memberKey(k)] = - wasm.installFunction( - kvvfsMethods.memberSignature(k), - kvvfsImpls[k] - ); - } - }else{ - /* Worker thread: unregister kvvfs to avoid it being used - for anything other than local/sessionStorage. It "can" - be used that way but it's not really intended to be. */ - capi.sqlite3_vfs_unregister(pKvvfs); - } - }/*pKvvfs*/ - - /* Warn if client-level code makes use of FuncPtrAdapter. */ - wasm.xWrap.FuncPtrAdapter.warnOnUse = true; - - const StructBinder = sqlite3.StructBinder - /* we require a local alias b/c StructBinder is removed from the sqlite3 - object during the final steps of the API cleanup. */; - /** - Installs a StructBinder-bound function pointer member of the - given name and function in the given StructBinder.StructType - target object. - - It creates a WASM proxy for the given function and arranges for - that proxy to be cleaned up when tgt.dispose() is called. Throws - on the slightest hint of error, e.g. tgt is-not-a StructType, - name does not map to a struct-bound member, etc. + It creates a WASM proxy for the given function and arranges for + that proxy to be cleaned up when tgt.dispose() is called. Throws + on the slightest hint of error, e.g. tgt is-not-a StructType, + name does not map to a struct-bound member, etc. As a special case, if the given function is a pointer, then `wasm.functionEntry()` is used to validate that it is a known @@ -11658,7 +12703,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ if(!(tgt instanceof StructBinder.StructType)){ toss("Usage error: target object is-not-a StructType."); }else if(!(func instanceof Function) && !wasm.isPtr(func)){ - toss("Usage errror: expecting a Function or WASM pointer to one."); + toss("Usage error: expecting a Function or WASM pointer to one."); } if(1===arguments.length){ return (n,f)=>callee(tgt, n, f, applyArgcCheck); @@ -11680,7 +12725,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ if(this.ondispose.__removeFuncList){ this.ondispose.__removeFuncList.forEach( (v,ndx)=>{ - if('number'===typeof v){ + if(wasm.isPtr(v)){ try{wasm.uninstallFunction(v)} catch(e){/*ignore*/} } @@ -11710,7 +12755,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ } tgt[memKey] = fProxy; }else{ - const pFunc = wasm.installFunction(fProxy, tgt.memberSignature(name, true)); + const pFunc = wasm.installFunction(fProxy, sigN); tgt[memKey] = pFunc; if(!tgt.ondispose || !tgt.ondispose.__removeFuncList){ tgt.addOnDispose('ondispose.__removeFuncList handler', @@ -11783,13 +12828,6 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ }; }); -/* END FILE: api/sqlite3-api-glue.c-pp.js */ -/* BEGIN FILE: ./bld/sqlite3-api-build-version.js */ -globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - sqlite3.version = {"libVersion": "3.48.0", "libVersionNumber": 3048000, "sourceId": "2025-01-14 11:05:00 d2fe6b05f38d9d7cd78c5d252e99ac59f1aea071d669830c1ffe4e8966e8alt1","downloadVersion": 3480000}; -}); -/* END FILE: ./bld/sqlite3-api-build-version.js */ -/* BEGIN FILE: api/sqlite3-api-oo1.c-pp.js */ /* 2022-07-22 @@ -11804,10 +12842,9 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ This file contains the so-called OO #1 API wrapper for the sqlite3 WASM build. It requires that sqlite3-api-glue.js has already run - and it installs its deliverable as globalThis.sqlite3.oo1. + and it installs its deliverable as sqlite3.oo1. */ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - const toss = (...args)=>{throw new Error(args.join(' '))}; const toss3 = (...args)=>{throw new sqlite3.SQLite3Error(...args)}; const capi = sqlite3.capi, wasm = sqlite3.wasm, util = sqlite3.util; @@ -11818,6 +12855,20 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ the sqlite3 binding if, e.g., the wrapper is in the main thread and the sqlite3 API is in a worker. */ + const outWrapper = function(f){ + return (...args)=>f("sqlite3.oo1:",...args); + }; + + const debug = sqlite3.__isUnderTest + ? outWrapper(console.debug.bind(console)) + : outWrapper(sqlite3.config.debug); + const warn = sqlite3.__isUnderTest + ? outWrapper(console.warn.bind(console)) + : outWrapper(sqlite3.config.warn); + const error = sqlite3.__isUnderTest + ? outWrapper(console.error.bind(console)) + : outWrapper(sqlite3.config.error); + /** In order to keep clients from manipulating, perhaps inadvertently, the underlying pointer values of DB and Stmt @@ -11830,8 +12881,23 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ const __ptrMap = new WeakMap(); /** - Map of DB instances to objects, each object being a map of Stmt - wasm pointers to Stmt objects. + A Set of oo1.DB or oo1.Stmt objects which are proxies for + (sqlite3*) resp. (sqlite3_stmt*) pointers which themselves are + owned elsewhere. Objects in this Set do not own their underlying + handle and that handle must be guaranteed (by the client) to + outlive the proxy. DB.close()/Stmt.finalize() methods will remove + the object from this Set _instead_ of closing/finalizing the + pointer. These proxies are primarily intended as a way to briefly + wrap an (sqlite3[_stmt]*) object as an oo1.DB/Stmt without taking + over ownership, to take advantage of simplifies usage compared to + the C API while not imposing any change of ownership. + + See DB.wrapHandle() and Stmt.wrapHandle(). + */ + const __doesNotOwnHandle = new Set(); + /** + Map of DB instances to objects, each object being a map of + sqlite3_stmt wasm pointers to Stmt objects. */ const __stmtMap = new WeakMap(); @@ -11865,7 +12931,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ wasm.installFunction('i(ippp)', function(t,c,p,x){ if(capi.SQLITE_TRACE_STMT===t){ // x == SQL, p == sqlite3_stmt* - console.log("SQL TRACE #"+(++this.counter)+' via sqlite3@'+c+':', + console.log("SQL TRACE #"+(++this.counter), + 'via sqlite3@'+c+'['+capi.sqlite3_db_filename(c,null)+']', wasm.cstrToJs(x)); } }.bind({counter: 0})); @@ -11891,106 +12958,101 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ properties: - `.filename`: the db filename. It may be a special name like ":memory:" - or "". + or "". It may also be a URI-style name. - `.flags`: as documented in the DB constructor. - `.vfs`: as documented in the DB constructor. It also accepts those as the first 3 arguments. + + In non-default builds it may accept additional configuration + options. */ const dbCtorHelper = function ctor(...args){ - if(!ctor._name2vfs){ - /** - Map special filenames which we handle here (instead of in C) - to some helpful metadata... - - As of 2022-09-20, the C API supports the names :localStorage: - and :sessionStorage: for kvvfs. However, C code cannot - determine (without embedded JS code, e.g. via Emscripten's - EM_JS()) whether the kvvfs is legal in the current browser - context (namely the main UI thread). In order to help client - code fail early on, instead of it being delayed until they - try to read or write a kvvfs-backed db, we'll check for those - names here and throw if they're not legal in the current - context. - */ - ctor._name2vfs = Object.create(null); - const isWorkerThread = ('function'===typeof importScripts/*===running in worker thread*/) - ? (n)=>toss3("The VFS for",n,"is only available in the main window thread.") - : false; - ctor._name2vfs[':localStorage:'] = { - vfs: 'kvvfs', filename: isWorkerThread || (()=>'local') - }; - ctor._name2vfs[':sessionStorage:'] = { - vfs: 'kvvfs', filename: isWorkerThread || (()=>'session') - }; - } const opt = ctor.normalizeArgs(...args); - let fn = opt.filename, vfsName = opt.vfs, flagsStr = opt.flags; - if(('string'!==typeof fn && 'number'!==typeof fn) - || 'string'!==typeof flagsStr - || (vfsName && ('string'!==typeof vfsName && 'number'!==typeof vfsName))){ - sqlite3.config.error("Invalid DB ctor args",opt,arguments); - toss3("Invalid arguments for DB constructor."); - } - let fnJs = ('number'===typeof fn) ? wasm.cstrToJs(fn) : fn; - const vfsCheck = ctor._name2vfs[fnJs]; - if(vfsCheck){ - vfsName = vfsCheck.vfs; - fn = fnJs = vfsCheck.filename(fnJs); - } - let pDb, oflags = 0; - if( flagsStr.indexOf('c')>=0 ){ - oflags |= capi.SQLITE_OPEN_CREATE | capi.SQLITE_OPEN_READWRITE; - } - if( flagsStr.indexOf('w')>=0 ) oflags |= capi.SQLITE_OPEN_READWRITE; - if( 0===oflags ) oflags |= capi.SQLITE_OPEN_READONLY; - oflags |= capi.SQLITE_OPEN_EXRESCODE; - const stack = wasm.pstack.pointer; - try { - const pPtr = wasm.pstack.allocPtr() /* output (sqlite3**) arg */; - let rc = capi.sqlite3_open_v2(fn, pPtr, oflags, vfsName || 0); - pDb = wasm.peekPtr(pPtr); - checkSqlite3Rc(pDb, rc); - capi.sqlite3_extended_result_codes(pDb, 1); - if(flagsStr.indexOf('t')>=0){ - capi.sqlite3_trace_v2(pDb, capi.SQLITE_TRACE_STMT, - __dbTraceToConsole, pDb); - } - }catch( e ){ - if( pDb ) capi.sqlite3_close_v2(pDb); - throw e; - }finally{ - wasm.pstack.restore(stack); + //sqlite3.config.debug("DB ctor",opt); + let pDb; + if( (pDb = opt['sqlite3*']) ){ + /* This property ^^^^^ is very specifically NOT DOCUMENTED and + NOT part of the public API. This is a back door for functions + like DB.wrapDbHandle(). */ + //sqlite3.config.debug("creating proxy db from",opt); + if( !opt['sqlite3*:takeOwnership'] ){ + /* This is object does not own its handle. */ + __doesNotOwnHandle.add(this); + } + this.filename = capi.sqlite3_db_filename(pDb,'main'); + }else{ + let fn = opt.filename, vfsName = opt.vfs, flagsStr = opt.flags; + if( ('string'!==typeof fn && !wasm.isPtr(fn)) + || 'string'!==typeof flagsStr + || (vfsName && ('string'!==typeof vfsName && !wasm.isPtr(vfsName))) ){ + sqlite3.config.error("Invalid DB ctor args",opt,arguments); + toss3("Invalid arguments for DB constructor:", arguments, "opts:", opt); + } + let oflags = 0; + if( flagsStr.indexOf('c')>=0 ){ + oflags |= capi.SQLITE_OPEN_CREATE | capi.SQLITE_OPEN_READWRITE; + } + if( flagsStr.indexOf('w')>=0 ) oflags |= capi.SQLITE_OPEN_READWRITE; + if( 0===oflags ) oflags |= capi.SQLITE_OPEN_READONLY; + oflags |= capi.SQLITE_OPEN_EXRESCODE; + const stack = wasm.pstack.pointer; + try { + const pPtr = wasm.pstack.allocPtr() /* output (sqlite3**) arg */; + let rc = capi.sqlite3_open_v2(fn, pPtr, oflags, vfsName || wasm.ptr.null); + pDb = wasm.peekPtr(pPtr); + checkSqlite3Rc(pDb, rc); + capi.sqlite3_extended_result_codes(pDb, 1); + if(flagsStr.indexOf('t')>=0){ + capi.sqlite3_trace_v2(pDb, capi.SQLITE_TRACE_STMT, + __dbTraceToConsole, pDb); + } + }catch( e ){ + if( pDb ) capi.sqlite3_close_v2(pDb); + throw e; + }finally{ + wasm.pstack.restore(stack); + } + this.filename = + /* A poor design choice we have to keep: this.filename may be + in the form "file:....?....". It really should have been + sqlite3_db_filename(pDb) but that discrepancy went too long + unnoticed to be able to change without risk of + breakage. DB.dbFilename() can be used to fetch _just_ the + name part. + */ wasm.isPtr(fn) ? wasm.cstrToJs(fn) : fn; + } - this.filename = fnJs; __ptrMap.set(this, pDb); __stmtMap.set(this, Object.create(null)); - try{ - // Check for per-VFS post-open SQL/callback... - const pVfs = capi.sqlite3_js_db_vfs(pDb) - || toss3("Internal error: cannot get VFS for new db handle."); - const postInitSql = __vfsPostOpenCallback[pVfs]; - if(postInitSql){ - /** - Reminder: if this db is encrypted and the client did _not_ pass - in the key, any init code will fail, causing the ctor to throw. - We don't actually know whether the db is encrypted, so we cannot - sensibly apply any heuristics which skip the init code only for - encrypted databases for which no key has yet been supplied. - */ - if(postInitSql instanceof Function){ - postInitSql(this, sqlite3); - }else{ - checkSqlite3Rc( - pDb, capi.sqlite3_exec(pDb, postInitSql, 0, 0, 0) - ); + if( !opt['sqlite3*'] ){ + try{ + // Check for per-VFS post-open SQL/callback... + const pVfs = capi.sqlite3_js_db_vfs(pDb) + || toss3("Internal error: cannot get VFS for new db handle."); + const postInitSql = __vfsPostOpenCallback[pVfs]; + if(postInitSql){ + /** + Reminder: if this db is encrypted and the client did _not_ pass + in the key, any init code will fail, causing the ctor to throw. + We don't actually know whether the db is encrypted, so we cannot + sensibly apply any heuristics which skip the init code only for + encrypted databases for which no key has yet been supplied. + */ + if(postInitSql instanceof Function){ + postInitSql(this, sqlite3); + }else{ + checkSqlite3Rc( + pDb, capi.sqlite3_exec(pDb, postInitSql, 0, 0, 0) + ); + } } + }catch(e){ + this.close(); + throw e; } - }catch(e){ - this.close(); - throw e; } }; @@ -12049,12 +13111,12 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ The given db filename must be resolvable using whatever filesystem layer (virtual or otherwise) is set up for the default - sqlite3 VFS. + sqlite3 VFS or a VFS which can resolve it must be specified. - Note that the special sqlite3 db names ":memory:" and "" - (temporary db) have their normal special meanings here and need - not resolve to real filenames, but "" uses an on-storage - temporary database and requires that the VFS support that. + The special sqlite3 db names ":memory:" and "" (temporary db) + have their normal special meanings here and need not resolve to + real filenames, but "" uses an on-storage temporary database and + requires that the VFS support that. The second argument specifies the open/create mode for the database. It must be string containing a sequence of letters (in @@ -12118,8 +13180,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /** Internal-use enum for mapping JS types to DB-bindable types. These do not (and need not) line up with the SQLITE_type - values. All values in this enum must be truthy and distinct - but they need not be numbers. + values. All values in this enum must be truthy and (mostly) + distinct but they need not be numbers. */ const BindTypes = { null: 1, @@ -12128,7 +13190,6 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ boolean: 4, blob: 5 }; - BindTypes['undefined'] == BindTypes.null; if(wasm.bigIntEnabled){ BindTypes.bigint = BindTypes.number; } @@ -12147,26 +13208,30 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - `db`: the DB object which created the statement. - `columnCount`: the number of result columns in the query, or 0 - for queries which cannot return results. This property is a proxy - for sqlite3_column_count() and its use in loops should be avoided - because of the call overhead associated with that. The - `columnCount` is not cached when the Stmt is created because a - schema change made via a separate db connection between this - statement's preparation and when it is stepped may invalidate it. + for queries which cannot return results. This property is a + read-only proxy for sqlite3_column_count() and its use in loops + should be avoided because of the call overhead associated with + that. The `columnCount` is not cached when the Stmt is created + because a schema change made between this statement's preparation + and when it is stepped may invalidate it. - - `parameterCount`: the number of bindable parameters in the query. + - `parameterCount`: the number of bindable parameters in the + query. Like `columnCount`, this property is ready-only and is a + proxy for a C API call. As a general rule, most methods of this class will throw if called on an instance which has been finalized. For brevity's sake, the method docs do not all repeat this warning. */ - const Stmt = function(){ + const Stmt = function(/*oo1db, stmtPtr, BindTypes [,takeOwnership=true] */){ if(BindTypes!==arguments[2]){ toss3(capi.SQLITE_MISUSE, "Do not call the Stmt constructor directly. Use DB.prepare()."); } this.db = arguments[0]; __ptrMap.set(this, arguments[1]); - this.parameterCount = capi.sqlite3_bind_parameter_count(this.pointer); + if( arguments.length>3 && !arguments[3] ){ + __doesNotOwnHandle.add(this); + } }; /** Throws if the given DB has been closed, else it is returned. */ @@ -12314,7 +13379,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ const stmt = db.prepare(sql); try { const rc = stmt.bind(bind).step() ? stmt.get(...getArgs) : undefined; - stmt.reset(/*for INSERT...RETURNING locking case*/); + stmt.reset(/*for INSERT...RETURNING locking case + https://sqlite.org/forum/forumpost/c411b3a9143d02dce */); return rc; }finally{ stmt.finalize(); @@ -12330,6 +13396,57 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ sql, bind, rowMode, returnValue: 'resultRows' }); + /** + Internal impl of DB.Stmt APIs which fetch a column. The caller is + required to have validated the ndx value before calling this (see + affirmColIndex()). The purpose of this impl is to speed up such + operations which loop, to avoid having to validate the index on + each iteration. The arguments are as documented for Stmt.get() + with the exception that ndx must be an in-range interger (that + function handles the other cases and proxies them to this one). + */ + const __stmtGetColumn = (stmt, ndx, asType)=>{ + switch(undefined===asType + ? capi.sqlite3_column_type(stmt.pointer, ndx) + : asType){ + case capi.SQLITE_NULL: return null; + case capi.SQLITE_INTEGER:{ + if(wasm.bigIntEnabled){ + const rc = capi.sqlite3_column_int64(stmt.pointer, ndx); + if(rc>=Number.MIN_SAFE_INTEGER && rc<=Number.MAX_SAFE_INTEGER){ + return Number(rc).valueOf(); + } + return rc; + }else{ + const rc = capi.sqlite3_column_double(stmt.pointer, ndx); + if(rc>Number.MAX_SAFE_INTEGER || rc{ - if(s && s.pointer){ + for(const s of Object.values(__stmtMap.get(this))){ + if(s?.pointer){ try{s.finalize()} - catch(e){/*ignore*/} + catch(ex){/*ignore*/} } - }); + } __ptrMap.delete(this); __stmtMap.delete(this); - capi.sqlite3_close_v2(pDb); - if(this.onclose && (this.onclose.after instanceof Function)){ + if( !__doesNotOwnHandle.delete(this) ){ + capi.sqlite3_close_v2(pDb); + } + if(this.onclose?.after instanceof Function){ try{this.onclose.after(this)} catch(e){/*ignore*/} } @@ -12431,6 +13554,9 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ sqlite3_db_filename() value for the given database name, defaulting to "main". The argument may be either a JS string or a pointer to a WASM-allocated C-string. + + this.filename may be in the form of a URI-style string, whereas + the returned string contains only the filename part. */ dbFilename: function(dbName='main'){ return capi.sqlite3_db_filename(affirmDbOpen(this).pointer, dbName); @@ -12552,15 +13678,15 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ result set, but only if that statement has any result rows. The callback's "this" is the options object, noting that this function synthesizes one if the caller does not pass one to - exec(). The second argument passed to the callback is always - the current Stmt object, as it's needed if the caller wants to - fetch the column names or some such (noting that they could - also be fetched via `this.columnNames`, if the client provides - the `columnNames` option). If the callback returns a literal - `false` (as opposed to any other falsy value, e.g. an implicit - `undefined` return), any ongoing statement-`step()` iteration - stops without an error. The return value of the callback is - otherwise ignored. + exec(). The first argument passed to the callback is described + below. The second argument is always the current Stmt object, + as it's needed if the caller wants to fetch the column names or + some such (noting that they could also be fetched via + `this.columnNames`, if the client provides the `columnNames` + option). If the callback returns a literal `false` (as opposed + to any other falsy value, e.g. an implicit `undefined` return), + any ongoing statement-`step()` iteration stops without an + error. The return value of the callback is otherwise ignored. ACHTUNG: The callback MUST NOT modify the Stmt object. Calling any of the Stmt.get() variants, Stmt.getColumnName(), or @@ -12593,20 +13719,23 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ A.3) `'stmt'` causes the current Stmt to be passed to the callback, but this mode will trigger an exception if `resultRows` is an array because appending the transient - statement to the array would be downright unhelpful. + statement to the array would be downright unhelpful. This + option is a legacy feature, retained for backwards + compatibility. The statement object is passed as the second + argument to the callback, as described above. B) An integer, indicating a zero-based column in the result - row. Only that one single value will be passed on. + row. Only that one single value, in JS form, will be passed on. C) A string with a minimum length of 2 and leading character of '$' will fetch the row as an object, extract that one field, - and pass that field's value to the callback. Note that these - keys are case-sensitive so must match the case used in the + and pass that field's value to the callback. These keys are + case-sensitive so must match the case used in the SQL. e.g. `"select a A from t"` with a `rowMode` of `'$A'` would work but `'$a'` would not. A reference to a column not in the result set will trigger an exception on the first row (as - the check is not performed until rows are fetched). Note also - that `$` is a legal identifier character in JS so need not be + the check is not performed until rows are fetched). Note that + `$` is a legal identifier character in JS so need not be quoted. Any other `rowMode` value triggers an exception. @@ -12646,6 +13775,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - `callback` and `resultRows`: permit an array entries with semantics similar to those described for `bind` above. + OTOH, this function already does too much. */ exec: function(/*(sql [,obj]) || (obj)*/){ affirmDbOpen(this); @@ -12669,20 +13799,20 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /* Optimization: if the SQL is a TypedArray we can save some string conversion costs. */; /* Allocate the two output pointers (ppStmt, pzTail) and heap - space for the SQL (pSql). When prepare_v2() returns, pzTail + space for the SQL (pSql). When prepare_v3() returns, pzTail will point to somewhere in pSql. */ let sqlByteLen = isTA ? arg.sql.byteLength : wasm.jstrlen(arg.sql); const ppStmt = wasm.scopedAlloc( /* output (sqlite3_stmt**) arg and pzTail */ - (2 * wasm.ptrSizeof) + (sqlByteLen + 1/* SQL + NUL */) + (2 * wasm.ptr.size) + (sqlByteLen + 1/* SQL + NUL */) ); - const pzTail = ppStmt + wasm.ptrSizeof /* final arg to sqlite3_prepare_v2() */; - let pSql = pzTail + wasm.ptrSizeof; - const pSqlEnd = pSql + sqlByteLen; + const pzTail = wasm.ptr.add(ppStmt, wasm.ptr.size) /* final arg to sqlite3_prepare_v2() */; + let pSql = wasm.ptr.add(pzTail, wasm.ptr.size); + const pSqlEnd = wasm.ptr.add(pSql, sqlByteLen); if(isTA) wasm.heap8().set(arg.sql, pSql); else wasm.jstrcpy(arg.sql, wasm.heap8(), pSql, sqlByteLen, false); - wasm.poke(pSql + sqlByteLen, 0/*NUL terminator*/); - while(pSql && wasm.peek(pSql, 'i8') + wasm.poke8(wasm.ptr.add(pSql, sqlByteLen), 0/*NUL terminator*/); + while(pSql && wasm.peek8(pSql) /* Maintenance reminder:^^^ _must_ be 'i8' or else we will very likely cause an endless loop. What that's doing is checking for a terminating NUL byte. If we @@ -12696,8 +13826,9 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ )); const pStmt = wasm.peekPtr(ppStmt); pSql = wasm.peekPtr(pzTail); - sqlByteLen = pSqlEnd - pSql; + sqlByteLen = Number(wasm.ptr.add(pSqlEnd,-pSql)); if(!pStmt) continue; + //sqlite3.config.debug("exec() pSql =",capi.sqlite3_sql(pStmt)); if(saveSql) saveSql.push(capi.sqlite3_sql(pStmt).trim()); stmt = new Stmt(this, pStmt, BindTypes); if(bind && stmt.parameterCount){ @@ -12721,18 +13852,18 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ const cbArgCache = Object.create(null) /* 2nd arg for arg.cbArg, used by (at least) row-to-object converter */; - for(; stmt.step(); stmt._lockedByExec = false){ + for( ; stmt.step(); __execLock.delete(stmt) ){ if(0===gotColNames++){ stmt.getColumnNames(cbArgCache.columnNames = (opt.columnNames || [])); } - stmt._lockedByExec = true; + __execLock.add(stmt); const row = arg.cbArg(stmt,cbArgCache); if(resultRows) resultRows.push(row); if(callback && false === callback.call(opt, row, stmt)){ break; } } - stmt._lockedByExec = false; + __execLock.delete(stmt); } if(0===gotColNames){ /* opt.columnNames was provided but we visited no result rows */ @@ -12745,6 +13876,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /* In order to trigger an exception in the INSERT...RETURNING locking scenario: https://sqlite.org/forum/forumpost/36f7a2e7494897df + [tag:insert-returning-reset] */).finalize(); stmt = null; }/*prepare() loop*/ @@ -12752,15 +13884,16 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ sqlite3.config.warn("DB.exec() is propagating exception",opt,e); throw e; }*/finally{ - wasm.scopedAllocPop(stack); if(stmt){ - delete stmt._lockedByExec; + __execLock.delete(stmt); stmt.finalize(); } + wasm.scopedAllocPop(stack); } return arg.returnVal(); }/*exec()*/, + /** Creates a new UDF (User-Defined Function) which is accessible via SQL code. This function may be called in any of the @@ -12905,9 +14038,9 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ toss3("xValue must be provided if xInverse is."); } const pApp = opt.pApp; - if(undefined!==pApp && - null!==pApp && - (('number'!==typeof pApp) || !util.isInt32(pApp))){ + if( undefined!==pApp + && null!==pApp + && !wasm.isPtr(pApp) ){ toss3("Invalid value for pApp property. Must be a legal WASM pointer value."); } const xDestroy = opt.xDestroy || 0; @@ -12973,8 +14106,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ selectValues: function(sql,bind,asType){ const stmt = this.prepare(sql), rc = []; try { + affirmColIndex(stmt, 0); stmt.bind(bind); - while(stmt.step()) rc.push(stmt.get(0,asType)); + while(stmt.step()) rc.push( + __stmtGetColumn(stmt, 0, asType) + ); stmt.reset(/*for INSERT...RETURNING locking case*/); }finally{ stmt.finalize(); @@ -13048,23 +14184,23 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /** Starts a transaction, calls the given callback, and then either - rolls back or commits the savepoint, depending on whether the + rolls back or commits the transaction, depending on whether the callback throws. The callback is passed this db object as its only argument. On success, returns the result of the callback. Throws on error. - Note that transactions may not be nested, so this will throw if - it is called recursively. For nested transactions, use the + Transactions may not be nested, so this will throw if it is + called recursively. For nested transactions, use the savepoint() method or manually manage SAVEPOINTs using exec(). If called with 2 arguments, the first must be a keyword which is legal immediately after a BEGIN statement, e.g. one of - "DEFERRED", "IMMEDIATE", or "EXCLUSIVE". Though the exact list + "DEFERRED", "IMMEDIATE", or "EXCLUSIVE", though the exact list of supported keywords is not hard-coded here, in order to be future-compatible, if the argument does not look like a single keyword then an exception is triggered with a description of the problem. - */ + */ transaction: function(/* [beginQualifier,] */callback){ let opener = 'BEGIN'; if(arguments.length>1){ @@ -13111,9 +14247,63 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ checkRc: function(resultCode){ return checkSqlite3Rc(this, resultCode); - } + }, }/*DB.prototype*/; + /** + Returns a new oo1.DB instance which wraps the given (sqlite3*) + WASM pointer, optionally with or without taking over ownership of + that pointer. + + The first argument must be either a non-NULL (sqlite3*) WASM + pointer. + + The second argument, defaulting to false, specifies ownership of + the first argument. If it is truthy, the returned object will + pass that pointer to sqlite3_close() when its close() method is + called, otherwise it will not. + + Throws if pDb is not a non-0 WASM pointer. + + The caller MUST GUARANTEE that the passed-in handle will outlive + the returned object, i.e. that it will not be closed. If it is closed, + this object will hold a stale pointer and results are undefined. + + Aside from its lifetime, the proxy is to be treated as any other + DB instance, including the requirement of calling close() on + it. close() will free up internal resources owned by the proxy + and disassociate the proxy from that handle but will not + actually close the proxied db handle unless this function is + passed a thruthy second argument. + + To stress: + + - DO NOT call sqlite3_close() (or similar) on the being-proxied + pointer while a proxy is active. + + - ALWAYS eventually call close() on the returned object. If the + proxy does not own the underlying handle then its MUST be + closed BEFORE the being-proxied handle is closed. + + Design notes: + + - wrapHandle() "could" accept a DB object instance as its first + argument and proxy thatDb.pointer but there is currently no use + case where doing so would be useful, so it does not allow + that. That restriction may be lifted in a future version. + */ + DB.wrapHandle = function(pDb, takeOwnership=false){ + if( !pDb || !wasm.isPtr(pDb) ){ + throw new sqlite3.SQLite3Error(capi.SQLITE_MISUSE, + "Argument must be a WASM sqlite3 pointer"); + } + return new DB({ + /* This ctor call style is very specifically internal-use-only. + It is not documented and may change at any time. */ + "sqlite3*": pDb, + "sqlite3*:takeOwnership": !!takeOwnership + }); + }; /** Throws if the given Stmt has been finalized, else stmt is returned. */ @@ -13135,8 +14325,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ case BindTypes.string: return t; case BindTypes.bigint: - if(wasm.bigIntEnabled) return t; - /* else fall through */ + return wasm.bigIntEnabled ? t : undefined; default: return util.isBindableTypedArray(v) ? BindTypes.blob : undefined; } @@ -13155,23 +14344,45 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ If key is a number and within range of stmt's bound parameter count, key is returned. - If key is not a number then it is checked against named - parameters. If a match is found, its index is returned. + If key is not a number then it must be a JS string (not a WASM + string) and it is checked against named parameters. If a match is + found, its index is returned. Else it throws. */ const affirmParamIndex = function(stmt,key){ const n = ('number'===typeof key) ? key : capi.sqlite3_bind_parameter_index(stmt.pointer, key); - if(0===n || !util.isInt32(n)){ - toss3("Invalid bind() parameter name: "+key); - } - else if(n<1 || n>stmt.parameterCount) toss3("Bind index",key,"is out of range."); + if( 0===n || !util.isInt32(n) ) toss3("Invalid bind() parameter name: "+key); + else if( n<1 || n>stmt.parameterCount ) toss3("Bind index",key,"is out of range."); return n; }; /** - If stmt._lockedByExec is truthy, this throws an exception + Each Stmt object which is "locked" by DB.exec() gets an entry + here to note that "lock". + + The reason this is in place is because exec({callback:...})'s + callback gets access to the Stmt objects created internally by + exec() but it must not use certain Stmt APIs. + */ + const __execLock = new Set(); + /** + This is a Stmt.get() counterpart of __execLock. Each time + Stmt.step() returns true, the statement is added to this set, + indicating that Stmt.get() is legal. Stmt APIs which invalidate + that status remove the Stmt object from this set, which will + cause Stmt.get() to throw with a descriptive error message + instead of a more generic "API misuse" if we were to allow that + call to reach the C API. + */ + const __stmtMayGet = new Set(); + + /** + Stmt APIs which are prohibited on locked objects must call + affirmNotLockedByExec() before doing any work. + + If __execLock.has(stmt) is truthy, this throws an exception complaining that the 2nd argument (an operation name, e.g. "bind()") is not legal while the statement is "locked". Locking happens before an exec()-like callback is passed a @@ -13179,7 +14390,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ finalize the statement. If it does not throw, it returns stmt. */ const affirmNotLockedByExec = function(stmt,currentOpName){ - if(stmt._lockedByExec){ + if(__execLock.has(stmt)){ toss3("Operation is illegal when statement is locked:",currentOpName); } return stmt; @@ -13254,7 +14465,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ "that it be a string, Uint8Array, Int8Array, or ArrayBuffer."); } const pBlob = wasm.alloc(val.byteLength || 1); - wasm.heap8().set(val.byteLength ? val : [0], pBlob) + wasm.heap8().set(val.byteLength ? val : [0], Number(pBlob)) rc = capi.sqlite3_bind_blob(stmt.pointer, ndx, pBlob, val.byteLength, capi.SQLITE_WASM_DEALLOC); break; @@ -13264,7 +14475,6 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ toss3("Unsupported bind() argument type: "+(typeof val)); } if(rc) DB.checkRc(stmt.db.pointer, rc); - stmt._mayGet = false; return stmt; }; @@ -13280,16 +14490,23 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ This method always throws if called when it is illegal to do so. Namely, when triggered via a per-row callback handler of a DB.exec() call. + + If Stmt does not own its underlying (sqlite3_stmt*) (see + Stmt.wrapHandle()) then this function will not pass it to + sqlite3_finalize(). */ finalize: function(){ - if(this.pointer){ + const ptr = this.pointer; + if(ptr){ affirmNotLockedByExec(this,'finalize()'); - const rc = capi.sqlite3_finalize(this.pointer); - delete __stmtMap.get(this.db)[this.pointer]; + const rc = (__doesNotOwnHandle.delete(this) + ? 0 + : capi.sqlite3_finalize(ptr)); + delete __stmtMap.get(this.db)[ptr]; __ptrMap.delete(this); - delete this._mayGet; + __execLock.delete(this); + __stmtMayGet.delete(this); delete this.parameterCount; - delete this._lockedByExec; delete this.db; return rc; } @@ -13303,7 +14520,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ clearBindings: function(){ affirmNotLockedByExec(affirmStmtOpen(this), 'clearBindings()') capi.sqlite3_clear_bindings(this.pointer); - this._mayGet = false; + __stmtMayGet.delete(this); return this; }, /** @@ -13317,6 +14534,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ also called, otherwise any existing bindings, along with any memory allocated for them, are retained. + Clients must not use capi.sqlite3_reset() with this object + because this method does book-keeping specific to this class, + e.g. the pieces which ensure that the column-fetching methods + throw when called without a corresponding step(). + In versions 3.42.0 and earlier, this function did not throw if sqlite3_reset() returns non-0, but it was discovered that throwing (or significant extra client-side code) is necessary @@ -13329,10 +14551,36 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ affirmNotLockedByExec(this,'reset()'); if(alsoClearBinds) this.clearBindings(); const rc = capi.sqlite3_reset(affirmStmtOpen(this).pointer); - this._mayGet = false; + __stmtMayGet.delete(this); checkSqlite3Rc(this.db, rc); return this; }, + + /** + Works like reset() except that it returns the underlying + C-level result code instead of throwing if that code represents + an error. + + Clients must not use capi.sqlite3_reset() for this purpose + because this method (like reset()) does book-keeping specific + to this class. + + Throws if an exec() is underway. + + The use case this addresses is when a step() fails due to, + e.g., a locking error: a following reset() will report that + locking error by throwing and that's sometimes inconvenient. + + Added in 3.54. + */ + resetNoThrow: function(alsoClearBinds){ + affirmNotLockedByExec(this,'reset()'); + if(alsoClearBinds) this.clearBindings(); + const rc = capi.sqlite3_reset(affirmStmtOpen(this).pointer); + __stmtMayGet.delete(this); + return rc; + }, + /** Binds one or more values to its bindable parameters. It accepts 1 or 2 arguments: @@ -13416,7 +14664,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ }else if(!this.parameterCount){ toss3("This statement has no bindable parameters."); } - this._mayGet = false; + __stmtMayGet.delete(this); if(null===arg){ /* bind NULL */ return bindOne(this, ndx, BindTypes.null, arg); @@ -13481,14 +14729,18 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ affirmNotLockedByExec(this, 'step()'); const rc = capi.sqlite3_step(affirmStmtOpen(this).pointer); switch(rc){ - case capi.SQLITE_DONE: return this._mayGet = false; - case capi.SQLITE_ROW: return this._mayGet = true; - default: - this._mayGet = false; - sqlite3.config.warn("sqlite3_step() rc=",rc, - capi.sqlite3_js_rc_str(rc), - "SQL =", capi.sqlite3_sql(this.pointer)); - DB.checkRc(this.db.pointer, rc); + case capi.SQLITE_DONE: + __stmtMayGet.delete(this); + return false; + case capi.SQLITE_ROW: + __stmtMayGet.add(this); + return true; + default: + __stmtMayGet.delete(this); + sqlite3.config.warn("sqlite3_step() rc=",rc, + capi.sqlite3_js_rc_str(rc), + "SQL =", capi.sqlite3_sql(this.pointer)); + DB.checkRc(this.db.pointer, rc); } }, /** @@ -13546,14 +14798,16 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ an exception is thrown. By default it will determine the data type of the result - automatically. If passed a second argument, it must be one - of the enumeration values for sqlite3 types, which are - defined as members of the sqlite3 module: SQLITE_INTEGER, - SQLITE_FLOAT, SQLITE_TEXT, SQLITE_BLOB. Any other value, - except for undefined, will trigger an exception. Passing - undefined is the same as not passing a value. It is legal - to, e.g., fetch an integer value as a string, in which case - sqlite3 will convert the value to a string. + automatically. If passed a second argument, it must be one of + the enumeration values for sqlite3 types, which are defined as + members of the sqlite3.capi namespace: SQLITE_INTEGER, + SQLITE_FLOAT, SQLITE_TEXT, SQLITE_BLOB. Any other value, except + for undefined, will trigger an exception. Passing undefined is + the same as not passing a value. It is legal to, e.g., fetch an + integer value as a string, in which case sqlite3 will convert + the value to a string. + + Blobs are returned as Uint8Array instances. If ndx is an array, this function behaves a differently: it assigns the indexes of the array, from 0 to the number of @@ -13565,7 +14819,27 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ the values of their corresponding result columns and returns that object. - Blobs are returned as Uint8Array instances. + Performance note: this class does not cache its column names + because a reprepare may change them and we have(?) no(?) way of + hooking into that to invalidate the cache. A side effect of + that is that this function, when ndx is an object, has to copy + those names from the WASM side on each call. When fetching many + objects, DB.exec() can do so more efficiently by caching those + names for the duration of the query. In large result sets the + runtime difference is human-perceivable. + + Behavior change notice: prior to 3.54, the asType argument was + ignored when ndx is an array or object, the justification being + that we're generally fetching rows of mixed data types. As of + 3.54, it still behaves that way when passed the undefined value + resp. is not passed a value, but will coerce each column to the + request type of it is not the undefined value. It is not + believed that this change adversely affects any existing + client-level code because this argument was ignored and + applications passing a non-undefined value were not necessarily + getting back what they had specified (or did so only because + all of the data was of that type, in which case the new + behavior is identical for those queries). Potential TODO: add type ID SQLITE_JSON, which fetches the result as a string and passes it (if it's not null) to @@ -13573,77 +14847,29 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ getJSON() can be used for that. */ get: function(ndx,asType){ - if(!affirmStmtOpen(this)._mayGet){ + if(!__stmtMayGet.has(affirmStmtOpen(this))){ toss3("Stmt.step() has not (recently) returned true."); } if(Array.isArray(ndx)){ let i = 0; const n = this.columnCount; while(i=Number.MIN_SAFE_INTEGER && rc<=Number.MAX_SAFE_INTEGER){ - /* Coerce "normal" number ranges to normal number values, - and only return BigInt-type values for numbers out of this - range. */ - return Number(rc).valueOf(); - } - return rc; - }else{ - const rc = capi.sqlite3_column_double(this.pointer, ndx); - if(rc>Number.MAX_SAFE_INTEGER || rctoss3("The columnCount property is read-only.") }); + Object.defineProperty(Stmt.prototype, 'parameterCount', { + enumerable: false, + get: function(){return capi.sqlite3_bind_parameter_count(this.pointer)}, + set: ()=>toss3("The parameterCount property is read-only.") + }); + + /** + The Stmt counterpart of oo1.DB.wrapHandle(), this creates a Stmt + instance which wraps a WASM (sqlite3_stmt*) in the oo1 API, + optionally with or without taking over ownership of that pointer. + + The first argument must be an oo1.DB instance[^1]. + + The second argument must be a valid WASM (sqlite3_stmt*), as + produced by sqlite3_prepare_v2() and sqlite3_prepare_v3(). + + The third argument, defaulting to false, specifies whether the + returned Stmt object takes over ownership of the underlying + (sqlite3_stmt*). If true, the returned object's finalize() method + will finalize that handle, else it will not. If it is false, + ownership of pStmt is unchanged and pStmt MUST outlive the + returned object or results are undefined. + + This function throws if the arguments are invalid. On success it + returns a new Stmt object which wraps the given statement + pointer. + + Like all Stmt objects, the finalize() method must eventually be + called on the returned object to free up internal resources, + regardless of whether this function's third argument is true or + not. + + [^1]: The first argument cannot be a (sqlite3*) because the + resulting Stmt object requires a parent DB object. It is not yet + determined whether it would be of general benefit to refactor the + DB/Stmt pair internals to communicate in terms of the underlying + (sqlite3*) rather than a DB object. If so, we could laxen the + first argument's requirement and allow an (sqlite3*). Because + DB.wrapHandle() enables multiple DB objects to proxy the same + (sqlite3*), we cannot unambiguously translate the first arugment + from (sqlite3*) to DB instances for us with this function's first + argument. + */ + Stmt.wrapHandle = function(oo1db, pStmt, takeOwnership=false){ + let ctor = Stmt; + if( !(oo1db instanceof DB) || !oo1db.pointer ){ + throw new sqlite3.SQLite3Error(sqlite3.SQLITE_MISUSE, + "First argument must be an opened "+ + "sqlite3.oo1.DB instance"); + } + if( !pStmt || !wasm.isPtr(pStmt) ){ + throw new sqlite3.SQLite3Error(sqlite3.SQLITE_MISUSE, + "Second argument must be a WASM "+ + "sqlite3_stmt pointer"); + } + return new Stmt(oo1db, pStmt, BindTypes, !!takeOwnership); + } + /** The OO API's public namespace. */ sqlite3.oo1 = { DB, Stmt }/*oo1 object*/; - if(util.isUIThread()){ - /** - Functionally equivalent to DB(storageName,'c','kvvfs') except - that it throws if the given storage name is not one of 'local' - or 'session'. - - As of version 3.46, the argument may optionally be an options - object in the form: - - { - filename: 'session'|'local', - ... etc. (all options supported by the DB ctor) - } - - noting that the 'vfs' option supported by main DB - constructor is ignored here: the vfs is always 'kvvfs'. - */ - sqlite3.oo1.JsStorageDb = function(storageName='session'){ - const opt = dbCtorHelper.normalizeArgs(...arguments); - storageName = opt.filename; - if('session'!==storageName && 'local'!==storageName){ - toss3("JsStorageDb db name must be one of 'session' or 'local'."); - } - opt.vfs = 'kvvfs'; - dbCtorHelper.call(this, opt); - }; - const jdb = sqlite3.oo1.JsStorageDb; - jdb.prototype = Object.create(DB.prototype); - /** Equivalent to sqlite3_js_kvvfs_clear(). */ - jdb.clearStorage = capi.sqlite3_js_kvvfs_clear; - /** - Clears this database instance's storage or throws if this - instance has been closed. Returns the number of - database blocks which were cleaned up. - */ - jdb.prototype.clearStorage = function(){ - return jdb.clearStorage(affirmDbOpen(this).filename); - }; - /** Equivalent to sqlite3_js_kvvfs_size(). */ - jdb.storageSize = capi.sqlite3_js_kvvfs_size; - /** - Returns the _approximate_ number of bytes this database takes - up in its storage or throws if this instance has been closed. - */ - jdb.prototype.storageSize = function(){ - return jdb.storageSize(affirmDbOpen(this).filename); - }; - }/*main-window-only bits*/ - }); -/* END FILE: api/sqlite3-api-oo1.c-pp.js */ -/* BEGIN FILE: api/sqlite3-api-worker1.c-pp.js */ /** 2022-07-22 @@ -14107,11 +15340,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ The arguments are in the same form accepted by oo1.DB.exec(), with the exceptions noted below. - If the `countChanges` arguments property (added in version 3.43) is - truthy then the `result` property contained by the returned object - will have a `changeCount` property which holds the number of changes - made by the provided SQL. Because the SQL may contain an arbitrary - number of statements, the `changeCount` is calculated by calling + If `args.countChanges` (added in version 3.43) is truthy then the + `result` property contained by the returned object will have a + `changeCount` property which holds the number of changes made by the + provided SQL. Because the SQL may contain an arbitrary number of + statements, the `changeCount` is calculated by calling `sqlite3_total_changes()` before and after the SQL is evaluated. If the value of `countChanges` is 64 then the `changeCount` property will be returned as a 64-bit integer in the form of a BigInt (noting @@ -14120,6 +15353,15 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ calling `sqlite3_total_changes64()` before and after the SQL is evaluated. + If the `args.lastInsertRowId` (added in version 3.50.0) is truthy + then the `result` property contained by the returned object will + have a `lastInsertRowId` will hold a BigInt-type value corresponding + to the result of sqlite3_last_insert_rowid(). This value is only + fetched once, after the SQL is run, regardless of how many + statements the SQL contains. This API has no idea whether the SQL + contains any INSERTs, so it is up to the client to apply/rely on + this property only when it makes sense to do so. + A function-type args.callback property cannot cross the window/Worker boundary, so is not useful here. If args.callback is a string then it is assumed to be a @@ -14204,10 +15446,19 @@ sqlite3.initWorker1API = function(){ const getDbId = function(db){ let id = wState.idMap.get(db); if(id) return id; - id = 'db#'+(++wState.idSeq)+'@'+db.pointer; + id = 'db#'+(++wState.idSeq)+':'+ + Math.floor(Math.random() * 100000000)+':'+ + Math.floor(Math.random() * 100000000); /** ^^^ can't simply use db.pointer b/c closing/opening may re-use the same address, which could map pending messages to a wrong - instance. */ + instance. + + 2025-07: https://github.com/sqlite/sqlite-wasm/issues/113 + demonstrates that two Worker1s can end up with the same IDs, + despite using different instances of the library, so we need + to add some randomness to the IDs instead of relying on the + pointer addresses. + */ wState.idMap.set(db, id); return id; }; @@ -14370,6 +15621,12 @@ sqlite3.initWorker1API = function(){ if(undefined !== changeCount){ rc.changeCount = db.changes(true,64===rc.countChanges) - changeCount; } + const lastInsertRowId = !!rc.lastInsertRowId + ? sqlite3.capi.sqlite3_last_insert_rowid(db) + : undefined; + if( undefined!==lastInsertRowId ){ + rc.lastInsertRowId = lastInsertRowId; + } if(rc.callback instanceof Function){ rc.callback = theCallback; /* Post a sentinel message to tell the client that the end @@ -14479,8 +15736,6 @@ sqlite3.initWorker1API = function(){ globalThis.postMessage({type:'sqlite3-api',result:'worker1-ready'}); }.bind({sqlite3}); }); -/* END FILE: api/sqlite3-api-worker1.c-pp.js */ -/* BEGIN FILE: api/sqlite3-vfs-helper.c-pp.js */ /* ** 2022-11-30 ** @@ -14535,16 +15790,17 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ "vfs", each of which is itself an object with following properties: - `struct`: an sqlite3.StructBinder.StructType-type struct. This - must be a populated (except for the methods) object of type + must be a populated object (except for the methods) of type sqlite3_io_methods (for the "io" entry) or sqlite3_vfs (for the "vfs" entry). - `methods`: an object mapping sqlite3_io_methods method names (e.g. 'xClose') to JS implementations of those methods. The JS implementations must be call-compatible with their native - counterparts. + counterparts. That is: they must accept and return WASM data + types. - For each of those object, this function passes its (`struct`, + For each of those objects, this function passes its (`struct`, `methods`, (optional) `applyArgcCheck`) properties to installMethods(). @@ -14584,8 +15840,6 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ return this; }; }/*sqlite3ApiBootstrap.initializers.push()*/); -/* END FILE: api/sqlite3-vfs-helper.c-pp.js */ -/* BEGIN FILE: api/sqlite3-vtab-helper.c-pp.js */ /* ** 2022-11-30 ** @@ -14622,7 +15876,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ sii.prototype.nthConstraint = function(n, asPtr=false){ if(n<0 || n>=this.$nConstraint) return false; - const ptr = this.$aConstraint + ( + const ptr = wasm.ptr.add( + this.$aConstraint, sii.sqlite3_index_constraint.structInfo.sizeof * n ); return asPtr ? ptr : new sii.sqlite3_index_constraint(ptr); @@ -14636,7 +15891,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ sii.prototype.nthConstraintUsage = function(n, asPtr=false){ if(n<0 || n>=this.$nConstraint) return false; - const ptr = this.$aConstraintUsage + ( + const ptr = wasm.ptr.add( + this.$aConstraintUsage, sii.sqlite3_index_constraint_usage.structInfo.sizeof * n ); return asPtr ? ptr : new sii.sqlite3_index_constraint_usage(ptr); @@ -14652,7 +15908,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ sii.prototype.nthOrderBy = function(n, asPtr=false){ if(n<0 || n>=this.$nOrderBy) return false; - const ptr = this.$aOrderBy + ( + const ptr = wasm.ptr.add( + this.$aOrderBy, sii.sqlite3_index_orderby.structInfo.sizeof * n ); return asPtr ? ptr : new sii.sqlite3_index_orderby(ptr); @@ -14660,8 +15917,23 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /** Internal factory function for xVtab and xCursor impls. + + methodName is the JS-string name of the wrapper. StructType must + be a jaccwabyt StructType constructor. */ const __xWrapFactory = function(methodName,StructType){ + /** + If called with no arguments: creates a new StructType, + records its pointer-to-object mapping, and returns + it. + + If called with arguments, ptr must (A) be a StructType object + or (B) a WASM point (which is assumed to be a native pointer + for a StructType instance). For (A), it behaves like the + no-args case and returns its first argument. For B then it + fetches the associated StructType object and returns it, + unmapping that object if removeMapping is true. + */ return function(ptr,removeMapping=false){ if(0===arguments.length) ptr = new StructType; if(ptr instanceof StructType){ @@ -14725,11 +15997,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ sqlite3_vtab: to be called from sqlite3_module methods which take a (sqlite3_vtab*) pointer _except_ for - xDestroy()/xDisconnect(), in which case unget() or dispose(). + xDestroy()/xDisconnect(), which should use unget() or dispose(). sqlite3_vtab_cursor: to be called from any sqlite3_module methods which take a `sqlite3_vtab_cursor*` argument except xClose(), - in which case use unget() or dispose(). + which should use unget() or dispose(). Rule to remember: _never_ call dispose() on an instance returned by this function. @@ -14757,10 +16029,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ Works like unget() plus it calls dispose() on the StructType object. */ - dispose: (pCObj)=>{ - const o = __xWrap(pCObj,true); - if(o) o.dispose(); - } + dispose: (pCObj)=>__xWrap(pCObj,true)?.dispose?.() }); }; @@ -14793,7 +16062,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /** Given an sqlite3_module method name and error object, this - function returns sqlite3.capi.SQLITE_NOMEM if (e instanceof + function returns sqlite3.capi.SQLITE_NOMEM if (err instanceof sqlite3.WasmAllocError), else it returns its second argument. Its intended usage is in the methods of a sqlite3_vfs or sqlite3_module: @@ -14834,15 +16103,20 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ else if(err instanceof sqlite3.SQLite3Error) rc = err.resultCode; return rc || capi.SQLITE_ERROR; }; - vtab.xError.errorReporter = 1 ? console.error.bind(console) : false; + /** + Used by vtab.xError to report errors if it is a function. Clients + are free to replace this with their own function, or to a + non-function to disable it. + */ + vtab.xError.errorReporter = 1 ? sqlite3.config.error.bind(sqlite3.config) : false; /** A helper for sqlite3_vtab::xRowid() and xUpdate() implementations. It must be passed the final argument to one of those methods (an output pointer to an int64 row ID) and the value to store at the output pointer's address. Returns the same - as wasm.poke() and will throw if the 1st or 2nd arguments - are invalid for that function. + as wasm.poke() and will throw if the 1st or 2nd arguments are + invalid for that function. Example xRowid impl: @@ -14871,9 +16145,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ are not mapped as-is, but are instead wrapped inside wrappers which translate exceptions into result codes of SQLITE_ERROR or SQLITE_NOMEM, depending on whether the exception is an - sqlite3.WasmAllocError. In the case of the xConnect and xCreate - methods, the exception handler also sets the output error - string to the exception's error string. + sqlite3.WasmAllocError. - OPTIONAL `struct`: a sqlite3.capi.sqlite3_module() instance. If not set, one will be created automatically. If the current @@ -14889,8 +16161,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ If `catchExceptions` is false, it is up to the client to ensure that no exceptions escape the methods, as doing so would move them through the C API, leading to undefined - behavior. (vtab.xError() is intended to assist in reporting - such exceptions.) + behavior. vtab.xError() is intended to assist in reporting + such exceptions. Certain methods may refer to the same implementation. To simplify the definition of such methods: @@ -14918,7 +16190,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ translated to 0 if the function returns a falsy value (e.g. if it does not have an explicit return). If `catchExceptions` is _not_ active, the method implementations must explicitly return integer - values. + values (because this method does not wrap such calls to coerce + returns to integers). Throws on error. On success, returns the sqlite3_module object (`this` or `opt.struct` or a new sqlite3_module instance, @@ -14993,6 +16266,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ if(0===mod.$iVersion){ let v; if('number'===typeof opt.iVersion) v = opt.iVersion; + else if(mod.$xIntegrity) v = 4; else if(mod.$xShadowName) v = 3; else if(mod.$xSavePoint || mod.$xRelease || mod.$xRollbackTo) v = 2; else v = 1; @@ -15013,10 +16287,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ return vtab.setupModule.call(this, opt); }; }/*sqlite3ApiBootstrap.initializers.push()*/); -/* END FILE: api/sqlite3-vtab-helper.c-pp.js */ -/* BEGIN FILE: api/sqlite3-vfs-opfs.c-pp.js */ /* - 2022-09-18 + 2025-11-21 The author disclaims copyright to this source code. In place of a legal notice, here is a blessing: @@ -15027,160 +16299,2555 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ *********************************************************************** - This file holds the synchronous half of an sqlite3_vfs - implementation which proxies, in a synchronous fashion, the - asynchronous Origin-Private FileSystem (OPFS) APIs using a second - Worker, implemented in sqlite3-opfs-async-proxy.js. This file is - intended to be appended to the main sqlite3 JS deliverable somewhere - after sqlite3-api-oo1.js and before sqlite3-api-cleanup.js. + This file houses the "kvvfs" pieces of the SQLite3 JS API. Most of + kvvfs is implemented in src/os_kv.c and exposed/extended for use + here via sqlite3-wasm.c. + + Main project home page: https://sqlite.org + + Documentation home page: https://sqlite.org/wasm */ -'use strict'; -globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ + /** - installOpfsVfs() returns a Promise which, on success, installs an - sqlite3_vfs named "opfs", suitable for use with all sqlite3 APIs - which accept a VFS. It is intended to be called via - sqlite3ApiBootstrap.initializers or an equivalent mechanism. + kvvfs - the Key/Value VFS - is an SQLite3 VFS which delegates + storage of its pages and metadata to a key-value store. + + It was conceived in order to support JS's localStorage and + sessionStorage objects. Its native implementation uses files as + key/value storage (one file per record) but the JS implementation + replaces a few methods so that it can use the aforementioned + objects as storage. + + It uses a bespoke ASCII encoding to store each db page as a + separate record and stores some metadata, like the db's unencoded + size and its journal, as individual records. + + kvvfs is significantly less efficient than a plain in-memory db but + it also, as a side effect of its design, offers a JSON-friendly + interchange format for exporting and importing databases. + + kvvfs is _not_ designed for heavy db loads. It is relatively + malloc()-heavy, having to de/allocate frequently, and it + spends much of its time converting the raw db pages into and out of + an ASCII encoding. + + But it _does_ work and is "performant enough" for db work of the + scale of a db which will fit within sessionStorage or localStorage + (just 2-3mb). + + "Version 2" extends it to support using Storage-like objects as + backing storage, Storage being the JS class which localStorage and + sessionStorage both derive from. This essentially moves the backing + store from whatever localStorage and sessionStorage use to an + in-memory object. + + This effort is primarily a stepping stone towards eliminating, if + it proves possible, the POSIX I/O API dependencies in SQLite's WASM + builds. That is: if this VFS works properly, it can be set as the + default VFS and we can eliminate the "unix" VFS from the JS/WASM + builds (as opposed to server-wise/WASI builds). That still, as of + 2025-11-23, a ways away, but it's the main driver for version 2 of + kvvfs. + + Version 2 remains compatible with version 1 databases and always + writes localStorage/sessionStorage metadata in the v1 format, so + such dbs can be manipulated freely by either version. For transient + storage objects (new in version 2), the format of its record keys + is simpified, requiring less space than v1 keys by eliding + redundant (in this context) info from the keys. + + Another benefit of v2 is its ability to export dbs into a + JSON-friendly (but not human-friendly) format. + + A potential, as-yet-unproven, benefit, would be the ability to plug + arbitrary Storage-compatible objects in so that clients could, + e.g. asynchronously post updates to db pages to some back-end for + backups. +*/ +globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ + if( sqlite3.config.disable?.vfs?.kvvfs ){ + return; + } + 'use strict'; + const capi = sqlite3.capi, + sqlite3_kvvfs_methods = capi.sqlite3_kvvfs_methods, + KVVfsFile = capi.KVVfsFile, + pKvvfs = sqlite3.capi.sqlite3_vfs_find("kvvfs") + + /* These are JS plumbing, not part of the public API */ + delete capi.sqlite3_kvvfs_methods; + delete capi.KVVfsFile; + + if( !pKvvfs ) return /* nothing to do */; + if( 0 ){ + /* This working would be our proverbial holy grail, in that it + would allow us to eliminate the current default VFS, which + relies on POSIX I/O APIs. Eliminating that dependency would get + us one giant step closer to creating wasi-sdk builds. */ + capi.sqlite3_vfs_register(pKvvfs, 1); + } - The installed VFS uses the Origin-Private FileSystem API for - all file storage. On error it is rejected with an exception - explaining the problem. Reasons for rejection include, but are - not limited to: + const util = sqlite3.util, + wasm = sqlite3.wasm, + toss3 = util.toss3, + hop = (o,k)=>Object.prototype.hasOwnProperty.call(o,k); - - The counterpart Worker (see below) could not be loaded. + const kvvfsMethods = new sqlite3_kvvfs_methods( + /* Wraps the static sqlite3_api_methods singleton */ + wasm.exports.sqlite3__wasm_kvvfs_methods() + ); + util.assert( 32<=kvvfsMethods.$nKeySize, "unexpected kvvfsMethods.$nKeySize: "+kvvfsMethods.$nKeySize); - - The environment does not support OPFS. That includes when - this function is called from the main window thread. + /** + Most of the VFS-internal state. + */ + const cache = Object.assign(Object.create(null),{ + /** Regex matching journal file names. */ + rxJournalSuffix: /-journal$/, + /** Frequently-used C-string. */ + zKeyJrnl: wasm.allocCString("jrnl"), + /** Frequently-used C-string. */ + zKeySz: wasm.allocCString("sz"), + /** + The maximum size of a kvvfs record key. It is historically only + 32, a limitation currently retained only because it's convenient to + do so (the underlying code has outgrown the need for the artifically + low limit). - Significant notes and limitations: + We cache this value here because the end of this init code will + dispose of kvvfsMethods, invalidating it. + */ + keySize: kvvfsMethods.$nKeySize, + /** + WASM heap memory buffers to optimize out some frequent + allocations. + */ + buffer: Object.assign(Object.create(null),{ + /** + The size of each buffer in this.pool. + + kvvfsMethods.$nBufferSize is slightly larger than the output + space needed for a kvvfs-encoded 64kb db page in a worse-cast + encoding (128kb). It is not suitable for arbitrary buffer + use, only page de/encoding. + */ + n: kvvfsMethods.$nBufferSize, + /** + Map of buffer ids to wasm.alloc()'d pointers of size + this.n. (Re)used by various internals. + + Buffer ids 0 and 1 are used in the API internals. Other + names are used in higher-level APIs. + + See memBuffer() and memBufferFree(). + */ + pool: Object.create(null) + }) + }); + + /** + Returns a (cached) wasm.alloc()'d buffer of cache.buffer.n size, + throwing on OOM. + + We leak this one-time alloc because we've no better option. + sqlite3_vfs does not have a finalizer, so we've no place to hook + in the cleanup. We "could" extend sqlite3_shutdown() to have a + cleanup list for stuff like this but that function is never + used in JS, so it's hardly worth it. + */ + cache.memBuffer = (id=0)=>cache.buffer.pool[id] ??= wasm.alloc(cache.buffer.n); + + /** Frees the buffer with the given id. */ + cache.memBufferFree = (id)=>{ + const b = cache.buffer.pool[id]; + if( b ){ + wasm.dealloc(b); + delete cache.buffer.pool[id]; + } + }; + + const noop = ()=>{}; + const debug = sqlite3.__isUnderTest + ? (...args)=>sqlite3.config.debug?.("kvvfs:", ...args) + : noop; + const warn = (...args)=>sqlite3.config.warn?.("kvvfs:", ...args); + const error = (...args)=>sqlite3.config.error?.("kvvfs:", ...args); + + /** + Implementation of JS's Storage interface for use as backing store + of the kvvfs. Storage is a native class and its constructor + cannot be legally called from JS, making it impossible to + directly subclass Storage. This class implements (only) the + Storage interface, to make it a drop-in replacement for + localStorage/sessionStorage. (Any behavioral discrepancies are to + be considered bugs.) + + This impl simply proxies a plain, prototype-less Object, suitable + for JSON-ing. + + Design note: Storage has a bit of an odd iteration-related + interface as does not (AFAIK) specify specific behavior regarding + modification during traversal. Because of that, this class does + some seemingly unnecessary things with its #keys member, deleting + and recreating it whenever a property index might be invalidated. + */ + class KVVfsStorage { + #map = Object.create(null); + #keys = null; + #size = 0; + + constructor(){ + this.clear(); + } + + #getKeys(){ + return this.#keys ??= Object.keys(this.#map); + } + + key(n){ + if(n < 0 || n >= this.#size) return null; + return this.#getKeys()[n]; + } + + getItem(k){ + return this.#map[k] ?? null; + } + + setItem(k,v){ + if( !(k in this.#map) ){ + ++this.#size; + this.#keys = null; + } + this.#map[k] = ''+v; + } + + removeItem(k){ + if( k in this.#map ){ + delete this.#map[k]; + --this.#size; + this.#keys = null; + } + } + + clear(){ + this.#map = Object.create(null); + this.#keys = null; + this.#size = 0; + } + + get length() { + return this.#size; + } + }/*KVVfsStorage*/; + + /** True if v is the name of one of the special persistant Storage + objects. */ + const kvvfsIsPersistentName = (v)=>'local'===v || 'session'===v; + + /** + Keys in kvvfs have a prefix of "kvvfs-NAME-", where NAME is the + db name. This key is redundant in JS but it's how kvvfs works (it + saves each key to a separate file, so needs a distinct namespace + per data source name). We retain this prefix in 'local' and + 'session' storage for backwards compatibility and so that they + can co-exist with client data in their storage, but we elide them + from "v2" storage, where they're superfluous. + */ + const kvvfsKeyPrefix = (v)=>kvvfsIsPersistentName(v) ? 'kvvfs-'+v+'-' : ''; + + /** + Throws if storage name n (JS string) is not valid for use as a + storage name. Much of this goes back to kvvfs having a fixed + buffer size for its keys, and the storage name needing to be + encoded in the keys for local/session storage. + + The second argument must only be true when called from xOpen() - + it makes names with a "-journal" suffix legal. + */ + const validateStorageName = function(n,mayBeJournal=false){ + if( kvvfsIsPersistentName(n) ) return; + const len = (new Blob([n])).size/*byte length*/; + if( !len ) toss3(capi.SQLITE_MISUSE, "Empty name is not permitted."); + let maxLen = cache.keySize - 1; + if( cache.rxJournalSuffix.test(n) ){ + if( !mayBeJournal ){ + toss3(capi.SQLITE_MISUSE, + "Storage names may not have a '-journal' suffix."); + } + }else if( ['-wal','-shm'].filter(v=>n.endsWith(v)).length ){ + toss3(capi.SQLITE_MISUSE, + "Storage names may not have a -wal or -shm suffix."); + }else{ + maxLen -= 8 /* so we have space for a matching "-journal" suffix */; + } + if( len > maxLen ){ + toss3(capi.SQLITE_RANGE, "Storage name is too long. Limit =", maxLen); + } + let i; + for( i = 0; i < len; ++i ){ + const ch = n.codePointAt(i); + if( ch<32 ){ + toss3(capi.SQLITE_RANGE, + "Illegal character ("+ch+"d) in storage name:",n); + } + } + }; + + /** + Create a new instance of the objects which go into + cache.storagePool, with a refcount of 1. If passed a Storage-like + object as its second argument, it is used for the storage, + otherwise it creates a new KVVfsStorage object. + */ + const newStorageObj = (name,storage=undefined)=>Object.assign(Object.create(null),{ + /** + JS string value of this KVVfsFile::$zClass. i.e. the storage's + name. + */ + jzClass: name, + /** + Refcount. This keeps dbs and journals pointing to the same + storage for the life of both and enables kvvfs to behave more + like a conventional filesystem (a stepping stone towards + downstream API goals). Managed by xOpen() and xClose(). + */ + refc: 1, + /** + If true, this storage will be removed by xClose() or + sqlite3_js_kvvfs_unlink() when refc reaches 0. The others will + persist when refc==0, to give the illusion of real back-end + storage. Managed by xOpen() and sqlite3_js_kvvfs_reserve(). By + default this is false but the delete-on-close=1 flag can be + used to set this to true. + */ + deleteAtRefc0: false, + /** + The backing store. Must implement the Storage interface. + */ + storage: storage || new KVVfsStorage, + /** + The storage prefix used for kvvfs keys. It is + "kvvfs-STORAGENAME-" for local/session storage and an empty + string for other storage. local/session storage must use the + long form (A) for backwards compatibility and (B) so that kvvfs + can coexist with non-db client data in those backends. Neither + (A) nor (B) are concerns for KVVfsStorage objects. + + This prefix mirrors the one generated by os_kv.c's + kvrecordMakeKey() and must stay in sync with that one. + */ + keyPrefix: kvvfsKeyPrefix(name), + /** + KVVfsFile instances currently using this storage. Managed by + xOpen() and xClose(). + */ + files: [], + /** + If set, it's an array of objects with various event + callbacks. See sqlite3_js_kvvfs_listen(). When there are no + listeners, this member is set to undefined (instead of an empty + array) to allow us to more easily optimize out calls to + notifyListeners() for the common case of no listeners. + */ + listeners: undefined + }); + + /** + Public interface for kvvfs v2. The capi.sqlite3_js_kvvfs_...() + routines remain in place for v1. Some members of this class proxy + to those functions but use different default argument values in + some cases. + */ + const kvvfs = sqlite3.kvvfs = Object.create(null); + if( sqlite3.__isUnderTest ){ + /* For inspection via the dev tools console. */ + kvvfs.log = Object.assign(Object.create(null),{ + xOpen: false, + xClose: false, + xWrite: false, + xRead: false, + xSync: false, + xAccess: false, + xFileControl: false, + xRcrdRead: false, + xRcrdWrite: false, + xRcrdDelete: false, + }); + } + + /** + Deletes the cache.storagePool entries for store (a + cache.storagePool entry) and its db/journal counterpart. + */ + const deleteStorage = function(store){ + const other = cache.rxJournalSuffix.test(store.jzClass) + ? store.jzClass.replace(cache.rxJournalSuffix,'') + : store.jzClass+'-journal'; + kvvfs?.log?.xClose + && debug("cleaning up storage handles [", store.jzClass, other,"]",store); + delete cache.storagePool[store.jzClass]; + delete cache.storagePool[other]; + if( !sqlite3.__isUnderTest ){ + /* In test runs, leave these for inspection. If we delete them here, + any prior dumps of them emitted via the console get cleared out + because the console shows live objects instead of call-time + static dumps. */ + delete store.storage; + delete store.refc; + } + }; + + /** + Add both store.jzClass and store.jzClass+"-journal" + to cache.storagePool. + */ + const installStorageAndJournal = (store)=> + cache.storagePool[store.jzClass] = + cache.storagePool[store.jzClass+'-journal'] = store; + + /** + The public name of the current thread's transient storage + object. A storage object with this name gets preinstalled. + */ + const nameOfThisThreadStorage = '.'; + + /** + Map of JS-stringified KVVfsFile::zClass names to + reference-counted Storage objects. These objects are created in + xOpen(). Their refcount is decremented in xClose(), and the + record is destroyed if the refcount reaches 0. We refcount so + that concurrent active xOpen()s on a given name, and within a + given thread, use the same storage object. + */ + cache.storagePool = Object.assign(Object.create(null),{ + /* Start off with mappings for well-known names. */ + [nameOfThisThreadStorage]: newStorageObj(nameOfThisThreadStorage) + }); + + if( globalThis.Storage ){ + /* If available, install local/session storage. */ + if( globalThis.localStorage instanceof globalThis.Storage ){ + cache.storagePool.local = newStorageObj('local', globalThis.localStorage); + } + if( globalThis.sessionStorage instanceof globalThis.Storage ){ + cache.storagePool.session = newStorageObj('session', globalThis.sessionStorage); + } + } + + cache.builtinStorageNames = Object.keys(cache.storagePool); + + const isBuiltinName = (n)=>cache.builtinStorageNames.indexOf(n)>-1; + + /* Add "-journal" twins for each cache.storagePool entry... */ + for(const k of Object.keys(cache.storagePool)){ + /* Journals in kvvfs are are stored as individual records within + their Storage-ish object, named "{storage.keyPrefix}jrnl". We + always map the db and its journal to the same Storage + object. */ + const orig = cache.storagePool[k]; + cache.storagePool[k+'-journal'] = orig; + } + + cache.setError = (e=undefined, dfltErrCode=capi.SQLITE_ERROR)=>{ + if( e ){ + cache.lastError = e; + return (e.resultCode | 0) || dfltErrCode; + } + delete cache.lastError; + return 0; + }; + + cache.popError = ()=>{ + const e = cache.lastError; + delete cache.lastError; + return e; + }; + + /** Exception handler for notifyListeners(). */ + const catchForNotify = (e)=>{ + warn("kvvfs.listener handler threw:",e); + }; + + const kvvfsDecode = wasm.exports.sqlite3__wasm_kvvfs_decode; + const kvvfsEncode = wasm.exports.sqlite3__wasm_kvvfs_encode; + + /** + Listener events and their argument(s) (via the callback(ev) + ev.data member): + + 'open': number of opened handles on this storage. + + 'close': number of opened handles on this storage. + + 'write': key, value + + 'delete': key + + 'sync': true if it's from xSync(), false if it's from + xFileControl(). + + For efficiency's sake, all calls to this function should + be in the form: + + store.listeners && notifyListeners(...); + + Failing to do so will trigger an exceptin in this function (which + will be ignored but may produce a console warning). + */ + const notifyListeners = async function(eventName,store,...args){ + try{ + //cache.rxPageNoSuffix ??= /(\d+)$/; + if( store.keyPrefix && args[0] ){ + args[0] = args[0].replace(store.keyPrefix,''); + } + let u8enc, z0, z1, wcache; + for(const ear of store.listeners){ + const ev = Object.create(null); + ev.storageName = store.jzClass; + ev.type = eventName; + const decodePages = ear.decodePages; + const f = ear.events[eventName]; + if( f ){ + if( !ear.includeJournal && args[0]==='jrnl' ){ + continue; + } + if( 'write'===eventName && ear.decodePages && +args[0]>0 ){ + /* Decode pages to Uint8Array, caching the result in + wcache in case we have more listeners. */ + ev.data = [args[0]]; + if( wcache?.[args[0]] ){ + ev.data[1] = wcache[args[0]]; + continue; + } + u8enc ??= new TextEncoder('utf-8'); + z0 ??= cache.memBuffer(10); + z1 ??= cache.memBuffer(11); + const u = u8enc.encode(args[1]); + const heap = wasm.heap8u(); + heap.set(u, Number(z0)); + heap[wasm.ptr.addn(z0, u.length)] = 0; + const rc = kvvfsDecode(z0, z1, cache.buffer.n); + if( rc>0 ){ + wcache ??= Object.create(null); + wcache[args[0]] + = ev.data[1] + = heap.slice(Number(z1), wasm.ptr.addn(z1,rc)); + }else{ + continue; + } + }else{ + ev.data = args.length + ? ((args.length===1) ? args[0] : args) + : undefined; + } + try{f(ev)?.catch?.(catchForNotify)} + catch(e){ + warn("notifyListeners [",store.jzClass,"]",eventName,e); + } + } + } + }catch(e){ + catchForNotify(e); + } + }/*notifyListeners()*/; + + /** + Returns the storage object mapped to the given string zClass + (C-string pointer or JS string). + */ + const storageForZClass = (zClass)=> + 'string'===typeof zClass + ? cache.storagePool[zClass] + : cache.storagePool[wasm.cstrToJs(zClass)]; + + + const kvvfsMakeKey = wasm.exports.sqlite3__wasm_kvvfsMakeKey; + /** + Returns a C string from kvvfsMakeKey() OR returns zKey. In the + former case the memory is static, so must be copied before a + second call. zKey MUST be a pointer passed to a VFS/file method, + to allow us to avoid an alloc and/or an snprintf(). It requires + C-string arguments for zClass and zKey. zClass may be NULL but + zKey may not. + */ + const zKeyForStorage = (store, zClass, zKey)=>{ + //debug("zKeyForStorage(",store, wasm.cstrToJs(zClass), wasm.cstrToJs(zKey)); + return (zClass && store.keyPrefix) ? kvvfsMakeKey(zClass, zKey) : zKey; + }; + + const jsKeyForStorage = (store,zClass,zKey)=> + wasm.cstrToJs(zKeyForStorage(store, zClass, zKey)); + + const storageGetDbSize = (store)=>+store.storage.getItem(store.keyPrefix + "sz"); + + /** + sqlite3_file pointers => objects, each of which has: + + .file = KVVfsFile instance + + .jzClass = JS-string form of f.$zClass + + .storage = Storage object. It is shared between a db and its + journal. + */ + const pFileHandles = new Map(); + + /** + Map of filename to lock objects with this structure: + + {.lockType: int, .nShared: int} + + Used by xLock(), xUnlock(), and xCheckReservedLock(). Modelled + after the "same-process, same-file, different-db-handle" locking + in os_unix.c. + */ + const mapPathToLocks = new Map(); + + /** + Main xUnlock() impl for kvvfs, also used by xClose(). Expects an + xOpen()-created file handle object and the second argument to + xUnlock(). It returns void. + */ + const unlockFile = function(fh, lockType){ + if(fh.lockType<=lockType) return; + const lk = mapPathToLocks.get(fh.jzClass); + if(fh.lockType>capi.SQLITE_LOCK_SHARED){ + lk.lockType = capi.SQLITE_LOCK_SHARED; + } + if(lockType===capi.SQLITE_LOCK_NONE && 0===--lk.nShared + /* Maintenance reminder: the && ordering is significant */){ + mapPathToLocks.delete(fh.jzClass); + } + fh.lockType = lockType; + }; + + /** + Original WASM functions for methods we partially override. + */ + const originalMethods = { + vfs: Object.create(null), + ioDb: Object.create(null), + ioJrnl: Object.create(null) + }; + + /** Returns the appropriate originalMethods[X] instance for the + given a KVVfsFile instance. */ + const originalIoMethods = (kvvfsFile)=> + originalMethods[kvvfsFile.$isJournal ? 'ioJrnl' : 'ioDb']; + + const pVfs = new capi.sqlite3_vfs(kvvfsMethods.$pVfs); + const pIoDb = new capi.sqlite3_io_methods(kvvfsMethods.$pIoDb); + const pIoJrnl = new capi.sqlite3_io_methods(kvvfsMethods.$pIoJrnl); + const recordHandler = + Object.create(null)/** helper for some vfs + routines. Populated later. */; + const kvvfsInternal = Object.assign(Object.create(null),{ + pFileHandles, + cache, + storageForZClass, + KVVfsStorage, + /** + BUG: changing to a page size other than the default, + then vacuuming, corrupts the db. As a workaround, + until this is resolved, we forcibly disable + (pragma page_size=...) changes. + */ + disablePageSizeChange: true + }); + if( kvvfs.log ){ + // this is a test build + kvvfs.internal = kvvfsInternal; + } + + /** + Implementations for members of the object referred to by + sqlite3__wasm_kvvfs_methods(). We swap out some native + implementations with these so that we can use JS Storage for + their backing store. + */ + const methodOverrides = { + + /** + sqlite3_kvvfs_methods's member methods. These perform the + fetching, setting, and removal of storage keys on behalf of + kvvfs. In the native impl these write each db page to a + separate file. This impl stores each db page as a single + record in a Storage object which is mapped to zClass. + + A db's size is stored in a record named kvvfs[-storagename]-sz + and the journal is stored in kvvfs[-storagename]-jrnl. The + [-storagename] part is a remnant of the native impl (so that + it has unique filenames per db) and is only used for + localStorage and sessionStorage. We elide that part (to save + space) from other storage objects but retain it on those two + to avoid invalidating pre-version-2 session/localStorage dbs. + + The interface docs for these methods are in src/os_kv.c's + kvrecordRead(), kvrecordWrite(), and kvrecordDelete(). + */ + recordHandler: { + xRcrdRead: (zClass, zKey, zBuf, nBuf)=>{ + try{ + const jzClass = wasm.cstrToJs(zClass); + const store = storageForZClass(jzClass); + if( !store ) return -1; + const jXKey = jsKeyForStorage(store, zClass, zKey); + kvvfs?.log?.xRcrdRead && warn("xRcrdRead", jzClass, jXKey, nBuf, store ); + const jV = store.storage.getItem(jXKey); + if(null===jV) return -1; + const nV = jV.length /* We are relying 100% on v being + ** ASCII so that jV.length is equal + ** to the C-string's byte length. */; + if( 0 ){ + debug("xRcrdRead", jXKey, store, jV); + } + if(nBuf<=0) return nV; + else if(1===nBuf){ + wasm.poke(zBuf, 0); + return nV; + }else if( nBuf nV + 1 ){ + nBuf = nV + 1; + } + if( 0 ){ + debug("xRcrdRead", nBuf, zClass, wasm.cstrToJs(zClass), + wasm.cstrToJs(zKey), nV, jV, store); + } + const nCopy = nV{ + try { + const store = storageForZClass(zClass); + const jxKey = jsKeyForStorage(store, zClass, zKey); + const jData = wasm.cstrToJs(zData); + kvvfs?.log?.xRcrdWrite && warn("xRcrdWrite",jxKey, store); + store.storage.setItem(jxKey, jData); + store.listeners && notifyListeners('write', store, jxKey, jData); + return 0; + }catch(e){ + error("kvrecordWrite()",e); + return cache.setError(e, capi.SQLITE_IOERR); + } + }, + + xRcrdDelete: (zClass, zKey)=>{ + try { + const store = storageForZClass(zClass); + const jxKey = jsKeyForStorage(store, zClass, zKey); + kvvfs?.log?.xRcrdDelete && warn("xRcrdDelete",jxKey, store); + store.storage.removeItem(jxKey); + store.listeners && notifyListeners('delete', store, jxKey); + return 0; + }catch(e){ + error("kvrecordDelete()",e); + return cache.setError(e, capi.SQLITE_IOERR); + } + } + }/*recordHandler*/, + + /** + Override certain operations of the underlying sqlite3_vfs and + the two sqlite3_io_methods instances so that we can tie + Storage objects to db names. + */ + vfs:{ + /* sqlite3_kvvfs_methods::pVfs's methods */ + xOpen: function(pProtoVfs,zName,pProtoFile,flags,pOutFlags){ + cache.popError(); + let zToFree /* alloc()'d memory for temp db name */; + try{ + if( !zName ){ + zToFree = wasm.allocCString(""+pProtoFile+"." + +(Math.random() * 100000 | 0)); + zName = zToFree; + } + const jzClass = wasm.cstrToJs(zName); + kvvfs?.log?.xOpen && debug("xOpen",jzClass,"flags =",flags); + validateStorageName(jzClass, true); + if( (flags & (capi.SQLITE_OPEN_MAIN_DB + | capi.SQLITE_OPEN_TEMP_DB + | capi.SQLITE_OPEN_TRANSIENT_DB)) + && cache.rxJournalSuffix.test(jzClass) ){ + toss3(capi.SQLITE_ERROR, + "DB files may not have a '-journal' suffix."); + } + let s = storageForZClass(jzClass); + if( !s && !(flags & capi.SQLITE_OPEN_CREATE) ){ + toss3(capi.SQLITE_ERROR, "Storage not found:", jzClass); + } + const rc = originalMethods.vfs.xOpen(pProtoVfs, zName, pProtoFile, + flags, pOutFlags); + if( rc ) return rc; + let deleteAt0 = !!(capi.SQLITE_OPEN_DELETEONCLOSE & flags); + if(wasm.isPtr(arguments[1]/*original zName*/)){ + if(capi.sqlite3_uri_boolean(zName, "delete-on-close", 0)){ + deleteAt0 = true; + } + } + const f = new KVVfsFile(pProtoFile); + util.assert(f.$zClass, "Missing f.$zClass"); + f.addOnDispose(zToFree); + zToFree = undefined; + //debug("xOpen", jzClass, s); + if( s ){ + ++s.refc; + //no if( true===deleteAt0 ) s.deleteAtRefc0 = true; + s.files.push(f); + wasm.poke32(pOutFlags, flags); + }else{ + wasm.poke32(pOutFlags, flags | capi.SQLITE_OPEN_CREATE); + util.assert( !f.$isJournal, "Opening a journal before its db? "+jzClass ); + /* Map both zName and zName-journal to the same storage. */ + const nm = jzClass.replace(cache.rxJournalSuffix,''); + s = newStorageObj(nm); + installStorageAndJournal(s); + s.files.push(f); + s.deleteAtRefc0 = deleteAt0; + kvvfs?.log?.xOpen + && debug("xOpen installed storage handle [",nm, nm+"-journal","]", s); + } + pFileHandles.set(pProtoFile, Object.assign(Object.create(null),{ + store: s, + file: f, + jzClass, + lockType: 0 + })); + s.listeners && notifyListeners('open', s, s.files.length); + return 0; + }catch(e){ + warn("xOpen:",e); + return cache.setError(e); + }finally{ + zToFree && wasm.dealloc(zToFree); + } + }/*xOpen()*/, + + xDelete: function(pVfs, zName, iSyncFlag){ + cache.popError(); + try{ + const jzName = wasm.cstrToJs(zName); + if( cache.rxJournalSuffix.test(jzName) ){ + recordHandler.xRcrdDelete(zName, cache.zKeyJrnl); + }/* + else: historically not done, but maybe otherwise delete + all db pages from storageForZClass(zName)? + */ + return 0; + }catch(e){ + warn("xDelete",e); + return cache.setError(e); + } + }, + + xAccess: function(pProtoVfs, zPath, flags, pResOut){ + cache.popError(); + try{ + const s = storageForZClass(zPath); + const jzPath = s?.jzClass || wasm.cstrToJs(zPath); + if( kvvfs?.log?.xAccess ){ + debug("xAccess",jzPath,"flags =", + flags,"*pResOut =",wasm.peek32(pResOut), + "store =",s); + } + if( !s ){ + // From the API docs: + /** The xAccess method returns [SQLITE_OK] on success or some + ** non-zero error code if there is an I/O error or if the name of + ** the file given in the second argument is illegal. + */ + // However, returning non-0 from here is fatal, so we don't do that. + try{validateStorageName(jzPath)} + catch(e){ + //warn("xAccess is ignoring name validation failure:",e); + wasm.poke32(pResOut, 0); + return 0; + } + } + if( s ){ + const key = s.keyPrefix+ + (cache.rxJournalSuffix.test(jzPath) ? "jrnl" : "1"); + const res = s.storage.getItem(key) ? 0 : 1; + /* This res value looks completely backwards to me, and + is the opposite of the native kvvfs's impl, but it's + working, whereas reimplementing the native one + faithfully does not. Read the lib-level code of where + this is invoked, my expectation is that we set res to 0 + for not-exists. */ + //warn("access res",jzPath,res); + wasm.poke32(pResOut, res); + }else{ + wasm.poke32(pResOut, 0); + } + return 0; + }catch(e){ + error('xAccess',e); + return cache.setError(e); + } + }, + + xRandomness: function(pVfs, nOut, pOut){ + const heap = wasm.heap8u(); + let i = 0; + const npOut = Number(pOut); + for(; i < nOut; ++i) heap[npOut + i] = (Math.random()*255000) & 0xFF; + return nOut; + }, + + xGetLastError: function(pVfs,nOut,pOut){ + const e = cache.popError(); + debug('xGetLastError',e); + if(e){ + const scope = wasm.scopedAllocPush(); + try{ + const [cMsg, n] = wasm.scopedAllocCString(e.message, true); + wasm.cstrncpy(pOut, cMsg, nOut); + if(n > nOut) wasm.poke8(wasm.ptr.add(pOut,nOut,-1), 0); + debug("set xGetLastError",e.message); + return (e.resultCode | 0) || capi.SQLITE_IOERR; + }catch(e){ + return capi.SQLITE_NOMEM; + }finally{ + wasm.scopedAllocPop(scope); + } + } + return 0; + }, + + /** + This VFS's xSleep() must be a no-op. In this environment, + only db handles within the same thread can ever come into + contention, and that contention cannot be resolved if + one of the handles sleeps in that same thread. + See also: forum:3f0794c5d8 + */ + xSleep: (pVfs,ms)=>0, + + }/*.vfs*/, + + /** + kvvfs has separate sqlite3_api_methods impls for some of the + methods depending on whether it's a db or journal file. Some + of the methods use shared impls but others are specific to + either db or journal files. + */ + ioDb:{ + /* sqlite3_kvvfs_methods::pIoDb's methods */ + xClose: function(pFile){ + cache.popError(); + try{ + const h = pFileHandles.get(pFile); + kvvfs?.log?.xClose && debug("xClose", pFile, h); + if( h ){ + pFileHandles.delete(pFile); + unlockFile(h, capi.SQLITE_LOCK_NONE); + const s = h.store;//storageForZClass(h.jzClass); + s.files = s.files.filter((v)=>v!==h.file); + if( --s.refc<=0 && s.deleteAtRefc0 ){ + deleteStorage(s); + } + originalMethods.ioDb/*same for journals*/.xClose(pFile); + h.file.dispose(); + s.listeners && notifyListeners('close', s, s.files.length); + }else{ + /* Can happen if xOpen fails */ + } + return 0; + }catch(e){ + error("xClose",e); + return cache.setError(e); + } + }, + + xFileControl: function(pFile, opId, pArg){ + cache.popError(); + try{ + const h = pFileHandles.get(pFile); + util.assert(h, "Missing KVVfsFile handle"); + kvvfs?.log?.xFileControl && debug("xFileControl",h,'op =',opId); + if( opId===capi.SQLITE_FCNTL_PRAGMA + && kvvfsInternal.disablePageSizeChange ){ + /* pArg== length-3 (char**) */ + //const argv = wasm.cArgvToJs(3, pArg); // the easy way + const zName = wasm.peekPtr(wasm.ptr.add(pArg, wasm.ptr.size)); + if( "page_size"===wasm.cstrToJs(zName) ){ + kvvfs?.log?.xFileControl + && debug("xFileControl pragma",wasm.cstrToJs(zName)); + const zVal = wasm.peekPtr(wasm.ptr.add(pArg, 2*wasm.ptr.size)); + if( zVal ){ + /* Without this, pragma page_size=N; followed by a + vacuum breaks the db. With this, it continues + working but does not actually change the page + size. */ + kvvfs?.log?.xFileControl + && warn("xFileControl pragma", h, + "NOT setting page size to", wasm.cstrToJs(zVal)); + h.file.$szPage = -1; + return 0/*corrupts: capi.SQLITE_NOTFOUND*/; + }else if( h.file.$szPage>0 ){ + kvvfs?.log?.xFileControl && + warn("xFileControl", h, "getting page size",h.file.$szPage); + wasm.pokePtr(pArg, wasm.allocCString(""+h.file.$szPage) + /* memory now owned by the library */); + return 0;//capi.SQLITE_NOTFOUND; + } + } + } + const rc = originalMethods.ioDb.xFileControl(pFile, opId, pArg); + if( 0==rc && capi.SQLITE_FCNTL_SYNC===opId ){ + h.store.listeners && notifyListeners('sync', h.store, false); + } + return rc; + }catch(e){ + error("xFileControl",e); + return cache.setError(e); + } + }, + + xSync: function(pFile,flags){ + cache.popError(); + try{ + const h = pFileHandles.get(pFile); + kvvfs?.log?.xSync && debug("xSync", h); + util.assert(h, "Missing KVVfsFile handle"); + const rc = originalMethods.ioDb.xSync(pFile, flags); + if( 0==rc && h.store.listeners ) notifyListeners('sync', h.store, true); + return rc; + }catch(e){ + error("xSync",e); + return cache.setError(e); + } + }, + + xLock: function(pFile, iLock){ + cache.popError(); + try{ + const h = pFileHandles.get(pFile); + if( capi.SQLITE_LOCK_NONE!==iLock ){ + /* Tells the impl to re-read its size. */ + originalMethods.ioDb.xLock(pFile, iLock); + } + /** + This impl is based off of the one in the opfs-sahpool VFS + impl which, in turn, is based off of the impl in + os_unix.c. + */ + if(h.lockType>=iLock) return 0; + let lk = mapPathToLocks.get(h.jzClass); + if(!lk){ + lk = Object.assign(Object.create(null),{ + nShared: 0, lockType: capi.SQLITE_LOCK_NONE + }); + mapPathToLocks.set(h.jzClass, lk); + } + if(h.lockType!==lk.lockType + && (lk.lockType>=capi.SQLITE_LOCK_PENDING + || iLock>capi.SQLITE_LOCK_SHARED)){ + return capi.SQLITE_BUSY; + } + if(iLock===capi.SQLITE_LOCK_SHARED){ + ++lk.nShared; + if(lk.lockType===capi.SQLITE_LOCK_NONE) lk.lockType = iLock; + }else if(iLock===capi.SQLITE_LOCK_EXCLUSIVE && lk.nShared>1){ + if(h.lockType===capi.SQLITE_LOCK_RESERVED){ + h.lockType = lk.lockType = capi.SQLITE_LOCK_PENDING; + } + return capi.SQLITE_BUSY; + }else{ + lk.lockType = iLock; + } + h.lockType = iLock; + return 0; + }catch(e){ + error("xLock", e); + return cache.setError(e); + } + }, + + xUnlock: function(pFile, iLock){ + cache.popError(); + try{ + if( capi.SQLITE_LOCK_NONE===iLock ){ + /* Tells the impl to re-read its size on the next op. */ + originalMethods.ioDb.xUnlock(pFile, iLock); + } + const h = pFileHandles.get(pFile); + unlockFile(h, iLock); + return 0; + }catch(e){ + error("xUnlock", e); + return cache.setError(e); + } + }, + + xCheckReservedLock: function(pFile, pOut){ + cache.popError(); + try{ + const h = pFileHandles.get(pFile); + const lk = mapPathToLocks.get(h.jzClass); + wasm.poke32(pOut, + (!!lk && lk.lockType>capi.SQLITE_LOCK_SHARED) + ? 1 : 0) + return 0; + }catch(e){ + error("xCheckReservedLock", e); + return cache.setError(e); + } + }, - - The OPFS features used here are only available in dedicated Worker - threads. This file tries to detect that case, resulting in a - rejected Promise if those features do not seem to be available. - - It requires the SharedArrayBuffer and Atomics classes, and the - former is only available if the HTTP server emits the so-called - COOP and COEP response headers. These features are required for - proxying OPFS's synchronous API via the synchronous interface - required by the sqlite3_vfs API. + }/*.ioDb*/, + + ioJrnl:{ + /* sqlite3_kvvfs_methods::pIoJrnl's methods. Those set to true + are copied as-is from the ioDb objects. Others are specific + to journal files. */ + xClose: true, + xLock: true, + xUnlock: true, + xCheckReservedLock: true, + }/*.ioJrnl*/ + }/*methodOverrides*/; + + + try { + util.assert( cache.buffer.n>1024*129, "Heap buffer is not large enough" + /* Native is SQLITE_KVOS_SZ is 133073 as of this writing */ ); + for(const e of Object.entries(methodOverrides.recordHandler)){ + // Overwrite kvvfsMethods's callbacks + const k = e[0], f = e[1]; + recordHandler[k] = f; + if( 0 ){ + // bug: this should work + kvvfsMethods.installMethod(k, f); + }else{ + kvvfsMethods[kvvfsMethods.memberKey(k)] = + wasm.installFunction(kvvfsMethods.memberSignature(k), f); + } + } + for(const e of Object.entries(methodOverrides.vfs)){ + // Overwrite some pVfs entries and stash the original impls + const k = e[0], f = e[1], km = pVfs.memberKey(k), + member = pVfs.structInfo.members[k] + || util.toss("Missing pVfs.structInfo[",k,"]"); + originalMethods.vfs[k] = wasm.functionEntry(pVfs[km]); + pVfs[km] = wasm.installFunction(member.signature, f); + } + for(const e of Object.entries(methodOverrides.ioDb)){ + // Similar treatment for pVfs.$pIoDb a.k.a. pIoDb... + const k = e[0], f = e[1], km = pIoDb.memberKey(k); + originalMethods.ioDb[k] = wasm.functionEntry(pIoDb[km]) + || util.toss("Missing native pIoDb[",km,"]"); + pIoDb[km] = wasm.installFunction(pIoDb.memberSignature(k), f); + } + for(const e of Object.entries(methodOverrides.ioJrnl)){ + // Similar treatment for pVfs.$pIoJrnl a.k.a. pIoJrnl... + const k = e[0], f = e[1], km = pIoJrnl.memberKey(k); + originalMethods.ioJrnl[k] = wasm.functionEntry(pIoJrnl[km]) + || util.toss("Missing native pIoJrnl[",km,"]"); + if( true===f ){ + /* use pIoDb's copy */ + pIoJrnl[km] = pIoDb[km] || util.toss("Missing copied pIoDb[",km,"]"); + }else{ + pIoJrnl[km] = wasm.installFunction(pIoJrnl.memberSignature(k), f); + } + } + }finally{ + kvvfsMethods.dispose(); + pVfs.dispose(); + pIoDb.dispose(); + pIoJrnl.dispose(); + } + + /* + That gets all of the low-level bits out of the way. What follows + are the public API additions. + */ + + /** + Clears all storage used by the kvvfs DB backend, deleting any + DB(s) stored there. + + Its argument must be the name of a kvvfs storage object: + + - 'session' + - 'local' + - '' - see below. + - A transient kvvfs storage object name. + + In the first two cases, only sessionStorage resp. localStorage is + cleared. An empty string resolves to both 'local' and 'session' + storage. + + Returns the number of entries cleared. + + As of kvvfs version 2: + + This API is available in Worker threads but does not have access + to localStorage or sessionStorage in them. Prior versions did not + include this API in Worker threads. + + Differences in this function in version 2: + + - It accepts an arbitrary storage name. In v1 this was a silent + no-op for any names other than ('local','session',''). + + - It throws if a db currently has the storage opened UNLESS the + storage object is localStorage or sessionStorage. That version 1 + did not throw for this case was due to an architectural + limitation which has since been overcome, but removal of + JsStorageDb.prototype.clearStorage() would be a backwards compatibility + break, so this function permits wiping the storage for those two + cases even if they are opened. Use with care. + */ + const sqlite3_js_kvvfs_clear = function callee(which){ + if( ''===which ){ + return callee('local') + callee('session'); + } + const store = storageForZClass(which); + if( !store ) return 0; + if( store.files.length ){ + if( globalThis.localStorage===store.storage + || globalThis.sessionStorage===store.storage ){ + /* backwards compatibility: allow these to be cleared + while opened. */ + }else{ + /* Interestingly, kvvfs recovers just fine when the storage is + wiped, so long as the db is not in use and its schema is + recreated before it's used, but client apps should not have + to be faced with that eventuality mid-query (where it + _will_ cause failures). Therefore we disallow it when + storage handles are opened. Kvvfs version 1 could not + detect this case - see the if() block above. + */ + toss3(capi.SQLITE_ACCESS, + "Cannot clear in-use database storage."); + } + } + const s = store.storage; + const toRm = [] /* keys to remove */; + let i, n = s.length; + //debug("kvvfs_clear",store,s); + for( i = 0; i < n; ++i ){ + const k = s.key(i); + //debug("kvvfs_clear ?",k); + if(!store.keyPrefix || k.startsWith(store.keyPrefix)) toRm.push(k); + } + toRm.forEach((kk)=>s.removeItem(kk)); + //alertFilesToReload(store); + return toRm.length; + }; + + /** + This routine estimates the approximate amount of + storage used by the given kvvfs back-end. + + Its arguments are as documented for sqlite3_js_kvvfs_clear(), + only the operation this performs is different. + + The returned value is twice the "length" value of every matching + key and value, noting that JavaScript stores each character in 2 + bytes. + + The returned size is not authoritative from the perspective of + how much data can fit into localStorage and sessionStorage, as + the precise algorithms for determining those limits are + unspecified and may include per-entry overhead invisible to + clients. + */ + const sqlite3_js_kvvfs_size = function callee(which){ + if( ''===which ){ + return callee('local') + callee('session'); + } + const store = storageForZClass(which); + if( !store ) return 0; + const s = store.storage; + let i, sz = 0; + for(i = 0; i < s.length; ++i){ + const k = s.key(i); + if(!store.keyPrefix || k.startsWith(store.keyPrefix)){ + sz += k.length; + sz += s.getItem(k).length; + } + } + return sz * 2 /* because JS uses 2-byte char encoding */; + }; + + /** + Exports a kvvfs storage object to an object, optionally + JSON-friendly. + + Usages: + + thisfunc(storageName); + thisfunc(options); + + In the latter case, the options object must be an object with + the following properties: + + - "name" (string) required. The storage to export. + + - "decodePages" (bool=false). If true, the .pages result property + holdes Uint8Array objects holding the raw binary-format db + pages. The default is to use kvvfs-encoded string pages + (JSON-friendly). + + - "includeJournal" (bool=false). If true and the db has a current + journal, it is exported as well. (Kvvfs journals are stored as a + single record within the db's storage object.) + + The returned object is structured as follows... + + - "name": the name of the storage. This is 'local' or 'session' + for localStorage resp. sessionStorage, and an arbitrary name for + transient storage. This propery may be changed before passing + this object to sqlite3_js_kvvfs_import() in order to + import into a different storage object. + + - "timestamp": the time this function was called, in Unix + epoch milliseconds. + + - "size": the unencoded db size. + + - "journal": if options.includeJournal is true and this db has a + journal, it is stored as a string here, otherwise this property + is not set. + + - "pages": An array holding the raw encoded db pages in their + proper order. + + Throws if this db is not opened. + + The encoding of the underlying database is not part of this + interface - it is simply passed on as-is. Interested parties are + directed to src/os_kv.c in the SQLite source tree, with the + caveat that that code also does not offer a public interface. + i.e. the encoding is a private implementation detail of kvvfs. + The format may be changed in the future but kvvfs will continue + to support the current form. + + Added in version 3.52.0. + */ + const sqlite3_js_kvvfs_export = function callee(...args){ + let opt; + if( 1===args.length && 'object'===typeof args[0] ){ + opt = args[0]; + }else if(args.length){ + opt = Object.assign(Object.create(null),{ + name: args[0], + //decodePages: true + }); + } + const store = opt ? storageForZClass(opt.name) : null; + if( !store ){ + toss3(capi.SQLITE_NOTFOUND, + "There is no kvvfs storage named",opt?.name); + } + //debug("store to export=",store); + const s = store.storage; + const rc = Object.assign(Object.create(null),{ + name: store.jzClass, + timestamp: Date.now(), + pages: [] + }); + const pages = Object.create(null); + let xpages; + const keyPrefix = store.keyPrefix; + const rxTail = keyPrefix + ? /^kvvfs-[^-]+-(\w+)/ /* X... part of kvvfs-NAME-X... */ + : undefined; + let i = 0, n = s.length; + for( ; i < n; ++i ){ + const k = s.key(i); + if( !keyPrefix || k.startsWith(keyPrefix) ){ + let kk = (keyPrefix ? rxTail.exec(k) : undefined)?.[1] ?? k; + switch( kk ){ + case 'jrnl': + if( opt.includeJournal ) rc.journal = s.getItem(k); + break; + case 'sz': + rc.size = +s.getItem(k); + break; + default: + kk = +kk /* coerce to number */; + if( !util.isInt32(kk) || kk<=0 ){ + toss3(capi.SQLITE_RANGE, "Malformed kvvfs key: "+k); + } + if( opt.decodePages ){ + const spg = s.getItem(k), + n = spg.length, + z = cache.memBuffer(0), + zDec = cache.memBuffer(1), + heap = wasm.heap8u()/* MUST be inited last*/; + let i = 0; + for( ; i < n; ++i ){ + heap[wasm.ptr.add(z, i)] = spg.codePointAt(i) & 0xff; + } + heap[wasm.ptr.add(z, i)] = 0; + //debug("Decoding",i,"page bytes"); + const nDec = kvvfsDecode( + z, zDec, cache.buffer.n + ); + //debug("Decoded",nDec,"page bytes"); + pages[kk] = heap.slice(Number(zDec), wasm.ptr.addn(zDec, nDec)); + }else{ + pages[kk] = s.getItem(k); + } + break; + } + } + } + if( opt.decodePages ) cache.memBufferFree(1); + /* Now sort the page numbers and move them into an array. In JS + property keys are always strings, so we have to coerce them to + numbers so we can get them sorted properly for the array. */ + Object.keys(pages).map((v)=>+v).sort().forEach( + (v)=>rc.pages.push(pages[v]) + ); + return rc; + }/* sqlite3_js_kvvfs_export */; + + /** + The counterpart of sqlite3_js_kvvfs_export(). Its + argument must be the result of that function() or + a compatible one. + + This either replaces the contents of an existing transient + storage object or installs one named exp.name, setting + the storage's db contents to that of the exp object. + + Throws on error. Error conditions include: + + - The given storage object is currently opened by any db. + Performing this page-by-page import would invoke undefined + behavior on them. + + - Malformed input object. + + If it throws after starting the import then it clears the storage + before returning, to avoid leaving the db in an undefined + state. It may throw for any of the above-listed conditions before + reaching that step, in which case the db is not modified. If + exp.name refers to a new storage name then if it throws, the name + does not get installed. + + Added in version 3.52.0. + */ + const sqlite3_js_kvvfs_import = function(exp, overwrite=false){ + if( !exp?.timestamp + || !exp.name + || undefined===exp.size + || !Array.isArray(exp.pages) ){ + toss3(capi.SQLITE_MISUSE, "Malformed export object."); + }else if( !exp.size + || (exp.size !== (exp.size | 0)) + //|| (exp.size % cache.fixedPageSize) + || exp.size>=0x7fffffff ){ + toss3(capi.SQLITE_RANGE, "Invalid db size: "+exp.size); + } + + validateStorageName(exp.name); + let store = storageForZClass(exp.name); + const isNew = !store; + if( store ){ + if( !overwrite ){ + //warn("Storage exists:",arguments,store); + toss3(capi.SQLITE_ACCESS, + "Storage '"+exp.name+"' already exists and", + "overwrite was not specified."); + }else if( !store.files || !store.jzClass ){ + toss3(capi.SQLITE_ERROR, + "Internal storage object", exp.name,"seems to be malformed."); + }else if( store.files.length ){ + toss3(capi.SQLITE_IOERR_ACCESS, + "Cannot import db storage while it is in use."); + } + sqlite3_js_kvvfs_clear(exp.name); + }else{ + store = newStorageObj(exp.name); + //warn("Installing new storage:",store); + } + //debug("Importing store",store.poolEntry.files.length, store); + //debug("object to import:",exp); + const keyPrefix = kvvfsKeyPrefix(exp.name); + let zEnc; + try{ + /* Force the native KVVfsFile instances to re-read the db + and page size. */; + const s = store.storage; + s.setItem(keyPrefix+'sz', exp.size); + if( exp.journal ) s.setItem(keyPrefix+'jrnl', exp.journal); + if( exp.pages[0] instanceof Uint8Array ){ + /* raw binary pages */ + //debug("pages",exp.pages); + exp.pages.forEach((u,ndx)=>{ + const n = u.length; + if( 0 && cache.fixedPageSize !== n ){ + util.toss3(capi.SQLITE_RANGE,"Unexpected page size:", n); + } + zEnc ??= cache.memBuffer(1); + const zBin = cache.memBuffer(0), + heap = wasm.heap8u()/*MUST be inited last*/; + /* Copy u to the heap and encode the heap copy via C. This + is _presumably_ faster than porting the encoding algo to + JS. */ + heap.set(u, Number(zBin)); + heap[wasm.ptr.addn(zBin,n)] = 0; + const rc = kvvfsEncode(zBin, n, zEnc); + util.assert( rc < cache.buffer.n, + "Impossibly long output - possibly smashed the heap" ); + util.assert( 0===wasm.peek8(wasm.ptr.add(zEnc,rc)), + "Expecting NUL-terminated encoded output" ); + const jenc = wasm.cstrToJs(zEnc); + //debug("(un)encoded page:",u,jenc); + s.setItem(keyPrefix+(ndx+1), jenc); + }); + }else if( exp.pages[0] ){ + /* kvvfs-encoded pages */ + exp.pages.forEach((v,ndx)=>s.setItem(keyPrefix+(ndx+1), v)); + } + if( isNew ) installStorageAndJournal(store); + }catch{ + if( !isNew ){ + try{sqlite3_js_kvvfs_clear(exp.name);}catch(ee){/*ignored*/} + } + }finally{ + if( zEnc ) cache.memBufferFree(1); + } + return this; + }; + + /** + If no kvvfs storage exists with the given name, one is + installed. If one exists, its reference count is increased so + that it won't be freed by the closing of a database or journal + file. + + Throws if the name is not valid for a new storage object. + + Added in version 3.52.0. + */ + const sqlite3_js_kvvfs_reserve = function(name){ + let store = storageForZClass(name); + if( store ){ + ++store.refc; + return; + } + validateStorageName(name); + installStorageAndJournal(newStorageObj(name)); + }; + + /** + Conditionally "unlinks" a kvvfs storage object, reducing its + reference count by 1. + + This is a no-op if name ends in "-journal" or refers to a + built-in storage object. + + It will not lower the refcount below the number of + currently-opened db/journal files for the storage (so that it + cannot delete it out from under them). + + If the refcount reaches 0 then the storage object is + removed. + + Returns true if it reduces the refcount, else false. A result of + true does not necessarily mean that the storage unit was removed, + just that its refcount was lowered. Similarly, a result of false + does not mean that the storage is removed - it may still have + opened handles. + + Added in version 3.52.0. + */ + const sqlite3_js_kvvfs_unlink = function(name){ + const store = storageForZClass(name); + if( !store + || kvvfsIsPersistentName(store.jzClass) + || isBuiltinName(store.jzClass) + || cache.rxJournalSuffix.test(name) ) return false; + if( store.refc > store.files.length || 0===store.files.length ){ + if( --store.refc<=0 ){ + /* Ignoring deleteAtRefc0 for an explicit unlink */ + deleteStorage(store); + } + return true; + } + return false; + }; + + /** + Adds an event listener to a kvvfs storage object. The idea is + that this can be used to asynchronously back up one kvvfs storage + object to another or another channel entirely. (The caveat in the + latter case is that kvvfs's format is not readily consumable by + downstream code.) + + Its argument must be an object with the following properties: + + - storage: the name of the kvvfs storage object. + + - reserve [=false]: if true, sqlite3_js_kvvfs_reserve() is used + to ensure that the storage exists if it does not already. + If this is false and the storage does not exist then an + exception is thrown. + + - events: an object which may have any of the following + callback function properties: open, close, write, delete. + + - decodePages [=false]: if true, write events will receive each + db page write in the form of a Uint8Array holding the raw binary + db page. The default is to emit the kvvfs-format page because it + requires no extra work, we already have it in hand, and it's + often smaller. It's not great for interchange, though. + + - includeJournal [=false]: if true, writes and deletes of + "jrnl" records are included. If false, no events are sent + for journal updates. + + Passing the same object to sqlite3_js_kvvfs_unlisten() will + remove the listener. + + Each one of the events callbacks will be called asynchronously + when the given storage performs those operations. They may be + asynchronous functions but are not required to be (the events are + fired async either way, but making the event callbacks async may + be advantageous when multiple listeners are involved). All + exceptions, including those via Promises, are ignored but may (or + may not) trigger warning output on the console. + + Each callback gets passed a single object with the following + properties: + + .type = the same as the name of the callback + + .storageName = the name of the storage object + + .data = callback-dependent: + + - 'open' and 'close' get an integer, the number of + currently-opened handles on the storage. + + - 'write' gets a length-two array holding the key and value which + were written. The key is always a string, even if it's a db page + number. For db-page records, the value's type depends on + opt.decodePages. All others, including the journal, are strings. + (The journal, being a kvvfs-specific format, is delivered in + that same JSON-friendly format.) More details below. + + - 'delete' gets the string-type key of the deleted record. + + - 'sync' gets a boolean value: true if it was triggered by db + file's xSync(), false if it was triggered by xFileControl(). The + latter triggers before the xSync() and also triggers if the DB + has PRAGMA SYNCHRONOUS=OFF (in which case xSync() is not + triggered). + + The key/value arguments to 'write', and key argument to 'delete', + are in one of the following forms: + + - 'sz' = the unencoded db size as a string. This specific key is + key is never deleted, so is only ever passed to 'write' events. + + - 'jrnl' = the current db journal as a kvvfs-encoded string. This + journal format is not useful anywhere except in the kvvfs + internals. These events are not fired if opt.includeJournal is + false. + + - '[1-9][0-9]*' (a db page number) = Its type depends on + opt.decodePages. These may be written and deleted in arbitrary + order. + + Design note: JS has StorageEvents but only in the main thread, + which is why the listeners are not based on that. + + Added in version 3.52.0. + */ + const sqlite3_js_kvvfs_listen = function(opt){ + if( !opt || 'object'!==typeof opt ){ + toss3(capi.SQLITE_MISUSE, "Expecting a listener object."); + } + let store = storageForZClass(opt.storage); + if( !store ){ + if( opt.storage && opt.reserve ){ + sqlite3_js_kvvfs_reserve(opt.storage); + store = storageForZClass(opt.storage); + util.assert(store, + "Unexpectedly cannot fetch reserved storage " + +opt.storage); + }else{ + toss3(capi.SQLITE_NOTFOUND,"No such storage:",opt.storage); + } + } + if( opt.events ){ + (store.listeners ??= []).push(opt); + } + }; + + /** + Removes the kvvfs event listeners for the given options + object. It must be passed the same object instance which was + passed to sqlite3_js_kvvfs_listen(). + + This has no side effects if opt is invalid or is not a match for + any listeners. + + Return true if it unregisters its argument, else false. + + Added in version 3.52.0. + */ + const sqlite3_js_kvvfs_unlisten = function(opt){ + const store = storageForZClass(opt?.storage); + if( store?.listeners && opt.events ){ + const n = store.listeners.length; + store.listeners = store.listeners.filter((v)=>v!==opt); + const rc = n>store.listeners.length; + if( !store.listeners.length ){ + // to speed up downstream checks for listeners + store.listeners = undefined; + } + return rc; + } + return false; + }; + + sqlite3.kvvfs.reserve = sqlite3_js_kvvfs_reserve; + sqlite3.kvvfs.import = sqlite3_js_kvvfs_import; + sqlite3.kvvfs.export = sqlite3_js_kvvfs_export; + sqlite3.kvvfs.unlink = sqlite3_js_kvvfs_unlink; + sqlite3.kvvfs.listen = sqlite3_js_kvvfs_listen; + sqlite3.kvvfs.unlisten = sqlite3_js_kvvfs_unlisten; + sqlite3.kvvfs.exists = (name)=>!!storageForZClass(name); + sqlite3.kvvfs.estimateSize = sqlite3_js_kvvfs_size; + sqlite3.kvvfs.clear = sqlite3_js_kvvfs_clear; + + + if( globalThis.Storage ){ + /** + Prior to version 2, kvvfs was only available in the main + thread. We retain that for the v1 APIs, exposing them only in + the main UI thread. As of version 2, kvvfs is available in all + threads but only via its v2 interface (sqlite3.kvvfs). + + These versions have a default argument value of "" which the v2 + versions lack. + */ + capi.sqlite3_js_kvvfs_size = (which="")=>sqlite3_js_kvvfs_size(which); + capi.sqlite3_js_kvvfs_clear = (which="")=>sqlite3_js_kvvfs_clear(which); + } + + if(sqlite3.oo1?.DB){ + /** + Functionally equivalent to DB(storageName,'c','kvvfs') except + that it throws if the given storage name is not one of 'local' + or 'session'. + + As of version 3.46, the argument may optionally be an options + object in the form: + + { + filename: 'session'|'local', + ... etc. (all options supported by the DB ctor) + } + + noting that the 'vfs' option supported by main DB + constructor is ignored here: the vfs is always 'kvvfs'. + */ + const DB = sqlite3.oo1.DB; + sqlite3.oo1.JsStorageDb = function( + storageName = sqlite3.oo1.JsStorageDb.defaultStorageName + ){ + const opt = DB.dbCtorHelper.normalizeArgs(...arguments); + opt.vfs = 'kvvfs'; + if( 0 ){ + // Current tests rely on these, but that's arguably a bug + if( opt.flags ) opt.flags = 'cw'+opt.flags; + else opt.flags = 'cw'; + } + switch( opt.filename ){ + /* sqlite3_open(), in these builds, recognizes the names + below and performs some magic which we want to bypass + here for sanity's sake. */ + case ":sessionStorage:": opt.filename = 'session'; break; + case ":localStorage:": opt.filename = 'local'; break; + } + const m = /(file:(\/\/)?)([^?]+)/.exec(opt.filename); + validateStorageName( m ? m[3] : opt.filename); + DB.dbCtorHelper.call(this, opt); + }; + sqlite3.oo1.JsStorageDb.defaultStorageName + = cache.storagePool.session ? 'session' : nameOfThisThreadStorage; + const jdb = sqlite3.oo1.JsStorageDb; + jdb.prototype = Object.create(DB.prototype); + jdb.clearStorage = sqlite3_js_kvvfs_clear; + /** + DEPRECATED: the inherited method of this name (as opposed to + the "static" class method) is deprecated with version 2 of + kvvfs. This function will, for backwards comaptibility, + continue to work with localStorage and sessionStorage, but will + throw for all other storage because they are opened. Version 1 + was not capable of recognizing that the storage was opened so + permitted wiping it out at any time, but that was arguably a + bug. + + Clears this database instance's storage or throws if this + instance has been closed. Returns the number of + database pages which were cleaned up. + */ + jdb.prototype.clearStorage = function(){ + return jdb.clearStorage(this.affirmOpen().dbFilename(), true); + }; + /** Equivalent to sqlite3_js_kvvfs_size(). */ + jdb.storageSize = sqlite3_js_kvvfs_size; + /** + Returns the _approximate_ number of bytes this database takes + up in its storage or throws if this instance has been closed. + */ + jdb.prototype.storageSize = function(){ + return jdb.storageSize(this.affirmOpen().dbFilename(), true); + }; + }/*sqlite3.oo1.JsStorageDb*/ + + if( sqlite3.__isUnderTest && sqlite3.vtab ){ + /** + An eponymous vtab for inspecting the kvvfs state. This is only + intended for use in testing and development, not part of the + public API. + */ + const cols = Object.assign(Object.create(null),{ + rowid: {type: 'INTEGER'}, + name: {type: 'TEXT'}, + nRef: {type: 'INTEGER'}, + nOpen: {type: 'INTEGER'}, + isTransient: {type: 'INTEGER'}, + dbSize: {type: 'INTEGER'} + }); + Object.keys(cols).forEach((v,i)=>cols[v].colId = i); + + const VT = sqlite3.vtab; + const ProtoCursor = Object.assign(Object.create(null),{ + row: function(){ + return cache.storagePool[this.names[this.rowid]]; + } + }); + Object.assign(Object.create(ProtoCursor),{ + rowid: 0, + names: Object.keys(cache.storagePool) + .filter(v=>!cache.rxJournalSuffix.test(v)) + }); + const cursorState = function(cursor, reset){ + const o = (cursor instanceof capi.sqlite3_vtab_cursor) + ? cursor + : VT.xCursor.get(cursor); + if( reset || !o.vTabState ){ + o.vTabState = Object.assign(Object.create(ProtoCursor),{ + rowid: 0, + names: Object.keys(cache.storagePool) + .filter(v=>!cache.rxJournalSuffix.test(v)) + }); + } + return o.vTabState; + }; + + const dbg = 1 ? ()=>{} : (...args)=>debug("vtab",...args); + + const theModule = function f(){ + return f.mod ??= new sqlite3.capi.sqlite3_module().setupModule({ + catchExceptions: true, + methods: { + xConnect: function(pDb, pAux, argc, argv, ppVtab, pzErr){ + dbg("xConnect"); + try{ + const xcol = []; + Object.keys(cols).forEach((k)=>{ + xcol.push(k+" "+cols[k].type); + }); + const rc = capi.sqlite3_declare_vtab( + pDb, "CREATE TABLE ignored("+xcol.join(',')+")" + ); + if(0===rc){ + const t = VT.xVtab.create(ppVtab); + util.assert( + (t === VT.xVtab.get(wasm.peekPtr(ppVtab))), + "output pointer check failed" + ); + } + return rc; + }catch(e){ + return VT.xError('xConnect', e, capi.SQLITE_ERROR); + } + }, + xCreate: wasm.ptr.null, // eponymous only + //xCreate: true, // copy xConnect, i.e. also eponymous only + xDisconnect: function(pVtab){ + dbg("xDisconnect",...arguments); + VT.xVtab.dispose(pVtab); + return 0; + }, + xOpen: function(pVtab, ppCursor){ + dbg("xOpen",...arguments); + VT.xCursor.create(ppCursor); + return 0; + }, + xClose: function(pCursor){ + dbg("xClose",...arguments); + const c = VT.xCursor.unget(pCursor); + delete c.vTabState; + c.dispose(); + return 0; + }, + xNext: function(pCursor){ + dbg("xNext",...arguments); + const c = VT.xCursor.get(pCursor); + ++cursorState(c).rowid; + return 0; + }, + xColumn: function(pCursor, pCtx, iCol){ + dbg("xColumn",...arguments); + //const c = VT.xCursor.get(pCursor); + const st = cursorState(pCursor); + const store = st.row(); + util.assert(store, "Unexpected xColumn call"); + switch(iCol){ + case cols.rowid.colId: + capi.sqlite3_result_int(pCtx, st.rowid); + break; + case cols.name.colId: + capi.sqlite3_result_text(pCtx, store.jzClass, -1, capi.SQLITE_TRANSIENT); + break; + case cols.nRef.colId: + capi.sqlite3_result_int(pCtx, store.refc); + break; + case cols.nOpen.colId: + capi.sqlite3_result_int(pCtx, store.files.length); + break; + case cols.isTransient.colId: + capi.sqlite3_result_int(pCtx, !!store.deleteAtRefc0); + break; + case cols.dbSize.colId: + capi.sqlite3_result_int(pCtx, storageGetDbSize(store)); + break; + default: + capi.sqlite3_result_error(pCtx, "Invalid column id: "+iCol); + return capi.SQLITE_RANGE; + } + return 0; + }, + xRowid: function(pCursor, ppRowid64){ + dbg("xRowid",...arguments); + const st = cursorState(pCursor); + VT.xRowid(ppRowid64, st.rowid); + return 0; + }, + xEof: function(pCursor){ + const st = cursorState(pCursor); + dbg("xEof?="+(!st.row()),...arguments); + return !st.row(); + }, + xFilter: function(pCursor, idxNum, idxCStr, + argc, argv/* [sqlite3_value* ...] */){ + dbg("xFilter",...arguments); + const st = cursorState(pCursor, true); + return 0; + }, + xBestIndex: function(pVtab, pIdxInfo){ + dbg("xBestIndex",...arguments); + //const t = VT.xVtab.get(pVtab); + const pii = new capi.sqlite3_index_info(pIdxInfo); + pii.$estimatedRows = cache.storagePool.size; + pii.$estimatedCost = 1.0; + pii.dispose(); + return 0; + } + } + })/*setupModule*/; + }/*theModule()*/; + + sqlite3.kvvfs.create_module = function(pDb, name="sqlite_kvvfs"){ + return capi.sqlite3_create_module(pDb, name, theModule(), + wasm.ptr.null); + }; - - This function may only be called a single time. When called, this - function removes itself from the sqlite3 object. + }/* virtual table */ - All arguments to this function are for internal/development purposes - only. They do not constitute a public API and may change at any - time. - The argument may optionally be a plain object with the following - configuration options: +})/*globalThis.sqlite3ApiBootstrap.initializers*/; +/* + 2026-03-04 - - proxyUri: name of the async proxy JS file. + The author disclaims copyright to this source code. In place of a + legal notice, here is a blessing: - - verbose (=2): an integer 0-3. 0 disables all logging, 1 enables - logging of errors. 2 enables logging of warnings and errors. 3 - additionally enables debugging info. Logging is performed - via the sqlite3.config.{log|warn|error}() functions. + * May you do good and not evil. + * May you find forgiveness for yourself and forgive others. + * May you share freely, never taking more than you give. - - sanityChecks (=false): if true, some basic sanity tests are run on - the OPFS VFS API after it's initialized, before the returned - Promise resolves. This is only intended for testing and - development of the VFS, not client-side use. + *********************************************************************** - On success, the Promise resolves to the top-most sqlite3 namespace - object and that object gets a new object installed in its - `opfs` property, containing several OPFS-specific utilities. + This file holds code shared by sqlite3-vfs-opfs{,-wl}.c-pp.js. It + creates a private/internal sqlite3.opfs namespace common to the two + and used (only) by them and the test framework. It is not part of + the public API. The library deletes sqlite3.opfs in its final + bootstrapping steps unless it's specifically told to keep them (for + testing purposes only) using an undocumented and unsupported + mechanism. */ -const installOpfsVfs = function callee(options){ - if(!globalThis.SharedArrayBuffer - || !globalThis.Atomics){ - return Promise.reject( - new Error("Cannot install OPFS: Missing SharedArrayBuffer and/or Atomics. "+ - "The server must emit the COOP/COEP response headers to enable those. "+ - "See https://sqlite.org/wasm/doc/trunk/persistence.md#coop-coep") - ); - }else if('undefined'===typeof WorkerGlobalScope){ - return Promise.reject( - new Error("The OPFS sqlite3_vfs cannot run in the main thread "+ - "because it requires Atomics.wait().") - ); - }else if(!globalThis.FileSystemHandle || - !globalThis.FileSystemDirectoryHandle || - !globalThis.FileSystemFileHandle || - !globalThis.FileSystemFileHandle.prototype.createSyncAccessHandle || - !navigator?.storage?.getDirectory){ - return Promise.reject( - new Error("Missing required OPFS APIs.") - ); - } - if(!options || 'object'!==typeof options){ - options = Object.create(null); - } - const urlParams = new URL(globalThis.location.href).searchParams; - if(urlParams.has('opfs-disable')){ - //sqlite3.config.warn('Explicitly not installing "opfs" VFS due to opfs-disable flag.'); - return Promise.resolve(sqlite3); - } - if(undefined===options.verbose){ - options.verbose = urlParams.has('opfs-verbose') - ? (+urlParams.get('opfs-verbose') || 2) : 1; - } - if(undefined===options.sanityChecks){ - options.sanityChecks = urlParams.has('opfs-sanity-check'); - } - if(undefined===options.proxyUri){ - options.proxyUri = callee.defaultProxyUri; +globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ + 'use strict'; + if( sqlite3.config.disable?.vfs?.opfs && + sqlite3.config.disable.vfs['opfs-vfs'] ){ + return; } + const toss = sqlite3.util.toss, + capi = sqlite3.capi, + util = sqlite3.util, + wasm = sqlite3.wasm; - //sqlite3.config.warn("OPFS options =",options,globalThis.location); + /** + Generic utilities for working with OPFS. This will get filled out + by the Promise setup and, on success, installed as sqlite3.opfs. + + This is an internal/private namespace intended for use solely by + the OPFS VFSes and test code for them. The library bootstrapping + process removes this object in non-testing contexts. + */ + const opfsUtil = sqlite3.opfs = Object.create(null); + + /** + Returns true if _this_ thread has access to the OPFS APIs. + */ + opfsUtil.thisThreadHasOPFS = ()=>{ + return globalThis.FileSystemHandle && + globalThis.FileSystemDirectoryHandle && + globalThis.FileSystemFileHandle && + globalThis.FileSystemFileHandle.prototype.createSyncAccessHandle && + navigator?.storage?.getDirectory; + }; + + /** + Must be called by the OPFS VFSes immediately after they determine + whether OPFS is available by calling + thisThreadHasOPFS(). Resolves to the OPFS storage root directory + and sets opfsUtil.rootDirectory to that value. + */ + opfsUtil.getRootDir = async function f(){ + return f.promise ??= navigator.storage.getDirectory().then(d=>{ + opfsUtil.rootDirectory = d; + return d; + }).catch(e=>{ + delete f.promise; + throw e; + }); + }; + + /** + Expects an OPFS file path. It gets resolved, such that ".." + components are properly expanded, and returned. If the 2nd arg + is true, the result is returned as an array of path elements, + else an absolute path string is returned. + */ + opfsUtil.getResolvedPath = function(filename,splitIt){ + const p = new URL(filename, "file://irrelevant").pathname; + return splitIt ? p.split('/').filter((v)=>!!v) : p; + }; + + /** + Takes the absolute path to a filesystem element. Returns an + array of [handleOfContainingDir, filename]. If the 2nd argument + is truthy then each directory element leading to the file is + created along the way. Throws if any creation or resolution + fails. + */ + opfsUtil.getDirForFilename = async function f(absFilename, createDirs = false){ + const path = opfsUtil.getResolvedPath(absFilename, true); + const filename = path.pop(); + let dh = await opfsUtil.getRootDir(); + for(const dirName of path){ + if(dirName){ + dh = await dh.getDirectoryHandle(dirName, {create: !!createDirs}); + } + } + return [dh, filename]; + }; + + /** + Creates the given directory name, recursively, in + the OPFS filesystem. Returns true if it succeeds or the + directory already exists, else false. + */ + opfsUtil.mkdir = async function(absDirName){ + try { + await opfsUtil.getDirForFilename(absDirName+"/filepart", true); + return true; + }catch(e){ + //sqlite3.config.warn("mkdir(",absDirName,") failed:",e); + return false; + } + }; + + /** + Checks whether the given OPFS filesystem entry exists, + returning true if it does, false if it doesn't or if an + exception is intercepted while trying to make the + determination. + */ + opfsUtil.entryExists = async function(fsEntryName){ + try { + const [dh, fn] = await opfsUtil.getDirForFilename(fsEntryName); + await dh.getFileHandle(fn); + return true; + }catch(e){ + return false; + } + }; + + /** + Generates a random ASCII string len characters long, intended for + use as a temporary file name. + */ + opfsUtil.randomFilename = function f(len=16){ + if(!f._chars){ + f._chars = "abcdefghijklmnopqrstuvwxyz"+ + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"+ + "012346789"; + f._n = f._chars.length; + } + const a = []; + let i = 0; + for( ; i < len; ++i){ + const ndx = Math.random() * (f._n * 64) % f._n | 0; + a[i] = f._chars[ndx]; + } + return a.join(""); + /* + An alternative impl. with an unpredictable length + but much simpler: + + Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(36) + */ + }; + + /** + Returns a promise which resolves to an object which represents + all files and directories in the OPFS tree. The top-most object + has two properties: `dirs` is an array of directory entries + (described below) and `files` is a list of file names for all + files in that directory. + + Traversal starts at sqlite3.opfs.rootDirectory. + + Each `dirs` entry is an object in this form: + + ``` + { name: directoryName, + dirs: [...subdirs], + files: [...file names] + } + ``` + + The `files` and `subdirs` entries are always set but may be + empty arrays. + + The returned object has the same structure but its `name` is + an empty string. All returned objects are created with + Object.create(null), so have no prototype. + + Design note: the entries do not contain more information, + e.g. file sizes, because getting such info is not only + expensive but is subject to locking-related errors. + */ + opfsUtil.treeList = async function(){ + const doDir = async function callee(dirHandle,tgt){ + tgt.name = dirHandle.name; + tgt.dirs = []; + tgt.files = []; + for await (const handle of dirHandle.values()){ + if('directory' === handle.kind){ + const subDir = Object.create(null); + tgt.dirs.push(subDir); + await callee(handle, subDir); + }else{ + tgt.files.push(handle.name); + } + } + }; + const root = Object.create(null); + const dir = await opfsUtil.getRootDir(); + await doDir(dir, root); + return root; + }; + + /** + Irrevocably deletes _all_ files in the current origin's OPFS. + Obviously, this must be used with great caution. It may throw + an exception if removal of anything fails (e.g. a file is + locked), but the precise conditions under which the underlying + APIs will throw are not documented (so we cannot tell you what + they are). + */ + opfsUtil.rmfr = async function(){ + const rd = await opfsUtil.getRootDir(); + const dir = rd, opt = {recurse: true}; + for await (const handle of dir.values()){ + dir.removeEntry(handle.name, opt); + } + }; + + /** + Deletes the given OPFS filesystem entry. As this environment + has no notion of "current directory", the given name must be an + absolute path. If the 2nd argument is truthy, deletion is + recursive (use with caution!). + + The returned Promise resolves to true if the deletion was + successful, else false (but...). The OPFS API reports the + reason for the failure only in human-readable form, not + exceptions which can be type-checked to determine the + failure. Because of that... + + If the final argument is truthy then this function will + propagate any exception on error, rather than returning false. + */ + opfsUtil.unlink = async function(fsEntryName, recursive = false, + throwOnError = false){ + try { + const [hDir, filenamePart] = + await opfsUtil.getDirForFilename(fsEntryName, false); + await hDir.removeEntry(filenamePart, {recursive}); + return true; + }catch(e){ + if(throwOnError){ + throw new Error("unlink(",arguments[0],") failed: "+e.message,{ + cause: e + }); + } + return false; + } + }; + + /** + Traverses the OPFS filesystem, calling a callback for each + entry. The argument may be either a callback function or an + options object with any of the following properties: + + - `callback`: function which gets called for each filesystem + entry. It gets passed 3 arguments: 1) the + FileSystemFileHandle or FileSystemDirectoryHandle of each + entry (noting that both are instanceof FileSystemHandle). 2) + the FileSystemDirectoryHandle of the parent directory. 3) the + current depth level, with 0 being at the top of the tree + relative to the starting directory. If the callback returns a + literal false, as opposed to any other falsy value, traversal + stops without an error. Any exceptions it throws are + propagated. Results are undefined if the callback manipulate + the filesystem (e.g. removing or adding entries) because the + how OPFS iterators behave in the face of such changes is + undocumented. + + - `recursive` [bool=true]: specifies whether to recurse into + subdirectories or not. Whether recursion is depth-first or + breadth-first is unspecified! + + - `directory` [FileSystemDirectoryEntry=sqlite3.opfs.rootDirectory] + specifies the starting directory. + + If this function is passed a function, it is assumed to be the + callback. + + Returns a promise because it has to (by virtue of being async) + but that promise has no specific meaning: the traversal it + performs is synchronous. The promise must be used to catch any + exceptions propagated by the callback, however. + */ + opfsUtil.traverse = async function(opt){ + const defaultOpt = { + recursive: true, + directory: await opfsUtil.getRootDir() + }; + if('function'===typeof opt){ + opt = {callback:opt}; + } + opt = Object.assign(defaultOpt, opt||{}); + const doDir = async function callee(dirHandle, depth){ + for await (const handle of dirHandle.values()){ + if(false === opt.callback(handle, dirHandle, depth)) return false; + else if(opt.recursive && 'directory' === handle.kind){ + if(false === await callee(handle, depth + 1)) break; + } + } + }; + doDir(opt.directory, 0); + }; + + /** + Impl of opfsUtil.importDb() when it's given a function as its + second argument. + */ + const importDbChunked = async function(filename, callback){ + const [hDir, fnamePart] = await opfsUtil.getDirForFilename(filename, true); + const hFile = await hDir.getFileHandle(fnamePart, {create:true}); + let sah = await hFile.createSyncAccessHandle(); + let nWrote = 0, chunk, checkedHeader = false, err = false; + try{ + sah.truncate(0); + while( undefined !== (chunk = await callback()) ){ + if(chunk instanceof ArrayBuffer) chunk = new Uint8Array(chunk); + if( !checkedHeader && 0===nWrote && chunk.byteLength>=15 ){ + util.affirmDbHeader(chunk); + checkedHeader = true; + } + sah.write(chunk, {at: nWrote}); + nWrote += chunk.byteLength; + } + if( nWrote < 512 || 0!==nWrote % 512 ){ + toss("Input size",nWrote,"is not correct for an SQLite database."); + } + if( !checkedHeader ){ + const header = new Uint8Array(20); + sah.read( header, {at: 0} ); + util.affirmDbHeader( header ); + } + sah.write(new Uint8Array([1,1]), {at: 18}/*force db out of WAL mode*/); + return nWrote; + }catch(e){ + await sah.close(); + sah = undefined; + await hDir.removeEntry( fnamePart ).catch(()=>{}); + throw e; + }finally { + if( sah ) await sah.close(); + } + }; + + /** + Asynchronously imports the given bytes (a byte array or + ArrayBuffer) into the given database file. + + Results are undefined if the given db name refers to an opened + db. + + If passed a function for its second argument, its behaviour + changes: imports its data in chunks fed to it by the given + callback function. It calls the callback (which may be async) + repeatedly, expecting either a Uint8Array or ArrayBuffer (to + denote new input) or undefined (to denote EOF). For so long as + the callback continues to return non-undefined, it will append + incoming data to the given VFS-hosted database file. When + called this way, the resolved value of the returned Promise is + the number of bytes written to the target file. + + It very specifically requires the input to be an SQLite3 database + and throws if that's not the case. It does so in order to + prevent this function from taking on a larger scope than it is + specifically intended to. i.e. we do not want it to become a + convenience for importing arbitrary files into OPFS. Caveat: as + of 3.54 in SEE builds, the "is this a db?" check is necessarily + lax to account for SEE-encrypted databases not having a legible + header. In such builds, only the db size is relevant for the + check. + + This routine rewrites the database header bytes in the output + file (not the input array) to force disabling of WAL mode. + + On error this throws and the state of the input file is + undefined (it depends on where the exception was triggered). + + On success, resolves to the number of bytes written. + */ + opfsUtil.importDb = async function(filename, bytes){ + if( bytes instanceof Function ){ + return importDbChunked(filename, bytes); + } + if(bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes); + util.affirmIsDb(bytes); + const n = bytes.byteLength; + const [hDir, fnamePart] = await opfsUtil.getDirForFilename(filename, true); + let sah, err, nWrote = 0; + try { + const hFile = await hDir.getFileHandle(fnamePart, {create:true}); + sah = await hFile.createSyncAccessHandle(); + sah.truncate(0); + nWrote = sah.write(bytes, {at: 0}); + if(nWrote != n){ + toss("Expected to write "+n+" bytes but wrote "+nWrote+"."); + } + sah.write(new Uint8Array([1,1]), {at: 18}) /* force db out of WAL mode */; + return nWrote; + }catch(e){ + if( sah ){ await sah.close(); sah = undefined; } + await hDir.removeEntry( fnamePart ).catch(()=>{}); + throw e; + }finally{ + if( sah ) await sah.close(); + } + }; + + /** + Checks for features required for OPFS VFSes and throws with a + descriptive error message if they're not found. This is intended + to be run as part of async VFS installation steps. + */ + opfsUtil.vfsInstallationFeatureCheck = function(vfsName){ + if( !globalThis.SharedArrayBuffer || !globalThis.Atomics ){ + toss("Cannot install OPFS: Missing SharedArrayBuffer and/or Atomics.", + "The server must emit the COOP/COEP response headers to enable those.", + "See https://sqlite.org/wasm/doc/trunk/persistence.md#coop-coep"); + }else if( 'undefined'===typeof WorkerGlobalScope ){ + toss("The OPFS sqlite3_vfs cannot run in the main thread", + "because it requires Atomics.wait()."); + }else if( !globalThis.FileSystemHandle || + !globalThis.FileSystemDirectoryHandle || + !globalThis.FileSystemFileHandle?.prototype?.createSyncAccessHandle || + !navigator?.storage?.getDirectory ){ + toss("Missing required OPFS APIs."); + }else if( 'opfs-wl'===vfsName && !globalThis.Atomics.waitAsync ){ + toss('The',vfsName,'VFS requires Atomics.waitAsync(), which is not available.'); + } + }; + + /** + Must be called by the VFS's main installation routine and passed + the options object that function receives and a reference to that + function itself (we don't need this anymore). + + It throws if OPFS is not available. + + If it returns falsy, it detected that OPFS should be disabled, in + which case the callee should immediately return/resolve to the + sqlite3 object. + + Else it returns a new copy of the options object, fleshed out + with any missing defaults. The caller must: + + - Set up any local state they need. + + - Call opfsUtil.createVfsState(vfsName,opt), where opt is the + object returned by this function. + + - Set up any references they may need to state returned + by the previous step. + + - Call opfvs.bindVfs() + */ + opfsUtil.initOptions = function callee(vfsName, options){ + const urlParams = new URL(globalThis.location.href).searchParams; + if( urlParams.has(vfsName+'-disable') ){ + //sqlite3.config.warn('Explicitly not installing "opfs" VFS due to opfs-disable flag.'); + return; + } + try{ + opfsUtil.vfsInstallationFeatureCheck(vfsName); + }catch(e){ + return; + } + options = util.nu(options); + options.vfsName = vfsName; + options.verbose ??= urlParams.has('opfs-verbose') + ? +urlParams.get('opfs-verbose') : 1; + options.sanityChecks ??= urlParams.has('opfs-sanity-check'); + + if( !opfsUtil.proxyUri ){ + opfsUtil.proxyUri = "sqlite3-opfs-async-proxy.js"; + if( sqlite3.scriptInfo?.sqlite3Dir ){ + /* Doing this from one scope up, outside of this function, does + not work. */ + opfsUtil.proxyUri = ( + sqlite3.scriptInfo.sqlite3Dir + opfsUtil.proxyUri + ); + } + } + options.proxyUri ??= opfsUtil.proxyUri; + if('function' === typeof options.proxyUri){ + options.proxyUri = options.proxyUri(); + } + //sqlite3.config.warn("opfsUtil options =",JSON.stringify(options), 'urlParams =', urlParams); + return opfsUtil.options = options; + }; + + /** + Creates, populates, and returns the main state object used by the + "opfs" and "opfs-wl" VFSes, and transfered from those to their + async counterparts. + + The returned object's vfs property holds the fully-populated + capi.sqlite3_vfs instance, tagged with lots of extra state which + the current VFSes need to have exposed to them. + + After setting up any local state needed, the caller must call + theVfs.bindVfs(X,Y), where X is an object containing the + sqlite3_io_methods to override and Y is a callback which gets + triggered if init succeeds, before the final Promise decides + whether or not to reject. + + This object must, when it's passed to the async part, contain + only cloneable or sharable objects. After the worker's "inited" + message arrives, other types of data may be added to it. + */ + opfsUtil.createVfsState = function(){ + const state = util.nu(); + const options = opfsUtil.options; + state.verbose = options.verbose; - if('function' === typeof options.proxyUri){ - options.proxyUri = options.proxyUri(); - } - const thePromise = new Promise(function(promiseResolve_, promiseReject_){ const loggers = [ sqlite3.config.error, sqlite3.config.warn, sqlite3.config.log ]; + const vfsName = options.vfsName + || toss("Maintenance required: missing VFS name"); const logImpl = (level,...args)=>{ - if(options.verbose>level) loggers[level]("OPFS syncer:",...args); + if(state.verbose>level) loggers[level](vfsName+":",...args); }; - const log = (...args)=>logImpl(2, ...args); - const warn = (...args)=>logImpl(1, ...args); - const error = (...args)=>logImpl(0, ...args); - const toss = sqlite3.util.toss; - const capi = sqlite3.capi; - const util = sqlite3.util; - const wasm = sqlite3.wasm; - const sqlite3_vfs = capi.sqlite3_vfs; - const sqlite3_file = capi.sqlite3_file; - const sqlite3_io_methods = capi.sqlite3_io_methods; - /** - Generic utilities for working with OPFS. This will get filled out - by the Promise setup and, on success, installed as sqlite3.opfs. + const log = (...args)=>logImpl(2, ...args), + warn = (...args)=>logImpl(1, ...args), + error = (...args)=>logImpl(0, ...args), + capi = sqlite3.capi, + wasm = sqlite3.wasm; - ACHTUNG: do not rely on these APIs in client code. They are - experimental and subject to change or removal as the - OPFS-specific sqlite3_vfs evolves. - */ - const opfsUtil = Object.create(null); + const opfsVfs = state.vfs = new capi.sqlite3_vfs(); + const opfsIoMethods = opfsVfs.ioMethods = new capi.sqlite3_io_methods(); - /** - Returns true if _this_ thread has access to the OPFS APIs. - */ - const thisThreadHasOPFS = ()=>{ - return globalThis.FileSystemHandle && - globalThis.FileSystemDirectoryHandle && - globalThis.FileSystemFileHandle && - globalThis.FileSystemFileHandle.prototype.createSyncAccessHandle && - navigator?.storage?.getDirectory; - }; + opfsIoMethods.$iVersion = 1; + opfsVfs.$iVersion = 2/*yes, two*/; + opfsVfs.$szOsFile = capi.sqlite3_file.structInfo.sizeof; + opfsVfs.$mxPathname = 1024/* sure, why not? The OPFS name length limit + is undocumented/unspecified. */; + opfsVfs.$zName = wasm.allocCString(vfsName); + opfsVfs.addOnDispose( + '$zName', opfsVfs.$zName, opfsIoMethods + /** + Pedantic sidebar: the entries in this array are items to + clean up when opfsVfs.dispose() is called, but in this + environment it will never be called. The VFS instance simply + hangs around until the WASM module instance is cleaned up. We + "could" _hypothetically_ clean it up by "importing" an + sqlite3_os_end() impl into the wasm build, but the shutdown + order of the wasm engine and the JS one are undefined so + there is no guaranty that the opfsVfs instance would be + available in one environment or the other when + sqlite3_os_end() is called (_if_ it gets called at all in a + wasm build, which is undefined). i.e. addOnDispose() here is + a matter of "correctness", not necessity. It just wouldn't do + to leave the impression that we're blindly leaking memory. + */ + ); - /** - Not part of the public API. Solely for internal/development - use. - */ - opfsUtil.metrics = { + opfsVfs.metrics = util.nu({ + counters: util.nu(), dump: function(){ let k, n = 0, t = 0, w = 0; for(k in state.opIds){ @@ -15195,115 +18862,24 @@ const installOpfsVfs = function callee(options){ "metrics for",globalThis.location.href,":",metrics, "\nTotal of",n,"op(s) for",t, "ms (incl. "+w+" ms of waiting on the async side)"); - sqlite3.config.log("Serialization metrics:",metrics.s11n); - W.postMessage({type:'opfs-async-metrics'}); + sqlite3.config.log("Serialization metrics:",opfsVfs.metrics.counters.s11n); + opfsVfs.worker?.postMessage?.({type:'opfs-async-metrics'}); }, reset: function(){ let k; const r = (m)=>(m.count = m.time = m.wait = 0); + const m = opfsVfs.metrics.counters; for(k in state.opIds){ - r(metrics[k] = Object.create(null)); + r(m[k] = Object.create(null)); } - let s = metrics.s11n = Object.create(null); + let s = m.s11n = Object.create(null); s = s.serialize = Object.create(null); s.count = s.time = 0; - s = metrics.s11n.deserialize = Object.create(null); + s = m.s11n.deserialize = Object.create(null); s.count = s.time = 0; } - }/*metrics*/; - const opfsIoMethods = new sqlite3_io_methods(); - const opfsVfs = new sqlite3_vfs() - .addOnDispose( ()=>opfsIoMethods.dispose()); - let promiseWasRejected = undefined; - const promiseReject = (err)=>{ - promiseWasRejected = true; - opfsVfs.dispose(); - return promiseReject_(err); - }; - const promiseResolve = ()=>{ - promiseWasRejected = false; - return promiseResolve_(sqlite3); - }; - const W = - new Worker(options.proxyUri); - setTimeout(()=>{ - /* At attempt to work around a browser-specific quirk in which - the Worker load is failing in such a way that we neither - resolve nor reject it. This workaround gives that resolve/reject - a time limit and rejects if that timer expires. Discussion: - https://sqlite.org/forum/forumpost/a708c98dcb3ef */ - if(undefined===promiseWasRejected){ - promiseReject( - new Error("Timeout while waiting for OPFS async proxy worker.") - ); - } - }, 4000); - W._originalOnError = W.onerror /* will be restored later */; - W.onerror = function(err){ - // The error object doesn't contain any useful info when the - // failure is, e.g., that the remote script is 404. - error("Error initializing OPFS asyncer:",err); - promiseReject(new Error("Loading OPFS async Worker failed for unknown reasons.")); - }; - const pDVfs = capi.sqlite3_vfs_find(null)/*pointer to default VFS*/; - const dVfs = pDVfs - ? new sqlite3_vfs(pDVfs) - : null /* dVfs will be null when sqlite3 is built with - SQLITE_OS_OTHER. */; - opfsIoMethods.$iVersion = 1; - opfsVfs.$iVersion = 2/*yes, two*/; - opfsVfs.$szOsFile = capi.sqlite3_file.structInfo.sizeof; - opfsVfs.$mxPathname = 1024/* sure, why not? The OPFS name length limit - is undocumented/unspecified. */; - opfsVfs.$zName = wasm.allocCString("opfs"); - // All C-side memory of opfsVfs is zeroed out, but just to be explicit: - opfsVfs.$xDlOpen = opfsVfs.$xDlError = opfsVfs.$xDlSym = opfsVfs.$xDlClose = null; - opfsVfs.addOnDispose( - '$zName', opfsVfs.$zName, - 'cleanup default VFS wrapper', ()=>(dVfs ? dVfs.dispose() : null) - ); - /** - Pedantic sidebar about opfsVfs.ondispose: the entries in that array - are items to clean up when opfsVfs.dispose() is called, but in this - environment it will never be called. The VFS instance simply - hangs around until the WASM module instance is cleaned up. We - "could" _hypothetically_ clean it up by "importing" an - sqlite3_os_end() impl into the wasm build, but the shutdown order - of the wasm engine and the JS one are undefined so there is no - guaranty that the opfsVfs instance would be available in one - environment or the other when sqlite3_os_end() is called (_if_ it - gets called at all in a wasm build, which is undefined). - */ - /** - State which we send to the async-api Worker or share with it. - This object must initially contain only cloneable or sharable - objects. After the worker's "inited" message arrives, other types - of data may be added to it. + })/*opfsVfs.metrics*/; - For purposes of Atomics.wait() and Atomics.notify(), we use a - SharedArrayBuffer with one slot reserved for each of the API - proxy's methods. The sync side of the API uses Atomics.wait() - on the corresponding slot and the async side uses - Atomics.notify() on that slot. - - The approach of using a single SAB to serialize comms for all - instances might(?) lead to deadlock situations in multi-db - cases. We should probably have one SAB here with a single slot - for locking a per-file initialization step and then allocate a - separate SAB like the above one for each file. That will - require a bit of acrobatics but should be feasible. The most - problematic part is that xOpen() would have to use - postMessage() to communicate its SharedArrayBuffer, and mixing - that approach with Atomics.wait/notify() gets a bit messy. - */ - const state = Object.create(null); - state.verbose = options.verbose; - state.littleEndian = (()=>{ - const buffer = new ArrayBuffer(2); - new DataView(buffer).setInt16(0, 256, true /* ==>littleEndian */); - // Int16Array uses the platform's endianness. - return new Int16Array(buffer)[0] === 256; - })(); /** asyncIdleWaitTime is how long (ms) to wait, in the async proxy, for each Atomics.wait() when waiting on inbound VFS API calls. @@ -15324,7 +18900,8 @@ const installOpfsVfs = function callee(options){ 0 = no exception logging. 1 = only log exceptions for "significant" ops like xOpen(), - xRead(), and xWrite(). + xRead(), and xWrite(). Exceptions related to, e.g., wait/retry + loops in acquiring SyncAccessHandles are not logged. 2 = log all exceptions. */ @@ -15350,22 +18927,31 @@ const installOpfsVfs = function callee(options){ state.fileBufferSize/* file i/o block */ + state.sabS11nSize/* argument/result serialization block */ ); + + /** + For purposes of Atomics.wait() and Atomics.notify(), we use a + SharedArrayBuffer with one slot reserved for each of the API + proxy's methods. The sync side of the API uses Atomics.wait() + on the corresponding slot and the async side uses + Atomics.notify() on that slot. state.opIds holds the SAB slot + IDs of each of those. + */ state.opIds = Object.create(null); - const metrics = Object.create(null); { /* Indexes for use in our SharedArrayBuffer... */ let i = 0; /* SAB slot used to communicate which operation is desired between both workers. This worker writes to it and the other - listens for changes. */ + listens for changes and clears it. The values written to it + are state.opIds.x[A-Z][a-z]+, defined below.*/ state.opIds.whichOp = i++; - /* Slot for storing return values. This worker listens to that - slot and the other worker writes to it. */ + /* Slot for storing return values. This side listens to that + slot and the async proxy writes to it. */ state.opIds.rc = i++; - /* Each function gets an ID which this worker writes to - the whichOp slot. The async-api worker uses Atomic.wait() - on the whichOp slot to figure out which operation to run - next. */ + /* Each function gets an ID which this worker writes to the + state.opIds.whichOp slot. The async-api worker uses + Atomic.wait() on the whichOp slot to figure out which + operation to run next. */ state.opIds.xAccess = i++; state.opIds.xClose = i++; state.opIds.xDelete = i++; @@ -15379,24 +18965,28 @@ const installOpfsVfs = function callee(options){ state.opIds.xTruncate = i++; state.opIds.xUnlock = i++; state.opIds.xWrite = i++; - state.opIds.mkdir = i++; + state.opIds.mkdir = i++ /*currently unused*/; + /** Internal signals which are used only during development and + testing via the dev console. */ state.opIds['opfs-async-metrics'] = i++; state.opIds['opfs-async-shutdown'] = i++; /* The retry slot is used by the async part for wait-and-retry - semantics. Though we could hypothetically use the xSleep slot - for that, doing so might lead to undesired side effects. */ + semantics. It is never written to, only used as a convenient + place to wait-with-timeout for a value which will never be + written, i.e. sleep()ing, before retrying a failed attempt to + acquire a SharedAccessHandle. */ state.opIds.retry = i++; state.sabOP = new SharedArrayBuffer( - i * 4/* ==sizeof int32, noting that Atomics.wait() and friends - can only function on Int32Array views of an SAB. */); - opfsUtil.metrics.reset(); + i * 4/* 4==sizeof int32, noting that Atomics.wait() and + friends can only function on Int32Array views of an + SAB. */); } /** SQLITE_xxx constants to export to the async worker counterpart... */ state.sq3Codes = Object.create(null); - [ + for(const k of [ 'SQLITE_ACCESS_EXISTS', 'SQLITE_ACCESS_READWRITE', 'SQLITE_BUSY', @@ -15424,17 +19014,22 @@ const installOpfsVfs = function callee(options){ 'SQLITE_OPEN_CREATE', 'SQLITE_OPEN_DELETEONCLOSE', 'SQLITE_OPEN_MAIN_DB', - 'SQLITE_OPEN_READONLY' - ].forEach((k)=>{ - if(undefined === (state.sq3Codes[k] = capi[k])){ - toss("Maintenance required: not found:",k); - } - }); + 'SQLITE_OPEN_READONLY', + 'SQLITE_LOCK_NONE', + 'SQLITE_LOCK_SHARED', + 'SQLITE_LOCK_RESERVED', + 'SQLITE_LOCK_PENDING', + 'SQLITE_LOCK_EXCLUSIVE' + ]){ + state.sq3Codes[k] = + capi[k] ?? toss("Maintenance required: not found:",k); + } + state.opfsFlags = Object.assign(Object.create(null),{ /** Flag for use with xOpen(). URI flag "opfs-unlock-asap=1" enables this. See defaultUnlockAsap, below. - */ + */ OPFS_UNLOCK_ASAP: 0x01, /** Flag for use with xOpen(). URI flag "delete-before-open=1" @@ -15447,33 +19042,37 @@ const installOpfsVfs = function callee(options){ downstream errors. An unlink can fail if, e.g., another tab has the handle open. - It goes without saying that deleting a file out from under another - instance results in Undefined Behavior. + It goes without saying that deleting a file out from under + another instance results in Undefined Behavior. */ OPFS_UNLINK_BEFORE_OPEN: 0x02, /** - If true, any async routine which implicitly acquires a sync - access handle (i.e. an OPFS lock) will release that lock at - the end of the call which acquires it. If false, such - "autolocks" are not released until the VFS is idle for some - brief amount of time. - - The benefit of enabling this is much higher concurrency. The - down-side is much-reduced performance (as much as a 4x decrease - in speedtest1). + If true, any async routine which must implicitly acquire a + sync access handle (i.e. an OPFS lock), without an active + xLock(), will release that lock at the end of the call which + acquires it. If false, such implicit locks are not released + until the VFS is idle for some brief amount of time, as + defined by state.asyncIdleWaitTime. + + The benefit of enabling this is higher concurrency. The + down-side is much-reduced performance (as much as a 4x + decrease in speedtest1). */ defaultUnlockAsap: false }); + opfsVfs.metrics.reset()/*must not be called until state.opIds is set up*/; + const metrics = opfsVfs.metrics.counters; + /** Runs the given operation (by name) in the async worker counterpart, waits for its response, and returns the result - which the async worker writes to SAB[state.opIds.rc]. The - 2nd and subsequent arguments must be the aruguments for the - async op. + which the async worker writes to SAB[state.opIds.rc]. The 2nd + and subsequent arguments must be the arguments for the async op + (see sqlite3-opfs-async-proxy.c-pp.js). */ - const opRun = (op,...args)=>{ - const opNdx = state.opIds[op] || toss("Invalid op ID:",op); + const opRun = opfsVfs.opRun = (op,...args)=>{ + const opNdx = state.opIds[op] || toss(opfsVfs.vfsName+": Invalid op ID:",op); state.s11n.serialize(...args); Atomics.store(state.sabOPView, state.opIds.rc, -1); Atomics.store(state.sabOPView, state.opIds.whichOp, opNdx); @@ -15488,14 +19087,15 @@ const installOpfsVfs = function callee(options){ https://github.com/sqlite/sqlite-wasm/issues/12 Summary: in at least one browser flavor, under high loads, - the wait()/notify() pairings can get out of sync. Calling - wait() here until it returns 'not-equal' gets them back in - sync. + the wait()/notify() pairings can get out of sync and/or + spuriously wake up. Calling wait() here until it returns + 'not-equal' gets them back in sync. */ } /* When the above wait() call returns 'not-equal', the async - half will have completed the operation and reported its results - in the state.opIds.rc slot of the SAB. */ + half will have completed the operation and reported its + results in the state.opIds.rc slot of the SAB. It may have + also serialized an exception for us. */ const rc = Atomics.load(state.sabOPView, state.opIds.rc); metrics[op].wait += performance.now() - t; if(rc && state.asyncS11nExceptions){ @@ -15505,248 +19105,43 @@ const installOpfsVfs = function callee(options){ return rc; }; - /** - Not part of the public API. Only for test/development use. - */ - opfsUtil.debug = { - asyncShutdown: ()=>{ - warn("Shutting down OPFS async listener. The OPFS VFS will no longer work."); - opRun('opfs-async-shutdown'); - }, - asyncRestart: ()=>{ - warn("Attempting to restart OPFS VFS async listener. Might work, might not."); - W.postMessage({type: 'opfs-async-restart'}); - } - }; - - const initS11n = ()=>{ - /** - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ACHTUNG: this code is 100% duplicated in the other half of - this proxy! The documentation is maintained in the - "synchronous half". - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - This proxy de/serializes cross-thread function arguments and - output-pointer values via the state.sabIO SharedArrayBuffer, - using the region defined by (state.sabS11nOffset, - state.sabS11nOffset + state.sabS11nSize]. Only one dataset is - recorded at a time. - - This is not a general-purpose format. It only supports the - range of operations, and data sizes, needed by the - sqlite3_vfs and sqlite3_io_methods operations. Serialized - data are transient and this serialization algorithm may - change at any time. - - The data format can be succinctly summarized as: - - Nt...Td...D - - Where: - - - N = number of entries (1 byte) - - - t = type ID of first argument (1 byte) - - - ...T = type IDs of the 2nd and subsequent arguments (1 byte - each). - - - d = raw bytes of first argument (per-type size). - - - ...D = raw bytes of the 2nd and subsequent arguments (per-type - size). - - All types except strings have fixed sizes. Strings are stored - using their TextEncoder/TextDecoder representations. It would - arguably make more sense to store them as Int16Arrays of - their JS character values, but how best/fastest to get that - in and out of string form is an open point. Initial - experimentation with that approach did not gain us any speed. - - Historical note: this impl was initially about 1% this size by - using using JSON.stringify/parse(), but using fit-to-purpose - serialization saves considerable runtime. - */ - if(state.s11n) return state.s11n; - const textDecoder = new TextDecoder(), - textEncoder = new TextEncoder('utf-8'), - viewU8 = new Uint8Array(state.sabIO, state.sabS11nOffset, state.sabS11nSize), - viewDV = new DataView(state.sabIO, state.sabS11nOffset, state.sabS11nSize); - state.s11n = Object.create(null); - /* Only arguments and return values of these types may be - serialized. This covers the whole range of types needed by the - sqlite3_vfs API. */ - const TypeIds = Object.create(null); - TypeIds.number = { id: 1, size: 8, getter: 'getFloat64', setter: 'setFloat64' }; - TypeIds.bigint = { id: 2, size: 8, getter: 'getBigInt64', setter: 'setBigInt64' }; - TypeIds.boolean = { id: 3, size: 4, getter: 'getInt32', setter: 'setInt32' }; - TypeIds.string = { id: 4 }; - - const getTypeId = (v)=>( - TypeIds[typeof v] - || toss("Maintenance required: this value type cannot be serialized.",v) - ); - const getTypeIdById = (tid)=>{ - switch(tid){ - case TypeIds.number.id: return TypeIds.number; - case TypeIds.bigint.id: return TypeIds.bigint; - case TypeIds.boolean.id: return TypeIds.boolean; - case TypeIds.string.id: return TypeIds.string; - default: toss("Invalid type ID:",tid); - } - }; - - /** - Returns an array of the deserialized state stored by the most - recent serialize() operation (from from this thread or the - counterpart thread), or null if the serialization buffer is - empty. If passed a truthy argument, the serialization buffer - is cleared after deserialization. - */ - state.s11n.deserialize = function(clear=false){ - ++metrics.s11n.deserialize.count; - const t = performance.now(); - const argc = viewU8[0]; - const rc = argc ? [] : null; - if(argc){ - const typeIds = []; - let offset = 1, i, n, v; - for(i = 0; i < argc; ++i, ++offset){ - typeIds.push(getTypeIdById(viewU8[offset])); - } - for(i = 0; i < argc; ++i){ - const t = typeIds[i]; - if(t.getter){ - v = viewDV[t.getter](offset, state.littleEndian); - offset += t.size; - }else{/*String*/ - n = viewDV.getInt32(offset, state.littleEndian); - offset += 4; - v = textDecoder.decode(viewU8.slice(offset, offset+n)); - offset += n; - } - rc.push(v); - } - } - if(clear) viewU8[0] = 0; - //log("deserialize:",argc, rc); - metrics.s11n.deserialize.time += performance.now() - t; - return rc; - }; - - /** - Serializes all arguments to the shared buffer for consumption - by the counterpart thread. - - This routine is only intended for serializing OPFS VFS - arguments and (in at least one special case) result values, - and the buffer is sized to be able to comfortably handle - those. - - If passed no arguments then it zeroes out the serialization - state. - */ - state.s11n.serialize = function(...args){ - const t = performance.now(); - ++metrics.s11n.serialize.count; - if(args.length){ - //log("serialize():",args); - const typeIds = []; - let i = 0, offset = 1; - viewU8[0] = args.length & 0xff /* header = # of args */; - for(; i < args.length; ++i, ++offset){ - /* Write the TypeIds.id value into the next args.length - bytes. */ - typeIds.push(getTypeId(args[i])); - viewU8[offset] = typeIds[i].id; - } - for(i = 0; i < args.length; ++i) { - /* Deserialize the following bytes based on their - corresponding TypeIds.id from the header. */ - const t = typeIds[i]; - if(t.setter){ - viewDV[t.setter](offset, args[i], state.littleEndian); - offset += t.size; - }else{/*String*/ - const s = textEncoder.encode(args[i]); - viewDV.setInt32(offset, s.byteLength, state.littleEndian); - offset += 4; - viewU8.set(s, offset); - offset += s.byteLength; - } - } - //log("serialize() result:",viewU8.slice(0,offset)); - }else{ - viewU8[0] = 0; - } - metrics.s11n.serialize.time += performance.now() - t; - }; - return state.s11n; - }/*initS11n()*/; - - /** - Generates a random ASCII string len characters long, intended for - use as a temporary file name. - */ - const randomFilename = function f(len=16){ - if(!f._chars){ - f._chars = "abcdefghijklmnopqrstuvwxyz"+ - "ABCDEFGHIJKLMNOPQRSTUVWXYZ"+ - "012346789"; - f._n = f._chars.length; - } - const a = []; - let i = 0; - for( ; i < len; ++i){ - const ndx = Math.random() * (f._n * 64) % f._n | 0; - a[i] = f._chars[ndx]; - } - return a.join(""); - /* - An alternative impl. with an unpredictable length - but much simpler: - - Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(36) - */ - }; - - /** - Map of sqlite3_file pointers to objects constructed by xOpen(). - */ - const __openFiles = Object.create(null); - const opTimer = Object.create(null); opTimer.op = undefined; opTimer.start = undefined; - const mTimeStart = (op)=>{ + const mTimeStart = opfsVfs.mTimeStart = (op)=>{ opTimer.start = performance.now(); opTimer.op = op; ++metrics[op].count; }; - const mTimeEnd = ()=>( + const mTimeEnd = opfsVfs.mTimeEnd = ()=>( metrics[opTimer.op].time += performance.now() - opTimer.start ); + /** + Map of sqlite3_file pointers to objects constructed by xOpen(). + */ + const __openFiles = opfsVfs.__openFiles = Object.create(null); + /** Impls for the sqlite3_io_methods methods. Maintenance reminder: members are in alphabetical order to simplify finding them. */ - const ioSyncWrappers = { + const ioSyncWrappers = opfsVfs.ioSyncWrappers = util.nu({ xCheckReservedLock: function(pFile,pOut){ /** - As of late 2022, only a single lock can be held on an OPFS - file. We have no way of checking whether any _other_ db - connection has a lock except by trying to obtain and (on - success) release a sync-handle for it, but doing so would - involve an inherent race condition. For the time being, - pending a better solution, we simply report whether the - given pFile is open. - - Update 2024-06-12: based on forum discussions, this - function now always sets pOut to 0 (false): - - https://sqlite.org/forum/forumpost/a2f573b00cda1372 + After consultation with a topic expert: "opfs-wl" will + continue to use the same no-op impl which "opfs" does + because: + + - xCheckReservedLock() is just a hint. If SQLite needs to + lock, it's still going to try to lock. + + - We cannot do this check synchronously in "opfs-wl", + so would need to pass it to the async proxy. That would + make it inordinately expensive considering that it's + just a hint. + + See: forum:a2f573b00cda1372 */ wasm.poke(pOut, 0, 'i32'); return 0; @@ -15768,7 +19163,7 @@ const installOpfsVfs = function callee(options){ }, xFileControl: function(pFile, opId, pArg){ /*mTimeStart('xFileControl'); - mTimeEnd();*/ + mTimeEnd();*/ return capi.SQLITE_NOTFOUND; }, xFileSize: function(pFile,pSz64){ @@ -15786,25 +19181,8 @@ const installOpfsVfs = function callee(options){ mTimeEnd(); return rc; }, - xLock: function(pFile,lockType){ - mTimeStart('xLock'); - const f = __openFiles[pFile]; - let rc = 0; - /* All OPFS locks are exclusive locks. If xLock() has - previously succeeded, do nothing except record the lock - type. If no lock is active, have the async counterpart - lock the file. */ - if( !f.lockType ) { - rc = opRun('xLock', pFile, lockType); - if( 0===rc ) f.lockType = lockType; - }else{ - f.lockType = lockType; - } - mTimeEnd(); - return rc; - }, xRead: function(pFile,pDest,n,offset64){ - mTimeStart('xRead'); + mTimeStart('xRead'); const f = __openFiles[pFile]; let rc; try { @@ -15815,7 +19193,7 @@ const installOpfsVfs = function callee(options){ Because the heap is _not_ a SharedArrayBuffer, we have to copy the results. TypedArray.set() seems to be the fastest way to copy this. */ - wasm.heap8u().set(f.sabView.subarray(0, n), pDest); + wasm.heap8u().set(f.sabView.subarray(0, n), Number(pDest)); } }catch(e){ error("xRead(",arguments,") failed:",e,f); @@ -15826,7 +19204,6 @@ const installOpfsVfs = function callee(options){ }, xSync: function(pFile,flags){ mTimeStart('xSync'); - ++metrics.xSync.count; const rc = opRun('xSync', pFile, flags); mTimeEnd(); return rc; @@ -15837,24 +19214,14 @@ const installOpfsVfs = function callee(options){ mTimeEnd(); return rc; }, - xUnlock: function(pFile,lockType){ - mTimeStart('xUnlock'); - const f = __openFiles[pFile]; - let rc = 0; - if( capi.SQLITE_LOCK_NONE === lockType - && f.lockType ){ - rc = opRun('xUnlock', pFile, lockType); - } - if( 0===rc ) f.lockType = lockType; - mTimeEnd(); - return rc; - }, xWrite: function(pFile,pSrc,n,offset64){ mTimeStart('xWrite'); const f = __openFiles[pFile]; let rc; try { - f.sabView.set(wasm.heap8u().subarray(pSrc, pSrc+n)); + f.sabView.set(wasm.heap8u().subarray( + Number(pSrc), Number(pSrc) + n + )); rc = opRun('xWrite', pFile, n, Number(offset64)); }catch(e){ error("xWrite(",arguments,") failed:",e,f); @@ -15863,23 +19230,21 @@ const installOpfsVfs = function callee(options){ mTimeEnd(); return rc; } - }/*ioSyncWrappers*/; + })/*ioSyncWrappers*/; /** Impls for the sqlite3_vfs methods. Maintenance reminder: members are in alphabetical order to simplify finding them. */ - const vfsSyncWrappers = { + const vfsSyncWrappers = opfsVfs.vfsSyncWrappers = { xAccess: function(pVfs,zName,flags,pOut){ - mTimeStart('xAccess'); + mTimeStart('xAccess'); const rc = opRun('xAccess', wasm.cstrToJs(zName)); wasm.poke( pOut, (rc ? 0 : 1), 'i32' ); mTimeEnd(); return 0; }, xCurrentTime: function(pVfs,pOut){ - /* If it turns out that we need to adjust for timezone, see: - https://stackoverflow.com/a/11760121/1458521 */ wasm.poke(pOut, 2440587.5 + (new Date().getTime()/86400000), 'double'); return 0; @@ -15903,18 +19268,22 @@ const installOpfsVfs = function callee(options){ /*CANTOPEN is required by the docs but SQLITE_RANGE would be a closer match*/; }, xGetLastError: function(pVfs,nOut,pOut){ - /* TODO: store exception.message values from the async - partner in a dedicated SharedArrayBuffer, noting that we'd have - to encode them... TextEncoder can do that for us. */ - warn("OPFS xGetLastError() has nothing sensible to return."); + /* Mutex use in the overlying APIs cause xGetLastError() to + not be terribly useful for us. e.g. it can't be used to + convey error messages from xOpen() because there would be a + race condition between sqlite3_open()'s call to xOpen() and + this function. */ + sqlite3.config.warn("OPFS xGetLastError() has nothing sensible to return."); return 0; }, //xSleep is optionally defined below xOpen: function f(pVfs, zName, pFile, flags, pOutFlags){ mTimeStart('xOpen'); let opfsFlags = 0; - if(0===zName){ - zName = randomFilename(); + let jzName, zToFree; + if( !zName ){ + jzName = opfsUtil.randomFilename(); + zName = zToFree = wasm.allocCString(jzName); }else if(wasm.isPtr(zName)){ if(capi.sqlite3_uri_boolean(zName, "opfs-unlock-asap", 0)){ /* -----------------------^^^^^ MUST pass the untranslated @@ -15924,18 +19293,24 @@ const installOpfsVfs = function callee(options){ if(capi.sqlite3_uri_boolean(zName, "delete-before-open", 0)){ opfsFlags |= state.opfsFlags.OPFS_UNLINK_BEFORE_OPEN; } - zName = wasm.cstrToJs(zName); - //warn("xOpen zName =",zName, "opfsFlags =",opfsFlags); - } - const fh = Object.create(null); - fh.fid = pFile; - fh.filename = zName; - fh.sab = new SharedArrayBuffer(state.fileBufferSize); - fh.flags = flags; - fh.readOnly = !(sqlite3.SQLITE_OPEN_CREATE & flags) - && !!(flags & capi.SQLITE_OPEN_READONLY); - const rc = opRun('xOpen', pFile, zName, flags, opfsFlags); - if(!rc){ + jzName = wasm.cstrToJs(zName); + //sqlite3.config.warn("xOpen zName =",zName, "opfsFlags =",opfsFlags); + }else{ + sqlite3.config.error("Impossible zName value in xOpen?", zName); + return capi.SQLITE_CANTOPEN; + } + const fh = util.nu({ + fid: pFile, + filename: jzName, + sab: new SharedArrayBuffer(state.fileBufferSize), + flags: flags, + readOnly: !(capi.SQLITE_OPEN_CREATE & flags) + && !!(flags & capi.SQLITE_OPEN_READONLY) + }); + const rc = opRun('xOpen', pFile, jzName, flags, opfsFlags); + if(rc){ + if( zToFree ) wasm.dealloc(zToFree); + }else{ /* Recall that sqlite3_vfs::xClose() will be called, even on error, unless pFile->pMethods is NULL. */ if(fh.readOnly){ @@ -15943,7 +19318,8 @@ const installOpfsVfs = function callee(options){ } __openFiles[pFile] = fh; fh.sabView = state.sabFileBufView; - fh.sq3File = new sqlite3_file(pFile); + fh.sq3File = new capi.sqlite3_file(pFile); + if( zToFree ) fh.sq3File.addOnDispose(zToFree); fh.sq3File.$pMethods = opfsIoMethods.pointer; fh.lockType = capi.SQLITE_LOCK_NONE; } @@ -15952,16 +19328,20 @@ const installOpfsVfs = function callee(options){ }/*xOpen()*/ }/*vfsSyncWrappers*/; - if(dVfs){ + const pDVfs = capi.sqlite3_vfs_find(null)/*pointer to default VFS*/; + if(pDVfs){ + const dVfs = new capi.sqlite3_vfs(pDVfs); opfsVfs.$xRandomness = dVfs.$xRandomness; opfsVfs.$xSleep = dVfs.$xSleep; + dVfs.dispose(); } if(!opfsVfs.$xRandomness){ /* If the default VFS has no xRandomness(), add a basic JS impl... */ - vfsSyncWrappers.xRandomness = function(pVfs, nOut, pOut){ + opfsVfs.vfsSyncWrappers.xRandomness = function(pVfs, nOut, pOut){ const heap = wasm.heap8u(); let i = 0; - for(; i < nOut; ++i) heap[pOut + i] = (Math.random()*255000) & 0xFF; + const npOut = Number(pOut); + for(; i < nOut; ++i) heap[npOut + i] = (Math.random()*255000) & 0xFF; return i; }; } @@ -15969,501 +19349,550 @@ const installOpfsVfs = function callee(options){ /* If we can inherit an xSleep() impl from the default VFS then assume it's sane and use it, otherwise install a JS-based one. */ - vfsSyncWrappers.xSleep = function(pVfs,ms){ + opfsVfs.vfsSyncWrappers.xSleep = function(pVfs,ms){ + mTimeStart('xSleep'); Atomics.wait(state.sabOPView, state.opIds.xSleep, 0, ms); + mTimeEnd(); return 0; }; } - /** - Expects an OPFS file path. It gets resolved, such that ".." - components are properly expanded, and returned. If the 2nd arg - is true, the result is returned as an array of path elements, - else an absolute path string is returned. - */ - opfsUtil.getResolvedPath = function(filename,splitIt){ - const p = new URL(filename, "file://irrelevant").pathname; - return splitIt ? p.split('/').filter((v)=>!!v) : p; - }; +const initS11n = function(){ + /** + This proxy de/serializes cross-thread function arguments and + output-pointer values via the state.sabIO SharedArrayBuffer, + using the region defined by (state.sabS11nOffset, + state.sabS11nOffset + state.sabS11nSize]. Only one dataset is + recorded at a time. - /** - Takes the absolute path to a filesystem element. Returns an - array of [handleOfContainingDir, filename]. If the 2nd argument - is truthy then each directory element leading to the file is - created along the way. Throws if any creation or resolution - fails. - */ - opfsUtil.getDirForFilename = async function f(absFilename, createDirs = false){ - const path = opfsUtil.getResolvedPath(absFilename, true); - const filename = path.pop(); - let dh = opfsUtil.rootDirectory; - for(const dirName of path){ - if(dirName){ - dh = await dh.getDirectoryHandle(dirName, {create: !!createDirs}); - } - } - return [dh, filename]; - }; + This is not a general-purpose format. It only supports the + range of operations, and data sizes, needed by the + sqlite3_vfs and sqlite3_io_methods operations. Serialized + data are transient and this serialization algorithm may + change at any time. - /** - Creates the given directory name, recursively, in - the OPFS filesystem. Returns true if it succeeds or the - directory already exists, else false. - */ - opfsUtil.mkdir = async function(absDirName){ - try { - await opfsUtil.getDirForFilename(absDirName+"/filepart", true); - return true; - }catch(e){ - //sqlite3.config.warn("mkdir(",absDirName,") failed:",e); - return false; - } - }; - /** - Checks whether the given OPFS filesystem entry exists, - returning true if it does, false if it doesn't or if an - exception is intercepted while trying to make the - determination. - */ - opfsUtil.entryExists = async function(fsEntryName){ - try { - const [dh, fn] = await opfsUtil.getDirForFilename(fsEntryName); - await dh.getFileHandle(fn); - return true; - }catch(e){ - return false; - } - }; + The data format can be succinctly summarized as: - /** - Generates a random ASCII string, intended for use as a - temporary file name. Its argument is the length of the string, - defaulting to 16. - */ - opfsUtil.randomFilename = randomFilename; + Nt...Td...D - /** - Returns a promise which resolves to an object which represents - all files and directories in the OPFS tree. The top-most object - has two properties: `dirs` is an array of directory entries - (described below) and `files` is a list of file names for all - files in that directory. + Where: - Traversal starts at sqlite3.opfs.rootDirectory. + - N = number of entries (1 byte) - Each `dirs` entry is an object in this form: + - t = type ID of first argument (1 byte) - ``` - { name: directoryName, - dirs: [...subdirs], - files: [...file names] - } - ``` + - ...T = type IDs of the 2nd and subsequent arguments (1 byte + each). - The `files` and `subdirs` entries are always set but may be - empty arrays. + - d = raw bytes of first argument (per-type size). - The returned object has the same structure but its `name` is - an empty string. All returned objects are created with - Object.create(null), so have no prototype. + - ...D = raw bytes of the 2nd and subsequent arguments (per-type + size). - Design note: the entries do not contain more information, - e.g. file sizes, because getting such info is not only - expensive but is subject to locking-related errors. - */ - opfsUtil.treeList = async function(){ - const doDir = async function callee(dirHandle,tgt){ - tgt.name = dirHandle.name; - tgt.dirs = []; - tgt.files = []; - for await (const handle of dirHandle.values()){ - if('directory' === handle.kind){ - const subDir = Object.create(null); - tgt.dirs.push(subDir); - await callee(handle, subDir); - }else{ - tgt.files.push(handle.name); - } - } - }; - const root = Object.create(null); - await doDir(opfsUtil.rootDirectory, root); - return root; - }; + All types except strings have fixed sizes. Strings are stored + using their TextEncoder/TextDecoder representations. It would + arguably make more sense to store them as Int16Arrays of + their JS character values, but how best/fastest to get that + in and out of string form is an open point. Initial + experimentation with that approach did not gain us any speed. - /** - Irrevocably deletes _all_ files in the current origin's OPFS. - Obviously, this must be used with great caution. It may throw - an exception if removal of anything fails (e.g. a file is - locked), but the precise conditions under which the underlying - APIs will throw are not documented (so we cannot tell you what - they are). - */ - opfsUtil.rmfr = async function(){ - const dir = opfsUtil.rootDirectory, opt = {recurse: true}; - for await (const handle of dir.values()){ - dir.removeEntry(handle.name, opt); + Historical note: this impl was initially about 1% this size by + using using JSON.stringify/parse(), but using fit-to-purpose + serialization saves considerable runtime. + */ + if(state.s11n) return state.s11n; + const textDecoder = new TextDecoder(), + textEncoder = new TextEncoder('utf-8'), + viewU8 = new Uint8Array(state.sabIO, state.sabS11nOffset, state.sabS11nSize), + viewDV = new DataView(state.sabIO, state.sabS11nOffset, state.sabS11nSize); + state.s11n = Object.create(null); + /* Only arguments and return values of these types may be + serialized. This covers the whole range of types needed by the + sqlite3_vfs API. */ + const TypeIds = Object.create(null); + TypeIds.number = { id: 1, size: 8, getter: 'getFloat64', setter: 'setFloat64' }; + TypeIds.bigint = { id: 2, size: 8, getter: 'getBigInt64', setter: 'setBigInt64' }; + TypeIds.boolean = { id: 3, size: 4, getter: 'getInt32', setter: 'setInt32' }; + TypeIds.string = { id: 4 }; + + const getTypeId = (v)=>( + TypeIds[typeof v] + || toss("Maintenance required: this value type cannot be serialized.",v) + ); + const getTypeIdById = (tid)=>{ + switch(tid){ + case TypeIds.number.id: return TypeIds.number; + case TypeIds.bigint.id: return TypeIds.bigint; + case TypeIds.boolean.id: return TypeIds.boolean; + case TypeIds.string.id: return TypeIds.string; + default: toss("Invalid type ID:",tid); + } + }; + + /** + Returns an array of the deserialized state stored by the most + recent serialize() operation (from this thread or the + counterpart thread), or null if the serialization buffer is + empty. If passed a truthy argument, the serialization buffer + is cleared after deserialization. + */ + state.s11n.deserialize = function(clear=false){ + const t = performance.now(); + const argc = viewU8[0]; + const rc = argc ? [] : null; + if(argc){ + const typeIds = []; + let offset = 1, i, n, v; + for(i = 0; i < argc; ++i, ++offset){ + typeIds.push(getTypeIdById(viewU8[offset])); } - }; + for(i = 0; i < argc; ++i){ + const t = typeIds[i]; + if(t.getter){ + v = viewDV[t.getter](offset, state.littleEndian); + offset += t.size; + }else{/*String*/ + n = viewDV.getInt32(offset, state.littleEndian); + offset += 4; + v = textDecoder.decode(viewU8.slice(offset, offset+n)); + offset += n; + } + rc.push(v); + } + } + if(clear) viewU8[0] = 0; + //log("deserialize:",argc, rc); + return rc; + }; - /** - Deletes the given OPFS filesystem entry. As this environment - has no notion of "current directory", the given name must be an - absolute path. If the 2nd argument is truthy, deletion is - recursive (use with caution!). - - The returned Promise resolves to true if the deletion was - successful, else false (but...). The OPFS API reports the - reason for the failure only in human-readable form, not - exceptions which can be type-checked to determine the - failure. Because of that... - - If the final argument is truthy then this function will - propagate any exception on error, rather than returning false. - */ - opfsUtil.unlink = async function(fsEntryName, recursive = false, - throwOnError = false){ - try { - const [hDir, filenamePart] = - await opfsUtil.getDirForFilename(fsEntryName, false); - await hDir.removeEntry(filenamePart, {recursive}); - return true; - }catch(e){ - if(throwOnError){ - throw new Error("unlink(",arguments[0],") failed: "+e.message,{ - cause: e - }); + /** + Serializes all arguments to the shared buffer for consumption + by the counterpart thread. + + This routine is only intended for serializing OPFS VFS + arguments and (in at least one special case) result values, + and the buffer is sized to be able to comfortably handle + those. + + If passed no arguments then it zeroes out the serialization + state. + */ + state.s11n.serialize = function(...args){ + const t = performance.now(); + if(args.length){ + //log("serialize():",args); + const typeIds = []; + let i = 0, offset = 1; + viewU8[0] = args.length & 0xff /* header = # of args */; + for(; i < args.length; ++i, ++offset){ + /* Write the TypeIds.id value into the next args.length + bytes. */ + typeIds.push(getTypeId(args[i])); + viewU8[offset] = typeIds[i].id; + } + for(i = 0; i < args.length; ++i) { + /* Deserialize the following bytes based on their + corresponding TypeIds.id from the header. */ + const t = typeIds[i]; + if(t.setter){ + viewDV[t.setter](offset, args[i], state.littleEndian); + offset += t.size; + }else{/*String*/ + const s = textEncoder.encode(args[i]); + viewDV.setInt32(offset, s.byteLength, state.littleEndian); + offset += 4; + viewU8.set(s, offset); + offset += s.byteLength; } - return false; } - }; + //log("serialize() result:",viewU8.slice(0,offset)); + }else{ + viewU8[0] = 0; + } + }; + + + return state.s11n; +}/*initS11n()*/; + opfsVfs.initS11n = initS11n; /** - Traverses the OPFS filesystem, calling a callback for each - entry. The argument may be either a callback function or an - options object with any of the following properties: - - - `callback`: function which gets called for each filesystem - entry. It gets passed 3 arguments: 1) the - FileSystemFileHandle or FileSystemDirectoryHandle of each - entry (noting that both are instanceof FileSystemHandle). 2) - the FileSystemDirectoryHandle of the parent directory. 3) the - current depth level, with 0 being at the top of the tree - relative to the starting directory. If the callback returns a - literal false, as opposed to any other falsy value, traversal - stops without an error. Any exceptions it throws are - propagated. Results are undefined if the callback manipulate - the filesystem (e.g. removing or adding entries) because the - how OPFS iterators behave in the face of such changes is - undocumented. - - - `recursive` [bool=true]: specifies whether to recurse into - subdirectories or not. Whether recursion is depth-first or - breadth-first is unspecified! - - - `directory` [FileSystemDirectoryEntry=sqlite3.opfs.rootDirectory] - specifies the starting directory. - - If this function is passed a function, it is assumed to be the - callback. - - Returns a promise because it has to (by virtue of being async) - but that promise has no specific meaning: the traversal it - performs is synchronous. The promise must be used to catch any - exceptions propagated by the callback, however. + To be called by the VFS's main installation routine after it has + wired up enough state to provide its overridden io-method impls + (which must be properties of the ioMethods argument). Returns a + Promise which the installation routine must return. callback must + be a function which performs any post-bootstrap touchups, namely + plugging in a sqlite3.oo1 wrapper. It is passed (sqlite3, opfsVfs), + where opfsVfs is the sqlite3_vfs object which was set up by + opfsUtil.createVfsState(). */ - opfsUtil.traverse = async function(opt){ - const defaultOpt = { - recursive: true, - directory: opfsUtil.rootDirectory - }; - if('function'===typeof opt){ - opt = {callback:opt}; - } - opt = Object.assign(defaultOpt, opt||{}); - const doDir = async function callee(dirHandle, depth){ - for await (const handle of dirHandle.values()){ - if(false === opt.callback(handle, dirHandle, depth)) return false; - else if(opt.recursive && 'directory' === handle.kind){ - if(false === await callee(handle, depth + 1)) break; + opfsVfs.bindVfs = function(ioMethods, callback){ + Object.assign(opfsVfs.ioSyncWrappers, ioMethods); + const thePromise = new Promise(function(promiseResolve_, promiseReject_){ + let promiseWasRejected = undefined; + const promiseReject = (err)=>{ + promiseWasRejected = true; + opfsVfs.dispose(); + return promiseReject_(err); + }; + const promiseResolve = ()=>{ + try{ + callback(sqlite3, opfsVfs); + }catch(e){ + return promiseReject(e); } - } - }; - doDir(opt.directory, 0); - }; + promiseWasRejected = false; + return promiseResolve_(sqlite3); + }; + const options = opfsUtil.options; + const proxyUri = options.proxyUri +( + (options.proxyUri.indexOf('?')<0) ? '?' : '&' + )+'vfs='+vfsName; + //sqlite3.config.error("proxyUri",options.proxyUri, (new Error())); + const W = opfsVfs.worker = + new Worker(proxyUri); + let zombieTimer = setTimeout(()=>{ + /* At attempt to work around a browser-specific quirk in which + the Worker load is failing in such a way that we neither + resolve nor reject it. This workaround gives that resolve/reject + a time limit and rejects if that timer expires. Discussion: + https://sqlite.org/forum/forumpost/a708c98dcb3ef */ + if(undefined===promiseWasRejected){ + promiseReject( + new Error("Timeout while waiting for OPFS async proxy worker.") + ); + } + }, 4000); + W._originalOnError = W.onerror /* will be restored later */; + W.onerror = function(err){ + // The error object doesn't contain any useful info when the + // failure is, e.g., that the remote script is 404. + error("Error initializing OPFS asyncer:",err); + promiseReject(new Error("Loading OPFS async Worker failed for unknown reasons.")); + }; + + const opRun = opfsVfs.opRun; + + const sanityCheck = function(){ + const scope = wasm.scopedAllocPush(); + const sq3File = new capi.sqlite3_file(); + try{ + const fid = sq3File.pointer; + const openFlags = capi.SQLITE_OPEN_CREATE + | capi.SQLITE_OPEN_READWRITE + //| capi.SQLITE_OPEN_DELETEONCLOSE + | capi.SQLITE_OPEN_MAIN_DB; + const pOut = wasm.scopedAlloc(8); + const dbFile = "/sanity/check/file"+opfsUtil.randomFilename(8); + const zDbFile = wasm.scopedAllocCString(dbFile); + let rc; + state.s11n.serialize("This is ä string."); + rc = state.s11n.deserialize(); + log("deserialize() says:",rc); + if("This is ä string."!==rc[0]) toss("String d13n error."); + opfsVfs.vfsSyncWrappers.xAccess(opfsVfs.pointer, zDbFile, 0, pOut); + rc = wasm.peek(pOut,'i32'); + log("xAccess(",dbFile,") exists ?=",rc); + rc = opfsVfs.vfsSyncWrappers.xOpen(opfsVfs.pointer, zDbFile, + fid, openFlags, pOut); + log("open rc =",rc,"state.sabOPView[xOpen] =", + state.sabOPView[state.opIds.xOpen]); + if(0!==rc){ + error("open failed with code",rc); + return; + } + opfsVfs.vfsSyncWrappers.xAccess(opfsVfs.pointer, zDbFile, 0, pOut); + rc = wasm.peek(pOut,'i32'); + if(!rc) toss("xAccess() failed to detect file."); + rc = opfsVfs.ioSyncWrappers.xSync(sq3File.pointer, 0); + if(rc) toss('sync failed w/ rc',rc); + rc = opfsVfs.ioSyncWrappers.xTruncate(sq3File.pointer, 1024); + if(rc) toss('truncate failed w/ rc',rc); + wasm.poke(pOut,0,'i64'); + rc = opfsVfs.ioSyncWrappers.xFileSize(sq3File.pointer, pOut); + if(rc) toss('xFileSize failed w/ rc',rc); + log("xFileSize says:",wasm.peek(pOut, 'i64')); + rc = opfsVfs.ioSyncWrappers.xWrite(sq3File.pointer, zDbFile, 10, 1); + if(rc) toss("xWrite() failed!"); + const readBuf = wasm.scopedAlloc(16); + rc = opfsVfs.ioSyncWrappers.xRead(sq3File.pointer, readBuf, 6, 2); + wasm.poke(readBuf+6,0); + let jRead = wasm.cstrToJs(readBuf); + log("xRead() got:",jRead); + if("sanity"!==jRead) toss("Unexpected xRead() value."); + if(opfsVfs.vfsSyncWrappers.xSleep){ + log("xSleep()ing before close()ing..."); + opfsVfs.vfsSyncWrappers.xSleep(opfsVfs.pointer,2000); + log("waking up from xSleep()"); + } + rc = opfsVfs.ioSyncWrappers.xClose(fid); + log("xClose rc =",rc,"sabOPView =",state.sabOPView); + log("Deleting file:",dbFile); + opfsVfs.vfsSyncWrappers.xDelete(opfsVfs.pointer, zDbFile, 0x1234); + opfsVfs.vfsSyncWrappers.xAccess(opfsVfs.pointer, zDbFile, 0, pOut); + rc = wasm.peek(pOut,'i32'); + if(rc) toss("Expecting 0 from xAccess(",dbFile,") after xDelete()."); + warn("End of OPFS sanity checks."); + }finally{ + sq3File.dispose(); + wasm.scopedAllocPop(scope); + } + }/*sanityCheck()*/; + + W.onmessage = function({data}){ + //sqlite3.config.warn(vfsName,"Worker.onmessage:",data); + switch(data.type){ + case 'opfs-unavailable': + /* Async proxy has determined that OPFS is unavailable. There's + nothing more for us to do here. */ + promiseReject(new Error(data.payload.join(' '))); + break; + case 'opfs-async-loaded': + /* Arrives as soon as the asyc proxy finishes loading. + Pass our config and shared state on to the async + worker. */ + delete state.vfs; + W.postMessage({type: 'opfs-async-init', args: util.nu(state)}); + break; + case 'opfs-async-inited': { + /* Indicates that the async partner has received the 'init' + and has finished initializing, so the real work can + begin... */ + if(true===promiseWasRejected){ + break /* promise was already rejected via timer */; + } + clearTimeout(zombieTimer); + zombieTimer = null; + try { + sqlite3.vfs.installVfs({ + io: {struct: opfsVfs.ioMethods, methods: opfsVfs.ioSyncWrappers}, + vfs: {struct: opfsVfs, methods: opfsVfs.vfsSyncWrappers} + }); + state.sabOPView = new Int32Array(state.sabOP); + state.sabFileBufView = new Uint8Array(state.sabIO, 0, state.fileBufferSize); + state.sabS11nView = new Uint8Array(state.sabIO, state.sabS11nOffset, state.sabS11nSize); + opfsVfs.initS11n(); + opfsVfs.initS11n = null; + if(options.sanityChecks){ + warn("Running sanity checks because of opfs-sanity-check URL arg..."); + sanityCheck(); + } + if(opfsUtil.thisThreadHasOPFS()){ + opfsUtil.getRootDir().then((d)=>{ + W.onerror = W._originalOnError; + delete W._originalOnError; + log("End of OPFS sqlite3_vfs setup.", opfsVfs); + promiseResolve(); + }).catch(promiseReject); + }else{ + promiseResolve(); + } + }catch(e){ + error(e); + promiseReject(e); + } + break; + } + case 'debug': + warn("debug message from worker:",data); + break; + default: { + const errMsg = ( + "Unexpected message from the OPFS async worker: " + + JSON.stringify(data) + ); + error(errMsg); + promiseReject(new Error(errMsg)); + break; + } + }/*switch(data.type)*/ + }/*W.onmessage()*/; + })/*thePromise*/; + return thePromise; + }/*bindVfs()*/; + + return state; + }/*createVfsState()*/; + +}/*sqlite3ApiBootstrap.initializers*/); +/* + 2022-09-18 + + The author disclaims copyright to this source code. In place of a + legal notice, here is a blessing: + + * May you do good and not evil. + * May you find forgiveness for yourself and forgive others. + * May you share freely, never taking more than you give. + + *********************************************************************** + + This file holds the synchronous half of an sqlite3_vfs + implementation which proxies, in a synchronous fashion, the + asynchronous Origin-Private FileSystem (OPFS) APIs using a second + Worker, implemented in sqlite3-opfs-async-proxy.js. This file is + intended to be appended to the main sqlite3 JS deliverable somewhere + after sqlite3-api-oo1.js. +*/ +'use strict'; +globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ + if( !sqlite3.opfs || sqlite3.config.disable?.vfs?.opfs ){ + return; + } + const util = sqlite3.util, + opfsUtil = sqlite3.opfs || sqlite3.util.toss("Missing sqlite3.opfs"); + /** + installOpfsVfs() returns a Promise which, on success, installs an + sqlite3_vfs named "opfs", suitable for use with all sqlite3 APIs + which accept a VFS. It is intended to be called via + sqlite3ApiBootstrap.initializers or an equivalent mechanism. + + The installed VFS uses the Origin-Private FileSystem API for + all file storage. On error it is rejected with an exception + explaining the problem. Reasons for rejection include, but are + not limited to: + + - The counterpart Worker (see below) could not be loaded. + + - The environment does not support OPFS. That includes when + this function is called from the main window thread. + + Significant notes and limitations: + + - The OPFS features used here are only available in dedicated Worker + threads. This file tries to detect that case, resulting in a + rejected Promise if those features do not seem to be available. + + - It requires the SharedArrayBuffer and Atomics classes, and the + former is only available if the HTTP server emits the so-called + COOP and COEP response headers. These features are required for + proxying OPFS's synchronous API via the synchronous interface + required by the sqlite3_vfs API. + + - This function may only be called a single time. When called, this + function removes itself from the sqlite3 object. + + All arguments to this function are for internal/development purposes + only. They do not constitute a public API and may change at any + time. + + The argument may optionally be a plain object with the following + configuration options: + + - proxyUri: name of the async proxy JS file or a synchronous function + which, when called, returns such a name. + + - verbose (=2): an integer 0-3. 0 disables all logging, 1 enables + logging of errors. 2 enables logging of warnings and errors. 3 + additionally enables debugging info. Logging is performed + via the sqlite3.config.{log|warn|error}() functions. - /** - impl of importDb() when it's given a function as its second - argument. - */ - const importDbChunked = async function(filename, callback){ - const [hDir, fnamePart] = await opfsUtil.getDirForFilename(filename, true); - const hFile = await hDir.getFileHandle(fnamePart, {create:true}); - let sah = await hFile.createSyncAccessHandle(); - let nWrote = 0, chunk, checkedHeader = false, err = false; - try{ - sah.truncate(0); - while( undefined !== (chunk = await callback()) ){ - if(chunk instanceof ArrayBuffer) chunk = new Uint8Array(chunk); - if( 0===nWrote && chunk.byteLength>=15 ){ - util.affirmDbHeader(chunk); - checkedHeader = true; - } - sah.write(chunk, {at: nWrote}); - nWrote += chunk.byteLength; - } - if( nWrote < 512 || 0!==nWrote % 512 ){ - toss("Input size",nWrote,"is not correct for an SQLite database."); - } - if( !checkedHeader ){ - const header = new Uint8Array(20); - sah.read( header, {at: 0} ); - util.affirmDbHeader( header ); - } - sah.write(new Uint8Array([1,1]), {at: 18}/*force db out of WAL mode*/); - return nWrote; - }catch(e){ - await sah.close(); - sah = undefined; - await hDir.removeEntry( fnamePart ).catch(()=>{}); - throw e; - }finally { - if( sah ) await sah.close(); - } - }; + - sanityChecks (=false): if true, some basic sanity tests are run on + the OPFS VFS API after it's initialized, before the returned + Promise resolves. This is only intended for testing and + development of the VFS, not client-side use. - /** - Asynchronously imports the given bytes (a byte array or - ArrayBuffer) into the given database file. - - Results are undefined if the given db name refers to an opened - db. - - If passed a function for its second argument, its behaviour - changes: imports its data in chunks fed to it by the given - callback function. It calls the callback (which may be async) - repeatedly, expecting either a Uint8Array or ArrayBuffer (to - denote new input) or undefined (to denote EOF). For so long as - the callback continues to return non-undefined, it will append - incoming data to the given VFS-hosted database file. When - called this way, the resolved value of the returned Promise is - the number of bytes written to the target file. - - It very specifically requires the input to be an SQLite3 - database and throws if that's not the case. It does so in - order to prevent this function from taking on a larger scope - than it is specifically intended to. i.e. we do not want it to - become a convenience for importing arbitrary files into OPFS. - - This routine rewrites the database header bytes in the output - file (not the input array) to force disabling of WAL mode. - - On error this throws and the state of the input file is - undefined (it depends on where the exception was triggered). - - On success, resolves to the number of bytes written. - */ - opfsUtil.importDb = async function(filename, bytes){ - if( bytes instanceof Function ){ - return importDbChunked(filename, bytes); + Additionaly, the (officially undocumented) 'opfs-disable' URL + argument will disable OPFS, making this function a no-op. + + On success, the Promise resolves to the top-most sqlite3 namespace + object. Success does not necessarily mean that it installs the VFS, + as there are legitimate non-error reasons for OPFS not to be + available. +*/ +const installOpfsVfs = async function(options){ + options = opfsUtil.initOptions('opfs',options); + if( !options ) return sqlite3; + const capi = sqlite3.capi, + state = opfsUtil.createVfsState(), + opfsVfs = state.vfs, + metrics = opfsVfs.metrics.counters, + mTimeStart = opfsVfs.mTimeStart, + mTimeEnd = opfsVfs.mTimeEnd, + opRun = opfsVfs.opRun, + debug = (...args)=>sqlite3.config.debug("opfs:",...args), + warn = (...args)=>sqlite3.config.warn("opfs:",...args), + __openFiles = opfsVfs.__openFiles; + + //debug("options:",JSON.stringify(options)); + /* + At this point, createVfsState() has populated: + + - state: the configuration object we share with the async proxy. + + - opfsVfs: an sqlite3_vfs instance with lots of JS state attached + to it. + + with any code common to both the "opfs" and "opfs-wl" VFSes. Now + comes the VFS-dependent work... + */ + return opfsVfs.bindVfs(util.nu({ + xLock: function(pFile,lockType){ + mTimeStart('xLock'); + ++metrics.xLock.count; + const f = __openFiles[pFile]; + let rc = 0; + /* All OPFS locks are exclusive locks. If xLock() has + previously succeeded, do nothing except record the lock + type. If no lock is active, have the async counterpart + lock the file. */ + if( f.lockType ) { + f.lockType = lockType; + }else{ + rc = opRun('xLock', pFile, lockType); + if( 0===rc ) f.lockType = lockType; } - if(bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes); - util.affirmIsDb(bytes); - const n = bytes.byteLength; - const [hDir, fnamePart] = await opfsUtil.getDirForFilename(filename, true); - let sah, err, nWrote = 0; - try { - const hFile = await hDir.getFileHandle(fnamePart, {create:true}); - sah = await hFile.createSyncAccessHandle(); - sah.truncate(0); - nWrote = sah.write(bytes, {at: 0}); - if(nWrote != n){ - toss("Expected to write "+n+" bytes but wrote "+nWrote+"."); - } - sah.write(new Uint8Array([1,1]), {at: 18}) /* force db out of WAL mode */; - return nWrote; - }catch(e){ - if( sah ){ await sah.close(); sah = undefined; } - await hDir.removeEntry( fnamePart ).catch(()=>{}); - throw e; - }finally{ - if( sah ) await sah.close(); + mTimeEnd(); + return rc; + }, + xUnlock: function(pFile,lockType){ + mTimeStart('xUnlock'); + ++metrics.xUnlock.count; + const f = __openFiles[pFile]; + let rc = 0; + if( capi.SQLITE_LOCK_NONE === lockType + && f.lockType ){ + rc = opRun('xUnlock', pFile, lockType); } - }; - + if( 0===rc ) f.lockType = lockType; + mTimeEnd(); + return rc; + } + }), function(sqlite3, vfs){ + /* Post-VFS-registration initialization... */ if(sqlite3.oo1){ const OpfsDb = function(...args){ const opt = sqlite3.oo1.DB.dbCtorHelper.normalizeArgs(...args); - opt.vfs = opfsVfs.$zName; + opt.vfs = vfs.$zName; sqlite3.oo1.DB.dbCtorHelper.call(this, opt); }; OpfsDb.prototype = Object.create(sqlite3.oo1.DB.prototype); sqlite3.oo1.OpfsDb = OpfsDb; OpfsDb.importDb = opfsUtil.importDb; - sqlite3.oo1.DB.dbCtorHelper.setVfsPostOpenCallback( - opfsVfs.pointer, - function(oo1Db, sqlite3){ - /* Set a relatively high default busy-timeout handler to - help OPFS dbs deal with multi-tab/multi-worker - contention. */ - sqlite3.capi.sqlite3_busy_timeout(oo1Db, 10000); - } - ); - }/*extend sqlite3.oo1*/ - - const sanityCheck = function(){ - const scope = wasm.scopedAllocPush(); - const sq3File = new sqlite3_file(); - try{ - const fid = sq3File.pointer; - const openFlags = capi.SQLITE_OPEN_CREATE - | capi.SQLITE_OPEN_READWRITE - //| capi.SQLITE_OPEN_DELETEONCLOSE - | capi.SQLITE_OPEN_MAIN_DB; - const pOut = wasm.scopedAlloc(8); - const dbFile = "/sanity/check/file"+randomFilename(8); - const zDbFile = wasm.scopedAllocCString(dbFile); - let rc; - state.s11n.serialize("This is ä string."); - rc = state.s11n.deserialize(); - log("deserialize() says:",rc); - if("This is ä string."!==rc[0]) toss("String d13n error."); - vfsSyncWrappers.xAccess(opfsVfs.pointer, zDbFile, 0, pOut); - rc = wasm.peek(pOut,'i32'); - log("xAccess(",dbFile,") exists ?=",rc); - rc = vfsSyncWrappers.xOpen(opfsVfs.pointer, zDbFile, - fid, openFlags, pOut); - log("open rc =",rc,"state.sabOPView[xOpen] =", - state.sabOPView[state.opIds.xOpen]); - if(0!==rc){ - error("open failed with code",rc); - return; - } - vfsSyncWrappers.xAccess(opfsVfs.pointer, zDbFile, 0, pOut); - rc = wasm.peek(pOut,'i32'); - if(!rc) toss("xAccess() failed to detect file."); - rc = ioSyncWrappers.xSync(sq3File.pointer, 0); - if(rc) toss('sync failed w/ rc',rc); - rc = ioSyncWrappers.xTruncate(sq3File.pointer, 1024); - if(rc) toss('truncate failed w/ rc',rc); - wasm.poke(pOut,0,'i64'); - rc = ioSyncWrappers.xFileSize(sq3File.pointer, pOut); - if(rc) toss('xFileSize failed w/ rc',rc); - log("xFileSize says:",wasm.peek(pOut, 'i64')); - rc = ioSyncWrappers.xWrite(sq3File.pointer, zDbFile, 10, 1); - if(rc) toss("xWrite() failed!"); - const readBuf = wasm.scopedAlloc(16); - rc = ioSyncWrappers.xRead(sq3File.pointer, readBuf, 6, 2); - wasm.poke(readBuf+6,0); - let jRead = wasm.cstrToJs(readBuf); - log("xRead() got:",jRead); - if("sanity"!==jRead) toss("Unexpected xRead() value."); - if(vfsSyncWrappers.xSleep){ - log("xSleep()ing before close()ing..."); - vfsSyncWrappers.xSleep(opfsVfs.pointer,2000); - log("waking up from xSleep()"); - } - rc = ioSyncWrappers.xClose(fid); - log("xClose rc =",rc,"sabOPView =",state.sabOPView); - log("Deleting file:",dbFile); - vfsSyncWrappers.xDelete(opfsVfs.pointer, zDbFile, 0x1234); - vfsSyncWrappers.xAccess(opfsVfs.pointer, zDbFile, 0, pOut); - rc = wasm.peek(pOut,'i32'); - if(rc) toss("Expecting 0 from xAccess(",dbFile,") after xDelete()."); - warn("End of OPFS sanity checks."); - }finally{ - sq3File.dispose(); - wasm.scopedAllocPop(scope); - } - }/*sanityCheck()*/; - - W.onmessage = function({data}){ - //log("Worker.onmessage:",data); - switch(data.type){ - case 'opfs-unavailable': - /* Async proxy has determined that OPFS is unavailable. There's - nothing more for us to do here. */ - promiseReject(new Error(data.payload.join(' '))); - break; - case 'opfs-async-loaded': - /* Arrives as soon as the asyc proxy finishes loading. - Pass our config and shared state on to the async - worker. */ - W.postMessage({type: 'opfs-async-init',args: state}); - break; - case 'opfs-async-inited': { - /* Indicates that the async partner has received the 'init' - and has finished initializing, so the real work can - begin... */ - if(true===promiseWasRejected){ - break /* promise was already rejected via timer */; - } - try { - sqlite3.vfs.installVfs({ - io: {struct: opfsIoMethods, methods: ioSyncWrappers}, - vfs: {struct: opfsVfs, methods: vfsSyncWrappers} - }); - state.sabOPView = new Int32Array(state.sabOP); - state.sabFileBufView = new Uint8Array(state.sabIO, 0, state.fileBufferSize); - state.sabS11nView = new Uint8Array(state.sabIO, state.sabS11nOffset, state.sabS11nSize); - initS11n(); - if(options.sanityChecks){ - warn("Running sanity checks because of opfs-sanity-check URL arg..."); - sanityCheck(); - } - if(thisThreadHasOPFS()){ - navigator.storage.getDirectory().then((d)=>{ - W.onerror = W._originalOnError; - delete W._originalOnError; - sqlite3.opfs = opfsUtil; - opfsUtil.rootDirectory = d; - log("End of OPFS sqlite3_vfs setup.", opfsVfs); - promiseResolve(); - }).catch(promiseReject); - }else{ - promiseResolve(); - } - }catch(e){ - error(e); - promiseReject(e); - } - break; - } - default: { - const errMsg = ( - "Unexpected message from the OPFS async worker: " + - JSON.stringify(data) - ); - error(errMsg); - promiseReject(new Error(errMsg)); - break; + if( true ){ + /* 2026-03-06: this was a design mis-decision and is + inconsistent with sqlite3_open() and friends, but is + retained against the risk of introducing regressions if + it's removed. */ + sqlite3.oo1.DB.dbCtorHelper.setVfsPostOpenCallback( + opfsVfs.pointer, + function(oo1Db, sqlite3){ + /* Set a relatively high default busy-timeout handler to + help OPFS dbs deal with multi-tab/multi-worker + contention. */ + sqlite3.capi.sqlite3_busy_timeout(oo1Db, 10000); } - }/*switch(data.type)*/ - }/*W.onmessage()*/; - })/*thePromise*/; - return thePromise; + ); + } + }/*extend sqlite3.oo1*/ + })/*bindVfs()*/; }/*installOpfsVfs()*/; -installOpfsVfs.defaultProxyUri = - "sqlite3-opfs-async-proxy.js"; globalThis.sqlite3ApiBootstrap.initializersAsync.push(async (sqlite3)=>{ - try{ - let proxyJs = installOpfsVfs.defaultProxyUri; - if(sqlite3.scriptInfo.sqlite3Dir){ - installOpfsVfs.defaultProxyUri = - sqlite3.scriptInfo.sqlite3Dir + proxyJs; - //sqlite3.config.warn("installOpfsVfs.defaultProxyUri =",installOpfsVfs.defaultProxyUri); - } - return installOpfsVfs().catch((e)=>{ - sqlite3.config.warn("Ignoring inability to install OPFS sqlite3_vfs:",e.message); - }); - }catch(e){ - sqlite3.config.error("installOpfsVfs() exception:",e); - return Promise.reject(e); - } + return installOpfsVfs().catch((e)=>{ + sqlite3.config.warn("Ignoring inability to install 'opfs' sqlite3_vfs:",e); + }) }); }/*sqlite3ApiBootstrap.initializers.push()*/); -/* END FILE: api/sqlite3-vfs-opfs.c-pp.js */ -/* BEGIN FILE: api/sqlite3-vfs-opfs-sahpool.c-pp.js */ /* 2023-07-14 @@ -16509,6 +19938,9 @@ globalThis.sqlite3ApiBootstrap.initializersAsync.push(async (sqlite3)=>{ - Also because of that, it does not require the SharedArrayBuffer, so can function without the COOP/COEP HTTP response headers. + - Also because of that, this one is much faster and the performance + gap increases as the job sizes increase. + - It can hypothetically support Safari 16.4+, whereas the "opfs" VFS requires v17 due to a subworker/storage bug in 16.x which makes it incompatible with that VFS. @@ -16520,6 +19952,10 @@ globalThis.sqlite3ApiBootstrap.initializersAsync.push(async (sqlite3)=>{ */ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ 'use strict'; + if( sqlite3.config.disable?.vfs?.['opfs-sahpool'] ){ + return; + } + const toss = sqlite3.util.toss; const toss3 = sqlite3.util.toss3; const initPromises = Object.create(null) /* cache of (name:result) of VFS init results */; @@ -16544,6 +19980,48 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ capi.SQLITE_OPEN_MAIN_JOURNAL | capi.SQLITE_OPEN_SUPER_JOURNAL | capi.SQLITE_OPEN_WAL; + const FLAG_COMPUTE_DIGEST_V2 = capi.SQLITE_OPEN_MEMORY + /* Part of the fix for + https://github.com/sqlite/sqlite-wasm/issues/97 + + Summary: prior to version 3.50.0 computeDigest() always computes + a value of [0,0] due to overflows, so it does not do anything + useful. Fixing it invalidates old persistent files, so we + instead only fix it for files created or updated since the bug + was discovered and fixed. + + This flag determines whether we use the broken legacy + computeDigest() or the v2 variant. We only use this flag for + newly-created/overwritten files. Pre-existing files have the + broken digest stored in them so need to continue to use that. + + What this means, in terms of db file compatibility between + versions: + + - DBs created with versions older than this fix (<3.50.0) + can be read by post-fix versions. Such DBs which are written + to in-place (not replaced) by newer versions can still be read + by older versions, as the affected digest is only modified + when the SAH slot is assigned to a given filename. + + - DBs created with post-fix versions will, when read by a pre-fix + version, be seen as having a "bad digest" and will be + unceremoniously replaced by that pre-fix version. When swapping + back to a post-fix version, that version will see that the file + entry is missing the FLAG_COMPUTE_DIGEST_V2 bit so will treat it + as a legacy file. + + This flag is stored in the same memory as the various + SQLITE_OPEN_... flags and we must be careful here to not use a + flag bit which is otherwise relevant for the VFS. + SQLITE_OPEN_MEMORY is handled by sqlite3_open_v2() and friends, + not the VFS, so we'll repurpose that one. If we take a + currently-unused bit and it ends up, at some later point, being + used, we would have to invalidate existing VFS files in order to + move to another bit. Similarly, if the SQLITE_OPEN_MEMORY bit + were ever reassigned (which it won't be!), we'd invalidate all + VFS-side files. + */; /** Subdirectory of the VFS's space where "opaque" (randomly-named) files are stored. Changing this effectively invalidates the data @@ -16567,7 +20045,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /* Logging verbosity 3+ == everything, 2 == warnings+errors, 1 == errors only. */ verbosity: 2, - forceReinitIfPreviouslyFailed: false + forceReinitIfPreviouslyFailed: false, + preserveOnInitFailure: false }); /** Logging routines, from most to least serious. */ @@ -16604,7 +20083,17 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ const pool = getPoolForPFile(pFile); pool.log('xCheckReservedLock'); pool.storeErr(); - wasm.poke32(pOut, 1); + const file = pool.getOFileForS3File(pFile); + wasm.poke32( + pOut, + pool.hasReservedLock(file.path) ? 1 : 0 + /* As forum:b2fbb61642 elaborates on why we cannot simply + check file.lockType>=capi.SQLITE_LOCK_RESERVED + here. Summary: xOpen() has long allowed multiple handles to + the same filename and we need to check if any of them have + a lock to avoid a specific corruption case which that forum + thread demonstrates. */ + ); return 0; }, xClose: function(pFile){ @@ -16614,6 +20103,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ if(file) { try{ pool.log(`xClose ${file.path}`); + pool.unlockFile(file, capi.SQLITE_LOCK_NONE); pool.mapS3FileToOFile(pFile, false); file.sah.flush(); if(file.flags & capi.SQLITE_OPEN_DELETEONCLOSE){ @@ -16645,8 +20135,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ pool.log(`xLock ${lockType}`); pool.storeErr(); const file = pool.getOFileForS3File(pFile); - file.lockType = lockType; - return 0; + return pool.lockFile(file, lockType); }, xRead: function(pFile,pDest,n,offset64){ const pool = getPoolForPFile(pFile); @@ -16655,11 +20144,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ pool.log(`xRead ${file.path} ${n} @ ${offset64}`); try { const nRead = file.sah.read( - wasm.heap8u().subarray(pDest, pDest+n), + wasm.heap8u().subarray(Number(pDest), Number(pDest)+n), {at: HEADER_OFFSET_DATA + Number(offset64)} ); if(nRead < n){ - wasm.heap8u().fill(0, pDest + nRead, pDest + n); + wasm.heap8u().fill(0, Number(pDest) + nRead, Number(pDest) + n); return capi.SQLITE_IOERR_SHORT_READ; } return 0; @@ -16700,7 +20189,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ const pool = getPoolForPFile(pFile); pool.log('xUnlock'); const file = pool.getOFileForS3File(pFile); - file.lockType = lockType; + pool.unlockFile(file, lockType); return 0; }, xWrite: function(pFile,pSrc,n,offset64){ @@ -16710,7 +20199,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ pool.log(`xWrite ${file.path} ${n} ${offset64}`); try{ const nBytes = file.sah.write( - wasm.heap8u().subarray(pSrc, pSrc+n), + wasm.heap8u().subarray(Number(pSrc), Number(pSrc)+n), { at: HEADER_OFFSET_DATA + Number(offset64) } ); return n===nBytes ? 0 : toss("Unknown write() failure."); @@ -16781,7 +20270,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ try{ const [cMsg, n] = wasm.scopedAllocCString(e.message, true); wasm.cstrncpy(pOut, cMsg, nOut); - if(n > nOut) wasm.poke8(pOut + nOut - 1, 0); + if(n > nOut) wasm.poke8(wasm.ptr.add(pOut,nOut,-1), 0); }catch(e){ return capi.SQLITE_NOMEM; }finally{ @@ -16794,12 +20283,17 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ xOpen: function f(pVfs, zName, pFile, flags, pOutFlags){ const pool = getPoolForVfs(pVfs); try{ + flags &= ~FLAG_COMPUTE_DIGEST_V2; pool.log(`xOpen ${wasm.cstrToJs(zName)} ${flags}`); // First try to open a path that already exists in the file system. const path = (zName && wasm.peek8(zName)) ? pool.getPath(zName) : getRandomName(); let sah = pool.getSAHForPath(path); + if(sah && (flags & capi.SQLITE_OPEN_CREATE) + && (flags & capi.SQLITE_OPEN_EXCLUSIVE)){ + toss('file already exists:', path); + } if(!sah && (flags & capi.SQLITE_OPEN_CREATE)) { // File not found so try to create it. if(pool.getFileCount() < pool.getCapacity()) { @@ -16832,7 +20326,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ }/*vfsMethods*/; /** - Creates and initializes an sqlite3_vfs instance for an + Creates, initializes, and returns an sqlite3_vfs instance for an OpfsSAHPool. The argument is the VFS's name (JS string). Throws if the VFS name is already registered or if something @@ -16866,7 +20360,6 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /* Inherit certain VFS members from the default VFS, if available. */ opfsVfs.$xRandomness = dVfs.$xRandomness; - opfsVfs.$xSleep = dVfs.$xSleep; dVfs.dispose(); } if(!opfsVfs.$xRandomness && !vfsMethods.xRandomness){ @@ -16874,13 +20367,19 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ vfsMethods.xRandomness = function(pVfs, nOut, pOut){ const heap = wasm.heap8u(); let i = 0; - for(; i < nOut; ++i) heap[pOut + i] = (Math.random()*255000) & 0xFF; + const npOut = Number(pOut); + for(; i < nOut; ++i) heap[npOut + i] = (Math.random()*255000) & 0xFF; return i; }; } - if(!opfsVfs.$xSleep && !vfsMethods.xSleep){ - vfsMethods.xSleep = (pVfs,ms)=>0; - } + /** + This VFS's xSleep() must be a no-op. In this environment, + only db handles within the same thread can ever come into + contention, and that contention cannot be resolved if + one of the handles sleeps in that same thread. + See also: forum:3f0794c5d8 + */ + vfsMethods.xSleep = (pVfs,ms)=>0; sqlite3.vfs.installVfs({ vfs: {struct: opfsVfs, methods: vfsMethods} }); @@ -16888,8 +20387,10 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ }; /** - Class for managing OPFS-related state for the - OPFS SharedAccessHandle Pool sqlite3_vfs. + Class for managing OPFS-related state for the OPFS + SharedAccessHandle Pool sqlite3_vfs. This class is + internal-use-only, never exposed to the client. OpfsSAHPoolUtil + is the public-facing part. */ class OpfsSAHPool { /* OPFS dir in which VFS metadata is stored. */ @@ -16911,11 +20412,14 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /* Set of currently-unused SAHs. */ #availableSAH = new Set(); /* Maps (sqlite3_file*) to xOpen's file objects. */ - #mapS3FileToOFile_ = new Map(); + #mapS3FileToOFile = new Map(); + /* Maps client-side file names to the lock state of the files + opened via this pool: {nShared, lockType}, modelled after + os_unix.c:unixInodeInfo. */ + #mapPathToLock = new Map(); /* Maps SAH to an abstract File Object which contains various metadata about that handle. */ - //#mapSAHToMeta = new Map(); /** Buffer used by [sg]etAssociatedPath(). */ #apBody = new Uint8Array(HEADER_CORPUS_SIZE); @@ -16928,6 +20432,9 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ // Logging verbosity. See optionDefaults.verbosity. #verbosity; + /** + Options are documented in installOpfsSAHPoolVfs(). + */ constructor(options = Object.create(null)){ this.#verbosity = options.verbosity ?? optionDefaults.verbosity; this.vfsName = options.name || optionDefaults.name; @@ -16954,6 +20461,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ warn(...args){this.#logImpl(1, ...args)}; error(...args){this.#logImpl(0, ...args)}; + /* Design note: at the time this method was added, the developer + was unaware that getter syntax was an option: get vfs(){...} */ getVfs(){return this.#cVfs} /* Current pool capacity. */ @@ -16966,22 +20475,10 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ currently-opened client-specified filenames. */ getFileNames(){ const rc = []; - const iter = this.#mapFilenameToSAH.keys(); - for(const n of iter) rc.push(n); + for(const n of this.#mapFilenameToSAH.keys()) rc.push(n); return rc; } -// #createFileObject(sah,clientName,opaqueName){ -// const f = Object.assign(Object.create(null),{ -// clientName, opaqueName -// }); -// this.#mapSAHToMeta.set(sah, f); -// return f; -// } -// #unmapFileObject(sah){ -// this.#mapSAHToMeta.delete(sah); -// } - /** Adds n files to the pool's capacity. This change is persistent across settings. Returns a Promise which resolves @@ -17000,77 +20497,98 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ } /** - Reduce capacity by n, but can only reduce up to the limit - of currently-available SAHs. Returns a Promise which resolves - to the number of slots really removed. + Reduce capacity by n, but can only reduce up to the limit of + currently-available SAHs. Returns a Promise which resolves to + the number of slots really removed. Throws if removal of an + OPFS filesystem entry fails for any reason, in which case the + VFS itself is left in a well-defined state, possibly partially + reduced in capacity compared to before this call, but the file + which was unable to be removed is in an undefined state. It may + be orphaned and/or later recycled. + + As of 3.54, throws if n is an invalid value. Prior to that + an invalid value could cause it to remove all entries. */ async reduceCapacity(n){ + if(!Number.isSafeInteger(n) || n < 0){ + toss('Invalid capacity reduction:', n); + } let nRm = 0; for(const ah of Array.from(this.#availableSAH)){ if(nRm === n || this.getFileCount() === this.getCapacity()){ break; } const name = this.#mapSAHToName.get(ah); - //this.#unmapFileObject(ah); ah.close(); - await this.#dhOpaque.removeEntry(name); this.#mapSAHToName.delete(ah); this.#availableSAH.delete(ah); + await this.#dhOpaque.removeEntry(name); ++nRm; } return nRm; } /** - Releases all currently-opened SAHs. The only legal - operation after this is acquireAccessHandles(). + Releases all currently-opened SAHs. The only legal operation + after this is acquireAccessHandles() or (if this is called from + pauseVfs()) either of isPaused() or unpauseVfs(). */ releaseAccessHandles(){ for(const ah of this.#mapSAHToName.keys()) ah.close(); this.#mapSAHToName.clear(); this.#mapFilenameToSAH.clear(); this.#availableSAH.clear(); + this.#mapS3FileToOFile.clear(); + this.#mapPathToLock.clear(); } /** - Opens all files under this.vfsDir/this.#dhOpaque and acquires - a SAH for each. returns a Promise which resolves to no value - but completes once all SAHs are acquired. If acquiring an SAH - throws, SAHPool.$error will contain the corresponding - exception. + Opens all files under this.vfsDir/this.#dhOpaque and acquires a + SAH for each. Returns a Promise which resolves to no value but + completes once all SAHs are acquired. If acquiring an SAH + throws, this.$error will contain the corresponding Error + object. + + If it throws, it waits for every pending acquisition to settle, + then releases all SAHs it acquired, leaving the VFS in a + well-defined but unusable state. If clearFiles is true, the client-stored state of each file is cleared when its handle is acquired, including its name, flags, and any data stored after the metadata block. */ - async acquireAccessHandles(clearFiles){ + async acquireAccessHandles(clearFiles=false){ const files = []; for await (const [name,h] of this.#dhOpaque){ if('file'===h.kind){ files.push([name,h]); } } - return Promise.all(files.map(async([name,h])=>{ - try{ - const ah = await h.createSyncAccessHandle() - this.#mapSAHToName.set(ah, name); - if(clearFiles){ - ah.truncate(HEADER_OFFSET_DATA); - this.setAssociatedPath(ah, '', 0); + const results = await Promise.allSettled(files.map(async([name,h])=>{ + const ah = await h.createSyncAccessHandle() + this.#mapSAHToName.set(ah, name); + if(clearFiles){ + ah.truncate(HEADER_OFFSET_DATA); + this.setAssociatedPath(ah, '', 0); + }else{ + const path = this.getAssociatedPath(ah); + if(path){ + this.#mapFilenameToSAH.set(path, ah); }else{ - const path = this.getAssociatedPath(ah); - if(path){ - this.#mapFilenameToSAH.set(path, ah); - }else{ - this.#availableSAH.add(ah); - } + this.#availableSAH.add(ah); } - }catch(e){ - this.storeErr(e); - this.releaseAccessHandles(); - throw e; } })); + const failure = results.find((r)=>'rejected'===r.status) + /* If any failures are found then clean up and re-throw the + first one. We "could" record them all but we can only throw + one of them (or an exception wrapping all of them, which + seems unnecessary). */; + if( failure ){ + this.storeErr(failure.reason); + this.releaseAccessHandles(); + throw failure.reason; + } } /** @@ -17096,7 +20614,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ const fileDigest = new Uint32Array(HEADER_DIGEST_SIZE / 4); sah.read(fileDigest, {at: HEADER_OFFSET_DIGEST}); - const compDigest = this.computeDigest(this.#apBody); + const compDigest = this.computeDigest(this.#apBody, flags); + //warn("getAssociatedPath() flags",'0x'+flags.toString(16), "compDigest", compDigest); if(fileDigest.every((v,i) => v===compDigest[i])){ // Valid digest const pathBytes = this.#apBody.findIndex((v)=>0===v); @@ -17105,6 +20624,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ // leaving stale db data laying around. sah.truncate(HEADER_OFFSET_DATA); } + //warn("getAssociatedPath() flags",'0x'+flags.toString(16), "compDigest", compDigest,"pathBytes",pathBytes); return pathBytes ? textDecoder.decode(this.#apBody.subarray(0,pathBytes)) : ''; @@ -17121,17 +20641,39 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ into the given SAH. If path is an empty string then the file is disassociated from the pool but its previous name is preserved in the metadata. + + If nameToRemove is truthy then it must be the "old" name when path + is falsy. This function removes the mapping of that name to an + SAH. */ - setAssociatedPath(sah, path, flags){ + setAssociatedPath(sah, path, flags, nameToRemove){ const enc = textEncoder.encodeInto(path, this.#apBody); if(HEADER_MAX_PATH_SIZE <= enc.written + 1/*NUL byte*/){ toss("Path too long:",path); } + if(path && flags){ + /* When creating or re-writing files, update their digest, if + needed, to v2. We continue to use v1 for the (!path) case + (empty files) because there's little reason not to use a + digest of 0 for empty entries. */ + flags |= FLAG_COMPUTE_DIGEST_V2; + } this.#apBody.fill(0, enc.written, HEADER_MAX_PATH_SIZE); this.#dvBody.setUint32(HEADER_OFFSET_FLAGS, flags); - - const digest = this.computeDigest(this.#apBody); + const digest = this.computeDigest(this.#apBody, flags); + //console.warn("setAssociatedPath(",path,") digest",digest); sah.write(this.#apBody, {at: 0}); + if(nameToRemove){ + /* The placement of this is very specific: between the above + write and the digest. If the above write fails, + nameToRemove remains in the mapping pool. If it succeeds, + nameToRemove is no longer available and needs to be removed + from the SAH mapping. If the write() _below_ fails, that + leaves us with a consistent world view. + + Discussion: bugs:432f260aa787a53 */ + this.#mapFilenameToSAH.delete(nameToRemove); + } sah.write(digest, {at: HEADER_OFFSET_DIGEST}); sah.flush(); @@ -17151,15 +20693,22 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ metadata for each file as a validation check. Changing this algorithm invalidates all existing databases for this VFS, so don't do that. + + See the docs for FLAG_COMPUTE_DIGEST_V2 for more details. */ - computeDigest(byteArray){ - let h1 = 0xdeadbeef; - let h2 = 0x41c6ce57; - for(const v of byteArray){ - h1 = 31 * h1 + (v * 307); - h2 = 31 * h2 + (v * 307); + computeDigest(byteArray, fileFlags){ + if( fileFlags & FLAG_COMPUTE_DIGEST_V2 ){ + let h1 = 0xdeadbeef; + let h2 = 0x41c6ce57; + for(const v of byteArray){ + h1 = Math.imul(h1 ^ v, 2654435761); + h2 = Math.imul(h2 ^ v, 104729); + } + return new Uint32Array([h1>>>0, h2>>>0]); + }else{ + /* this is what the buggy legacy computation worked out to */ + return new Uint32Array([0,0]); } - return new Uint32Array([h1>>>0, h2>>>0]); } /** @@ -17214,9 +20763,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ deletePath(path) { const sah = this.#mapFilenameToSAH.get(path); if(sah) { - // Un-associate the name from the SAH. - this.#mapFilenameToSAH.delete(path); - this.setAssociatedPath(sah, '', 0); + this.setAssociatedPath(sah, '', 0, path); } return !!sah; } @@ -17261,7 +20808,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ xOpen file object. */ getOFileForS3File(pFile){ - return this.#mapS3FileToOFile_.get(pFile); + return this.#mapS3FileToOFile.get(pFile); } /** Maps or unmaps (if file is falsy) the given (sqlite3_file*) @@ -17269,10 +20816,10 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ mapS3FileToOFile(pFile,file){ if(file){ - this.#mapS3FileToOFile_.set(pFile, file); + this.#mapS3FileToOFile.set(pFile, file); setPoolForPFile(pFile, this); }else{ - this.#mapS3FileToOFile_.delete(pFile); + this.#mapS3FileToOFile.delete(pFile); setPoolForPFile(pFile, false); } } @@ -17297,12 +20844,18 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ Removes this object's sqlite3_vfs registration and shuts down this object, releasing all handles, mappings, and whatnot, including deleting its data directory. There is currently no - way to "revive" the object and reaquire its resources. + way to "revive" the object and reaquire its + resources. Similarly, there is no recovery strategy if removal + of any given SAH fails, so such errors are ignored by this + function. This function is intended primarily for testing. Resolves to true if it did its job, false if the VFS has already been shut down. + + @see pauseVfs() + @see unpauseVfs() */ async removeVfs(){ if(!this.#cVfs.pointer || !this.#dhOpaque) return false; @@ -17318,12 +20871,75 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ ); this.#dhVfsRoot = this.#dhVfsParent = undefined; }catch(e){ - sqlite3.config.error(this.vfsName,"removeVfs() failed:",e); + sqlite3.config.error(this.vfsName,"removeVfs() failed with no recovery strategy:",e); /*otherwise ignored - there is no recovery strategy*/ } return true; } + /** + "Pauses" this VFS by unregistering it from SQLite and + relinquishing all open SAHs, leaving the associated files + intact. If this object is already paused, this is a + no-op. Returns this object. + + This function throws if SQLite has any opened file handles + hosted by this VFS, as the alternative would be to invoke + Undefined Behavior by closing file handles out from under the + library. Similarly, automatically closing any database handles + opened by this VFS would invoke Undefined Behavior in + downstream code which is holding those pointers. + + If this function throws due to open file handles then it has + no side effects. If the OPFS API throws while closing handles + then the VFS is left in an undefined state. + + @see isPaused() + @see unpauseVfs() + */ + pauseVfs(){ + if(this.#mapS3FileToOFile.size>0){ + sqlite3.SQLite3Error.toss( + capi.SQLITE_MISUSE, "Cannot pause VFS", + this.vfsName,"because it has opened files." + ); + } + if(this.#mapSAHToName.size>0){ + capi.sqlite3_vfs_unregister(this.vfsName); + this.releaseAccessHandles(); + } + return this; + } + + /** + Returns true if this pool is currently paused else false. + + @see pauseVfs() + @see unpauseVfs() + */ + isPaused(){ + return 0===this.#mapSAHToName.size; + } + + /** + "Unpauses" this VFS, reacquiring all SAH's and (if successful) + re-registering it with SQLite. This is a no-op if the VFS is + not currently paused. + + The returned Promise resolves to this object. See + acquireAccessHandles() for how it behaves if it throws due to + SAH acquisition failure. + + @see isPaused() + @see pauseVfs() + */ + async unpauseVfs(){ + if(0===this.#mapSAHToName.size){ + return this.acquireAccessHandles(false). + then(()=>capi.sqlite3_vfs_register(this.#cVfs, 0),this); + } + return this; + } //! Documented elsewhere in this file. exportFile(name){ @@ -17349,11 +20965,15 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ try{ while( undefined !== (chunk = await callback()) ){ if(chunk instanceof ArrayBuffer) chunk = new Uint8Array(chunk); - if( 0===nWrote && chunk.byteLength>=15 ){ + if( !checkedHeader && 0===nWrote && chunk.byteLength>=15 ){ util.affirmDbHeader(chunk); checkedHeader = true; } - sah.write(chunk, {at: HEADER_OFFSET_DATA + nWrote}); + const n = sah.write(chunk, {at: HEADER_OFFSET_DATA + nWrote}); + if( n!==chunk.byteLength ){ + toss("Expected to write "+chunk.byteLength+ + "bytes but wrote"+n+"."); + } nWrote += chunk.byteLength; } if( nWrote < 512 || 0!==nWrote % 512 ){ @@ -17361,7 +20981,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ } if( !checkedHeader ){ const header = new Uint8Array(20); - sah.read( header, {at: 0} ); + sah.read( header, {at: HEADER_OFFSET_DATA} ); util.affirmDbHeader( header ); } sah.write(new Uint8Array([1,1]), { @@ -17379,24 +20999,19 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ importDb(name, bytes){ if( bytes instanceof ArrayBuffer ) bytes = new Uint8Array(bytes); else if( bytes instanceof Function ) return this.importDbChunked(name, bytes); + util.affirmIsDb(bytes); const sah = this.#mapFilenameToSAH.get(name) || this.nextAvailableSAH() || toss("No available handles to import to."); const n = bytes.byteLength; - if(n<512 || n%512!=0){ - toss("Byte array size is invalid for an SQLite db."); - } - const header = "SQLite format 3"; - for(let i = 0; i < header.length; ++i){ - if( header.charCodeAt(i) !== bytes[i] ){ - toss("Input does not contain an SQLite database header."); - } - } const nWrote = sah.write(bytes, {at: HEADER_OFFSET_DATA}); if(nWrote != n){ this.setAssociatedPath(sah, '', 0); toss("Expected to write "+n+" bytes but wrote "+nWrote+"."); }else{ + sah.truncate(HEADER_OFFSET_DATA + n + /* Ensure no trailing junk when overwriting an + existing file with a shorter one. */); sah.write(new Uint8Array([1,1]), {at: HEADER_OFFSET_DATA+18} /* force db out of WAL mode */); this.setAssociatedPath(sah, name, capi.SQLITE_OPEN_MAIN_DB); @@ -17404,8 +21019,72 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ return nWrote; } - }/*class OpfsSAHPool*/; + /** + Returns true if any (sqlite3_file*) currently opened by this + pool using the given client-provided file name (as distinct from + its opaque name) holds a RESERVED or greater lock, else false. + */ + hasReservedLock(filename){ + const lk = this.#mapPathToLock.get(filename); + return !!lk && lk.lockType>capi.SQLITE_LOCK_SHARED; + } + + /** + Implements xLock() for the given xOpen-generated file object. + This pool holds its SAHs exclusively, so its xOpen() represent + the only connections to a given file. The locks are held + separately from their file object in the same thread the same + way in which os_unix.c:unixLock() distinguishes multiple + connections of a single process which share an inode: a lock + which conflicts with another connection's lock fails with + SQLITE_BUSY, and a failed attempt to get from RESERVED to + EXCLUSIVE leaves a PENDING lock, which admits no new SHARED + locks. + */ + lockFile(file, lockType){ + if(file.lockType>=lockType) return 0; + let lk = this.#mapPathToLock.get(file.path); + if(!lk){ + lk = Object.assign(Object.create(null),{ + nShared: 0, lockType: capi.SQLITE_LOCK_NONE + }); + this.#mapPathToLock.set(file.path, lk); + } + if(file.lockType!==lk.lockType + && (lk.lockType>=capi.SQLITE_LOCK_PENDING + || lockType>capi.SQLITE_LOCK_SHARED)){ + return capi.SQLITE_BUSY; + } + if(lockType===capi.SQLITE_LOCK_SHARED){ + ++lk.nShared; + if(lk.lockType===capi.SQLITE_LOCK_NONE) lk.lockType = lockType; + }else if(lockType===capi.SQLITE_LOCK_EXCLUSIVE && lk.nShared>1){ + if(file.lockType===capi.SQLITE_LOCK_RESERVED){ + file.lockType = lk.lockType = capi.SQLITE_LOCK_PENDING; + } + return capi.SQLITE_BUSY; + }else{ + lk.lockType = lockType; + } + file.lockType = lockType; + return 0; + } + /** Implements xUnlock() for the given xOpen file object. */ + unlockFile(file, lockType){ + if(file.lockType<=lockType) return; + const lk = this.#mapPathToLock.get(file.path); + if(file.lockType>capi.SQLITE_LOCK_SHARED){ + lk.lockType = capi.SQLITE_LOCK_SHARED; + } + if(lockType===capi.SQLITE_LOCK_NONE && 0===--lk.nShared + /* Maintenance reminder: the && ordering is significant */){ + this.#mapPathToLock.delete(file.path); + } + file.lockType = lockType; + } + + }/*class OpfsSAHPool*/; /** A OpfsSAHPoolUtil instance is exposed to clients in order to @@ -17449,6 +21128,10 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ async removeVfs(){ return this.#p.removeVfs() } + pauseVfs(){ this.#p.pauseVfs(); return this; } + async unpauseVfs(){ return this.#p.unpauseVfs().then(()=>this); } + isPaused(){ return this.#p.isPaused() } + }/* class OpfsSAHPoolUtil */; /** @@ -17496,14 +21179,15 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ described at the end of these docs. This function accepts an options object to configure certain - parts but it is only acknowledged for the very first call and - ignored for all subsequent calls. + parts but it is only acknowledged for the very first call for + each distinct name and ignored for all subsequent calls with that + same name. The options, in alphabetical order: - `clearOnInit`: (default=false) if truthy, contents and filename mapping are removed from each SAH it is acquired during - initalization of the VFS, leaving the VFS's storage in a pristine + initialization of the VFS, leaving the VFS's storage in a pristine state. Use this only for databases which need not survive a page reload. @@ -17554,16 +21238,33 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ option is truthy _and_ the previous attempt to initialize this VFS with the same `name` failed, the VFS will attempt to initialize a second time instead of returning the cached - failure. See discussion at: + failure. See discussion at + - `preserveOnInitFailure`: (default=`false`) If truthy, + initialization failure unregisters and disposes of the VFS and + releases acquired handles without also deleting its storage. This + does not undo changes already made during initialization, + including `clearOnInit`. Otherwise, initialization failure + invokes this.removeVfs(), which attempts to delete the + pool. Retrying a cached initialization failure requires + `forceReinitIfPreviouslyFailed`. See discussion at + . + Peculiarities of this VFS vis a vis other SQLite VFSes: - Paths given to it _must_ be absolute. Relative paths will not be properly recognized. This is arguably a bug but correcting it requires some hoop-jumping in routines which have no business - doing such tricks. + doing such tricks. (2026-01-19 (2.5 years later): the specifics + are lost to history, but this was a side effect of xOpen() + receiving an immutable C-string filename, to which no implicit + "/" can be prefixed without causing a discrepancy between what + the user provided and what the VFS stores. Its conceivable that + that quirk could be glossed over in xFullPathname(), but + regressions when doing so cannot be ruled out, so there are no + current plans to change this behavior.) - It is possible to install multiple instances under different names, each sandboxed from one another inside their own private @@ -17586,16 +21287,17 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - byteArray exportFile(name) - Synchronously reads the contents of the given file into a Uint8Array - and returns it. This will throw if the given name is not currently - in active use or on I/O error. Note that the given name is _not_ - visible directly in OPFS (or, if it is, it's not from this VFS). + Synchronously reads the contents of the given file into a + Uint8Array and returns it. This will throw if the given name is + not currently in active use or on I/O error. Because of how this + VFS maps names to storage, the given name is _not_ visible + directly in OPFS (or, if it is, it's not from this VFS). - number getCapacity() - Returns the number of files currently contained - in the SAH pool. The default capacity is only large enough for one - or two databases and their associated temp files. + Returns the number of files currently contained in the SAH + pool. The default capacity is only large enough for one or two + databases and their associated temp files. - number getFileCount() @@ -17612,11 +21314,14 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ Imports the contents of an SQLite database, provided as a byte array or ArrayBuffer, under the given name, overwriting any existing content. Throws if the pool has no available file slots, - on I/O error, or if the input does not appear to be a - database. In the latter case, only a cursory examination is made. + on I/O error, or if the input does not appear to be a database. + In the latter case, only a cursory examination is made to + determine whether the input is a db (and only in non-SEE builds, + as we cannot distinguish encrypted DBs from garbage input). + Results are undefined if the given db name refers to an opened - db. Note that this routine is _only_ for importing database - files, not arbitrary files, the reason being that this VFS will + db. This routine is _only_ for importing database files, not + arbitrary files, the reason being that this VFS will automatically clean up any non-database files so importing them is pointless. @@ -17630,8 +21335,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ VFS-hosted database file. The result of the resolved Promise when called this way is the size of the resulting database. - On succes this routine rewrites the database header bytes in the - output file (not the input array) to force disabling of WAL mode. + On success this routine rewrites the database header bytes in the + output file (not the input array) to force disabling of WAL mode, + (A) for historical reasons and (B) getting WAL to work in this + build requires doing a (pragma locking_mode=exclusive) on the db + before using it. On a write error, the handle is removed from the pool and made available for re-use. @@ -17682,6 +21390,41 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ Clears all client-defined state of all SAHs and makes all of them available for re-use by the pool. Results are undefined if any such handles are currently in use, e.g. by an sqlite3 db. + + APIs specific to the "pause" capability (added in version 3.49): + + Summary: "pausing" the VFS disassociates it from SQLite and + relinquishes its SAHs so that they may be opened by another + instance of this VFS (running in a separate tab/page or Worker). + "Unpausing" it takes back control, if able. + + - pauseVfs() + + "Pauses" this VFS by unregistering it from SQLite and + relinquishing all open SAHs, leaving the associated files intact. + This enables pages/tabs to coordinate semi-concurrent usage of + this VFS. If this object is already paused, this is a + no-op. Returns this object. Throws if SQLite has any opened file + handles hosted by this VFS. If this function throws due to open + file handles then it has no side effects. If the OPFS API throws + while closing handles then the VFS is left in an undefined state. + + - isPaused() + + Returns true if this VFS is paused, else false. + + - [async] unpauseVfs() + + Restores the VFS to an active state after having called + pauseVfs() on it. This is a no-op if the VFS is not paused. The + returned Promise resolves to this object on success. A rejected + Promise means there was a problem reacquiring the SAH handles + (possibly because they're in use by another instance or have + since been removed). Generically speaking, there is no recovery + strategy for that type of error, but if the problem is simply + that the OPFS files are locked, then a later attempt to unpause + it, made after the concurrent instance releases the SAHs, may + recover from the situation. */ sqlite3.installOpfsSAHPoolVfs = async function(options=Object.create(null)){ options = Object.assign(Object.create(null), optionDefaults, (options||{})); @@ -17712,6 +21455,24 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ return (initPromises[vfsName] = Promise.reject(new Error("Missing required OPFS APIs."))); } + /** + An interal detail of OpfsSAHPool, called only by initPromises(). + + Unregisters and disposes of OpfsSAHPool thePool, releasing all + of its SAHs without deleting its files. Used when + initialization fails and the preserveOnInitFailure option is + set. This is a no-op if thePool.getVfs().pointer is falsy. Returns the + undefined value. + */ + const unregisterVfs = (thePool)=>{ + const cVfs = thePool.getVfs(); + if( cVfs?.pointer ){ + capi.sqlite3_vfs_unregister(cVfs.pointer); + cVfs.dispose(); + thePool.releaseAccessHandles(); + } + }; + /** Maintenance reminder: the order of ASYNC ops in this function is significant. We need to have them all chained at the very @@ -17749,7 +21510,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ thePool.log("VFS initialized."); return poolUtil; }).catch(async (e)=>{ - await thePool.removeVfs().catch(()=>{}); + if( options.preserveOnInitFailure ){ + unregisterVfs(thePool); + }else{ + await thePool.removeVfs().catch(()=>{}); + } throw e; }); }).catch((err)=>{ @@ -17758,10 +21523,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ }); }/*installOpfsSAHPoolVfs()*/; }/*sqlite3ApiBootstrap.initializers*/); -/* END FILE: api/sqlite3-vfs-opfs-sahpool.c-pp.js */ -/* BEGIN FILE: api/sqlite3-api-cleanup.js */ /* - 2022-07-22 + 2026-02-20 The author disclaims copyright to this source code. In place of a legal notice, here is a blessing: @@ -17772,66 +21535,193 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ *********************************************************************** - This file is the tail end of the sqlite3-api.js constellation, - intended to be appended after all other sqlite3-api-*.js files so - that it can finalize any setup and clean up any global symbols - temporarily used for setting up the API's various subsystems. + This file is a reimplementation of the "opfs" VFS (as distinct from + "opfs-sahpool") which uses WebLocks for locking instead of a bespoke + Atomics.wait()/notify() protocol. This file holds the "synchronous + half" of the VFS, whereas it shares the "asynchronous half" with the + "opfs" VFS. + + Testing has failed to show any genuine functional difference between + these VFSes other than "opfs-wl" being able to dole out xLock() + requests in a strictly FIFO manner by virtue of WebLocks being + globally managed by the browser. This tends to lead to, but does not + guaranty, fairer distribution of locks. Differences are unlikely to + be noticed except, perhaps, under very high contention. + + This file is intended to be appended to the main sqlite3 JS + deliverable somewhere after opfs-common-shared.c-pp.js. */ 'use strict'; -if('undefined' !== typeof Module){ // presumably an Emscripten build - /** - Install a suitable default configuration for sqlite3ApiBootstrap(). +globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ + if( !sqlite3.opfs || sqlite3.config.disable?.vfs?.['opfs-wl'] ){ + return; + } + const util = sqlite3.util, + toss = sqlite3.util.toss; + const opfsUtil = sqlite3.opfs; + const vfsName = 'opfs-wl'; +/** + installOpfsWlVfs() returns a Promise which, on success, installs an + sqlite3_vfs named "opfs-wl", suitable for use with all sqlite3 APIs + which accept a VFS. It is intended to be called via + sqlite3ApiBootstrap.initializers or an equivalent mechanism. + + This VFS is essentially identical to the "opfs" VFS but uses + WebLocks for its xLock() and xUnlock() implementations. + + Quirks specific to this VFS: + + - The (officially undocumented) 'opfs-wl-disable' URL + argument will disable OPFS, making this function a no-op. + + Aside from locking differences in the VFSes, this function + otherwise behaves the same as + sqlite3-vfs-opfs.c-pp.js:installOpfsVfs(). +*/ +const installOpfsWlVfs = async function(options){ + options = opfsUtil.initOptions(vfsName,options); + if( !options ) return sqlite3; + const capi = sqlite3.capi, + state = opfsUtil.createVfsState(), + opfsVfs = state.vfs, + metrics = opfsVfs.metrics.counters, + mTimeStart = opfsVfs.mTimeStart, + mTimeEnd = opfsVfs.mTimeEnd, + opRun = opfsVfs.opRun, + debug = (...args)=>sqlite3.config.debug(vfsName+":",...args), + warn = (...args)=>sqlite3.config.warn(vfsName+":",...args), + __openFiles = opfsVfs.__openFiles; + + //debug("state",JSON.stringify(options)); + /* + At this point, createVfsState() has populated: + + - state: the configuration object we share with the async proxy. + + - opfsVfs: an sqlite3_vfs instance with lots of JS state attached + to it. + + with any code common to both the "opfs" and "opfs-wl" VFSes. Now + comes the VFS-dependent work... */ - const SABC = Object.assign( - Object.create(null), { - exports: ('undefined'===typeof wasmExports) - ? Module['asm']/* emscripten <=3.1.43 */ - : wasmExports /* emscripten >=3.1.44 */, - memory: Module.wasmMemory /* gets set if built with -sIMPORTED_MEMORY */ + return opfsVfs.bindVfs(util.nu({ + xLock: function(pFile,lockType){ + mTimeStart('xLock'); + //debug("xLock()..."); + const f = __openFiles[pFile]; + const rc = opRun('xLock', pFile, lockType); + if( !rc ) f.lockType = lockType; + mTimeEnd(); + return rc; + }, + xUnlock: function(pFile,lockType){ + mTimeStart('xUnlock'); + const f = __openFiles[pFile]; + const rc = opRun('xUnlock', pFile, lockType); + if( !rc ) f.lockType = lockType; + mTimeEnd(); + return rc; + } + }), function(sqlite3, vfs){ + /* Post-VFS-registration initialization... */ + if(sqlite3.oo1){ + const OpfsWlDb = function(...args){ + const opt = sqlite3.oo1.DB.dbCtorHelper.normalizeArgs(...args); + opt.vfs = vfs.$zName; + sqlite3.oo1.DB.dbCtorHelper.call(this, opt); + }; + OpfsWlDb.prototype = Object.create(sqlite3.oo1.DB.prototype); + sqlite3.oo1.OpfsWlDb = OpfsWlDb; + OpfsWlDb.importDb = opfsUtil.importDb; + /* The "opfs" VFS variant adds a + oo1.DB.dbCtorHelper.setVfsPostOpenCallback() callback to set + a high busy_timeout. That was a design mis-decision and is + inconsistent with sqlite3_open() and friends, but is retained + against the risk of introducing regressions if it's removed. + This variant does not repeat that mistake. + */ + } + })/*bindVfs()*/; +}/*installOpfsWlVfs()*/; +globalThis.sqlite3ApiBootstrap.initializersAsync.push(async (sqlite3)=>{ + return installOpfsWlVfs().catch((e)=>{ + sqlite3.config.warn("Ignoring inability to install the",vfsName,"sqlite3_vfs:",e); + }); +}); +}/*sqlite3ApiBootstrap.initializers.push()*/); +/* + 2022-07-22 + + The author disclaims copyright to this source code. In place of a + legal notice, here is a blessing: + + * May you do good and not evil. + * May you find forgiveness for yourself and forgive others. + * May you share freely, never taking more than you give. + + *********************************************************************** + + This file is the tail end of the sqlite3-api.js constellation, + closing the function scope opened by post-js-header.js. + + In terms of amalgamation code placement, this file is appended + immediately after the final sqlite3-api-*.js piece. Those files + cooperate to prepare sqlite3ApiBootstrap() and this file calls it. + It is run within a context which gives it access to Emscripten's + Module object, after sqlite3.wasm is loaded but before + sqlite3ApiBootstrap() has been called. + + Because this code resides (after building) inside the function + installed by post-js-header.js, it has access to state set up by + pre-js.c-pp.js and friends. +*/ +try{ + /* We are in the closing block of Module.runSQLite3PostLoadInit(), so + its arguments are visible here. */ + + /* Config options for sqlite3ApiBootstrap(). */ + const bootstrapConfig = Object.assign( + Object.create(null), + /** The WASM-environment-dependent configuration for sqlite3ApiBootstrap() */ + { + memory: ('undefined'!==typeof wasmMemory) + ? wasmMemory + : EmscriptenModule['wasmMemory'], + exports: ('undefined'!==typeof wasmExports) + ? wasmExports /* emscripten >=3.1.44 */ + : (Object.prototype.hasOwnProperty.call(EmscriptenModule,'wasmExports') + ? EmscriptenModule['wasmExports'] + : EmscriptenModule['asm']/* emscripten <=3.1.43 */) }, - globalThis.sqlite3ApiConfig || {} + globalThis.sqlite3ApiBootstrap.defaultConfig, // default options + globalThis.sqlite3ApiConfig || {} // optional client-provided options ); + sqlite3InitScriptInfo.debugModule("Bootstrapping lib config", bootstrapConfig); + /** - For current (2022-08-22) purposes, automatically call - sqlite3ApiBootstrap(). That decision will be revisited at some - point, as we really want client code to be able to call this to - configure certain parts. Clients may modify + For purposes of the Emscripten build, call sqlite3ApiBootstrap(). + Ideally clients should be able to inject their own config here, + but that's not practical in this particular build constellation + because of the order everything happens in. Clients may either + define globalThis.sqlite3ApiConfig or modify globalThis.sqlite3ApiBootstrap.defaultConfig to tweak the default configuration used by a no-args call to sqlite3ApiBootstrap(), - but must have first loaded their WASM module in order to be - able to provide the necessary configuration state. + but must have first loaded their WASM module in order to be able + to provide the necessary configuration state. */ - //console.warn("globalThis.sqlite3ApiConfig = ",globalThis.sqlite3ApiConfig); - globalThis.sqlite3ApiConfig = SABC; - let sqlite3; - try{ - sqlite3 = globalThis.sqlite3ApiBootstrap(); - }catch(e){ - console.error("sqlite3ApiBootstrap() error:",e); - throw e; - }finally{ - delete globalThis.sqlite3ApiBootstrap; - delete globalThis.sqlite3ApiConfig; - } - - Module.sqlite3 = sqlite3 /* Needed for customized sqlite3InitModule() to be able to - pass the sqlite3 object off to the client. */; -}else{ - console.warn("This is not running in an Emscripten module context, so", - "globalThis.sqlite3ApiBootstrap() is _not_ being called due to lack", - "of config info for the WASM environment.", - "It must be called manually."); + const p = globalThis.sqlite3ApiBootstrap(bootstrapConfig); + delete globalThis.sqlite3ApiBootstrap; + return p /* the eventual result of globalThis.sqlite3InitModule() */; +}catch(e){ + console.error("sqlite3ApiBootstrap() error:",e); + throw e; } -/* END FILE: api/sqlite3-api-cleanup.js */ -/* END FILE: ./bld/sqlite3-api.c-pp.js */ -/* BEGIN FILE: api/post-js-footer.js */ -/* The current function scope was opened via post-js-header.js, which - gets prepended to this at build-time. This file closes that - scope. */ -}/*Module.runSQLite3PostLoadInit()*/; -/* END FILE: api/post-js-footer.js */ -// end include: ./bld/post-js.speedtest1-vanilla.js + +//console.warn("This is the end of the Module.runSQLite3PostLoadInit handler."); +}/*Module.runSQLite3PostLoadInit(...)*/; +//console.warn("This is the end of the setup of the (pending) Module.runSQLite3PostLoadInit"); +// end include: ./bld/post-js.speedtest1.js // include: postamble_modularize.js // In MODULARIZE mode we wrap the generated code in a factory function @@ -17857,28 +21747,29 @@ if (typeof exports === 'object' && typeof module === 'object') { /* ^^^^ ACHTUNG: blank line at the start is necessary because Emscripten will not add a newline in some cases and we need - a blank line for a sed-based kludge for the ES6 build. */ -/* extern-post-js.js must be appended to the resulting sqlite3.js + a blank line for a sed-based kludge for the ES6 build. + + extern-post-js.js must be appended to the resulting sqlite3.js file. It gets its name from being used as the value for the - --extern-post-js=... Emscripten flag. Note that this code, unlike - most of the associated JS code, runs outside of the - Emscripten-generated module init scope, in the current - global scope. */ + --extern-post-js=... Emscripten flag. This code, unlike most of the + associated JS code, runs outside of the Emscripten-generated module + init scope, in the current global scope. + + At the time this is run, the global-scope sqlite3InitModule + function will have just been defined. +*/ (function(){ + //console.warn("this is extern-post-js"); /** In order to hide the sqlite3InitModule()'s resulting Emscripten module from downstream clients (and simplify our documentation by being able to elide those details), we hide that function and expose a hand-written sqlite3InitModule() to return the sqlite3 object (most of the time). - - Unfortunately, we cannot modify the module-loader/exporter-based - impls which Emscripten installs at some point in the file above - this. */ const originalInit = sqlite3InitModule; if(!originalInit){ - throw new Error("Expecting globalThis.sqlite3InitModule to be defined by the Emscripten build."); + throw new Error("Expecting sqlite3InitModule to be defined by the Emscripten build."); } /** We need to add some state which our custom Module.locateFile() @@ -17891,72 +21782,81 @@ if (typeof exports === 'object' && typeof module === 'object') { into the global scope and delete it when sqlite3InitModule() is called. */ - const initModuleState = globalThis.sqlite3InitModuleState = Object.assign(Object.create(null),{ + const sIMS = globalThis.sqlite3InitModuleState = Object.assign(Object.create(null),{ moduleScript: globalThis?.document?.currentScript, isWorker: ('undefined' !== typeof WorkerGlobalScope), location: globalThis.location, urlParams: globalThis?.location?.href ? new URL(globalThis.location.href).searchParams - : new URLSearchParams() + : new URLSearchParams(), + /* + It is literally impossible to reliably get the name of _this_ script + at runtime, so impossible to reliably derive X.wasm from script name + X.js. (This is apparently why Emscripten hard-codes the name of the + wasm file into their output.) Thus we need, at build-time, to set + the name of the WASM file which our custom instantiateWasm() should to + load. The build process populates this. + + Module.instantiateWasm() is found in pre-js.c-pp.js. + */ + wasmFilename: '<<>>' /* replaced by the build process */ }); - initModuleState.debugModule = - initModuleState.urlParams.has('sqlite3.debugModule') + sIMS.debugModule = + sIMS.urlParams.has('sqlite3.debugModule') ? (...args)=>console.warn('sqlite3.debugModule:',...args) : ()=>{}; - if(initModuleState.urlParams.has('sqlite3.dir')){ - initModuleState.sqlite3Dir = initModuleState.urlParams.get('sqlite3.dir') +'/'; - }else if(initModuleState.moduleScript){ - const li = initModuleState.moduleScript.src.split('/'); + if(sIMS.urlParams.has('sqlite3.dir')){ + sIMS.sqlite3Dir = sIMS.urlParams.get('sqlite3.dir') +'/'; + }else if(sIMS.moduleScript){ + const li = sIMS.moduleScript.src.split('/'); li.pop(); - initModuleState.sqlite3Dir = li.join('/') + '/'; + sIMS.sqlite3Dir = li.join('/') + '/'; } - globalThis.sqlite3InitModule = function ff(...args){ + const sIM = globalThis.sqlite3InitModule = function ff(...args){ //console.warn("Using replaced sqlite3InitModule()",globalThis.location); + sIMS.emscriptenLocateFile = args[0]?.locateFile /* see pre-js.c-pp.js [tag:locateFile] */; + sIMS.emscriptenInstantiateWasm = args[0]?.instantiateWasm /* see pre-js.c-pp.js [tag:locateFile] */; return originalInit(...args).then((EmscriptenModule)=>{ - //console.warn("sqlite3InitModule() returning sqlite3 object."); - EmscriptenModule.runSQLite3PostLoadInit(EmscriptenModule); - const s = EmscriptenModule.sqlite3; - s.scriptInfo = initModuleState; - //console.warn("sqlite3.scriptInfo =",s.scriptInfo); - if(ff.__isUnderTest) s.__isUnderTest = true; - const f = s.asyncPostInit; - delete s.asyncPostInit; - return f(); + sIMS.debugModule("sqlite3InitModule() sIMS =",sIMS); + sIMS.debugModule("sqlite3InitModule() EmscriptenModule =",EmscriptenModule); + const s = EmscriptenModule.runSQLite3PostLoadInit( + sIMS, + EmscriptenModule /* see post-js-header/footer.js */, + !!ff.__isUnderTest + ); + sIMS.debugModule("sqlite3InitModule() sqlite3 =",s); + //const rv = s.asyncPostInit(); + //delete s.asyncPostInit; + return s; }).catch((e)=>{ console.error("Exception loading sqlite3 module:",e); throw e; }); }; - globalThis.sqlite3InitModule.ready = originalInit.ready; + sIM.ready = originalInit.ready; - if(globalThis.sqlite3InitModuleState.moduleScript){ - const sim = globalThis.sqlite3InitModuleState; - let src = sim.moduleScript.src.split('/'); + if(sIMS.moduleScript){ + let src = sIMS.moduleScript.src.split('/'); src.pop(); - sim.scriptDir = src.join('/') + '/'; - } - initModuleState.debugModule('sqlite3InitModuleState =',initModuleState); - if(0){ - console.warn("Replaced sqlite3InitModule()"); - console.warn("globalThis.location.href =",globalThis.location.href); - if('undefined' !== typeof document){ - console.warn("document.currentScript.src =", - document?.currentScript?.src); - } + sIMS.scriptDir = src.join('/') + '/'; } + sIMS.debugModule('extern-post-js.c-pp.js sqlite3InitModuleState =',sIMS); // Emscripten does not inject these module-loader bits in ES6 module // builds and including them here breaks JS bundlers, so elide them // from ESM builds. /* Replace the various module exports performed by the Emscripten glue... */ if (typeof exports === 'object' && typeof module === 'object'){ - module.exports = sqlite3InitModule; + module.exports = sIM; + module.exports.default = sIM; + }else if( 'function'===typeof define && define.amd ){ + define([], ()=>sIM); }else if (typeof exports === 'object'){ - exports["sqlite3InitModule"] = sqlite3InitModule; + exports["sqlite3InitModule"] = sIM; } /* AMD modules get injected in a way we cannot override, so we can't handle those here. */ - return globalThis.sqlite3InitModule /* required for ESM */; + return sIM; })(); diff --git a/workloads/sqlite3-wasm/build/jswasm/speedtest1.wasm b/workloads/sqlite3-wasm/build/jswasm/speedtest1.wasm index 4e7c05953cb804a9684feab2c8c12dcf8bdaf674..9d6db07e2b5caaf01eb48f4eb238bebb55f3d4c8 100644 GIT binary patch literal 960233 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